@firstnoodle-ui/bui 0.0.28 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/dist/bui.css +1 -1
  2. package/dist/components/horizontal-layout/Aside.vue.d.ts +2 -6
  3. package/dist/components/index.d.ts +1 -0
  4. package/dist/components/modal/Modal.vue.d.ts +9 -3
  5. package/dist/components/tree-list/InputNode.vue.d.ts +90 -0
  6. package/dist/components/tree-list/TreeList.vue.d.ts +27 -0
  7. package/dist/components/tree-list/index.d.ts +2 -0
  8. package/dist/components/tree-list/types.d.ts +14 -0
  9. package/dist/index.mjs +6595 -6371
  10. package/package.json +22 -11
  11. package/src/components/application-wrapper/ApplicationWrapper.vue +0 -8
  12. package/src/components/application-wrapper/index.ts +0 -1
  13. package/src/components/aside-section-label/AsideSectionLabel.vue +0 -16
  14. package/src/components/aside-section-label/index.ts +0 -1
  15. package/src/components/button/Button.vue +0 -246
  16. package/src/components/button/NotificationBadge.vue +0 -15
  17. package/src/components/button/components/button-label/ButtonLabel.vue +0 -9
  18. package/src/components/button/components/button-label/index.ts +0 -1
  19. package/src/components/button/components/index.ts +0 -3
  20. package/src/components/button/components/left-group/LeftGroup.vue +0 -5
  21. package/src/components/button/components/left-group/index.ts +0 -1
  22. package/src/components/button/components/notification-badge/NotificationBadge.vue +0 -17
  23. package/src/components/button/components/notification-badge/index.ts +0 -1
  24. package/src/components/button/index.ts +0 -1
  25. package/src/components/button-group/ButtonGroup.vue +0 -97
  26. package/src/components/button-group/index.ts +0 -1
  27. package/src/components/calendar-view/CalendarView.vue +0 -106
  28. package/src/components/calendar-view/components/DateButton.vue +0 -23
  29. package/src/components/calendar-view/components/DecadeView.vue +0 -50
  30. package/src/components/calendar-view/components/MonthView.vue +0 -72
  31. package/src/components/calendar-view/components/NavButton.vue +0 -16
  32. package/src/components/calendar-view/components/YearView.vue +0 -52
  33. package/src/components/calendar-view/composables/useCalendar.ts +0 -138
  34. package/src/components/calendar-view/index.ts +0 -1
  35. package/src/components/calendar-view/utils/enums.ts +0 -31
  36. package/src/components/calendar-view/utils/index.ts +0 -240
  37. package/src/components/calendar-view/utils/types.ts +0 -13
  38. package/src/components/calendar-view/utils/utils/calendar.ts +0 -70
  39. package/src/components/calendar-view/utils/utils/date.ts +0 -130
  40. package/src/components/calendar-view/utils/utils/format.ts +0 -61
  41. package/src/components/calendar-view/utils/utils/time.ts +0 -70
  42. package/src/components/checkbox/Checkbox.vue +0 -51
  43. package/src/components/checkbox/CircleIndicator.vue +0 -26
  44. package/src/components/checkbox/DefaultIndicator.vue +0 -19
  45. package/src/components/checkbox/index.ts +0 -1
  46. package/src/components/collapse/Collapse.vue +0 -114
  47. package/src/components/collapse/index.ts +0 -1
  48. package/src/components/confirm-cancel/ConfirmCancel.vue +0 -66
  49. package/src/components/confirm-cancel/index.ts +0 -1
  50. package/src/components/confirm-cancel/types.ts +0 -18
  51. package/src/components/content-slider/ContentSlider.vue +0 -79
  52. package/src/components/content-slider/index.ts +0 -1
  53. package/src/components/data-point/DataPoint.vue +0 -5
  54. package/src/components/data-point/index.ts +0 -1
  55. package/src/components/delete-button/DeleteButton.vue +0 -19
  56. package/src/components/delete-button/index.ts +0 -1
  57. package/src/components/dialog/Dialog.vue +0 -70
  58. package/src/components/dialog/index.ts +0 -1
  59. package/src/components/fade-in-up/FadeInUp.vue +0 -17
  60. package/src/components/fade-in-up/index.ts +0 -1
  61. package/src/components/filter-chip/FilterChip.vue +0 -28
  62. package/src/components/filter-chip/index.ts +0 -1
  63. package/src/components/first-paint/FirstPaint.vue +0 -21
  64. package/src/components/first-paint/index.ts +0 -1
  65. package/src/components/first-paint/style.scss +0 -23
  66. package/src/components/flexbox/Flexbox.vue +0 -51
  67. package/src/components/flexbox/index.ts +0 -1
  68. package/src/components/horizontal-layout/Aside.vue +0 -114
  69. package/src/components/horizontal-layout/HorizontalLayout.vue +0 -118
  70. package/src/components/horizontal-layout/index.ts +0 -2
  71. package/src/components/icon/Icon.vue +0 -1263
  72. package/src/components/icon/index.ts +0 -1
  73. package/src/components/icon/utils/combine-svgs.cjs +0 -55
  74. package/src/components/icon/utils/combined-svgs.txt +0 -1150
  75. package/src/components/icon/utils/svgs/admin.svg +0 -16
  76. package/src/components/icon/utils/svgs/arrow-deviate.svg +0 -3
  77. package/src/components/icon/utils/svgs/arrow-down-plus.svg +0 -4
  78. package/src/components/icon/utils/svgs/arrow-down.svg +0 -3
  79. package/src/components/icon/utils/svgs/arrow-from.svg +0 -3
  80. package/src/components/icon/utils/svgs/arrow-left.svg +0 -3
  81. package/src/components/icon/utils/svgs/arrow-move.svg +0 -15
  82. package/src/components/icon/utils/svgs/arrow-right.svg +0 -3
  83. package/src/components/icon/utils/svgs/arrow-sub.svg +0 -3
  84. package/src/components/icon/utils/svgs/arrow-trend.svg +0 -15
  85. package/src/components/icon/utils/svgs/arrow-up-plus.svg +0 -4
  86. package/src/components/icon/utils/svgs/arrow-up.svg +0 -3
  87. package/src/components/icon/utils/svgs/authority.svg +0 -5
  88. package/src/components/icon/utils/svgs/beams.svg +0 -5
  89. package/src/components/icon/utils/svgs/bell.svg +0 -15
  90. package/src/components/icon/utils/svgs/bold.svg +0 -3
  91. package/src/components/icon/utils/svgs/box.svg +0 -5
  92. package/src/components/icon/utils/svgs/building.svg +0 -15
  93. package/src/components/icon/utils/svgs/bullet-list.svg +0 -8
  94. package/src/components/icon/utils/svgs/calendar.svg +0 -21
  95. package/src/components/icon/utils/svgs/camera.svg +0 -5
  96. package/src/components/icon/utils/svgs/categories.svg +0 -3
  97. package/src/components/icon/utils/svgs/check-circled.svg +0 -16
  98. package/src/components/icon/utils/svgs/check-outline.svg +0 -15
  99. package/src/components/icon/utils/svgs/check.svg +0 -3
  100. package/src/components/icon/utils/svgs/chevron-down.svg +0 -3
  101. package/src/components/icon/utils/svgs/chevron-left-double.svg +0 -4
  102. package/src/components/icon/utils/svgs/chevron-left.svg +0 -3
  103. package/src/components/icon/utils/svgs/chevron-right-double.svg +0 -4
  104. package/src/components/icon/utils/svgs/chevron-right.svg +0 -3
  105. package/src/components/icon/utils/svgs/chevron-up.svg +0 -3
  106. package/src/components/icon/utils/svgs/clock.svg +0 -4
  107. package/src/components/icon/utils/svgs/close-outline.svg +0 -3
  108. package/src/components/icon/utils/svgs/close.svg +0 -3
  109. package/src/components/icon/utils/svgs/columns.svg +0 -3
  110. package/src/components/icon/utils/svgs/conclusion.svg +0 -17
  111. package/src/components/icon/utils/svgs/copy.svg +0 -16
  112. package/src/components/icon/utils/svgs/crosshair.svg +0 -15
  113. package/src/components/icon/utils/svgs/dash.svg +0 -3
  114. package/src/components/icon/utils/svgs/dashboard.svg +0 -3
  115. package/src/components/icon/utils/svgs/delete.svg +0 -4
  116. package/src/components/icon/utils/svgs/delta.svg +0 -3
  117. package/src/components/icon/utils/svgs/download.svg +0 -3
  118. package/src/components/icon/utils/svgs/drag.svg +0 -8
  119. package/src/components/icon/utils/svgs/drilldown.svg +0 -8
  120. package/src/components/icon/utils/svgs/edit.svg +0 -16
  121. package/src/components/icon/utils/svgs/envelope.svg +0 -3
  122. package/src/components/icon/utils/svgs/error.svg +0 -3
  123. package/src/components/icon/utils/svgs/export-document.svg +0 -16
  124. package/src/components/icon/utils/svgs/filter.svg +0 -6
  125. package/src/components/icon/utils/svgs/filters.svg +0 -4
  126. package/src/components/icon/utils/svgs/flag.svg +0 -3
  127. package/src/components/icon/utils/svgs/folder.svg +0 -15
  128. package/src/components/icon/utils/svgs/frequency.svg +0 -3
  129. package/src/components/icon/utils/svgs/fullscreen-off.svg +0 -3
  130. package/src/components/icon/utils/svgs/fullscreen-on.svg +0 -3
  131. package/src/components/icon/utils/svgs/graduate.svg +0 -3
  132. package/src/components/icon/utils/svgs/hamburger.svg +0 -5
  133. package/src/components/icon/utils/svgs/handshake.svg +0 -15
  134. package/src/components/icon/utils/svgs/heading-1.svg +0 -4
  135. package/src/components/icon/utils/svgs/heading-2.svg +0 -4
  136. package/src/components/icon/utils/svgs/heading.svg +0 -3
  137. package/src/components/icon/utils/svgs/home.svg +0 -3
  138. package/src/components/icon/utils/svgs/id-card.svg +0 -6
  139. package/src/components/icon/utils/svgs/id.svg +0 -4
  140. package/src/components/icon/utils/svgs/indent-left.svg +0 -7
  141. package/src/components/icon/utils/svgs/indent-right.svg +0 -7
  142. package/src/components/icon/utils/svgs/information.svg +0 -17
  143. package/src/components/icon/utils/svgs/italics.svg +0 -3
  144. package/src/components/icon/utils/svgs/itenary.svg +0 -11
  145. package/src/components/icon/utils/svgs/keyboard.svg +0 -11
  146. package/src/components/icon/utils/svgs/lightning.svg +0 -15
  147. package/src/components/icon/utils/svgs/link.svg +0 -4
  148. package/src/components/icon/utils/svgs/list-collapse.svg +0 -6
  149. package/src/components/icon/utils/svgs/list-expand.svg +0 -6
  150. package/src/components/icon/utils/svgs/location.svg +0 -4
  151. package/src/components/icon/utils/svgs/lock-locked.svg +0 -4
  152. package/src/components/icon/utils/svgs/lock-unlocked.svg +0 -4
  153. package/src/components/icon/utils/svgs/magnifying-glass.svg +0 -15
  154. package/src/components/icon/utils/svgs/map.svg +0 -3
  155. package/src/components/icon/utils/svgs/megaphone.svg +0 -3
  156. package/src/components/icon/utils/svgs/message.svg +0 -15
  157. package/src/components/icon/utils/svgs/microscope.svg +0 -3
  158. package/src/components/icon/utils/svgs/moon.svg +0 -3
  159. package/src/components/icon/utils/svgs/new-document.svg +0 -4
  160. package/src/components/icon/utils/svgs/news.svg +0 -15
  161. package/src/components/icon/utils/svgs/numbered-list.svg +0 -7
  162. package/src/components/icon/utils/svgs/open-link.svg +0 -16
  163. package/src/components/icon/utils/svgs/options.svg +0 -5
  164. package/src/components/icon/utils/svgs/page.svg +0 -7
  165. package/src/components/icon/utils/svgs/paper-plane.svg +0 -15
  166. package/src/components/icon/utils/svgs/paper.svg +0 -3
  167. package/src/components/icon/utils/svgs/pen-and-paper.svg +0 -4
  168. package/src/components/icon/utils/svgs/phase.svg +0 -15
  169. package/src/components/icon/utils/svgs/photo.svg +0 -4
  170. package/src/components/icon/utils/svgs/pie-chart.svg +0 -3
  171. package/src/components/icon/utils/svgs/plus.svg +0 -3
  172. package/src/components/icon/utils/svgs/point-left.svg +0 -3
  173. package/src/components/icon/utils/svgs/point-up.svg +0 -3
  174. package/src/components/icon/utils/svgs/popup.svg +0 -16
  175. package/src/components/icon/utils/svgs/question.svg +0 -17
  176. package/src/components/icon/utils/svgs/radio-tower.svg +0 -3
  177. package/src/components/icon/utils/svgs/recycle.svg +0 -3
  178. package/src/components/icon/utils/svgs/redo.svg +0 -3
  179. package/src/components/icon/utils/svgs/refresh.svg +0 -3
  180. package/src/components/icon/utils/svgs/route.svg +0 -3
  181. package/src/components/icon/utils/svgs/rows.svg +0 -3
  182. package/src/components/icon/utils/svgs/scope.svg +0 -7
  183. package/src/components/icon/utils/svgs/settings.svg +0 -16
  184. package/src/components/icon/utils/svgs/share.svg +0 -11
  185. package/src/components/icon/utils/svgs/sign-in.svg +0 -4
  186. package/src/components/icon/utils/svgs/sign-up.svg +0 -3
  187. package/src/components/icon/utils/svgs/sort-down.svg +0 -20
  188. package/src/components/icon/utils/svgs/sort-up.svg +0 -20
  189. package/src/components/icon/utils/svgs/sort.svg +0 -7
  190. package/src/components/icon/utils/svgs/square-solid.svg +0 -3
  191. package/src/components/icon/utils/svgs/star-solid.svg +0 -15
  192. package/src/components/icon/utils/svgs/star.svg +0 -15
  193. package/src/components/icon/utils/svgs/stop-watch.svg +0 -5
  194. package/src/components/icon/utils/svgs/structure.svg +0 -3
  195. package/src/components/icon/utils/svgs/sun.svg +0 -23
  196. package/src/components/icon/utils/svgs/table.svg +0 -3
  197. package/src/components/icon/utils/svgs/tag.svg +0 -15
  198. package/src/components/icon/utils/svgs/team.svg +0 -15
  199. package/src/components/icon/utils/svgs/telescope.svg +0 -15
  200. package/src/components/icon/utils/svgs/trash.svg +0 -6
  201. package/src/components/icon/utils/svgs/triangle-angle.svg +0 -3
  202. package/src/components/icon/utils/svgs/triangle-side.svg +0 -3
  203. package/src/components/icon/utils/svgs/underline.svg +0 -4
  204. package/src/components/icon/utils/svgs/undo.svg +0 -3
  205. package/src/components/icon/utils/svgs/user.svg +0 -16
  206. package/src/components/icon/utils/svgs/venn.svg +0 -3
  207. package/src/components/icon/utils/svgs/video.svg +0 -3
  208. package/src/components/icon/utils/svgs/visibility-off-alt.svg +0 -19
  209. package/src/components/icon/utils/svgs/visibility-off.svg +0 -3
  210. package/src/components/icon/utils/svgs/visibility-on.svg +0 -16
  211. package/src/components/icon/utils/svgs/warning.svg +0 -5
  212. package/src/components/index.ts +0 -45
  213. package/src/components/input/Input.vue +0 -118
  214. package/src/components/input/index.ts +0 -1
  215. package/src/components/input-number/InputNumber.vue +0 -112
  216. package/src/components/input-number/StepButton.vue +0 -23
  217. package/src/components/input-number/index.ts +0 -1
  218. package/src/components/load-spinner/LoadSpinner.vue +0 -13
  219. package/src/components/load-spinner/index.ts +0 -1
  220. package/src/components/modal/Modal.vue +0 -111
  221. package/src/components/modal/index.ts +0 -1
  222. package/src/components/nav-item/NavItem.vue +0 -62
  223. package/src/components/nav-item/index.ts +0 -1
  224. package/src/components/notification/Notification.vue +0 -53
  225. package/src/components/notification/index.ts +0 -1
  226. package/src/components/notification-badge/NotificationBadge.vue +0 -7
  227. package/src/components/notification-badge/index.ts +0 -1
  228. package/src/components/pagination/Pagination.vue +0 -65
  229. package/src/components/pagination/index.ts +0 -1
  230. package/src/components/pop-confirm/PopConfirm.vue +0 -90
  231. package/src/components/pop-confirm/index.ts +0 -1
  232. package/src/components/pop-select/FooterButton.vue +0 -5
  233. package/src/components/pop-select/PopSelect.vue +0 -346
  234. package/src/components/pop-select/ResultFilters.vue +0 -28
  235. package/src/components/pop-select/enums.ts +0 -7
  236. package/src/components/pop-select/index.ts +0 -2
  237. package/src/components/pop-select/option.vue +0 -51
  238. package/src/components/popper/Popper.vue +0 -239
  239. package/src/components/popper/PopperContent.vue +0 -5
  240. package/src/components/popper/index.ts +0 -2
  241. package/src/components/popper/middleware.ts +0 -19
  242. package/src/components/screen-overlay/ScreenOverlay.vue +0 -53
  243. package/src/components/screen-overlay/index.ts +0 -1
  244. package/src/components/scrollbar/Bar.vue +0 -106
  245. package/src/components/scrollbar/ScrollBottomLoader.vue +0 -25
  246. package/src/components/scrollbar/Scrollbar.vue +0 -219
  247. package/src/components/scrollbar/enums.ts +0 -23
  248. package/src/components/scrollbar/index.ts +0 -3
  249. package/src/components/scrollbar/style.scss +0 -77
  250. package/src/components/scrollbar/types.ts +0 -32
  251. package/src/components/select-list/SelectList.vue +0 -476
  252. package/src/components/select-list/components/SelectListFilterChip.vue +0 -34
  253. package/src/components/select-list/components/index.ts +0 -3
  254. package/src/components/select-list/components/option-group/OptionGroup.vue +0 -20
  255. package/src/components/select-list/components/option-group/index.ts +0 -1
  256. package/src/components/select-list/components/select-list-option/SelectListOption.vue +0 -83
  257. package/src/components/select-list/components/select-list-option/index.ts +0 -1
  258. package/src/components/select-list/components/status-cards/error-card/ErrorCard.vue +0 -17
  259. package/src/components/select-list/components/status-cards/error-card/index.ts +0 -1
  260. package/src/components/select-list/components/status-cards/idle-card/IdleCard.vue +0 -11
  261. package/src/components/select-list/components/status-cards/idle-card/index.ts +0 -1
  262. package/src/components/select-list/components/status-cards/index.ts +0 -4
  263. package/src/components/select-list/components/status-cards/loading-card/LoadingCard.vue +0 -10
  264. package/src/components/select-list/components/status-cards/loading-card/index.ts +0 -1
  265. package/src/components/select-list/components/status-cards/no-match-card/NoMatchCard.vue +0 -15
  266. package/src/components/select-list/components/status-cards/no-match-card/index.ts +0 -1
  267. package/src/components/select-list/components/status-cards/status-card/StatusCard.vue +0 -25
  268. package/src/components/select-list/components/status-cards/status-card/index.ts +0 -1
  269. package/src/components/select-list/index.ts +0 -5
  270. package/src/components/select-list/types.ts +0 -49
  271. package/src/components/side-over/SideOver.vue +0 -87
  272. package/src/components/side-over/index.ts +0 -1
  273. package/src/components/status-select/StatusIndicator.vue +0 -78
  274. package/src/components/status-select/StatusSelect.vue +0 -62
  275. package/src/components/status-select/index.ts +0 -1
  276. package/src/components/switch/Switch.vue +0 -52
  277. package/src/components/switch/index.ts +0 -1
  278. package/src/components/tab/Tab.vue +0 -65
  279. package/src/components/tab/index.ts +0 -1
  280. package/src/components/tag/Tag.vue +0 -34
  281. package/src/components/tag/index.ts +0 -1
  282. package/src/components/text-editor/TextEditor.vue +0 -399
  283. package/src/components/text-editor/components/Dialog.vue +0 -11
  284. package/src/components/text-editor/components/FormattingButton.vue +0 -46
  285. package/src/components/text-editor/components/InsertLinkDialog.vue +0 -81
  286. package/src/components/text-editor/components/InsertTextDialog.vue +0 -36
  287. package/src/components/text-editor/components/index.ts +0 -3
  288. package/src/components/text-editor/index.ts +0 -1
  289. package/src/components/text-highlight/TextHighlight.vue +0 -113
  290. package/src/components/text-highlight/index.ts +0 -1
  291. package/src/components/text-viewer/TextViewer.vue +0 -5
  292. package/src/components/text-viewer/index.ts +0 -1
  293. package/src/components/toggle-button/ToggleButton.vue +0 -105
  294. package/src/components/toggle-button/index.ts +0 -1
  295. package/src/components/tooltip/Tooltip.vue +0 -54
  296. package/src/components/tooltip/index.ts +0 -1
  297. package/src/components/types.ts +0 -232
  298. package/src/components/vertical-layout/RunningSection.vue +0 -54
  299. package/src/components/vertical-layout/VerticalLayout.vue +0 -37
  300. package/src/components/vertical-layout/index.ts +0 -3
  301. package/src/components/vertical-layout/types.ts +0 -2
  302. package/src/components/window-frame/WindowFrame.vue +0 -20
  303. package/src/components/window-frame/index.ts +0 -1
  304. package/src/composables/index.ts +0 -5
  305. package/src/composables/useClickOutside.ts +0 -48
  306. package/src/composables/useEscapeKey.ts +0 -12
  307. package/src/composables/useMounted.ts +0 -7
  308. package/src/composables/useNextFrame.ts +0 -10
  309. package/src/composables/useTrapFocus.ts +0 -61
  310. package/src/index.ts +0 -5
  311. package/src/main.css +0 -140
  312. package/src/utils/array.ts +0 -11
  313. package/src/utils/capitalizeFirstLetter.ts +0 -4
  314. package/src/utils/clamp.ts +0 -9
  315. package/src/utils/debounce.ts +0 -8
  316. package/src/utils/index.ts +0 -5
  317. package/src/utils/scrollIntoView.ts +0 -25
  318. package/src/utils/scrollbarWidth.ts +0 -27
