@rotki/ui-library 2.12.1 → 2.12.2

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 (147) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.js +1 -1
  2. package/dist/components/accordions/accordions/RuiAccordions.vue.js +1 -1
  3. package/dist/components/alerts/RuiAlert.vue.d.ts +2 -2
  4. package/dist/components/alerts/RuiAlert.vue2.js +1 -1
  5. package/dist/components/buttons/button/RuiButton.vue2.js +1 -1
  6. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +1 -1
  7. package/dist/components/calendar/RuiCalendar.vue.js +1 -1
  8. package/dist/components/calendar/RuiCalendarGrid.vue2.js +1 -1
  9. package/dist/components/calendar/RuiCalendarHeader.vue2.js +1 -1
  10. package/dist/components/calendar/RuiCalendarMenu.vue2.js +1 -1
  11. package/dist/components/cards/RuiCard.vue.d.ts +1 -1
  12. package/dist/components/cards/RuiCard.vue2.js +1 -1
  13. package/dist/components/cards/RuiCardHeader.vue2.js +1 -1
  14. package/dist/components/chips/RuiChip.vue.d.ts +1 -1
  15. package/dist/components/chips/RuiChip.vue2.js +1 -1
  16. package/dist/components/color-picker/RuiColorBoard.vue2.js +6 -2
  17. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
  18. package/dist/components/color-picker/RuiColorDisplay.vue.js +1 -1
  19. package/dist/components/color-picker/RuiColorHue.vue2.js +8 -2
  20. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
  21. package/dist/components/color-picker/RuiColorInput.vue.js +1 -1
  22. package/dist/components/color-picker/RuiColorPicker.vue.js +6 -2
  23. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
  24. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +4 -4
  25. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +5 -5
  26. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  27. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +1 -1
  28. package/dist/components/divider/RuiDivider.vue.js +6 -3
  29. package/dist/components/divider/RuiDivider.vue.js.map +1 -1
  30. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +17 -34
  31. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +18 -9
  32. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  33. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +2 -2
  34. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +2 -2
  35. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  36. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
  37. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +2 -2
  38. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  39. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +1 -1
  40. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +2 -2
  41. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
  42. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +3 -3
  43. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +4 -2
  44. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
  45. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +17 -17
  46. package/dist/components/forms/select/RuiMenuSelect.vue2.js +14 -7
  47. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  48. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +3 -1
  49. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +8 -4
  50. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
  51. package/dist/components/forms/slider/RuiSlider.vue.d.ts +2 -2
  52. package/dist/components/forms/slider/RuiSlider.vue2.js +10 -8
  53. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  54. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +1 -1
  55. package/dist/components/forms/switch/RuiSwitch.vue2.js +2 -2
  56. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  57. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +3 -3
  58. package/dist/components/forms/text-area/RuiTextArea.vue2.js +8 -8
  59. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  60. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +6 -6
  61. package/dist/components/forms/text-field/RuiTextField.vue2.js +5 -5
  62. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  63. package/dist/components/helpers/RuiFormTextDetail.vue.js +1 -1
  64. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
  65. package/dist/components/icons/RuiIcon.vue2.js +3 -6
  66. package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
  67. package/dist/components/index.d.ts +2 -2
  68. package/dist/components/loaders/RuiSkeletonBase.vue2.js +1 -1
  69. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +1 -1
  70. package/dist/components/logos/RuiLogo.vue.js +3 -1
  71. package/dist/components/logos/RuiLogo.vue.js.map +1 -1
  72. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +3 -3
  73. package/dist/components/overlays/badge/RuiBadge.vue2.js +1 -1
  74. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +1 -1
  75. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +4 -3
  76. package/dist/components/overlays/dialog/RuiDialog.vue2.js +11 -5
  77. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
  78. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +1 -1
  79. package/dist/components/overlays/menu/RuiMenu.vue2.js +6 -4
  80. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
  81. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +4 -3
  82. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +9 -4
  83. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
  84. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +1 -1
  85. package/dist/components/overlays/notification/RuiNotification.vue.js +3 -1
  86. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
  87. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +1 -1
  88. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +7 -3
  89. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
  90. package/dist/components/progress/RuiProgress.vue.d.ts +1 -1
  91. package/dist/components/progress/RuiProgress.vue2.js +1 -1
  92. package/dist/components/steppers/RuiFooterStepper.vue2.js +15 -8
  93. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
  94. package/dist/components/steppers/RuiStepper.vue.d.ts +1 -1
  95. package/dist/components/steppers/RuiStepper.vue2.js +9 -4
  96. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
  97. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +1 -1
  98. package/dist/components/steppers/RuiStepperIcon.vue2.js +1 -1
  99. package/dist/components/tables/RuiDataTable.vue2.js +28 -24
  100. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
  101. package/dist/components/tables/RuiExpandButton.vue2.js +3 -2
  102. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
  103. package/dist/components/tables/RuiTableHead.vue2.js +1 -1
  104. package/dist/components/tables/RuiTablePagination.vue.d.ts +1 -1
  105. package/dist/components/tables/RuiTablePagination.vue2.js +12 -5
  106. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
  107. package/dist/components/tabs/tab/RuiTab.vue.d.ts +2 -2
  108. package/dist/components/tabs/tab/RuiTab.vue2.js +9 -6
  109. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
  110. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +1 -1
  111. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +2 -1
  112. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
  113. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +1 -1
  114. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +1 -1
  115. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +1 -1
  116. package/dist/components/tabs/tabs/RuiTabs.vue2.js +1 -1
  117. package/dist/components/time-picker/RuiTimePicker.vue2.js +21 -4
  118. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  119. package/dist/composables/icons.js +1 -1
  120. package/dist/composables/icons.js.map +1 -1
  121. package/dist/composables/popper.js +3 -3
  122. package/dist/composables/popper.js.map +1 -1
  123. package/dist/composables/theme.js +7 -4
  124. package/dist/composables/theme.js.map +1 -1
  125. package/dist/icons/icons_1.d.ts +15 -15
  126. package/dist/icons/icons_1.js +96 -96
  127. package/dist/icons/icons_1.js.map +1 -1
  128. package/dist/icons/icons_2.d.ts +38 -38
  129. package/dist/icons/icons_2.js +255 -255
  130. package/dist/icons/icons_2.js.map +1 -1
  131. package/dist/icons/icons_3.d.ts +26 -26
  132. package/dist/icons/icons_3.js +153 -153
  133. package/dist/icons/icons_3.js.map +1 -1
  134. package/dist/icons/icons_4.d.ts +37 -2
  135. package/dist/icons/icons_4.js +192 -17
  136. package/dist/icons/icons_4.js.map +1 -1
  137. package/dist/icons/index.d.ts +1 -1
  138. package/dist/icons/index.js +1 -1
  139. package/dist/icons/index.js.map +1 -1
  140. package/dist/index.js +65 -30
  141. package/dist/style.css +26 -26
  142. package/dist/vite-plugin/index.js +4 -4
  143. package/dist/vite-plugin/index.js.map +1 -1
  144. package/dist/vite-plugin/scanner.js +3 -3
  145. package/dist/vite-plugin/scanner.js.map +1 -1
  146. package/dist/web-types.json +43 -24
  147. package/package.json +28 -34
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTab.vue2.js","sources":["../../../../src/components/tabs/tab/RuiTab.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { RouteLocationRaw } from 'vue-router';\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\n\nexport interface Props {\n color?: ContextColorsType;\n disabled?: boolean;\n grow?: boolean;\n value?: number | string;\n active?: boolean;\n activeClass?: string;\n link?: boolean;\n target?: string;\n to?: RouteLocationRaw;\n exact?: boolean;\n exactPath?: boolean;\n vertical?: boolean;\n align?: 'start' | 'center' | 'end';\n indicatorPosition?: 'start' | 'end';\n}\n\ndefineOptions({\n name: 'RuiTab',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n color: undefined,\n disabled: false,\n grow: false,\n value: generateId(),\n active: false,\n activeClass: '',\n link: false,\n to: '',\n target: '_self',\n exact: false,\n exactPath: false,\n vertical: false,\n align: 'center',\n indicatorPosition: 'end',\n});\n\nconst emit = defineEmits<{\n (e: 'click', value: string | number): void;\n}>();\n\nconst slots = defineSlots<{\n default?: (props?: object) => any;\n prepend?: (props?: object) => any;\n append?: (props?: object) => any;\n}>();\n\nconst { target, grow, active, activeClass, disabled, vertical, align, value, indicatorPosition }\n = toRefs(props);\n\nconst css = useCssModule();\n\nconst isSelf = computed(() => get(target) === '_self');\n\nconst tabClass = computed(() => [\n css.tab,\n css[`tab--${get(align)}`],\n css[`tab-indicator--${get(indicatorPosition)}`],\n {\n [css['tab--grow'] ?? '']: get(grow),\n [`${css['tab--active']} active-tab ${get(activeClass)}`]: get(active),\n [css['tab--disabled'] ?? '']: get(disabled),\n [css['tab--vertical'] ?? '']: get(vertical),\n },\n]);\n\nfunction click() {\n emit('click', get(value));\n}\n</script>\n\n<template>\n <RuiButton\n v-if=\"disabled\"\n variant=\"text\"\n disabled\n :class=\"tabClass\"\n hide-focus-indicator\n tabindex=\"-1\"\n role=\"tab\"\n v-bind=\"$attrs\"\n >\n <template\n v-for=\"(_, name) in slots\"\n #[name]=\"slotData\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiButton>\n <RuiButton\n v-else-if=\"!link\"\n :class=\"tabClass\"\n :color=\"active ? color : undefined\"\n role=\"tab\"\n v-bind=\"$attrs\"\n tabindex=\"-1\"\n hide-focus-indicator\n variant=\"text\"\n @click=\"click()\"\n >\n <template\n v-for=\"(_, name) in slots\"\n #[name]=\"slotData\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiButton>\n <RouterLink\n v-else\n #default=\"{ href, navigate, isActive, isExactActive }\"\n :to=\"to\"\n :exact=\"exact\"\n :exact-path=\"exactPath\"\n custom\n >\n <RuiButton\n :class=\"[\n ...tabClass,\n {\n [`${css['tab--active']} active-tab-link`]: exact\n ? isExactActive\n : isActive,\n },\n ]\"\n :color=\"active || (exact ? isExactActive : isActive) ? color : undefined\"\n :href=\"isSelf ? undefined : href\"\n :target=\"target\"\n role=\"tab\"\n no-outline\n tag=\"a\"\n hide-focus-indicator\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n variant=\"text\"\n @click=\"\n click();\n isSelf ? navigate($event) : undefined;\n \"\n >\n <template\n v-for=\"(_, name) in slots\"\n #[name]=\"slotData\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiButton>\n </RouterLink>\n</template>\n\n<style lang=\"scss\" module>\n.tab {\n @apply h-full min-w-[90px] max-w-[360px] flex items-center rounded-none cursor-pointer relative whitespace-nowrap shrink-0;\n @apply px-4 #{!important};\n\n &--vertical {\n @apply h-[2.625rem] w-full max-w-none;\n }\n\n &--grow {\n @apply grow max-w-none;\n }\n\n &--active {\n &:after {\n content: '';\n @apply absolute h-0 w-full bottom-0 left-0 border-b-2 border-current;\n }\n\n &.tab-indicator--start {\n &:after {\n @apply top-0 bottom-auto;\n }\n }\n\n &.tab--vertical {\n &:after {\n @apply h-full w-0 right-0 left-auto border-b-0 border-r-2;\n }\n\n &.tab-indicator--start {\n &:after {\n @apply left-0 right-auto;\n }\n }\n }\n }\n\n &--disabled {\n @apply cursor-not-allowed;\n }\n\n &--start {\n @apply justify-start text-left rtl:justify-end rtl:text-right;\n }\n\n &--center {\n @apply justify-center text-center;\n }\n\n &--end {\n @apply justify-end text-right rtl:justify-start rtl:text-left;\n }\n}\n</style>\n"],"names":["_useSlots","_unref","_openBlock","_createBlock","_mergeProps","$attrs","_createSlots","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_createVNode"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTab.vue2.js","sources":["../../../../src/components/tabs/tab/RuiTab.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { RouteLocationRaw } from 'vue-router';\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport { generateId } from '@/utils/generate-id';\n\nexport interface Props {\n color?: ContextColorsType;\n disabled?: boolean;\n grow?: boolean;\n value?: number | string;\n active?: boolean;\n activeClass?: string;\n link?: boolean;\n target?: string;\n to?: RouteLocationRaw;\n exact?: boolean;\n exactPath?: boolean;\n vertical?: boolean;\n align?: 'start' | 'center' | 'end';\n indicatorPosition?: 'start' | 'end';\n}\n\ndefineOptions({\n name: 'RuiTab',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n color: undefined,\n disabled: false,\n grow: false,\n value: generateId(),\n active: false,\n activeClass: '',\n link: false,\n to: '',\n target: '_self',\n exact: false,\n exactPath: false,\n vertical: false,\n align: 'center',\n indicatorPosition: 'end',\n});\n\nconst emit = defineEmits<{\n (e: 'click', value: string | number): void;\n}>();\n\nconst slots = defineSlots<{\n default?: (props?: object) => any;\n prepend?: (props?: object) => any;\n append?: (props?: object) => any;\n}>();\n\nconst { target, grow, active, activeClass, disabled, vertical, align, value, indicatorPosition }\n = toRefs(props);\n\nconst css = useCssModule();\n\nconst isSelf = computed(() => get(target) === '_self');\n\nconst tabClass = computed(() => [\n css.tab,\n css[`tab--${get(align)}`],\n css[`tab-indicator--${get(indicatorPosition)}`],\n {\n [css['tab--grow'] ?? '']: get(grow),\n [`${css['tab--active']} active-tab ${get(activeClass)}`]: get(active),\n [css['tab--disabled'] ?? '']: get(disabled),\n [css['tab--vertical'] ?? '']: get(vertical),\n },\n]);\n\nfunction click() {\n emit('click', get(value));\n}\n</script>\n\n<template>\n <RuiButton\n v-if=\"disabled\"\n variant=\"text\"\n disabled\n :class=\"tabClass\"\n hide-focus-indicator\n tabindex=\"-1\"\n role=\"tab\"\n :aria-selected=\"active\"\n v-bind=\"$attrs\"\n >\n <template\n v-for=\"(_, name) in slots\"\n #[name]=\"slotData\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiButton>\n <RuiButton\n v-else-if=\"!link\"\n :class=\"tabClass\"\n :color=\"active ? color : undefined\"\n role=\"tab\"\n :aria-selected=\"active\"\n v-bind=\"$attrs\"\n tabindex=\"-1\"\n hide-focus-indicator\n variant=\"text\"\n @click=\"click()\"\n >\n <template\n v-for=\"(_, name) in slots\"\n #[name]=\"slotData\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiButton>\n <RouterLink\n v-else\n #default=\"{ href, navigate, isActive, isExactActive }\"\n :to=\"to\"\n :exact=\"exact\"\n :exact-path=\"exactPath\"\n custom\n >\n <RuiButton\n :class=\"[\n ...tabClass,\n {\n [`${css['tab--active']} active-tab-link`]: exact\n ? isExactActive\n : isActive,\n },\n ]\"\n :color=\"active || (exact ? isExactActive : isActive) ? color : undefined\"\n :href=\"isSelf ? undefined : href\"\n :target=\"target\"\n role=\"tab\"\n :aria-selected=\"active || (exact ? isExactActive : isActive)\"\n no-outline\n tag=\"a\"\n hide-focus-indicator\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n variant=\"text\"\n @click=\"\n click();\n isSelf ? navigate($event) : undefined;\n \"\n >\n <template\n v-for=\"(_, name) in slots\"\n #[name]=\"slotData\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotData\"\n />\n </template>\n </RuiButton>\n </RouterLink>\n</template>\n\n<style lang=\"scss\" module>\n.tab {\n @apply h-full min-w-[90px] max-w-[360px] flex items-center rounded-none cursor-pointer relative whitespace-nowrap shrink-0;\n @apply px-4 #{!important};\n\n &--vertical {\n @apply h-[2.625rem] w-full max-w-none;\n }\n\n &--grow {\n @apply grow max-w-none;\n }\n\n &--active {\n &:after {\n content: '';\n @apply absolute h-0 w-full bottom-0 left-0 border-b-2 border-current;\n }\n\n &.tab-indicator--start {\n &:after {\n @apply top-0 bottom-auto;\n }\n }\n\n &.tab--vertical {\n &:after {\n @apply h-full w-0 right-0 left-auto border-b-0 border-r-2;\n }\n\n &.tab-indicator--start {\n &:after {\n @apply left-0 right-auto;\n }\n }\n }\n }\n\n &--disabled {\n @apply cursor-not-allowed;\n }\n\n &--start {\n @apply justify-start text-left rtl:justify-end rtl:text-right;\n }\n\n &--center {\n @apply justify-center text-center;\n }\n\n &--end {\n @apply justify-end text-right rtl:justify-start rtl:text-left;\n }\n}\n</style>\n"],"names":["_useSlots","_unref","_openBlock","_createBlock","_mergeProps","$attrs","_createSlots","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","_createVNode"],"mappings":"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"}
@@ -11,8 +11,8 @@ type __VLS_Slots = {} & {
11
11
  default?: (props: typeof __VLS_9) => any;
12
12
  };
