@rotki/ui-library 2.12.2 → 2.13.1

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,51 +1,54 @@
1
- import { defineComponent, toRefs, ref, useSlots, computed, onMounted, watch, openBlock, createElementBlock, normalizeClass, unref, createVNode, withCtx, createCommentVNode, createElementVNode, Fragment, renderList, createBlock, resolveDynamicComponent, isVNode, nextTick } from "vue";
1
+ import { defineComponent, useModel, ref, useTemplateRef, useSlots, getCurrentInstance, toRefs, computed, Fragment, isVNode, nextTick, watch, onMounted, openBlock, createElementBlock, normalizeClass, unref, createVNode, withCtx, createCommentVNode, createElementVNode, renderList, createBlock, resolveDynamicComponent, mergeModels } from "vue";
2
2
  import { get, set, throttleFilter } from "@vueuse/shared";
3
3
  import { useRoute, useRouter } from "vue-router";
4
4
  import RuiButton from "../../buttons/button/RuiButton.vue.js";
5
5
  import RuiIcon from "../../icons/RuiIcon.vue.js";
6
- import { useElementSize, useScroll, watchTriggerable, watchImmediate, useResizeObserver } from "@vueuse/core";
6
+ import { useElementSize, useScroll, useResizeObserver, watchTriggerable, watchImmediate } from "@vueuse/core";
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  ...{
9
9
  name: "RuiTabs"
10
10
  },
11
11
  __name: "RuiTabs",
12
- props: {
13
- color: { default: void 0 },
12
+ props: /* @__PURE__ */ mergeModels({
13
+ color: {},
14
14
  vertical: { type: Boolean, default: false },
15
15
  disabled: { type: Boolean, default: false },
16
16
  grow: { type: Boolean, default: false },
17
- modelValue: { default: void 0 },
18
17
  align: { default: "center" },
19
18
  indicatorPosition: { default: "end" }
20
- },
19
+ }, {
20
+ "modelValue": {},
21
+ "modelModifiers": {}
22
+ }),
21
23
  emits: ["update:modelValue"],
22
- setup(__props, { emit: __emit }) {
23
- const props = __props;
24
- const emit = __emit;
25
- const { color, grow, modelValue, disabled, vertical, align, indicatorPosition } = toRefs(props);
24
+ setup(__props) {
25
+ const modelValue = useModel(__props, "modelValue");
26
26
  const internalModelValue = ref();
27
- const bar = ref();
28
- const wrapper = ref();
27
+ const bar = useTemplateRef("bar");
28
+ const wrapper = useTemplateRef("wrapper");
29
29
  const showArrows = ref(false);
30
- function getChildrenTabs(children2) {
31
- return children2.flatMap((item) => {
32
- if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)
33
- return getChildrenTabs(item.children.filter(isVNode));
34
- return [item];
35
- }).flat();
36
- }
37
30
  const slots = useSlots();
31
+ const hasRouter = !!getCurrentInstance()?.appContext.config.globalProperties.$router;
32
+ const route = hasRouter ? useRoute() : void 0;
33
+ const router = hasRouter ? useRouter() : void 0;
34
+ const { width, height } = useElementSize(bar);
35
+ const { width: wrapperWidth, height: wrapperHeight } = useElementSize(wrapper);
36
+ const { arrivedState, x, y } = useScroll(bar, { behavior: "smooth" });
37
+ const { top, bottom, left, right } = toRefs(arrivedState);
38
+ useResizeObserver(bar, () => {
39
+ keepActiveTabVisible();
40
+ });
38
41
  const children = computed(() => {
39
42
  const slotContent = slots.default?.() ?? [];
40
43
  const tabs = getChildrenTabs(slotContent);
41
44
  const currentModelValue = get(internalModelValue);
42
45
  const inheritedProps = {
43
- color: get(color),
44
- grow: get(grow),
45
- disabled: get(disabled),
46
- vertical: get(vertical),
47
- align: get(align),
48
- indicatorPosition: get(indicatorPosition)
46
+ color: __props.color,
47
+ grow: __props.grow,
48
+ disabled: __props.disabled,
49
+ vertical: __props.vertical,
50
+ align: __props.align,
51
+ indicatorPosition: __props.indicatorPosition
49
52
  };
50
53
  return tabs.map((tab, index) => {
51
54
  let tabValue = tab.props?.value ?? index;
@@ -63,12 +66,30 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
63
66
  };
64
67
  });
65
68
  });
69
+ const prevArrowDisabled = computed(() => {
70
+ if (!__props.vertical)
71
+ return get(left);
72
+ return get(top);
73
+ });
74
+ const nextArrowDisabled = computed(() => {
75
+ if (!__props.vertical)
76
+ return get(right);
77
+ return get(bottom);
78
+ });
79
+ function getChildrenTabs(children2) {
80
+ return children2.flatMap((item) => {
81
+ if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)
82
+ return getChildrenTabs(item.children.filter(isVNode));
83
+ return [item];
84
+ }).flat();
85
+ }
66
86
  function updateModelValue(newModelValue) {
67
- emit("update:modelValue", newModelValue);
87
+ set(modelValue, newModelValue);
68
88
  set(internalModelValue, newModelValue);
69
89
  }
