@rotki/ui-library 2.12.2 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +6 -14
  2. package/dist/components/accordions/accordion/RuiAccordion.vue.js +3 -4
  3. package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
  4. package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +10 -9
  5. package/dist/components/accordions/accordions/RuiAccordions.vue.js +27 -26
  6. package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -1
  7. package/dist/components/alerts/RuiAlert.vue.d.ts +5 -15
  8. package/dist/components/alerts/RuiAlert.vue2.js +8 -16
  9. package/dist/components/alerts/RuiAlert.vue2.js.map +1 -1
  10. package/dist/components/buttons/button/RuiButton.vue.d.ts +5 -7
  11. package/dist/components/buttons/button/RuiButton.vue2.js +19 -20
  12. package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -1
  13. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
  14. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +42 -41
  15. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -1
  16. package/dist/components/calendar/RuiCalendar.vue.d.ts +1 -6
  17. package/dist/components/calendar/RuiCalendar.vue.js +6 -7
  18. package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
  19. package/dist/components/calendar/RuiCalendarGrid.vue.js +1 -1
  20. package/dist/components/calendar/RuiCalendarGrid.vue2.js +19 -17
  21. package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -1
  22. package/dist/components/calendar/RuiCalendarHeader.vue.js +1 -1
  23. package/dist/components/calendar/RuiCalendarHeader.vue2.js +2 -3
  24. package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -1
  25. package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
  26. package/dist/components/calendar/RuiCalendarMenu.vue2.js +47 -39
  27. package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
  28. package/dist/components/cards/RuiCard.vue.d.ts +9 -24
  29. package/dist/components/cards/RuiCard.vue2.js +7 -7
  30. package/dist/components/cards/RuiCard.vue2.js.map +1 -1
  31. package/dist/components/cards/RuiCardHeader.vue.d.ts +5 -10
  32. package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -1
  33. package/dist/components/chips/RuiChip.vue.d.ts +7 -21
  34. package/dist/components/chips/RuiChip.vue2.js +16 -21
  35. package/dist/components/chips/RuiChip.vue2.js.map +1 -1
  36. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
  37. package/dist/components/color-picker/RuiColorBoard.vue2.js +14 -18
  38. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
  39. package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
  40. package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
  41. package/dist/components/color-picker/RuiColorHue.vue2.js +10 -13
  42. package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
  43. package/dist/components/color-picker/RuiColorInput.vue.js +8 -6
  44. package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
  45. package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
  46. package/dist/components/color-picker/RuiColorPicker.vue.js +18 -13
  47. package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
  48. package/dist/components/color-picker/utils.js +22 -5
  49. package/dist/components/color-picker/utils.js.map +1 -1
  50. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
  51. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +73 -77
  52. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
  53. package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
  54. package/dist/components/date-time-picker/dayjs-setup.js +8 -0
  55. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
  56. package/dist/components/date-time-picker/segment-config.d.ts +14 -0
  57. package/dist/components/date-time-picker/segment-config.js +23 -0
  58. package/dist/components/date-time-picker/segment-config.js.map +1 -0
  59. package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
  60. package/dist/components/date-time-picker/segment-utils.js +36 -0
  61. package/dist/components/date-time-picker/segment-utils.js.map +1 -0
  62. package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
  63. package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
  64. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  65. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
  66. package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
  67. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  68. package/dist/components/date-time-picker/utils.d.ts +1 -0
  69. package/dist/components/date-time-picker/utils.js +1 -0
  70. package/dist/components/date-time-picker/utils.js.map +1 -1
  71. package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
  72. package/dist/components/divider/RuiDivider.vue.js.map +1 -1
  73. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +9 -1120
  74. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +144 -160
  75. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
  76. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
  77. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +31 -31
  78. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
  79. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
  80. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +18 -21
  81. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
  82. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +3 -1
  83. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +12 -15
  84. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
  85. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -11
  86. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +6 -7
  87. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
  88. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +9 -784
  89. package/dist/components/forms/select/RuiMenuSelect.vue2.js +48 -51
  90. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
  91. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +10 -11
  92. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +15 -24
  93. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
  94. package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
  95. package/dist/components/forms/slider/RuiSlider.vue2.js +41 -46
  96. package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
  97. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
  98. package/dist/components/forms/switch/RuiSwitch.vue2.js +21 -20
  99. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
  100. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
  101. package/dist/components/forms/text-area/RuiTextArea.vue2.js +43 -79
  102. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
  103. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +7 -27
  104. package/dist/components/forms/text-field/RuiTextField.vue2.js +35 -66
  105. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
  106. package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
  107. package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
  108. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
  109. package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
  110. package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
  111. package/dist/components/icons/RuiIcon.vue2.js +8 -8
  112. package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
  113. package/dist/components/index.d.ts +3 -3
  114. package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
  115. package/dist/components/loaders/RuiSkeletonBase.vue2.js +1 -1
  116. package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
  117. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
  118. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +1 -1
  119. package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
  120. package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
  121. package/dist/components/logos/RuiLogo.vue.js +11 -13
  122. package/dist/components/logos/RuiLogo.vue.js.map +1 -1
  123. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
  124. package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
  125. package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
  126. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
  127. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
  128. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
  129. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +21 -27
  130. package/dist/components/overlays/dialog/RuiDialog.vue2.js +80 -63
  131. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
  132. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
  133. package/dist/components/overlays/menu/RuiMenu.vue2.js +67 -76
  134. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
  135. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +22 -30
  136. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +71 -47
  137. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
  138. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
  139. package/dist/components/overlays/notification/RuiNotification.vue.js +25 -22
  140. package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
  141. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
  142. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +11 -8
  143. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
  144. package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
  145. package/dist/components/progress/RuiProgress.vue2.js +18 -24
  146. package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
  147. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
  148. package/dist/components/steppers/RuiFooterStepper.vue2.js +21 -21
  149. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
  150. package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
  151. package/dist/components/steppers/RuiStepper.vue2.js +31 -33
  152. package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
  153. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
  154. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +1 -1
  155. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
  156. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
  157. package/dist/components/steppers/RuiStepperIcon.vue2.js +1 -1
  158. package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
  159. package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
  160. package/dist/components/tables/RuiDataTable.vue2.js +173 -582
  161. package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
  162. package/dist/components/tables/RuiDataTable.vue3.js +24 -27
  163. package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
  164. package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
  165. package/dist/components/tables/RuiExpandButton.vue2.js +1 -0
  166. package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
  167. package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
  168. package/dist/components/tables/RuiTableHead.vue2.js +19 -19
  169. package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
  170. package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
  171. package/dist/components/tables/RuiTablePagination.vue2.js +17 -16
  172. package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
  173. package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
  174. package/dist/components/tabs/tab/RuiTab.vue2.js +80 -51
  175. package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
  176. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
  177. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +1 -1
  178. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
  179. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +1 -4
  180. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
  181. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
  182. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
  183. package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
  184. package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
  185. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
  186. package/dist/components/time-picker/RuiTimePicker.vue2.js +68 -35
  187. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
  188. package/dist/composables/breakpoint.js +8 -13
  189. package/dist/composables/breakpoint.js.map +1 -1
  190. package/dist/composables/dropdown-menu.d.ts +7 -4
  191. package/dist/composables/dropdown-menu.js +73 -50
  192. package/dist/composables/dropdown-menu.js.map +1 -1
  193. package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
  194. package/dist/composables/forms/auto-complete/focus.js +28 -17
  195. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  196. package/dist/composables/forms/auto-complete/index.d.ts +0 -9
  197. package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
  198. package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
  199. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  200. package/dist/composables/forms/auto-complete/search.d.ts +7 -0
  201. package/dist/composables/forms/auto-complete/search.js +10 -8
  202. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  203. package/dist/composables/forms/auto-complete/value.d.ts +4 -0
  204. package/dist/composables/forms/auto-complete/value.js +24 -42
  205. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  206. package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
  207. package/dist/composables/forms/use-label-with-quote.js +14 -0
  208. package/dist/composables/forms/use-label-with-quote.js.map +1 -0
  209. package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
  210. package/dist/composables/forms/use-prepend-append-width.js +25 -0
  211. package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
  212. package/dist/composables/popper.js +60 -46
  213. package/dist/composables/popper.js.map +1 -1
  214. package/dist/composables/sticky-header.d.ts +7 -5
  215. package/dist/composables/sticky-header.js +51 -41
  216. package/dist/composables/sticky-header.js.map +1 -1
  217. package/dist/composables/tables/data-table/columns.d.ts +25 -0
  218. package/dist/composables/tables/data-table/columns.js +54 -0
  219. package/dist/composables/tables/data-table/columns.js.map +1 -0
  220. package/dist/composables/tables/data-table/expansion.d.ts +17 -0
  221. package/dist/composables/tables/data-table/expansion.js +38 -0
  222. package/dist/composables/tables/data-table/expansion.js.map +1 -0
  223. package/dist/composables/tables/data-table/grouping.d.ts +29 -0
  224. package/dist/composables/tables/data-table/grouping.js +136 -0
  225. package/dist/composables/tables/data-table/grouping.js.map +1 -0
  226. package/dist/composables/tables/data-table/pagination.d.ts +33 -0
  227. package/dist/composables/tables/data-table/pagination.js +119 -0
  228. package/dist/composables/tables/data-table/pagination.js.map +1 -0
  229. package/dist/composables/tables/data-table/selection.d.ts +29 -0
  230. package/dist/composables/tables/data-table/selection.js +164 -0
  231. package/dist/composables/tables/data-table/selection.js.map +1 -0
  232. package/dist/composables/tables/data-table/sort.d.ts +32 -0
  233. package/dist/composables/tables/data-table/sort.js +136 -0
  234. package/dist/composables/tables/data-table/sort.js.map +1 -0
  235. package/dist/composables/tables/data-table/types.d.ts +14 -0
  236. package/dist/composables/tables/data-table/types.js +11 -0
  237. package/dist/composables/tables/data-table/types.js.map +1 -0
  238. package/dist/composables/theme.js +1 -20
  239. package/dist/composables/theme.js.map +1 -1
  240. package/dist/composables/timeout-manager.d.ts +4 -2
  241. package/dist/composables/timeout-manager.js +2 -1
  242. package/dist/composables/timeout-manager.js.map +1 -1
  243. package/dist/icons/icons_1.js +28 -28
  244. package/dist/icons/icons_1.js.map +1 -1
  245. package/dist/icons/icons_2.d.ts +8 -8
  246. package/dist/icons/icons_2.js +52 -52
  247. package/dist/icons/icons_2.js.map +1 -1
  248. package/dist/icons/icons_3.d.ts +18 -18
  249. package/dist/icons/icons_3.js +108 -108
  250. package/dist/icons/icons_3.js.map +1 -1
  251. package/dist/icons/icons_4.d.ts +35 -0
  252. package/dist/icons/icons_4.js +176 -1
  253. package/dist/icons/icons_4.js.map +1 -1
  254. package/dist/icons/index.d.ts +1 -1
  255. package/dist/icons/index.js +1 -1
  256. package/dist/icons/index.js.map +1 -1
  257. package/dist/index.js +43 -15
  258. package/dist/index.js.map +1 -1
  259. package/dist/style.css +189 -162
  260. package/dist/theme/index.js +15 -1
  261. package/dist/theme/index.js.map +1 -1
  262. package/dist/utils/assert.d.ts +1 -1
  263. package/dist/utils/assert.js.map +1 -1
  264. package/dist/utils/form-text-detail.d.ts +9 -8
  265. package/dist/utils/form-text-detail.js +1 -2
  266. package/dist/utils/form-text-detail.js.map +1 -1
  267. package/dist/utils/helpers.d.ts +4 -32
  268. package/dist/utils/helpers.js +8 -9
  269. package/dist/utils/helpers.js.map +1 -1
  270. package/dist/utils/is-equal.d.ts +1 -1
  271. package/dist/utils/is-equal.js +5 -3
  272. package/dist/utils/is-equal.js.map +1 -1
  273. package/dist/web-types.json +359 -359
  274. package/package.json +44 -35
  275. package/dist/utils/generate-id.d.ts +0 -5
  276. package/dist/utils/generate-id.js +0 -21
  277. package/dist/utils/generate-id.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { defineComponent, reactive, ref, computed, getCurrentInstance, onMounted, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, normalizeStyle } from "vue";