13
13
  declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
14
- value: number | string;
15
14
  reverse: boolean;
15
+ value: number | string;
16
16
  active: boolean;
17
17
  eager: boolean;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,4 +1,4 @@
1
- import { defineComponent, createElementBlock, openBlock, normalizeClass, createVNode, createCommentVNode, Transition, withCtx, renderSlot } from "vue";
1
+ import { defineComponent, openBlock, createElementBlock, normalizeClass, createVNode, Transition, withCtx, renderSlot, createCommentVNode } from "vue";
2
2
  const _hoisted_1 = {
3
3
  key: 0,
4
4
  class: "w-full"
@@ -21,6 +21,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
21
21
  setup(__props) {
22
22
  return (_ctx, _cache) => {
23
23
  return openBlock(), createElementBlock("div", {
24
+ role: "tabpanel",
24
25
  class: normalizeClass([_ctx.$style.tab, { "active-tab-item": __props.active }])
25
26
  }, [
26
27
  createVNode(Transition, {
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTabItem.vue2.js","sources":["../../../../src/components/tabs/tab-item/RuiTabItem.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nexport interface Props {\n active?: boolean;\n value?: number | string;\n eager?: boolean;\n reverse?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTabItem',\n});\n\nwithDefaults(defineProps<Props>(), {\n value: undefined,\n eager: false,\n active: false,\n reverse: false,\n});\n</script>\n\n<template>\n <div :class=\"[$style.tab, { 'active-tab-item': active }]\">\n <Transition\n :enter-from-class=\"`opacity-0 ${reverse ? '-translate-x-8' : 'translate-x-8'}`\"\n :leave-to-class=\"`opacity-0 !h-0 overflow-hidden ${\n reverse ? 'translate-x-8' : '-translate-x-8'\n }`\"\n enter-active-class=\"w-full transform duration-300 transition\"\n enter-to-class=\"opacity-100 translate-x-0\"\n leave-active-class=\"w-full transform duration-300 transition !h-0 overflow-hidden\"\n leave-from-class=\"opacity-100 translate-x-0 !h-0 overflow-hidden\"\n >\n <div\n v-if=\"active\"\n class=\"w-full\"\n >\n <slot />\n </div>\n </Transition>\n <div\n v-if=\"eager && !active\"\n class=\"hidden\"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.tab {\n @apply w-full;\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_createVNode","_Transition","_openBlock","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;;;;;;;0BAqBEA,mBAwBM,OAAA;AAAA,QAxBA,OAAKC,eAAA,CAAGC,KAAAA,OAAO,0BAA0B,QAAA,QAAM,CAAA;AAAA,MAAA;QACnDC,YAgBaC,YAAA;AAAA,UAfV,iCAA+B,QAAA,UAAO,mBAAA,eAAA;AAAA,UACtC,kBAAc,kCAA6C,QAAA,UAAO,kBAAA;UAGnE,sBAAmB;AAAA,UACnB,kBAAe;AAAA,UACf,sBAAmB;AAAA,UACnB,oBAAiB;AAAA,QAAA;2BAEjB,MAKM;AAAA,YAJE,QAAA,UADRC,UAAA,GAAAL,mBAKM,OALN,YAKM;AAAA,cADJM,WAAQ,KAAA,QAAA,SAAA;AAAA,YAAA;;;;QAIJ,QAAA,UAAU,QAAA,UADlBD,aAAAL,mBAKM,OALN,YAKM;AAAA,UADJM,WAAQ,KAAA,QAAA,SAAA;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"RuiTabItem.vue2.js","sources":["../../../../src/components/tabs/tab-item/RuiTabItem.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nexport interface Props {\n active?: boolean;\n value?: number | string;\n eager?: boolean;\n reverse?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTabItem',\n});\n\nwithDefaults(defineProps<Props>(), {\n value: undefined,\n eager: false,\n active: false,\n reverse: false,\n});\n</script>\n\n<template>\n <div\n role=\"tabpanel\"\n :class=\"[$style.tab, { 'active-tab-item': active }]\"\n >\n <Transition\n :enter-from-class=\"`opacity-0 ${reverse ? '-translate-x-8' : 'translate-x-8'}`\"\n :leave-to-class=\"`opacity-0 !h-0 overflow-hidden ${\n reverse ? 'translate-x-8' : '-translate-x-8'\n }`\"\n enter-active-class=\"w-full transform duration-300 transition\"\n enter-to-class=\"opacity-100 translate-x-0\"\n leave-active-class=\"w-full transform duration-300 transition !h-0 overflow-hidden\"\n leave-from-class=\"opacity-100 translate-x-0 !h-0 overflow-hidden\"\n >\n <div\n v-if=\"active\"\n class=\"w-full\"\n >\n <slot />\n </div>\n </Transition>\n <div\n v-if=\"eager && !active\"\n class=\"hidden\"\n >\n <slot />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.tab {\n @apply w-full;\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_createVNode","_Transition","_openBlock","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;;;;;;;0BAqBEA,mBA2BM,OAAA;AAAA,QA1BJ,MAAK;AAAA,QACJ,OAAKC,eAAA,CAAGC,KAAAA,OAAO,0BAA0B,QAAA,QAAM,CAAA;AAAA,MAAA;QAEhDC,YAgBaC,YAAA;AAAA,UAfV,iCAA+B,QAAA,UAAO,mBAAA,eAAA;AAAA,UACtC,kBAAc,kCAA6C,QAAA,UAAO,kBAAA;UAGnE,sBAAmB;AAAA,UACnB,kBAAe;AAAA,UACf,sBAAmB;AAAA,UACnB,oBAAiB;AAAA,QAAA;2BAEjB,MAKM;AAAA,YAJE,QAAA,UADRC,UAAA,GAAAL,mBAKM,OALN,YAKM;AAAA,cADJM,WAAQ,KAAA,QAAA,SAAA;AAAA,YAAA;;;;QAIJ,QAAA,UAAU,QAAA,UADlBD,aAAAL,mBAKM,OALN,YAKM;AAAA,UADJM,WAAQ,KAAA,QAAA,SAAA;AAAA,QAAA;;;;;"}
@@ -12,7 +12,7 @@ declare const __VLS_export: <T extends string | number>(__VLS_props: NonNullable
12
12
  expose: (exposed: {}) => void;
13
13
  attrs: any;
14
14
  slots: {};
15
- emit: (evt: "update:modelValue", value: T | undefined) => void;
15
+ emit: (event: "update:modelValue", value: T | undefined) => void;
16
16
  }>) => import("vue").VNode & {
17
17
  __ctx?: Awaited<typeof __VLS_setup>;
18
18
  };
@@ -1,4 +1,4 @@
1
- import { defineComponent, useCssVars, unref, useModel, useSlots, ref, watch, nextTick, computed, createElementBlock, openBlock, mergeProps, createElementVNode, Fragment, renderList, createBlock, resolveDynamicComponent, isVNode } from "vue";
1
+ import { defineComponent, useCssVars, unref, useModel, useSlots, ref, watch, nextTick, computed, openBlock, createElementBlock, mergeProps, createElementVNode, Fragment, renderList, createBlock, resolveDynamicComponent, isVNode } from "vue";
2
2
  import { set, get } from "@vueuse/shared";
3
3
  import { useElementSize } from "@vueuse/core";
4
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -13,9 +13,9 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
13
13
  }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
14
14
  "onUpdate:modelValue"?: ((modelValue: string | number) => any) | undefined;
15
15
  }>, {
16
+ vertical: boolean;
16
17
  color: ContextColorsType;
17
18
  disabled: boolean;
18
- vertical: boolean;
19
19
  modelValue: number | string;
20
20
  align: "start" | "center" | "end";
21
21
  grow: boolean;
@@ -1,4 +1,4 @@
1
- import { defineComponent, toRefs, ref, useSlots, computed, onMounted, watch, createElementBlock, openBlock, normalizeClass, unref, createCommentVNode, createElementVNode, createVNode, withCtx, Fragment, renderList, createBlock, resolveDynamicComponent, isVNode, nextTick } from "vue";
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";
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";
@@ -1,4 +1,4 @@
1
- import { defineComponent, mergeModels, useModel, ref, useTemplateRef, computed, onMounted, watch, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, toDisplayString, normalizeStyle, Fragment, renderList, nextTick } from "vue";
1
+ import { defineComponent, useModel, ref, useTemplateRef, computed, onMounted, watch, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, normalizeStyle, Fragment, renderList, mergeModels, nextTick } from "vue";
2
2
  import { TimeAccuracy } from "../../consts/time-accuracy.js";
3
3
  import { assert } from "../../utils/assert.js";
4
4
  import { isDefined } from "@vueuse/core";
@@ -13,7 +13,8 @@ const _hoisted_3 = {
13
13
  class: "text-lg font-semibold"
14
14
  };
15
15
  const _hoisted_4 = { class: "text-xl" };
16
- const _hoisted_5 = ["onClick"];
16
+ const _hoisted_5 = ["aria-label"];
17
+ const _hoisted_6 = ["aria-selected", "onClick"];
17
18
  const FULL_CIRCLE = 360;
18
19
  const TWELVE_HOURS = 12;
19
20
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -320,6 +321,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
320
321
  }, { deep: true });
321
322
  return (_ctx, _cache) => {
322
323
  return openBlock(), createElementBlock("div", {
324
+ role: "group",
325
+ "aria-label": "Time picker",
323
326
  class: normalizeClass({
324
327
  [_ctx.$style["rui-timepicker"]]: true,
325
328
  [_ctx.$style.bordered]: !__props.borderless
@@ -330,6 +333,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
330
333
  }, [
331
334
  createElementVNode("div", _hoisted_1, [
332
335
  createElementVNode("div", {
336
+ role: "button",
337
+ "aria-label": "Select hours",
333
338
  class: normalizeClass({
334
339
  [_ctx.$style["rui-digit"]]: true,
335
340
  [_ctx.$style.active]: editMode.value === "hour"
@@ -338,6 +343,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
338
343
  }, toDisplayString(formatValue(displayHour.value)), 3),
339
344
  _cache[7] || (_cache[7] = createElementVNode("div", { class: "text-2xl font-semibold" }, " : ", -1)),
340
345
  createElementVNode("div", {
346
+ role: "button",
347
+ "aria-label": "Select minutes",
341
348
  class: normalizeClass({
342
349
  [_ctx.$style["rui-digit"]]: true,
343
350
  [_ctx.$style.active]: editMode.value === "minute"
@@ -347,6 +354,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
347
354
  showSecond.value ? (openBlock(), createElementBlock("div", _hoisted_2, " : ")) : createCommentVNode("", true),
348
355
  showSecond.value ? (openBlock(), createElementBlock("div", {
349
356
  key: 1,
357
+ role: "button",
358
+ "aria-label": "Select seconds",
350
359
  class: normalizeClass({
351
360
  [_ctx.$style["rui-digit"]]: true,
352
361
  [_ctx.$style.active]: editMode.value === "second"
@@ -356,6 +365,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
356
365
  showMillisecond.value ? (openBlock(), createElementBlock("div", _hoisted_3, " . ")) : createCommentVNode("", true),
357
366
  showMillisecond.value ? (openBlock(), createElementBlock("div", {
358
367
  key: 3,
368
+ role: "button",
369
+ "aria-label": "Select milliseconds",
359
370
  class: normalizeClass(["!text-lg", {
360
371
  [_ctx.$style.active]: editMode.value === "millisecond",
361
372
  [_ctx.$style["rui-digit"]]: true
@@ -364,6 +375,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
364
375
  }, toDisplayString(formatValue(selectedMillisecond.value, 3)), 3)) : createCommentVNode("", true),
365
376
  createElementVNode("div", _hoisted_4, [
366
377
  createElementVNode("div", {
378
+ role: "button",
379
+ "aria-label": "Toggle AM/PM",
367
380
  class: "rui-time-picker-period cursor-pointer",
368
381
  onClick: _cache[4] || (_cache[4] = ($event) => toggleAmPm())
369
382
  }, toDisplayString(period.value), 1)
@@ -373,6 +386,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
373
386
  createElementVNode("div", {
374
387
  ref_key: "clockFace",
375
388
  ref: clockFace,
389
+ role: "listbox",
390
+ "aria-label": `Select ${editMode.value}`,
376
391
  class: normalizeClass(_ctx.$style["rui-clock-face"]),
377
392
  onMousedown: _cache[5] || (_cache[5] = ($event) => startDrag($event)),
378
393
  onTouchstart: _cache[6] || (_cache[6] = ($event) => startDrag($event))
@@ -393,6 +408,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
393
408
  (openBlock(true), createElementBlock(Fragment, null, renderList(clockNumbers.value, (num) => {
394
409
  return openBlock(), createElementBlock("div", {
395
410
  key: `num-${num}`,
411
+ role: "option",
412
+ "aria-selected": isSelectedNumber(num),
396
413
  class: normalizeClass({
397
414
  [_ctx.$style["rui-clock-number"]]: true,
398
415
  [_ctx.$style["is-selected"]]: isSelectedNumber(num),
@@ -400,9 +417,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
400
417
  }),
401
418
  style: normalizeStyle(numberStyle(num)),
402
419
  onClick: ($event) => selectByClick(num)
403
- }, toDisplayString(num), 15, _hoisted_5);
420
+ }, toDisplayString(num), 15, _hoisted_6);
404
421
  }), 128))
405
- ], 34)
422
+ ], 42, _hoisted_5)
406
423
  ], 2);
407
424
  };
408
425
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTimePicker.vue2.js","sources":["../../../src/components/time-picker/RuiTimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, type StyleValue, watch } from 'vue';\nimport { TimeAccuracy } from '@/consts/time-accuracy';\nimport { assert } from '@/utils/assert';\n\nexport type TimePickerSelection = 'hour' | 'minute' | 'second' | 'millisecond';\n\nexport interface RuiTimePickerProps {\n accuracy?: TimeAccuracy;\n borderless?: boolean;\n}\n\nconst modelValue = defineModel<Date | undefined>({ required: true });\n\nconst selectedHour = defineModel<number | undefined>('hour');\nconst selectedMinute = defineModel<number | undefined>('minute');\nconst selectedSecond = defineModel<number | undefined>('second');\nconst selectedMillisecond = defineModel<number | undefined>('millisecond');\nconst editMode = defineModel<TimePickerSelection>('selection', { default: 'hour' });\n\nconst props = withDefaults(defineProps<RuiTimePickerProps>(), {\n accuracy: TimeAccuracy.MINUTE,\n borderless: false,\n});\n\nconst FULL_CIRCLE = 360;\nconst TWELVE_HOURS = 12;\n\nconst totalItemsPerMode: Record<TimePickerSelection, number> = {\n hour: 12,\n minute: 60,\n second: 60,\n millisecond: 1000,\n};\n\nconst intervals: Record<TimePickerSelection, number> = {\n hour: 1,\n minute: 5,\n second: 5,\n millisecond: 100,\n};\n\nconst isDragging = ref<boolean>(false);\nconst clockFace = useTemplateRef<InstanceType<typeof HTMLDivElement>>('clockFace');\n\nconst showSecond = computed<boolean>(() => props.accuracy === TimeAccuracy.SECOND || props.accuracy === TimeAccuracy.MILLISECOND);\nconst showMillisecond = computed<boolean>(() => props.accuracy === TimeAccuracy.MILLISECOND);\n\nconst period = computed<'PM' | 'AM'>(() => isDefined(selectedHour) && get(selectedHour) >= TWELVE_HOURS ? 'PM' : 'AM');\n\nconst displayHour = computed<number | undefined>(() => {\n if (!isDefined(selectedHour)) {\n return undefined;\n }\n const hourValue = get(selectedHour);\n const hour = hourValue % TWELVE_HOURS;\n return hour === 0 ? TWELVE_HOURS : hour;\n});\n\nconst editedValue = computed<number | undefined>(() => {\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour);\n }\n else if (mode === 'minute') {\n return get(selectedMinute);\n }\n else if (mode === 'second') {\n return get(selectedSecond);\n }\n else {\n return get(selectedMillisecond);\n }\n});\n\nconst displayClockHandCircle = computed<boolean>(() => {\n const mode = get(editMode);\n if (mode === 'hour' || !isDefined(editedValue)) {\n return false;\n }\n else {\n const interval = intervals[mode];\n const value = get(editedValue);\n return value % interval !== 0;\n }\n});\n\nconst dotStyle = computed<StyleValue>(() => ({\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n}));\n\nconst clockHandStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (currentValue * (FULL_CIRCLE / totalItems));\n\n return {\n height: '36%',\n top: '14%',\n left: '50%',\n transformOrigin: 'bottom center',\n transform: `translateX(-50%) rotate(${angle}deg)`,\n zIndex: 10,\n };\n});\n\nconst clockHandCircleStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const radius = '38%';\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (currentValue * (FULL_CIRCLE / totalItems));\n\n const radians = (angle * Math.PI) / 180;\n\n const x = 50 + parseFloat(radius) * Math.cos(radians - Math.PI / 2);\n const y = 50 + parseFloat(radius) * Math.sin(radians - Math.PI / 2);\n\n return {\n position: 'absolute',\n top: `${y}%`,\n left: `${x}%`,\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 11,\n };\n});\n\nconst clockNumbers = computed<number[]>(() => {\n const mode = get(editMode);\n const interval = intervals[mode];\n const total = totalItemsPerMode[mode];\n const numbers = generateNumbers(total, interval);\n if (mode === 'hour') {\n numbers[0] = 12;\n }\n return numbers;\n});\n\nfunction getModelHours() {\n return isDefined(modelValue) ? new Date(get(modelValue)).getHours() : undefined;\n}\n\nfunction getModelMinutes() {\n return isDefined(modelValue) ? new Date(get(modelValue)).getMinutes() : undefined;\n}\n\nfunction getModelSeconds() {\n const acceptedAccuracy: TimeAccuracy[] = [TimeAccuracy.SECOND, TimeAccuracy.MILLISECOND];\n return acceptedAccuracy.includes(props.accuracy) && isDefined(modelValue)\n ? new Date(get(modelValue)).getSeconds()\n : undefined;\n}\n\nfunction getModelMilliseconds() {\n return props.accuracy === TimeAccuracy.MILLISECOND && isDefined(modelValue)\n ? new Date(get(modelValue)).getMilliseconds()\n : undefined;\n}\n\nfunction generateNumbers(total: number, interval: number): number[] {\n const numbers: number[] = [];\n for (let i = 0; i < total; i += interval) {\n numbers.push(i);\n }\n return numbers;\n}\n\nfunction formatValue(value?: number, padding = 2): string {\n return value !== undefined\n ? value.toString().padStart(padding, '0')\n : '-'.repeat(padding);\n}\n\nfunction numberStyle(num: number): StyleValue {\n const radius = '38%';\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (num * (FULL_CIRCLE / totalItems)) - 90;\n\n const radians = (angle * Math.PI) / 180;\n const x = 50 + parseFloat(radius) * Math.cos(radians);\n const y = 50 + parseFloat(radius) * Math.sin(radians);\n\n return {\n top: `${y}%`,\n left: `${x}%`,\n transform: 'translate(-50%, -50%)',\n };\n}\n\nfunction isSelectedNumber(num: number): boolean {\n if (!isDefined(editedValue)) {\n return false;\n }\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour) === num;\n }\n else {\n const value = get(editedValue);\n const interval = intervals[mode];\n return value === num || (value % interval === 0 && value === num);\n }\n}\n\nfunction toggleAmPm() {\n if (!isDefined(selectedHour)) {\n return;\n }\n if (get(selectedHour) < TWELVE_HOURS) {\n set(selectedHour, get(selectedHour) + TWELVE_HOURS);\n }\n else {\n set(selectedHour, get(selectedHour) - TWELVE_HOURS);\n }\n\n updateModelValue();\n}\n\nfunction startDrag(event: MouseEvent | TouchEvent) {\n event.preventDefault();\n set(isDragging, true);\n\n const handleMove = (moveEvent: MouseEvent | TouchEvent) => {\n if (!get(isDragging) || !isDefined(clockFace))\n return;\n\n const rect = get(clockFace).getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n\n let clientX, clientY;\n\n if ('touches' in moveEvent) {\n const touch = moveEvent.touches[0];\n assert(touch);\n clientX = touch.clientX;\n clientY = touch.clientY;\n }\n else {\n clientX = moveEvent.clientX;\n clientY = moveEvent.clientY;\n }\n\n const x = clientX - centerX;\n const y = clientY - centerY;\n\n let angle = Math.atan2(y, x) * (180 / Math.PI) + 90;\n if (angle < 0)\n angle += FULL_CIRCLE;\n\n const mode = get(editMode);\n const unit = Math.round(angle / (FULL_CIRCLE / totalItemsPerMode[mode])) % totalItemsPerMode[mode];\n if (mode === 'hour') {\n let hour;\n\n hour = unit;\n if (hour === 0)\n hour = TWELVE_HOURS;\n\n if (get(period) === 'PM' && hour < TWELVE_HOURS) {\n hour += TWELVE_HOURS;\n }\n else if (get(period) === 'AM' && hour === TWELVE_HOURS) {\n hour = 0;\n }\n\n set(selectedHour, hour);\n }\n else if (mode === 'minute') {\n set(selectedMinute, unit);\n }\n else if (mode === 'second') {\n set(selectedSecond, unit);\n }\n else {\n set(selectedMillisecond, unit);\n }\n\n updateModelValue();\n };\n\n const handleEnd = (): void => {\n set(isDragging, false);\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchend', handleEnd);\n\n if (get(editMode) === 'hour') {\n set(editMode, 'minute');\n }\n else if (get(showSecond) && get(editMode) === 'minute') {\n set(editMode, 'second');\n }\n else if (get(showMillisecond) && get(editMode) === 'second') {\n set(editMode, 'millisecond');\n }\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('touchmove', handleMove);\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchend', handleEnd);\n\n handleMove(event);\n}\n\nfunction selectByClick(num: number) {\n const mode = get(editMode);\n if (mode === 'hour') {\n let newHour = num;\n\n if (get(period) === 'PM' && newHour < TWELVE_HOURS) {\n newHour += TWELVE_HOURS;\n }\n\n set(selectedHour, newHour);\n set(editMode, 'minute');\n }\n else if (mode === 'minute') {\n set(selectedMinute, num);\n if (get(showSecond))\n set(editMode, 'second');\n }\n else if (mode === 'second') {\n set(selectedSecond, num);\n if (get(showMillisecond)) {\n set(editMode, 'millisecond');\n }\n }\n else if (mode === 'millisecond') {\n set(selectedMillisecond, num);\n }\n\n updateModelValue();\n}\n\nfunction updateModelValue() {\n if (!(isDefined(selectedHour) && isDefined(selectedMinute))) {\n return;\n }\n nextTick(() => {\n const date = isDefined(modelValue) ? new Date(get(modelValue)) : new Date();\n date.setHours(get(selectedHour));\n date.setMinutes(get(selectedMinute));\n date.setSeconds(get(selectedSecond) ?? 0);\n date.setMilliseconds(get(selectedMillisecond) ?? 0);\n set(modelValue, date);\n });\n}\n\nonMounted(() => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n});\n\nwatch(modelValue, () => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n}, { deep: true });\n</script>\n\n<template>\n <div\n :class=\"{\n [$style['rui-timepicker']]: true,\n [$style.bordered]: !borderless,\n }\"\n >\n <div :class=\"$style['rui-digital-display']\">\n <div class=\"flex justify-center items-center gap-1\">\n <div\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'hour',\n }\"\n @click=\"editMode = 'hour'\"\n >\n {{ formatValue(displayHour) }}\n </div>\n <div class=\"text-2xl font-semibold\">\n :\n </div>\n <div\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'minute',\n }\"\n @click=\"editMode = 'minute'\"\n >\n {{ formatValue(selectedMinute) }}\n </div>\n <div\n v-if=\"showSecond\"\n class=\"text-2xl font-semibold\"\n >\n :\n </div>\n <div\n v-if=\"showSecond\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'second',\n }\"\n @click=\"editMode = 'second'\"\n >\n {{ formatValue(selectedSecond) }}\n </div>\n\n <div\n v-if=\"showMillisecond\"\n class=\"text-lg font-semibold\"\n >\n .\n </div>\n\n <div\n v-if=\"showMillisecond\"\n class=\"!text-lg\"\n :class=\"{\n [$style.active]: editMode === 'millisecond',\n [$style['rui-digit']]: true,\n }\"\n @click=\"editMode = 'millisecond'\"\n >\n {{ formatValue(selectedMillisecond, 3) }}\n </div>\n <div class=\"text-xl\">\n <div\n class=\"rui-time-picker-period cursor-pointer\"\n @click=\"toggleAmPm()\"\n >\n {{ period }}\n </div>\n </div>\n </div>\n </div>\n\n <div\n ref=\"clockFace\"\n :class=\"$style['rui-clock-face']\"\n @mousedown=\"startDrag($event)\"\n @touchstart=\"startDrag($event)\"\n >\n <div\n :class=\"$style['rui-center-dot']\"\n :style=\"dotStyle\"\n />\n\n <div\n :class=\"$style['rui-clock-hand']\"\n :style=\"clockHandStyle\"\n />\n\n <div\n v-if=\"displayClockHandCircle\"\n :class=\"$style['rui-clock-hand-circle']\"\n :style=\"clockHandCircleStyle\"\n />\n\n <div\n v-for=\"num in clockNumbers\"\n :key=\"`num-${num}`\"\n :class=\"{\n [$style['rui-clock-number']]: true,\n [$style['is-selected']]: isSelectedNumber(num),\n [`rui-${editMode}-${num.toString().padStart(2, '0')}`]: true,\n }\"\n :style=\"numberStyle(num)\"\n @click=\"selectByClick(num)\"\n >\n {{ num }}\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.rui-timepicker {\n @apply bg-white overflow-hidden text-rui-text p-3;\n\n &.bordered {\n @apply rounded-md shadow-sm border border-rui-grey-200;\n }\n}\n\n.rui-digital-display {\n @apply mb-2 text-center;\n}\n\n.rui-digit {\n @apply text-2xl font-semibold cursor-pointer;\n\n &.active {\n @apply text-rui-primary;\n }\n}\n\n.rui-clock-face {\n @apply relative rounded-full w-64 h-64 mx-auto border border-rui-grey-200;\n}\n\n.rui-center-dot {\n @apply absolute rounded-full bg-rui-primary w-3 h-3;\n}\n\n.rui-clock-hand {\n @apply absolute w-[1.5px] bg-rui-primary rounded-full;\n}\n\n.rui-clock-hand-circle {\n @apply absolute border-2 border-rui-primary;\n}\n\n.rui-clock-number {\n @apply absolute text-center text-sm font-medium w-8 h-8 flex items-center justify-center hover:bg-rui-primary-lighter cursor-pointer rounded-full;\n\n &.is-selected {\n @apply bg-rui-primary text-rui-dark-text dark:text-rui-light-text z-10 font-bold;\n }\n}\n\n:global(.dark) {\n .rui-timepicker {\n @apply bg-rui-grey-900;\n\n &.bordered {\n @apply border-rui-grey-800;\n }\n }\n\n .rui-clock-face {\n @apply border-rui-grey-800;\n }\n}\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeClass","$style","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeStyle"],"mappings":"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"}
1
+ {"version":3,"file":"RuiTimePicker.vue2.js","sources":["../../../src/components/time-picker/RuiTimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, type StyleValue, watch } from 'vue';\nimport { TimeAccuracy } from '@/consts/time-accuracy';\nimport { assert } from '@/utils/assert';\n\nexport type TimePickerSelection = 'hour' | 'minute' | 'second' | 'millisecond';\n\nexport interface RuiTimePickerProps {\n accuracy?: TimeAccuracy;\n borderless?: boolean;\n}\n\nconst modelValue = defineModel<Date | undefined>({ required: true });\n\nconst selectedHour = defineModel<number | undefined>('hour');\nconst selectedMinute = defineModel<number | undefined>('minute');\nconst selectedSecond = defineModel<number | undefined>('second');\nconst selectedMillisecond = defineModel<number | undefined>('millisecond');\nconst editMode = defineModel<TimePickerSelection>('selection', { default: 'hour' });\n\nconst props = withDefaults(defineProps<RuiTimePickerProps>(), {\n accuracy: TimeAccuracy.MINUTE,\n borderless: false,\n});\n\nconst FULL_CIRCLE = 360;\nconst TWELVE_HOURS = 12;\n\nconst totalItemsPerMode: Record<TimePickerSelection, number> = {\n hour: 12,\n minute: 60,\n second: 60,\n millisecond: 1000,\n};\n\nconst intervals: Record<TimePickerSelection, number> = {\n hour: 1,\n minute: 5,\n second: 5,\n millisecond: 100,\n};\n\nconst isDragging = ref<boolean>(false);\nconst clockFace = useTemplateRef<InstanceType<typeof HTMLDivElement>>('clockFace');\n\nconst showSecond = computed<boolean>(() => props.accuracy === TimeAccuracy.SECOND || props.accuracy === TimeAccuracy.MILLISECOND);\nconst showMillisecond = computed<boolean>(() => props.accuracy === TimeAccuracy.MILLISECOND);\n\nconst period = computed<'PM' | 'AM'>(() => isDefined(selectedHour) && get(selectedHour) >= TWELVE_HOURS ? 'PM' : 'AM');\n\nconst displayHour = computed<number | undefined>(() => {\n if (!isDefined(selectedHour)) {\n return undefined;\n }\n const hourValue = get(selectedHour);\n const hour = hourValue % TWELVE_HOURS;\n return hour === 0 ? TWELVE_HOURS : hour;\n});\n\nconst editedValue = computed<number | undefined>(() => {\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour);\n }\n else if (mode === 'minute') {\n return get(selectedMinute);\n }\n else if (mode === 'second') {\n return get(selectedSecond);\n }\n else {\n return get(selectedMillisecond);\n }\n});\n\nconst displayClockHandCircle = computed<boolean>(() => {\n const mode = get(editMode);\n if (mode === 'hour' || !isDefined(editedValue)) {\n return false;\n }\n else {\n const interval = intervals[mode];\n const value = get(editedValue);\n return value % interval !== 0;\n }\n});\n\nconst dotStyle = computed<StyleValue>(() => ({\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n}));\n\nconst clockHandStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (currentValue * (FULL_CIRCLE / totalItems));\n\n return {\n height: '36%',\n top: '14%',\n left: '50%',\n transformOrigin: 'bottom center',\n transform: `translateX(-50%) rotate(${angle}deg)`,\n zIndex: 10,\n };\n});\n\nconst clockHandCircleStyle = computed<StyleValue>(() => {\n if (!isDefined(editedValue)) {\n return {};\n }\n const radius = '38%';\n const currentValue = get(editedValue);\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (currentValue * (FULL_CIRCLE / totalItems));\n\n const radians = (angle * Math.PI) / 180;\n\n const x = 50 + parseFloat(radius) * Math.cos(radians - Math.PI / 2);\n const y = 50 + parseFloat(radius) * Math.sin(radians - Math.PI / 2);\n\n return {\n position: 'absolute',\n top: `${y}%`,\n left: `${x}%`,\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n zIndex: 11,\n };\n});\n\nconst clockNumbers = computed<number[]>(() => {\n const mode = get(editMode);\n const interval = intervals[mode];\n const total = totalItemsPerMode[mode];\n const numbers = generateNumbers(total, interval);\n if (mode === 'hour') {\n numbers[0] = 12;\n }\n return numbers;\n});\n\nfunction getModelHours() {\n return isDefined(modelValue) ? new Date(get(modelValue)).getHours() : undefined;\n}\n\nfunction getModelMinutes() {\n return isDefined(modelValue) ? new Date(get(modelValue)).getMinutes() : undefined;\n}\n\nfunction getModelSeconds() {\n const acceptedAccuracy: TimeAccuracy[] = [TimeAccuracy.SECOND, TimeAccuracy.MILLISECOND];\n return acceptedAccuracy.includes(props.accuracy) && isDefined(modelValue)\n ? new Date(get(modelValue)).getSeconds()\n : undefined;\n}\n\nfunction getModelMilliseconds() {\n return props.accuracy === TimeAccuracy.MILLISECOND && isDefined(modelValue)\n ? new Date(get(modelValue)).getMilliseconds()\n : undefined;\n}\n\nfunction generateNumbers(total: number, interval: number): number[] {\n const numbers: number[] = [];\n for (let i = 0; i < total; i += interval) {\n numbers.push(i);\n }\n return numbers;\n}\n\nfunction formatValue(value?: number, padding = 2): string {\n return value !== undefined\n ? value.toString().padStart(padding, '0')\n : '-'.repeat(padding);\n}\n\nfunction numberStyle(num: number): StyleValue {\n const radius = '38%';\n const totalItems = totalItemsPerMode[get(editMode)];\n const angle = (num * (FULL_CIRCLE / totalItems)) - 90;\n\n const radians = (angle * Math.PI) / 180;\n const x = 50 + parseFloat(radius) * Math.cos(radians);\n const y = 50 + parseFloat(radius) * Math.sin(radians);\n\n return {\n top: `${y}%`,\n left: `${x}%`,\n transform: 'translate(-50%, -50%)',\n };\n}\n\nfunction isSelectedNumber(num: number): boolean {\n if (!isDefined(editedValue)) {\n return false;\n }\n const mode = get(editMode);\n if (mode === 'hour') {\n return get(displayHour) === num;\n }\n else {\n const value = get(editedValue);\n const interval = intervals[mode];\n return value === num || (value % interval === 0 && value === num);\n }\n}\n\nfunction toggleAmPm() {\n if (!isDefined(selectedHour)) {\n return;\n }\n if (get(selectedHour) < TWELVE_HOURS) {\n set(selectedHour, get(selectedHour) + TWELVE_HOURS);\n }\n else {\n set(selectedHour, get(selectedHour) - TWELVE_HOURS);\n }\n\n updateModelValue();\n}\n\nfunction startDrag(event: MouseEvent | TouchEvent) {\n event.preventDefault();\n set(isDragging, true);\n\n const handleMove = (moveEvent: MouseEvent | TouchEvent) => {\n if (!get(isDragging) || !isDefined(clockFace))\n return;\n\n const rect = get(clockFace).getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n\n let clientX, clientY;\n\n if ('touches' in moveEvent) {\n const touch = moveEvent.touches[0];\n assert(touch);\n clientX = touch.clientX;\n clientY = touch.clientY;\n }\n else {\n clientX = moveEvent.clientX;\n clientY = moveEvent.clientY;\n }\n\n const x = clientX - centerX;\n const y = clientY - centerY;\n\n let angle = Math.atan2(y, x) * (180 / Math.PI) + 90;\n if (angle < 0)\n angle += FULL_CIRCLE;\n\n const mode = get(editMode);\n const unit = Math.round(angle / (FULL_CIRCLE / totalItemsPerMode[mode])) % totalItemsPerMode[mode];\n if (mode === 'hour') {\n let hour;\n\n hour = unit;\n if (hour === 0)\n hour = TWELVE_HOURS;\n\n if (get(period) === 'PM' && hour < TWELVE_HOURS) {\n hour += TWELVE_HOURS;\n }\n else if (get(period) === 'AM' && hour === TWELVE_HOURS) {\n hour = 0;\n }\n\n set(selectedHour, hour);\n }\n else if (mode === 'minute') {\n set(selectedMinute, unit);\n }\n else if (mode === 'second') {\n set(selectedSecond, unit);\n }\n else {\n set(selectedMillisecond, unit);\n }\n\n updateModelValue();\n };\n\n const handleEnd = (): void => {\n set(isDragging, false);\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchend', handleEnd);\n\n if (get(editMode) === 'hour') {\n set(editMode, 'minute');\n }\n else if (get(showSecond) && get(editMode) === 'minute') {\n set(editMode, 'second');\n }\n else if (get(showMillisecond) && get(editMode) === 'second') {\n set(editMode, 'millisecond');\n }\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('touchmove', handleMove);\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchend', handleEnd);\n\n handleMove(event);\n}\n\nfunction selectByClick(num: number) {\n const mode = get(editMode);\n if (mode === 'hour') {\n let newHour = num;\n\n if (get(period) === 'PM' && newHour < TWELVE_HOURS) {\n newHour += TWELVE_HOURS;\n }\n\n set(selectedHour, newHour);\n set(editMode, 'minute');\n }\n else if (mode === 'minute') {\n set(selectedMinute, num);\n if (get(showSecond))\n set(editMode, 'second');\n }\n else if (mode === 'second') {\n set(selectedSecond, num);\n if (get(showMillisecond)) {\n set(editMode, 'millisecond');\n }\n }\n else if (mode === 'millisecond') {\n set(selectedMillisecond, num);\n }\n\n updateModelValue();\n}\n\nfunction updateModelValue() {\n if (!(isDefined(selectedHour) && isDefined(selectedMinute))) {\n return;\n }\n nextTick(() => {\n const date = isDefined(modelValue) ? new Date(get(modelValue)) : new Date();\n date.setHours(get(selectedHour));\n date.setMinutes(get(selectedMinute));\n date.setSeconds(get(selectedSecond) ?? 0);\n date.setMilliseconds(get(selectedMillisecond) ?? 0);\n set(modelValue, date);\n });\n}\n\nonMounted(() => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n});\n\nwatch(modelValue, () => {\n set(selectedHour, getModelHours());\n set(selectedMinute, getModelMinutes());\n set(selectedSecond, getModelSeconds());\n set(selectedMillisecond, getModelMilliseconds());\n}, { deep: true });\n</script>\n\n<template>\n <div\n role=\"group\"\n aria-label=\"Time picker\"\n :class=\"{\n [$style['rui-timepicker']]: true,\n [$style.bordered]: !borderless,\n }\"\n >\n <div :class=\"$style['rui-digital-display']\">\n <div class=\"flex justify-center items-center gap-1\">\n <div\n role=\"button\"\n aria-label=\"Select hours\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'hour',\n }\"\n @click=\"editMode = 'hour'\"\n >\n {{ formatValue(displayHour) }}\n </div>\n <div class=\"text-2xl font-semibold\">\n :\n </div>\n <div\n role=\"button\"\n aria-label=\"Select minutes\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'minute',\n }\"\n @click=\"editMode = 'minute'\"\n >\n {{ formatValue(selectedMinute) }}\n </div>\n <div\n v-if=\"showSecond\"\n class=\"text-2xl font-semibold\"\n >\n :\n </div>\n <div\n v-if=\"showSecond\"\n role=\"button\"\n aria-label=\"Select seconds\"\n :class=\"{\n [$style['rui-digit']]: true,\n [$style.active]: editMode === 'second',\n }\"\n @click=\"editMode = 'second'\"\n >\n {{ formatValue(selectedSecond) }}\n </div>\n\n <div\n v-if=\"showMillisecond\"\n class=\"text-lg font-semibold\"\n >\n .\n </div>\n\n <div\n v-if=\"showMillisecond\"\n role=\"button\"\n aria-label=\"Select milliseconds\"\n class=\"!text-lg\"\n :class=\"{\n [$style.active]: editMode === 'millisecond',\n [$style['rui-digit']]: true,\n }\"\n @click=\"editMode = 'millisecond'\"\n >\n {{ formatValue(selectedMillisecond, 3) }}\n </div>\n <div class=\"text-xl\">\n <div\n role=\"button\"\n aria-label=\"Toggle AM/PM\"\n class=\"rui-time-picker-period cursor-pointer\"\n @click=\"toggleAmPm()\"\n >\n {{ period }}\n </div>\n </div>\n </div>\n </div>\n\n <div\n ref=\"clockFace\"\n role=\"listbox\"\n :aria-label=\"`Select ${editMode}`\"\n :class=\"$style['rui-clock-face']\"\n @mousedown=\"startDrag($event)\"\n @touchstart=\"startDrag($event)\"\n >\n <div\n :class=\"$style['rui-center-dot']\"\n :style=\"dotStyle\"\n />\n\n <div\n :class=\"$style['rui-clock-hand']\"\n :style=\"clockHandStyle\"\n />\n\n <div\n v-if=\"displayClockHandCircle\"\n :class=\"$style['rui-clock-hand-circle']\"\n :style=\"clockHandCircleStyle\"\n />\n\n <div\n v-for=\"num in clockNumbers\"\n :key=\"`num-${num}`\"\n role=\"option\"\n :aria-selected=\"isSelectedNumber(num)\"\n :class=\"{\n [$style['rui-clock-number']]: true,\n [$style['is-selected']]: isSelectedNumber(num),\n [`rui-${editMode}-${num.toString().padStart(2, '0')}`]: true,\n }\"\n :style=\"numberStyle(num)\"\n @click=\"selectByClick(num)\"\n >\n {{ num }}\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.rui-timepicker {\n @apply bg-white overflow-hidden text-rui-text p-3;\n\n &.bordered {\n @apply rounded-md shadow-sm border border-rui-grey-200;\n }\n}\n\n.rui-digital-display {\n @apply mb-2 text-center;\n}\n\n.rui-digit {\n @apply text-2xl font-semibold cursor-pointer;\n\n &.active {\n @apply text-rui-primary;\n }\n}\n\n.rui-clock-face {\n @apply relative rounded-full w-64 h-64 mx-auto border border-rui-grey-200;\n}\n\n.rui-center-dot {\n @apply absolute rounded-full bg-rui-primary w-3 h-3;\n}\n\n.rui-clock-hand {\n @apply absolute w-[1.5px] bg-rui-primary rounded-full;\n}\n\n.rui-clock-hand-circle {\n @apply absolute border-2 border-rui-primary;\n}\n\n.rui-clock-number {\n @apply absolute text-center text-sm font-medium w-8 h-8 flex items-center justify-center hover:bg-rui-primary-lighter cursor-pointer rounded-full;\n\n &.is-selected {\n @apply bg-rui-primary text-rui-dark-text dark:text-rui-light-text z-10 font-bold;\n }\n}\n\n:global(.dark) {\n .rui-timepicker {\n @apply bg-rui-grey-900;\n\n &.bordered {\n @apply border-rui-grey-800;\n }\n }\n\n .rui-clock-face {\n @apply border-rui-grey-800;\n }\n}\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeClass","$style","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeStyle"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { LuChevronsUpDown, LuArrowUp, LuArrowDown, LuArrowLeft, LuArrowRight, LuChevronUp, LuChevronDown, LuChevronLeft, LuChevronRight, LuChevronsLeft, LuChevronsRight, LuCircleAlert, LuCheck, LuCircleX, LuCircleCheck, LuCheckboxBlank, LuCheckboxFill, LuCheckboxIndeterminateFill, LuCheckboxBlankCircle, LuCheckboxBlankCircleFill, LuRadioButtonFill, LuClock } from "../icons/icons_1.js";
2
2
  import { LuEllipsis, LuInfo, LuEye, LuEyeOff } from "../icons/icons_2.js";
3
3
  import { LuTriangleAlert, LuX } from "../icons/icons_4.js";
4
- import { inject } from "vue";
5
4
  import { assert } from "../utils/assert.js";
5
+ import { inject } from "vue";
6
6
  const requiredIcons = [
7
7
  LuChevronsUpDown,
8
8
  LuEllipsis,
@@ -1 +1 @@
1
- {"version":3,"file":"icons.js","sources":["../../src/composables/icons.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { GeneratedIcon } from '@/types/icons';\nimport {\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuArrowUp,\n LuCheck,\n LuCheckboxBlank,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuChevronsUpDown,\n LuChevronUp,\n LuCircleAlert,\n LuCircleCheck,\n LuCircleX,\n LuClock,\n LuEllipsis,\n LuEye,\n LuEyeOff,\n LuInfo,\n LuRadioButtonFill,\n LuTriangleAlert,\n LuX,\n} from '@/icons';\n\nconst requiredIcons: GeneratedIcon[] = [\n LuChevronsUpDown,\n LuEllipsis,\n LuTriangleAlert,\n LuX,\n LuInfo,\n LuArrowUp,\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuChevronUp,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuCircleAlert,\n LuEye,\n LuEyeOff,\n LuCheck,\n LuCircleX,\n LuCircleCheck,\n LuCheckboxBlank,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuRadioButtonFill,\n LuClock,\n];\n\nexport interface IconsOptions {\n registeredIcons: GeneratedIcon[];\n}\n\nexport interface UseIconsReturn {\n registeredIcons: Readonly<Record<string, [string, Record<string, string>][]>>;\n}\n\nexport const IconsSymbol: InjectionKey<UseIconsReturn> = Symbol.for('rui:icons');\n\nexport function createIconDefaults(options?: Partial<IconsOptions>): UseIconsReturn {\n const iconsToAdd = options?.registeredIcons || [];\n return {\n registeredIcons: {\n ...Object.fromEntries(\n [\n ...requiredIcons,\n ...iconsToAdd,\n ].map(({ components, name }) => [name, components]),\n ),\n },\n };\n}\n\nexport function useIcons(): UseIconsReturn {\n const icons = inject(IconsSymbol);\n assert(icons, 'Could not find icons injection');\n return icons;\n}\n"],"names":[],"mappings":";;;;;AAiCA,MAAM,gBAAiC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,MAAM,cAA4C,uBAAO,IAAI,WAAW;AAExE,SAAS,mBAAmB,SAAiD;AAClF,QAAM,aAAa,SAAS,mBAAmB,CAAA;AAC/C,SAAO;AAAA,IACL,iBAAiB;AAAA,MACf,GAAG,OAAO;AAAA,QACR;AAAA,UACE,GAAG;AAAA,UACH,GAAG;AAAA,QAAA,EACH,IAAI,CAAC,EAAE,YAAY,WAAW,CAAC,MAAM,UAAU,CAAC;AAAA,MAAA;AAAA,IACpD;AAAA,EACF;AAEJ;AAEO,SAAS,WAA2B;AACzC,QAAM,QAAQ,OAAO,WAAW;AAChC,SAAO,OAAO,gCAAgC;AAC9C,SAAO;AACT;"}
1
+ {"version":3,"file":"icons.js","sources":["../../src/composables/icons.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { GeneratedIcon } from '@/types/icons';\nimport {\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuArrowUp,\n LuCheck,\n LuCheckboxBlank,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuChevronsUpDown,\n LuChevronUp,\n LuCircleAlert,\n LuCircleCheck,\n LuCircleX,\n LuClock,\n LuEllipsis,\n LuEye,\n LuEyeOff,\n LuInfo,\n LuRadioButtonFill,\n LuTriangleAlert,\n LuX,\n} from '@/icons';\nimport { assert } from '@/utils/assert';\n\nconst requiredIcons: GeneratedIcon[] = [\n LuChevronsUpDown,\n LuEllipsis,\n LuTriangleAlert,\n LuX,\n LuInfo,\n LuArrowUp,\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuChevronUp,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuCircleAlert,\n LuEye,\n LuEyeOff,\n LuCheck,\n LuCircleX,\n LuCircleCheck,\n LuCheckboxBlank,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuRadioButtonFill,\n LuClock,\n];\n\nexport interface IconsOptions {\n registeredIcons: GeneratedIcon[];\n}\n\nexport interface UseIconsReturn {\n registeredIcons: Readonly<Record<string, [string, Record<string, string>][]>>;\n}\n\nexport const IconsSymbol: InjectionKey<UseIconsReturn> = Symbol.for('rui:icons');\n\nexport function createIconDefaults(options?: Partial<IconsOptions>): UseIconsReturn {\n const iconsToAdd = options?.registeredIcons || [];\n return {\n registeredIcons: {\n ...Object.fromEntries(\n [\n ...requiredIcons,\n ...iconsToAdd,\n ].map(({ components, name }) => [name, components]),\n ),\n },\n };\n}\n\nexport function useIcons(): UseIconsReturn {\n const icons = inject(IconsSymbol);\n assert(icons, 'Could not find icons injection');\n return icons;\n}\n"],"names":[],"mappings":";;;;;AAkCA,MAAM,gBAAiC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,MAAM,cAA4C,uBAAO,IAAI,WAAW;AAExE,SAAS,mBAAmB,SAAiD;AAClF,QAAM,aAAa,SAAS,mBAAmB,CAAA;AAC/C,SAAO;AAAA,IACL,iBAAiB;AAAA,MACf,GAAG,OAAO;AAAA,QACR;AAAA,UACE,GAAG;AAAA,UACH,GAAG;AAAA,QAAA,EACH,IAAI,CAAC,EAAE,YAAY,WAAW,CAAC,MAAM,UAAU,CAAC;AAAA,MAAA;AAAA,IACpD;AAAA,EACF;AAEJ;AAEO,SAAS,WAA2B;AACzC,QAAM,QAAQ,OAAO,WAAW;AAChC,SAAO,OAAO,gCAAgC;AAC9C,SAAO;AACT;"}
@@ -16,9 +16,9 @@ const DEFAULT_POPPER_OPTIONS = {
16
16
  strategy: "absolute"
17
17
  };
18
18
  function usePopper(options, disabled = ref(false), openDelay = ref(0), closeDelay = ref(0), virtualReference) {
19
- const reference = ref(void 0);
20
- const popper = ref(void 0);
21
- const instance = ref(void 0);
19
+ const reference = ref();
20
+ const popper = ref();
21
+ const instance = ref();
22
22
  const open = ref(false);
23
23
  const popperEnter = ref(false);
24
24
  const leavePending = ref(false);
@@ -1 +1 @@
1
- {"version":3,"file":"popper.js","sources":["../../src/composables/popper.ts"],"sourcesContent":["import { createPopper, type Instance, type Placement, type PositioningStrategy, type VirtualElement } from '@popperjs/core';\nimport { type MaybeElement, unrefElement } from '@vueuse/core';\nimport { onMounted, type Ref, ref, watchEffect } from 'vue';\nimport { useTimeoutManager } from './timeout-manager';\n\nexport interface PopperOptions {\n locked?: boolean;\n overflowPadding?: number;\n offsetDistance?: number;\n offsetSkid?: number;\n placement?: Placement;\n strategy?: PositioningStrategy;\n gpuAcceleration?: boolean;\n adaptive?: boolean;\n scroll?: boolean;\n resize?: boolean;\n}\n\nexport const DEFAULT_POPPER_OPTIONS: PopperOptions = {\n adaptive: true,\n gpuAcceleration: true,\n locked: false,\n offsetDistance: 8,\n offsetSkid: 0,\n overflowPadding: 8,\n placement: 'bottom',\n resize: true,\n scroll: true,\n strategy: 'absolute',\n};\n\ninterface UsePopperReturn {\n instance: Ref<Instance | undefined>;\n leavePending: Ref<boolean>;\n onClose: (immediate?: boolean) => void;\n onLeavePending: () => void;\n onOpen: (immediate?: boolean) => void;\n onPopperLeave: () => void;\n open: Ref<boolean, boolean>;\n popper: Ref<MaybeElement>;\n popperEnter: Ref<boolean>;\n reference: Ref<HTMLElement | undefined>;\n updatePopper: () => Promise<void>;\n}\n\nexport function usePopper(\n options: Ref<PopperOptions>,\n disabled: Ref<boolean> = ref(false),\n openDelay: Ref<number> = ref(0),\n closeDelay: Ref<number> = ref(0),\n virtualReference?: Ref<Element | VirtualElement>,\n): UsePopperReturn {\n const reference = ref<HTMLElement | undefined>(undefined);\n const popper = ref<MaybeElement | undefined>(undefined);\n const instance = ref<Instance | undefined>(undefined);\n const open = ref<boolean>(false);\n const popperEnter = ref<boolean>(false);\n const leavePending = ref<boolean>(false);\n\n const openTimeoutManager = useTimeoutManager();\n const closeTimeoutManager = useTimeoutManager();\n\n const onPopperLeave = () => {\n set(popperEnter, false);\n };\n\n const updatePopper = async (): Promise<void> => {\n await get(instance)?.update();\n };\n\n const onOpen = (immediate = false) => {\n if (get(disabled))\n return;\n\n closeTimeoutManager.clear();\n\n set(leavePending, false);\n if (!openTimeoutManager.isActive()) {\n set(popperEnter, true);\n\n openTimeoutManager.create(() => {\n set(open, true);\n }, immediate ? 0 : get(openDelay));\n }\n };\n\n const onClose = (immediate = false) => {\n if (get(disabled))\n return;\n\n openTimeoutManager.clear();\n\n if (!closeTimeoutManager.isActive()) {\n closeTimeoutManager.create(() => {\n if (!get(open))\n onPopperLeave();\n\n set(open, false);\n }, immediate ? 0 : get(closeDelay));\n }\n };\n\n const onLeavePending = () => {\n set(leavePending, true);\n };\n\n const modifiers = computed(() => {\n const {\n adaptive = DEFAULT_POPPER_OPTIONS.adaptive,\n gpuAcceleration = DEFAULT_POPPER_OPTIONS.gpuAcceleration,\n locked = DEFAULT_POPPER_OPTIONS.locked,\n offsetDistance = DEFAULT_POPPER_OPTIONS.offsetDistance,\n offsetSkid = DEFAULT_POPPER_OPTIONS.offsetSkid,\n overflowPadding = DEFAULT_POPPER_OPTIONS.overflowPadding,\n resize = DEFAULT_POPPER_OPTIONS.resize,\n scroll = DEFAULT_POPPER_OPTIONS.scroll,\n } = get(options);\n\n return [{\n enabled: false,\n name: 'hide',\n }, {\n enabled: !locked,\n name: 'flip',\n }, {\n name: 'preventOverflow',\n options: {\n padding: overflowPadding,\n },\n }, {\n name: 'offset',\n options: {\n offset: [offsetSkid, offsetDistance],\n },\n }, {\n name: 'computeStyles',\n options: {\n adaptive,\n gpuAcceleration,\n },\n }, {\n name: 'eventListeners',\n options: {\n resize,\n scroll,\n },\n }, {\n name: 'arrow',\n options: {\n padding: 4,\n },\n }];\n });\n\n const popperConfig = computed(() => {\n const {\n placement = DEFAULT_POPPER_OPTIONS.placement,\n strategy = DEFAULT_POPPER_OPTIONS.strategy,\n } = get(options);\n\n return {\n modifiers: get(modifiers),\n placement,\n strategy,\n };\n });\n\n function getValidElements(): { popperEl: HTMLElement; referenceEl: Element | VirtualElement } | null {\n if (!get(popper) || (!get(reference) && !get(virtualReference))) {\n return null;\n }\n\n const popperEl = unrefElement(popper);\n const referenceEl = get(virtualReference) || unrefElement(reference);\n\n if (!(popperEl instanceof HTMLElement) || !referenceEl) {\n return null;\n }\n\n return { popperEl, referenceEl };\n }\n\n function initializePopper(onInvalidate: (cleanupFn: () => void) => void) {\n const elements = getValidElements();\n if (!elements)\n return;\n\n const { popperEl, referenceEl } = elements;\n\n const value = createPopper(referenceEl, popperEl, get(popperConfig));\n\n set(instance, value);\n onInvalidate(value.destroy);\n }\n\n useResizeObserver([reference, popper], async () => {\n if (isDefined(instance))\n await get(instance).update();\n });\n\n onMounted(() => {\n watchEffect((onInvalidate) => {\n initializePopper(onInvalidate);\n });\n });\n\n return {\n instance,\n leavePending,\n onClose,\n onLeavePending,\n onOpen,\n onPopperLeave,\n open,\n popper,\n popperEnter,\n reference,\n updatePopper,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"popper.js","sources":["../../src/composables/popper.ts"],"sourcesContent":["import { createPopper, type Instance, type Placement, type PositioningStrategy, type VirtualElement } from '@popperjs/core';\nimport { type MaybeElement, unrefElement } from '@vueuse/core';\nimport { onMounted, type Ref, ref, watchEffect } from 'vue';\nimport { useTimeoutManager } from './timeout-manager';\n\nexport interface PopperOptions {\n locked?: boolean;\n overflowPadding?: number;\n offsetDistance?: number;\n offsetSkid?: number;\n placement?: Placement;\n strategy?: PositioningStrategy;\n gpuAcceleration?: boolean;\n adaptive?: boolean;\n scroll?: boolean;\n resize?: boolean;\n}\n\nexport const DEFAULT_POPPER_OPTIONS: PopperOptions = {\n adaptive: true,\n gpuAcceleration: true,\n locked: false,\n offsetDistance: 8,\n offsetSkid: 0,\n overflowPadding: 8,\n placement: 'bottom',\n resize: true,\n scroll: true,\n strategy: 'absolute',\n};\n\ninterface UsePopperReturn {\n instance: Ref<Instance | undefined>;\n leavePending: Ref<boolean>;\n onClose: (immediate?: boolean) => void;\n onLeavePending: () => void;\n onOpen: (immediate?: boolean) => void;\n onPopperLeave: () => void;\n open: Ref<boolean, boolean>;\n popper: Ref<MaybeElement>;\n popperEnter: Ref<boolean>;\n reference: Ref<HTMLElement | undefined>;\n updatePopper: () => Promise<void>;\n}\n\nexport function usePopper(\n options: Ref<PopperOptions>,\n disabled: Ref<boolean> = ref(false),\n openDelay: Ref<number> = ref(0),\n closeDelay: Ref<number> = ref(0),\n virtualReference?: Ref<Element | VirtualElement>,\n): UsePopperReturn {\n const reference = ref<HTMLElement>();\n const popper = ref<MaybeElement>();\n const instance = ref<Instance>();\n const open = ref<boolean>(false);\n const popperEnter = ref<boolean>(false);\n const leavePending = ref<boolean>(false);\n\n const openTimeoutManager = useTimeoutManager();\n const closeTimeoutManager = useTimeoutManager();\n\n const onPopperLeave = () => {\n set(popperEnter, false);\n };\n\n const updatePopper = async (): Promise<void> => {\n await get(instance)?.update();\n };\n\n const onOpen = (immediate = false) => {\n if (get(disabled))\n return;\n\n closeTimeoutManager.clear();\n\n set(leavePending, false);\n if (!openTimeoutManager.isActive()) {\n set(popperEnter, true);\n\n openTimeoutManager.create(() => {\n set(open, true);\n }, immediate ? 0 : get(openDelay));\n }\n };\n\n const onClose = (immediate = false) => {\n if (get(disabled))\n return;\n\n openTimeoutManager.clear();\n\n if (!closeTimeoutManager.isActive()) {\n closeTimeoutManager.create(() => {\n if (!get(open))\n onPopperLeave();\n\n set(open, false);\n }, immediate ? 0 : get(closeDelay));\n }\n };\n\n const onLeavePending = () => {\n set(leavePending, true);\n };\n\n const modifiers = computed(() => {\n const {\n adaptive = DEFAULT_POPPER_OPTIONS.adaptive,\n gpuAcceleration = DEFAULT_POPPER_OPTIONS.gpuAcceleration,\n locked = DEFAULT_POPPER_OPTIONS.locked,\n offsetDistance = DEFAULT_POPPER_OPTIONS.offsetDistance,\n offsetSkid = DEFAULT_POPPER_OPTIONS.offsetSkid,\n overflowPadding = DEFAULT_POPPER_OPTIONS.overflowPadding,\n resize = DEFAULT_POPPER_OPTIONS.resize,\n scroll = DEFAULT_POPPER_OPTIONS.scroll,\n } = get(options);\n\n return [{\n enabled: false,\n name: 'hide',\n }, {\n enabled: !locked,\n name: 'flip',\n }, {\n name: 'preventOverflow',\n options: {\n padding: overflowPadding,\n },\n }, {\n name: 'offset',\n options: {\n offset: [offsetSkid, offsetDistance],\n },\n }, {\n name: 'computeStyles',\n options: {\n adaptive,\n gpuAcceleration,\n },\n }, {\n name: 'eventListeners',\n options: {\n resize,\n scroll,\n },\n }, {\n name: 'arrow',\n options: {\n padding: 4,\n },\n }];\n });\n\n const popperConfig = computed(() => {\n const {\n placement = DEFAULT_POPPER_OPTIONS.placement,\n strategy = DEFAULT_POPPER_OPTIONS.strategy,\n } = get(options);\n\n return {\n modifiers: get(modifiers),\n placement,\n strategy,\n };\n });\n\n function getValidElements(): { popperEl: HTMLElement; referenceEl: Element | VirtualElement } | null {\n if (!get(popper) || (!get(reference) && !get(virtualReference))) {\n return null;\n }\n\n const popperEl = unrefElement(popper);\n const referenceEl = get(virtualReference) || unrefElement(reference);\n\n if (!(popperEl instanceof HTMLElement) || !referenceEl) {\n return null;\n }\n\n return { popperEl, referenceEl };\n }\n\n function initializePopper(onInvalidate: (cleanupFn: () => void) => void) {\n const elements = getValidElements();\n if (!elements)\n return;\n\n const { popperEl, referenceEl } = elements;\n\n const value = createPopper(referenceEl, popperEl, get(popperConfig));\n\n set(instance, value);\n onInvalidate(value.destroy);\n }\n\n useResizeObserver([reference, popper], async () => {\n if (isDefined(instance))\n await get(instance).update();\n });\n\n onMounted(() => {\n watchEffect((onInvalidate) => {\n initializePopper(onInvalidate);\n });\n });\n\n return {\n instance,\n leavePending,\n onClose,\n onLeavePending,\n onOpen,\n onPopperLeave,\n open,\n popper,\n popperEnter,\n reference,\n updatePopper,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { createSharedComposable, getSSRHandler, useColorMode } from "@vueuse/core";
1
+ import { createSharedComposable, getSSRHandler, defaultWindow, useColorMode } from "@vueuse/core";
2
2
  import { ref, computed, watch } from "vue";
3
3
  import { defaultTheme, ThemeMode } from "../types/theme.js";
4
4
  import { get, set } from "@vueuse/shared";
@@ -7,7 +7,9 @@ const useRotkiTheme = createSharedComposable(() => {
7
7
  const updateHTMLAttrs = getSSRHandler(
8
8
  "updateHTMLAttrs",
9
9
  (selector, attribute, value) => {
10
- const el = typeof selector === "string" ? window?.document.querySelector(selector) : null;
10
+ if (typeof selector !== "string" || !defaultWindow)
11
+ return;
12
+ const el = defaultWindow.document.querySelector(selector);
11
13
  if (!el)
12
14
  return;
13
15
  el.setAttribute(attribute, value);
@@ -44,7 +46,8 @@ const useRotkiTheme = createSharedComposable(() => {
44
46
  const init = (options) => {
45
47
  switchThemeScheme(options.mode ?? ThemeMode.auto);
46
48
  setThemeConfig(options.config ?? { ...defaultTheme });
47
- if (typeof window !== "undefined") {
49
+ const windowReference = defaultWindow;
50
+ if (windowReference) {
48
51
  watch([isLight, theme], ([isLight2, theme2]) => {
49
52
  const styleVariables = /* @__PURE__ */ new Map();
50
53
  Object.entries(theme2).forEach(([context, contextObject]) => {
@@ -56,7 +59,7 @@ const useRotkiTheme = createSharedComposable(() => {
56
59
  styleVariables.set("--rui-text-disabled", `var(--rui-${state2}-text-disabled)`);
57
60
  styleVariables.set("--rui-text-primary", `var(--rui-${state2}-text-primary)`);
58
61
  styleVariables.set("--rui-text-secondary", `var(--rui-${state2}-text-secondary)`);
59
- const rootStyle = document.documentElement.style;
62
+ const rootStyle = windowReference.document.documentElement.style;
60
63
  styleVariables.forEach((value, variableName) => {
61
64
  rootStyle.setProperty(variableName, value);
62
65
  });
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sources":["../../src/composables/theme.ts"],"sourcesContent":["import { getSSRHandler, useColorMode } from '@vueuse/core';\nimport { computed, type ComputedRef, type Ref, ref } from 'vue';\nimport {\n type ColorIntensity,\n defaultTheme,\n type InitThemeOptions,\n type ThemeConfig,\n type ThemeContent,\n type ThemeData,\n ThemeMode,\n} from '@/types/theme';\n\nconst config: Ref<ThemeConfig> = ref({ ...defaultTheme });\n\n/**\n * Theme manager\n * @returns {ThemeContent}\n */\nexport const useRotkiTheme = createSharedComposable<() => ThemeContent>(() => {\n const updateHTMLAttrs = getSSRHandler(\n 'updateHTMLAttrs',\n (selector, attribute, value) => {\n const el = typeof selector === 'string' ? window?.document.querySelector(selector) : null;\n if (!el)\n return;\n el.setAttribute(attribute, value);\n },\n );\n\n const { state, store } = useColorMode<ThemeMode>({\n onChanged(mode, defaultHandler) {\n defaultHandler(mode);\n updateHTMLAttrs('html', 'data-theme', mode);\n },\n });\n\n /**\n * whether the current theme is controlled by system or user\n * @type {ComputedRef<boolean>}\n */\n const isAutoControlled: ComputedRef<boolean> = computed(() => get(store) === ThemeMode.auto);\n\n /**\n * truthy for light theme\n * @type {ComputedRef<boolean>}\n */\n const isLight: ComputedRef<boolean> = computed(() => get(state) === ThemeMode.light);\n\n /**\n * truthy for dark theme\n * @type {ComputedRef<boolean>}\n */\n const isDark: ComputedRef<boolean> = computed(() => get(state) === ThemeMode.dark);\n\n /**\n * current theme based on light or dark mode\n * @type {ComputedRef<ThemeData>}\n */\n const theme: ComputedRef<ThemeData> = computed(() => {\n if (get(isLight))\n return get(config).light;\n\n return get(config).dark;\n });\n\n /**\n * switch theme through dark/light/auto modes\n * @param {ThemeMode} mode\n */\n const switchThemeScheme = (mode: ThemeMode): void => {\n set(store, mode || ThemeMode.auto);\n };\n\n /**\n * toggle between auto|light|dark\n */\n const toggleThemeMode = (): void => {\n if (get(isAutoControlled))\n switchThemeScheme(ThemeMode.light);\n else if (get(isLight))\n switchThemeScheme(ThemeMode.dark);\n else if (get(isDark))\n switchThemeScheme(ThemeMode.auto);\n };\n\n /**\n * sets the configuration for the theme\n * @param {ThemeConfig} newConfig\n */\n const setThemeConfig = (newConfig: ThemeConfig): void => {\n set(config, newConfig);\n };\n\n /**\n * theme initializer, must be called once from the app's entry\n * @param {InitThemeOptions} options\n */\n const init = (options: InitThemeOptions): void => {\n switchThemeScheme(options.mode ?? ThemeMode.auto);\n setThemeConfig(options.config ?? { ...defaultTheme });\n\n if (typeof window !== 'undefined') {\n watch([isLight, theme], ([isLight, theme]) => {\n const styleVariables = new Map();\n\n // Compute context variables\n Object.entries(theme).forEach(([context, contextObject]: [string, ColorIntensity]) => {\n styleVariables.set(`--rui-${context}-darker`, contextObject.darker);\n styleVariables.set(`--rui-${context}-lighter`, contextObject.lighter);\n styleVariables.set(`--rui-${context}-main`, contextObject.DEFAULT);\n });\n\n // Determine the theme mode\n const state = isLight ? ThemeMode.light : ThemeMode.dark;\n\n // Add text color variables\n styleVariables.set('--rui-text-disabled', `var(--rui-${state}-text-disabled)`);\n styleVariables.set('--rui-text-primary', `var(--rui-${state}-text-primary)`);\n styleVariables.set('--rui-text-secondary', `var(--rui-${state}-text-secondary)`);\n\n // Apply all style variables in one operation\n const rootStyle = document.documentElement.style;\n styleVariables.forEach((value, variableName) => {\n rootStyle.setProperty(variableName, value);\n });\n }, { immediate: true });\n }\n };\n\n return {\n config,\n init,\n isAutoControlled,\n isDark,\n isLight,\n setThemeConfig,\n state,\n store,\n switchThemeScheme,\n theme,\n toggleThemeMode,\n };\n});\n"],"names":["isLight","theme","state"],"mappings":";;;;AAYA,MAAM,SAA2B,IAAI,EAAE,GAAG,cAAc;AAMjD,MAAM,gBAAgB,uBAA2C,MAAM;AAC5E,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA,CAAC,UAAU,WAAW,UAAU;AAC9B,YAAM,KAAK,OAAO,aAAa,WAAW,QAAQ,SAAS,cAAc,QAAQ,IAAI;AACrF,UAAI,CAAC;AACH;AACF,SAAG,aAAa,WAAW,KAAK;AAAA,IAClC;AAAA,EAAA;AAGF,QAAM,EAAE,OAAO,MAAA,IAAU,aAAwB;AAAA,IAC/C,UAAU,MAAM,gBAAgB;AAC9B,qBAAe,IAAI;AACnB,sBAAgB,QAAQ,cAAc,IAAI;AAAA,IAC5C;AAAA,EAAA,CACD;AAMD,QAAM,mBAAyC,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AAM3F,QAAM,UAAgC,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,KAAK;AAMnF,QAAM,SAA+B,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AAMjF,QAAM,QAAgC,SAAS,MAAM;AACnD,QAAI,IAAI,OAAO;AACb,aAAO,IAAI,MAAM,EAAE;AAErB,WAAO,IAAI,MAAM,EAAE;AAAA,EACrB,CAAC;AAMD,QAAM,oBAAoB,CAAC,SAA0B;AACnD,QAAI,OAAO,QAAQ,UAAU,IAAI;AAAA,EACnC;AAKA,QAAM,kBAAkB,MAAY;AAClC,QAAI,IAAI,gBAAgB;AACtB,wBAAkB,UAAU,KAAK;AAAA,aAC1B,IAAI,OAAO;AAClB,wBAAkB,UAAU,IAAI;AAAA,aACzB,IAAI,MAAM;AACjB,wBAAkB,UAAU,IAAI;AAAA,EACpC;AAMA,QAAM,iBAAiB,CAAC,cAAiC;AACvD,QAAI,QAAQ,SAAS;AAAA,EACvB;AAMA,QAAM,OAAO,CAAC,YAAoC;AAChD,sBAAkB,QAAQ,QAAQ,UAAU,IAAI;AAChD,mBAAe,QAAQ,UAAU,EAAE,GAAG,cAAc;AAEpD,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,CAAC,SAAS,KAAK,GAAG,CAAC,CAACA,UAASC,MAAK,MAAM;AAC5C,cAAM,qCAAqB,IAAA;AAG3B,eAAO,QAAQA,MAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,aAAa,MAAgC;AACpF,yBAAe,IAAI,SAAS,OAAO,WAAW,cAAc,MAAM;AAClE,yBAAe,IAAI,SAAS,OAAO,YAAY,cAAc,OAAO;AACpE,yBAAe,IAAI,SAAS,OAAO,SAAS,cAAc,OAAO;AAAA,QACnE,CAAC;AAGD,cAAMC,SAAQF,WAAU,UAAU,QAAQ,UAAU;AAGpD,uBAAe,IAAI,uBAAuB,aAAaE,MAAK,iBAAiB;AAC7E,uBAAe,IAAI,sBAAsB,aAAaA,MAAK,gBAAgB;AAC3E,uBAAe,IAAI,wBAAwB,aAAaA,MAAK,kBAAkB;AAG/E,cAAM,YAAY,SAAS,gBAAgB;AAC3C,uBAAe,QAAQ,CAAC,OAAO,iBAAiB;AAC9C,oBAAU,YAAY,cAAc,KAAK;AAAA,QAC3C,CAAC;AAAA,MACH,GAAG,EAAE,WAAW,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,CAAC;"}
1
+ {"version":3,"file":"theme.js","sources":["../../src/composables/theme.ts"],"sourcesContent":["import { defaultWindow, getSSRHandler, useColorMode } from '@vueuse/core';\nimport { computed, type ComputedRef, type Ref, ref } from 'vue';\nimport {\n type ColorIntensity,\n defaultTheme,\n type InitThemeOptions,\n type ThemeConfig,\n type ThemeContent,\n type ThemeData,\n ThemeMode,\n} from '@/types/theme';\n\nconst config: Ref<ThemeConfig> = ref({ ...defaultTheme });\n\n/**\n * Theme manager\n * @returns {ThemeContent}\n */\nexport const useRotkiTheme = createSharedComposable<() => ThemeContent>(() => {\n const updateHTMLAttrs = getSSRHandler(\n 'updateHTMLAttrs',\n (selector, attribute, value) => {\n if (typeof selector !== 'string' || !defaultWindow)\n return;\n\n const el = defaultWindow.document.querySelector(selector);\n if (!el)\n return;\n\n el.setAttribute(attribute, value);\n },\n );\n\n const { state, store } = useColorMode<ThemeMode>({\n onChanged(mode, defaultHandler) {\n defaultHandler(mode);\n updateHTMLAttrs('html', 'data-theme', mode);\n },\n });\n\n /**\n * whether the current theme is controlled by system or user\n * @type {ComputedRef<boolean>}\n */\n const isAutoControlled: ComputedRef<boolean> = computed(() => get(store) === ThemeMode.auto);\n\n /**\n * truthy for light theme\n * @type {ComputedRef<boolean>}\n */\n const isLight: ComputedRef<boolean> = computed(() => get(state) === ThemeMode.light);\n\n /**\n * truthy for dark theme\n * @type {ComputedRef<boolean>}\n */\n const isDark: ComputedRef<boolean> = computed(() => get(state) === ThemeMode.dark);\n\n /**\n * current theme based on light or dark mode\n * @type {ComputedRef<ThemeData>}\n */\n const theme: ComputedRef<ThemeData> = computed(() => {\n if (get(isLight))\n return get(config).light;\n\n return get(config).dark;\n });\n\n /**\n * switch theme through dark/light/auto modes\n * @param {ThemeMode} mode\n */\n const switchThemeScheme = (mode: ThemeMode): void => {\n set(store, mode || ThemeMode.auto);\n };\n\n /**\n * toggle between auto|light|dark\n */\n const toggleThemeMode = (): void => {\n if (get(isAutoControlled))\n switchThemeScheme(ThemeMode.light);\n else if (get(isLight))\n switchThemeScheme(ThemeMode.dark);\n else if (get(isDark))\n switchThemeScheme(ThemeMode.auto);\n };\n\n /**\n * sets the configuration for the theme\n * @param {ThemeConfig} newConfig\n */\n const setThemeConfig = (newConfig: ThemeConfig): void => {\n set(config, newConfig);\n };\n\n /**\n * theme initializer, must be called once from the app's entry\n * @param {InitThemeOptions} options\n */\n const init = (options: InitThemeOptions): void => {\n switchThemeScheme(options.mode ?? ThemeMode.auto);\n setThemeConfig(options.config ?? { ...defaultTheme });\n\n const windowReference = defaultWindow;\n if (windowReference) {\n watch([isLight, theme], ([isLight, theme]) => {\n const styleVariables = new Map();\n\n // Compute context variables\n Object.entries(theme).forEach(([context, contextObject]: [string, ColorIntensity]) => {\n styleVariables.set(`--rui-${context}-darker`, contextObject.darker);\n styleVariables.set(`--rui-${context}-lighter`, contextObject.lighter);\n styleVariables.set(`--rui-${context}-main`, contextObject.DEFAULT);\n });\n\n // Determine the theme mode\n const state = isLight ? ThemeMode.light : ThemeMode.dark;\n\n // Add text color variables\n styleVariables.set('--rui-text-disabled', `var(--rui-${state}-text-disabled)`);\n styleVariables.set('--rui-text-primary', `var(--rui-${state}-text-primary)`);\n styleVariables.set('--rui-text-secondary', `var(--rui-${state}-text-secondary)`);\n\n // Apply all style variables in one operation\n const rootStyle = windowReference.document.documentElement.style;\n styleVariables.forEach((value, variableName) => {\n rootStyle.setProperty(variableName, value);\n });\n }, { immediate: true });\n }\n };\n\n return {\n config,\n init,\n isAutoControlled,\n isDark,\n isLight,\n setThemeConfig,\n state,\n store,\n switchThemeScheme,\n theme,\n toggleThemeMode,\n };\n});\n"],"names":["isLight","theme","state"],"mappings":";;;;AAYA,MAAM,SAA2B,IAAI,EAAE,GAAG,cAAc;AAMjD,MAAM,gBAAgB,uBAA2C,MAAM;AAC5E,QAAM,kBAAkB;AAAA,IACtB;AAAA,IACA,CAAC,UAAU,WAAW,UAAU;AAC9B,UAAI,OAAO,aAAa,YAAY,CAAC;AACnC;AAEF,YAAM,KAAK,cAAc,SAAS,cAAc,QAAQ;AACxD,UAAI,CAAC;AACH;AAEF,SAAG,aAAa,WAAW,KAAK;AAAA,IAClC;AAAA,EAAA;AAGF,QAAM,EAAE,OAAO,MAAA,IAAU,aAAwB;AAAA,IAC/C,UAAU,MAAM,gBAAgB;AAC9B,qBAAe,IAAI;AACnB,sBAAgB,QAAQ,cAAc,IAAI;AAAA,IAC5C;AAAA,EAAA,CACD;AAMD,QAAM,mBAAyC,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AAM3F,QAAM,UAAgC,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,KAAK;AAMnF,QAAM,SAA+B,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AAMjF,QAAM,QAAgC,SAAS,MAAM;AACnD,QAAI,IAAI,OAAO;AACb,aAAO,IAAI,MAAM,EAAE;AAErB,WAAO,IAAI,MAAM,EAAE;AAAA,EACrB,CAAC;AAMD,QAAM,oBAAoB,CAAC,SAA0B;AACnD,QAAI,OAAO,QAAQ,UAAU,IAAI;AAAA,EACnC;AAKA,QAAM,kBAAkB,MAAY;AAClC,QAAI,IAAI,gBAAgB;AACtB,wBAAkB,UAAU,KAAK;AAAA,aAC1B,IAAI,OAAO;AAClB,wBAAkB,UAAU,IAAI;AAAA,aACzB,IAAI,MAAM;AACjB,wBAAkB,UAAU,IAAI;AAAA,EACpC;AAMA,QAAM,iBAAiB,CAAC,cAAiC;AACvD,QAAI,QAAQ,SAAS;AAAA,EACvB;AAMA,QAAM,OAAO,CAAC,YAAoC;AAChD,sBAAkB,QAAQ,QAAQ,UAAU,IAAI;AAChD,mBAAe,QAAQ,UAAU,EAAE,GAAG,cAAc;AAEpD,UAAM,kBAAkB;AACxB,QAAI,iBAAiB;AACnB,YAAM,CAAC,SAAS,KAAK,GAAG,CAAC,CAACA,UAASC,MAAK,MAAM;AAC5C,cAAM,qCAAqB,IAAA;AAG3B,eAAO,QAAQA,MAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,aAAa,MAAgC;AACpF,yBAAe,IAAI,SAAS,OAAO,WAAW,cAAc,MAAM;AAClE,yBAAe,IAAI,SAAS,OAAO,YAAY,cAAc,OAAO;AACpE,yBAAe,IAAI,SAAS,OAAO,SAAS,cAAc,OAAO;AAAA,QACnE,CAAC;AAGD,cAAMC,SAAQF,WAAU,UAAU,QAAQ,UAAU;AAGpD,uBAAe,IAAI,uBAAuB,aAAaE,MAAK,iBAAiB;AAC7E,uBAAe,IAAI,sBAAsB,aAAaA,MAAK,gBAAgB;AAC3E,uBAAe,IAAI,wBAAwB,aAAaA,MAAK,kBAAkB;AAG/E,cAAM,YAAY,gBAAgB,SAAS,gBAAgB;AAC3D,uBAAe,QAAQ,CAAC,OAAO,iBAAiB;AAC9C,oBAAU,YAAY,cAAc,KAAK;AAAA,QAC3C,CAAC;AAAA,MACH,GAAG,EAAE,WAAW,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,CAAC;"}
@@ -66,7 +66,6 @@ export declare const LuAlarmSmoke: GeneratedIcon;
66
66
  export declare const LuAlbum: GeneratedIcon;
67
67
  export declare const LuAlignCenterHorizontal: GeneratedIcon;
68
68
  export declare const LuAlignCenterVertical: GeneratedIcon;
69
- export declare const LuAlignCenter: GeneratedIcon;
70
69
  export declare const LuAlignEndHorizontal: GeneratedIcon;
71
70
  export declare const LuAlignEndVertical: GeneratedIcon;
72
71
  export declare const LuAlignHorizontalDistributeCenter: GeneratedIcon;
@@ -77,9 +76,6 @@ export declare const LuAlignHorizontalJustifyEnd: GeneratedIcon;
77
76
  export declare const LuAlignHorizontalJustifyStart: GeneratedIcon;
78
77
  export declare const LuAlignHorizontalSpaceAround: GeneratedIcon;
79
78
  export declare const LuAlignHorizontalSpaceBetween: GeneratedIcon;
80
- export declare const LuAlignJustify: GeneratedIcon;
81
- export declare const LuAlignLeft: GeneratedIcon;
82
- export declare const LuAlignRight: GeneratedIcon;
83
79
  export declare const LuAlignStartHorizontal: GeneratedIcon;
84
80
  export declare const LuAlignStartVertical: GeneratedIcon;
85
81
  export declare const LuAlignVerticalDistributeCenter: GeneratedIcon;
@@ -179,6 +175,7 @@ export declare const LuBadgeTurkishLira: GeneratedIcon;
179
175
  export declare const LuBadgeX: GeneratedIcon;
180
176
  export declare const LuBadge: GeneratedIcon;
181
177
  export declare const LuBaggageClaim: GeneratedIcon;
178
+ export declare const LuBalloon: GeneratedIcon;
182
179
  export declare const LuBan: GeneratedIcon;
183
180
  export declare const LuBanana: GeneratedIcon;
184
181
  export declare const LuBandage: GeneratedIcon;
@@ -223,6 +220,7 @@ export declare const LuBinary: GeneratedIcon;
223
220
  export declare const LuBinoculars: GeneratedIcon;
224
221
  export declare const LuBiohazard: GeneratedIcon;
225
222
  export declare const LuBird: GeneratedIcon;
223
+ export declare const LuBirdhouse: GeneratedIcon;
226
224
  export declare const LuBitcoin: GeneratedIcon;
227
225
  export declare const LuBlend: GeneratedIcon;
228
226
  export declare const LuBlinds: GeneratedIcon;
@@ -253,6 +251,7 @@ export declare const LuBookOpenCheck: GeneratedIcon;
253
251
  export declare const LuBookOpenText: GeneratedIcon;
254
252
  export declare const LuBookOpen: GeneratedIcon;
255
253
  export declare const LuBookPlus: GeneratedIcon;
254
+ export declare const LuBookSearch: GeneratedIcon;
256
255
  export declare const LuBookText: GeneratedIcon;
257
256
  export declare const LuBookType: GeneratedIcon;
258
257
  export declare const LuBookUp2: GeneratedIcon;
@@ -322,11 +321,13 @@ export declare const LuCalendarSync: GeneratedIcon;
322
321
  export declare const LuCalendarX2: GeneratedIcon;
323
322
  export declare const LuCalendarX: GeneratedIcon;
324
323
  export declare const LuCalendar: GeneratedIcon;
324
+ export declare const LuCalendars: GeneratedIcon;
325
325
  export declare const LuCameraOff: GeneratedIcon;
326
326
  export declare const LuCamera: GeneratedIcon;
327
327
  export declare const LuCandyCane: GeneratedIcon;
328
328
  export declare const LuCandyOff: GeneratedIcon;
329
329
  export declare const LuCandy: GeneratedIcon;
330
+ export declare const LuCannabisOff: GeneratedIcon;
330
331
  export declare const LuCannabis: GeneratedIcon;
331
332
  export declare const LuCaptionsOff: GeneratedIcon;
332
333
  export declare const LuCaptions: GeneratedIcon;
@@ -372,6 +373,12 @@ export declare const LuCheckLine: GeneratedIcon;
372
373
  export declare const LuCheck: GeneratedIcon;
373
374
  export declare const LuChefHat: GeneratedIcon;
374
375
  export declare const LuCherry: GeneratedIcon;
376
+ export declare const LuChessBishop: GeneratedIcon;
377
+ export declare const LuChessKing: GeneratedIcon;
378
+ export declare const LuChessKnight: GeneratedIcon;
379
+ export declare const LuChessPawn: GeneratedIcon;
380
+ export declare const LuChessQueen: GeneratedIcon;
381
+ export declare const LuChessRook: GeneratedIcon;
375
382
  export declare const LuChevronDown: GeneratedIcon;
376
383
  export declare const LuChevronFirst: GeneratedIcon;
377
384
  export declare const LuChevronLast: GeneratedIcon;
@@ -422,6 +429,7 @@ export declare const LuCircleParkingOff: GeneratedIcon;
422
429
  export declare const LuCircleParking: GeneratedIcon;
423
430
  export declare const LuCirclePause: GeneratedIcon;
424
431
  export declare const LuCirclePercent: GeneratedIcon;
432
+ export declare const LuCirclePile: GeneratedIcon;
425
433
  export declare const LuCirclePlay: GeneratedIcon;
426
434
  export declare const LuCirclePlus: GeneratedIcon;
427
435
  export declare const LuCirclePoundSterling: GeneratedIcon;
@@ -466,11 +474,13 @@ export declare const LuClock9: GeneratedIcon;
466
474
  export declare const LuClockAlert: GeneratedIcon;
467
475
  export declare const LuClockArrowDown: GeneratedIcon;
468
476
  export declare const LuClockArrowUp: GeneratedIcon;
477
+ export declare const LuClockCheck: GeneratedIcon;
469
478
  export declare const LuClockFading: GeneratedIcon;
470
479
  export declare const LuClockPlus: GeneratedIcon;
471
480
  export declare const LuClock: GeneratedIcon;
472
481
  export declare const LuClosedCaption: GeneratedIcon;
473
482
  export declare const LuCloudAlert: GeneratedIcon;
483
+ export declare const LuCloudBackup: GeneratedIcon;
474
484
  export declare const LuCloudCheck: GeneratedIcon;
475
485
  export declare const LuCloudCog: GeneratedIcon;
476
486
  export declare const LuCloudDownload: GeneratedIcon;
@@ -486,16 +496,6 @@ export declare const LuCloudRain: GeneratedIcon;
486
496
  export declare const LuCloudSnow: GeneratedIcon;
487
497
  export declare const LuCloudSunRain: GeneratedIcon;
488
498
  export declare const LuCloudSun: GeneratedIcon;
499
+ export declare const LuCloudSync: GeneratedIcon;
489
500
  export declare const LuCloudUpload: GeneratedIcon;
490
501
  export declare const LuCloud: GeneratedIcon;
491
- export declare const LuCloudy: GeneratedIcon;
492
- export declare const LuClover: GeneratedIcon;
493
- export declare const LuClub: GeneratedIcon;
494
- export declare const LuCodeXml: GeneratedIcon;
495
- export declare const LuCode: GeneratedIcon;
496
- export declare const LuCodepen: GeneratedIcon;
497
- export declare const LuCodesandbox: GeneratedIcon;
498
- export declare const LuCoffee: GeneratedIcon;
499
- export declare const LuCog: GeneratedIcon;
500
- export declare const LuCoins: GeneratedIcon;
501
- export declare const LuColumns2: GeneratedIcon;