@firstnoodle-ui/bui 0.0.28 → 0.0.32

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 +6598 -6369
  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,130 +0,0 @@
1
- import { parseTimeUnit, TimeInMilliseconds, TimeUnit } from "./time.ts";
2
-
3
- type StringOrDate = string | Date;
4
-
5
- export const parseDate = (date: StringOrDate): Date => {
6
- if (typeof date === "string") date = date.replace(/-/g, "\/");
7
-
8
- const d = new Date(date);
9
- const dateIsValid = !Number.isNaN(d.getTime()) && !d.toString().includes("Thu Jan 01 1970");
10
-
11
- if (dateIsValid) {
12
- return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
13
- }
14
- throw new Error(`Invalid date [${date}]`);
15
- };
16
-
17
- export const dateDelta = (date1: StringOrDate, date2: StringOrDate, timeUnit: TimeUnit): number | null => {
18
- if (date1 == null || date2 == null) return null;
19
-
20
- date1 = parseDate(date1);
21
- date2 = parseDate(date2);
22
- const unit: keyof typeof TimeUnit | null = parseTimeUnit(timeUnit);
23
-
24
- if (!date1 || !date2 || !unit) {
25
- return null;
26
- }
27
- if (unit === TimeUnit.MONTH || unit === TimeUnit.YEAR) {
28
- throw new Error("Cannot calculate delta in months or years");
29
- }
30
-
31
- const deltaMilliseconds = date1.getTime() - date2.getTime();
32
-
33
- return deltaMilliseconds / TimeInMilliseconds[unit];
34
- };
35
-
36
- export const datesAreEqual = (date1: Date, date2: Date): boolean => {
37
- date1 = parseDate(date1);
38
- date2 = parseDate(date2);
39
-
40
- if (!date1 || !date2) return false;
41
-
42
- return (
43
- date1.getUTCFullYear() === date2.getUTCFullYear()
44
- && date1.getUTCMonth() === date2.getUTCMonth()
45
- && date1.getUTCDate() === date2.getUTCDate()
46
- );
47
- };
48
-
49
- export const dateIsAfter = (subjectDate: StringOrDate, targetDate: StringOrDate, includeTarget: boolean = false): boolean => {
50
- subjectDate = parseDate(subjectDate);
51
- targetDate = parseDate(targetDate);
52
-
53
- return subjectDate.getTime() > targetDate.getTime() || (includeTarget && datesAreEqual(subjectDate, targetDate));
54
- };
55
-
56
- export const dateIsBefore = (subjectDate: StringOrDate, targetDate: StringOrDate, includeTarget: boolean = false): boolean => {
57
- subjectDate = parseDate(subjectDate);
58
- targetDate = parseDate(targetDate);
59
-
60
- return subjectDate.getTime() < targetDate.getTime() || (includeTarget && datesAreEqual(subjectDate, targetDate));
61
- };
62
-
63
- export const dateIsBetween = (subjectDate: StringOrDate, startDate: StringOrDate, endDate: StringOrDate, includeStartAndEndDates: boolean = false): boolean => {
64
- return dateIsAfter(subjectDate, startDate, includeStartAndEndDates) && dateIsBefore(subjectDate, endDate, includeStartAndEndDates);
65
- };
66
-
67
- export const getDecade = (date: Date): number => {
68
- date = parseDate(date);
69
- return Math.floor(date.getUTCFullYear() / 10) * 10;
70
- };
71
-
72
- export const getWeekNumber = (date: Date): number => {
73
- const parsedDate = parseDate(date);
74
-
75
- // Set to nearest Thursday: current date + 4 - current day number
76
- // Make Sunday's day number 7
77
- parsedDate.setUTCDate(parsedDate.getUTCDate() + 4 - (parsedDate.getUTCDay() || 7));
78
-
79
- // Get first day of year
80
- const yearStart = new Date(Date.UTC(parsedDate.getUTCFullYear(), 0, 1));
81
-
82
- if (parsedDate && yearStart) {
83
- ;
84
- // Calculate full weeks to nearest Thursday
85
- const weekNumber = Math.ceil(((parsedDate.getTime() - yearStart.getTime()) / TimeInMilliseconds.DAY + 1) / 7);
86
- return weekNumber;
87
- }
88
-
89
- return 0;
90
- };
91
-
92
- export const moveDate = (date: StringOrDate, value: number, unit: TimeUnit): Date => {
93
- const parsedDate = parseDate(date);
94
- const parsedUnit = parseTimeUnit(unit);
95
-
96
- if (parsedUnit === TimeUnit.MONTH) throw new Error("Cannot move date by month");
97
-
98
- let unixTime = parsedDate.getTime();
99
- unixTime += value * TimeInMilliseconds[parsedUnit as keyof typeof TimeInMilliseconds];
100
- parsedDate.setTime(unixTime);
101
-
102
- return parsedDate;
103
- };
104
-
105
- export const printDate = (date: Date): void => {
106
- // eslint-disable-next-line no-console
107
- console.log(
108
- date
109
- .toISOString()
110
- .substr(0, 16)
111
- .replace("T", " "),
112
- );
113
- };
114
-
115
- export const stringifyDate = (date: StringOrDate): string | null => {
116
- const parsedDate = parseDate(date);
117
- if (!parsedDate) return null;
118
-
119
- return parsedDate.toISOString().substring(0, 10);
120
- };
121
-
122
- export const stringifyDatetime = (date: StringOrDate): string | null => {
123
- date = parseDate(date);
124
- if (!date) return null;
125
-
126
- return date
127
- .toISOString()
128
- .substring(0, 16)
129
- .replace("T", " ");
130
- };
@@ -1,61 +0,0 @@
1
- /**
2
- * Format a date string or object to a readable format (with optional day and time)
3
- * (Mon) 04 Oct 2021 (23:59)
4
- */
5
- const formatDateTimeReadable = (value: string | Date, includeDay: boolean = true, includeTime = false): string => {
6
- const d = new Date(value);
7
- const day = new Intl.DateTimeFormat("en-001", { weekday: "short" }).format(d);
8
- const date = d.getDate().toString().padStart(2, "0");
9
- const month = new Intl.DateTimeFormat("en-001", { month: "short" }).format(d);
10
- const year = d.getFullYear();
11
- const hours = d.getHours().toString().padStart(2, "0");
12
- const minutes = d.getMinutes().toString().padStart(2, "0");
13
-
14
- let result = `${date} ${month} ${year}`;
15
-
16
- includeDay && (result = `${day} ${result}`);
17
- includeTime && (result = `${result} ${hours}:${minutes}`);
18
-
19
- return result;
20
- };
21
-
22
- export const readableDate = (value: string | Date): string => formatDateTimeReadable(value, false, false);
23
- export const readableDateWithDay = (value: string | Date): string => formatDateTimeReadable(value, true, false);
24
- export const readableDateTime = (value: string | Date): string => formatDateTimeReadable(value, false, true);
25
- export const readableDateTimeWithDay = (value: string | Date): string => formatDateTimeReadable(value, true, true);
26
-
27
- /**
28
- * Format a date string or object to the default Database date format withoptional time
29
- * 2021-10-04 (12:59)
30
- */
31
- const formatDateTimeDB = (value: string | Date, includeTime = false): string => {
32
- const d = new Date(value);
33
- const year = d.getFullYear();
34
- const month = (d.getMonth() + 1).toString().padStart(2, "0");
35
- const date = d.getDate().toString().padStart(2, "0");
36
- const hours = d.getHours().toString().padStart(2, "0");
37
- const minutes = d.getMinutes().toString().padStart(2, "0");
38
-
39
- let result = `${year}-${month}-${date}`;
40
- includeTime && (result = `${result} ${hours}:${minutes}`);
41
-
42
- return result;
43
- };
44
-
45
- export const dbDate = (value: string | Date): string => formatDateTimeDB(value, false);
46
- export const dbDateTime = (value: string | Date): string => formatDateTimeDB(value, true);
47
-
48
- export const formatDate = {
49
- readableDate,
50
- readableDateWithDay,
51
- readableDateTime,
52
- readableDateTimeWithDay,
53
- dbDate,
54
- dbDateTime,
55
- };
56
-
57
- export const dateFormat = ["nnDate", "nnDateWithDay", "nnDateTime", "nnDateTimeWithDay", "dbDate", "dbDateTime"] as const;
58
- export type DateFormat = (typeof dateFormat)[number];
59
-
60
- export const readableDateFormat = ["readableDate", "readableDateWithDay", "readableDateTime", "readableDateTimeWithDay"] as const;
61
- export type ReadableDateFormat = (typeof readableDateFormat)[number];
@@ -1,70 +0,0 @@
1
- export enum TimeUnit {
2
- MILLISECOND = "MILLISECOND",
3
- SECOND = "SECOND",
4
- MINUTE = "MINUTE",
5
- HOUR = "HOUR",
6
- DAY = "DAY",
7
- WEEK = "WEEK",
8
- MONTH = "MONTH",
9
- YEAR = "YEAR",
10
- DECADE = "DECADE",
11
- }
12
-
13
- export const TimeUnitAcronym = {
14
- MS: TimeUnit.MILLISECOND,
15
- S: TimeUnit.SECOND,
16
- M: TimeUnit.MINUTE,
17
- H: TimeUnit.HOUR,
18
- D: TimeUnit.DAY,
19
- W: TimeUnit.WEEK,
20
- MTH: TimeUnit.MONTH,
21
- Y: TimeUnit.YEAR,
22
- DC: TimeUnit.DECADE,
23
- };
24
-
25
- export const TimeInMilliseconds = {
26
- [TimeUnit.MILLISECOND]: 1,
27
- [TimeUnit.SECOND]: 1000,
28
- [TimeUnit.MINUTE]: 60000,
29
- [TimeUnit.HOUR]: 3600000,
30
- [TimeUnit.DAY]: 86400000,
31
- [TimeUnit.WEEK]: 604800000,
32
- [TimeUnit.YEAR]: 3.154e+10,
33
- [TimeUnit.DECADE]: 3.154e+10 * 10,
34
- };
35
-
36
- export const parseTimeUnit = (unit: TimeUnit | string): TimeUnit => {
37
- if (Object.keys(TimeUnitAcronym).includes(unit)) {
38
- return (TimeUnitAcronym as any)[unit] as TimeUnit;
39
- }
40
- if (Object.keys(TimeUnit).includes(unit)) {
41
- return unit as TimeUnit;
42
- }
43
- throw new Error(`Invalid time unit [${unit}}]`);
44
- };
45
-
46
- const validateFormat = (timeString: string): boolean => {
47
- // eslint-disable-next-line regexp/no-unused-capturing-group
48
- return /^([012]|[01]\d|2[0-3]):[0-5]\d$/.test(timeString);
49
- };
50
-
51
- export const timeToDecimal = (timeString: string): number | null => {
52
- if (!timeString) return null;
53
- if (!timeString.includes(":")) throw new Error(`Invalid time format [${timeString}]. Must be in HH:MM format`);
54
- if (!validateFormat(timeString)) throw new Error(`Invalid time format [${timeString}]. Must be in HH:MM format`);
55
- const [hours, minutes] = timeString.split(":");
56
- return Number.parseInt(hours) + Number.parseInt(minutes) / 60;
57
- };
58
-
59
- const convertToMilliseconds = (value: number, unit: TimeUnit) => {
60
- if (typeof value !== "number") throw new Error("Value must be a number");
61
- const parsedUnit = parseTimeUnit(unit);
62
- return value * (TimeInMilliseconds[parsedUnit as keyof typeof TimeInMilliseconds] || 1);
63
- };
64
-
65
- export const convert = (value: number, from: TimeUnit, to: TimeUnit): number => {
66
- const parsedFrom = parseTimeUnit(from);
67
- const parsedTo = parseTimeUnit(to);
68
- const fromMilliseconds = convertToMilliseconds(value, parsedFrom);
69
- return fromMilliseconds / (TimeInMilliseconds[parsedTo as keyof typeof TimeInMilliseconds] || 1);
70
- };
@@ -1,51 +0,0 @@
1
- <script setup lang="ts">
2
- import type { TCheckboxType } from "../types";
3
- import CircleIndicator from "./CircleIndicator.vue";
4
- import DefaultIndicator from "./DefaultIndicator.vue";
5
-
6
- const { checked, type = "default", indeterminate = false, disabled = false } = defineProps<{
7
- label?: string;
8
- type?: TCheckboxType;
9
- checked: boolean;
10
- indeterminate?: boolean;
11
- disabled?: boolean;
12
- }>();
13
-
14
- const emit = defineEmits(["click"]);
15
- </script>
16
-
17
- <template>
18
- <div
19
- class="group flex items-center space-x-2"
20
- :class="{
21
- 'border-action': checked && !disabled,
22
- 'border-default': !checked && !disabled,
23
- 'border-subtle cursor-default': disabled,
24
- 'cursor-pointer': !disabled,
25
- }"
26
- @click.stop.prevent="!disabled && emit('click')"
27
- >
28
- <DefaultIndicator
29
- v-if="type === 'default'"
30
- :value="checked"
31
- :disabled="disabled"
32
- :indeterminate="indeterminate"
33
- />
34
- <CircleIndicator
35
- v-else
36
- :value="checked"
37
- :disabled="disabled"
38
- :indeterminate="indeterminate"
39
- />
40
- <span
41
- v-if="label"
42
- class="block text-sm leading-tight select-none"
43
- :class="{
44
- 'hover:underline': !disabled,
45
- 'text-tertiary': disabled,
46
- }"
47
- >
48
- {{ label }}
49
- </span>
50
- </div>
51
- </template>
@@ -1,26 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from "vue";
3
- import { BIcon } from "../";
4
-
5
- const { value, disabled = false, indeterminate = false } = defineProps<{ value: boolean; indeterminate?: boolean; disabled?: boolean }>();
6
-
7
- const icon = computed(() => {
8
- if (indeterminate) return "dash";
9
- if (value) return "check";
10
- return null;
11
- });
12
- </script>
13
-
14
- <template>
15
- <button
16
- class="group inline-flex items-center justify-center w-6 h-6 rounded-full border focus:outline-hidden focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-black dark:focus-visible:outline-white"
17
- :class="{
18
- 'border-default bg-primary hover:bg-secondary hover:border-strong cursor-pointer': !disabled && !value,
19
- 'border-action bg-action text-white hover:bg-action-hover hover:border-action-hover cursor-pointer': !disabled && value,
20
- 'border-default bg-tertiary text-white cursor-default': disabled && value,
21
- 'border-default bg-secondary hover:bg-secondary': disabled && !value,
22
- }"
23
- >
24
- <BIcon v-if="icon" :name="icon" class="text-white" />
25
- </button>
26
- </template>
@@ -1,19 +0,0 @@
1
- <script setup lang="ts">
2
- const { value, disabled = false, indeterminate = false } = defineProps<{ value: boolean; disabled?: boolean; indeterminate?: boolean }>();
3
- </script>
4
-
5
- <template>
6
- <button
7
- class="flex items-center justify-center w-4 h-4 border rounded focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-black dark:focus-visible:outline-white"
8
- :class="{
9
- 'border-action bg-action hover:bg-action-hover hover:border-action-hover cursor-pointer': (value || indeterminate) && !disabled,
10
- 'bg-primary border-default hover:border-strong hover:bg-secondary cursor-pointer': !value && !indeterminate && !disabled,
11
- 'cursor-default border-default bg-tertiary': disabled,
12
- }"
13
- >
14
- <div v-if="indeterminate" class="w-2 bg-white" style="height: 2px" />
15
- <svg v-else-if="value" width="10" height="8" viewBox="0 0 10 8" fill="none" xmlns="http://www.w3.org/2000/svg">
16
- <path d="M8.41166 0.5L10 2.0417L4.01353 7.5L0 3.57411L1.60557 2.04932L4.02897 4.39988L8.41166 0.5Z" fill="white" />
17
- </svg>
18
- </button>
19
- </template>
@@ -1 +0,0 @@
1
- export { default as BCheckbox } from "./Checkbox.vue";
@@ -1,114 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue";
3
- import { BButton } from "../";
4
-
5
- const props = withDefaults(
6
- defineProps<{
7
- alignment?: "left" | "right";
8
- borderClassOpen?: string;
9
- borderClassClosed?: string;
10
- headerBgClass?: string;
11
- id?: string | number;
12
- open?: boolean;
13
- sticky?: boolean;
14
- }>(),
15
- {
16
- alignment: "right",
17
- borderClassOpen: "border-strong",
18
- borderClassClosed: "border-default",
19
- headerBgClass: "bg-primary",
20
- id: "",
21
- open: false,
22
- sticky: false,
23
- },
24
- );
25
-
26
- const emit = defineEmits(["toggle"]);
27
-
28
- const buttonRef = ref<HTMLButtonElement>();
29
- const headerRef = ref<HTMLHeadElement>();
30
- const isSticky = ref(false);
31
-
32
- const borderClass = computed(() => props.open ? props.borderClassOpen : props.borderClassClosed);
33
- const styles = computed(() => {
34
- return isSticky.value
35
- ? {
36
- top: "-1px",
37
- paddingTop: "1px",
38
- }
39
- : {};
40
- });
41
-
42
- watch(
43
- () => props.open,
44
- (newValue) => {
45
- if (!newValue) isSticky.value = false;
46
- },
47
- );
48
-
49
- watch(isSticky, (newValue) => {
50
- if (newValue) buttonRef.value!.blur();
51
- });
52
-
53
- const observer = ref<IntersectionObserver | null>(null);
54
- onMounted(() => {
55
- if (props.sticky) {
56
- observer.value = new IntersectionObserver(
57
- ([e]) => {
58
- if (props.open) {
59
- isSticky.value = e.intersectionRatio < 1;
60
- }
61
- },
62
- {
63
- threshold: [1],
64
- },
65
- );
66
-
67
- observer.value.observe(headerRef.value!);
68
- }
69
- });
70
- onBeforeUnmount(() => {
71
- if (observer.value) {
72
- observer.value.disconnect();
73
- }
74
- });
75
- </script>
76
-
77
- <template>
78
- <section class="w-full">
79
- <header
80
- ref="headerRef"
81
- class="w-full border-b"
82
- :style="styles"
83
- :class="[
84
- {
85
- 'shadow-sm-xs border-strong sticky z-10': isSticky,
86
- 'relative': !isSticky,
87
- },
88
- borderClass,
89
- headerBgClass,
90
- ]"
91
- >
92
- <div class="flex items-center w-full h-10">
93
- <div v-if="alignment === 'left'" class="relative flex-1 min-w-0 flex items-center text-sm">
94
- <slot name="header" :sticky="isSticky" />
95
- </div>
96
- <div class="flex-none w-8 h-8 flex items-center justify-center">
97
- <BButton
98
- v-if="$slots.content"
99
- small
100
- variant="textSubtle"
101
- :icon="open ? 'chevron-down-small' : 'chevron-right-small'"
102
- @click="emit('toggle', id)"
103
- />
104
- </div>
105
- <div v-if="alignment === 'right'" class="relative flex-1 min-w-0 flex items-center text-sm">
106
- <slot name="header" :sticky="isSticky" />
107
- </div>
108
- </div>
109
- </header>
110
- <main v-if="open" class="relative">
111
- <slot name="content" />
112
- </main>
113
- </section>
114
- </template>
@@ -1 +0,0 @@
1
- export { default as BCollapse } from "./Collapse.vue";
@@ -1,66 +0,0 @@
1
- <script setup lang="ts">
2
- import type { ConfirmCancelProps } from "./types";
3
- import { computed } from "vue";
4
- import { BButton, BFlexbox } from "../";
5
-
6
- const props = withDefaults(
7
- defineProps<ConfirmCancelProps>(),
8
- {
9
- order: "confirm-first",
10
- cancelButtonIsText: false,
11
- cancelDisabled: false,
12
- cancelLabel: "Cancel",
13
- cancelVariant: "outline",
14
- confirmDisabled: false,
15
- confirmLabel: "Confirm",
16
- confirmVariant: "fill",
17
- fillContainer: false,
18
- loading: false,
19
- small: false,
20
- vertical: false,
21
- },
22
- );
23
-
24
- const emit = defineEmits(["confirm", "cancel"]);
25
-
26
- const confirmFirst = computed(() => props.order === "confirm-first");
27
- </script>
28
-
29
- <template>
30
- <BFlexbox :col="vertical" class="gap-2">
31
- <BButton
32
- v-if="confirmFirst"
33
- :small="small"
34
- stop-propagation
35
- :icon="confirmIcon"
36
- :label="confirmLabel"
37
- :variant="confirmVariant"
38
- :disabled="confirmDisabled"
39
- :loading="loading"
40
- :class="{ 'flex-1': fillContainer }"
41
- @click="emit('confirm')"
42
- />
43
- <BButton
44
- :variant="cancelVariant"
45
- stop-propagation
46
- :disabled="cancelDisabled"
47
- :small="small"
48
- :icon="cancelIcon"
49
- :label="cancelLabel"
50
- :class="{ 'flex-1': fillContainer }"
51
- @click="emit('cancel')"
52
- />
53
- <BButton
54
- v-if="!confirmFirst"
55
- :small="small"
56
- stop-propagation
57
- :icon="confirmIcon"
58
- :label="confirmLabel"
59
- :variant="confirmVariant"
60
- :disabled="confirmDisabled"
61
- :loading="loading"
62
- :class="{ 'flex-1': fillContainer }"
63
- @click="emit('confirm')"
64
- />
65
- </BFlexbox>
66
- </template>
@@ -1 +0,0 @@
1
- export { default as BConfirmCancel } from "./ConfirmCancel.vue";
@@ -1,18 +0,0 @@
1
- import type { ButtonVariant, TIcon } from "../types";
2
-
3
- export type ConfirmCancelProps = {
4
- order?: "confirm-first" | "confirm-last";
5
- cancelButtonIsText?: boolean;
6
- cancelDisabled?: boolean;
7
- cancelIcon?: TIcon;
8
- cancelLabel?: string;
9
- cancelVariant?: ButtonVariant;
10
- confirmDisabled?: boolean;
11
- confirmIcon?: TIcon;
12
- confirmLabel?: string;
13
- confirmVariant?: ButtonVariant;
14
- fillContainer?: boolean;
15
- loading?: boolean;
16
- small?: boolean;
17
- vertical?: boolean;
18
- };
@@ -1,79 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, nextTick, onMounted, ref } from "vue";
3
- import { BButton } from "../../";
4
- import { useNextFrame } from "../../composables";
5
-
6
- const scrollPosition = ref(0);
7
- const scrollStep = 120; // Change this value to adjust the scroll amount
8
-
9
- const listContainer = ref<HTMLElement | null>(null);
10
- const buttonList = ref<HTMLElement | null>(null);
11
-
12
- const containerWidth = ref(listContainer.value ? listContainer.value.clientWidth : 0);
13
- const contentWidth = ref(buttonList.value ? buttonList.value.scrollWidth : 0);
14
- const scrollLeft = () => scrollPosition.value = Math.max(0, scrollPosition.value - scrollStep);
15
- const scrollRight = () => {
16
- scrollPosition.value = Math.min(contentWidth.value - containerWidth.value, scrollPosition.value + scrollStep);
17
- };
18
-
19
- const showLeftButton = computed(() => scrollPosition.value > 0);
20
- const showRightButton = computed(() => {
21
- return scrollPosition.value < contentWidth.value - containerWidth.value;
22
- });
23
-
24
- const { nextFrame } = useNextFrame();
25
- const update = () => {
26
- nextTick(() => {
27
- nextFrame(() => {
28
- containerWidth.value = listContainer.value ? listContainer.value.clientWidth : 0;
29
- contentWidth.value = buttonList.value ? buttonList.value.scrollWidth : 0;
30
- if (containerWidth.value >= contentWidth.value) {
31
- scrollPosition.value = 0;
32
- }
33
- });
34
- });
35
- };
36
- onMounted(update);
37
- defineExpose({ update });
38
- </script>
39
-
40
- <template>
41
- <div ref="listContainer" class="relative flex-1 flex items-center py-1 overflow-hidden whitespace-nowrap">
42
- <aside
43
- v-if="showLeftButton"
44
- class="absolute w-16 left-0 z-10 h-full flex items-center"
45
- style="background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(255,255,255,1) 10%, rgba(255,255,255,0) 100%)"
46
- >
47
- <BButton
48
- small
49
- icon="chevron-left"
50
- variant="outline"
51
- class="shadow-sm"
52
- @click="scrollLeft"
53
- />
54
- </aside>
55
-
56
- <main
57
- ref="buttonList"
58
- class="flex items-center gap-2 snap-x scroll-px-2 transition-transform duration-300"
59
- :style="{ transform: `translateX(-${scrollPosition}px)` }"
60
- >
61
- <slot />
62
- </main>
63
-
64
- <aside
65
- v-if="showRightButton"
66
- class="absolute w-16 right-0 z-10 h-full flex items-center justify-end pl-2"
67
- style="background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 90%, rgba(255,255,255,1) 100%)"
68
- >
69
- <BButton
70
- v-if="showRightButton"
71
- small
72
- icon="chevron-right"
73
- variant="outline"
74
- class="shadow-sm"
75
- @click="scrollRight"
76
- />
77
- </aside>
78
- </div>
79
- </template>
@@ -1 +0,0 @@
1
- export { default as BContentSlider } from "./ContentSlider.vue";
@@ -1,5 +0,0 @@
1
- <script setup lang="ts"></script>
2
-
3
- <template>
4
- To be implemented
5
- </template>
@@ -1 +0,0 @@
1
- export { default as BDataPoint } from "./DataPoint.vue";
@@ -1,19 +0,0 @@
1
- <script setup lang="ts">
2
- import { BIcon } from "../icon";
3
-
4
- defineEmits(["click"]);
5
- </script>
6
-
7
- <template>
8
- <button
9
- class="
10
- flex items-center justify-center w-4 h-4 rounded-full
11
- hover:bg-black/15 focus-visible:bg-black/15 active:bg-black/25
12
- dark:hover:bg-white/15 dark:focus-visible:bg-white/15 dark:active:bg-white/25
13
- text-primary
14
- cursor-pointer"
15
- @click.stop.prevent="$emit('click')"
16
- >
17
- <BIcon name="close" />
18
- </button>
19
- </template>