1
+ import { defineComponent, useTemplateRef, reactive, ref, getCurrentInstance, computed, onMounted, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeClass, normalizeStyle } from "vue";
2
2
  import { get, set, clamp } from "@vueuse/shared";
3
3
  import { useElementDrag, Color } from "./utils.js";
4
4
  import { whenever } from "@vueuse/core";
@@ -14,32 +14,28 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
14
14
  },
15
15
  emits: ["update:board"],
16
16
  setup(__props, { emit: __emit }) {
17
- const props = __props;
18
17
  const emit = __emit;
19
- function hueToHex(hue) {
20
- return new Color({ h: hue, s: 1, v: 1 }).hexString;
21
- }
18
+ const wrapper = useTemplateRef("wrapper");
22
19
  const state = reactive({
23
- hexString: hueToHex(props.color.hue),
24
- saturation: props.color.saturation,
25
- brightness: props.color.brightness
20
+ hexString: hueToHex(__props.color.hue),
21
+ saturation: __props.color.saturation,
22
+ brightness: __props.color.brightness
26
23
  });
27
24
  const cursorTop = ref(0);
28
25
  const cursorLeft = ref(0);
26
+ const instance = getCurrentInstance();
27
+ const { handleClick, onMouseDown } = useElementDrag(emitColor);
29
28
  const cursorStyle = computed(() => ({
30
29
  top: `${get(cursorTop) * 100}%`,
31
30
  left: `${get(cursorLeft) * 100}%`
32
31
  }));
33
- const wrapper = ref();
32
+ function hueToHex(hue) {
33
+ return new Color({ h: hue, s: 1, v: 1 }).hexString;
34
+ }
34
35
  function updatePosition() {
35
36
  set(cursorLeft, state.saturation);
36
37
  set(cursorTop, 1 - state.brightness);
37
38
  }
38
- const instance = getCurrentInstance();
39
- const {
40
- handleClick,
41
- onMouseDown
42
- } = useElementDrag(emitColor);
43
39
  function emitColor(x, y) {
44
40
  if (!instance)
45
41
  return;
@@ -60,11 +56,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
56
  state.brightness = brightness;
61
57
  emit("update:board", { saturation, brightness });
62
58
  }
63
- onMounted(() => {
64
- updatePosition();
65
- });
66
59
  whenever(
67
- () => props.color,
60
+ () => __props.color,
68
61
  (value) => {
69
62
  state.hexString = hueToHex(value.hue);
70
63
  state.saturation = value.saturation;
@@ -73,6 +66,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
73
66
  },
74
67
  { deep: true }
75
68
  );
69
+ onMounted(() => {
70
+ updatePosition();
71
+ });
76
72
  return (_ctx, _cache) => {
77
73
  return openBlock(), createElementBlock("div", mergeProps({
78
74
  ref_key: "wrapper",
@@ -1 +1 @@
1
- {"version":3,"file":"RuiColorBoard.vue2.js","sources":["../../../src/components/color-picker/RuiColorBoard.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { clamp } from '@vueuse/shared';\nimport { Color, useElementDrag } from './utils';\n\ndefineOptions({\n name: 'RuiColorBoard',\n inheritAttrs: false,\n});\n\nconst props = defineProps<{\n color: Color;\n}>();\n\nconst emit = defineEmits<{\n (e: 'update:board', event: { saturation: number; brightness: number }): void;\n}>();\n\nfunction hueToHex(hue: number) {\n return new Color({ h: hue, s: 1, v: 1 }).hexString;\n}\n\nconst state = reactive({\n hexString: hueToHex(props.color.hue),\n saturation: props.color.saturation,\n brightness: props.color.brightness,\n});\n\nconst cursorTop = ref<number>(0);\nconst cursorLeft = ref<number>(0);\n\nconst cursorStyle = computed(() => ({\n top: `${get(cursorTop) * 100}%`,\n left: `${get(cursorLeft) * 100}%`,\n}));\n\nconst wrapper = ref<HTMLElement>();\n\nfunction updatePosition() {\n set(cursorLeft, state.saturation);\n set(cursorTop, (1 - state.brightness));\n}\n\nconst instance = getCurrentInstance();\n\nconst {\n handleClick,\n onMouseDown,\n} = useElementDrag(emitColor);\n\nfunction emitColor(x: number, y: number) {\n if (!instance)\n return;\n\n const el = instance.vnode.el;\n const rect = el?.getBoundingClientRect();\n\n if (!rect)\n return;\n\n const { width, height, left, top } = rect;\n let calculatedX = x - left;\n let calculatedY = y - top;\n\n calculatedX = clamp(calculatedX, 0, width);\n calculatedY = clamp(calculatedY, 0, height);\n\n const saturation = calculatedX / width;\n const brightness = clamp(-(calculatedY / height) + 1, 0, 1);\n\n set(cursorLeft, calculatedX / width);\n set(cursorTop, calculatedY / height);\n\n state.saturation = saturation;\n state.brightness = brightness;\n\n emit('update:board', { saturation, brightness });\n}\n\nonMounted(() => {\n updatePosition();\n});\n\nwhenever(\n () => props.color,\n (value) => {\n state.hexString = hueToHex(value.hue);\n state.saturation = value.saturation;\n state.brightness = value.brightness;\n updatePosition();\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n ref=\"wrapper\"\n role=\"slider\"\n aria-label=\"Color saturation and brightness\"\n :aria-valuetext=\"`Saturation ${Math.round(state.saturation * 100)}%, Brightness ${Math.round(state.brightness * 100)}%`\"\n class=\"rui-color-board\"\n :class=\"$style.saturation\"\n v-bind=\"$attrs\"\n :style=\"{ backgroundColor: state.hexString }\"\n @click=\"handleClick($event)\"\n @mousedown=\"onMouseDown($event)\"\n >\n <div :class=\"$style.saturation__white\" />\n <div :class=\"$style.saturation__black\" />\n <div\n :class=\"$style.cursor\"\n :style=\"cursorStyle\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.saturation {\n @apply relative w-full h-40 overflow-hidden cursor-pointer;\n\n &__white,\n &__black {\n @apply absolute top-0 left-0 right-0 bottom-0 to-transparent;\n }\n\n &__black {\n @apply bg-gradient-to-t from-black;\n }\n\n &__white {\n @apply bg-gradient-to-r from-white;\n }\n}\n\n.cursor {\n @apply absolute w-5 h-5 transform -translate-x-1/2 -translate-y-1/2 border-2 border-white shadow rounded-full;\n\n &:after {\n content: '';\n @apply absolute w-full h-full rounded-full border-2 border-black/15;\n }\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","_unref","$style","$attrs","_createElementVNode","_normalizeClass"],"mappings":"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"}
1
+ {"version":3,"file":"RuiColorBoard.vue2.js","sources":["../../../src/components/color-picker/RuiColorBoard.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { clamp } from '@vueuse/shared';\nimport { Color, useElementDrag } from './utils';\n\ndefineOptions({\n name: 'RuiColorBoard',\n inheritAttrs: false,\n});\n\nconst { color } = defineProps<{\n color: Color;\n}>();\n\nconst emit = defineEmits<{\n 'update:board': [event: { saturation: number; brightness: number }];\n}>();\n\nconst wrapper = useTemplateRef<HTMLElement>('wrapper');\n\nconst state = reactive({\n hexString: hueToHex(color.hue),\n saturation: color.saturation,\n brightness: color.brightness,\n});\n\nconst cursorTop = ref<number>(0);\nconst cursorLeft = ref<number>(0);\n\nconst instance = getCurrentInstance();\n\nconst { handleClick, onMouseDown } = useElementDrag(emitColor);\n\nconst cursorStyle = computed<{ top: string; left: string }>(() => ({\n top: `${get(cursorTop) * 100}%`,\n left: `${get(cursorLeft) * 100}%`,\n}));\n\nfunction hueToHex(hue: number): string {\n return new Color({ h: hue, s: 1, v: 1 }).hexString;\n}\n\nfunction updatePosition(): void {\n set(cursorLeft, state.saturation);\n set(cursorTop, 1 - state.brightness);\n}\n\nfunction emitColor(x: number, y: number): void {\n if (!instance)\n return;\n\n const el = instance.vnode.el;\n const rect = el?.getBoundingClientRect();\n\n if (!rect)\n return;\n\n const { width, height, left, top } = rect;\n let calculatedX = x - left;\n let calculatedY = y - top;\n\n calculatedX = clamp(calculatedX, 0, width);\n calculatedY = clamp(calculatedY, 0, height);\n\n const saturation = calculatedX / width;\n const brightness = clamp(-(calculatedY / height) + 1, 0, 1);\n\n set(cursorLeft, calculatedX / width);\n set(cursorTop, calculatedY / height);\n\n state.saturation = saturation;\n state.brightness = brightness;\n\n emit('update:board', { saturation, brightness });\n}\n\nwhenever(\n () => color,\n (value) => {\n state.hexString = hueToHex(value.hue);\n state.saturation = value.saturation;\n state.brightness = value.brightness;\n updatePosition();\n },\n { deep: true },\n);\n\nonMounted(() => {\n updatePosition();\n});\n</script>\n\n<template>\n <div\n ref=\"wrapper\"\n role=\"slider\"\n aria-label=\"Color saturation and brightness\"\n :aria-valuetext=\"`Saturation ${Math.round(state.saturation * 100)}%, Brightness ${Math.round(state.brightness * 100)}%`\"\n class=\"rui-color-board\"\n :class=\"$style.saturation\"\n v-bind=\"$attrs\"\n :style=\"{ backgroundColor: state.hexString }\"\n @click=\"handleClick($event)\"\n @mousedown=\"onMouseDown($event)\"\n >\n <div :class=\"$style.saturation__white\" />\n <div :class=\"$style.saturation__black\" />\n <div\n :class=\"$style.cursor\"\n :style=\"cursorStyle\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.saturation {\n @apply relative w-full h-40 overflow-hidden cursor-pointer;\n\n &__white,\n &__black {\n @apply absolute top-0 left-0 right-0 bottom-0 to-transparent;\n }\n\n &__black {\n @apply bg-gradient-to-t from-black;\n }\n\n &__white {\n @apply bg-gradient-to-r from-white;\n }\n}\n\n.cursor {\n @apply absolute w-5 h-5 transform -translate-x-1/2 -translate-y-1/2 border-2 border-white shadow rounded-full;\n\n &:after {\n content: '';\n @apply absolute w-full h-full rounded-full border-2 border-black/15;\n }\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","_unref","$style","$attrs","_createElementVNode","_normalizeClass"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, toRefs, openBlock, createBlock, mergeProps, withCtx, createElementVNode, normalizeClass, unref, createElementBlock, createCommentVNode, normalizeStyle } from "vue";
1
+ import { defineComponent, toRef, openBlock, createBlock, mergeProps, withCtx, createElementVNode, normalizeClass, unref, createElementBlock, createCommentVNode, normalizeStyle } from "vue";
2
2
  import RuiTooltip from "../overlays/tooltip/RuiTooltip.vue.js";
3
3
  import { useClipboard } from "@vueuse/core";
4
4
  const _hoisted_1 = {
@@ -15,9 +15,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15
15
  color: {}
16
16
  },
17
17
  setup(__props) {
18
- const props = __props;
19
- const { color } = toRefs(props);
20
- const { copy, copied } = useClipboard({ source: color });
18
+ const { copy, copied } = useClipboard({ source: toRef(() => __props.color) });
21
19
  return (_ctx, _cache) => {
22
20
  return openBlock(), createBlock(RuiTooltip, mergeProps({
23
21
  popper: { placement: "top" },
@@ -28,7 +26,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
28
26
  createElementVNode("div", {
29
27
  class: "w-8 h-8 min-w-8 min-h-8 rounded-full cursor-pointer",
30
28
  "data-cy": "color-display",
31
- style: normalizeStyle({ background: unref(color) }),
29
+ style: normalizeStyle({ background: __props.color }),
32
30
  onClick: _cache[0] || (_cache[0] = ($event) => unref(copy)())
33
31
  }, null, 4)
34
32
  ]),
@@ -1 +1 @@
1
- {"version":3,"file":"RuiColorDisplay.vue.js","sources":["../../../src/components/color-picker/RuiColorDisplay.vue"],"sourcesContent":["<script setup lang='ts'>\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\n\ndefineOptions({\n name: 'RuiColorDisplay',\n inheritAttrs: false,\n});\n\nconst props = defineProps<{\n color: string;\n}>();\n\nconst { color } = toRefs(props);\n\nconst { copy, copied } = useClipboard({ source: color });\n</script>\n\n<template>\n <RuiTooltip\n :popper=\"{ placement: 'top' }\"\n :close-delay=\"400\"\n tooltip-class=\"text-center\"\n v-bind=\"$attrs\"\n >\n <template #activator>\n <div\n class=\"w-8 h-8 min-w-8 min-h-8 rounded-full cursor-pointer\"\n data-cy=\"color-display\"\n :style=\"{ background: color }\"\n @click=\"copy()\"\n />\n </template>\n <div :class=\"{ 'h-0 overflow-hidden': copied }\">\n Click to copy\n </div>\n <div\n v-if=\"copied\"\n class=\"text-rui-success\"\n >\n COPIED!\n </div>\n </RuiTooltip>\n</template>\n"],"names":["_openBlock","_createBlock","_mergeProps","$attrs","_createElementVNode","_unref","_createElementBlock"],"mappings":";;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAId,UAAM,EAAE,MAAA,IAAU,OAAO,KAAK;AAE9B,UAAM,EAAE,MAAM,OAAA,IAAW,aAAa,EAAE,QAAQ,OAAO;;AAIrD,aAAAA,UAAA,GAAAC,YAuBa,YAvBbC,WAuBa;AAAA,QAtBV,QAAQ,EAAA,WAAA,MAAA;AAAA,QACR,eAAa;AAAA,QACd,iBAAc;AAAA,MAAA,GACNC,KAAAA,MAAM,GAAA;AAAA,QAEH,mBACT,MAKE;AAAA,UALFC,mBAKE,OAAA;AAAA,YAJA,OAAM;AAAA,YACN,WAAQ;AAAA,YACP,oCAAqBC,MAAA,KAAA,GAAK;AAAA,YAC1B,+CAAOA,MAAA,IAAA,EAAA;AAAA,UAAI;;yBAGhB,MAEM;AAAA,UAFND,mBAEM,OAAA;AAAA,YAFA,+CAAgCC,MAAA,MAAA,GAAM;AAAA,UAAA,GAAI,mBAEhD,CAAA;AAAA,UAEQA,MAAA,MAAA,kBADRC,mBAKM,OALN,YAGC,WAED;;;;;;;"}
1
+ {"version":3,"file":"RuiColorDisplay.vue.js","sources":["../../../src/components/color-picker/RuiColorDisplay.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport RuiTooltip from '@/components/overlays/tooltip/RuiTooltip.vue';\n\ndefineOptions({\n name: 'RuiColorDisplay',\n inheritAttrs: false,\n});\n\nconst { color } = defineProps<{\n color: string;\n}>();\n\nconst { copy, copied } = useClipboard({ source: toRef(() => color) });\n</script>\n\n<template>\n <RuiTooltip\n :popper=\"{ placement: 'top' }\"\n :close-delay=\"400\"\n tooltip-class=\"text-center\"\n v-bind=\"$attrs\"\n >\n <template #activator>\n <div\n class=\"w-8 h-8 min-w-8 min-h-8 rounded-full cursor-pointer\"\n data-cy=\"color-display\"\n :style=\"{ background: color }\"\n @click=\"copy()\"\n />\n </template>\n <div :class=\"{ 'h-0 overflow-hidden': copied }\">\n Click to copy\n </div>\n <div\n v-if=\"copied\"\n class=\"text-rui-success\"\n >\n COPIED!\n </div>\n </RuiTooltip>\n</template>\n"],"names":["_openBlock","_createBlock","_mergeProps","$attrs","_createElementVNode","_unref","_createElementBlock"],"mappings":";;;;;;;;;;;;;;;;;AAYA,UAAM,EAAE,MAAM,OAAA,IAAW,aAAa,EAAE,QAAQ,MAAM,MAAM,QAAA,KAAK,GAAG;;AAIlE,aAAAA,UAAA,GAAAC,YAuBa,YAvBbC,WAuBa;AAAA,QAtBV,QAAQ,EAAA,WAAA,MAAA;AAAA,QACR,eAAa;AAAA,QACd,iBAAc;AAAA,MAAA,GACNC,KAAAA,MAAM,GAAA;AAAA,QAEH,mBACT,MAKE;AAAA,UALFC,mBAKE,OAAA;AAAA,YAJA,OAAM;AAAA,YACN,WAAQ;AAAA,YACP,oCAAqB,QAAA,OAAK;AAAA,YAC1B,+CAAOC,MAAA,IAAA,EAAA;AAAA,UAAI;;yBAGhB,MAEM;AAAA,UAFND,mBAEM,OAAA;AAAA,YAFA,+CAAgCC,MAAA,MAAA,GAAM;AAAA,UAAA,GAAI,mBAEhD,CAAA;AAAA,UAEQA,MAAA,MAAA,kBADRC,mBAKM,OALN,YAGC,WAED;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, useModel, ref, computed, getCurrentInstance, onMounted, watch, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeStyle, normalizeClass } from "vue";
1
+ import { defineComponent, useModel, useTemplateRef, ref, getCurrentInstance, computed, watch, onMounted, openBlock, createElementBlock, mergeProps, unref, createElementVNode, normalizeStyle, normalizeClass } from "vue";
2
2
  import { get, set, clamp } from "@vueuse/shared";
3
3
  import { useElementDrag, roundTwoDecimal } from "./utils.js";
4
4
  const _hoisted_1 = ["aria-valuenow"];
@@ -16,21 +16,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16
16
  emits: ["update:modelValue"],
17
17
  setup(__props) {
18
18
  const modelValue = useModel(__props, "modelValue");
19
- const barElement = ref();
19
+ const barElement = useTemplateRef("barElement");
20
+ const cursorLeft = ref("");
21
+ const instance = getCurrentInstance();
22
+ const { handleClick, onMouseDown } = useElementDrag(emitHue);
23
+ const cursorStyle = computed(() => ({
24
+ left: get(cursorLeft)
25
+ }));
20
26
  function getLimit(width) {
21
27
  const lowerLimit = cursorWidth / 2;
22
28
  const upperLimit = width - lowerLimit;
23
29
  const availableWidth = upperLimit - lowerLimit;
24
30
  return { lowerLimit, upperLimit, availableWidth };
25
31
  }
26
- const cursorLeft = ref("");
27
32
  function updatePosition() {
28
33
  set(cursorLeft, getCursorLeft().toString());
29
34
  }
30
- const cursorStyle = computed(() => ({
31
- left: get(cursorLeft)
32
- }));
33
- const instance = getCurrentInstance();
34
35
  function getCursorLeft() {
35
36
  if (!instance)
36
37
  return 0;
@@ -57,14 +58,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
57
58
  calculatedX = clamp(calculatedX, lowerLimit, upperLimit);
58
59
  set(modelValue, Math.round((calculatedX - lowerLimit) / availableWidth * 360));
59
60
  }
60
- const {
61
- handleClick,
62
- onMouseDown
63
- } = useElementDrag(emitHue);
64
- onMounted(() => {
61
+ watch(modelValue, () => {
65
62
  updatePosition();
66
63
  });
67
- watch(modelValue, () => {
64
+ onMounted(() => {
68
65
  updatePosition();
69
66
  });
70
67
  return (_ctx, _cache) => {
@@ -1 +1 @@
1
- {"version":3,"file":"RuiColorHue.vue2.js","sources":["../../../src/components/color-picker/RuiColorHue.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { clamp } from '@vueuse/shared';\nimport { roundTwoDecimal, useElementDrag } from './utils';\n\ndefineOptions({\n name: 'RuiColorHue',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<number>({ required: true });\n\nconst barElement = ref<HTMLElement>();\n\nconst cursorWidth = 16;\n\nfunction getLimit(width: number) {\n const lowerLimit = cursorWidth / 2;\n const upperLimit = width - lowerLimit;\n const availableWidth = upperLimit - lowerLimit;\n\n return { lowerLimit, upperLimit, availableWidth };\n}\n\nconst cursorLeft = ref<string>('');\n\nfunction updatePosition() {\n set(cursorLeft, getCursorLeft().toString());\n}\n\nconst cursorStyle = computed(() => ({\n left: get(cursorLeft),\n}));\n\nconst instance = getCurrentInstance();\n\nfunction getCursorLeft() {\n if (!instance)\n return 0;\n\n const el = instance.vnode.el;\n const rect = el?.getBoundingClientRect();\n\n if (!rect)\n return 0;\n\n const actualWidth = rect.width;\n const { lowerLimit, availableWidth } = getLimit(actualWidth);\n\n const hueVal = get(modelValue);\n const usedHue = hueVal === 360 ? 360 : hueVal % 360;\n\n const percentage = roundTwoDecimal((usedHue / 360) * (availableWidth / actualWidth) * 100);\n return `calc(${percentage}% + ${lowerLimit}px)`;\n}\n\nfunction emitHue(x: number) {\n if (!instance)\n return;\n\n const el = instance.vnode.el;\n const rect = el?.getBoundingClientRect();\n\n if (!rect)\n return;\n\n let calculatedX = x - rect.left;\n\n const { lowerLimit, upperLimit, availableWidth } = getLimit(rect.width);\n calculatedX = clamp(calculatedX, lowerLimit, upperLimit);\n\n set(modelValue, Math.round(((calculatedX - lowerLimit) / availableWidth) * 360));\n}\n\nconst {\n handleClick,\n onMouseDown,\n} = useElementDrag(emitHue);\n\nonMounted(() => {\n updatePosition();\n});\n\nwatch(modelValue, () => {\n updatePosition();\n});\n</script>\n\n<template>\n <div\n ref=\"barElement\"\n role=\"slider\"\n aria-label=\"Hue\"\n :aria-valuenow=\"modelValue\"\n aria-valuemin=\"0\"\n aria-valuemax=\"360\"\n :class=\"$style.bar\"\n class=\"rui-color-hue\"\n v-bind=\"$attrs\"\n @click=\"handleClick($event)\"\n @mousedown=\"onMouseDown($event)\"\n >\n <div\n :class=\"$style.cursor\"\n :style=\"cursorStyle\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.bar {\n @apply relative w-full h-3.5 rounded-full cursor-pointer;\n\n background: linear-gradient(\n to right,\n rgb(255, 0, 0) 0%,\n rgb(255, 255, 0) 16.66%,\n rgb(0, 255, 0) 33.33%,\n rgb(0, 255, 255) 50%,\n rgb(0, 0, 255) 66.66%,\n rgb(255, 0, 255) 83.33%,\n rgb(255, 0, 0) 100%\n );\n}\n\n.cursor {\n @apply absolute w-4 h-4 transform top-1/2 -translate-x-1/2 -translate-y-1/2 shadow-2 bg-white rounded-full;\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_mergeProps","$style","$attrs","_unref","_createElementVNode","_normalizeClass"],"mappings":";;;;AAaA,MAAM,cAAc;;;;;;;;;;;;;AAJpB,UAAM,aAAaA,SAAmB,SAAA,YAAmB;AAEzD,UAAM,aAAa,IAAA;AAInB,aAAS,SAAS,OAAe;AAC/B,YAAM,aAAa,cAAc;AACjC,YAAM,aAAa,QAAQ;AAC3B,YAAM,iBAAiB,aAAa;AAEpC,aAAO,EAAE,YAAY,YAAY,eAAA;AAAA,IACnC;AAEA,UAAM,aAAa,IAAY,EAAE;AAEjC,aAAS,iBAAiB;AACxB,UAAI,YAAY,cAAA,EAAgB,SAAA,CAAU;AAAA,IAC5C;AAEA,UAAM,cAAc,SAAS,OAAO;AAAA,MAClC,MAAM,IAAI,UAAU;AAAA,IAAA,EACpB;AAEF,UAAM,WAAW,mBAAA;AAEjB,aAAS,gBAAgB;AACvB,UAAI,CAAC;AACH,eAAO;AAET,YAAM,KAAK,SAAS,MAAM;AAC1B,YAAM,OAAO,IAAI,sBAAA;AAEjB,UAAI,CAAC;AACH,eAAO;AAET,YAAM,cAAc,KAAK;AACzB,YAAM,EAAE,YAAY,mBAAmB,SAAS,WAAW;AAE3D,YAAM,SAAS,IAAI,UAAU;AAC7B,YAAM,UAAU,WAAW,MAAM,MAAM,SAAS;AAEhD,YAAM,aAAa,gBAAiB,UAAU,OAAQ,iBAAiB,eAAe,GAAG;AACzF,aAAO,QAAQ,UAAU,OAAO,UAAU;AAAA,IAC5C;AAEA,aAAS,QAAQ,GAAW;AAC1B,UAAI,CAAC;AACH;AAEF,YAAM,KAAK,SAAS,MAAM;AAC1B,YAAM,OAAO,IAAI,sBAAA;AAEjB,UAAI,CAAC;AACH;AAEF,UAAI,cAAc,IAAI,KAAK;AAE3B,YAAM,EAAE,YAAY,YAAY,mBAAmB,SAAS,KAAK,KAAK;AACtE,oBAAc,MAAM,aAAa,YAAY,UAAU;AAEvD,UAAI,YAAY,KAAK,OAAQ,cAAc,cAAc,iBAAkB,GAAG,CAAC;AAAA,IACjF;AAEA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IAAA,IACE,eAAe,OAAO;AAE1B,cAAU,MAAM;AACd,qBAAA;AAAA,IACF,CAAC;AAED,UAAM,YAAY,MAAM;AACtB,qBAAA;AAAA,IACF,CAAC;;AAIC,aAAAC,UAAA,GAAAC,mBAiBM,OAjBNC,WAiBM;AAAA,iBAhBA;AAAA,QAAJ,KAAI;AAAA,QACJ,MAAK;AAAA,QACL,cAAW;AAAA,QACV,iBAAe,WAAA;AAAA,QAChB,iBAAc;AAAA,QACd,iBAAc;AAAA,QACb,OAAK,CAAEC,KAAAA,OAAO,KACT,eAAe;AAAA,MAAA,GACbC,KAAAA,QAAM;AAAA,QACb,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAEC,MAAA,WAAA,EAAY,MAAM;AAAA,QACzB,aAAS,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAEA,MAAA,WAAA,EAAY,MAAM;AAAA,MAAA;QAE9BC,mBAGE,OAAA;AAAA,UAFC,OAAKC,eAAEJ,KAAAA,OAAO,MAAM;AAAA,UACpB,sBAAOE,MAAA,WAAA,CAAW;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"RuiColorHue.vue2.js","sources":["../../../src/components/color-picker/RuiColorHue.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { clamp } from '@vueuse/shared';\nimport { roundTwoDecimal, useElementDrag } from './utils';\n\ndefineOptions({\n name: 'RuiColorHue',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<number>({ required: true });\n\nconst barElement = useTemplateRef<HTMLElement>('barElement');\n\nconst cursorWidth = 16;\nconst cursorLeft = ref<string>('');\n\nconst instance = getCurrentInstance();\n\nconst { handleClick, onMouseDown } = useElementDrag(emitHue);\n\nconst cursorStyle = computed<{ left: string }>(() => ({\n left: get(cursorLeft),\n}));\n\nfunction getLimit(width: number): {\n lowerLimit: number;\n upperLimit: number;\n availableWidth: number;\n} {\n const lowerLimit = cursorWidth / 2;\n const upperLimit = width - lowerLimit;\n const availableWidth = upperLimit - lowerLimit;\n\n return { lowerLimit, upperLimit, availableWidth };\n}\n\nfunction updatePosition(): void {\n set(cursorLeft, getCursorLeft().toString());\n}\n\nfunction getCursorLeft(): number | string {\n if (!instance)\n return 0;\n\n const el = instance.vnode.el;\n const rect = el?.getBoundingClientRect();\n\n if (!rect)\n return 0;\n\n const actualWidth = rect.width;\n const { lowerLimit, availableWidth } = getLimit(actualWidth);\n\n const hueVal = get(modelValue);\n const usedHue = hueVal === 360 ? 360 : hueVal % 360;\n\n const percentage = roundTwoDecimal((usedHue / 360) * (availableWidth / actualWidth) * 100);\n return `calc(${percentage}% + ${lowerLimit}px)`;\n}\n\nfunction emitHue(x: number): void {\n if (!instance)\n return;\n\n const el = instance.vnode.el;\n const rect = el?.getBoundingClientRect();\n\n if (!rect)\n return;\n\n let calculatedX = x - rect.left;\n\n const { lowerLimit, upperLimit, availableWidth } = getLimit(rect.width);\n calculatedX = clamp(calculatedX, lowerLimit, upperLimit);\n\n set(modelValue, Math.round(((calculatedX - lowerLimit) / availableWidth) * 360));\n}\n\nwatch(modelValue, () => {\n updatePosition();\n});\n\nonMounted(() => {\n updatePosition();\n});\n</script>\n\n<template>\n <div\n ref=\"barElement\"\n role=\"slider\"\n aria-label=\"Hue\"\n :aria-valuenow=\"modelValue\"\n aria-valuemin=\"0\"\n aria-valuemax=\"360\"\n :class=\"$style.bar\"\n class=\"rui-color-hue\"\n v-bind=\"$attrs\"\n @click=\"handleClick($event)\"\n @mousedown=\"onMouseDown($event)\"\n >\n <div\n :class=\"$style.cursor\"\n :style=\"cursorStyle\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.bar {\n @apply relative w-full h-3.5 rounded-full cursor-pointer;\n\n background: linear-gradient(\n to right,\n rgb(255, 0, 0) 0%,\n rgb(255, 255, 0) 16.66%,\n rgb(0, 255, 0) 33.33%,\n rgb(0, 255, 255) 50%,\n rgb(0, 0, 255) 66.66%,\n rgb(255, 0, 255) 83.33%,\n rgb(255, 0, 0) 100%\n );\n}\n\n.cursor {\n @apply absolute w-4 h-4 transform top-1/2 -translate-x-1/2 -translate-y-1/2 shadow-2 bg-white rounded-full;\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_mergeProps","$style","$attrs","_unref","_createElementVNode","_normalizeClass"],"mappings":";;;;AAaA,MAAM,cAAc;;;;;;;;;;;;;AAJpB,UAAM,aAAaA,SAAmB,SAAA,YAAmB;AAEzD,UAAM,aAAa,eAA4B,YAAY;AAG3D,UAAM,aAAa,IAAY,EAAE;AAEjC,UAAM,WAAW,mBAAA;AAEjB,UAAM,EAAE,aAAa,gBAAgB,eAAe,OAAO;AAE3D,UAAM,cAAc,SAA2B,OAAO;AAAA,MACpD,MAAM,IAAI,UAAU;AAAA,IAAA,EACpB;AAEF,aAAS,SAAS,OAIhB;AACA,YAAM,aAAa,cAAc;AACjC,YAAM,aAAa,QAAQ;AAC3B,YAAM,iBAAiB,aAAa;AAEpC,aAAO,EAAE,YAAY,YAAY,eAAA;AAAA,IACnC;AAEA,aAAS,iBAAuB;AAC9B,UAAI,YAAY,cAAA,EAAgB,SAAA,CAAU;AAAA,IAC5C;AAEA,aAAS,gBAAiC;AACxC,UAAI,CAAC;AACH,eAAO;AAET,YAAM,KAAK,SAAS,MAAM;AAC1B,YAAM,OAAO,IAAI,sBAAA;AAEjB,UAAI,CAAC;AACH,eAAO;AAET,YAAM,cAAc,KAAK;AACzB,YAAM,EAAE,YAAY,mBAAmB,SAAS,WAAW;AAE3D,YAAM,SAAS,IAAI,UAAU;AAC7B,YAAM,UAAU,WAAW,MAAM,MAAM,SAAS;AAEhD,YAAM,aAAa,gBAAiB,UAAU,OAAQ,iBAAiB,eAAe,GAAG;AACzF,aAAO,QAAQ,UAAU,OAAO,UAAU;AAAA,IAC5C;AAEA,aAAS,QAAQ,GAAiB;AAChC,UAAI,CAAC;AACH;AAEF,YAAM,KAAK,SAAS,MAAM;AAC1B,YAAM,OAAO,IAAI,sBAAA;AAEjB,UAAI,CAAC;AACH;AAEF,UAAI,cAAc,IAAI,KAAK;AAE3B,YAAM,EAAE,YAAY,YAAY,mBAAmB,SAAS,KAAK,KAAK;AACtE,oBAAc,MAAM,aAAa,YAAY,UAAU;AAEvD,UAAI,YAAY,KAAK,OAAQ,cAAc,cAAc,iBAAkB,GAAG,CAAC;AAAA,IACjF;AAEA,UAAM,YAAY,MAAM;AACtB,qBAAA;AAAA,IACF,CAAC;AAED,cAAU,MAAM;AACd,qBAAA;AAAA,IACF,CAAC;;AAIC,aAAAC,UAAA,GAAAC,mBAiBM,OAjBNC,WAiBM;AAAA,iBAhBA;AAAA,QAAJ,KAAI;AAAA,QACJ,MAAK;AAAA,QACL,cAAW;AAAA,QACV,iBAAe,WAAA;AAAA,QAChB,iBAAc;AAAA,QACd,iBAAc;AAAA,QACb,OAAK,CAAEC,KAAAA,OAAO,KACT,eAAe;AAAA,MAAA,GACbC,KAAAA,QAAM;AAAA,QACb,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAEC,MAAA,WAAA,EAAY,MAAM;AAAA,QACzB,aAAS,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAEA,MAAA,WAAA,EAAY,MAAM;AAAA,MAAA;QAE9BC,mBAGE,OAAA;AAAA,UAFC,OAAKC,eAAEJ,KAAAA,OAAO,MAAM;AAAA,UACpB,sBAAOE,MAAA,WAAA,CAAW;AAAA,QAAA;;;;;"}
@@ -31,19 +31,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
31
31
  hex: get(modelValue).hex,
32
32
  rgb: get(modelValue).rgb
33
33
  });
34
- function onInputTypeChange() {
35
- set(inputType, get(inputType) === "rgb" ? "hex" : "rgb");
36
- }
37
34
  const onBlurChange = useDebounceFn((inputType2, event, key) => {
38
35
  if (!state.color)
39
36
  return;
40
- const value = event.target.value;
37
+ const target = event.target;
38
+ if (!(target instanceof HTMLInputElement))
39
+ return;
40
+ const value = target.value;
41
41
  if (inputType2 === "hex") {
42
42
  const _hex = value.replace("#", "");
43
43
  if (tinycolor(_hex).isValid() && [3, 4, 6].includes(_hex.length))
44
44
  state.color.hex = _hex;
45
- else
46
- state.color.hex = "000000";
45
+ else state.color.hex = "000000";
47
46
  } else if (key !== void 0 && state.rgb && state.color) {
48
47
  let valueInNumber = Number(value);
49
48
  valueInNumber = clamp(valueInNumber, 0, 255);
@@ -68,6 +67,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
68
67
  }
69
68
  set(modelValue, state.color);
70
69
  }, 300);
70
+ function onInputTypeChange() {
71
+ set(inputType, get(inputType) === "rgb" ? "hex" : "rgb");
72
+ }
71
73
  whenever(
72
74
  modelValue,
73
75
  (value) => {
@@ -1 +1 @@
1
- {"version":3,"file":"RuiColorInput.vue.js","sources":["../../../src/components/color-picker/RuiColorInput.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Color } from './utils';\nimport { clamp } from '@vueuse/shared';\nimport tinycolor from 'tinycolor2';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiTextField from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\ndefineOptions({\n name: 'RuiColorInput',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<Color>({ required: true });\n\nconst inputType = ref<'hex' | 'rgb'>('hex');\nconst state = reactive({\n color: get(modelValue),\n hex: get(modelValue).hex,\n rgb: get(modelValue).rgb,\n});\n\nfunction onInputTypeChange() {\n set(inputType, get(inputType) === 'rgb' ? 'hex' : 'rgb');\n}\n\nconst onBlurChange = useDebounceFn((inputType: string, event: any, key?: number) => {\n if (!state.color)\n return;\n\n const value = event.target.value;\n if (inputType === 'hex') {\n const _hex = value.replace('#', '');\n if (tinycolor(_hex).isValid() && [3, 4, 6].includes(_hex.length))\n state.color.hex = _hex;\n\n else\n state.color.hex = '000000';\n }\n else if (key !== undefined && state.rgb && state.color) {\n let valueInNumber = Number(value);\n valueInNumber = clamp(valueInNumber, 0, 255);\n\n state.rgb[key] = valueInNumber;\n const [r, g, b] = state.rgb;\n state.color.hex = tinycolor({ r, g, b }).toHex();\n }\n}, 100);\n\nconst onInputChange = useDebounceFn((inputType: string, value: string, key?: number) => {\n if (!value)\n return;\n\n if (inputType === 'hex') {\n const _hex = value.replace('#', '');\n if (tinycolor(_hex).isValid() && state.color && _hex.length === 6)\n state.color.hex = _hex;\n }\n else if (key !== undefined && state.rgb && state.color) {\n let valueInNumber = Number(value);\n valueInNumber = clamp(valueInNumber, 0, 255);\n\n state.rgb[key] = valueInNumber;\n const [r, g, b] = state.rgb;\n state.color.hex = tinycolor({ r, g, b }).toHex();\n }\n\n set(modelValue, state.color);\n}, 300);\n\nwhenever(\n modelValue,\n (value) => {\n state.color = value;\n state.hex = state.color.hex;\n state.rgb = state.color.rgb;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n class=\"rui-color-input flex justify-center gap-2\"\n v-bind=\"$attrs\"\n >\n <div class=\"flex flex-col items-center gap-1 w-[16rem]\">\n <div class=\"w-full\">\n <RuiTextField\n v-if=\"inputType === 'hex'\"\n v-model=\"state.hex\"\n variant=\"outlined\"\n class=\"flex-1 w-full [&_input]:uppercase\"\n maxlength=\"6\"\n color=\"primary\"\n dense\n hide-details\n @update:model-value=\"onInputChange(inputType, $event)\"\n @blur=\"onBlurChange(inputType, $event)\"\n >\n <template #prepend>\n <span class=\"text-rui-text\">\n #\n </span>\n </template>\n </RuiTextField>\n <div\n v-else\n class=\"flex flex-1 gap-1\"\n >\n <RuiTextField\n v-for=\"(v, i) in state.rgb\"\n :key=\"i\"\n :model-value=\"v.toString()\"\n variant=\"outlined\"\n class=\"[&_input]:text-center w-full\"\n maxlength=\"3\"\n color=\"primary\"\n dense\n hide-details\n @update:model-value=\"onInputChange(inputType, $event, i)\"\n @blur=\"onBlurChange(inputType, $event, i)\"\n />\n </div>\n </div>\n\n <div class=\"uppercase text-rui-text-secondary text-sm\">\n {{ inputType }}\n </div>\n </div>\n <RuiButton\n class=\"h-10\"\n variant=\"text\"\n @click=\"onInputTypeChange()\"\n >\n <RuiIcon name=\"lu-chevrons-up-down\" />\n </RuiButton>\n </div>\n</template>\n"],"names":["_useModel","inputType","_openBlock","_createElementBlock","_mergeProps","$attrs","_createElementVNode","_unref","_createBlock","_Fragment","_toDisplayString","_createVNode"],"mappings":"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"}
1
+ {"version":3,"file":"RuiColorInput.vue.js","sources":["../../../src/components/color-picker/RuiColorInput.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Color } from './utils';\nimport { clamp } from '@vueuse/shared';\nimport tinycolor from 'tinycolor2';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiTextField from '@/components/forms/text-field/RuiTextField.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\ndefineOptions({\n name: 'RuiColorInput',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<Color>({ required: true });\n\nconst inputType = ref<'hex' | 'rgb'>('hex');\nconst state = reactive({\n color: get(modelValue),\n hex: get(modelValue).hex,\n rgb: get(modelValue).rgb,\n});\n\nconst onBlurChange = useDebounceFn((inputType: string, event: Event, key?: number) => {\n if (!state.color)\n return;\n\n const target = event.target;\n if (!(target instanceof HTMLInputElement))\n return;\n\n const value = target.value;\n if (inputType === 'hex') {\n const _hex = value.replace('#', '');\n if (tinycolor(_hex).isValid() && [3, 4, 6].includes(_hex.length))\n state.color.hex = _hex;\n else state.color.hex = '000000';\n }\n else if (key !== undefined && state.rgb && state.color) {\n let valueInNumber = Number(value);\n valueInNumber = clamp(valueInNumber, 0, 255);\n\n state.rgb[key] = valueInNumber;\n const [r, g, b] = state.rgb;\n state.color.hex = tinycolor({ r, g, b }).toHex();\n }\n}, 100);\n\nconst onInputChange = useDebounceFn((inputType: string, value: string, key?: number) => {\n if (!value)\n return;\n\n if (inputType === 'hex') {\n const _hex = value.replace('#', '');\n if (tinycolor(_hex).isValid() && state.color && _hex.length === 6)\n state.color.hex = _hex;\n }\n else if (key !== undefined && state.rgb && state.color) {\n let valueInNumber = Number(value);\n valueInNumber = clamp(valueInNumber, 0, 255);\n\n state.rgb[key] = valueInNumber;\n const [r, g, b] = state.rgb;\n state.color.hex = tinycolor({ r, g, b }).toHex();\n }\n\n set(modelValue, state.color);\n}, 300);\n\nfunction onInputTypeChange(): void {\n set(inputType, get(inputType) === 'rgb' ? 'hex' : 'rgb');\n}\n\nwhenever(\n modelValue,\n (value) => {\n state.color = value;\n state.hex = state.color.hex;\n state.rgb = state.color.rgb;\n },\n { deep: true },\n);\n</script>\n\n<template>\n <div\n class=\"rui-color-input flex justify-center gap-2\"\n v-bind=\"$attrs\"\n >\n <div class=\"flex flex-col items-center gap-1 w-[16rem]\">\n <div class=\"w-full\">\n <RuiTextField\n v-if=\"inputType === 'hex'\"\n v-model=\"state.hex\"\n variant=\"outlined\"\n class=\"flex-1 w-full [&_input]:uppercase\"\n maxlength=\"6\"\n color=\"primary\"\n dense\n hide-details\n @update:model-value=\"onInputChange(inputType, $event)\"\n @blur=\"onBlurChange(inputType, $event)\"\n >\n <template #prepend>\n <span class=\"text-rui-text\"> # </span>\n </template>\n </RuiTextField>\n <div\n v-else\n class=\"flex flex-1 gap-1\"\n >\n <RuiTextField\n v-for=\"(v, i) in state.rgb\"\n :key=\"i\"\n :model-value=\"v.toString()\"\n variant=\"outlined\"\n class=\"[&_input]:text-center w-full\"\n maxlength=\"3\"\n color=\"primary\"\n dense\n hide-details\n @update:model-value=\"onInputChange(inputType, $event, i)\"\n @blur=\"onBlurChange(inputType, $event, i)\"\n />\n </div>\n </div>\n\n <div class=\"uppercase text-rui-text-secondary text-sm\">\n {{ inputType }}\n </div>\n </div>\n <RuiButton\n class=\"h-10\"\n variant=\"text\"\n @click=\"onInputTypeChange()\"\n >\n <RuiIcon name=\"lu-chevrons-up-down\" />\n </RuiButton>\n </div>\n</template>\n"],"names":["_useModel","inputType","_openBlock","_createElementBlock","_mergeProps","$attrs","_createElementVNode","_unref","_createBlock","_Fragment","_toDisplayString","_createVNode"],"mappings":"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"}
@@ -1,12 +1,10 @@
1
- export interface Props {
1
+ type __VLS_ModelProps = {
2
2
  modelValue?: string;
3
- }
4
- declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
5
- "update:model-value": (value: string) => any;
6
- }, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
7
- "onUpdate:model-value"?: ((value: string) => any) | undefined;
8
- }>, {
9
- modelValue: string;
10
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
3
+ };
4
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
5
+ "update:modelValue": (value: string) => any;
6
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
7
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
8
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
9
  declare const _default: typeof __VLS_export;
12
10
  export default _default;
@@ -1,10 +1,10 @@
1
- import { defineComponent, toRefs, reactive, watch, openBlock, createElementBlock, mergeProps, createVNode, unref, createElementVNode } from "vue";
1
+ import { defineComponent, useModel, reactive, watch, openBlock, createElementBlock, mergeProps, createVNode, unref, createElementVNode } from "vue";
2
2
  import RuiColorBoard from "./RuiColorBoard.vue.js";
3
3
  import _sfc_main$1 from "./RuiColorDisplay.vue.js";
4
4
  import RuiColorHue from "./RuiColorHue.vue.js";
5
5
  import _sfc_main$2 from "./RuiColorInput.vue.js";
6
6
  import { Color } from "./utils.js";
7
- import { get } from "@vueuse/shared";
7
+ import { get, set } from "@vueuse/shared";
8
8
  import { whenever } from "@vueuse/core";
9
9
  const _hoisted_1 = { class: "flex flex-col gap-5 p-4" };
10
10
  const _hoisted_2 = { class: "flex items-center gap-4" };
@@ -15,17 +15,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15
15
  },
16
16
  __name: "RuiColorPicker",
17
17
  props: {
18
- modelValue: { default: "" }
18
+ "modelValue": { default: "" },
19
+ "modelModifiers": {}
19
20
  },
20
- emits: ["update:model-value"],
21
- setup(__props, { emit: __emit }) {
22
- const props = __props;
23
- const emit = __emit;
24
- const { modelValue } = toRefs(props);
21
+ emits: ["update:modelValue"],
22
+ setup(__props) {
23
+ const modelValue = useModel(__props, "modelValue");
25
24
  const state = reactive({
26
25
  color: new Color(get(modelValue))
27
26
  });
28
- function onBoardChange({ saturation, brightness }) {
27
+ function onBoardChange({
28
+ saturation,
29
+ brightness
30
+ }) {
29
31
  state.color.saturation = saturation;
30
32
  state.color.brightness = brightness;
31
33
  }
@@ -34,12 +36,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
34
36
  (value) => {
35
37
  if (state.color.hex !== value)
36
38
  state.color = new Color(value);
39
+ }
40
+ );
41
+ watch(
42
+ () => state.color.hex,
43
+ (hex) => {
44
+ set(modelValue, hex);
37
45
  },
38
- { deep: true }
46
+ { immediate: true }
39
47
  );
40
- watch(state, (state2) => {
41
- emit("update:model-value", state2.color.hex);
42
- }, { immediate: true, deep: true });
43
48
  return (_ctx, _cache) => {
44
49
  return openBlock(), createElementBlock("div", mergeProps({
45
50
  role: "application",
@@ -1 +1 @@
1
- {"version":3,"file":"RuiColorPicker.vue.js","sources":["../../../src/components/color-picker/RuiColorPicker.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n// Inspired by https://github.com/aesoper101/vue3-colorpicker/\nimport RuiColorBoard from '@/components/color-picker/RuiColorBoard.vue';\nimport RuiColorDisplay from '@/components/color-picker/RuiColorDisplay.vue';\nimport RuiColorHue from '@/components/color-picker/RuiColorHue.vue';\nimport RuiColorInput from '@/components/color-picker/RuiColorInput.vue';\nimport { Color } from './utils';\n\nexport interface Props {\n modelValue?: string;\n}\n\ndefineOptions({\n name: 'RuiColorPicker',\n inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), { modelValue: '' });\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value: string): void;\n}>();\n\nconst { modelValue } = toRefs(props);\n\nconst state = reactive({\n color: new Color(get(modelValue)),\n});\n\nfunction onBoardChange({ saturation, brightness }: { saturation: number; brightness: number }) {\n state.color.saturation = saturation;\n state.color.brightness = brightness;\n}\n\nwhenever(\n modelValue,\n (value: string) => {\n if (state.color.hex !== value)\n state.color = new Color(value);\n },\n { deep: true },\n);\n\nwatch(state, (state) => {\n emit('update:model-value', state.color.hex);\n}, { immediate: true, deep: true });\n</script>\n\n<template>\n <div\n role=\"application\"\n aria-label=\"Color picker\"\n class=\"rui-color-picker relative select-none bg-initial\"\n v-bind=\"$attrs\"\n >\n <RuiColorBoard\n :color=\"state.color\"\n @update:board=\"onBoardChange($event)\"\n />\n <div class=\"flex flex-col gap-5 p-4\">\n <div class=\"flex items-center gap-4\">\n <RuiColorDisplay :color=\"state.color.hexString\" />\n <RuiColorHue\n v-model=\"state.color.hue\"\n class=\"flex-1\"\n />\n </div>\n\n <RuiColorInput v-model=\"state.color\" />\n </div>\n </div>\n</template>\n"],"names":["state","_openBlock","_createElementBlock","_mergeProps","$attrs","_createVNode","_unref","_createElementVNode","RuiColorDisplay","RuiColorInput"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,UAAM,QAAQ;AAEd,UAAM,OAAO;AAIb,UAAM,EAAE,WAAA,IAAe,OAAO,KAAK;AAEnC,UAAM,QAAQ,SAAS;AAAA,MACrB,OAAO,IAAI,MAAM,IAAI,UAAU,CAAC;AAAA,IAAA,CACjC;AAED,aAAS,cAAc,EAAE,YAAY,cAA0D;AAC7F,YAAM,MAAM,aAAa;AACzB,YAAM,MAAM,aAAa;AAAA,IAC3B;AAEA;AAAA,MACE;AAAA,MACA,CAAC,UAAkB;AACjB,YAAI,MAAM,MAAM,QAAQ;AACtB,gBAAM,QAAQ,IAAI,MAAM,KAAK;AAAA,MACjC;AAAA,MACA,EAAE,MAAM,KAAA;AAAA,IAAK;AAGf,UAAM,OAAO,CAACA,WAAU;AACtB,WAAK,sBAAsBA,OAAM,MAAM,GAAG;AAAA,IAC5C,GAAG,EAAE,WAAW,MAAM,MAAM,MAAM;;AAIhC,aAAAC,UAAA,GAAAC,mBAqBM,OArBNC,WAqBM;AAAA,QApBJ,MAAK;AAAA,QACL,cAAW;AAAA,QACX,OAAM;AAAA,MAAA,GACEC,KAAAA,MAAM,GAAA;AAAA,QAEdC,YAGE,eAAA;AAAA,UAFC,OAAOC,MAAA,KAAA,EAAM;AAAA,UACb,kBAAY,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,cAAc,MAAM;AAAA,QAAA;QAErCC,mBAUM,OAVN,YAUM;AAAA,UATJA,mBAMM,OANN,YAMM;AAAA,YALJF,YAAkDG,aAAA;AAAA,cAAhC,OAAOF,MAAA,KAAA,EAAM,MAAM;AAAA,YAAA;YACrCD,YAGE,aAAA;AAAA,0BAFSC,MAAA,KAAA,EAAM,MAAM;AAAA,2EAAZA,MAAA,KAAA,EAAM,MAAM,MAAG;AAAA,cACxB,OAAM;AAAA,YAAA;;UAIVD,YAAuCI,aAAA;AAAA,YAAf,YAAAH,MAAA,KAAA,EAAM;AAAA,YAAN,uBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAAA,MAAA,KAAA,EAAM,QAAK;AAAA,UAAA;;;;;;"}
1
+ {"version":3,"file":"RuiColorPicker.vue.js","sources":["../../../src/components/color-picker/RuiColorPicker.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n// Inspired by https://github.com/aesoper101/vue3-colorpicker/\nimport RuiColorBoard from '@/components/color-picker/RuiColorBoard.vue';\nimport RuiColorDisplay from '@/components/color-picker/RuiColorDisplay.vue';\nimport RuiColorHue from '@/components/color-picker/RuiColorHue.vue';\nimport RuiColorInput from '@/components/color-picker/RuiColorInput.vue';\nimport { Color } from './utils';\n\ndefineOptions({\n name: 'RuiColorPicker',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ default: '' });\n\nconst state = reactive({\n color: new Color(get(modelValue)),\n});\n\nfunction onBoardChange({\n saturation,\n brightness,\n}: {\n saturation: number;\n brightness: number;\n}): void {\n state.color.saturation = saturation;\n state.color.brightness = brightness;\n}\n\nwhenever(\n modelValue,\n (value: string) => {\n if (state.color.hex !== value)\n state.color = new Color(value);\n },\n);\n\nwatch(\n () => state.color.hex,\n (hex: string) => {\n set(modelValue, hex);\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <div\n role=\"application\"\n aria-label=\"Color picker\"\n class=\"rui-color-picker relative select-none bg-initial\"\n v-bind=\"$attrs\"\n >\n <RuiColorBoard\n :color=\"state.color\"\n @update:board=\"onBoardChange($event)\"\n />\n <div class=\"flex flex-col gap-5 p-4\">\n <div class=\"flex items-center gap-4\">\n <RuiColorDisplay :color=\"state.color.hexString\" />\n <RuiColorHue\n v-model=\"state.color.hue\"\n class=\"flex-1\"\n />\n </div>\n\n <RuiColorInput v-model=\"state.color\" />\n </div>\n </div>\n</template>\n"],"names":["_useModel","_openBlock","_createElementBlock","_mergeProps","$attrs","_createVNode","_unref","_createElementVNode","RuiColorDisplay","RuiColorInput"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA,UAAM,aAAaA,SAAmB,SAAA,YAAgB;AAEtD,UAAM,QAAQ,SAAS;AAAA,MACrB,OAAO,IAAI,MAAM,IAAI,UAAU,CAAC;AAAA,IAAA,CACjC;AAED,aAAS,cAAc;AAAA,MACrB;AAAA,MACA;AAAA,IAAA,GAIO;AACP,YAAM,MAAM,aAAa;AACzB,YAAM,MAAM,aAAa;AAAA,IAC3B;AAEA;AAAA,MACE;AAAA,MACA,CAAC,UAAkB;AACjB,YAAI,MAAM,MAAM,QAAQ;AACtB,gBAAM,QAAQ,IAAI,MAAM,KAAK;AAAA,MACjC;AAAA,IAAA;AAGF;AAAA,MACE,MAAM,MAAM,MAAM;AAAA,MAClB,CAAC,QAAgB;AACf,YAAI,YAAY,GAAG;AAAA,MACrB;AAAA,MACA,EAAE,WAAW,KAAA;AAAA,IAAK;;AAKlB,aAAAC,UAAA,GAAAC,mBAqBM,OArBNC,WAqBM;AAAA,QApBJ,MAAK;AAAA,QACL,cAAW;AAAA,QACX,OAAM;AAAA,MAAA,GACEC,KAAAA,MAAM,GAAA;AAAA,QAEdC,YAGE,eAAA;AAAA,UAFC,OAAOC,MAAA,KAAA,EAAM;AAAA,UACb,kBAAY,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,cAAc,MAAM;AAAA,QAAA;QAErCC,mBAUM,OAVN,YAUM;AAAA,UATJA,mBAMM,OANN,YAMM;AAAA,YALJF,YAAkDG,aAAA;AAAA,cAAhC,OAAOF,MAAA,KAAA,EAAM,MAAM;AAAA,YAAA;YACrCD,YAGE,aAAA;AAAA,0BAFSC,MAAA,KAAA,EAAM,MAAM;AAAA,2EAAZA,MAAA,KAAA,EAAM,MAAM,MAAG;AAAA,cACxB,OAAM;AAAA,YAAA;;UAIVD,YAAuCI,aAAA;AAAA,YAAf,YAAAH,MAAA,KAAA,EAAM;AAAA,YAAN,uBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAAA,MAAA,KAAA,EAAM,QAAK;AAAA,UAAA;;;;;;"}
@@ -154,17 +154,34 @@ class Color {
154
154
  }
155
155
  }
156
156
  function useElementDrag(handler) {
157
+ let rafId = null;
157
158
  function handleClick(e) {
158
- handler(e.clientX, e.clientY);
159
+ if (rafId !== null)
160
+ return;
161
+ rafId = requestAnimationFrame(() => {
162
+ handler(e.clientX, e.clientY);
163
+ rafId = null;
164
+ });
165
+ }
166
+ function cancelRaf() {
167
+ if (rafId !== null) {
168
+ cancelAnimationFrame(rafId);
169
+ rafId = null;
170
+ }
159
171
  }
160
172
  function onMouseDown(e) {
161
173
  e.preventDefault();
162
- window.addEventListener("mousemove", handleClick);
163
- window.addEventListener("mouseup", handleMouseUp);
174
+ if (typeof window !== "undefined") {
175
+ window.addEventListener("mousemove", handleClick);
176
+ window.addEventListener("mouseup", handleMouseUp);
177
+ }
164
178
  }
165
179
  function handleMouseUp() {
166
- window.removeEventListener("mousemove", handleClick);
167
- window.removeEventListener("mouseup", handleMouseUp);
180
+ cancelRaf();
181
+ if (typeof window !== "undefined") {
182
+ window.removeEventListener("mousemove", handleClick);
183
+ window.removeEventListener("mouseup", handleMouseUp);
184
+ }
168
185
  }
169
186
  onUnmounted(() => {
170
187
  handleMouseUp();
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/components/color-picker/utils.ts"],"sourcesContent":["import tinycolor, { type ColorInput } from 'tinycolor2';\n\nexport type ColorFormat = 'rgb' | 'hex';\n\nexport function roundTwoDecimal(num: number) {\n return Math.round(num * 100) / 100;\n}\n\nexport class Color {\n instance: tinycolor.Instance;\n alphaValue = 0;\n\n // rgb\n redValue = 0;\n greenValue = 0;\n blueValue = 0;\n\n // HSV\n hueValue = 0;\n saturationValue = 0;\n brightnessValue = 0;\n\n // HSL\n hslSaturationValue = 0;\n lightnessValue = 0;\n\n constructor(input?: ColorInput) {\n this.instance = tinycolor(input);\n\n this.initRgb();\n this.initHsb();\n this.initLightness();\n this.initAlpha();\n }\n\n initAlpha = () => {\n const initAlpha = this.instance.getAlpha();\n this.alphaValue = Math.min(1, initAlpha) * 100;\n };\n\n initLightness = () => {\n const { l, s } = this.instance.toHsl();\n this.hslSaturationValue = roundTwoDecimal(s);\n this.lightnessValue = roundTwoDecimal(l);\n };\n\n initRgb = () => {\n const { b, g, r } = this.instance.toRgb();\n\n this.redValue = roundTwoDecimal(r);\n this.greenValue = roundTwoDecimal(g);\n this.blueValue = roundTwoDecimal(b);\n };\n\n initHsb = () => {\n const { h, s, v } = this.instance.toHsv();\n\n this.hueValue = Math.min(360, Math.ceil(h));\n this.saturationValue = roundTwoDecimal(s);\n this.brightnessValue = roundTwoDecimal(v);\n };\n\n toString(format?: ColorFormat) {\n return this.instance.toString(format);\n }\n\n get hexString() {\n return this.instance.toHexString();\n };\n\n get hex() {\n return this.instance.toHex();\n }\n\n set hex(hexString: string) {\n this.instance = tinycolor(hexString);\n this.initHsb();\n this.initRgb();\n this.initAlpha();\n this.initLightness();\n }\n\n set hue(value: number) {\n if (this.saturation === 0 && this.brightness === 0) {\n this.saturationValue = 1;\n this.brightnessValue = 1;\n }\n this.instance = tinycolor({\n a: this.alphaValue / 100,\n h: roundTwoDecimal(value),\n s: this.saturation,\n v: this.brightness,\n });\n\n this.initRgb();\n this.initLightness();\n this.hueValue = roundTwoDecimal(value);\n }\n\n get hue() {\n return this.hueValue;\n }\n\n set saturation(value: number) {\n this.instance = tinycolor({\n a: this.alphaValue / 100,\n h: this.hue,\n s: roundTwoDecimal(value),\n v: this.brightness,\n });\n\n this.initRgb();\n this.initLightness();\n this.saturationValue = roundTwoDecimal(value);\n }\n\n get saturation() {\n return this.saturationValue;\n }\n\n set brightness(value: number) {\n this.instance = tinycolor({\n a: this.alphaValue / 100,\n h: this.hue,\n s: this.saturation,\n v: roundTwoDecimal(value),\n });\n\n this.initRgb();\n this.initLightness();\n this.brightnessValue = roundTwoDecimal(value);\n }\n\n get brightness() {\n return this.brightnessValue;\n }\n\n set red(value: number) {\n const rgb = this.instance.toRgb();\n this.instance = tinycolor({\n ...rgb,\n a: this.alphaValue / 100,\n r: roundTwoDecimal(value),\n });\n\n this.initHsb();\n this.initLightness();\n this.redValue = roundTwoDecimal(value);\n }\n\n get red() {\n return this.redValue;\n }\n\n set green(value: number) {\n const rgb = this.instance.toRgb();\n this.instance = tinycolor({\n ...rgb,\n a: this.alphaValue / 100,\n g: roundTwoDecimal(value),\n });\n\n this.initHsb();\n this.initLightness();\n this.greenValue = roundTwoDecimal(value);\n }\n\n get green() {\n return this.greenValue;\n }\n\n set blue(value: number) {\n const rgb = this.instance.toRgb();\n this.instance = tinycolor({\n ...rgb,\n a: this.alphaValue / 100,\n b: roundTwoDecimal(value),\n });\n\n this.initHsb();\n this.initLightness();\n this.blueValue = roundTwoDecimal(value);\n }\n\n get blue() {\n return this.blueValue;\n }\n\n get rgb(): [number, number, number] {\n return [this.red, this.green, this.blue];\n }\n}\n\nexport function useElementDrag(handler: (x: number, y: number) => any) {\n function handleClick(e: { clientX: number; clientY: number }) {\n handler(e.clientX, e.clientY);\n }\n\n function onMouseDown(e: MouseEvent) {\n e.preventDefault();\n\n window.addEventListener('mousemove', handleClick);\n window.addEventListener('mouseup', handleMouseUp);\n }\n\n function handleMouseUp() {\n window.removeEventListener('mousemove', handleClick);\n window.removeEventListener('mouseup', handleMouseUp);\n }\n\n onUnmounted(() => {\n handleMouseUp();\n });\n\n return {\n handleClick,\n onMouseDown,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/components/color-picker/utils.ts"],"sourcesContent":["import tinycolor, { type ColorInput } from 'tinycolor2';\n\nexport type ColorFormat = 'rgb' | 'hex';\n\nexport function roundTwoDecimal(num: number) {\n return Math.round(num * 100) / 100;\n}\n\nexport class Color {\n instance: tinycolor.Instance;\n alphaValue = 0;\n\n // rgb\n redValue = 0;\n greenValue = 0;\n blueValue = 0;\n\n // HSV\n hueValue = 0;\n saturationValue = 0;\n brightnessValue = 0;\n\n // HSL\n hslSaturationValue = 0;\n lightnessValue = 0;\n\n constructor(input?: ColorInput) {\n this.instance = tinycolor(input);\n\n this.initRgb();\n this.initHsb();\n this.initLightness();\n this.initAlpha();\n }\n\n initAlpha = () => {\n const initAlpha = this.instance.getAlpha();\n this.alphaValue = Math.min(1, initAlpha) * 100;\n };\n\n initLightness = () => {\n const { l, s } = this.instance.toHsl();\n this.hslSaturationValue = roundTwoDecimal(s);\n this.lightnessValue = roundTwoDecimal(l);\n };\n\n initRgb = () => {\n const { b, g, r } = this.instance.toRgb();\n\n this.redValue = roundTwoDecimal(r);\n this.greenValue = roundTwoDecimal(g);\n this.blueValue = roundTwoDecimal(b);\n };\n\n initHsb = () => {\n const { h, s, v } = this.instance.toHsv();\n\n this.hueValue = Math.min(360, Math.ceil(h));\n this.saturationValue = roundTwoDecimal(s);\n this.brightnessValue = roundTwoDecimal(v);\n };\n\n toString(format?: ColorFormat) {\n return this.instance.toString(format);\n }\n\n get hexString() {\n return this.instance.toHexString();\n };\n\n get hex() {\n return this.instance.toHex();\n }\n\n set hex(hexString: string) {\n this.instance = tinycolor(hexString);\n this.initHsb();\n this.initRgb();\n this.initAlpha();\n this.initLightness();\n }\n\n set hue(value: number) {\n if (this.saturation === 0 && this.brightness === 0) {\n this.saturationValue = 1;\n this.brightnessValue = 1;\n }\n this.instance = tinycolor({\n a: this.alphaValue / 100,\n h: roundTwoDecimal(value),\n s: this.saturation,\n v: this.brightness,\n });\n\n this.initRgb();\n this.initLightness();\n this.hueValue = roundTwoDecimal(value);\n }\n\n get hue() {\n return this.hueValue;\n }\n\n set saturation(value: number) {\n this.instance = tinycolor({\n a: this.alphaValue / 100,\n h: this.hue,\n s: roundTwoDecimal(value),\n v: this.brightness,\n });\n\n this.initRgb();\n this.initLightness();\n this.saturationValue = roundTwoDecimal(value);\n }\n\n get saturation() {\n return this.saturationValue;\n }\n\n set brightness(value: number) {\n this.instance = tinycolor({\n a: this.alphaValue / 100,\n h: this.hue,\n s: this.saturation,\n v: roundTwoDecimal(value),\n });\n\n this.initRgb();\n this.initLightness();\n this.brightnessValue = roundTwoDecimal(value);\n }\n\n get brightness() {\n return this.brightnessValue;\n }\n\n set red(value: number) {\n const rgb = this.instance.toRgb();\n this.instance = tinycolor({\n ...rgb,\n a: this.alphaValue / 100,\n r: roundTwoDecimal(value),\n });\n\n this.initHsb();\n this.initLightness();\n this.redValue = roundTwoDecimal(value);\n }\n\n get red() {\n return this.redValue;\n }\n\n set green(value: number) {\n const rgb = this.instance.toRgb();\n this.instance = tinycolor({\n ...rgb,\n a: this.alphaValue / 100,\n g: roundTwoDecimal(value),\n });\n\n this.initHsb();\n this.initLightness();\n this.greenValue = roundTwoDecimal(value);\n }\n\n get green() {\n return this.greenValue;\n }\n\n set blue(value: number) {\n const rgb = this.instance.toRgb();\n this.instance = tinycolor({\n ...rgb,\n a: this.alphaValue / 100,\n b: roundTwoDecimal(value),\n });\n\n this.initHsb();\n this.initLightness();\n this.blueValue = roundTwoDecimal(value);\n }\n\n get blue() {\n return this.blueValue;\n }\n\n get rgb(): [number, number, number] {\n return [this.red, this.green, this.blue];\n }\n}\n\nexport function useElementDrag(handler: (x: number, y: number) => any) {\n let rafId: number | null = null;\n\n function handleClick(e: { clientX: number; clientY: number }): void {\n if (rafId !== null)\n return;\n\n rafId = requestAnimationFrame(() => {\n handler(e.clientX, e.clientY);\n rafId = null;\n });\n }\n\n function cancelRaf(): void {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n\n function onMouseDown(e: MouseEvent): void {\n e.preventDefault();\n\n if (typeof window !== 'undefined') {\n window.addEventListener('mousemove', handleClick);\n window.addEventListener('mouseup', handleMouseUp);\n }\n }\n\n function handleMouseUp(): void {\n cancelRaf();\n if (typeof window !== 'undefined') {\n window.removeEventListener('mousemove', handleClick);\n window.removeEventListener('mouseup', handleMouseUp);\n }\n }\n\n onUnmounted(() => {\n handleMouseUp();\n });\n\n return {\n handleClick,\n onMouseDown,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -20,60 +20,18 @@ export interface RuiDateTimePickerProps {
20
20
  required?: boolean;
21
21
  }
22
22
  type __VLS_Props = RuiDateTimePickerProps;
23
- declare const props: Readonly<{}> & {
24
- readonly disabled: boolean;
25
- readonly readonly: boolean;
26
- readonly allowEmpty: boolean;
27
- readonly dense: boolean;
28
- readonly type: DateTimeModelType;
29
- readonly hideDetails: boolean;
30
- readonly label: string;
31
- readonly variant: "default" | "outlined" | "filled";
32
- readonly hint: string | undefined;
33
- readonly maxDate: number | Date | "now" | undefined;
34
- readonly minDate: number | Date | undefined;
35
- readonly format: DateFormat;
36
- readonly accuracy: "minute" | "second" | "millisecond";
37
- readonly errorMessages: string | string[];
38
- readonly successMessages: string | string[];
39
- readonly required: boolean;
40
- } & {
41
- readonly readonly: boolean;
42
- readonly disabled: boolean;
43
- readonly required: boolean;
44
- readonly hideDetails: boolean;
45
- readonly dense: boolean;
46
- readonly allowEmpty: boolean;
47
- };
48
23
  type __VLS_Slots = {
49
24
  'menu-content': () => any;
50
25
  };
51
26
  type __VLS_ModelProps = {
52
- modelValue: ModelValueType<typeof props.type>;
27
+ modelValue: ModelValueType<DateTimeModelType>;
53
28
  };
54
29
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
55
30
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
56
31
  "update:modelValue": (value: number | Date | undefined) => any;
57
32
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
58
33
  "onUpdate:modelValue"?: ((value: number | Date | undefined) => any) | undefined;
59
- }>, {
60
- label: string;
61
- readonly: boolean;
62
- variant: "default" | "filled" | "outlined";
63
- type: DateTimeModelType;
64
- disabled: boolean;
65
- errorMessages: string | string[];
66
- successMessages: string | string[];
67
- hint: string;
68
- required: boolean;
69
- hideDetails: boolean;
70
- dense: boolean;
71
- maxDate: Date | number | "now";
72
- minDate: Date | number;
73
- allowEmpty: boolean;
74
- accuracy: "minute" | "second" | "millisecond";
75
- format: DateFormat;
76
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
34
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
77
35
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
78
36
  declare const _default: typeof __VLS_export;
79
37
  export default _default;