@rotki/ui-library 2.12.1 → 2.13.0

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 (287) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +6 -14
  2. package/dist/components/accordions/accordion/RuiAccordion.vue.js +3 -4
  3. package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
  4. package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +10 -9
  5. package/dist/components/accordions/accordions/RuiAccordions.vue.js +27 -26
  6. package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -1
  7. package/dist/components/alerts/RuiAlert.vue.d.ts +7 -17
  8. package/dist/components/alerts/RuiAlert.vue2.js +8 -16
  9. package/dist/components/alerts/RuiAlert.vue2.js.map +1 -1
  10. package/dist/components/buttons/button/RuiButton.vue.d.ts +5 -7
  11. package/dist/components/buttons/button/RuiButton.vue2.js +19 -20
  12. package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -1
  13. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
  14. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +42 -41
  15. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -1
  16. package/dist/components/calendar/RuiCalendar.vue.d.ts +1 -6
  17. package/dist/components/calendar/RuiCalendar.vue.js +7 -8
  18. package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
  19. package/dist/components/calendar/RuiCalendarGrid.vue.js +1 -1
  20. package/dist/components/calendar/RuiCalendarGrid.vue2.js +20 -18
  21. package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -1
  22. package/dist/components/calendar/RuiCalendarHeader.vue.js +1 -1
  23. package/dist/components/calendar/RuiCalendarHeader.vue2.js +3 -4
  24. package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -1
  25. package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
  26. package/dist/components/calendar/RuiCalendarMenu.vue2.js +48 -40
  27. package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
  28. package/dist/components/cards/RuiCard.vue.d.ts +9 -24
  29. package/dist/components/cards/RuiCard.vue2.js +7 -7
  30. package/dist/components/cards/RuiCard.vue2.js.map +1 -1
  31. package/dist/components/cards/RuiCardHeader.vue.d.ts +5 -10
  32. package/dist/components/cards/RuiCardHeader.vue2.js +1 -1
  33. package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -1
  34. package/dist/components/chips/RuiChip.vue.d.ts +7 -21
  35. package/dist/components/chips/RuiChip.vue2.js +16 -21
  36. package/dist/components/chips/RuiChip.vue2.js.map +1 -1
  37. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
  38. package/dist/components/color-picker/RuiColorBoard.vue2.js +19 -19
  39. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
  40. package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
  41. package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
  42. package/dist/components/color-picker/RuiColorHue.vue2.js +17 -14
  43. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
  44. package/dist/components/color-picker/RuiColorInput.vue.js +9 -7
  45. package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
  46. package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
  47. package/dist/components/color-picker/RuiColorPicker.vue.js +23 -14
  48. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
  49. package/dist/components/color-picker/utils.js +22 -5
  50. package/dist/components/color-picker/utils.js.map +1 -1
  51. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
  52. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +75 -79
  53. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  54. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +1 -1
  55. package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
  56. package/dist/components/date-time-picker/dayjs-setup.js +8 -0
  57. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
  58. package/dist/components/date-time-picker/segment-config.d.ts +14 -0
  59. package/dist/components/date-time-picker/segment-config.js +23 -0
  60. package/dist/components/date-time-picker/segment-config.js.map +1 -0
  61. package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
  62. package/dist/components/date-time-picker/segment-utils.js +36 -0
  63. package/dist/components/date-time-picker/segment-utils.js.map +1 -0
  64. package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
  65. package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
  66. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  67. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
  68. package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
  69. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  70. package/dist/components/date-time-picker/utils.d.ts +1 -0
  71. package/dist/components/date-time-picker/utils.js +1 -0
  72. package/dist/components/date-time-picker/utils.js.map +1 -1
  73. package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
  74. package/dist/components/divider/RuiDivider.vue.js +6 -3
  75. package/dist/components/divider/RuiDivider.vue.js.map +1 -1
  76. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +10 -1138
  77. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +153 -160
  78. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  79. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
  80. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +32 -32
  81. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  82. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +2 -2
  83. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +19 -22
  84. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  85. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +4 -2
  86. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +13 -16
  87. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
  88. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +7 -13
  89. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +10 -9
  90. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
  91. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +10 -785
  92. package/dist/components/forms/select/RuiMenuSelect.vue2.js +60 -56
  93. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  94. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +11 -10
  95. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +21 -26
  96. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
  97. package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
  98. package/dist/components/forms/slider/RuiSlider.vue2.js +45 -48
  99. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  100. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
  101. package/dist/components/forms/switch/RuiSwitch.vue2.js +22 -21
  102. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  103. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
  104. package/dist/components/forms/text-area/RuiTextArea.vue2.js +47 -83
  105. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  106. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +10 -30
  107. package/dist/components/forms/text-field/RuiTextField.vue2.js +36 -67
  108. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  109. package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
  110. package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
  111. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
  112. package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
  113. package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
  114. package/dist/components/icons/RuiIcon.vue2.js +11 -14
  115. package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
  116. package/dist/components/index.d.ts +4 -4
  117. package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
  118. package/dist/components/loaders/RuiSkeletonBase.vue2.js +2 -2
  119. package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
  120. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
  121. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +2 -2
  122. package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
  123. package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
  124. package/dist/components/logos/RuiLogo.vue.js +13 -13
  125. package/dist/components/logos/RuiLogo.vue.js.map +1 -1
  126. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
  127. package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
  128. package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
  129. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
  130. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
  131. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
  132. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +22 -27
  133. package/dist/components/overlays/dialog/RuiDialog.vue2.js +90 -67
  134. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
  135. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
  136. package/dist/components/overlays/menu/RuiMenu.vue2.js +71 -78
  137. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
  138. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +23 -30
  139. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +78 -49
  140. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
  141. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
  142. package/dist/components/overlays/notification/RuiNotification.vue.js +27 -22
  143. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
  144. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
  145. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +16 -9
  146. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
  147. package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
  148. package/dist/components/progress/RuiProgress.vue2.js +18 -24
  149. package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
  150. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
  151. package/dist/components/steppers/RuiFooterStepper.vue2.js +33 -26
  152. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
  153. package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
  154. package/dist/components/steppers/RuiStepper.vue2.js +39 -36
  155. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
  156. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
  157. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +2 -2
  158. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
  159. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
  160. package/dist/components/steppers/RuiStepperIcon.vue2.js +2 -2
  161. package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
  162. package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
  163. package/dist/components/tables/RuiDataTable.vue2.js +196 -601
  164. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
  165. package/dist/components/tables/RuiDataTable.vue3.js +24 -27
  166. package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
  167. package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
  168. package/dist/components/tables/RuiExpandButton.vue2.js +4 -2
  169. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
  170. package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
  171. package/dist/components/tables/RuiTableHead.vue2.js +20 -20
  172. package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
  173. package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
  174. package/dist/components/tables/RuiTablePagination.vue2.js +27 -19
  175. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
  176. package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
  177. package/dist/components/tabs/tab/RuiTab.vue2.js +84 -52
  178. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
  179. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
  180. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +3 -2
  181. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
  182. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +2 -5
  183. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
  184. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
  185. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
  186. package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
  187. package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
  188. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
  189. package/dist/components/time-picker/RuiTimePicker.vue2.js +88 -38
  190. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  191. package/dist/composables/breakpoint.js +8 -13
  192. package/dist/composables/breakpoint.js.map +1 -1
  193. package/dist/composables/dropdown-menu.d.ts +7 -4
  194. package/dist/composables/dropdown-menu.js +73 -50
  195. package/dist/composables/dropdown-menu.js.map +1 -1
  196. package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
  197. package/dist/composables/forms/auto-complete/focus.js +28 -17
  198. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  199. package/dist/composables/forms/auto-complete/index.d.ts +0 -9
  200. package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
  201. package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
  202. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  203. package/dist/composables/forms/auto-complete/search.d.ts +7 -0
  204. package/dist/composables/forms/auto-complete/search.js +10 -8
  205. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  206. package/dist/composables/forms/auto-complete/value.d.ts +4 -0
  207. package/dist/composables/forms/auto-complete/value.js +24 -42
  208. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  209. package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
  210. package/dist/composables/forms/use-label-with-quote.js +14 -0
  211. package/dist/composables/forms/use-label-with-quote.js.map +1 -0
  212. package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
  213. package/dist/composables/forms/use-prepend-append-width.js +25 -0
  214. package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
  215. package/dist/composables/icons.js +1 -1
  216. package/dist/composables/icons.js.map +1 -1
  217. package/dist/composables/popper.js +63 -49
  218. package/dist/composables/popper.js.map +1 -1
  219. package/dist/composables/sticky-header.d.ts +7 -5
  220. package/dist/composables/sticky-header.js +51 -41
  221. package/dist/composables/sticky-header.js.map +1 -1
  222. package/dist/composables/tables/data-table/columns.d.ts +25 -0
  223. package/dist/composables/tables/data-table/columns.js +54 -0
  224. package/dist/composables/tables/data-table/columns.js.map +1 -0
  225. package/dist/composables/tables/data-table/expansion.d.ts +17 -0
  226. package/dist/composables/tables/data-table/expansion.js +38 -0
  227. package/dist/composables/tables/data-table/expansion.js.map +1 -0
  228. package/dist/composables/tables/data-table/grouping.d.ts +29 -0
  229. package/dist/composables/tables/data-table/grouping.js +136 -0
  230. package/dist/composables/tables/data-table/grouping.js.map +1 -0
  231. package/dist/composables/tables/data-table/pagination.d.ts +33 -0
  232. package/dist/composables/tables/data-table/pagination.js +119 -0
  233. package/dist/composables/tables/data-table/pagination.js.map +1 -0
  234. package/dist/composables/tables/data-table/selection.d.ts +29 -0
  235. package/dist/composables/tables/data-table/selection.js +164 -0
  236. package/dist/composables/tables/data-table/selection.js.map +1 -0
  237. package/dist/composables/tables/data-table/sort.d.ts +32 -0
  238. package/dist/composables/tables/data-table/sort.js +136 -0
  239. package/dist/composables/tables/data-table/sort.js.map +1 -0
  240. package/dist/composables/tables/data-table/types.d.ts +14 -0
  241. package/dist/composables/tables/data-table/types.js +11 -0
  242. package/dist/composables/tables/data-table/types.js.map +1 -0
  243. package/dist/composables/theme.js +5 -21
  244. package/dist/composables/theme.js.map +1 -1
  245. package/dist/composables/timeout-manager.d.ts +4 -2
  246. package/dist/composables/timeout-manager.js +2 -1
  247. package/dist/composables/timeout-manager.js.map +1 -1
  248. package/dist/icons/icons_1.d.ts +15 -15
  249. package/dist/icons/icons_1.js +123 -123
  250. package/dist/icons/icons_1.js.map +1 -1
  251. package/dist/icons/icons_2.d.ts +46 -46
  252. package/dist/icons/icons_2.js +301 -301
  253. package/dist/icons/icons_2.js.map +1 -1
  254. package/dist/icons/icons_3.d.ts +43 -43
  255. package/dist/icons/icons_3.js +252 -252
  256. package/dist/icons/icons_3.js.map +1 -1
  257. package/dist/icons/icons_4.d.ts +72 -2
  258. package/dist/icons/icons_4.js +368 -18
  259. package/dist/icons/icons_4.js.map +1 -1
  260. package/dist/icons/index.d.ts +1 -1
  261. package/dist/icons/index.js +1 -1
  262. package/dist/icons/index.js.map +1 -1
  263. package/dist/index.js +105 -42
  264. package/dist/index.js.map +1 -1
  265. package/dist/style.css +189 -162
  266. package/dist/theme/index.js +15 -1
  267. package/dist/theme/index.js.map +1 -1
  268. package/dist/utils/assert.d.ts +1 -1
  269. package/dist/utils/assert.js.map +1 -1
  270. package/dist/utils/form-text-detail.d.ts +9 -8
  271. package/dist/utils/form-text-detail.js +1 -2
  272. package/dist/utils/form-text-detail.js.map +1 -1
  273. package/dist/utils/helpers.d.ts +4 -32
  274. package/dist/utils/helpers.js +8 -9
  275. package/dist/utils/helpers.js.map +1 -1
  276. package/dist/utils/is-equal.d.ts +1 -1
  277. package/dist/utils/is-equal.js +5 -3
  278. package/dist/utils/is-equal.js.map +1 -1
  279. package/dist/vite-plugin/index.js +4 -4
  280. package/dist/vite-plugin/index.js.map +1 -1
  281. package/dist/vite-plugin/scanner.js +3 -3
  282. package/dist/vite-plugin/scanner.js.map +1 -1
  283. package/dist/web-types.json +390 -371
  284. package/package.json +47 -44
  285. package/dist/utils/generate-id.d.ts +0 -5
  286. package/dist/utils/generate-id.js +0 -21
  287. package/dist/utils/generate-id.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { defineComponent, mergeModels, useModel, ref, useTemplateRef, computed, onMounted, watch, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, toDisplayString, normalizeStyle, Fragment, renderList, nextTick } from "vue";