@@ -1,50 +0,0 @@
1
- <script setup lang="ts">
2
- import type { CalendarGridItem } from "../utils/types";
3
- import { computed } from "vue";
4
- import { BButton } from "../../button";
5
- import { TimeUnit } from "../utils/utils/time";
6
-
7
- const props = defineProps<{ viewData: CalendarGridItem[] }>();
8
- const emit = defineEmits(["move", "select"]);
9
- const label = computed(() => {
10
- return `${props.viewData[0].label} - ${props.viewData[props.viewData.length - 1].label}`;
11
- });
12
- </script>
13
-
14
- <template>
15
- <div>
16
- <nav class="w-56 grid grid-cols-7">
17
- <BButton
18
- icon="chevron-left"
19
- variant="textSubtle"
20
- @click="emit('move', { amount: -10, unit: TimeUnit.YEAR })"
21
- />
22
- <div class="col-span-5 flex items-center justify-center text-sm">
23
- {{ label }}
24
- </div>
25
- <BButton
26
- icon="chevron-right"
27
- variant="textSubtle"
28
- @click="emit('move', { amount: 10, unit: TimeUnit.YEAR })"
29
- />
30
- </nav>
31
- <main class="w-56 grid grid-cols-2 py-8">
32
- <BButton
33
- v-for="year in viewData"
34
- :key="year.label"
35
- :variant="year.selected ? 'fill' : (year.current ? 'text' : 'textSubtle')"
36
- :label="year.label.toString()"
37
- @mouseup.stop="
38
- emit(
39
- 'select',
40
- {
41
- value: year.label,
42
- unit: TimeUnit.YEAR,
43
- view: TimeUnit.MONTH,
44
- },
45
- )
46
- "
47
- />
48
- </main>
49
- </div>
50
- </template>
@@ -1,72 +0,0 @@
1
- <script setup lang="ts">
2
- import type { CalendarGridItem } from "../utils/types";
3
- import { capitalizeFirstLetter } from "../../../utils/capitalizeFirstLetter";
4
- import { BButton } from "../../button";
5
- import { TimeUnit } from "../utils/utils/time";
6
- import DateButton from "./DateButton.vue";
7
-
8
- defineProps<{
9
- viewData: CalendarGridItem[];
10
- currentMonth: string;
11
- currentYear: number;
12
- weekdays: string[];
13
- }>();
14
-
15
- const emit = defineEmits(["move", "change-view", "select"]);
16
- </script>
17
-
18
- <template>
19
- <div>
20
- <nav class="w-56 grid grid-cols-7">
21
- <BButton
22
- variant="textSubtle"
23
- icon="chevron-left-double"
24
- @click="emit('move', { amount: -1, unit: TimeUnit.YEAR })"
25
- />
26
- <BButton
27
- variant="textSubtle"
28
- icon="chevron-left"
29
- @click="emit('move', { amount: -1, unit: TimeUnit.MONTH })"
30
- />
31
- <div class="col-span-3 h-8 flex items-center justify-center">
32
- <BButton
33
- variant="textSubtle"
34
- :label="capitalizeFirstLetter(currentMonth.slice(0, 3))"
35
- @click="emit('change-view', TimeUnit.YEAR)"
36
- />
37
- <BButton
38
- variant="textSubtle"
39
- :label="currentYear.toString()"
40
- @click="emit('change-view', TimeUnit.DECADE)"
41
- />
42
- </div>
43
- <BButton
44
- variant="textSubtle"
45
- icon="chevron-right"
46
- @click="emit('move', { amount: 1, unit: TimeUnit.MONTH })"
47
- />
48
- <BButton
49
- variant="textSubtle"
50
- icon="chevron-right-double"
51
- @click="emit('move', { amount: 1, unit: TimeUnit.YEAR })"
52
- />
53
- </nav>
54
- <header class="w-56 grid grid-cols-7 bg-bg-medium rounded my-2">
55
- <div
56
- v-for="day in weekdays"
57
- :key="day"
58
- class="flex items-center justify-center w-8 h-6 text-muted text-xs select-none"
59
- >
60
- {{ day.slice(0, 1).toUpperCase() }}
61
- </div>
62
- </header>
63
- <main class="w-56 grid grid-cols-7">
64
- <DateButton
65
- v-for="dateItem in viewData"
66
- :key="dateItem.date"
67
- :date="dateItem"
68
- @click="emit('select', dateItem)"
69
- />
70
- </main>
71
- </div>
72
- </template>
@@ -1,16 +0,0 @@
1
- <script setup lang="ts">
2
- import type { TIcon } from "../../types";
3
- import { BButton } from "../../button";
4
-
5
- defineProps<{ icon: TIcon }>();
6
-
7
- const emit = defineEmits(["click"]);
8
- </script>
9
-
10
- <template>
11
- <BButton
12
- :icon="icon"
13
- variant="textSubtle"
14
- @click="emit('click')"
15
- />
16
- </template>
@@ -1,52 +0,0 @@
1
- <script setup lang="ts">
2
- import type { CalendarGridItem } from "../utils/types";
3
- import { capitalizeFirstLetter } from "../../../utils/capitalizeFirstLetter";
4
- import { BButton } from "../../button";
5
- import { TimeUnit } from "../utils/utils/time";
6
-
7
- defineProps<{
8
- viewData: CalendarGridItem[];
9
- currentYear: number;
10
- }>();
11
- const emit = defineEmits(["move", "select"]);
12
- </script>
13
-
14
- <template>
15
- <div>
16
- <nav class="w-56 grid grid-cols-7">
17
- <BButton
18
- icon="chevron-left"
19
- variant="textSubtle"
20
- @click="emit('move', { amount: -1, unit: 'YEAR' })"
21
- />
22
- <div
23
- class="col-span-5 text-sm flex justify-center items-center"
24
- >
25
- {{ currentYear }}
26
- </div>
27
- <BButton
28
- icon="chevron-right"
29
- variant="textSubtle"
30
- @click="emit('move', { amount: 1, unit: 'YEAR' })"
31
- />
32
- </nav>
33
- <main class="w-56 grid grid-cols-2 py-4">
34
- <BButton
35
- v-for="(month, monthIndex) in viewData"
36
- :key="month.label"
37
- :variant="month.selected ? 'fill' : (month.current ? 'text' : 'textSubtle')"
38
- :label="capitalizeFirstLetter(month.label.toString())"
39
- @click="
40
- emit(
41
- 'select',
42
- {
43
- value: monthIndex,
44
- unit: TimeUnit.MONTH,
45
- view: TimeUnit.MONTH,
46
- },
47
- )
48
- "
49
- />
50
- </main>
51
- </div>
52
- </template>
@@ -1,138 +0,0 @@
1
- import type { Direction } from "../utils/enums";
2
- import type { CalendarGridItem, CalendarOptions } from "../utils/types";
3
- import { onBeforeMount, ref } from "vue";
4
- import { Calendar } from "../utils";
5
- import { TimeUnit } from "../utils/utils/time";
6
-
7
- export enum ViewType {
8
- DATE = TimeUnit.DAY,
9
- WEEK = TimeUnit.WEEK,
10
- MONTH = TimeUnit.MONTH,
11
- YEAR = TimeUnit.YEAR,
12
- DECADE = TimeUnit.DECADE,
13
- }
14
-
15
- export const useCalendar = (value: string | Date | null = null, options: CalendarOptions) => {
16
-
17
- const calendar = new Calendar(options, value);
18
- const viewData = ref<CalendarGridItem[] | []>([]);
19
- const viewType = ref<ViewType>(ViewType.MONTH);
20
- const viewMonth = ref<string>("");
21
- const viewYear = ref<number>(0);
22
-
23
- const changeView = (type: ViewType): void => {
24
- if (!Object.keys(ViewType).includes(type)) {
25
- console.warn(`[changeView] wrong view type: ${type}`);
26
- return;
27
- }
28
-
29
- viewType.value = type;
30
-
31
- switch (type) {
32
- case ViewType.DATE:
33
- // TODO
34
- break;
35
- case ViewType.WEEK:
36
- viewData.value = calendar.getDatesInCurrentWeek();
37
- break;
38
- case ViewType.MONTH:
39
- viewData.value = calendar.getDatesInCurrentMonth();
40
- break;
41
- case ViewType.YEAR:
42
- viewData.value = calendar.getMonthsInCurrentYear();
43
- break;
44
- case ViewType.DECADE:
45
- viewData.value = calendar.getYearsInCurrentDecade();
46
- break;
47
- }
48
- };
49
-
50
- const updateView = () => {
51
- changeView(viewType.value);
52
- viewMonth.value = calendar.getDateCursorMonthName();
53
- viewYear.value = calendar.dateCursor!.getUTCFullYear();
54
- };
55
-
56
- const setSelectedDate = (date: string | Date | null): void => {
57
- calendar.setSelectedDate(date);
58
- updateView();
59
- };
60
-
61
- onBeforeMount(() => {
62
- setSelectedDate(value);
63
- changeView(viewType.value);
64
- });
65
-
66
- const moveRequest = (direction: Direction, keepCurrentView: boolean = false) => {
67
- // TODO: create eventListener for calendar
68
- calendar.moveSelectedDate(direction);
69
-
70
- // change back to DateView (if on month or year)
71
- if (!keepCurrentView && viewType.value !== ViewType.MONTH) {
72
- changeView(ViewType.DATE);
73
- }
74
- else {
75
- updateView();
76
- }
77
- };
78
-
79
- /**
80
- * Move viewDate (or parts of viewDate: date, month, year) by specified amount
81
- */
82
- const moveViewDate = ({ amount, unit }: { amount: number; unit: TimeUnit }): void => {
83
- switch (unit) {
84
- case TimeUnit.DAY:
85
- calendar.addDaysToDateCursor(amount);
86
- break;
87
- case TimeUnit.WEEK:
88
- calendar.addWeeksToDateCursor(amount);
89
- break;
90
- case TimeUnit.MONTH:
91
- calendar.addMonthsToDateCursor(amount);
92
- break;
93
- case TimeUnit.YEAR:
94
- calendar.addYearsToDateCursor(amount);
95
- break;
96
- default:
97
- throw new Error(`[moveViewDate] unknown unit: ${unit}`);
98
- }
99
- updateView();
100
- };
101
-
102
- const setViewDate = (value: number, unit: TimeUnit): void => {
103
- switch (unit) {
104
- case TimeUnit.DAY:
105
- calendar.setDateCursorDate(value);
106
- break;
107
- case TimeUnit.MONTH:
108
- calendar.setDateCursorMonth(value);
109
- break;
110
- case TimeUnit.YEAR:
111
- calendar.setDateCursorYear(value);
112
- break;
113
- default:
114
- console.error(`[setViewDate] unknown unit: ${unit}`);
115
- return;
116
- }
117
- updateView();
118
- };
119
-
120
- const setViewDateAndChangeView = ({ value, unit, view }: { value: number; unit: TimeUnit; view: ViewType }): void => {
121
- setViewDate(value, unit);
122
- changeView(view);
123
- };
124
-
125
- return {
126
- selectedDate: calendar.selectedDate,
127
- viewData,
128
- viewType,
129
- viewMonth,
130
- viewYear,
131
- changeView,
132
- moveRequest,
133
- moveViewDate,
134
- setSelectedDate,
135
- setViewDate,
136
- setViewDateAndChangeView,
137
- };
138
- };
@@ -1 +0,0 @@
1
- export { default as BCalendarView } from "./CalendarView.vue";
@@ -1,31 +0,0 @@
1
- export enum Month {
2
- JANUARY = "january",
3
- FEBRUARY = "february",
4
- MARCH = "march",
5
- APRIL = "april",
6
- MAY = "may",
7
- JUNE = "june",
8
- JULY = "july",
9
- AUGUST = "august",
10
- SEPTEMBER = "september",
11
- OCTOBER = "october",
12
- NOVEMBER = "november",
13
- DECEMBER = "december",
14
- };
15
-
16
- export enum Weekday {
17
- SUNDAY = "sunday",
18
- MONDAY = "monday",
19
- TUESDAY = "tuesday",
20
- WEDNESDAY = "wednesday",
21
- THURSDAY = "thursday",
22
- FRIDAY = "friday",
23
- SATURDAY = "saturday",
24
- };
25
-
26
- export enum Direction {
27
- UP = "up",
28
- DOWN = "down",
29
- LEFT = "left",
30
- RIGHT = "right",
31
- };
@@ -1,240 +0,0 @@
1
- import type { CalendarGridItem, CalendarOptions } from "./types.ts";
2
- import { loopRange } from "../../../utils/array.ts";
3
- import { Direction, Month, Weekday } from "./enums.ts";
4
- import { datesAreEqual, getDecade, moveDate, parseDate } from "./utils/date";
5
- import { TimeUnit } from "./utils/time";
6
-
7
- const COLUMN_COUNT: number = 7;
8
- const ROW_COUNT: number = 6;
9
- const CELL_COUNT: number = COLUMN_COUNT * ROW_COUNT;
10
-
11
- export class Calendar {
12
- options: CalendarOptions;
13
- today: Date;
14
- selectedDate: Date | null;
15
- dateCursor: Date | null;
16
-
17
- constructor(options: CalendarOptions, date: string | Date | null = null) {
18
- this.options = options;
19
- if (!("weekstart" in options)) {
20
- this.options.weekStart = Object.values(Weekday).indexOf(Weekday.MONDAY);
21
- }
22
-
23
- const d = new Date();
24
- this.today = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));
25
- this.selectedDate = null;
26
- this.dateCursor = null;
27
- // this.dateCursor = this.today
28
-
29
- if (date) {
30
- try {
31
- const parsedDate = parseDate(date);
32
- this.setSelectedDate(parsedDate);
33
- }
34
- catch (error) {
35
- console.error(error);
36
- }
37
- }
38
- else {
39
- this.setSelectedDate(this.today);
40
- }
41
- }
42
-
43
- addDaysToDateCursor(days: number): void {
44
- this.dateCursor!.setUTCDate(this.dateCursor!.getUTCDate() + days);
45
- }
46
-
47
- addWeeksToDateCursor(weeks: number): void {
48
- this.addDaysToDateCursor(weeks * 7);
49
- }
50
-
51
- addMonthsToDateCursor(months: number): void {
52
- const currentMonth = this.dateCursor!.getUTCMonth();
53
- const requestedMonth = loopRange(currentMonth + months, Object.values(Month).length);
54
-
55
- // TODO: revisit this - it doesn't seem to be the right solution..
56
- // change year ?
57
- const deltaMonths = currentMonth - requestedMonth;
58
- if (Math.abs(deltaMonths) > 1) {
59
- if (deltaMonths >= 0) {
60
- this.addYearsToDateCursor(1);
61
- }
62
- else {
63
- this.addYearsToDateCursor(-1);
64
- }
65
- }
66
- this.dateCursor!.setUTCMonth(requestedMonth);
67
- }
68
-
69
- addYearsToDateCursor(years: number): void {
70
- this.dateCursor!.setFullYear(this.dateCursor!.getUTCFullYear() + years);
71
- }
72
-
73
- getDatesInCurrentMonth(): CalendarGridItem[] {
74
- const cursor = new Date(
75
- Date.UTC(
76
- this.dateCursor!.getUTCFullYear(),
77
- this.dateCursor!.getUTCMonth(),
78
- 1,
79
- ),
80
- );
81
-
82
- // find and set calendar grid start date
83
- const startDate = !(cursor.getUTCDay() - this.options.weekStart!)
84
- ? 7
85
- : loopRange(
86
- cursor.getUTCDay() - this.options.weekStart!,
87
- Object.values(Weekday).length,
88
- );
89
-
90
- cursor.setUTCDate(cursor.getUTCDate() - startDate);
91
-
92
- const dates: CalendarGridItem[] = [];
93
-
94
- for (let row = 0; row < CELL_COUNT; row++) {
95
- dates.push({
96
- label: cursor.getUTCDate(),
97
- date: cursor.toUTCString(),
98
- disabled: this.options.disabledDates
99
- ? this.options.disabledDates.some(fn => fn(cursor))
100
- : false,
101
- inactive: cursor.getUTCMonth() !== this.dateCursor!.getUTCMonth(),
102
- selected: Boolean(this.selectedDate) && datesAreEqual(cursor, this.selectedDate as Date),
103
- current: datesAreEqual(cursor, this.today),
104
- });
105
- cursor.setUTCDate(cursor.getUTCDate() + 1);
106
- }
107
- return dates;
108
- }
109
-
110
- getDatesInCurrentWeek(): CalendarGridItem[] {
111
- // TODO
112
- let cursor = new Date(
113
- Date.UTC(
114
- this.dateCursor!.getUTCFullYear(),
115
- this.dateCursor!.getUTCMonth(),
116
- this.dateCursor!.getUTCDate(),
117
- ),
118
- );
119
- const offset = loopRange(
120
- cursor.getUTCDay() - this.options.weekStart!,
121
- Object.values(Weekday).length,
122
- );
123
- cursor = moveDate(cursor, -offset, TimeUnit.DAY);
124
-
125
- const dates: CalendarGridItem[] = [];
126
- // populate grid
127
- for (let i = 0; i < 7; i++) {
128
- dates.push({
129
- label: cursor.getUTCDate(),
130
- date: cursor.toUTCString(),
131
- disabled: this.options.disabledDates
132
- ? this.options.disabledDates.some(fn => fn(cursor))
133
- : false,
134
- inactive:
135
- cursor.getUTCMonth() !== this.dateCursor!.getUTCMonth(),
136
- selected: Boolean(this.selectedDate) && datesAreEqual(cursor, this.selectedDate as Date),
137
- current: datesAreEqual(cursor, this.today),
138
- });
139
- cursor.setUTCDate(cursor.getUTCDate() + 1);
140
- }
141
- return dates;
142
- }
143
-
144
- getMonthsInCurrentYear(): CalendarGridItem[] {
145
- const monthList: CalendarGridItem[] = [];
146
-
147
- for (const [index, month] of Object.values(Month).entries()) {
148
- monthList.push({
149
- label: month,
150
- current:
151
- index === this.today.getUTCMonth()
152
- && this.dateCursor!.getUTCFullYear()
153
- === this.today.getUTCFullYear(),
154
- });
155
- }
156
- return monthList;
157
- }
158
-
159
- getDateCursorMonthName(): string {
160
- return Object.values(Month)[this.dateCursor!.getUTCMonth()];
161
- }
162
-
163
- getYearsInCurrentDecade(): CalendarGridItem[] {
164
- const yearGrid: CalendarGridItem[] = [];
165
-
166
- const decade = getDecade(this.dateCursor as Date);
167
-
168
- // TODO: use array range
169
- for (const digit of [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
170
- const year = decade + digit;
171
- yearGrid.push({
172
- label: year,
173
- current: this.today.getUTCFullYear() === year,
174
- });
175
- }
176
- return yearGrid;
177
- }
178
-
179
- moveSelectedDate(direction: Direction): void {
180
- let tempDate = new Date(
181
- Date.UTC(
182
- this.selectedDate!.getUTCFullYear(),
183
- this.selectedDate!.getUTCMonth(),
184
- this.selectedDate!.getUTCDate(),
185
- ),
186
- );
187
- switch (direction) {
188
- case Direction.UP:
189
- tempDate = moveDate(tempDate, -7, TimeUnit.DAY);
190
- break;
191
- case Direction.DOWN:
192
- tempDate = moveDate(tempDate, 7, TimeUnit.DAY);
193
- break;
194
- case Direction.LEFT:
195
- tempDate = moveDate(tempDate, -1, TimeUnit.DAY);
196
- break;
197
- case Direction.RIGHT:
198
- tempDate = moveDate(tempDate, 1, TimeUnit.DAY);
199
- break;
200
- default:
201
- throw new Error(`Direction [${direction}] not accepted`);
202
- }
203
-
204
- if (this.options.disabledDates && this.options.disabledDates.some(fn => fn(tempDate))) {
205
- return;
206
- }
207
-
208
- this.setSelectedDate(tempDate);
209
- }
210
-
211
- setSelectedDate(date: string | Date | null): void {
212
- if (date) {
213
- this.selectedDate = parseDate(date);
214
- this.dateCursor = new Date(
215
- Date.UTC(
216
- this.selectedDate!.getUTCFullYear(),
217
- this.selectedDate!.getUTCMonth(),
218
- this.selectedDate!.getUTCDate(),
219
- ),
220
- );
221
- }
222
- else {
223
- this.selectedDate = null;
224
- this.dateCursor = new Date();
225
- }
226
-
227
- }
228
-
229
- setDateCursorDate(date: number): void {
230
- this.dateCursor!.setUTCDate(date);
231
- }
232
-
233
- setDateCursorMonth(month: number): void {
234
- this.dateCursor!.setUTCMonth(month);
235
- }
236
-
237
- setDateCursorYear(year: number): void {
238
- this.dateCursor!.setFullYear(year);
239
- }
240
- }
@@ -1,13 +0,0 @@
1
- export type CalendarOptions = {
2
- weekStart?: number;
3
- disabledDates?: ((date: Date) => boolean)[] | any[];
4
- };
5
-
6
- export type CalendarGridItem = {
7
- label: number | string;
8
- current: boolean;
9
- date?: string;
10
- disabled?: boolean;
11
- inactive?: boolean;
12
- selected?: boolean;
13
- };
@@ -1,70 +0,0 @@
1
- import { range } from "../../../../utils/array";
2
- import { Weekday } from "../enums";
3
- import { parseDate } from "./date";
4
-
5
- /**
6
- * Premade disable-function to disable weekend (saturday and sunday)
7
- */
8
- export const isWeekend = (date: string | Date): boolean | null => {
9
- const parsedDate = parseDate(date);
10
- if (!parsedDate) return null;
11
- const dayIndex: number = parsedDate.getUTCDay();
12
- return dayIndex === 0 || dayIndex === 6;
13
- };
14
-
15
- /**
16
- * Premade disable-function to disable workdays (monday - friday)
17
- */
18
- export const disableWorkDays = (date: string | Date): boolean | null => {
19
- const parsedDate = parseDate(date);
20
-
21
- if (!parsedDate) return null;
22
-
23
- const dayIndex = parsedDate.getUTCDay();
24
- const weekDays: number[] = range(1, 5);
25
- return weekDays.includes(dayIndex);
26
- };
27
-
28
- /**
29
- * Get index of weekday - fx 3 for 'wednesday'
30
- */
31
- export const getWeekdayIndex = (weekDayString: string): number => {
32
- const weekdays = Object.values(Weekday) as string[];
33
-
34
- if (!weekdays.includes(weekDayString.toLowerCase())) {
35
- throw new Error(`Invalid weekday [${weekDayString}]`);
36
- }
37
-
38
- return weekdays.indexOf(weekDayString);
39
- };
40
-
41
- /**
42
- * Premade disable-function to disable specific weekDay
43
- * Accepts both an integer 0-6 or a string fx 'monday'
44
- */
45
- export const disableWeekday = (weekDay: number | string): (date: string | Date) => boolean | null => {
46
- let dayIndex: number | null;
47
-
48
- if (typeof weekDay === "string") {
49
- dayIndex = getWeekdayIndex(weekDay);
50
- }
51
- else {
52
- dayIndex = weekDay;
53
- }
54
-
55
- return (date: string | Date): boolean | null => {
56
- const parsedDate = parseDate(date);
57
- if (!parsedDate) return null;
58
- return parsedDate.getUTCDay() === dayIndex;
59
- };
60
- };
61
-
62
- /**
63
- * Return the weekday from a date string or object
64
- * Monday
65
- */
66
- export const getWeekday = (value: string | Date): string => {
67
- const d = new Date(value);
68
- const day = new Intl.DateTimeFormat("en-001", { weekday: "long" }).format(d);
69
- return `${day}`;
70
- };