@rotki/ui-library 2.12.2 → 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 (277) 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 +5 -15
  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 +6 -7
  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 +19 -17
  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 +2 -3
  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 +47 -39
  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.map +1 -1
  33. package/dist/components/chips/RuiChip.vue.d.ts +7 -21
  34. package/dist/components/chips/RuiChip.vue2.js +16 -21
  35. package/dist/components/chips/RuiChip.vue2.js.map +1 -1
  36. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
  37. package/dist/components/color-picker/RuiColorBoard.vue2.js +14 -18
  38. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
  39. package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
  40. package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
  41. package/dist/components/color-picker/RuiColorHue.vue2.js +10 -13
  42. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
  43. package/dist/components/color-picker/RuiColorInput.vue.js +8 -6
  44. package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
  45. package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
  46. package/dist/components/color-picker/RuiColorPicker.vue.js +18 -13
  47. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
  48. package/dist/components/color-picker/utils.js +22 -5
  49. package/dist/components/color-picker/utils.js.map +1 -1
  50. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
  51. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +73 -77
  52. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  53. package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
  54. package/dist/components/date-time-picker/dayjs-setup.js +8 -0
  55. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
  56. package/dist/components/date-time-picker/segment-config.d.ts +14 -0
  57. package/dist/components/date-time-picker/segment-config.js +23 -0
  58. package/dist/components/date-time-picker/segment-config.js.map +1 -0
  59. package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
  60. package/dist/components/date-time-picker/segment-utils.js +36 -0
  61. package/dist/components/date-time-picker/segment-utils.js.map +1 -0
  62. package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
  63. package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
  64. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  65. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
  66. package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
  67. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  68. package/dist/components/date-time-picker/utils.d.ts +1 -0
  69. package/dist/components/date-time-picker/utils.js +1 -0
  70. package/dist/components/date-time-picker/utils.js.map +1 -1
  71. package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
  72. package/dist/components/divider/RuiDivider.vue.js.map +1 -1
  73. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +9 -1120
  74. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +144 -160
  75. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  76. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
  77. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +31 -31
  78. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  79. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
  80. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +18 -21
  81. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  82. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +3 -1
  83. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +12 -15
  84. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
  85. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -11
  86. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +6 -7
  87. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
  88. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +9 -784
  89. package/dist/components/forms/select/RuiMenuSelect.vue2.js +48 -51
  90. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  91. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +10 -11
  92. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +15 -24
  93. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
  94. package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
  95. package/dist/components/forms/slider/RuiSlider.vue2.js +41 -46
  96. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  97. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
  98. package/dist/components/forms/switch/RuiSwitch.vue2.js +21 -20
  99. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  100. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
  101. package/dist/components/forms/text-area/RuiTextArea.vue2.js +43 -79
  102. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  103. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +7 -27
  104. package/dist/components/forms/text-field/RuiTextField.vue2.js +35 -66
  105. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  106. package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
  107. package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
  108. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
  109. package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
  110. package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
  111. package/dist/components/icons/RuiIcon.vue2.js +8 -8
  112. package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
  113. package/dist/components/index.d.ts +3 -3
  114. package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
  115. package/dist/components/loaders/RuiSkeletonBase.vue2.js +1 -1
  116. package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
  117. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
  118. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +1 -1
  119. package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
  120. package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
  121. package/dist/components/logos/RuiLogo.vue.js +11 -13
  122. package/dist/components/logos/RuiLogo.vue.js.map +1 -1
  123. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
  124. package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
  125. package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
  126. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
  127. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
  128. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
  129. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +21 -27
  130. package/dist/components/overlays/dialog/RuiDialog.vue2.js +80 -63
  131. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
  132. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
  133. package/dist/components/overlays/menu/RuiMenu.vue2.js +67 -76
  134. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
  135. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +22 -30
  136. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +71 -47
  137. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
  138. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
  139. package/dist/components/overlays/notification/RuiNotification.vue.js +25 -22
  140. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
  141. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
  142. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +11 -8
  143. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
  144. package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
  145. package/dist/components/progress/RuiProgress.vue2.js +18 -24
  146. package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
  147. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
  148. package/dist/components/steppers/RuiFooterStepper.vue2.js +21 -21
  149. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
  150. package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
  151. package/dist/components/steppers/RuiStepper.vue2.js +31 -33
  152. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
  153. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
  154. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +1 -1
  155. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
  156. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
  157. package/dist/components/steppers/RuiStepperIcon.vue2.js +1 -1
  158. package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
  159. package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
  160. package/dist/components/tables/RuiDataTable.vue2.js +173 -582
  161. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
  162. package/dist/components/tables/RuiDataTable.vue3.js +24 -27
  163. package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
  164. package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
  165. package/dist/components/tables/RuiExpandButton.vue2.js +1 -0
  166. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
  167. package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
  168. package/dist/components/tables/RuiTableHead.vue2.js +19 -19
  169. package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
  170. package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
  171. package/dist/components/tables/RuiTablePagination.vue2.js +17 -16
  172. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
  173. package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
  174. package/dist/components/tabs/tab/RuiTab.vue2.js +80 -51
  175. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
  176. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
  177. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +1 -1
  178. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
  179. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +1 -4
  180. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
  181. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
  182. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
  183. package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
  184. package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
  185. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
  186. package/dist/components/time-picker/RuiTimePicker.vue2.js +68 -35
  187. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  188. package/dist/composables/breakpoint.js +8 -13
  189. package/dist/composables/breakpoint.js.map +1 -1
  190. package/dist/composables/dropdown-menu.d.ts +7 -4
  191. package/dist/composables/dropdown-menu.js +73 -50
  192. package/dist/composables/dropdown-menu.js.map +1 -1
  193. package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
  194. package/dist/composables/forms/auto-complete/focus.js +28 -17
  195. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  196. package/dist/composables/forms/auto-complete/index.d.ts +0 -9
  197. package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
  198. package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
  199. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  200. package/dist/composables/forms/auto-complete/search.d.ts +7 -0
  201. package/dist/composables/forms/auto-complete/search.js +10 -8
  202. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  203. package/dist/composables/forms/auto-complete/value.d.ts +4 -0
  204. package/dist/composables/forms/auto-complete/value.js +24 -42
  205. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  206. package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
  207. package/dist/composables/forms/use-label-with-quote.js +14 -0
  208. package/dist/composables/forms/use-label-with-quote.js.map +1 -0
  209. package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
  210. package/dist/composables/forms/use-prepend-append-width.js +25 -0
  211. package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
  212. package/dist/composables/popper.js +60 -46
  213. package/dist/composables/popper.js.map +1 -1
  214. package/dist/composables/sticky-header.d.ts +7 -5
  215. package/dist/composables/sticky-header.js +51 -41
  216. package/dist/composables/sticky-header.js.map +1 -1
  217. package/dist/composables/tables/data-table/columns.d.ts +25 -0
  218. package/dist/composables/tables/data-table/columns.js +54 -0
  219. package/dist/composables/tables/data-table/columns.js.map +1 -0
  220. package/dist/composables/tables/data-table/expansion.d.ts +17 -0
  221. package/dist/composables/tables/data-table/expansion.js +38 -0
  222. package/dist/composables/tables/data-table/expansion.js.map +1 -0
  223. package/dist/composables/tables/data-table/grouping.d.ts +29 -0
  224. package/dist/composables/tables/data-table/grouping.js +136 -0
  225. package/dist/composables/tables/data-table/grouping.js.map +1 -0
  226. package/dist/composables/tables/data-table/pagination.d.ts +33 -0
  227. package/dist/composables/tables/data-table/pagination.js +119 -0
  228. package/dist/composables/tables/data-table/pagination.js.map +1 -0
  229. package/dist/composables/tables/data-table/selection.d.ts +29 -0
  230. package/dist/composables/tables/data-table/selection.js +164 -0
  231. package/dist/composables/tables/data-table/selection.js.map +1 -0
  232. package/dist/composables/tables/data-table/sort.d.ts +32 -0
  233. package/dist/composables/tables/data-table/sort.js +136 -0
  234. package/dist/composables/tables/data-table/sort.js.map +1 -0
  235. package/dist/composables/tables/data-table/types.d.ts +14 -0
  236. package/dist/composables/tables/data-table/types.js +11 -0
  237. package/dist/composables/tables/data-table/types.js.map +1 -0
  238. package/dist/composables/theme.js +1 -20
  239. package/dist/composables/theme.js.map +1 -1
  240. package/dist/composables/timeout-manager.d.ts +4 -2
  241. package/dist/composables/timeout-manager.js +2 -1
  242. package/dist/composables/timeout-manager.js.map +1 -1
  243. package/dist/icons/icons_1.js +28 -28
  244. package/dist/icons/icons_1.js.map +1 -1
  245. package/dist/icons/icons_2.d.ts +8 -8
  246. package/dist/icons/icons_2.js +52 -52
  247. package/dist/icons/icons_2.js.map +1 -1
  248. package/dist/icons/icons_3.d.ts +18 -18
  249. package/dist/icons/icons_3.js +108 -108
  250. package/dist/icons/icons_3.js.map +1 -1
  251. package/dist/icons/icons_4.d.ts +35 -0
  252. package/dist/icons/icons_4.js +176 -1
  253. package/dist/icons/icons_4.js.map +1 -1
  254. package/dist/icons/index.d.ts +1 -1
  255. package/dist/icons/index.js +1 -1
  256. package/dist/icons/index.js.map +1 -1
  257. package/dist/index.js +43 -15
  258. package/dist/index.js.map +1 -1
  259. package/dist/style.css +189 -162
  260. package/dist/theme/index.js +15 -1
  261. package/dist/theme/index.js.map +1 -1
  262. package/dist/utils/assert.d.ts +1 -1
  263. package/dist/utils/assert.js.map +1 -1
  264. package/dist/utils/form-text-detail.d.ts +9 -8
  265. package/dist/utils/form-text-detail.js +1 -2
  266. package/dist/utils/form-text-detail.js.map +1 -1
  267. package/dist/utils/helpers.d.ts +4 -32
  268. package/dist/utils/helpers.js +8 -9
  269. package/dist/utils/helpers.js.map +1 -1
  270. package/dist/utils/is-equal.d.ts +1 -1
  271. package/dist/utils/is-equal.js +5 -3
  272. package/dist/utils/is-equal.js.map +1 -1
  273. package/dist/web-types.json +359 -359
  274. package/package.json +44 -35
  275. package/dist/utils/generate-id.d.ts +0 -5
  276. package/dist/utils/generate-id.js +0 -21
  277. package/dist/utils/generate-id.js.map +0 -1