1
+ import { defineComponent, useModel, ref, useTemplateRef, computed, watch, onMounted, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, normalizeStyle, Fragment, renderList, mergeModels, nextTick } from "vue";
2
2
  import { TimeAccuracy } from "../../consts/time-accuracy.js";
3
3
  import { assert } from "../../utils/assert.js";
4
4
  import { isDefined } from "@vueuse/core";
@@ -13,13 +13,14 @@ const _hoisted_3 = {
13
13
  class: "text-lg font-semibold"
14
14
  };
15
15
  const _hoisted_4 = { class: "text-xl" };
16
- const _hoisted_5 = ["onClick"];
16
+ const _hoisted_5 = ["aria-label"];
17
+ const _hoisted_6 = ["aria-selected", "onClick"];
17
18
  const FULL_CIRCLE = 360;
18
19
  const TWELVE_HOURS = 12;
19
20
  const _sfc_main = /* @__PURE__ */ defineComponent({
20
21
  __name: "RuiTimePicker",
21
22
  props: /* @__PURE__ */ mergeModels({
22
- accuracy: { default: TimeAccuracy.MINUTE },
23
+ accuracy: { default: () => TimeAccuracy.MINUTE },
23
24
  borderless: { type: Boolean, default: false }
24
25
  }, {
25
26
  "modelValue": { required: true },
@@ -43,7 +44,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
43
44
  const selectedSecond = useModel(__props, "second");
44
45
  const selectedMillisecond = useModel(__props, "millisecond");
45
46
  const editMode = useModel(__props, "selection");
46
- const props = __props;
47
47
  const totalItemsPerMode = {
48
48
  hour: 12,
49
49
  minute: 60,
@@ -58,9 +58,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
58
58
  };
59
59
  const isDragging = ref(false);
60
60
  const clockFace = useTemplateRef("clockFace");
61
- const showSecond = computed(() => props.accuracy === TimeAccuracy.SECOND || props.accuracy === TimeAccuracy.MILLISECOND);
62
- const showMillisecond = computed(() => props.accuracy === TimeAccuracy.MILLISECOND);
63
- const period = computed(() => isDefined(selectedHour) && get(selectedHour) >= TWELVE_HOURS ? "PM" : "AM");
61
+ const showSecond = computed(
62
+ () => __props.accuracy === TimeAccuracy.SECOND || __props.accuracy === TimeAccuracy.MILLISECOND
63
+ );
64
+ const showMillisecond = computed(() => __props.accuracy === TimeAccuracy.MILLISECOND);
65
+ const period = computed(
66
+ () => isDefined(selectedHour) && get(selectedHour) >= TWELVE_HOURS ? "PM" : "AM"
67
+ );
64
68
  const displayHour = computed(() => {
65
69
  if (!isDefined(selectedHour)) {
66
70
  return void 0;
@@ -152,10 +156,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
152
156
  }
153
157
  function getModelSeconds() {
154
158
  const acceptedAccuracy = [TimeAccuracy.SECOND, TimeAccuracy.MILLISECOND];
155
- return acceptedAccuracy.includes(props.accuracy) && isDefined(modelValue) ? new Date(get(modelValue)).getSeconds() : void 0;
159
+ return acceptedAccuracy.includes(__props.accuracy) && isDefined(modelValue) ? new Date(get(modelValue)).getSeconds() : void 0;
156
160
  }
157
161
  function getModelMilliseconds() {
158
- return props.accuracy === TimeAccuracy.MILLISECOND && isDefined(modelValue) ? new Date(get(modelValue)).getMilliseconds() : void 0;
162
+ return __props.accuracy === TimeAccuracy.MILLISECOND && isDefined(modelValue) ? new Date(get(modelValue)).getMilliseconds() : void 0;
159
163
  }
160
164
  function generateNumbers(total, interval) {
161
165
  const numbers = [];
@@ -207,32 +211,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
207
211
  function startDrag(event) {
208
212
  event.preventDefault();
209
213
  set(isDragging, true);
210
- const handleMove = (moveEvent) => {
211
- if (!get(isDragging) || !isDefined(clockFace))
212
- return;
213
- const rect = get(clockFace).getBoundingClientRect();
214
- const centerX = rect.left + rect.width / 2;
215
- const centerY = rect.top + rect.height / 2;
216
- let clientX, clientY;
217
- if ("touches" in moveEvent) {
218
- const touch = moveEvent.touches[0];
219
- assert(touch);
220
- clientX = touch.clientX;
221
- clientY = touch.clientY;
222
- } else {
223
- clientX = moveEvent.clientX;
224
- clientY = moveEvent.clientY;
225
- }
226
- const x = clientX - centerX;
227
- const y = clientY - centerY;
214
+ if (!isDefined(clockFace))
215
+ return;
216
+ const rect = get(clockFace).getBoundingClientRect();
217
+ const centerX = rect.left + rect.width / 2;
218
+ const centerY = rect.top + rect.height / 2;
219
+ let rafId = null;
220
+ const applyMove = (clientX2, clientY2) => {
221
+ const x = clientX2 - centerX;
222
+ const y = clientY2 - centerY;
228
223
  let angle = Math.atan2(y, x) * (180 / Math.PI) + 90;
229
224
  if (angle < 0)
230
225
  angle += FULL_CIRCLE;
231
226
  const mode = get(editMode);
232
227
  const unit = Math.round(angle / (FULL_CIRCLE / totalItemsPerMode[mode])) % totalItemsPerMode[mode];
233
228
  if (mode === "hour") {
234
- let hour;
235
- hour = unit;
229
+ let hour = unit;
236
230
  if (hour === 0)
237
231
  hour = TWELVE_HOURS;
238
232
  if (get(period) === "PM" && hour < TWELVE_HOURS) {
@@ -250,7 +244,32 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
250
244
  }
251
245
  updateModelValue();
252
246
  };
247
+ const handleMove = (moveEvent) => {
248
+ if (!get(isDragging))
249
+ return;
250
+ if (rafId !== null)
251
+ return;
252
+ let clientX2;
253
+ let clientY2;
254
+ if ("touches" in moveEvent) {
255
+ const touch = moveEvent.touches[0];
256
+ assert(touch);
257
+ clientX2 = touch.clientX;
258
+ clientY2 = touch.clientY;
259
+ } else {
260
+ clientX2 = moveEvent.clientX;
261
+ clientY2 = moveEvent.clientY;
262
+ }
263
+ rafId = requestAnimationFrame(() => {
264
+ applyMove(clientX2, clientY2);
265
+ rafId = null;
266
+ });
267
+ };
253
268
  const handleEnd = () => {
269
+ if (rafId !== null) {
270
+ cancelAnimationFrame(rafId);
271
+ rafId = null;
272
+ }
254
273
  set(isDragging, false);
255
274
  document.removeEventListener("mousemove", handleMove);
256
275
  document.removeEventListener("touchmove", handleMove);
@@ -268,7 +287,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
268
287
  document.addEventListener("touchmove", handleMove);
269
288
  document.addEventListener("mouseup", handleEnd);
270
289
  document.addEventListener("touchend", handleEnd);
271
- handleMove(event);
290
+ const initialEvent = event;
291
+ let clientX;
292
+ let clientY;
293
+ if ("touches" in initialEvent) {
294
+ const touch = initialEvent.touches[0];
295
+ assert(touch);
296
+ clientX = touch.clientX;
297
+ clientY = touch.clientY;
298
+ } else {
299
+ clientX = initialEvent.clientX;
300
+ clientY = initialEvent.clientY;
301
+ }
302
+ applyMove(clientX, clientY);
272
303
  }
273
304
  function selectByClick(num) {
274
305
  const mode = get(editMode);
@@ -306,20 +337,25 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
306
337
  set(modelValue, date);
307
338
  });
308
339
  }
340
+ watch(
341
+ modelValue,
342
+ () => {
343
+ set(selectedHour, getModelHours());
344
+ set(selectedMinute, getModelMinutes());
345
+ set(selectedSecond, getModelSeconds());
346
+ set(selectedMillisecond, getModelMilliseconds());
347
+ }
348
+ );
309
349
  onMounted(() => {
310
350
  set(selectedHour, getModelHours());
311
351
  set(selectedMinute, getModelMinutes());
312
352
  set(selectedSecond, getModelSeconds());
313
353
  set(selectedMillisecond, getModelMilliseconds());
314
354
  });
315
- watch(modelValue, () => {
316
- set(selectedHour, getModelHours());
317
- set(selectedMinute, getModelMinutes());
318
- set(selectedSecond, getModelSeconds());
319
- set(selectedMillisecond, getModelMilliseconds());
320
- }, { deep: true });
321
355
  return (_ctx, _cache) => {
322
356
  return openBlock(), createElementBlock("div", {
357
+ role: "group",
358
+ "aria-label": "Time picker",
323
359
  class: normalizeClass({
324
360
  [_ctx.$style["rui-timepicker"]]: true,
325
361
  [_ctx.$style.bordered]: !__props.borderless
@@ -330,6 +366,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
330
366
  }, [
331
367
  createElementVNode("div", _hoisted_1, [
332
368
  createElementVNode("div", {
369
+ role: "button",
370
+ "aria-label": "Select hours",
333
371
  class: normalizeClass({
334
372
  [_ctx.$style["rui-digit"]]: true,
335
373
  [_ctx.$style.active]: editMode.value === "hour"
@@ -338,6 +376,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
338
376
  }, toDisplayString(formatValue(displayHour.value)), 3),
339
377
  _cache[7] || (_cache[7] = createElementVNode("div", { class: "text-2xl font-semibold" }, " : ", -1)),
340
378
  createElementVNode("div", {
379
+ role: "button",
380
+ "aria-label": "Select minutes",
341
381
  class: normalizeClass({
342
382
  [_ctx.$style["rui-digit"]]: true,
343
383
  [_ctx.$style.active]: editMode.value === "minute"
@@ -347,6 +387,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
347
387
  showSecond.value ? (openBlock(), createElementBlock("div", _hoisted_2, " : ")) : createCommentVNode("", true),
348
388
  showSecond.value ? (openBlock(), createElementBlock("div", {
349
389
  key: 1,
390
+ role: "button",
391
+ "aria-label": "Select seconds",
350
392
  class: normalizeClass({
351
393
  [_ctx.$style["rui-digit"]]: true,
352
394
  [_ctx.$style.active]: editMode.value === "second"
@@ -356,6 +398,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
356
398
  showMillisecond.value ? (openBlock(), createElementBlock("div", _hoisted_3, " . ")) : createCommentVNode("", true),
357
399
  showMillisecond.value ? (openBlock(), createElementBlock("div", {
358
400
  key: 3,
401
+ role: "button",
402
+ "aria-label": "Select milliseconds",
359
403
  class: normalizeClass(["!text-lg", {
360
404
  [_ctx.$style.active]: editMode.value === "millisecond",
361
405
  [_ctx.$style["rui-digit"]]: true
@@ -364,6 +408,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
364
408
  }, toDisplayString(formatValue(selectedMillisecond.value, 3)), 3)) : createCommentVNode("", true),
365
409
  createElementVNode("div", _hoisted_4, [
366
410
  createElementVNode("div", {
411
+ role: "button",
412
+ "aria-label": "Toggle AM/PM",
367
413
  class: "rui-time-picker-period cursor-pointer",
368
414
  onClick: _cache[4] || (_cache[4] = ($event) => toggleAmPm())
369
415
  }, toDisplayString(period.value), 1)
@@ -373,6 +419,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
373
419
  createElementVNode("div", {
374
420
  ref_key: "clockFace",
375
421
  ref: clockFace,
422
+ role: "listbox",
423
+ "aria-label": `Select ${editMode.value}`,
376
424
  class: normalizeClass(_ctx.$style["rui-clock-face"]),
377
425
  onMousedown: _cache[5] || (_cache[5] = ($event) => startDrag($event)),
378
426
  onTouchstart: _cache[6] || (_cache[6] = ($event) => startDrag($event))
@@ -393,6 +441,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
393
441
  (openBlock(true), createElementBlock(Fragment, null, renderList(clockNumbers.value, (num) => {
394
442
  return openBlock(), createElementBlock("div", {
395
443
  key: `num-${num}`,
444
+ role: "option",
445
+ "aria-selected": isSelectedNumber(num),
396
446
  class: normalizeClass({
397
447
  [_ctx.$style["rui-clock-number"]]: true,
398
448
  [_ctx.$style["is-selected"]]: isSelectedNumber(num),
@@ -400,9 +450,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
400
450
  }),
401
451
  style: normalizeStyle(numberStyle(num)),
402
452
  onClick: ($event) => selectByClick(num)
403
- }, toDisplayString(num), 15, _hoisted_5);
453
+ }, toDisplayString(num), 15, _hoisted_6);
404
454
  }), 128))
405
- ], 34)
455
+ ], 42, _hoisted_5)
406
456
  ], 2);
407
457
  };
408
458
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTimePicker.vue2.js","sources":["../../../src/components/time-picker/RuiTimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, type StyleValue, watch } from 'vue';\nimport { TimeAccuracy } from '@/consts/time-accuracy';\nimport { assert } from '@/utils/assert';\n\nexport type TimePickerSelection = 'hour' | 'minute' | 'second' | 'millisecond';\n\nexport interface RuiTimePickerProps {\n accuracy?: TimeAccuracy;\n borderless?: boolean;\n}\n\nconst modelValue = defineModel<Date | undefined>({ required: true });\n\nconst selectedHour = defineModel<number | undefined>('hour');\nconst selectedMinute = defineModel<number | undefined>('minute');\nconst selectedSecond = defineModel<number | undefined>('second');\nconst selectedMillisecond = defineModel<number | undefined>('millisecond');\nconst editMode = defineModel<TimePickerSelection>('selection', { default: 'hour' });\n\nconst props = withDefaults(defineProps<RuiTimePickerProps>(), {\n accuracy: TimeAccuracy.MINUTE,\n borderless: false,\n});\n\nconst FULL_CIRCLE = 360;\nconst TWELVE_HOURS = 12;\n\nconst totalItemsPerMode: Record<TimePickerSelection, number> = {\n hour: 12,\n minute: 60,\n second: 60,\n millisecond: 1000,\n};\n\nconst intervals: Record<TimePickerSelection, number> = {\n hour: 1,\n minute: 5,\n second: 5,\n millisecond: 100,\n};\n\nconst isDragging = ref<boolean>(false);\nconst clockFace = useTemplateRef<InstanceType<typeof HTMLDivElement>>('clockFace');\n\nconst showSecond = computed<boolean>(() => props.accuracy === TimeAccuracy.SECOND || props.accuracy === TimeAccuracy.MILLISECOND);\nconst showMillisecond = computed<boolean>(() => props.accuracy === TimeAccuracy.MILLISECOND);\n\nconst period = computed<'PM' | 'AM'>(() => isDefined(selectedHour) && get(selectedHour) >= TWELVE_HOURS ? 'PM' : 'AM');\n\nconst displayHour = computed<number | undefined>(() => {\n if (!isDefined(selectedHour)) {\n return undefined;\n }\n const hourValue = get(selectedHour);\n const hour = hourValue % TWELVE_HOURS;\n return hour === 0 ? TWELVE_HOURS : hour;\n});\n\nconst editedValue = computed<number | undefined>(() => {\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour);\n }\n else if (mode === 'minute') {\n return get(selectedMinute);\n }\n else if (mode === 'second') {\n return get(selectedSecond);\n }\n else {\n return get(selectedMillisecond);\n }\n});\n\nconst displayClockHandCircle = computed<boolean>(() => {\n const mode = get(editMode);\n if (mode === 'hour' || !isDefined(editedValue)) {\n return false;\n }\n else {\n const interval = intervals[mode];\n const value = get(editedValue);\n return value % interval !== 0;\n }\n});\n\nconst dotStyle = computed<StyleValue>(() => ({\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n}));\n\nconst clockHandStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (currentValue * (FULL_CIRCLE / totalItems));\n\n return {\n height: '36%',\n top: '14%',\n left: '50%',\n transformOrigin: 'bottom center',\n transform: `translateX(-50%) rotate(${angle}deg)`,\n zIndex: 10,\n };\n});\n\nconst clockHandCircleStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const radius = '38%';\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (currentValue * (FULL_CIRCLE / totalItems));\n\n const radians = (angle * Math.PI) / 180;\n\n const x = 50 + parseFloat(radius) * Math.cos(radians - Math.PI / 2);\n const y = 50 + parseFloat(radius) * Math.sin(radians - Math.PI / 2);\n\n return {\n position: 'absolute',\n top: `${y}%`,\n left: `${x}%`,\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 11,\n };\n});\n\nconst clockNumbers = computed<number[]>(() => {\n const mode = get(editMode);\n const interval = intervals[mode];\n const total = totalItemsPerMode[mode];\n const numbers = generateNumbers(total, interval);\n if (mode === 'hour') {\n numbers[0] = 12;\n }\n return numbers;\n});\n\nfunction getModelHours() {\n return isDefined(modelValue) ? new Date(get(modelValue)).getHours() : undefined;\n}\n\nfunction getModelMinutes() {\n return isDefined(modelValue) ? new Date(get(modelValue)).getMinutes() : undefined;\n}\n\nfunction getModelSeconds() {\n const acceptedAccuracy: TimeAccuracy[] = [TimeAccuracy.SECOND, TimeAccuracy.MILLISECOND];\n return acceptedAccuracy.includes(props.accuracy) && isDefined(modelValue)\n ? new Date(get(modelValue)).getSeconds()\n : undefined;\n}\n\nfunction getModelMilliseconds() {\n return props.accuracy === TimeAccuracy.MILLISECOND && isDefined(modelValue)\n ? new Date(get(modelValue)).getMilliseconds()\n : undefined;\n}\n\nfunction generateNumbers(total: number, interval: number): number[] {\n const numbers: number[] = [];\n for (let i = 0; i < total; i += interval) {\n numbers.push(i);\n }\n return numbers;\n}\n\nfunction formatValue(value?: number, padding = 2): string {\n return value !== undefined\n ? value.toString().padStart(padding, '0')\n : '-'.repeat(padding);\n}\n\nfunction numberStyle(num: number): StyleValue {\n const radius = '38%';\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (num * (FULL_CIRCLE / totalItems)) - 90;\n\n const radians = (angle * Math.PI) / 180;\n const x = 50 + parseFloat(radius) * Math.cos(radians);\n const y = 50 + parseFloat(radius) * Math.sin(radians);\n\n return {\n top: `${y}%`,\n left: `${x}%`,\n transform: 'translate(-50%, -50%)',\n };\n}\n\nfunction isSelectedNumber(num: number): boolean {\n if (!isDefined(editedValue)) {\n return false;\n }\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour) === num;\n }\n else {\n const value = get(editedValue);\n const interval = intervals[mode];\n return value === num || (value % interval === 0 && value === num);\n }\n}\n\nfunction toggleAmPm() {\n if (!isDefined(selectedHour)) {\n return;\n }\n if (get(selectedHour) < TWELVE_HOURS) {\n set(selectedHour, get(selectedHour) + TWELVE_HOURS);\n }\n else {\n set(selectedHour, get(selectedHour) - TWELVE_HOURS);\n }\n\n updateModelValue();\n}\n\nfunction startDrag(event: MouseEvent | TouchEvent) {\n event.preventDefault();\n set(isDragging, true);\n\n const handleMove = (moveEvent: MouseEvent | TouchEvent) => {\n if (!get(isDragging) || !isDefined(clockFace))\n return;\n\n const rect = get(clockFace).getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n\n let clientX, clientY;\n\n if ('touches' in moveEvent) {\n const touch = moveEvent.touches[0];\n assert(touch);\n clientX = touch.clientX;\n clientY = touch.clientY;\n }\n else {\n clientX = moveEvent.clientX;\n clientY = moveEvent.clientY;\n }\n\n const x = clientX - centerX;\n const y = clientY - centerY;\n\n let angle = Math.atan2(y, x) * (180 / Math.PI) + 90;\n if (angle < 0)\n angle += FULL_CIRCLE;\n\n const mode = get(editMode);\n const unit = Math.round(angle / (FULL_CIRCLE / totalItemsPerMode[mode])) % totalItemsPerMode[mode];\n if (mode === 'hour') {\n let hour;\n\n hour = unit;\n if (hour === 0)\n hour = TWELVE_HOURS;\n\n if (get(period) === 'PM' && hour < TWELVE_HOURS) {\n hour += TWELVE_HOURS;\n }\n else if (get(period) === 'AM' && hour === TWELVE_HOURS) {\n hour = 0;\n }\n\n set(selectedHour, hour);\n }\n else if (mode === 'minute') {\n set(selectedMinute, unit);\n }\n else if (mode === 'second') {\n set(selectedSecond, unit);\n }\n else {\n set(selectedMillisecond, unit);\n }\n\n updateModelValue();\n };\n\n const handleEnd = (): void => {\n set(isDragging, false);\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchend', handleEnd);\n\n if (get(editMode) === 'hour') {\n set(editMode, 'minute');\n }\n else if (get(showSecond) && get(editMode) === 'minute') {\n set(editMode, 'second');\n }\n else if (get(showMillisecond) && get(editMode) === 'second') {\n set(editMode, 'millisecond');\n }\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('touchmove', handleMove);\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchend', handleEnd);\n\n handleMove(event);\n}\n\nfunction selectByClick(num: number) {\n const mode = get(editMode);\n if (mode === 'hour') {\n let newHour = num;\n\n if (get(period) === 'PM' && newHour < TWELVE_HOURS) {\n newHour += TWELVE_HOURS;\n }\n\n set(selectedHour, newHour);\n set(editMode, 'minute');\n }\n else if (mode === 'minute') {\n set(selectedMinute, num);\n if (get(showSecond))\n set(editMode, 'second');\n }\n else if (mode === 'second') {\n set(selectedSecond, num);\n if (get(showMillisecond)) {\n set(editMode, 'millisecond');\n }\n }\n else if (mode === 'millisecond') {\n set(selectedMillisecond, num);\n }\n\n updateModelValue();\n}\n\nfunction updateModelValue() {\n if (!(isDefined(selectedHour) && isDefined(selectedMinute))) {\n return;\n }\n nextTick(() => {\n const date = isDefined(modelValue) ? new Date(get(modelValue)) : new Date();\n date.setHours(get(selectedHour));\n date.setMinutes(get(selectedMinute));\n date.setSeconds(get(selectedSecond) ?? 0);\n date.setMilliseconds(get(selectedMillisecond) ?? 0);\n set(modelValue, date);\n });\n}\n\nonMounted(() => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n});\n\nwatch(modelValue, () => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n}, { deep: true });\n</script>\n\n<template>\n <div\n :class=\"{\n [$style['rui-timepicker']]: true,\n [$style.bordered]: !borderless,\n }\"\n >\n <div :class=\"$style['rui-digital-display']\">\n <div class=\"flex justify-center items-center gap-1\">\n <div\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'hour',\n }\"\n @click=\"editMode = 'hour'\"\n >\n {{ formatValue(displayHour) }}\n </div>\n <div class=\"text-2xl font-semibold\">\n :\n </div>\n <div\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'minute',\n }\"\n @click=\"editMode = 'minute'\"\n >\n {{ formatValue(selectedMinute) }}\n </div>\n <div\n v-if=\"showSecond\"\n class=\"text-2xl font-semibold\"\n >\n :\n </div>\n <div\n v-if=\"showSecond\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'second',\n }\"\n @click=\"editMode = 'second'\"\n >\n {{ formatValue(selectedSecond) }}\n </div>\n\n <div\n v-if=\"showMillisecond\"\n class=\"text-lg font-semibold\"\n >\n .\n </div>\n\n <div\n v-if=\"showMillisecond\"\n class=\"!text-lg\"\n :class=\"{\n [$style.active]: editMode === 'millisecond',\n [$style['rui-digit']]: true,\n }\"\n @click=\"editMode = 'millisecond'\"\n >\n {{ formatValue(selectedMillisecond, 3) }}\n </div>\n <div class=\"text-xl\">\n <div\n class=\"rui-time-picker-period cursor-pointer\"\n @click=\"toggleAmPm()\"\n >\n {{ period }}\n </div>\n </div>\n </div>\n </div>\n\n <div\n ref=\"clockFace\"\n :class=\"$style['rui-clock-face']\"\n @mousedown=\"startDrag($event)\"\n @touchstart=\"startDrag($event)\"\n >\n <div\n :class=\"$style['rui-center-dot']\"\n :style=\"dotStyle\"\n />\n\n <div\n :class=\"$style['rui-clock-hand']\"\n :style=\"clockHandStyle\"\n />\n\n <div\n v-if=\"displayClockHandCircle\"\n :class=\"$style['rui-clock-hand-circle']\"\n :style=\"clockHandCircleStyle\"\n />\n\n <div\n v-for=\"num in clockNumbers\"\n :key=\"`num-${num}`\"\n :class=\"{\n [$style['rui-clock-number']]: true,\n [$style['is-selected']]: isSelectedNumber(num),\n [`rui-${editMode}-${num.toString().padStart(2, '0')}`]: true,\n }\"\n :style=\"numberStyle(num)\"\n @click=\"selectByClick(num)\"\n >\n {{ num }}\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.rui-timepicker {\n @apply bg-white overflow-hidden text-rui-text p-3;\n\n &.bordered {\n @apply rounded-md shadow-sm border border-rui-grey-200;\n }\n}\n\n.rui-digital-display {\n @apply mb-2 text-center;\n}\n\n.rui-digit {\n @apply text-2xl font-semibold cursor-pointer;\n\n &.active {\n @apply text-rui-primary;\n }\n}\n\n.rui-clock-face {\n @apply relative rounded-full w-64 h-64 mx-auto border border-rui-grey-200;\n}\n\n.rui-center-dot {\n @apply absolute rounded-full bg-rui-primary w-3 h-3;\n}\n\n.rui-clock-hand {\n @apply absolute w-[1.5px] bg-rui-primary rounded-full;\n}\n\n.rui-clock-hand-circle {\n @apply absolute border-2 border-rui-primary;\n}\n\n.rui-clock-number {\n @apply absolute text-center text-sm font-medium w-8 h-8 flex items-center justify-center hover:bg-rui-primary-lighter cursor-pointer rounded-full;\n\n &.is-selected {\n @apply bg-rui-primary text-rui-dark-text dark:text-rui-light-text z-10 font-bold;\n }\n}\n\n:global(.dark) {\n .rui-timepicker {\n @apply bg-rui-grey-900;\n\n &.bordered {\n @apply border-rui-grey-800;\n }\n }\n\n .rui-clock-face {\n @apply border-rui-grey-800;\n }\n}\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeClass","$style","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeStyle"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTimePicker.vue2.js","sources":["../../../src/components/time-picker/RuiTimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, type StyleValue, watch } from 'vue';\nimport { TimeAccuracy } from '@/consts/time-accuracy';\nimport { assert } from '@/utils/assert';\n\nexport type TimePickerSelection = 'hour' | 'minute' | 'second' | 'millisecond';\n\nexport interface RuiTimePickerProps {\n accuracy?: TimeAccuracy;\n borderless?: boolean;\n}\n\nconst modelValue = defineModel<Date | undefined>({ required: true });\n\nconst selectedHour = defineModel<number | undefined>('hour');\nconst selectedMinute = defineModel<number | undefined>('minute');\nconst selectedSecond = defineModel<number | undefined>('second');\nconst selectedMillisecond = defineModel<number | undefined>('millisecond');\nconst editMode = defineModel<TimePickerSelection>('selection', { default: 'hour' });\n\nconst { accuracy = TimeAccuracy.MINUTE, borderless = false } = defineProps<RuiTimePickerProps>();\n\nconst FULL_CIRCLE = 360;\nconst TWELVE_HOURS = 12;\n\nconst totalItemsPerMode: Record<TimePickerSelection, number> = {\n hour: 12,\n minute: 60,\n second: 60,\n millisecond: 1000,\n};\n\nconst intervals: Record<TimePickerSelection, number> = {\n hour: 1,\n minute: 5,\n second: 5,\n millisecond: 100,\n};\n\nconst isDragging = ref<boolean>(false);\nconst clockFace = useTemplateRef<InstanceType<typeof HTMLDivElement>>('clockFace');\n\nconst showSecond = computed<boolean>(\n () => accuracy === TimeAccuracy.SECOND || accuracy === TimeAccuracy.MILLISECOND,\n);\nconst showMillisecond = computed<boolean>(() => accuracy === TimeAccuracy.MILLISECOND);\n\nconst period = computed<'PM' | 'AM'>(() =>\n isDefined(selectedHour) && get(selectedHour) >= TWELVE_HOURS ? 'PM' : 'AM',\n);\n\nconst displayHour = computed<number | undefined>(() => {\n if (!isDefined(selectedHour)) {\n return undefined;\n }\n const hourValue = get(selectedHour);\n const hour = hourValue % TWELVE_HOURS;\n return hour === 0 ? TWELVE_HOURS : hour;\n});\n\nconst editedValue = computed<number | undefined>(() => {\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour);\n }\n else if (mode === 'minute') {\n return get(selectedMinute);\n }\n else if (mode === 'second') {\n return get(selectedSecond);\n }\n else {\n return get(selectedMillisecond);\n }\n});\n\nconst displayClockHandCircle = computed<boolean>(() => {\n const mode = get(editMode);\n if (mode === 'hour' || !isDefined(editedValue)) {\n return false;\n }\n else {\n const interval = intervals[mode];\n const value = get(editedValue);\n return value % interval !== 0;\n }\n});\n\nconst dotStyle = computed<StyleValue>(() => ({\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n}));\n\nconst clockHandStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = currentValue * (FULL_CIRCLE / totalItems);\n\n return {\n height: '36%',\n top: '14%',\n left: '50%',\n transformOrigin: 'bottom center',\n transform: `translateX(-50%) rotate(${angle}deg)`,\n zIndex: 10,\n };\n});\n\nconst clockHandCircleStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const radius = '38%';\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = currentValue * (FULL_CIRCLE / totalItems);\n\n const radians = (angle * Math.PI) / 180;\n\n const x = 50 + parseFloat(radius) * Math.cos(radians - Math.PI / 2);\n const y = 50 + parseFloat(radius) * Math.sin(radians - Math.PI / 2);\n\n return {\n position: 'absolute',\n top: `${y}%`,\n left: `${x}%`,\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 11,\n };\n});\n\nconst clockNumbers = computed<number[]>(() => {\n const mode = get(editMode);\n const interval = intervals[mode];\n const total = totalItemsPerMode[mode];\n const numbers = generateNumbers(total, interval);\n if (mode === 'hour') {\n numbers[0] = 12;\n }\n return numbers;\n});\n\nfunction getModelHours(): number | undefined {\n return isDefined(modelValue) ? new Date(get(modelValue)).getHours() : undefined;\n}\n\nfunction getModelMinutes(): number | undefined {\n return isDefined(modelValue) ? new Date(get(modelValue)).getMinutes() : undefined;\n}\n\nfunction getModelSeconds(): number | undefined {\n const acceptedAccuracy: TimeAccuracy[] = [TimeAccuracy.SECOND, TimeAccuracy.MILLISECOND];\n return acceptedAccuracy.includes(accuracy) && isDefined(modelValue)\n ? new Date(get(modelValue)).getSeconds()\n : undefined;\n}\n\nfunction getModelMilliseconds(): number | undefined {\n return accuracy === TimeAccuracy.MILLISECOND && isDefined(modelValue)\n ? new Date(get(modelValue)).getMilliseconds()\n : undefined;\n}\n\nfunction generateNumbers(total: number, interval: number): number[] {\n const numbers: number[] = [];\n for (let i = 0; i < total; i += interval) {\n numbers.push(i);\n }\n return numbers;\n}\n\nfunction formatValue(value?: number, padding = 2): string {\n return value !== undefined ? value.toString().padStart(padding, '0') : '-'.repeat(padding);\n}\n\nfunction numberStyle(num: number): StyleValue {\n const radius = '38%';\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = num * (FULL_CIRCLE / totalItems) - 90;\n\n const radians = (angle * Math.PI) / 180;\n const x = 50 + parseFloat(radius) * Math.cos(radians);\n const y = 50 + parseFloat(radius) * Math.sin(radians);\n\n return {\n top: `${y}%`,\n left: `${x}%`,\n transform: 'translate(-50%, -50%)',\n };\n}\n\nfunction isSelectedNumber(num: number): boolean {\n if (!isDefined(editedValue)) {\n return false;\n }\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour) === num;\n }\n else {\n const value = get(editedValue);\n const interval = intervals[mode];\n return value === num || (value % interval === 0 && value === num);\n }\n}\n\nfunction toggleAmPm(): void {\n if (!isDefined(selectedHour)) {\n return;\n }\n if (get(selectedHour) < TWELVE_HOURS) {\n set(selectedHour, get(selectedHour) + TWELVE_HOURS);\n }\n else {\n set(selectedHour, get(selectedHour) - TWELVE_HOURS);\n }\n\n updateModelValue();\n}\n\nfunction startDrag(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n set(isDragging, true);\n\n if (!isDefined(clockFace))\n return;\n\n const rect = get(clockFace).getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n let rafId: number | null = null;\n\n const applyMove = (clientX: number, clientY: number): void => {\n const x = clientX - centerX;\n const y = clientY - centerY;\n\n let angle = Math.atan2(y, x) * (180 / Math.PI) + 90;\n if (angle < 0)\n angle += FULL_CIRCLE;\n\n const mode = get(editMode);\n const unit =\n Math.round(angle / (FULL_CIRCLE / totalItemsPerMode[mode])) % totalItemsPerMode[mode];\n if (mode === 'hour') {\n let hour = unit;\n if (hour === 0)\n hour = TWELVE_HOURS;\n\n if (get(period) === 'PM' && hour < TWELVE_HOURS) {\n hour += TWELVE_HOURS;\n }\n else if (get(period) === 'AM' && hour === TWELVE_HOURS) {\n hour = 0;\n }\n\n set(selectedHour, hour);\n }\n else if (mode === 'minute') {\n set(selectedMinute, unit);\n }\n else if (mode === 'second') {\n set(selectedSecond, unit);\n }\n else {\n set(selectedMillisecond, unit);\n }\n\n updateModelValue();\n };\n\n const handleMove = (moveEvent: MouseEvent | TouchEvent): void => {\n if (!get(isDragging))\n return;\n\n if (rafId !== null)\n return;\n\n let clientX: number;\n let clientY: number;\n\n if ('touches' in moveEvent) {\n const touch = moveEvent.touches[0];\n assert(touch);\n clientX = touch.clientX;\n clientY = touch.clientY;\n }\n else {\n clientX = moveEvent.clientX;\n clientY = moveEvent.clientY;\n }\n\n rafId = requestAnimationFrame(() => {\n applyMove(clientX, clientY);\n rafId = null;\n });\n };\n\n const handleEnd = (): void => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n set(isDragging, false);\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchend', handleEnd);\n\n if (get(editMode) === 'hour') {\n set(editMode, 'minute');\n }\n else if (get(showSecond) && get(editMode) === 'minute') {\n set(editMode, 'second');\n }\n else if (get(showMillisecond) && get(editMode) === 'second') {\n set(editMode, 'millisecond');\n }\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('touchmove', handleMove);\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchend', handleEnd);\n\n // Apply initial position synchronously for immediate feedback\n const initialEvent = event;\n let clientX: number;\n let clientY: number;\n if ('touches' in initialEvent) {\n const touch = initialEvent.touches[0];\n assert(touch);\n clientX = touch.clientX;\n clientY = touch.clientY;\n }\n else {\n clientX = initialEvent.clientX;\n clientY = initialEvent.clientY;\n }\n applyMove(clientX, clientY);\n}\n\nfunction selectByClick(num: number): void {\n const mode = get(editMode);\n if (mode === 'hour') {\n let newHour = num;\n\n if (get(period) === 'PM' && newHour < TWELVE_HOURS) {\n newHour += TWELVE_HOURS;\n }\n\n set(selectedHour, newHour);\n set(editMode, 'minute');\n }\n else if (mode === 'minute') {\n set(selectedMinute, num);\n if (get(showSecond))\n set(editMode, 'second');\n }\n else if (mode === 'second') {\n set(selectedSecond, num);\n if (get(showMillisecond)) {\n set(editMode, 'millisecond');\n }\n }\n else if (mode === 'millisecond') {\n set(selectedMillisecond, num);\n }\n\n updateModelValue();\n}\n\nfunction updateModelValue(): void {\n if (!(isDefined(selectedHour) && isDefined(selectedMinute))) {\n return;\n }\n nextTick(() => {\n const date = isDefined(modelValue) ? new Date(get(modelValue)) : new Date();\n date.setHours(get(selectedHour));\n date.setMinutes(get(selectedMinute));\n date.setSeconds(get(selectedSecond) ?? 0);\n date.setMilliseconds(get(selectedMillisecond) ?? 0);\n set(modelValue, date);\n });\n}\n\nwatch(\n modelValue,\n () => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n },\n);\n\nonMounted(() => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n});\n</script>\n\n<template>\n <div\n role=\"group\"\n aria-label=\"Time picker\"\n :class=\"{\n [$style['rui-timepicker']]: true,\n [$style.bordered]: !borderless,\n }\"\n >\n <div :class=\"$style['rui-digital-display']\">\n <div class=\"flex justify-center items-center gap-1\">\n <div\n role=\"button\"\n aria-label=\"Select hours\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'hour',\n }\"\n @click=\"editMode = 'hour'\"\n >\n {{ formatValue(displayHour) }}\n </div>\n <div class=\"text-2xl font-semibold\">\n :\n </div>\n <div\n role=\"button\"\n aria-label=\"Select minutes\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'minute',\n }\"\n @click=\"editMode = 'minute'\"\n >\n {{ formatValue(selectedMinute) }}\n </div>\n <div\n v-if=\"showSecond\"\n class=\"text-2xl font-semibold\"\n >\n :\n </div>\n <div\n v-if=\"showSecond\"\n role=\"button\"\n aria-label=\"Select seconds\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'second',\n }\"\n @click=\"editMode = 'second'\"\n >\n {{ formatValue(selectedSecond) }}\n </div>\n\n <div\n v-if=\"showMillisecond\"\n class=\"text-lg font-semibold\"\n >\n .\n </div>\n\n <div\n v-if=\"showMillisecond\"\n role=\"button\"\n aria-label=\"Select milliseconds\"\n class=\"!text-lg\"\n :class=\"{\n [$style.active]: editMode === 'millisecond',\n [$style['rui-digit']]: true,\n }\"\n @click=\"editMode = 'millisecond'\"\n >\n {{ formatValue(selectedMillisecond, 3) }}\n </div>\n <div class=\"text-xl\">\n <div\n role=\"button\"\n aria-label=\"Toggle AM/PM\"\n class=\"rui-time-picker-period cursor-pointer\"\n @click=\"toggleAmPm()\"\n >\n {{ period }}\n </div>\n </div>\n </div>\n </div>\n\n <div\n ref=\"clockFace\"\n role=\"listbox\"\n :aria-label=\"`Select ${editMode}`\"\n :class=\"$style['rui-clock-face']\"\n @mousedown=\"startDrag($event)\"\n @touchstart=\"startDrag($event)\"\n >\n <div\n :class=\"$style['rui-center-dot']\"\n :style=\"dotStyle\"\n />\n\n <div\n :class=\"$style['rui-clock-hand']\"\n :style=\"clockHandStyle\"\n />\n\n <div\n v-if=\"displayClockHandCircle\"\n :class=\"$style['rui-clock-hand-circle']\"\n :style=\"clockHandCircleStyle\"\n />\n\n <div\n v-for=\"num in clockNumbers\"\n :key=\"`num-${num}`\"\n role=\"option\"\n :aria-selected=\"isSelectedNumber(num)\"\n :class=\"{\n [$style['rui-clock-number']]: true,\n [$style['is-selected']]: isSelectedNumber(num),\n [`rui-${editMode}-${num.toString().padStart(2, '0')}`]: true,\n }\"\n :style=\"numberStyle(num)\"\n @click=\"selectByClick(num)\"\n >\n {{ num }}\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.rui-timepicker {\n @apply bg-white overflow-hidden text-rui-text p-3;\n\n &.bordered {\n @apply rounded-md shadow-sm border border-rui-grey-200;\n }\n}\n\n.rui-digital-display {\n @apply mb-2 text-center;\n}\n\n.rui-digit {\n @apply text-2xl font-semibold cursor-pointer;\n\n &.active {\n @apply text-rui-primary;\n }\n}\n\n.rui-clock-face {\n @apply relative rounded-full w-64 h-64 mx-auto border border-rui-grey-200;\n}\n\n.rui-center-dot {\n @apply absolute rounded-full bg-rui-primary w-3 h-3;\n}\n\n.rui-clock-hand {\n @apply absolute w-[1.5px] bg-rui-primary rounded-full;\n}\n\n.rui-clock-hand-circle {\n @apply absolute border-2 border-rui-primary;\n}\n\n.rui-clock-number {\n @apply absolute text-center text-sm font-medium w-8 h-8 flex items-center justify-center hover:bg-rui-primary-lighter cursor-pointer rounded-full;\n\n &.is-selected {\n @apply bg-rui-primary text-rui-dark-text dark:text-rui-light-text z-10 font-bold;\n }\n}\n\n:global(.dark) {\n .rui-timepicker {\n @apply bg-rui-grey-900;\n\n &.bordered {\n @apply border-rui-grey-800;\n }\n }\n\n .rui-clock-face {\n @apply border-rui-grey-800;\n }\n}\n</style>\n"],"names":["_useModel","clientX","clientY","_createElementBlock","_normalizeClass","$style","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeStyle"],"mappings":"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"}
@@ -12,20 +12,15 @@ function useBreakpoint() {
12
12
  const breakpoints = useBreakpoints(breakpointList);
13
13
  const getKeys = Object.keys;
14
14
  const list = getKeys(breakpointList);
15
- const rawSizes = list.map(
16
- (breakpoint, index) => {
17
- if (index < list.length - 1) {
18
- const nextBreakpoint = list[index + 1];
19
- assert(nextBreakpoint);
20
- return [breakpoint, breakpoints.between(breakpoint, nextBreakpoint)];
21
- }
22
- return [breakpoint, breakpoints[breakpoint]];
15
+ const rawSizes = list.map((breakpoint, index) => {
16
+ if (index < list.length - 1) {
17
+ const nextBreakpoint = list[index + 1];
18
+ assert(nextBreakpoint);
19
+ return [breakpoint, breakpoints.between(breakpoint, nextBreakpoint)];
23
20
  }
24
- );
25
- const sizes = rawSizes.map(([breakpoint, value]) => [
26
- camelCase(`is_${breakpoint}`),
27
- value
28
- ]);
21
+ return [breakpoint, breakpoints[breakpoint]];
22
+ });
23
+ const sizes = rawSizes.map(([breakpoint, value]) => [camelCase(`is_${breakpoint}`), value]);
29
24
  const sizesUp = list.map((breakpoint) => [
30
25
  camelCase(`is_${breakpoint}_and_up`),
31
26
  breakpoints.greaterOrEqual(breakpoint)
@@ -1 +1 @@
1
- {"version":3,"file":"breakpoint.js","sources":["../../src/composables/breakpoint.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport { breakpointsTailwind } from '@vueuse/core';\nimport { camelCase } from 'scule';\nimport { assert } from '@/utils/assert';\n\nexport function useBreakpoint() {\n const { width } = useWindowSize();\n\n const breakpointList = {\n xs: 0,\n ...breakpointsTailwind,\n } as const;\n\n type Breakpoint = keyof typeof breakpointList;\n\n const breakpoints = useBreakpoints(breakpointList);\n\n const getKeys = Object.keys as <T extends object>(obj: T) => Array<keyof T>;\n\n const list = getKeys(breakpointList);\n\n const rawSizes: [Breakpoint, Ref<boolean>][] = list.map(\n (breakpoint, index) => {\n if (index < list.length - 1) {\n const nextBreakpoint = list[index + 1];\n assert(nextBreakpoint);\n return [breakpoint, breakpoints.between(breakpoint, nextBreakpoint)];\n }\n return [breakpoint, breakpoints[breakpoint]];\n },\n );\n\n const sizes = rawSizes.map(([breakpoint, value]) => [\n camelCase(`is_${breakpoint}`),\n value,\n ]);\n\n const sizesUp = list.map(breakpoint => [\n camelCase(`is_${breakpoint}_and_up`),\n breakpoints.greaterOrEqual(breakpoint),\n ]);\n\n const sizesDown = list.map(breakpoint => [\n camelCase(`is_${breakpoint}_and_down`),\n breakpoints.smaller(breakpoint),\n ]);\n\n const name = computed(() => rawSizes.find(item => get(item[1]))?.[0] || '');\n\n return {\n ...Object.fromEntries(sizes),\n ...Object.fromEntries(sizesUp),\n ...Object.fromEntries(sizesDown),\n name,\n width,\n };\n}\n"],"names":[],"mappings":";;;;;AAKO,SAAS,gBAAgB;AAC9B,QAAM,EAAE,MAAA,IAAU,cAAA;AAElB,QAAM,iBAAiB;AAAA,IACrB,IAAI;AAAA,IACJ,GAAG;AAAA,EAAA;AAKL,QAAM,cAAc,eAAe,cAAc;AAEjD,QAAM,UAAU,OAAO;AAEvB,QAAM,OAAO,QAAQ,cAAc;AAEnC,QAAM,WAAyC,KAAK;AAAA,IAClD,CAAC,YAAY,UAAU;AACrB,UAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,cAAM,iBAAiB,KAAK,QAAQ,CAAC;AACrC,eAAO,cAAc;AACrB,eAAO,CAAC,YAAY,YAAY,QAAQ,YAAY,cAAc,CAAC;AAAA,MACrE;AACA,aAAO,CAAC,YAAY,YAAY,UAAU,CAAC;AAAA,IAC7C;AAAA,EAAA;AAGF,QAAM,QAAQ,SAAS,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM;AAAA,IAClD,UAAU,MAAM,UAAU,EAAE;AAAA,IAC5B;AAAA,EAAA,CACD;AAED,QAAM,UAAU,KAAK,IAAI,CAAA,eAAc;AAAA,IACrC,UAAU,MAAM,UAAU,SAAS;AAAA,IACnC,YAAY,eAAe,UAAU;AAAA,EAAA,CACtC;AAED,QAAM,YAAY,KAAK,IAAI,CAAA,eAAc;AAAA,IACvC,UAAU,MAAM,UAAU,WAAW;AAAA,IACrC,YAAY,QAAQ,UAAU;AAAA,EAAA,CAC/B;AAED,QAAM,OAAO,SAAS,MAAM,SAAS,KAAK,CAAA,SAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAE1E,SAAO;AAAA,IACL,GAAG,OAAO,YAAY,KAAK;AAAA,IAC3B,GAAG,OAAO,YAAY,OAAO;AAAA,IAC7B,GAAG,OAAO,YAAY,SAAS;AAAA,IAC/B;AAAA,IACA;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"breakpoint.js","sources":["../../src/composables/breakpoint.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport { breakpointsTailwind } from '@vueuse/core';\nimport { camelCase } from 'scule';\nimport { assert } from '@/utils/assert';\n\nexport function useBreakpoint() {\n const { width } = useWindowSize();\n\n const breakpointList = {\n xs: 0,\n ...breakpointsTailwind,\n } as const;\n\n type Breakpoint = keyof typeof breakpointList;\n\n const breakpoints = useBreakpoints(breakpointList);\n\n const getKeys = Object.keys as <T extends object>(obj: T) => Array<keyof T>;\n\n const list = getKeys(breakpointList);\n\n const rawSizes: [Breakpoint, Ref<boolean>][] = list.map((breakpoint, index) => {\n if (index < list.length - 1) {\n const nextBreakpoint = list[index + 1];\n assert(nextBreakpoint);\n return [breakpoint, breakpoints.between(breakpoint, nextBreakpoint)];\n }\n return [breakpoint, breakpoints[breakpoint]];\n });\n\n const sizes = rawSizes.map(([breakpoint, value]) => [camelCase(`is_${breakpoint}`), value]);\n\n const sizesUp = list.map(breakpoint => [\n camelCase(`is_${breakpoint}_and_up`),\n breakpoints.greaterOrEqual(breakpoint),\n ]);\n\n const sizesDown = list.map(breakpoint => [\n camelCase(`is_${breakpoint}_and_down`),\n breakpoints.smaller(breakpoint),\n ]);\n\n const name = computed<string>(() => rawSizes.find(item => get(item[1]))?.[0] || '');\n\n return {\n ...Object.fromEntries(sizes),\n ...Object.fromEntries(sizesUp),\n ...Object.fromEntries(sizesDown),\n name,\n width,\n };\n}\n"],"names":[],"mappings":";;;;;AAKO,SAAS,gBAAgB;AAC9B,QAAM,EAAE,MAAA,IAAU,cAAA;AAElB,QAAM,iBAAiB;AAAA,IACrB,IAAI;AAAA,IACJ,GAAG;AAAA,EAAA;AAKL,QAAM,cAAc,eAAe,cAAc;AAEjD,QAAM,UAAU,OAAO;AAEvB,QAAM,OAAO,QAAQ,cAAc;AAEnC,QAAM,WAAyC,KAAK,IAAI,CAAC,YAAY,UAAU;AAC7E,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,YAAM,iBAAiB,KAAK,QAAQ,CAAC;AACrC,aAAO,cAAc;AACrB,aAAO,CAAC,YAAY,YAAY,QAAQ,YAAY,cAAc,CAAC;AAAA,IACrE;AACA,WAAO,CAAC,YAAY,YAAY,UAAU,CAAC;AAAA,EAC7C,CAAC;AAED,QAAM,QAAQ,SAAS,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,UAAU,MAAM,UAAU,EAAE,GAAG,KAAK,CAAC;AAE1F,QAAM,UAAU,KAAK,IAAI,CAAA,eAAc;AAAA,IACrC,UAAU,MAAM,UAAU,SAAS;AAAA,IACnC,YAAY,eAAe,UAAU;AAAA,EAAA,CACtC;AAED,QAAM,YAAY,KAAK,IAAI,CAAA,eAAc;AAAA,IACvC,UAAU,MAAM,UAAU,WAAW;AAAA,IACrC,YAAY,QAAQ,UAAU;AAAA,EAAA,CAC/B;AAED,QAAM,OAAO,SAAiB,MAAM,SAAS,KAAK,CAAA,SAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAElF,SAAO;AAAA,IACL,GAAG,OAAO,YAAY,KAAK;AAAA,IAC3B,GAAG,OAAO,YAAY,OAAO;AAAA,IAC7B,GAAG,OAAO,YAAY,SAAS;AAAA,IAC/B;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import type { Ref } from 'vue';
1
+ import type { Ref, TemplateRef } from 'vue';
2
2
  export type KeyOfType<T, V> = T extends string | number | boolean | symbol | null | undefined ? never : V extends object ? keyof T : keyof {
3
3
  [P in keyof T as T[P] extends V ? P : V extends T[P] ? P : never]: any;
4
4
  };
@@ -11,7 +11,7 @@ export interface DropdownOptions<TValue, TItem> {
11
11
  dense?: Ref<boolean>;
12
12
  disabled?: Ref<boolean>;
13
13
  value: Ref<TItem | TItem[] | undefined>;
14
- menuRef: Ref<HTMLElement>;
14
+ menuRef: Ref<HTMLElement> | TemplateRef<HTMLElement>;
15
15
  keyAttr?: KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>;
16
16
  textAttr?: keyof TItem | ((item: TItem) => string);
17
17
  appendWidth?: number;
@@ -22,19 +22,22 @@ export interface DropdownOptions<TValue, TItem> {
22
22
  autoFocus?: boolean;
23
23
  setValue?: (val: TItem) => void;
24
24
  hideSelected?: boolean;
25
+ isOpen?: Ref<boolean>;
26
+ getText?: (item: TItem) => string | undefined;
27
+ getIdentifier?: (item: TItem) => any;
25
28
  }
26
29
  export declare function useDropdownOptionProperty<TValue, TItem>({ keyAttr, textAttr, }: DropdownItemAttr<TValue, TItem>): {
27
30
  getIdentifier: (item: TItem) => TItem | TItem[KeyOfType<TItem, TValue extends Array<infer U> ? U : TValue>];
28
31
  getText: (item: TItem) => string | undefined;
29
32
  };
30
- export declare function useDropdownMenu<TValue, TItem>({ appendWidth, autoFocus, autoSelectFirst, dense, disabled, hideSelected, itemHeight, keyAttr, menuRef, options: allOptions, overscan, prependWidth, setValue, textAttr, value, }: DropdownOptions<TValue, TItem>): {
33
+ export declare function useDropdownMenu<TValue, TItem>({ appendWidth, autoFocus, autoSelectFirst, dense, disabled, getIdentifier: externalGetIdentifier, getText: externalGetText, hideSelected, isOpen: externalIsOpen, itemHeight, keyAttr, menuRef, options: allOptions, overscan, prependWidth, setValue, textAttr, value, }: DropdownOptions<TValue, TItem>): {
31
34
  applyHighlighted: () => void;
32
35
  containerProps: {
33
36
  ref: Ref<HTMLElement | null>;
34
37
  onScroll: () => void;
35
38
  style: import("vue").StyleValue;
36
39
  };
37
- getIdentifier: (item: TItem) => TItem | TItem[KeyOfType<TItem, TValue extends (infer U)[] ? U : TValue>];
40
+ getIdentifier: (item: TItem) => any;
38
41
  getText: (item: TItem) => string | undefined;
39
42
  highlightedIndex: Ref<number, number>;
40
43
  isActiveItem: (item: TItem) => boolean;