70
- const route = useRoute();
71
90
  function isPathMatch(path, { exactPath, exact }) {
91
+ if (!route)
92
+ return false;
72
93
  const currentRoute = route.fullPath;
73
94
  if (exactPath)
74
95
  return currentRoute === path;
@@ -111,37 +132,32 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
111
132
  }
112
133
  });
113
134
  }
114
- const router = useRouter();
115
135
  function applyNewValue(onlyLink = false) {
116
- const enabledChildren = get(children).filter(
117
- (child) => !child.props.disabled
118
- );
136
+ const enabledChildren = get(children).filter((child) => !child.props?.disabled);
119
137
  if (enabledChildren.length > 0) {
120
138
  let newModelValue = get(modelValue) || 0;
121
139
  enabledChildren.forEach((child, index) => {
122
- const props2 = child.props;
123
- if (!onlyLink && index === 0 && props2.value)
124
- newModelValue = props2.value;
125
- const to = props2.to ? router.resolve(props2.to) : void 0;
126
- if (props2.link !== false && to && isPathMatch(to.fullPath, props2))
140
+ const props = child.props;
141
+ if (!onlyLink && index === 0 && props.value)
142
+ newModelValue = props.value;
143
+ const to = props.to && router ? router.resolve(props.to) : void 0;
144
+ if (props.link !== false && to && isPathMatch(to.fullPath, props))
127
145
  newModelValue = to.fullPath;
128
146
  });
129
147
  updateModelValue(newModelValue);
130
148
  }
131
149
  keepActiveTabVisible();
132
150
  }
133
- onMounted(() => {
134
- if (get(modelValue) !== void 0)
135
- return;
136
- applyNewValue();
137
- });
138
- watch(route, () => {
139
- applyNewValue(true);
140
- });
141
- const { width, height } = useElementSize(bar);
142
- const { width: wrapperWidth, height: wrapperHeight } = useElementSize(wrapper);
143
- const { arrivedState, x, y } = useScroll(bar, { behavior: "smooth" });
144
- const { top, bottom, left, right } = toRefs(arrivedState);
151
+ function onPrevSliderClick() {
152
+ if (!__props.vertical)
153
+ set(x, get(x) - get(width));
154
+ else set(y, get(y) - get(height));
155
+ }
156
+ function onNextSliderClick() {
157
+ if (!__props.vertical)
158
+ set(x, get(x) + get(width));
159
+ else set(y, get(y) + get(height));
160
+ }
145
161
  const { trigger: triggerHorizontal, stop: stopHorizontal } = watchTriggerable(
146
162
  [wrapperWidth, width],
147
163
  ([ww, w]) => {
@@ -162,64 +178,55 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
162
178
  eventFilter: throttleFilter(500)
163
179
  }
164
180
  );