@@ -1,17 +1,13 @@
1
- import type { Ref } from 'vue';
1
+ import type { Dayjs } from 'dayjs';
2
+ import type { Ref, ShallowRef } from 'vue';
2
3
  import type { TimeAccuracy } from '../../consts/time-accuracy.js';
3
- import { type Dayjs } from 'dayjs';
4
+ import { type Segment } from '../../components/date-time-picker/segment-config.js';
4
5
  import { type DateTimeSegmentType } from '../../components/date-time-picker/types.js';
5
- interface Segment {
6
- start: number;
7
- end: number;
8
- type: DateTimeSegmentType;
9
- }
10
6
  interface KeyboardHandlerOptions {
11
7
  dateFormat: Ref<string>;
12
8
  cursorPosition: Ref<number>;
13
9
  currentValue: Ref<number | undefined>;
14
- textInput: Ref<HTMLInputElement | undefined>;
10
+ textInput: Readonly<ShallowRef<HTMLInputElement | null>> | Ref<HTMLInputElement | undefined>;
15
11
  setValue: (segment: DateTimeSegmentType, value?: number) => void;
16
12
  getCurrent: (segment: DateTimeSegmentType) => number | undefined;
17
13
  getDateTime: () => Dayjs;
@@ -1,28 +1,10 @@
1
- import dayjs from "dayjs";
1
+ import { SEGMENT_CONFIG, SEGMENT_METHODS } from "./segment-config.js";
2
+ import { parseAndSetDateValues, getClickPosition } from "./segment-utils.js";
2
3
  import { isDateTimeSegmentType } from "./types.js";
3
- import { includeSeconds, includeMilliseconds } from "./utils.js";
4
4
  import { assert } from "../../utils/assert.js";
5
5
  import { computed, nextTick } from "vue";
6
6
  import { get, set } from "@vueuse/shared";
7
7
  import { isDefined } from "@vueuse/core";
8
- const SEGMENT_METHODS = {
9
- DD: "date",
10
- HH: "hour",
11
- MM: "month",
12
- SSS: "millisecond",
13
- YYYY: "year",
14
- mm: "minute",
15
- ss: "second"
16
- };
17
- const SEGMENT_CONFIG = {
18
- DD: { maxValue: 31, minValue: 1 },
19
- HH: { maxValue: 23, minValue: 0 },
20
- MM: { maxValue: 12, minValue: 1 },
21
- SSS: { maxValue: 999, minValue: 0 },
22
- YYYY: { maxValue: 9999, minValue: 1 },
23
- mm: { maxValue: 59, minValue: 0 },
24
- ss: { maxValue: 59, minValue: 0 }
25
- };
26
8
  function useKeyboardHandler(options) {
27
9
  const {
28
10
  accuracy,
@@ -59,9 +41,7 @@ function useKeyboardHandler(options) {
59
41
  });
60
42
  function getCurrentSegment(position = get(cursorPosition)) {
61
43
  const segments = get(segmentPositions);
62
- return segments.find(
63
- (segment) => position >= segment.start && position <= segment.end
64
- );
44
+ return segments.find((segment) => position >= segment.start && position <= segment.end);
65
45
  }
66
46
  function setCursorPosition(segment) {
67
47
  set(cursorPosition, segment.end);
@@ -104,7 +84,10 @@ function useKeyboardHandler(options) {
104
84
  const selectedDate = getDateTime();
105
85
  const updatedDate = selectedDate.set(method, selectedDate.get(method) + (increment ? 1 : -1));
106
86
  if (updatedDate.year() >= 1970) {
107
- setValue(segmentType, segmentType === "MM" ? updatedDate.get(method) + 1 : updatedDate.get(method));
87
+ setValue(
88
+ segmentType,
89
+ segmentType === "MM" ? updatedDate.get(method) + 1 : updatedDate.get(method)
90
+ );
108
91
  setCursorPosition(currentSegment);
109
92
  }
110
93
  }
@@ -205,13 +188,6 @@ function useKeyboardHandler(options) {
205
188
  else if (/^\d$/.test(key))
206
189
  handleDigitPressed(event, key);
207
190
  }
208
- function getClickPosition(event, input, useCaretPosition) {
209
- const fallback = input.selectionStart ?? 0;
210
- const caretPos = document.caretPositionFromPoint?.(event.clientX, event.clientY);
211
- if (caretPos)
212
- return caretPos.offset;
213
- return document.caretRangeFromPoint?.(event.clientX, event.clientY)?.startOffset ?? fallback;
214
- }
215
191
  let clickedSegment;
216
192
  function handleMouseDown(event) {
217
193
  if (disabled || readonly || !(event.target instanceof HTMLInputElement))
@@ -253,27 +229,6 @@ function useKeyboardHandler(options) {
253
229
  set(currentValue, void 0);
254
230
  clickedSegment = void 0;
255
231
  }
256
- function parseAndSetDateValues(pastedText) {
257
- try {
258
- const parsedDate = dayjs(pastedText, get(dateFormat));
259
- if (!parsedDate.isValid()) {
260
- return;
261
- }
262
- const date = parsedDate.toDate();
263
- setValue("YYYY", date.getFullYear());
264
- setValue("MM", date.getMonth() + 1);
265
- setValue("DD", date.getDate());
266
- setValue("HH", date.getHours());
267
- setValue("mm", date.getMinutes());
268
- if (includeSeconds(accuracy)) {
269
- setValue("ss", date.getSeconds());
270
- }
271
- if (includeMilliseconds(accuracy)) {
272
- setValue("SSS", date.getMilliseconds());
273
- }
274
- } catch {
275
- }
276
- }
277
232
  function handlePaste(event) {
278
233
  if (disabled || readonly)
279
234
  return;
@@ -285,7 +240,7 @@ function useKeyboardHandler(options) {
285
240
  if (!pastedText) {
286
241
  return;
287
242
  }
288
- parseAndSetDateValues(pastedText);
243
+ parseAndSetDateValues(pastedText, get(dateFormat), accuracy, setValue);
289
244
  }
290
245
  function handleInput(event) {
291
246
  if (disabled || readonly)
@@ -297,7 +252,7 @@ function useKeyboardHandler(options) {
297
252
  if (!inputText) {
298
253
  return;
299
254
  }
300
- parseAndSetDateValues(inputText);
255
+ parseAndSetDateValues(inputText, get(dateFormat), accuracy, setValue);
301
256
  }
302
257
  return {
303
258
  clear,
@@ -1 +1 @@
1
- {"version":3,"file":"use-keyboard-handler.js","sources":["../../../src/components/date-time-picker/use-keyboard-handler.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport type { TimeAccuracy } from '@/consts/time-accuracy';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport { type DateTimeSegmentType, isDateTimeSegmentType } from '@/components/date-time-picker/types';\nimport { includeMilliseconds, includeSeconds } from '@/components/date-time-picker/utils';\nimport { assert } from '@/utils/assert';\n\ninterface Segment { start: number; end: number; type: DateTimeSegmentType }\n\ntype SegmentMethod = 'date' | 'hour' | 'month' | 'minute' | 'second' | 'millisecond' | 'year';\nconst SEGMENT_METHODS: Record<DateTimeSegmentType, SegmentMethod> = {\n DD: 'date',\n HH: 'hour',\n MM: 'month',\n SSS: 'millisecond',\n YYYY: 'year',\n mm: 'minute',\n ss: 'second',\n};\n\ninterface SegmentBounds { maxValue: number; minValue?: number }\nconst SEGMENT_CONFIG: Record<DateTimeSegmentType, SegmentBounds> = {\n DD: { maxValue: 31, minValue: 1 },\n HH: { maxValue: 23, minValue: 0 },\n MM: { maxValue: 12, minValue: 1 },\n SSS: { maxValue: 999, minValue: 0 },\n YYYY: { maxValue: 9999, minValue: 1 },\n mm: { maxValue: 59, minValue: 0 },\n ss: { maxValue: 59, minValue: 0 },\n};\n\ninterface KeyboardHandlerOptions {\n dateFormat: Ref<string>;\n cursorPosition: Ref<number>;\n currentValue: Ref<number | undefined>;\n textInput: Ref<HTMLInputElement | undefined>;\n setValue: (segment: DateTimeSegmentType, value?: number) => void;\n getCurrent: (segment: DateTimeSegmentType) => number | undefined;\n getDateTime: () => Dayjs;\n disabled: boolean;\n readonly: boolean;\n accuracy: TimeAccuracy;\n}\n\nexport function useKeyboardHandler(options: KeyboardHandlerOptions) {\n const {\n accuracy,\n currentValue,\n cursorPosition,\n dateFormat,\n disabled,\n getCurrent,\n getDateTime,\n readonly,\n setValue,\n textInput,\n } = options;\n\n const formatSegments = computed<string[]>(() => {\n const format = get(dateFormat);\n return format.split(/([\\s./:])/g).filter(Boolean);\n });\n\n const segmentPositions = computed<Segment[]>(() => {\n const segments = get(formatSegments);\n const positions: Segment[] = [];\n let currentPosition = 0;\n\n segments.forEach((segment) => {\n if (!/[\\s./:]/.test(segment)) {\n assert(isDateTimeSegmentType(segment), `Invalid date format segment: ${segment}`);\n positions.push({\n end: currentPosition + segment.length,\n start: currentPosition,\n type: segment,\n });\n }\n currentPosition += segment.length;\n });\n\n return positions;\n });\n\n function getCurrentSegment(position: number = get(cursorPosition)) {\n const segments = get(segmentPositions);\n return segments.find(\n segment => position >= segment.start && position <= segment.end,\n );\n }\n\n function setCursorPosition(segment: Segment): void {\n set(cursorPosition, segment.end);\n\n nextTick(() => {\n if (isDefined(textInput)) {\n const input = get(textInput);\n input.setSelectionRange(segment.start, segment.end);\n input.focus();\n }\n });\n }\n\n function setSegment(segmentType: DateTimeSegmentType): void {\n const segments = get(segmentPositions).find(segment => segment.type === segmentType);\n if (segments) {\n setCursorPosition(segments);\n }\n }\n\n function clear(segmentType?: string): void {\n const currentSegment = getCurrentSegment();\n if (!segmentType && !currentSegment) {\n return;\n }\n\n const typeToUse = segmentType ?? currentSegment?.type;\n if (!typeToUse) {\n return;\n }\n\n setValue(typeToUse as DateTimeSegmentType, undefined);\n\n if (currentSegment) {\n setCursorPosition(currentSegment);\n }\n }\n\n function changeSegmentValue(increment: boolean): void {\n if (!isDefined(textInput))\n return;\n const currentSegment = getCurrentSegment();\n if (!currentSegment)\n return;\n const segmentType = currentSegment.type;\n const method = SEGMENT_METHODS[segmentType];\n const selectedDate = getDateTime();\n const updatedDate = selectedDate.set(method, selectedDate.get(method) + (increment ? 1 : -1));\n if (updatedDate.year() >= 1970) {\n setValue(segmentType, segmentType === 'MM' ? updatedDate.get(method) + 1 : updatedDate.get(method));\n setCursorPosition(currentSegment);\n }\n }\n\n function navigateSegments(key: string) {\n const position = get(cursorPosition);\n const positions = get(segmentPositions);\n const currentSegmentIndex = positions.findIndex(\n segment => position >= segment.start && position <= segment.end,\n );\n\n if (currentSegmentIndex === -1) {\n return;\n }\n\n set(currentValue, undefined);\n\n let nextSegmentIndex: number;\n if (key === 'ArrowRight') {\n nextSegmentIndex = currentSegmentIndex + 1;\n if (nextSegmentIndex < positions.length) {\n const nextSegment = positions[nextSegmentIndex];\n assert(nextSegment);\n setCursorPosition(nextSegment);\n }\n }\n else {\n nextSegmentIndex = currentSegmentIndex - 1;\n if (nextSegmentIndex >= 0) {\n const nextSegment = positions[nextSegmentIndex];\n assert(nextSegment);\n setCursorPosition(nextSegment);\n }\n }\n }\n\n function handleDigitPressed(event: KeyboardEvent, digit: string): void {\n if (!(event.target instanceof HTMLInputElement))\n return;\n const position = event.target.selectionStart ?? 0;\n const currentSegment = getCurrentSegment(position);\n if (!currentSegment || isNaN(parseInt(digit)))\n return;\n const segmentType = currentSegment.type;\n if (!isDateTimeSegmentType(segmentType))\n return;\n\n const config = SEGMENT_CONFIG[segmentType];\n const value = get(currentValue) ?? '';\n const combinedStr = `${value}${digit}`;\n const combinedValue = parseInt(combinedStr);\n const maxLength = segmentType.length;\n const minValue = config.minValue ?? 0;\n\n if (combinedValue >= minValue && combinedValue <= config.maxValue) {\n setValue(segmentType, combinedValue);\n setCursorPosition(currentSegment);\n }\n else if (combinedValue < minValue && combinedStr.length < maxLength) {\n // Track digit even if below minValue, so next digit can combine (e.g., \"0\" allows \"01\")\n set(currentValue, combinedValue);\n }\n\n const willExceedMax = parseInt(`${combinedStr}0`) > config.maxValue;\n // Use string length of typed digits, not parsed number length (e.g., \"01\" has length 2)\n if (willExceedMax || combinedStr.length >= maxLength)\n navigateSegments('ArrowRight');\n }\n\n function handleKeyboardNavigation(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp')\n changeSegmentValue(true);\n else if (event.key === 'ArrowDown')\n changeSegmentValue(false);\n }\n\n function handleBackspace(event: KeyboardEvent): void {\n if (!(event.target instanceof HTMLInputElement))\n return;\n const currentSegment = getCurrentSegment(event.target.selectionStart ?? 0);\n if (!currentSegment)\n return;\n const value = get(currentValue) ?? getCurrent(currentSegment.type) ?? '';\n const updatedValue = value.toString().slice(0, -1);\n setValue(currentSegment.type, updatedValue.length === 0 ? undefined : parseInt(updatedValue));\n setCursorPosition(currentSegment);\n }\n\n function onInputDeletePressed(event: KeyboardEvent): void {\n if (!(event.target instanceof HTMLInputElement))\n return;\n const segment = getCurrentSegment(event.target.selectionStart ?? 0);\n if (segment) {\n clear(segment.type);\n setCursorPosition(segment);\n }\n }\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (disabled || readonly)\n return;\n const { key } = event;\n if (key === 'Tab')\n return;\n event.preventDefault();\n if (key === 'ArrowRight' || key === 'ArrowLeft')\n navigateSegments(key);\n else if (key === 'ArrowUp' || key === 'ArrowDown')\n handleKeyboardNavigation(event);\n else if (key === 'Backspace')\n handleBackspace(event);\n else if (key === 'Delete')\n onInputDeletePressed(event);\n else if (/^\\d$/.test(key))\n handleDigitPressed(event, key);\n }\n\n function getClickPosition(event: MouseEvent, input: HTMLInputElement, useCaretPosition: boolean): number {\n const fallback = input.selectionStart ?? 0;\n if (!useCaretPosition)\n return fallback;\n const caretPos = document.caretPositionFromPoint?.(event.clientX, event.clientY);\n if (caretPos)\n return caretPos.offset;\n return document.caretRangeFromPoint?.(event.clientX, event.clientY)?.startOffset ?? fallback;\n }\n\n // Track the segment that was clicked, so handleFocus can restore it after DOM updates\n let clickedSegment: Segment | undefined;\n\n // Capture clicked segment on mousedown (fires before focus event)\n function handleMouseDown(event: MouseEvent): void {\n if (disabled || readonly || !(event.target instanceof HTMLInputElement))\n return;\n const currentSegment = getCurrentSegment(getClickPosition(event, event.target, true));\n if (currentSegment) {\n clickedSegment = currentSegment;\n }\n }\n\n function handleClick(event: MouseEvent): void {\n if (disabled || readonly || !(event.target instanceof HTMLInputElement))\n return;\n const currentSegment = getCurrentSegment(getClickPosition(event, event.target, true));\n if (currentSegment) {\n clickedSegment = currentSegment;\n set(cursorPosition, currentSegment.end);\n event.target.setSelectionRange(currentSegment.start, currentSegment.end);\n }\n }\n\n function handleInputSelection(event: Event): void {\n const target = event.target as HTMLInputElement;\n set(cursorPosition, target.selectionStart ?? 0);\n }\n\n function handleFocus(): void {\n // If we just clicked on a segment, restore that selection\n // (the selection may have been lost due to menu opening/DOM updates)\n if (clickedSegment) {\n setCursorPosition(clickedSegment);\n clickedSegment = undefined;\n return;\n }\n\n // Only select first segment if no text is currently selected in the input\n const input = get(textInput);\n if (input && input.selectionStart !== input.selectionEnd)\n return;\n const firstSegment = get(segmentPositions)[0];\n if (firstSegment)\n setCursorPosition(firstSegment);\n }\n\n function handleBlur(): void {\n // Reset cursor position and clicked segment when input loses focus\n // This prevents \"blinking\" when re-focusing on a different segment\n set(cursorPosition, 0);\n set(currentValue, undefined);\n clickedSegment = undefined;\n }\n\n function parseAndSetDateValues(pastedText: string) {\n try {\n const parsedDate = dayjs(pastedText, get(dateFormat));\n\n if (!parsedDate.isValid()) {\n return;\n }\n\n const date = parsedDate.toDate();\n setValue('YYYY', date.getFullYear());\n setValue('MM', date.getMonth() + 1);\n setValue('DD', date.getDate());\n setValue('HH', date.getHours());\n setValue('mm', date.getMinutes());\n if (includeSeconds(accuracy)) {\n setValue('ss', date.getSeconds());\n }\n if (includeMilliseconds(accuracy)) {\n setValue('SSS', date.getMilliseconds());\n }\n }\n catch {\n // Invalid format, ignore paste\n }\n }\n\n function handlePaste(event: ClipboardEvent): void {\n if (disabled || readonly)\n return;\n\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n event.preventDefault();\n\n const pastedText = event.clipboardData?.getData('text');\n if (!pastedText) {\n return;\n }\n parseAndSetDateValues(pastedText);\n }\n\n function handleInput(event: Event): void {\n if (disabled || readonly)\n return;\n\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n const inputText = event.target.value;\n if (!inputText) {\n return;\n }\n\n parseAndSetDateValues(inputText);\n }\n\n return {\n clear,\n getCurrentSegment,\n handleBlur,\n handleClick,\n handleFocus,\n handleInput,\n handleInputSelection,\n handleKeyDown,\n handleMouseDown,\n handlePaste,\n setSegment,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-keyboard-handler.js","sources":["../../../src/components/date-time-picker/use-keyboard-handler.ts"],"sourcesContent":["import type { Dayjs } from 'dayjs';\nimport type { Ref, ShallowRef } from 'vue';\nimport type { TimeAccuracy } from '@/consts/time-accuracy';\nimport { type Segment, SEGMENT_CONFIG, SEGMENT_METHODS } from '@/components/date-time-picker/segment-config';\nimport { getClickPosition, parseAndSetDateValues } from '@/components/date-time-picker/segment-utils';\nimport {\n type DateTimeSegmentType,\n isDateTimeSegmentType,\n} from '@/components/date-time-picker/types';\nimport { assert } from '@/utils/assert';\n\ninterface KeyboardHandlerOptions {\n dateFormat: Ref<string>;\n cursorPosition: Ref<number>;\n currentValue: Ref<number | undefined>;\n textInput: Readonly<ShallowRef<HTMLInputElement | null>> | Ref<HTMLInputElement | undefined>;\n setValue: (segment: DateTimeSegmentType, value?: number) => void;\n getCurrent: (segment: DateTimeSegmentType) => number | undefined;\n getDateTime: () => Dayjs;\n disabled: boolean;\n readonly: boolean;\n accuracy: TimeAccuracy;\n}\n\nexport function useKeyboardHandler(options: KeyboardHandlerOptions) {\n const {\n accuracy,\n currentValue,\n cursorPosition,\n dateFormat,\n disabled,\n getCurrent,\n getDateTime,\n readonly,\n setValue,\n textInput,\n } = options;\n\n const formatSegments = computed<string[]>(() => {\n const format = get(dateFormat);\n return format.split(/([\\s./:])/g).filter(Boolean);\n });\n\n const segmentPositions = computed<Segment[]>(() => {\n const segments = get(formatSegments);\n const positions: Segment[] = [];\n let currentPosition = 0;\n\n segments.forEach((segment) => {\n if (!/[\\s./:]/.test(segment)) {\n assert(isDateTimeSegmentType(segment), `Invalid date format segment: ${segment}`);\n positions.push({\n end: currentPosition + segment.length,\n start: currentPosition,\n type: segment,\n });\n }\n currentPosition += segment.length;\n });\n\n return positions;\n });\n\n function getCurrentSegment(position: number = get(cursorPosition)) {\n const segments = get(segmentPositions);\n return segments.find(segment => position >= segment.start && position <= segment.end);\n }\n\n function setCursorPosition(segment: Segment): void {\n set(cursorPosition, segment.end);\n\n nextTick(() => {\n if (isDefined(textInput)) {\n const input = get(textInput);\n input.setSelectionRange(segment.start, segment.end);\n input.focus();\n }\n });\n }\n\n function setSegment(segmentType: DateTimeSegmentType): void {\n const segments = get(segmentPositions).find(segment => segment.type === segmentType);\n if (segments) {\n setCursorPosition(segments);\n }\n }\n\n function clear(segmentType?: string): void {\n const currentSegment = getCurrentSegment();\n if (!segmentType && !currentSegment) {\n return;\n }\n\n const typeToUse = segmentType ?? currentSegment?.type;\n if (!typeToUse) {\n return;\n }\n\n setValue(typeToUse as DateTimeSegmentType, undefined);\n\n if (currentSegment) {\n setCursorPosition(currentSegment);\n }\n }\n\n function changeSegmentValue(increment: boolean): void {\n if (!isDefined(textInput))\n return;\n const currentSegment = getCurrentSegment();\n if (!currentSegment)\n return;\n const segmentType = currentSegment.type;\n const method = SEGMENT_METHODS[segmentType];\n const selectedDate = getDateTime();\n const updatedDate = selectedDate.set(method, selectedDate.get(method) + (increment ? 1 : -1));\n if (updatedDate.year() >= 1970) {\n setValue(\n segmentType,\n segmentType === 'MM' ? updatedDate.get(method) + 1 : updatedDate.get(method),\n );\n setCursorPosition(currentSegment);\n }\n }\n\n function navigateSegments(key: string) {\n const position = get(cursorPosition);\n const positions = get(segmentPositions);\n const currentSegmentIndex = positions.findIndex(\n segment => position >= segment.start && position <= segment.end,\n );\n\n if (currentSegmentIndex === -1) {\n return;\n }\n\n set(currentValue, undefined);\n\n let nextSegmentIndex: number;\n if (key === 'ArrowRight') {\n nextSegmentIndex = currentSegmentIndex + 1;\n if (nextSegmentIndex < positions.length) {\n const nextSegment = positions[nextSegmentIndex];\n assert(nextSegment);\n setCursorPosition(nextSegment);\n }\n }\n else {\n nextSegmentIndex = currentSegmentIndex - 1;\n if (nextSegmentIndex >= 0) {\n const nextSegment = positions[nextSegmentIndex];\n assert(nextSegment);\n setCursorPosition(nextSegment);\n }\n }\n }\n\n function handleDigitPressed(event: KeyboardEvent, digit: string): void {\n if (!(event.target instanceof HTMLInputElement))\n return;\n const position = event.target.selectionStart ?? 0;\n const currentSegment = getCurrentSegment(position);\n if (!currentSegment || isNaN(parseInt(digit)))\n return;\n const segmentType = currentSegment.type;\n if (!isDateTimeSegmentType(segmentType))\n return;\n\n const config = SEGMENT_CONFIG[segmentType];\n const value = get(currentValue) ?? '';\n const combinedStr = `${value}${digit}`;\n const combinedValue = parseInt(combinedStr);\n const maxLength = segmentType.length;\n const minValue = config.minValue ?? 0;\n\n if (combinedValue >= minValue && combinedValue <= config.maxValue) {\n setValue(segmentType, combinedValue);\n setCursorPosition(currentSegment);\n }\n else if (combinedValue < minValue && combinedStr.length < maxLength) {\n // Track digit even if below minValue, so next digit can combine (e.g., \"0\" allows \"01\")\n set(currentValue, combinedValue);\n }\n\n const willExceedMax = parseInt(`${combinedStr}0`) > config.maxValue;\n // Use string length of typed digits, not parsed number length (e.g., \"01\" has length 2)\n if (willExceedMax || combinedStr.length >= maxLength)\n navigateSegments('ArrowRight');\n }\n\n function handleKeyboardNavigation(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp')\n changeSegmentValue(true);\n else if (event.key === 'ArrowDown')\n changeSegmentValue(false);\n }\n\n function handleBackspace(event: KeyboardEvent): void {\n if (!(event.target instanceof HTMLInputElement))\n return;\n const currentSegment = getCurrentSegment(event.target.selectionStart ?? 0);\n if (!currentSegment)\n return;\n const value = get(currentValue) ?? getCurrent(currentSegment.type) ?? '';\n const updatedValue = value.toString().slice(0, -1);\n setValue(currentSegment.type, updatedValue.length === 0 ? undefined : parseInt(updatedValue));\n setCursorPosition(currentSegment);\n }\n\n function onInputDeletePressed(event: KeyboardEvent): void {\n if (!(event.target instanceof HTMLInputElement))\n return;\n const segment = getCurrentSegment(event.target.selectionStart ?? 0);\n if (segment) {\n clear(segment.type);\n setCursorPosition(segment);\n }\n }\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (disabled || readonly)\n return;\n const { key } = event;\n if (key === 'Tab')\n return;\n event.preventDefault();\n if (key === 'ArrowRight' || key === 'ArrowLeft')\n navigateSegments(key);\n else if (key === 'ArrowUp' || key === 'ArrowDown')\n handleKeyboardNavigation(event);\n else if (key === 'Backspace')\n handleBackspace(event);\n else if (key === 'Delete')\n onInputDeletePressed(event);\n else if (/^\\d$/.test(key))\n handleDigitPressed(event, key);\n }\n\n // Track the segment that was clicked, so handleFocus can restore it after DOM updates\n let clickedSegment: Segment | undefined;\n\n // Capture clicked segment on mousedown (fires before focus event)\n function handleMouseDown(event: MouseEvent): void {\n if (disabled || readonly || !(event.target instanceof HTMLInputElement))\n return;\n const currentSegment = getCurrentSegment(getClickPosition(event, event.target, true));\n if (currentSegment) {\n clickedSegment = currentSegment;\n }\n }\n\n function handleClick(event: MouseEvent): void {\n if (disabled || readonly || !(event.target instanceof HTMLInputElement))\n return;\n const currentSegment = getCurrentSegment(getClickPosition(event, event.target, true));\n if (currentSegment) {\n clickedSegment = currentSegment;\n set(cursorPosition, currentSegment.end);\n event.target.setSelectionRange(currentSegment.start, currentSegment.end);\n }\n }\n\n function handleInputSelection(event: Event): void {\n const target = event.target as HTMLInputElement;\n set(cursorPosition, target.selectionStart ?? 0);\n }\n\n function handleFocus(): void {\n // If we just clicked on a segment, restore that selection\n // (the selection may have been lost due to menu opening/DOM updates)\n if (clickedSegment) {\n setCursorPosition(clickedSegment);\n clickedSegment = undefined;\n return;\n }\n\n // Only select first segment if no text is currently selected in the input\n const input = get(textInput);\n if (input && input.selectionStart !== input.selectionEnd)\n return;\n const firstSegment = get(segmentPositions)[0];\n if (firstSegment)\n setCursorPosition(firstSegment);\n }\n\n function handleBlur(): void {\n // Reset cursor position and clicked segment when input loses focus\n // This prevents \"blinking\" when re-focusing on a different segment\n set(cursorPosition, 0);\n set(currentValue, undefined);\n clickedSegment = undefined;\n }\n\n function handlePaste(event: ClipboardEvent): void {\n if (disabled || readonly)\n return;\n\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n event.preventDefault();\n\n const pastedText = event.clipboardData?.getData('text');\n if (!pastedText) {\n return;\n }\n parseAndSetDateValues(pastedText, get(dateFormat), accuracy, setValue);\n }\n\n function handleInput(event: Event): void {\n if (disabled || readonly)\n return;\n\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n const inputText = event.target.value;\n if (!inputText) {\n return;\n }\n\n parseAndSetDateValues(inputText, get(dateFormat), accuracy, setValue);\n }\n\n return {\n clear,\n getCurrentSegment,\n handleBlur,\n handleClick,\n handleFocus,\n handleInput,\n handleInputSelection,\n handleKeyDown,\n handleMouseDown,\n handlePaste,\n setSegment,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { TimeAccuracy } from '../../consts/time-accuracy.js';
2
+ import '../../components/date-time-picker/dayjs-setup.js';
2
3
  export declare function guessTimezone(): string | undefined;
3
4
  export declare function includeSeconds(accuracy: TimeAccuracy): boolean;
4
5
  export declare function includeMilliseconds(accuracy: TimeAccuracy): boolean;
@@ -1,6 +1,7 @@
1
1
  import dayjs from "dayjs";
2
2
  import { timezones } from "./timezones.js";
3
3
  import { TimeAccuracy } from "../../consts/time-accuracy.js";
4
+ import "./dayjs-setup.js";
4
5
  function guessTimezone() {
5
6
  const timezone = dayjs.tz.guess();
6
7
  return timezones.find((tz) => tz === timezone);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/components/date-time-picker/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { timezones } from '@/components/date-time-picker/timezones';\nimport { TimeAccuracy } from '@/consts/time-accuracy';\n\nexport function guessTimezone() {\n const timezone = dayjs.tz.guess();\n return timezones.find(tz => tz === timezone);\n}\n\nexport function includeSeconds(accuracy: TimeAccuracy): boolean {\n return accuracy === TimeAccuracy.SECOND || accuracy === TimeAccuracy.MILLISECOND;\n}\n\nexport function includeMilliseconds(accuracy: TimeAccuracy): boolean {\n return accuracy === TimeAccuracy.MILLISECOND;\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,gBAAgB;AAC9B,QAAM,WAAW,MAAM,GAAG,MAAA;AAC1B,SAAO,UAAU,KAAK,CAAA,OAAM,OAAO,QAAQ;AAC7C;AAEO,SAAS,eAAe,UAAiC;AAC9D,SAAO,aAAa,aAAa,UAAU,aAAa,aAAa;AACvE;AAEO,SAAS,oBAAoB,UAAiC;AACnE,SAAO,aAAa,aAAa;AACnC;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/components/date-time-picker/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { timezones } from '@/components/date-time-picker/timezones';\nimport { TimeAccuracy } from '@/consts/time-accuracy';\nimport '@/components/date-time-picker/dayjs-setup';\n\nexport function guessTimezone() {\n const timezone = dayjs.tz.guess();\n return timezones.find(tz => tz === timezone);\n}\n\nexport function includeSeconds(accuracy: TimeAccuracy): boolean {\n return accuracy === TimeAccuracy.SECOND || accuracy === TimeAccuracy.MILLISECOND;\n}\n\nexport function includeMilliseconds(accuracy: TimeAccuracy): boolean {\n return accuracy === TimeAccuracy.MILLISECOND;\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,gBAAgB;AAC9B,QAAM,WAAW,MAAM,GAAG,MAAA;AAC1B,SAAO,UAAU,KAAK,CAAA,OAAM,OAAO,QAAQ;AAC7C;AAEO,SAAS,eAAe,UAAiC;AAC9D,SAAO,aAAa,aAAa,UAAU,aAAa,aAAa;AACvE;AAEO,SAAS,oBAAoB,UAAiC;AACnE,SAAO,aAAa,aAAa;AACnC;"}
@@ -1,8 +1,6 @@
1
1
  export interface Props {
2
2
  vertical?: boolean;
3
3
  }
4
- declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
5
- vertical: boolean;
6
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
4
+ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
5
  declare const _default: typeof __VLS_export;
8
6
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"RuiDivider.vue.js","sources":["../../../src/components/divider/RuiDivider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nexport interface Props {\n vertical?: boolean;\n}\n\ndefineOptions({\n name: 'RuiDivider',\n inheritAttrs: false,\n});\n\nwithDefaults(defineProps<Props>(), {\n vertical: false,\n});\n</script>\n\n<template>\n <div\n :class=\"vertical ? 'border-l' : 'border-t'\"\n class=\"border-default\"\n role=\"separator\"\n :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n v-bind=\"$attrs\"\n />\n</template>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","$attrs"],"mappings":";;;;;;;;;;;;;AAgBE,aAAAA,UAAA,GAAAC,mBAME,OANFC,WAME;AAAA,QALC,OAAK,CAAE,QAAA,WAAQ,aAAA,YACV,gBAAgB;AAAA,QACtB,MAAK;AAAA,QACJ,oBAAkB,QAAA,WAAQ,aAAA;AAAA,MAAA,GACnBC,KAAAA,MAAM,GAAA,MAAA,IAAA,UAAA;AAAA;;;"}
1
+ {"version":3,"file":"RuiDivider.vue.js","sources":["../../../src/components/divider/RuiDivider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nexport interface Props {\n vertical?: boolean;\n}\n\ndefineOptions({\n name: 'RuiDivider',\n inheritAttrs: false,\n});\n\nconst { vertical = false } = defineProps<Props>();\n</script>\n\n<template>\n <div\n :class=\"vertical ? 'border-l' : 'border-t'\"\n class=\"border-default\"\n role=\"separator\"\n :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n v-bind=\"$attrs\"\n />\n</template>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","$attrs"],"mappings":";;;;;;;;;;;;;AAcE,aAAAA,UAAA,GAAAC,mBAME,OANFC,WAME;AAAA,QALC,OAAK,CAAE,QAAA,WAAQ,aAAA,YACV,gBAAgB;AAAA,QACtB,MAAK;AAAA,QACJ,oBAAkB,QAAA,WAAQ,aAAA;AAAA,MAAA,GACnBC,KAAAA,MAAM,GAAA,MAAA,IAAA,UAAA;AAAA;;;"}