165
- watchImmediate(vertical, (vertical2) => {
166
- if (vertical2) {
167
- triggerVertical();
168
- stopHorizontal();
169
- } else {
170
- triggerHorizontal();
171
- stopVertical();
181
+ watchImmediate(
182
+ () => __props.vertical,
183
+ (vertical) => {
184
+ if (vertical) {
185
+ triggerVertical();
186
+ stopHorizontal();
187
+ } else {
188
+ triggerHorizontal();
189
+ stopVertical();
190
+ }
172
191
  }
173
- });
174
- const prevArrowDisabled = computed(() => {
175
- if (!get(vertical))
176
- return get(left);
177
- return get(top);
178
- });
179
- const nextArrowDisabled = computed(() => {
180
- if (!get(vertical))
181
- return get(right);
182
- return get(bottom);
183
- });
184
- function onPrevSliderClick() {
185
- if (!get(vertical))
186
- set(x, get(x) - get(width));
187
- else
188
- set(y, get(y) - get(height));
189
- }
190
- function onNextSliderClick() {
191
- if (!get(vertical))
192
- set(x, get(x) + get(width));
193
- else
194
- set(y, get(y) + get(height));
192
+ );
193
+ if (route) {
194
+ watch(route, () => {
195
+ applyNewValue(true);
196
+ });
195
197
  }
196
- useResizeObserver(bar, () => {
197
- keepActiveTabVisible();
198
- });
199
- watchImmediate(modelValue, (modelValue2) => {
200
- set(internalModelValue, modelValue2);
201
- });
198
+ watchImmediate(
199
+ () => get(modelValue),
200
+ (modelValue2) => {
201
+ set(internalModelValue, modelValue2);
202
+ }
203
+ );
202
204
  watch(internalModelValue, () => {
203
205
  keepActiveTabVisible();
204
206
  });
207
+ onMounted(() => {
208
+ if (get(modelValue) !== void 0)
209
+ return;
210
+ applyNewValue();
211
+ });
205
212
  return (_ctx, _cache) => {
206
213
  return openBlock(), createElementBlock("div", {
207
- class: normalizeClass([_ctx.$style.tabs, { [_ctx.$style["tabs--vertical"] ?? ""]: unref(vertical) }])
214
+ class: normalizeClass([_ctx.$style.tabs, { [_ctx.$style["tabs--vertical"] ?? ""]: __props.vertical }])
208
215
  }, [
209
216
  unref(showArrows) ? (openBlock(), createElementBlock("div", {
210
217
  key: 0,
211
- class: normalizeClass([_ctx.$style.arrow, { [_ctx.$style["arrow--vertical"] ?? ""]: unref(vertical) }])
218
+ class: normalizeClass([_ctx.$style.arrow, { [_ctx.$style["arrow--vertical"] ?? ""]: __props.vertical }])
212
219
  }, [
213
220
  createVNode(RuiButton, {
214
221
  class: "w-full h-full !rounded-none",
215
222
  variant: "text",
216
- color: unref(color),
223
+ color: __props.color,
217
224
  disabled: unref(prevArrowDisabled),
218
225
  onClick: _cache[0] || (_cache[0] = ($event) => onPrevSliderClick())
219
226
  }, {
220
227
  default: withCtx(() => [
221
228
  createVNode(RuiIcon, {
222
- name: unref(vertical) ? "lu-chevron-up" : "lu-chevron-left"
229
+ name: __props.vertical ? "lu-chevron-up" : "lu-chevron-left"
223
230
  }, null, 8, ["name"])
224
231
  ]),
225
232
  _: 1
@@ -230,8 +237,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
230
237
  ref: bar,
231
238
  class: normalizeClass(["no-scrollbar", [
232
239
  _ctx.$style["tabs-bar"],
233
- { [_ctx.$style["tabs-bar--vertical"] ?? ""]: unref(vertical) },
234
- { [_ctx.$style["tabs-bar--grow"] ?? ""]: unref(grow) }
240
+ { [_ctx.$style["tabs-bar--vertical"] ?? ""]: __props.vertical },
241
+ { [_ctx.$style["tabs-bar--grow"] ?? ""]: __props.grow }
235
242
  ]])
236
243
  }, [
237
244
  createElementVNode("div", {
@@ -240,8 +247,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
240
247
  role: "tablist",
241
248
  class: normalizeClass([
242
249
  _ctx.$style["tabs-wrapper"],
243
- { [_ctx.$style["tabs-wrapper--vertical"] ?? ""]: unref(vertical) },
244
- { [_ctx.$style["tabs-wrapper--grow"] ?? ""]: unref(grow) }
250
+ { [_ctx.$style["tabs-wrapper--vertical"] ?? ""]: __props.vertical },
251
+ { [_ctx.$style["tabs-wrapper--grow"] ?? ""]: __props.grow }
245
252
  ])
246
253
  }, [
247
254
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(children), (child, i) => {
@@ -254,18 +261,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
254
261
  ], 2),
255
262
  unref(showArrows) ? (openBlock(), createElementBlock("div", {
256
263
  key: 1,
257
- class: normalizeClass([_ctx.$style.arrow, { [_ctx.$style["arrow--vertical"] ?? ""]: unref(vertical) }])
264
+ class: normalizeClass([_ctx.$style.arrow, { [_ctx.$style["arrow--vertical"] ?? ""]: __props.vertical }])
258
265
  }, [
259
266
  createVNode(RuiButton, {
260
267
  class: "w-full h-full !rounded-none",
261
268
  variant: "text",
262
- color: unref(color),
269
+ color: __props.color,
263
270
  disabled: unref(nextArrowDisabled),
264
271
  onClick: _cache[2] || (_cache[2] = ($event) => onNextSliderClick())
265
272
  }, {
266
273
  default: withCtx(() => [
267
274
  createVNode(RuiIcon, {
268
- name: unref(vertical) ? "lu-chevron-down" : "lu-chevron-right"
275
+ name: __props.vertical ? "lu-chevron-down" : "lu-chevron-right"
269
276
  }, null, 8, ["name"])
270
277
  ]),
271
278
  _: 1
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTabs.vue2.js","sources":["../../../../src/components/tabs/tabs/RuiTabs.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Props as TabProps } from '@/components/tabs/tab/RuiTab.vue';\nimport type { ContextColorsType } from '@/consts/colors';\nimport { throttleFilter } from '@vueuse/shared';\nimport { Fragment, isVNode, type VNode } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props {\n color?: ContextColorsType;\n vertical?: boolean;\n disabled?: boolean;\n grow?: boolean;\n modelValue?: number | string;\n align?: 'start' | 'center' | 'end';\n indicatorPosition?: 'start' | 'end';\n}\n\ndefineOptions({\n name: 'RuiTabs',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n color: undefined,\n vertical: false,\n disabled: false,\n grow: false,\n modelValue: undefined,\n align: 'center',\n indicatorPosition: 'end',\n});\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', modelValue: number | string): void;\n}>();\n\nconst { color, grow, modelValue, disabled, vertical, align, indicatorPosition } = toRefs(props);\n\nconst internalModelValue = ref();\nconst bar = ref<HTMLDivElement>();\nconst wrapper = ref<HTMLDivElement>();\nconst showArrows: Ref<boolean> = ref(false);\n\n// When using dynamic content with v-for the slot content can contain fragment,\n// Go through the fragment and always return RuiTab only\nfunction getChildrenTabs(children: VNode[]): VNode[] {\n return children.flatMap((item) => {\n if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)\n return getChildrenTabs(item.children.filter(isVNode));\n\n return [item];\n }).flat();\n}\n\nconst slots = useSlots();\nconst children = computed(() => {\n const slotContent = slots.default?.() ?? [];\n\n const tabs = getChildrenTabs(slotContent);\n\n const currentModelValue = get(internalModelValue);\n const inheritedProps = {\n color: get(color),\n grow: get(grow),\n disabled: get(disabled),\n vertical: get(vertical),\n align: get(align),\n indicatorPosition: get(indicatorPosition),\n };\n return tabs.map((tab, index) => {\n let tabValue = tab.props?.value ?? index;\n if (tab.props?.link !== false && tab.props?.to)\n tabValue = tab.props.to;\n\n const active = currentModelValue === tabValue;\n return {\n ...tab,\n props: {\n value: tabValue,\n active,\n ...inheritedProps,\n ...tab.props,\n },\n };\n });\n});\n\nfunction updateModelValue(newModelValue: string | number) {\n emit('update:modelValue', newModelValue);\n set(internalModelValue, newModelValue);\n}\n\nconst route = useRoute();\n\nfunction isPathMatch(path: string, { exactPath, exact }: { exactPath?: boolean; exact?: boolean }) {\n const currentRoute = route.fullPath;\n\n if (exactPath)\n return currentRoute === path;\n\n const routeWithoutQueryParams = new URL(path, window.location.origin)\n .pathname;\n\n if (exact)\n return currentRoute === routeWithoutQueryParams;\n\n return currentRoute.startsWith(routeWithoutQueryParams);\n}\n\nfunction keepActiveTabVisible() {\n nextTick(() => {\n if (!get(showArrows))\n return;\n\n const elem = get(wrapper);\n const barElem = get(bar);\n if (elem) {\n const activeTab = (elem.querySelector('.active-tab')\n ?? elem.querySelector('.active-tab-link')) as HTMLElement;\n\n if (!activeTab || !barElem)\n return;\n\n const childLeft = activeTab.offsetLeft - elem.offsetLeft;\n const childTop = activeTab.offsetTop - elem.offsetTop;\n const childWidth = activeTab.offsetWidth;\n const childHeight = activeTab.offsetHeight;\n const parentScrollLeft = barElem.scrollLeft;\n const parentScrollTop = barElem.scrollTop;\n const parentWidth = barElem.offsetWidth;\n const parentHeight = barElem.offsetHeight;\n\n const scrollLeft = Math.max(\n Math.min(parentScrollLeft, childLeft),\n childLeft + childWidth - parentWidth,\n );\n\n const scrollTop = Math.max(\n Math.min(parentScrollTop, childTop),\n childTop + childHeight - parentHeight,\n );\n\n barElem.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n behavior: 'smooth',\n });\n }\n });\n}\n\nconst router = useRouter();\n\nfunction applyNewValue(onlyLink = false) {\n const enabledChildren = get(children).filter(\n child => !child.props.disabled,\n );\n if (enabledChildren.length > 0) {\n let newModelValue: string | number = get(modelValue) || 0;\n enabledChildren.forEach((child, index) => {\n const props = child.props as TabProps;\n if (!onlyLink && index === 0 && props.value)\n newModelValue = props.value;\n\n const to = props.to ? router.resolve(props.to) : undefined;\n\n if (props.link !== false && to && isPathMatch(to.fullPath, props))\n newModelValue = to.fullPath;\n });\n updateModelValue(newModelValue);\n }\n keepActiveTabVisible();\n}\n\nonMounted(() => {\n if (get(modelValue) !== undefined)\n return;\n\n applyNewValue();\n});\n\nwatch(route, () => {\n applyNewValue(true);\n});\n\nconst { width, height } = useElementSize(bar);\nconst { width: wrapperWidth, height: wrapperHeight } = useElementSize(wrapper);\nconst { arrivedState, x, y } = useScroll(bar, { behavior: 'smooth' });\n\nconst { top, bottom, left, right } = toRefs(arrivedState);\n\nconst { trigger: triggerHorizontal, stop: stopHorizontal } = watchTriggerable(\n [wrapperWidth, width],\n ([ww, w]) => {\n if (w > 0)\n set(showArrows, ww > w);\n },\n {\n eventFilter: throttleFilter(50),\n },\n);\n\nconst { trigger: triggerVertical, stop: stopVertical } = watchTriggerable(\n [wrapperHeight, height],\n ([wh, h]) => {\n if (h > 0)\n set(showArrows, wh > h);\n },\n {\n eventFilter: throttleFilter(500),\n },\n);\n\nwatchImmediate(vertical, (vertical) => {\n if (vertical) {\n triggerVertical();\n stopHorizontal();\n }\n else {\n triggerHorizontal();\n stopVertical();\n }\n});\n\nconst prevArrowDisabled = computed(() => {\n if (!get(vertical))\n return get(left);\n\n return get(top);\n});\n\nconst nextArrowDisabled = computed(() => {\n if (!get(vertical))\n return get(right);\n\n return get(bottom);\n});\n\nfunction onPrevSliderClick() {\n if (!get(vertical))\n set(x, get(x) - get(width));\n else\n set(y, get(y) - get(height));\n}\n\nfunction onNextSliderClick() {\n if (!get(vertical))\n set(x, get(x) + get(width));\n else\n set(y, get(y) + get(height));\n}\n\nuseResizeObserver(bar, () => {\n keepActiveTabVisible();\n});\n\nwatchImmediate(modelValue, (modelValue) => {\n set(internalModelValue, modelValue);\n});\n\nwatch(internalModelValue, () => {\n keepActiveTabVisible();\n});\n</script>\n\n<template>\n <div :class=\"[$style.tabs, { [$style['tabs--vertical'] ?? '']: vertical }]\">\n <div\n v-if=\"showArrows\"\n :class=\"[$style.arrow, { [$style['arrow--vertical'] ?? '']: vertical }]\"\n >\n <RuiButton\n class=\"w-full h-full !rounded-none\"\n variant=\"text\"\n :color=\"color\"\n :disabled=\"prevArrowDisabled\"\n @click=\"onPrevSliderClick()\"\n >\n <RuiIcon :name=\"vertical ? 'lu-chevron-up' : 'lu-chevron-left'\" />\n </RuiButton>\n </div>\n <div\n ref=\"bar\"\n class=\"no-scrollbar\"\n :class=\"[\n $style['tabs-bar'],\n { [$style['tabs-bar--vertical'] ?? '']: vertical },\n { [$style['tabs-bar--grow'] ?? '']: grow },\n ]\"\n >\n <div\n ref=\"wrapper\"\n role=\"tablist\"\n :class=\"[\n $style['tabs-wrapper'],\n { [$style['tabs-wrapper--vertical'] ?? '']: vertical },\n { [$style['tabs-wrapper--grow'] ?? '']: grow },\n ]\"\n >\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n @click=\"updateModelValue($event)\"\n />\n </div>\n </div>\n <div\n v-if=\"showArrows\"\n :class=\"[$style.arrow, { [$style['arrow--vertical'] ?? '']: vertical }]\"\n >\n <RuiButton\n class=\"w-full h-full !rounded-none\"\n variant=\"text\"\n :color=\"color\"\n :disabled=\"nextArrowDisabled\"\n @click=\"onNextSliderClick()\"\n >\n <RuiIcon :name=\"vertical ? 'lu-chevron-down' : 'lu-chevron-right'\" />\n </RuiButton>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.tabs {\n @apply flex h-[2.625rem];\n\n &--vertical {\n @apply h-auto max-h-full flex-col;\n }\n\n &-bar {\n @apply max-h-full overflow-auto;\n\n &--vertical,\n &--grow {\n @apply w-full;\n }\n }\n\n &-wrapper {\n @apply h-full inline-flex max-w-none;\n\n &--vertical {\n @apply flex-col h-auto;\n }\n\n &--vertical,\n &--grow {\n @apply min-w-full;\n }\n }\n}\n\n.arrow {\n @apply h-full w-10;\n\n &--vertical {\n @apply min-h-[2.625rem] w-full h-auto;\n }\n}\n</style>\n"],"names":["children","props","vertical","modelValue","_createElementBlock","$style","_unref","_createVNode","_createElementVNode","_normalizeClass","_openBlock","_Fragment","_renderList","_createBlock","_resolveDynamicComponent"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTabs.vue2.js","sources":["../../../../src/components/tabs/tabs/RuiTabs.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Props as TabProps } from '@/components/tabs/tab/RuiTab.vue';\nimport type { ContextColorsType } from '@/consts/colors';\nimport { throttleFilter } from '@vueuse/shared';\nimport { Fragment, getCurrentInstance, isVNode, type VNode } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props {\n color?: ContextColorsType;\n vertical?: boolean;\n disabled?: boolean;\n grow?: boolean;\n align?: 'start' | 'center' | 'end';\n indicatorPosition?: 'start' | 'end';\n}\n\ndefineOptions({\n name: 'RuiTabs',\n});\n\nconst modelValue = defineModel<number | string>();\n\nconst {\n color,\n vertical = false,\n disabled = false,\n grow = false,\n align = 'center',\n indicatorPosition = 'end',\n} = defineProps<Props>();\n\nconst internalModelValue = ref<string | number>();\nconst bar = useTemplateRef<HTMLDivElement>('bar');\nconst wrapper = useTemplateRef<HTMLDivElement>('wrapper');\nconst showArrows: Ref<boolean> = ref(false);\n\nconst slots = useSlots();\nconst hasRouter = !!getCurrentInstance()?.appContext.config.globalProperties.$router;\nconst route = hasRouter ? useRoute() : undefined;\nconst router = hasRouter ? useRouter() : undefined;\nconst { width, height } = useElementSize(bar);\nconst { width: wrapperWidth, height: wrapperHeight } = useElementSize(wrapper);\nconst { arrivedState, x, y } = useScroll(bar, { behavior: 'smooth' });\nconst { top, bottom, left, right } = toRefs(arrivedState);\n\nuseResizeObserver(bar, () => {\n keepActiveTabVisible();\n});\n\nconst children = computed<(VNode & { props: Record<string, any> })[]>(() => {\n const slotContent = slots.default?.() ?? [];\n\n const tabs = getChildrenTabs(slotContent);\n\n const currentModelValue = get(internalModelValue);\n const inheritedProps = {\n color,\n grow,\n disabled,\n vertical,\n align,\n indicatorPosition,\n };\n return tabs.map((tab, index) => {\n let tabValue = tab.props?.value ?? index;\n if (tab.props?.link !== false && tab.props?.to)\n tabValue = tab.props.to;\n\n const active = currentModelValue === tabValue;\n return {\n ...tab,\n props: {\n value: tabValue,\n active,\n ...inheritedProps,\n ...tab.props,\n },\n };\n });\n});\n\nconst prevArrowDisabled = computed<boolean>(() => {\n if (!vertical)\n return get(left);\n\n return get(top);\n});\n\nconst nextArrowDisabled = computed<boolean>(() => {\n if (!vertical)\n return get(right);\n\n return get(bottom);\n});\n\n// When using dynamic content with v-for the slot content can contain fragment,\n// Go through the fragment and always return RuiTab only\nfunction getChildrenTabs(children: VNode[]): VNode[] {\n return children\n .flatMap((item) => {\n if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)\n return getChildrenTabs(item.children.filter(isVNode));\n\n return [item];\n })\n .flat();\n}\n\nfunction updateModelValue(newModelValue: string | number): void {\n set(modelValue, newModelValue);\n set(internalModelValue, newModelValue);\n}\n\nfunction isPathMatch(\n path: string,\n { exactPath, exact }: { exactPath?: boolean; exact?: boolean },\n): boolean {\n if (!route)\n return false;\n\n const currentRoute = route.fullPath;\n\n if (exactPath)\n return currentRoute === path;\n\n const routeWithoutQueryParams = new URL(path, window.location.origin).pathname;\n\n if (exact)\n return currentRoute === routeWithoutQueryParams;\n\n return currentRoute.startsWith(routeWithoutQueryParams);\n}\n\nfunction keepActiveTabVisible(): void {\n nextTick(() => {\n if (!get(showArrows))\n return;\n\n const elem = get(wrapper);\n const barElem = get(bar);\n if (elem) {\n const activeTab = (elem.querySelector('.active-tab') ??\n elem.querySelector('.active-tab-link')) as HTMLElement;\n\n if (!activeTab || !barElem)\n return;\n\n const childLeft = activeTab.offsetLeft - elem.offsetLeft;\n const childTop = activeTab.offsetTop - elem.offsetTop;\n const childWidth = activeTab.offsetWidth;\n const childHeight = activeTab.offsetHeight;\n const parentScrollLeft = barElem.scrollLeft;\n const parentScrollTop = barElem.scrollTop;\n const parentWidth = barElem.offsetWidth;\n const parentHeight = barElem.offsetHeight;\n\n const scrollLeft = Math.max(\n Math.min(parentScrollLeft, childLeft),\n childLeft + childWidth - parentWidth,\n );\n\n const scrollTop = Math.max(\n Math.min(parentScrollTop, childTop),\n childTop + childHeight - parentHeight,\n );\n\n barElem.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n behavior: 'smooth',\n });\n }\n });\n}\n\nfunction applyNewValue(onlyLink = false): void {\n const enabledChildren = get(children).filter(child => !child.props?.disabled);\n if (enabledChildren.length > 0) {\n let newModelValue: string | number = get(modelValue) || 0;\n enabledChildren.forEach((child, index) => {\n const props = child.props as TabProps;\n if (!onlyLink && index === 0 && props.value)\n newModelValue = props.value;\n\n const to = props.to && router ? router.resolve(props.to) : undefined;\n\n if (props.link !== false && to && isPathMatch(to.fullPath, props))\n newModelValue = to.fullPath;\n });\n updateModelValue(newModelValue);\n }\n keepActiveTabVisible();\n}\n\nfunction onPrevSliderClick(): void {\n if (!vertical)\n set(x, get(x) - get(width));\n else set(y, get(y) - get(height));\n}\n\nfunction onNextSliderClick(): void {\n if (!vertical)\n set(x, get(x) + get(width));\n else set(y, get(y) + get(height));\n}\n\nconst { trigger: triggerHorizontal, stop: stopHorizontal } = watchTriggerable(\n [wrapperWidth, width],\n ([ww, w]) => {\n if (w > 0)\n set(showArrows, ww > w);\n },\n {\n eventFilter: throttleFilter(50),\n },\n);\n\nconst { trigger: triggerVertical, stop: stopVertical } = watchTriggerable(\n [wrapperHeight, height],\n ([wh, h]) => {\n if (h > 0)\n set(showArrows, wh > h);\n },\n {\n eventFilter: throttleFilter(500),\n },\n);\n\nwatchImmediate(\n () => vertical,\n (vertical) => {\n if (vertical) {\n triggerVertical();\n stopHorizontal();\n }\n else {\n triggerHorizontal();\n stopVertical();\n }\n },\n);\n\nif (route) {\n watch(route, () => {\n applyNewValue(true);\n });\n}\n\nwatchImmediate(\n () => get(modelValue),\n (modelValue) => {\n set(internalModelValue, modelValue);\n },\n);\n\nwatch(internalModelValue, () => {\n keepActiveTabVisible();\n});\n\nonMounted(() => {\n if (get(modelValue) !== undefined)\n return;\n\n applyNewValue();\n});\n</script>\n\n<template>\n <div :class=\"[$style.tabs, { [$style['tabs--vertical'] ?? '']: vertical }]\">\n <div\n v-if=\"showArrows\"\n :class=\"[$style.arrow, { [$style['arrow--vertical'] ?? '']: vertical }]\"\n >\n <RuiButton\n class=\"w-full h-full !rounded-none\"\n variant=\"text\"\n :color=\"color\"\n :disabled=\"prevArrowDisabled\"\n @click=\"onPrevSliderClick()\"\n >\n <RuiIcon :name=\"vertical ? 'lu-chevron-up' : 'lu-chevron-left'\" />\n </RuiButton>\n </div>\n <div\n ref=\"bar\"\n class=\"no-scrollbar\"\n :class=\"[\n $style['tabs-bar'],\n { [$style['tabs-bar--vertical'] ?? '']: vertical },\n { [$style['tabs-bar--grow'] ?? '']: grow },\n ]\"\n >\n <div\n ref=\"wrapper\"\n role=\"tablist\"\n :class=\"[\n $style['tabs-wrapper'],\n { [$style['tabs-wrapper--vertical'] ?? '']: vertical },\n { [$style['tabs-wrapper--grow'] ?? '']: grow },\n ]\"\n >\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n @click=\"updateModelValue($event)\"\n />\n </div>\n </div>\n <div\n v-if=\"showArrows\"\n :class=\"[$style.arrow, { [$style['arrow--vertical'] ?? '']: vertical }]\"\n >\n <RuiButton\n class=\"w-full h-full !rounded-none\"\n variant=\"text\"\n :color=\"color\"\n :disabled=\"nextArrowDisabled\"\n @click=\"onNextSliderClick()\"\n >\n <RuiIcon :name=\"vertical ? 'lu-chevron-down' : 'lu-chevron-right'\" />\n </RuiButton>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.tabs {\n @apply flex h-[2.625rem];\n\n &--vertical {\n @apply h-auto max-h-full flex-col;\n }\n\n &-bar {\n @apply max-h-full overflow-auto;\n\n &--vertical,\n &--grow {\n @apply w-full;\n }\n }\n\n &-wrapper {\n @apply h-full inline-flex max-w-none;\n\n &--vertical {\n @apply flex-col h-auto;\n }\n\n &--vertical,\n &--grow {\n @apply min-w-full;\n }\n }\n}\n\n.arrow {\n @apply h-full w-10;\n\n &--vertical {\n @apply min-h-[2.625rem] w-full h-auto;\n }\n}\n</style>\n"],"names":["_useModel","children","modelValue","_createElementBlock","$style","_unref","_createVNode","_createElementVNode","_normalizeClass","_openBlock","_Fragment","_renderList","_createBlock","_resolveDynamicComponent"],"mappings":"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"}
@@ -28,9 +28,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
28
28
  "onUpdate:second"?: ((value: number | undefined) => any) | undefined;
29
29
  "onUpdate:millisecond"?: ((value: number | undefined) => any) | undefined;
30
30
  "onUpdate:selection"?: ((value: TimePickerSelection) => any) | undefined;
31
- }>, {
32
- borderless: boolean;
33
- accuracy: TimeAccuracy;
34
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
31
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
35
32
  declare const _default: typeof __VLS_export;
36
33
  export default _default;
@@ -1,4 +1,4 @@
1
- import { defineComponent, useModel, ref, useTemplateRef, computed, onMounted, watch, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, normalizeStyle, Fragment, renderList, mergeModels, 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";
@@ -20,7 +20,7 @@ const TWELVE_HOURS = 12;
20
20
  const _sfc_main = /* @__PURE__ */ defineComponent({
21
21
  __name: "RuiTimePicker",
22
22
  props: /* @__PURE__ */ mergeModels({
23
- accuracy: { default: TimeAccuracy.MINUTE },
23
+ accuracy: { default: () => TimeAccuracy.MINUTE },
24
24
  borderless: { type: Boolean, default: false }
25
25
  }, {
26
26
  "modelValue": { required: true },
@@ -44,7 +44,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
44
44
  const selectedSecond = useModel(__props, "second");
45
45
  const selectedMillisecond = useModel(__props, "millisecond");
46
46
  const editMode = useModel(__props, "selection");
47
- const props = __props;
48
47
  const totalItemsPerMode = {
49
48
  hour: 12,
50
49
  minute: 60,
@@ -59,9 +58,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
59
58
  };
60
59
  const isDragging = ref(false);
61
60
  const clockFace = useTemplateRef("clockFace");
62
- const showSecond = computed(() => props.accuracy === TimeAccuracy.SECOND || props.accuracy === TimeAccuracy.MILLISECOND);
63
- const showMillisecond = computed(() => props.accuracy === TimeAccuracy.MILLISECOND);
64
- 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
+ );
65
68
  const displayHour = computed(() => {
66
69
  if (!isDefined(selectedHour)) {
67
70
  return void 0;
@@ -153,10 +156,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
153
156
  }
154
157
  function getModelSeconds() {
155
158
  const acceptedAccuracy = [TimeAccuracy.SECOND, TimeAccuracy.MILLISECOND];
156
- 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;
157
160
  }
158
161
  function getModelMilliseconds() {
159
- 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;
160
163
  }
161
164
  function generateNumbers(total, interval) {
162
165
  const numbers = [];
@@ -208,32 +211,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
208
211
  function startDrag(event) {
209
212
  event.preventDefault();
210
213
  set(isDragging, true);
211
- const handleMove = (moveEvent) => {
212
- if (!get(isDragging) || !isDefined(clockFace))
213
- return;
214
- const rect = get(clockFace).getBoundingClientRect();
215
- const centerX = rect.left + rect.width / 2;
216
- const centerY = rect.top + rect.height / 2;
217
- let clientX, clientY;
218
- if ("touches" in moveEvent) {
219
- const touch = moveEvent.touches[0];
220
- assert(touch);
221
- clientX = touch.clientX;
222
- clientY = touch.clientY;
223
- } else {
224
- clientX = moveEvent.clientX;
225
- clientY = moveEvent.clientY;
226
- }
227
- const x = clientX - centerX;
228
- 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;
229
223
  let angle = Math.atan2(y, x) * (180 / Math.PI) + 90;
230
224
  if (angle < 0)
231
225
  angle += FULL_CIRCLE;
232
226
  const mode = get(editMode);
233
227
  const unit = Math.round(angle / (FULL_CIRCLE / totalItemsPerMode[mode])) % totalItemsPerMode[mode];
234
228
  if (mode === "hour") {
235
- let hour;
236
- hour = unit;
229
+ let hour = unit;
237
230
  if (hour === 0)
238
231
  hour = TWELVE_HOURS;
239
232
  if (get(period) === "PM" && hour < TWELVE_HOURS) {
@@ -251,7 +244,32 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
251
244
  }
252
245
  updateModelValue();
253
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
+ };
254
268
  const handleEnd = () => {
269
+ if (rafId !== null) {
270
+ cancelAnimationFrame(rafId);
271
+ rafId = null;
272
+ }
255
273
  set(isDragging, false);
256
274
  document.removeEventListener("mousemove", handleMove);
257
275
  document.removeEventListener("touchmove", handleMove);
@@ -269,7 +287,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
269
287
  document.addEventListener("touchmove", handleMove);
270
288
  document.addEventListener("mouseup", handleEnd);
271
289
  document.addEventListener("touchend", handleEnd);
272
- 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);
273
303
  }
274
304
  function selectByClick(num) {
275
305
  const mode = get(editMode);
@@ -307,18 +337,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
307
337
  set(modelValue, date);
308
338
  });
309
339
  }
340
+ watch(
341
+ modelValue,
342
+ () => {
343
+ set(selectedHour, getModelHours());
344
+ set(selectedMinute, getModelMinutes());
345
+ set(selectedSecond, getModelSeconds());
346
+ set(selectedMillisecond, getModelMilliseconds());
347
+ }
348
+ );
310
349
  onMounted(() => {
311
350
  set(selectedHour, getModelHours());
312
351
  set(selectedMinute, getModelMinutes());
313
352
  set(selectedSecond, getModelSeconds());
314
353
  set(selectedMillisecond, getModelMilliseconds());
315
354
  });
316
- watch(modelValue, () => {
317
- set(selectedHour, getModelHours());
318
- set(selectedMinute, getModelMinutes());
319
- set(selectedSecond, getModelSeconds());
320
- set(selectedMillisecond, getModelMilliseconds());
321
- }, { deep: true });
322
355
  return (_ctx, _cache) => {
323
356
  return openBlock(), createElementBlock("div", {
324
357
  role: "group",