@rotki/ui-library 2.14.1 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (804) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.js +7 -0
  2. package/dist/components/accordions/accordion/RuiAccordion.js.map +1 -0
  3. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +9 -0
  4. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +88 -0
  5. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  6. package/dist/components/accordions/accordions/RuiAccordions.js +7 -0
  7. package/dist/components/accordions/accordions/RuiAccordions.js.map +1 -0
  8. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js +67 -0
  9. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js.map +1 -0
  10. package/dist/components/alerts/RuiAlert.js +7 -0
  11. package/dist/components/alerts/RuiAlert.js.map +1 -0
  12. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js +330 -0
  13. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -0
  14. package/dist/components/buttons/button/RuiButton.js +7 -0
  15. package/dist/components/buttons/button/RuiButton.js.map +1 -0
  16. package/dist/components/buttons/button/RuiButton.vue.d.ts +3 -2
  17. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js +104 -0
  18. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  19. package/dist/components/buttons/button/button-props.d.ts +16 -0
  20. package/dist/components/buttons/button/button-props.js +20 -0
  21. package/dist/components/buttons/button/button-props.js.map +1 -0
  22. package/dist/components/buttons/button/button-styles.d.ts +229 -0
  23. package/dist/components/buttons/button/button-styles.js +342 -0
  24. package/dist/components/buttons/button/button-styles.js.map +1 -0
  25. package/dist/components/buttons/button-group/RuiButtonGroup.js +7 -0
  26. package/dist/components/buttons/button-group/RuiButtonGroup.js.map +1 -0
  27. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +246 -0
  28. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  29. package/dist/components/calendar/RuiCalendar.js +7 -0
  30. package/dist/components/calendar/RuiCalendar.js.map +1 -0
  31. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js +151 -0
  32. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  33. package/dist/components/calendar/RuiCalendarGrid.js +7 -0
  34. package/dist/components/calendar/RuiCalendarGrid.js.map +1 -0
  35. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +155 -0
  36. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  37. package/dist/components/calendar/RuiCalendarHeader.js +7 -0
  38. package/dist/components/calendar/RuiCalendarHeader.js.map +1 -0
  39. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js +113 -0
  40. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  41. package/dist/components/calendar/RuiCalendarMenu.js +7 -0
  42. package/dist/components/calendar/RuiCalendarMenu.js.map +1 -0
  43. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +246 -0
  44. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  45. package/dist/components/calendar/state.js +20 -21
  46. package/dist/components/calendar/state.js.map +1 -1
  47. package/dist/components/cards/RuiCard.js +7 -0
  48. package/dist/components/cards/RuiCard.js.map +1 -0
  49. package/dist/components/cards/RuiCard.vue.d.ts +9 -0
  50. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +130 -0
  51. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  52. package/dist/components/cards/RuiCardHeader.js +7 -0
  53. package/dist/components/cards/RuiCardHeader.js.map +1 -0
  54. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js +67 -0
  55. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  56. package/dist/components/chips/RuiChip.js +7 -0
  57. package/dist/components/chips/RuiChip.js.map +1 -0
  58. package/dist/components/chips/RuiChip.vue.d.ts +10 -2
  59. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +308 -0
  60. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  61. package/dist/components/chips/chip-props.d.ts +11 -0
  62. package/dist/components/chips/chip-props.js +17 -0
  63. package/dist/components/chips/chip-props.js.map +1 -0
  64. package/dist/components/color-picker/RuiColorBoard.js +7 -0
  65. package/dist/components/color-picker/RuiColorBoard.js.map +1 -0
  66. package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
  67. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js +100 -0
  68. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  69. package/dist/components/color-picker/RuiColorDisplay.js +7 -0
  70. package/dist/components/color-picker/RuiColorDisplay.js.map +1 -0
  71. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js +37 -0
  72. package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js.map +1 -0
  73. package/dist/components/color-picker/RuiColorHue.js +7 -0
  74. package/dist/components/color-picker/RuiColorHue.js.map +1 -0
  75. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +84 -0
  76. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -0
  77. package/dist/components/color-picker/RuiColorInput.js +7 -0
  78. package/dist/components/color-picker/RuiColorInput.js.map +1 -0
  79. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js +132 -0
  80. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  81. package/dist/components/color-picker/RuiColorPicker.js +7 -0
  82. package/dist/components/color-picker/RuiColorPicker.js.map +1 -0
  83. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js +57 -0
  84. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  85. package/dist/components/color-picker/utils.d.ts +11 -8
  86. package/dist/components/color-picker/utils.js +179 -194
  87. package/dist/components/color-picker/utils.js.map +1 -1
  88. package/dist/components/date-time-picker/RuiDateTimePicker.js +7 -0
  89. package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -0
  90. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -1
  91. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +369 -0
  92. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  93. package/dist/components/date-time-picker/RuiDateTimePickerMenu.js +7 -0
  94. package/dist/components/date-time-picker/RuiDateTimePickerMenu.js.map +1 -0
  95. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +1 -1
  96. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js +134 -0
  97. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  98. package/dist/components/date-time-picker/date-time-picker-styles.d.ts +326 -0
  99. package/dist/components/date-time-picker/date-time-picker-styles.js +19 -0
  100. package/dist/components/date-time-picker/date-time-picker-styles.js.map +1 -0
  101. package/dist/components/date-time-picker/dayjs-setup.js +4 -1
  102. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -1
  103. package/dist/components/date-time-picker/segment-config.js +42 -21
  104. package/dist/components/date-time-picker/segment-config.js.map +1 -1
  105. package/dist/components/date-time-picker/segment-utils.js +24 -31
  106. package/dist/components/date-time-picker/segment-utils.js.map +1 -1
  107. package/dist/components/date-time-picker/timezones.js +601 -600
  108. package/dist/components/date-time-picker/timezones.js.map +1 -1
  109. package/dist/components/date-time-picker/types.js +14 -14
  110. package/dist/components/date-time-picker/types.js.map +1 -1
  111. package/dist/components/date-time-picker/use-date-time-selection.js +222 -282
  112. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  113. package/dist/components/date-time-picker/use-input-handler.js +31 -28
  114. package/dist/components/date-time-picker/use-input-handler.js.map +1 -1
  115. package/dist/components/date-time-picker/use-keyboard-handler.js +201 -268
  116. package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
  117. package/dist/components/date-time-picker/utils.js +10 -11
  118. package/dist/components/date-time-picker/utils.js.map +1 -1
  119. package/dist/components/divider/RuiDivider.js +7 -0
  120. package/dist/components/divider/RuiDivider.js.map +1 -0
  121. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js +25 -0
  122. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js.map +1 -0
  123. package/dist/components/forms/auto-complete/RuiAutoComplete.js +7 -0
  124. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -0
  125. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +12 -2
  126. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +566 -0
  127. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -0
  128. package/dist/components/forms/auto-complete/auto-complete-styles.d.ts +324 -0
  129. package/dist/components/forms/auto-complete/auto-complete-styles.js +15 -0
  130. package/dist/components/forms/auto-complete/auto-complete-styles.js.map +1 -0
  131. package/dist/components/forms/check-control-styles.d.ts +135 -0
  132. package/dist/components/forms/check-control-styles.js +126 -0
  133. package/dist/components/forms/check-control-styles.js.map +1 -0
  134. package/dist/components/forms/checkbox/RuiCheckbox.js +7 -0
  135. package/dist/components/forms/checkbox/RuiCheckbox.js.map +1 -0
  136. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +133 -0
  137. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  138. package/dist/components/forms/radio-button/radio/RuiRadio.js +7 -0
  139. package/dist/components/forms/radio-button/radio/RuiRadio.js.map +1 -0
  140. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +115 -0
  141. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -0
  142. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.js +7 -0
  143. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.js.map +1 -0
  144. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +96 -0
  145. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  146. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.js +7 -0
  147. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.js.map +1 -0
  148. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +2 -15
  149. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js +117 -0
  150. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -0
  151. package/dist/components/forms/select/RuiMenuSelect.js +7 -0
  152. package/dist/components/forms/select/RuiMenuSelect.js.map +1 -0
  153. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +16 -4
  154. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +313 -0
  155. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  156. package/dist/components/forms/select/RuiSimpleSelect.js +7 -0
  157. package/dist/components/forms/select/RuiSimpleSelect.js.map +1 -0
  158. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js +75 -0
  159. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  160. package/dist/components/forms/select/menu-select-styles.d.ts +319 -0
  161. package/dist/components/forms/select/menu-select-styles.js +11 -0
  162. package/dist/components/forms/select/menu-select-styles.js.map +1 -0
  163. package/dist/components/forms/slider/RuiSlider.js +7 -0
  164. package/dist/components/forms/slider/RuiSlider.js.map +1 -0
  165. package/dist/components/forms/slider/RuiSlider.vue.d.ts +9 -0
  166. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +222 -0
  167. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -0
  168. package/dist/components/forms/slider/slider-styles.d.ts +208 -0
  169. package/dist/components/forms/slider/slider-styles.js +235 -0
  170. package/dist/components/forms/slider/slider-styles.js.map +1 -0
  171. package/dist/components/forms/switch/RuiSwitch.js +7 -0
  172. package/dist/components/forms/switch/RuiSwitch.js.map +1 -0
  173. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +226 -0
  174. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -0
  175. package/dist/components/forms/text-area/RuiTextArea.js +7 -0
  176. package/dist/components/forms/text-area/RuiTextArea.js.map +1 -0
  177. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +8 -4
  178. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js +248 -0
  179. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  180. package/dist/components/forms/text-area/text-area-styles.d.ts +313 -0
  181. package/dist/components/forms/text-area/text-area-styles.js +239 -0
  182. package/dist/components/forms/text-area/text-area-styles.js.map +1 -0
  183. package/dist/components/forms/text-field/RuiTextField.js +7 -0
  184. package/dist/components/forms/text-field/RuiTextField.js.map +1 -0
  185. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +4 -3
  186. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js +220 -0
  187. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -0
  188. package/dist/components/forms/text-field/text-field-styles.d.ts +299 -0
  189. package/dist/components/forms/text-field/text-field-styles.js +251 -0
  190. package/dist/components/forms/text-field/text-field-styles.js.map +1 -0
  191. package/dist/components/forms/text-input-styles.d.ts +422 -0
  192. package/dist/components/forms/text-input-styles.js +250 -0
  193. package/dist/components/forms/text-input-styles.js.map +1 -0
  194. package/dist/components/helpers/RuiFormTextDetail.js +7 -0
  195. package/dist/components/helpers/RuiFormTextDetail.js.map +1 -0
  196. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js +46 -0
  197. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -0
  198. package/dist/components/icons/RuiIcon.js +7 -0
  199. package/dist/components/icons/RuiIcon.js.map +1 -0
  200. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +58 -0
  201. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -0
  202. package/dist/components/index.d.ts +46 -46
  203. package/dist/components/index.js +45 -92
  204. package/dist/components/loaders/RuiSkeletonBase.js +7 -0
  205. package/dist/components/loaders/RuiSkeletonBase.js.map +1 -0
  206. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js +31 -0
  207. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -0
  208. package/dist/components/loaders/RuiSkeletonLoader.js +7 -0
  209. package/dist/components/loaders/RuiSkeletonLoader.js.map +1 -0
  210. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +3 -2
  211. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js +62 -0
  212. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  213. package/dist/components/loaders/skeleton-type.d.ts +12 -0
  214. package/dist/components/loaders/skeleton-type.js +16 -0
  215. package/dist/components/loaders/skeleton-type.js.map +1 -0
  216. package/dist/components/logos/RuiLogo.js +7 -0
  217. package/dist/components/logos/RuiLogo.js.map +1 -0
  218. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js +130 -0
  219. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -0
  220. package/dist/components/logos/logo.js +6 -0
  221. package/dist/components/logos/logo.js.map +1 -0
  222. package/dist/components/logos/use-logo-sources.d.ts +21 -2
  223. package/dist/components/logos/use-logo-sources.js +79 -30
  224. package/dist/components/logos/use-logo-sources.js.map +1 -1
  225. package/dist/components/overlays/badge/RuiBadge.js +7 -0
  226. package/dist/components/overlays/badge/RuiBadge.js.map +1 -0
  227. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +4 -3
  228. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js +189 -0
  229. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -0
  230. package/dist/components/overlays/badge/badge-props.d.ts +19 -0
  231. package/dist/components/overlays/badge/badge-props.js +21 -0
  232. package/dist/components/overlays/badge/badge-props.js.map +1 -0
  233. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.js +7 -0
  234. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.js.map +1 -0
  235. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js +51 -0
  236. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js.map +1 -0
  237. package/dist/components/overlays/dialog/RuiDialog.js +7 -0
  238. package/dist/components/overlays/dialog/RuiDialog.js.map +1 -0
  239. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +7 -0
  240. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +163 -0
  241. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  242. package/dist/components/overlays/menu/RuiMenu.js +7 -0
  243. package/dist/components/overlays/menu/RuiMenu.js.map +1 -0
  244. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +12 -0
  245. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +236 -0
  246. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  247. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.js +7 -0
  248. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.js.map +1 -0
  249. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +7 -0
  250. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +180 -0
  251. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  252. package/dist/components/overlays/notification/RuiNotification.js +7 -0
  253. package/dist/components/overlays/notification/RuiNotification.js.map +1 -0
  254. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +70 -0
  255. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -0
  256. package/dist/components/overlays/tooltip/RuiTooltip.js +7 -0
  257. package/dist/components/overlays/tooltip/RuiTooltip.js.map +1 -0
  258. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +10 -0
  259. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +107 -0
  260. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  261. package/dist/components/overlays/tooltip/tooltip-styles.d.ts +91 -0
  262. package/dist/components/overlays/tooltip/tooltip-styles.js +40 -0
  263. package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -0
  264. package/dist/components/progress/RuiProgress.js +7 -0
  265. package/dist/components/progress/RuiProgress.js.map +1 -0
  266. package/dist/components/progress/RuiProgress.vue.d.ts +2 -1
  267. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +254 -0
  268. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -0
  269. package/dist/components/progress/progress-props.d.ts +6 -0
  270. package/dist/components/progress/progress-props.js +10 -0
  271. package/dist/components/progress/progress-props.js.map +1 -0
  272. package/dist/components/steppers/RuiFooterStepper.js +7 -0
  273. package/dist/components/steppers/RuiFooterStepper.js.map +1 -0
  274. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +2 -1
  275. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +164 -0
  276. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -0
  277. package/dist/components/steppers/RuiStepper.js +7 -0
  278. package/dist/components/steppers/RuiStepper.js.map +1 -0
  279. package/dist/components/steppers/RuiStepper.vue.d.ts +9 -0
  280. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +232 -0
  281. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -0
  282. package/dist/components/steppers/RuiStepperCustomIcon.js +7 -0
  283. package/dist/components/steppers/RuiStepperCustomIcon.js.map +1 -0
  284. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js +43 -0
  285. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +1 -0
  286. package/dist/components/steppers/RuiStepperIcon.js +7 -0
  287. package/dist/components/steppers/RuiStepperIcon.js.map +1 -0
  288. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +72 -0
  289. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -0
  290. package/dist/components/steppers/footer-stepper-variant.d.ts +7 -0
  291. package/dist/components/steppers/footer-stepper-variant.js +11 -0
  292. package/dist/components/steppers/footer-stepper-variant.js.map +1 -0
  293. package/dist/components/tables/RuiDataTable.js +7 -0
  294. package/dist/components/tables/RuiDataTable.js.map +1 -0
  295. package/dist/components/tables/RuiDataTable.vue.d.ts +7 -2
  296. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +516 -0
  297. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  298. package/dist/components/tables/RuiExpandButton.js +7 -0
  299. package/dist/components/tables/RuiExpandButton.js.map +1 -0
  300. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js +34 -0
  301. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  302. package/dist/components/tables/RuiTableEmptyState.js +7 -0
  303. package/dist/components/tables/RuiTableEmptyState.js.map +1 -0
  304. package/dist/components/tables/RuiTableEmptyState.vue.d.ts +16 -0
  305. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +46 -0
  306. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  307. package/dist/components/tables/RuiTableHead.js +7 -0
  308. package/dist/components/tables/RuiTableHead.js.map +1 -0
  309. package/dist/components/tables/RuiTableHead.vue.d.ts +6 -5
  310. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +230 -0
  311. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -0
  312. package/dist/components/tables/RuiTablePagination.js +7 -0
  313. package/dist/components/tables/RuiTablePagination.js.map +1 -0
  314. package/dist/components/tables/RuiTablePagination.vue.d.ts +9 -6
  315. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +187 -0
  316. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
  317. package/dist/components/tables/data-table-styles.d.ts +155 -0
  318. package/dist/components/tables/data-table-styles.js +36 -0
  319. package/dist/components/tables/data-table-styles.js.map +1 -0
  320. package/dist/components/tables/table-props.d.ts +20 -0
  321. package/dist/components/tables/table-props.js +39 -0
  322. package/dist/components/tables/table-props.js.map +1 -0
  323. package/dist/components/tables/table_no_data_placeholder.js +6 -0
  324. package/dist/components/tables/table_no_data_placeholder.js.map +1 -0
  325. package/dist/components/tables/table_no_data_placeholder_dark.js +6 -0
  326. package/dist/components/tables/table_no_data_placeholder_dark.js.map +1 -0
  327. package/dist/components/tables/use-pagination-navigation.d.ts +32 -0
  328. package/dist/components/tables/use-pagination-navigation.js +88 -0
  329. package/dist/components/tables/use-pagination-navigation.js.map +1 -0
  330. package/dist/components/tabs/tab/RuiTab.js +7 -0
  331. package/dist/components/tabs/tab/RuiTab.js.map +1 -0
  332. package/dist/components/tabs/tab/RuiTab.vue.d.ts +12 -3
  333. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +175 -0
  334. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -0
  335. package/dist/components/tabs/tab/use-tab-link.d.ts +26 -0
  336. package/dist/components/tabs/tab/use-tab-link.js +28 -0
  337. package/dist/components/tabs/tab/use-tab-link.js.map +1 -0
  338. package/dist/components/tabs/tab-item/RuiTabItem.js +7 -0
  339. package/dist/components/tabs/tab-item/RuiTabItem.js.map +1 -0
  340. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js +54 -0
  341. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  342. package/dist/components/tabs/tab-items/RuiTabItems.js +7 -0
  343. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -0
  344. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +76 -0
  345. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -0
  346. package/dist/components/tabs/tab-props.d.ts +20 -0
  347. package/dist/components/tabs/tab-props.js +18 -0
  348. package/dist/components/tabs/tab-props.js.map +1 -0
  349. package/dist/components/tabs/tabs/RuiTabs.js +7 -0
  350. package/dist/components/tabs/tabs/RuiTabs.js.map +1 -0
  351. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +3 -2
  352. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +208 -0
  353. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -0
  354. package/dist/components/tabs/tabs/use-tab-routing.d.ts +28 -0
  355. package/dist/components/tabs/tabs/use-tab-routing.js +43 -0
  356. package/dist/components/tabs/tabs/use-tab-routing.js.map +1 -0
  357. package/dist/components/tabs/tabs/use-tab-scroll.d.ts +23 -0
  358. package/dist/components/tabs/tabs/use-tab-scroll.js +68 -0
  359. package/dist/components/tabs/tabs/use-tab-scroll.js.map +1 -0
  360. package/dist/components/time-picker/RuiTimePicker.js +7 -0
  361. package/dist/components/time-picker/RuiTimePicker.js.map +1 -0
  362. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js +382 -0
  363. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  364. package/dist/components/time-picker/time-picker-styles.d.ts +76 -0
  365. package/dist/components/time-picker/time-picker-styles.js +27 -0
  366. package/dist/components/time-picker/time-picker-styles.js.map +1 -0
  367. package/dist/composables/breakpoint.js +35 -40
  368. package/dist/composables/breakpoint.js.map +1 -1
  369. package/dist/composables/colors/common.d.ts +20 -0
  370. package/dist/composables/colors/index.d.ts +3 -0
  371. package/dist/composables/colors/text-input.d.ts +27 -0
  372. package/dist/composables/defaults/table.js +21 -18
  373. package/dist/composables/defaults/table.js.map +1 -1
  374. package/dist/composables/dropdown-menu.d.ts +6 -6
  375. package/dist/composables/dropdown-menu.js +169 -237
  376. package/dist/composables/dropdown-menu.js.map +1 -1
  377. package/dist/composables/floating.d.ts +60 -0
  378. package/dist/composables/floating.js +167 -0
  379. package/dist/composables/floating.js.map +1 -0
  380. package/dist/composables/forms/auto-complete/focus.d.ts +4 -4
  381. package/dist/composables/forms/auto-complete/focus.js +59 -79
  382. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  383. package/dist/composables/forms/auto-complete/index.js +4 -0
  384. package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +6 -5
  385. package/dist/composables/forms/auto-complete/keyboard-navigation.js +116 -136
  386. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  387. package/dist/composables/forms/auto-complete/search.d.ts +11 -10
  388. package/dist/composables/forms/auto-complete/search.js +80 -91
  389. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  390. package/dist/composables/forms/auto-complete/value.d.ts +9 -8
  391. package/dist/composables/forms/auto-complete/value.js +76 -108
  392. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  393. package/dist/composables/forms/use-prepend-append-width.js +24 -20
  394. package/dist/composables/forms/use-prepend-append-width.js.map +1 -1
  395. package/dist/composables/icons.js +42 -52
  396. package/dist/composables/icons.js.map +1 -1
  397. package/dist/composables/index.js +2 -7
  398. package/dist/composables/popper.d.ts +5 -20
  399. package/dist/composables/popper.js +22 -177
  400. package/dist/composables/popper.js.map +1 -1
  401. package/dist/composables/sticky-header.js +132 -143
  402. package/dist/composables/sticky-header.js.map +1 -1
  403. package/dist/composables/tables/data-table/columns.d.ts +1 -1
  404. package/dist/composables/tables/data-table/columns.js +41 -49
  405. package/dist/composables/tables/data-table/columns.js.map +1 -1
  406. package/dist/composables/tables/data-table/expansion.js +29 -34
  407. package/dist/composables/tables/data-table/expansion.js.map +1 -1
  408. package/dist/composables/tables/data-table/grouping.d.ts +1 -1
  409. package/dist/composables/tables/data-table/grouping.js +110 -132
  410. package/dist/composables/tables/data-table/grouping.js.map +1 -1
  411. package/dist/composables/tables/data-table/pagination.d.ts +2 -2
  412. package/dist/composables/tables/data-table/pagination.js +98 -115
  413. package/dist/composables/tables/data-table/pagination.js.map +1 -1
  414. package/dist/composables/tables/data-table/selection.js +124 -160
  415. package/dist/composables/tables/data-table/selection.js.map +1 -1
  416. package/dist/composables/tables/data-table/sort.d.ts +2 -2
  417. package/dist/composables/tables/data-table/sort.js +118 -132
  418. package/dist/composables/tables/data-table/sort.js.map +1 -1
  419. package/dist/composables/tables/data-table/types.d.ts +2 -2
  420. package/dist/composables/tables/data-table/types.js +7 -7
  421. package/dist/composables/tables/data-table/types.js.map +1 -1
  422. package/dist/composables/theme.js +91 -66
  423. package/dist/composables/theme.js.map +1 -1
  424. package/dist/composables/timeout-manager.js +24 -19
  425. package/dist/composables/timeout-manager.js.map +1 -1
  426. package/dist/composables/use-rui-i18n.js +15 -21
  427. package/dist/composables/use-rui-i18n.js.map +1 -1
  428. package/dist/consts/colors.js +50 -47
  429. package/dist/consts/colors.js.map +1 -1
  430. package/dist/consts/time-accuracy.js +9 -8
  431. package/dist/consts/time-accuracy.js.map +1 -1
  432. package/dist/i18n/keys.js +17 -16
  433. package/dist/i18n/keys.js.map +1 -1
  434. package/dist/icons/icons_1.js +1529 -2027
  435. package/dist/icons/icons_1.js.map +1 -1
  436. package/dist/icons/icons_2.js +1529 -2027
  437. package/dist/icons/icons_2.js.map +1 -1
  438. package/dist/icons/icons_3.js +1529 -2027
  439. package/dist/icons/icons_3.js.map +1 -1
  440. package/dist/icons/icons_4.js +794 -1047
  441. package/dist/icons/icons_4.js.map +1 -1
  442. package/dist/icons/index.js +1767 -7
  443. package/dist/icons/index.js.map +1 -1
  444. package/dist/index.d.ts +5 -2
  445. package/dist/index.js +87 -1907
  446. package/dist/index.js.map +1 -1
  447. package/dist/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.js +1440 -0
  448. package/dist/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  449. package/dist/node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@2.6.1_tailwindcss@3.4.19_tsx@4.21.0_yaml@2.8.2_/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js +91 -0
  450. package/dist/node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@2.6.1_tailwindcss@3.4.19_tsx@4.21.0_yaml@2.8.2_/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js.map +1 -0
  451. package/dist/node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@2.6.1_tailwindcss@3.4.19_tsx@4.21.0_yaml@2.8.2_/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js +217 -0
  452. package/dist/node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@2.6.1_tailwindcss@3.4.19_tsx@4.21.0_yaml@2.8.2_/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js.map +1 -0
  453. package/dist/node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@2.6.1_tailwindcss@3.4.19_tsx@4.21.0_yaml@2.8.2_/node_modules/tailwind-variants/dist/index.js +33 -0
  454. package/dist/node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@2.6.1_tailwindcss@3.4.19_tsx@4.21.0_yaml@2.8.2_/node_modules/tailwind-variants/dist/index.js.map +1 -0
  455. package/dist/style.css +2791 -10271
  456. package/dist/theme/index.js +160 -198
  457. package/dist/theme/index.js.map +1 -1
  458. package/dist/types/class-value.d.ts +5 -0
  459. package/dist/types/stepper.js +16 -15
  460. package/dist/types/stepper.js.map +1 -1
  461. package/dist/types/theme.js +17 -22
  462. package/dist/types/theme.js.map +1 -1
  463. package/dist/utils/assert.js +12 -12
  464. package/dist/utils/assert.js.map +1 -1
  465. package/dist/utils/blockie.js +58 -65
  466. package/dist/utils/blockie.js.map +1 -1
  467. package/dist/utils/form-text-detail.d.ts +4 -2
  468. package/dist/utils/form-text-detail.js +29 -27
  469. package/dist/utils/form-text-detail.js.map +1 -1
  470. package/dist/utils/helpers.js +60 -35
  471. package/dist/utils/helpers.js.map +1 -1
  472. package/dist/utils/is-equal.js +23 -33
  473. package/dist/utils/is-equal.js.map +1 -1
  474. package/dist/utils/tv.d.ts +16 -0
  475. package/dist/utils/tv.js +23 -0
  476. package/dist/utils/tv.js.map +1 -0
  477. package/dist/vite-plugin/index.js +144 -155
  478. package/dist/vite-plugin/index.js.map +1 -1
  479. package/dist/vite-plugin/scanner.js +46 -52
  480. package/dist/vite-plugin/scanner.js.map +1 -1
  481. package/dist/web-types.json +214 -39
  482. package/package.json +30 -31
  483. package/dist/_virtual/_plugin-vue_export-helper.js +0 -11
  484. package/dist/_virtual/_plugin-vue_export-helper.js.map +0 -1
  485. package/dist/components/accordions/accordion/RuiAccordion.vue.js +0 -89
  486. package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +0 -1
  487. package/dist/components/accordions/accordion/RuiAccordion.vue2.js +0 -5
  488. package/dist/components/accordions/accordion/RuiAccordion.vue2.js.map +0 -1
  489. package/dist/components/accordions/accordions/RuiAccordions.vue.js +0 -79
  490. package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +0 -1
  491. package/dist/components/accordions/accordions/RuiAccordions.vue2.js +0 -5
  492. package/dist/components/accordions/accordions/RuiAccordions.vue2.js.map +0 -1
  493. package/dist/components/alerts/RuiAlert.vue.js +0 -11
  494. package/dist/components/alerts/RuiAlert.vue.js.map +0 -1
  495. package/dist/components/alerts/RuiAlert.vue2.js +0 -115
  496. package/dist/components/alerts/RuiAlert.vue2.js.map +0 -1
  497. package/dist/components/alerts/RuiAlert.vue3.js +0 -50
  498. package/dist/components/alerts/RuiAlert.vue3.js.map +0 -1
  499. package/dist/components/buttons/button/RuiButton.vue.js +0 -11
  500. package/dist/components/buttons/button/RuiButton.vue.js.map +0 -1
  501. package/dist/components/buttons/button/RuiButton.vue2.js +0 -93
  502. package/dist/components/buttons/button/RuiButton.vue2.js.map +0 -1
  503. package/dist/components/buttons/button/RuiButton.vue3.js +0 -74
  504. package/dist/components/buttons/button/RuiButton.vue3.js.map +0 -1
  505. package/dist/components/buttons/button-group/RuiButtonGroup.vue.js +0 -11
  506. package/dist/components/buttons/button-group/RuiButtonGroup.vue.js.map +0 -1
  507. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +0 -113
  508. package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +0 -1
  509. package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js +0 -58
  510. package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js.map +0 -1
  511. package/dist/components/calendar/RuiCalendar.vue.js +0 -139
  512. package/dist/components/calendar/RuiCalendar.vue.js.map +0 -1
  513. package/dist/components/calendar/RuiCalendar.vue3.js +0 -6
  514. package/dist/components/calendar/RuiCalendar.vue3.js.map +0 -1
  515. package/dist/components/calendar/RuiCalendarGrid.vue.js +0 -8
  516. package/dist/components/calendar/RuiCalendarGrid.vue.js.map +0 -1
  517. package/dist/components/calendar/RuiCalendarGrid.vue2.js +0 -151
  518. package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +0 -1
  519. package/dist/components/calendar/RuiCalendarHeader.vue.js +0 -8
  520. package/dist/components/calendar/RuiCalendarHeader.vue.js.map +0 -1
  521. package/dist/components/calendar/RuiCalendarHeader.vue2.js +0 -111
  522. package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +0 -1
  523. package/dist/components/calendar/RuiCalendarMenu.vue.js +0 -8
  524. package/dist/components/calendar/RuiCalendarMenu.vue.js.map +0 -1
  525. package/dist/components/calendar/RuiCalendarMenu.vue2.js +0 -269
  526. package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +0 -1
  527. package/dist/components/cards/RuiCard.vue.js +0 -11
  528. package/dist/components/cards/RuiCard.vue.js.map +0 -1
  529. package/dist/components/cards/RuiCard.vue2.js +0 -88
  530. package/dist/components/cards/RuiCard.vue2.js.map +0 -1
  531. package/dist/components/cards/RuiCard.vue3.js +0 -40
  532. package/dist/components/cards/RuiCard.vue3.js.map +0 -1
  533. package/dist/components/cards/RuiCardHeader.vue.js +0 -11
  534. package/dist/components/cards/RuiCardHeader.vue.js.map +0 -1
  535. package/dist/components/cards/RuiCardHeader.vue2.js +0 -51
  536. package/dist/components/cards/RuiCardHeader.vue2.js.map +0 -1
  537. package/dist/components/cards/RuiCardHeader.vue3.js +0 -27
  538. package/dist/components/cards/RuiCardHeader.vue3.js.map +0 -1
  539. package/dist/components/chips/RuiChip.vue.js +0 -11
  540. package/dist/components/chips/RuiChip.vue.js.map +0 -1
  541. package/dist/components/chips/RuiChip.vue2.js +0 -90
  542. package/dist/components/chips/RuiChip.vue2.js.map +0 -1
  543. package/dist/components/chips/RuiChip.vue3.js +0 -88
  544. package/dist/components/chips/RuiChip.vue3.js.map +0 -1
  545. package/dist/components/color-picker/RuiColorBoard.vue.js +0 -11
  546. package/dist/components/color-picker/RuiColorBoard.vue.js.map +0 -1
  547. package/dist/components/color-picker/RuiColorBoard.vue2.js +0 -102
  548. package/dist/components/color-picker/RuiColorBoard.vue2.js.map +0 -1
  549. package/dist/components/color-picker/RuiColorBoard.vue3.js +0 -18
  550. package/dist/components/color-picker/RuiColorBoard.vue3.js.map +0 -1
  551. package/dist/components/color-picker/RuiColorDisplay.vue.js +0 -47
  552. package/dist/components/color-picker/RuiColorDisplay.vue.js.map +0 -1
  553. package/dist/components/color-picker/RuiColorDisplay.vue2.js +0 -5
  554. package/dist/components/color-picker/RuiColorDisplay.vue2.js.map +0 -1
  555. package/dist/components/color-picker/RuiColorHue.vue.js +0 -11
  556. package/dist/components/color-picker/RuiColorHue.vue.js.map +0 -1
  557. package/dist/components/color-picker/RuiColorHue.vue2.js +0 -92
  558. package/dist/components/color-picker/RuiColorHue.vue2.js.map +0 -1
  559. package/dist/components/color-picker/RuiColorHue.vue3.js +0 -12
  560. package/dist/components/color-picker/RuiColorHue.vue3.js.map +0 -1
  561. package/dist/components/color-picker/RuiColorInput.vue.js +0 -141
  562. package/dist/components/color-picker/RuiColorInput.vue.js.map +0 -1
  563. package/dist/components/color-picker/RuiColorInput.vue2.js +0 -5
  564. package/dist/components/color-picker/RuiColorInput.vue2.js.map +0 -1
  565. package/dist/components/color-picker/RuiColorPicker.vue.js +0 -81
  566. package/dist/components/color-picker/RuiColorPicker.vue.js.map +0 -1
  567. package/dist/components/color-picker/RuiColorPicker.vue2.js +0 -5
  568. package/dist/components/color-picker/RuiColorPicker.vue2.js.map +0 -1
  569. package/dist/components/date-time-picker/RuiDateTimePicker.vue.js +0 -11
  570. package/dist/components/date-time-picker/RuiDateTimePicker.vue.js.map +0 -1
  571. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +0 -394
  572. package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +0 -1
  573. package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js +0 -66
  574. package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js.map +0 -1
  575. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +0 -120
  576. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js.map +0 -1
  577. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js +0 -5
  578. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js.map +0 -1
  579. package/dist/components/divider/RuiDivider.vue.js +0 -25
  580. package/dist/components/divider/RuiDivider.vue.js.map +0 -1
  581. package/dist/components/divider/RuiDivider.vue2.js +0 -5
  582. package/dist/components/divider/RuiDivider.vue2.js.map +0 -1
  583. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js +0 -11
  584. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js.map +0 -1
  585. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +0 -594
  586. package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +0 -1
  587. package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js +0 -60
  588. package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js.map +0 -1
  589. package/dist/components/forms/checkbox/RuiCheckbox.vue.js +0 -11
  590. package/dist/components/forms/checkbox/RuiCheckbox.vue.js.map +0 -1
  591. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +0 -148
  592. package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +0 -1
  593. package/dist/components/forms/checkbox/RuiCheckbox.vue3.js +0 -54
  594. package/dist/components/forms/checkbox/RuiCheckbox.vue3.js.map +0 -1
  595. package/dist/components/forms/radio-button/radio/RuiRadio.vue.js +0 -11
  596. package/dist/components/forms/radio-button/radio/RuiRadio.vue.js.map +0 -1
  597. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +0 -122
  598. package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +0 -1
  599. package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js +0 -54
  600. package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js.map +0 -1
  601. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js +0 -11
  602. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js.map +0 -1
  603. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +0 -84
  604. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +0 -1
  605. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js +0 -9
  606. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js.map +0 -1
  607. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +0 -84
  608. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +0 -1
  609. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js +0 -5
  610. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js.map +0 -1
  611. package/dist/components/forms/select/RuiMenuSelect.vue.js +0 -11
  612. package/dist/components/forms/select/RuiMenuSelect.vue.js.map +0 -1
  613. package/dist/components/forms/select/RuiMenuSelect.vue2.js +0 -310
  614. package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +0 -1
  615. package/dist/components/forms/select/RuiMenuSelect.vue3.js +0 -60
  616. package/dist/components/forms/select/RuiMenuSelect.vue3.js.map +0 -1
  617. package/dist/components/forms/select/RuiSimpleSelect.vue.js +0 -11
  618. package/dist/components/forms/select/RuiSimpleSelect.vue.js.map +0 -1
  619. package/dist/components/forms/select/RuiSimpleSelect.vue2.js +0 -62
  620. package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +0 -1
  621. package/dist/components/forms/select/RuiSimpleSelect.vue3.js +0 -21
  622. package/dist/components/forms/select/RuiSimpleSelect.vue3.js.map +0 -1
  623. package/dist/components/forms/slider/RuiSlider.vue.js +0 -11
  624. package/dist/components/forms/slider/RuiSlider.vue.js.map +0 -1
  625. package/dist/components/forms/slider/RuiSlider.vue2.js +0 -173
  626. package/dist/components/forms/slider/RuiSlider.vue2.js.map +0 -1
  627. package/dist/components/forms/slider/RuiSlider.vue3.js +0 -80
  628. package/dist/components/forms/slider/RuiSlider.vue3.js.map +0 -1
  629. package/dist/components/forms/switch/RuiSwitch.vue.js +0 -11
  630. package/dist/components/forms/switch/RuiSwitch.vue.js.map +0 -1
  631. package/dist/components/forms/switch/RuiSwitch.vue2.js +0 -99
  632. package/dist/components/forms/switch/RuiSwitch.vue2.js.map +0 -1
  633. package/dist/components/forms/switch/RuiSwitch.vue3.js +0 -54
  634. package/dist/components/forms/switch/RuiSwitch.vue3.js.map +0 -1
  635. package/dist/components/forms/text-area/RuiTextArea.vue.js +0 -11
  636. package/dist/components/forms/text-area/RuiTextArea.vue.js.map +0 -1
  637. package/dist/components/forms/text-area/RuiTextArea.vue2.js +0 -229
  638. package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +0 -1
  639. package/dist/components/forms/text-area/RuiTextArea.vue3.js +0 -92
  640. package/dist/components/forms/text-area/RuiTextArea.vue3.js.map +0 -1
  641. package/dist/components/forms/text-field/RuiTextField.vue.js +0 -11
  642. package/dist/components/forms/text-field/RuiTextField.vue.js.map +0 -1
  643. package/dist/components/forms/text-field/RuiTextField.vue2.js +0 -202
  644. package/dist/components/forms/text-field/RuiTextField.vue2.js.map +0 -1
  645. package/dist/components/forms/text-field/RuiTextField.vue3.js +0 -89
  646. package/dist/components/forms/text-field/RuiTextField.vue3.js.map +0 -1
  647. package/dist/components/helpers/RuiFormTextDetail.vue.js +0 -50
  648. package/dist/components/helpers/RuiFormTextDetail.vue.js.map +0 -1
  649. package/dist/components/helpers/RuiFormTextDetail.vue2.js +0 -5
  650. package/dist/components/helpers/RuiFormTextDetail.vue2.js.map +0 -1
  651. package/dist/components/icons/RuiIcon.vue.js +0 -11
  652. package/dist/components/icons/RuiIcon.vue.js.map +0 -1
  653. package/dist/components/icons/RuiIcon.vue2.js +0 -57
  654. package/dist/components/icons/RuiIcon.vue2.js.map +0 -1
  655. package/dist/components/icons/RuiIcon.vue3.js +0 -29
  656. package/dist/components/icons/RuiIcon.vue3.js.map +0 -1
  657. package/dist/components/index.js.map +0 -1
  658. package/dist/components/loaders/RuiSkeletonBase.vue.js +0 -11
  659. package/dist/components/loaders/RuiSkeletonBase.vue.js.map +0 -1
  660. package/dist/components/loaders/RuiSkeletonBase.vue2.js +0 -22
  661. package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +0 -1
  662. package/dist/components/loaders/RuiSkeletonBase.vue3.js +0 -12
  663. package/dist/components/loaders/RuiSkeletonBase.vue3.js.map +0 -1
  664. package/dist/components/loaders/RuiSkeletonLoader.vue.js +0 -11
  665. package/dist/components/loaders/RuiSkeletonLoader.vue.js.map +0 -1
  666. package/dist/components/loaders/RuiSkeletonLoader.vue2.js +0 -47
  667. package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +0 -1
  668. package/dist/components/loaders/RuiSkeletonLoader.vue3.js +0 -33
  669. package/dist/components/loaders/RuiSkeletonLoader.vue3.js.map +0 -1
  670. package/dist/components/logos/RuiLogo.vue.js +0 -110
  671. package/dist/components/logos/RuiLogo.vue.js.map +0 -1
  672. package/dist/components/logos/RuiLogo.vue2.js +0 -5
  673. package/dist/components/logos/RuiLogo.vue2.js.map +0 -1
  674. package/dist/components/logos/logo.svg.js +0 -5
  675. package/dist/components/logos/logo.svg.js.map +0 -1
  676. package/dist/components/overlays/badge/RuiBadge.vue.js +0 -11
  677. package/dist/components/overlays/badge/RuiBadge.vue.js.map +0 -1
  678. package/dist/components/overlays/badge/RuiBadge.vue2.js +0 -93
  679. package/dist/components/overlays/badge/RuiBadge.vue2.js.map +0 -1
  680. package/dist/components/overlays/badge/RuiBadge.vue3.js +0 -77
  681. package/dist/components/overlays/badge/RuiBadge.vue3.js.map +0 -1
  682. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +0 -45
  683. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +0 -1
  684. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js +0 -5
  685. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js.map +0 -1
  686. package/dist/components/overlays/dialog/RuiDialog.vue.js +0 -11
  687. package/dist/components/overlays/dialog/RuiDialog.vue.js.map +0 -1
  688. package/dist/components/overlays/dialog/RuiDialog.vue2.js +0 -195
  689. package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +0 -1
  690. package/dist/components/overlays/dialog/RuiDialog.vue3.js +0 -18
  691. package/dist/components/overlays/dialog/RuiDialog.vue3.js.map +0 -1
  692. package/dist/components/overlays/menu/RuiMenu.vue.js +0 -11
  693. package/dist/components/overlays/menu/RuiMenu.vue.js.map +0 -1
  694. package/dist/components/overlays/menu/RuiMenu.vue2.js +0 -214
  695. package/dist/components/overlays/menu/RuiMenu.vue2.js.map +0 -1
  696. package/dist/components/overlays/menu/RuiMenu.vue3.js +0 -21
  697. package/dist/components/overlays/menu/RuiMenu.vue3.js.map +0 -1
  698. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js +0 -11
  699. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js.map +0 -1
  700. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +0 -164
  701. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +0 -1
  702. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js +0 -28
  703. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js.map +0 -1
  704. package/dist/components/overlays/notification/RuiNotification.vue.js +0 -79
  705. package/dist/components/overlays/notification/RuiNotification.vue.js.map +0 -1
  706. package/dist/components/overlays/notification/RuiNotification.vue2.js +0 -5
  707. package/dist/components/overlays/notification/RuiNotification.vue2.js.map +0 -1
  708. package/dist/components/overlays/tooltip/RuiTooltip.vue.js +0 -11
  709. package/dist/components/overlays/tooltip/RuiTooltip.vue.js.map +0 -1
  710. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +0 -112
  711. package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +0 -1
  712. package/dist/components/overlays/tooltip/RuiTooltip.vue3.js +0 -27
  713. package/dist/components/overlays/tooltip/RuiTooltip.vue3.js.map +0 -1
  714. package/dist/components/progress/RuiProgress.vue.js +0 -11
  715. package/dist/components/progress/RuiProgress.vue.js.map +0 -1
  716. package/dist/components/progress/RuiProgress.vue2.js +0 -92
  717. package/dist/components/progress/RuiProgress.vue2.js.map +0 -1
  718. package/dist/components/progress/RuiProgress.vue3.js +0 -48
  719. package/dist/components/progress/RuiProgress.vue3.js.map +0 -1
  720. package/dist/components/steppers/RuiFooterStepper.vue.js +0 -11
  721. package/dist/components/steppers/RuiFooterStepper.vue.js.map +0 -1
  722. package/dist/components/steppers/RuiFooterStepper.vue2.js +0 -150
  723. package/dist/components/steppers/RuiFooterStepper.vue2.js.map +0 -1
  724. package/dist/components/steppers/RuiFooterStepper.vue3.js +0 -31
  725. package/dist/components/steppers/RuiFooterStepper.vue3.js.map +0 -1
  726. package/dist/components/steppers/RuiStepper.vue.js +0 -11
  727. package/dist/components/steppers/RuiStepper.vue.js.map +0 -1
  728. package/dist/components/steppers/RuiStepper.vue2.js +0 -133
  729. package/dist/components/steppers/RuiStepper.vue2.js.map +0 -1
  730. package/dist/components/steppers/RuiStepper.vue3.js +0 -58
  731. package/dist/components/steppers/RuiStepper.vue3.js.map +0 -1
  732. package/dist/components/steppers/RuiStepperCustomIcon.vue.js +0 -11
  733. package/dist/components/steppers/RuiStepperCustomIcon.vue.js.map +0 -1
  734. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +0 -38
  735. package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +0 -1
  736. package/dist/components/steppers/RuiStepperCustomIcon.vue3.js +0 -15
  737. package/dist/components/steppers/RuiStepperCustomIcon.vue3.js.map +0 -1
  738. package/dist/components/steppers/RuiStepperIcon.vue.js +0 -11
  739. package/dist/components/steppers/RuiStepperIcon.vue.js.map +0 -1
  740. package/dist/components/steppers/RuiStepperIcon.vue2.js +0 -43
  741. package/dist/components/steppers/RuiStepperIcon.vue2.js.map +0 -1
  742. package/dist/components/steppers/RuiStepperIcon.vue3.js +0 -21
  743. package/dist/components/steppers/RuiStepperIcon.vue3.js.map +0 -1
  744. package/dist/components/tables/RuiDataTable.vue.js +0 -11
  745. package/dist/components/tables/RuiDataTable.vue.js.map +0 -1
  746. package/dist/components/tables/RuiDataTable.vue2.js +0 -541
  747. package/dist/components/tables/RuiDataTable.vue2.js.map +0 -1
  748. package/dist/components/tables/RuiDataTable.vue3.js +0 -76
  749. package/dist/components/tables/RuiDataTable.vue3.js.map +0 -1
  750. package/dist/components/tables/RuiExpandButton.vue.js +0 -11
  751. package/dist/components/tables/RuiExpandButton.vue.js.map +0 -1
  752. package/dist/components/tables/RuiExpandButton.vue2.js +0 -44
  753. package/dist/components/tables/RuiExpandButton.vue2.js.map +0 -1
  754. package/dist/components/tables/RuiExpandButton.vue3.js +0 -15
  755. package/dist/components/tables/RuiExpandButton.vue3.js.map +0 -1
  756. package/dist/components/tables/RuiTableHead.vue.js +0 -11
  757. package/dist/components/tables/RuiTableHead.vue.js.map +0 -1
  758. package/dist/components/tables/RuiTableHead.vue2.js +0 -195
  759. package/dist/components/tables/RuiTableHead.vue2.js.map +0 -1
  760. package/dist/components/tables/RuiTableHead.vue3.js +0 -69
  761. package/dist/components/tables/RuiTableHead.vue3.js.map +0 -1
  762. package/dist/components/tables/RuiTablePagination.vue.js +0 -11
  763. package/dist/components/tables/RuiTablePagination.vue.js.map +0 -1
  764. package/dist/components/tables/RuiTablePagination.vue2.js +0 -204
  765. package/dist/components/tables/RuiTablePagination.vue2.js.map +0 -1
  766. package/dist/components/tables/RuiTablePagination.vue3.js +0 -28
  767. package/dist/components/tables/RuiTablePagination.vue3.js.map +0 -1
  768. package/dist/components/tables/table_no_data_placeholder.svg.js +0 -5
  769. package/dist/components/tables/table_no_data_placeholder.svg.js.map +0 -1
  770. package/dist/components/tables/table_no_data_placeholder_dark.svg.js +0 -5
  771. package/dist/components/tables/table_no_data_placeholder_dark.svg.js.map +0 -1
  772. package/dist/components/tabs/tab/RuiTab.vue.js +0 -11
  773. package/dist/components/tabs/tab/RuiTab.vue.js.map +0 -1
  774. package/dist/components/tabs/tab/RuiTab.vue2.js +0 -167
  775. package/dist/components/tabs/tab/RuiTab.vue2.js.map +0 -1
  776. package/dist/components/tabs/tab/RuiTab.vue3.js +0 -17
  777. package/dist/components/tabs/tab/RuiTab.vue3.js.map +0 -1
  778. package/dist/components/tabs/tab-item/RuiTabItem.vue.js +0 -11
  779. package/dist/components/tabs/tab-item/RuiTabItem.vue.js.map +0 -1
  780. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +0 -52
  781. package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +0 -1
  782. package/dist/components/tabs/tab-item/RuiTabItem.vue3.js +0 -9
  783. package/dist/components/tabs/tab-item/RuiTabItem.vue3.js.map +0 -1
  784. package/dist/components/tabs/tab-items/RuiTabItems.vue.js +0 -11
  785. package/dist/components/tabs/tab-items/RuiTabItems.vue.js.map +0 -1
  786. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +0 -90
  787. package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +0 -1
  788. package/dist/components/tabs/tab-items/RuiTabItems.vue3.js +0 -9
  789. package/dist/components/tabs/tab-items/RuiTabItems.vue3.js.map +0 -1
  790. package/dist/components/tabs/tabs/RuiTabs.vue.js +0 -11
  791. package/dist/components/tabs/tabs/RuiTabs.vue.js.map +0 -1
  792. package/dist/components/tabs/tabs/RuiTabs.vue2.js +0 -288
  793. package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +0 -1
  794. package/dist/components/tabs/tabs/RuiTabs.vue3.js +0 -20
  795. package/dist/components/tabs/tabs/RuiTabs.vue3.js.map +0 -1
  796. package/dist/components/time-picker/RuiTimePicker.vue.js +0 -11
  797. package/dist/components/time-picker/RuiTimePicker.vue.js.map +0 -1
  798. package/dist/components/time-picker/RuiTimePicker.vue2.js +0 -463
  799. package/dist/components/time-picker/RuiTimePicker.vue2.js.map +0 -1
  800. package/dist/components/time-picker/RuiTimePicker.vue3.js +0 -21
  801. package/dist/components/time-picker/RuiTimePicker.vue3.js.map +0 -1
  802. package/dist/composables/forms/use-label-with-quote.js +0 -14
  803. package/dist/composables/forms/use-label-with-quote.js.map +0 -1
  804. package/dist/composables/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendar.js","names":[],"sources":["../../../src/components/calendar/RuiCalendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, provide, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport RuiCalendarGrid from './RuiCalendarGrid.vue';\nimport RuiCalendarHeader from './RuiCalendarHeader.vue';\n\nexport interface CalendarProps {\n maxDate?: Date | number;\n minDate?: Date | number;\n allowEmpty?: boolean;\n borderless?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCalendar',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>({ required: false });\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: false, default: false });\n\nconst { maxDate, minDate, allowEmpty = false, borderless = false } = defineProps<CalendarProps>();\n\nconst emit = defineEmits<{\n 'update:pages': [{ title: string }[]];\n}>();\n\nconst currentDate = ref<Date>(isDefined(model) ? new Date(get(model)) : new Date());\nconst selectedDate = ref<Date | undefined>(isDefined(model) ? new Date(get(model)) : undefined);\nconst viewMonth = ref<number>(get(currentDate).getMonth());\nconst viewYear = ref<number>(get(currentDate).getFullYear());\n\nconst { isDark } = useRotkiTheme();\n\nconst calendarStyles = tv({\n base: 'w-[18.75rem] bg-white dark:bg-rui-grey-900 overflow-hidden',\n variants: {\n bordered: {\n true: 'rounded-md shadow-sm border border-rui-grey-200 dark:border-rui-grey-800',\n },\n },\n});\n\nconst ui = computed<string>(() => calendarStyles({ bordered: !borderless }));\n\nconst monthTitle = computed<string>(() => {\n const date = new Date(get(viewYear), get(viewMonth));\n return date.toLocaleString('default', { month: 'long', year: 'numeric' });\n});\n\nprovide(CalendarStateSymbol.valueOf(), {\n viewMonth,\n viewYear,\n selectedDate,\n maxDate: computed(() => (maxDate ? new Date(maxDate) : undefined)),\n minDate: computed(() => (minDate ? new Date(minDate) : undefined)),\n isDark,\n allowEmpty,\n} satisfies RuiCalendarState);\n\nfunction moveMonth(delta: number): void {\n let newMonth = get(viewMonth) + delta;\n let newYear = get(viewYear);\n\n if (newMonth > 11) {\n newMonth = 0;\n newYear++;\n }\n else if (newMonth < 0) {\n newMonth = 11;\n newYear--;\n }\n\n set(viewMonth, newMonth);\n set(viewYear, newYear);\n\n emit('update:pages', [{ title: get(monthTitle) }]);\n}\n\nfunction move(date: Date | number): void {\n const newDate = new Date(date);\n set(viewMonth, newDate.getMonth());\n set(viewYear, newDate.getFullYear());\n}\n\nfunction selectMonth(selection: MonthYearSelection): void {\n set(viewMonth, selection.month);\n set(viewYear, selection.year);\n\n // If there's a selected date, update it with the new year/month\n if (isDefined(selectedDate)) {\n const current = get(selectedDate);\n const currentDay = current.getDate();\n // Handle day overflow (e.g., Jan 31 -> Feb 28) by checking BEFORE setting month\n const daysInNewMonth = new Date(selection.year, selection.month + 1, 0).getDate();\n const adjustedDay = Math.min(currentDay, daysInNewMonth);\n\n const newDate = new Date(current);\n newDate.setFullYear(selection.year);\n newDate.setDate(1); // Set to 1st to avoid overflow when changing month\n newDate.setMonth(selection.month);\n newDate.setDate(adjustedDay);\n set(selectedDate, newDate);\n }\n}\n\nwatch(selectedDate, (date) => {\n if (!date && !allowEmpty)\n return;\n\n if (date) {\n set(model, new Date(date));\n\n if (get(viewMonth) !== date.getMonth()) {\n set(viewMonth, date.getMonth());\n }\n\n if (get(viewYear) !== date.getFullYear()) {\n set(viewYear, date.getFullYear());\n }\n }\n else {\n set(model, undefined);\n }\n});\n\nwatch(model, (newValue) => {\n if (newValue === undefined) {\n set(selectedDate, undefined);\n return;\n }\n\n const date = new Date(newValue);\n\n if (isDefined(selectedDate) && get(selectedDate).getTime() !== date.getTime()) {\n set(selectedDate, new Date(newValue));\n set(viewMonth, date.getMonth());\n set(viewYear, date.getFullYear());\n }\n});\n\ndefineExpose({\n move,\n});\n</script>\n\n<template>\n <div :class=\"ui\">\n <RuiCalendarHeader\n v-model:menu-open=\"isMenuOpen\"\n :title=\"monthTitle\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @prev-month=\"moveMonth(-1)\"\n @next-month=\"moveMonth(1)\"\n @select-month=\"selectMonth($event)\"\n />\n\n <RuiCalendarGrid\n v-model=\"selectedDate\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n />\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,151 @@
1
+ import { useRotkiTheme } from "../../composables/theme.js";
2
+ import { tv } from "../../utils/tv.js";
3
+ import { CalendarStateSymbol } from "./state.js";
4
+ import RuiCalendarGrid_default from "./RuiCalendarGrid.js";
5
+ import RuiCalendarHeader_default from "./RuiCalendarHeader.js";
6
+ import { computed, createElementBlock, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, provide, ref, useModel, watch } from "vue";
7
+ import { get, isDefined, set } from "@vueuse/core";
8
+ //#region src/components/calendar/RuiCalendar.vue?vue&type=script&setup=true&lang.ts
9
+ var RuiCalendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
10
+ name: "RuiCalendar",
11
+ inheritAttrs: false,
12
+ __name: "RuiCalendar",
13
+ props: /* @__PURE__ */ mergeModels({
14
+ maxDate: {},
15
+ minDate: {},
16
+ allowEmpty: {
17
+ type: Boolean,
18
+ default: false
19
+ },
20
+ borderless: {
21
+ type: Boolean,
22
+ default: false
23
+ }
24
+ }, {
25
+ "modelValue": { required: false },
26
+ "modelModifiers": {},
27
+ "menu-open": {
28
+ type: Boolean,
29
+ required: false,
30
+ default: false
31
+ },
32
+ "menu-openModifiers": {}
33
+ }),
34
+ emits: /* @__PURE__ */ mergeModels(["update:pages"], ["update:modelValue", "update:menu-open"]),
35
+ setup(__props, { expose: __expose, emit: __emit }) {
36
+ const model = useModel(__props, "modelValue");
37
+ const isMenuOpen = useModel(__props, "menu-open");
38
+ const emit = __emit;
39
+ const currentDate = ref(isDefined(model) ? new Date(get(model)) : /* @__PURE__ */ new Date());
40
+ const selectedDate = ref(isDefined(model) ? new Date(get(model)) : void 0);
41
+ const viewMonth = ref(get(currentDate).getMonth());
42
+ const viewYear = ref(get(currentDate).getFullYear());
43
+ const { isDark } = useRotkiTheme();
44
+ const calendarStyles = tv({
45
+ base: "w-[18.75rem] bg-white dark:bg-rui-grey-900 overflow-hidden",
46
+ variants: { bordered: { true: "rounded-md shadow-sm border border-rui-grey-200 dark:border-rui-grey-800" } }
47
+ });
48
+ const ui = computed(() => calendarStyles({ bordered: !__props.borderless }));
49
+ const monthTitle = computed(() => {
50
+ return new Date(get(viewYear), get(viewMonth)).toLocaleString("default", {
51
+ month: "long",
52
+ year: "numeric"
53
+ });
54
+ });
55
+ provide(CalendarStateSymbol.valueOf(), {
56
+ viewMonth,
57
+ viewYear,
58
+ selectedDate,
59
+ maxDate: computed(() => __props.maxDate ? new Date(__props.maxDate) : void 0),
60
+ minDate: computed(() => __props.minDate ? new Date(__props.minDate) : void 0),
61
+ isDark,
62
+ allowEmpty: __props.allowEmpty
63
+ });
64
+ function moveMonth(delta) {
65
+ let newMonth = get(viewMonth) + delta;
66
+ let newYear = get(viewYear);
67
+ if (newMonth > 11) {
68
+ newMonth = 0;
69
+ newYear++;
70
+ } else if (newMonth < 0) {
71
+ newMonth = 11;
72
+ newYear--;
73
+ }
74
+ set(viewMonth, newMonth);
75
+ set(viewYear, newYear);
76
+ emit("update:pages", [{ title: get(monthTitle) }]);
77
+ }
78
+ function move(date) {
79
+ const newDate = new Date(date);
80
+ set(viewMonth, newDate.getMonth());
81
+ set(viewYear, newDate.getFullYear());
82
+ }
83
+ function selectMonth(selection) {
84
+ set(viewMonth, selection.month);
85
+ set(viewYear, selection.year);
86
+ if (isDefined(selectedDate)) {
87
+ const current = get(selectedDate);
88
+ const currentDay = current.getDate();
89
+ const daysInNewMonth = new Date(selection.year, selection.month + 1, 0).getDate();
90
+ const adjustedDay = Math.min(currentDay, daysInNewMonth);
91
+ const newDate = new Date(current);
92
+ newDate.setFullYear(selection.year);
93
+ newDate.setDate(1);
94
+ newDate.setMonth(selection.month);
95
+ newDate.setDate(adjustedDay);
96
+ set(selectedDate, newDate);
97
+ }
98
+ }
99
+ watch(selectedDate, (date) => {
100
+ if (!date && !__props.allowEmpty) return;
101
+ if (date) {
102
+ set(model, new Date(date));
103
+ if (get(viewMonth) !== date.getMonth()) set(viewMonth, date.getMonth());
104
+ if (get(viewYear) !== date.getFullYear()) set(viewYear, date.getFullYear());
105
+ } else set(model, void 0);
106
+ });
107
+ watch(model, (newValue) => {
108
+ if (newValue === void 0) {
109
+ set(selectedDate, void 0);
110
+ return;
111
+ }
112
+ const date = new Date(newValue);
113
+ if (isDefined(selectedDate) && get(selectedDate).getTime() !== date.getTime()) {
114
+ set(selectedDate, new Date(newValue));
115
+ set(viewMonth, date.getMonth());
116
+ set(viewYear, date.getFullYear());
117
+ }
118
+ });
119
+ __expose({ move });
120
+ return (_ctx, _cache) => {
121
+ return openBlock(), createElementBlock("div", { class: normalizeClass(ui.value) }, [createVNode(RuiCalendarHeader_default, {
122
+ "menu-open": isMenuOpen.value,
123
+ "onUpdate:menuOpen": _cache[0] || (_cache[0] = ($event) => isMenuOpen.value = $event),
124
+ title: monthTitle.value,
125
+ "view-month": viewMonth.value,
126
+ "view-year": viewYear.value,
127
+ onPrevMonth: _cache[1] || (_cache[1] = ($event) => moveMonth(-1)),
128
+ onNextMonth: _cache[2] || (_cache[2] = ($event) => moveMonth(1)),
129
+ onSelectMonth: _cache[3] || (_cache[3] = ($event) => selectMonth($event))
130
+ }, null, 8, [
131
+ "menu-open",
132
+ "title",
133
+ "view-month",
134
+ "view-year"
135
+ ]), createVNode(RuiCalendarGrid_default, {
136
+ modelValue: selectedDate.value,
137
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => selectedDate.value = $event),
138
+ "view-month": viewMonth.value,
139
+ "view-year": viewYear.value
140
+ }, null, 8, [
141
+ "modelValue",
142
+ "view-month",
143
+ "view-year"
144
+ ])], 2);
145
+ };
146
+ }
147
+ });
148
+ //#endregion
149
+ export { RuiCalendar_vue_vue_type_script_setup_true_lang_default as default };
150
+
151
+ //# sourceMappingURL=RuiCalendar.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/RuiCalendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, provide, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport RuiCalendarGrid from './RuiCalendarGrid.vue';\nimport RuiCalendarHeader from './RuiCalendarHeader.vue';\n\nexport interface CalendarProps {\n maxDate?: Date | number;\n minDate?: Date | number;\n allowEmpty?: boolean;\n borderless?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCalendar',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>({ required: false });\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: false, default: false });\n\nconst { maxDate, minDate, allowEmpty = false, borderless = false } = defineProps<CalendarProps>();\n\nconst emit = defineEmits<{\n 'update:pages': [{ title: string }[]];\n}>();\n\nconst currentDate = ref<Date>(isDefined(model) ? new Date(get(model)) : new Date());\nconst selectedDate = ref<Date | undefined>(isDefined(model) ? new Date(get(model)) : undefined);\nconst viewMonth = ref<number>(get(currentDate).getMonth());\nconst viewYear = ref<number>(get(currentDate).getFullYear());\n\nconst { isDark } = useRotkiTheme();\n\nconst calendarStyles = tv({\n base: 'w-[18.75rem] bg-white dark:bg-rui-grey-900 overflow-hidden',\n variants: {\n bordered: {\n true: 'rounded-md shadow-sm border border-rui-grey-200 dark:border-rui-grey-800',\n },\n },\n});\n\nconst ui = computed<string>(() => calendarStyles({ bordered: !borderless }));\n\nconst monthTitle = computed<string>(() => {\n const date = new Date(get(viewYear), get(viewMonth));\n return date.toLocaleString('default', { month: 'long', year: 'numeric' });\n});\n\nprovide(CalendarStateSymbol.valueOf(), {\n viewMonth,\n viewYear,\n selectedDate,\n maxDate: computed(() => (maxDate ? new Date(maxDate) : undefined)),\n minDate: computed(() => (minDate ? new Date(minDate) : undefined)),\n isDark,\n allowEmpty,\n} satisfies RuiCalendarState);\n\nfunction moveMonth(delta: number): void {\n let newMonth = get(viewMonth) + delta;\n let newYear = get(viewYear);\n\n if (newMonth > 11) {\n newMonth = 0;\n newYear++;\n }\n else if (newMonth < 0) {\n newMonth = 11;\n newYear--;\n }\n\n set(viewMonth, newMonth);\n set(viewYear, newYear);\n\n emit('update:pages', [{ title: get(monthTitle) }]);\n}\n\nfunction move(date: Date | number): void {\n const newDate = new Date(date);\n set(viewMonth, newDate.getMonth());\n set(viewYear, newDate.getFullYear());\n}\n\nfunction selectMonth(selection: MonthYearSelection): void {\n set(viewMonth, selection.month);\n set(viewYear, selection.year);\n\n // If there's a selected date, update it with the new year/month\n if (isDefined(selectedDate)) {\n const current = get(selectedDate);\n const currentDay = current.getDate();\n // Handle day overflow (e.g., Jan 31 -> Feb 28) by checking BEFORE setting month\n const daysInNewMonth = new Date(selection.year, selection.month + 1, 0).getDate();\n const adjustedDay = Math.min(currentDay, daysInNewMonth);\n\n const newDate = new Date(current);\n newDate.setFullYear(selection.year);\n newDate.setDate(1); // Set to 1st to avoid overflow when changing month\n newDate.setMonth(selection.month);\n newDate.setDate(adjustedDay);\n set(selectedDate, newDate);\n }\n}\n\nwatch(selectedDate, (date) => {\n if (!date && !allowEmpty)\n return;\n\n if (date) {\n set(model, new Date(date));\n\n if (get(viewMonth) !== date.getMonth()) {\n set(viewMonth, date.getMonth());\n }\n\n if (get(viewYear) !== date.getFullYear()) {\n set(viewYear, date.getFullYear());\n }\n }\n else {\n set(model, undefined);\n }\n});\n\nwatch(model, (newValue) => {\n if (newValue === undefined) {\n set(selectedDate, undefined);\n return;\n }\n\n const date = new Date(newValue);\n\n if (isDefined(selectedDate) && get(selectedDate).getTime() !== date.getTime()) {\n set(selectedDate, new Date(newValue));\n set(viewMonth, date.getMonth());\n set(viewYear, date.getFullYear());\n }\n});\n\ndefineExpose({\n move,\n});\n</script>\n\n<template>\n <div :class=\"ui\">\n <RuiCalendarHeader\n v-model:menu-open=\"isMenuOpen\"\n :title=\"monthTitle\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @prev-month=\"moveMonth(-1)\"\n @next-month=\"moveMonth(1)\"\n @select-month=\"selectMonth($event)\"\n />\n\n <RuiCalendarGrid\n v-model=\"selectedDate\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n />\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import RuiCalendarGrid_vue_vue_type_script_setup_true_lang_default from "./RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/calendar/RuiCalendarGrid.vue
3
+ var RuiCalendarGrid_default = RuiCalendarGrid_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiCalendarGrid_default as default };
6
+
7
+ //# sourceMappingURL=RuiCalendarGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendarGrid.js","names":[],"sources":["../../../src/components/calendar/RuiCalendarGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { inject, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getDaysOfWeek,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { tv } from '@/utils/tv';\n\ndefineOptions({\n name: 'RuiCalendarGrid',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>();\n\nconst { viewMonth, viewYear } = defineProps<{\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Helper functions to reduce duplication\nfunction createDateKey(date: Date): string {\n return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n}\n\n// Pre-calculated constants\nconst daysOfWeek = getDaysOfWeek();\nconst today = new Date();\nconst todayKey = createDateKey(today);\n\nconst dayButton = tv({\n base: 'h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50',\n variants: {\n selected: {\n true: 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90',\n },\n currentMonth: {\n true: 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700',\n false: 'text-gray-400 dark:text-gray-600',\n },\n inRange: {\n false: 'opacity-50 cursor-not-allowed hover:bg-transparent',\n },\n today: {\n true: `relative after:content-[''] after:absolute after:size-1 after:rounded-full after:bottom-1 after:left-1/2 after:-translate-x-1/2 after:bg-rui-primary`,\n },\n },\n compoundVariants: [\n {\n selected: true,\n class: 'text-white dark:text-white',\n },\n ],\n});\n\n// Pre-calculated arrays for performance - using refs for better control\nconst calendarDays = ref<\n Array<{\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n }>\n>([]);\n\nfunction createDayData(\n date: Date,\n isCurrentMonth: boolean,\n modelValue: Date | null | undefined,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): {\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n} {\n const key = createDateKey(date);\n return {\n date,\n isCurrentMonth,\n isInRange: isDateInRangeCheck(date, maxDateValue, minDateValue),\n isSelected: modelValue ? isDateSelectedCheck(date, modelValue) : false,\n isToday: key === todayKey,\n key,\n dayNumber: date.getDate(),\n };\n}\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateCalendarDays(): void {\n const firstDayOfMonth = new Date(viewYear, viewMonth, 1);\n const lastDayOfMonth = new Date(viewYear, viewMonth + 1, 0);\n const daysInMonth = lastDayOfMonth.getDate();\n const startingDayOfWeek = firstDayOfMonth.getDay();\n\n const { maxDate, minDate } = calendarState;\n const modelValue = get(model);\n const maxDateValue = isDefined(maxDate) ? get(maxDate) : null;\n const minDateValue = isDefined(minDate) ? get(minDate) : null;\n\n const result = [];\n\n // Previous month days\n if (startingDayOfWeek > 0) {\n const prevMonthLastDay = new Date(viewYear, viewMonth, 0).getDate();\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(viewYear, viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(viewYear, viewMonth, i, 12, 0, 0, 0);\n result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));\n }\n\n // Next month days\n const totalDaysSoFar = result.length;\n const daysToAdd = 42 - totalDaysSoFar;\n for (let i = 1; i <= daysToAdd; i++) {\n const date = new Date(viewYear, viewMonth + 1, i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n\n set(calendarDays, result);\n}\n\nfunction isDateInRangeCheck(\n date: Date,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): boolean {\n if (maxDateValue && date > maxDateValue)\n return false;\n if (minDateValue && date < minDateValue)\n return false;\n return true;\n}\n\nfunction isDateSelectedCheck(date: Date, modelValue: Date): boolean {\n return (\n date.getFullYear() === modelValue.getFullYear() &&\n date.getMonth() === modelValue.getMonth() &&\n date.getDate() === modelValue.getDate()\n );\n}\n\nfunction selectDate(dayData: { date: Date; isInRange: boolean; isSelected: boolean }): void {\n if (!dayData.isInRange)\n return;\n\n let updateModel: Date | undefined;\n\n if (dayData.isSelected && calendarState.allowEmpty) {\n updateModel = undefined;\n }\n else if (isDefined(model)) {\n const modelValue = get(model);\n const newDate = new Date(dayData.date);\n newDate.setHours(modelValue.getHours());\n newDate.setMinutes(modelValue.getMinutes());\n newDate.setSeconds(modelValue.getSeconds());\n updateModel = newDate;\n }\n else {\n updateModel = new Date(dayData.date);\n }\n set(model, updateModel);\n}\n\n// Initial calculation\ncalculateCalendarDays();\n\n// Watchers for recalculation only when needed\nwatch([() => viewMonth, () => viewYear], () => {\n calculateCalendarDays();\n});\n\nwatch(model, () => {\n calculateCalendarDays();\n});\n\nwatch(\n [() => calendarState.maxDate, () => calendarState.minDate],\n () => {\n calculateCalendarDays();\n },\n);\n</script>\n\n<template>\n <div class=\"w-full p-2 pt-0\">\n <div class=\"grid grid-cols-7 pb-2\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0.5\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n :data-current-month=\"dayData.isCurrentMonth || undefined\"\n :data-selected=\"dayData.isSelected || undefined\"\n :data-today=\"(dayData.isToday && !dayData.isSelected) || undefined\"\n :class=\"dayButton({\n selected: dayData.isSelected,\n currentMonth: !dayData.isSelected && dayData.isCurrentMonth,\n inRange: dayData.isInRange,\n today: dayData.isToday && !dayData.isSelected,\n })\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,155 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ import { CalendarStateSymbol, getDaysOfWeek } from "./state.js";
3
+ import { Fragment, createElementBlock, createElementVNode, defineComponent, inject, mergeModels, normalizeClass, openBlock, ref, renderList, toDisplayString, unref, useModel, watch, withModifiers } from "vue";
4
+ import { get, isDefined, set } from "@vueuse/core";
5
+ //#region src/components/calendar/RuiCalendarGrid.vue?vue&type=script&setup=true&lang.ts
6
+ var _hoisted_1 = { class: "w-full p-2 pt-0" };
7
+ var _hoisted_2 = { class: "grid grid-cols-7 pb-2" };
8
+ var _hoisted_3 = { class: "grid grid-cols-7 gap-0.5" };
9
+ var _hoisted_4 = [
10
+ "data-id",
11
+ "data-current-month",
12
+ "data-selected",
13
+ "data-today",
14
+ "disabled",
15
+ "onClick"
16
+ ];
17
+ var RuiCalendarGrid_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
18
+ name: "RuiCalendarGrid",
19
+ inheritAttrs: false,
20
+ __name: "RuiCalendarGrid",
21
+ props: /* @__PURE__ */ mergeModels({
22
+ viewMonth: {},
23
+ viewYear: {}
24
+ }, {
25
+ "modelValue": {},
26
+ "modelModifiers": {}
27
+ }),
28
+ emits: ["update:modelValue"],
29
+ setup(__props) {
30
+ const model = useModel(__props, "modelValue");
31
+ const calendarState = inject(CalendarStateSymbol);
32
+ function createDateKey(date) {
33
+ return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
34
+ }
35
+ const daysOfWeek = getDaysOfWeek();
36
+ const todayKey = createDateKey(/* @__PURE__ */ new Date());
37
+ const dayButton = tv({
38
+ base: "h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50",
39
+ variants: {
40
+ selected: { true: "bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90" },
41
+ currentMonth: {
42
+ true: "text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700",
43
+ false: "text-gray-400 dark:text-gray-600"
44
+ },
45
+ inRange: { false: "opacity-50 cursor-not-allowed hover:bg-transparent" },
46
+ today: { true: `relative after:content-[''] after:absolute after:size-1 after:rounded-full after:bottom-1 after:left-1/2 after:-translate-x-1/2 after:bg-rui-primary` }
47
+ },
48
+ compoundVariants: [{
49
+ selected: true,
50
+ class: "text-white dark:text-white"
51
+ }]
52
+ });
53
+ const calendarDays = ref([]);
54
+ function createDayData(date, isCurrentMonth, modelValue, maxDateValue, minDateValue) {
55
+ const key = createDateKey(date);
56
+ return {
57
+ date,
58
+ isCurrentMonth,
59
+ isInRange: isDateInRangeCheck(date, maxDateValue, minDateValue),
60
+ isSelected: modelValue ? isDateSelectedCheck(date, modelValue) : false,
61
+ isToday: key === todayKey,
62
+ key,
63
+ dayNumber: date.getDate()
64
+ };
65
+ }
66
+ function calculateCalendarDays() {
67
+ const firstDayOfMonth = new Date(__props.viewYear, __props.viewMonth, 1);
68
+ const daysInMonth = new Date(__props.viewYear, __props.viewMonth + 1, 0).getDate();
69
+ const startingDayOfWeek = firstDayOfMonth.getDay();
70
+ const { maxDate, minDate } = calendarState;
71
+ const modelValue = get(model);
72
+ const maxDateValue = isDefined(maxDate) ? get(maxDate) : null;
73
+ const minDateValue = isDefined(minDate) ? get(minDate) : null;
74
+ const result = [];
75
+ if (startingDayOfWeek > 0) {
76
+ const prevMonthLastDay = new Date(__props.viewYear, __props.viewMonth, 0).getDate();
77
+ for (let i = startingDayOfWeek - 1; i >= 0; i--) {
78
+ const date = new Date(__props.viewYear, __props.viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);
79
+ result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));
80
+ }
81
+ }
82
+ for (let i = 1; i <= daysInMonth; i++) {
83
+ const date = new Date(__props.viewYear, __props.viewMonth, i, 12, 0, 0, 0);
84
+ result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));
85
+ }
86
+ const daysToAdd = 42 - result.length;
87
+ for (let i = 1; i <= daysToAdd; i++) {
88
+ const date = new Date(__props.viewYear, __props.viewMonth + 1, i, 12, 0, 0, 0);
89
+ result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));
90
+ }
91
+ set(calendarDays, result);
92
+ }
93
+ function isDateInRangeCheck(date, maxDateValue, minDateValue) {
94
+ if (maxDateValue && date > maxDateValue) return false;
95
+ if (minDateValue && date < minDateValue) return false;
96
+ return true;
97
+ }
98
+ function isDateSelectedCheck(date, modelValue) {
99
+ return date.getFullYear() === modelValue.getFullYear() && date.getMonth() === modelValue.getMonth() && date.getDate() === modelValue.getDate();
100
+ }
101
+ function selectDate(dayData) {
102
+ if (!dayData.isInRange) return;
103
+ let updateModel;
104
+ if (dayData.isSelected && calendarState.allowEmpty) updateModel = void 0;
105
+ else if (isDefined(model)) {
106
+ const modelValue = get(model);
107
+ const newDate = new Date(dayData.date);
108
+ newDate.setHours(modelValue.getHours());
109
+ newDate.setMinutes(modelValue.getMinutes());
110
+ newDate.setSeconds(modelValue.getSeconds());
111
+ updateModel = newDate;
112
+ } else updateModel = new Date(dayData.date);
113
+ set(model, updateModel);
114
+ }
115
+ calculateCalendarDays();
116
+ watch([() => __props.viewMonth, () => __props.viewYear], () => {
117
+ calculateCalendarDays();
118
+ });
119
+ watch(model, () => {
120
+ calculateCalendarDays();
121
+ });
122
+ watch([() => calendarState.maxDate, () => calendarState.minDate], () => {
123
+ calculateCalendarDays();
124
+ });
125
+ return (_ctx, _cache) => {
126
+ return openBlock(), createElementBlock("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(daysOfWeek), (day) => {
127
+ return openBlock(), createElementBlock("span", {
128
+ key: day,
129
+ class: "py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400"
130
+ }, toDisplayString(day), 1);
131
+ }), 128))]), createElementVNode("div", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(get)(calendarDays.value), (dayData) => {
132
+ return openBlock(), createElementBlock("button", {
133
+ key: dayData.key,
134
+ type: "button",
135
+ "data-id": dayData.key,
136
+ "data-current-month": dayData.isCurrentMonth || void 0,
137
+ "data-selected": dayData.isSelected || void 0,
138
+ "data-today": dayData.isToday && !dayData.isSelected || void 0,
139
+ class: normalizeClass(unref(dayButton)({
140
+ selected: dayData.isSelected,
141
+ currentMonth: !dayData.isSelected && dayData.isCurrentMonth,
142
+ inRange: dayData.isInRange,
143
+ today: dayData.isToday && !dayData.isSelected
144
+ })),
145
+ disabled: !dayData.isInRange,
146
+ onClick: withModifiers(($event) => selectDate(dayData), ["stop"])
147
+ }, toDisplayString(dayData.dayNumber), 11, _hoisted_4);
148
+ }), 128))])]);
149
+ };
150
+ }
151
+ });
152
+ //#endregion
153
+ export { RuiCalendarGrid_vue_vue_type_script_setup_true_lang_default as default };
154
+
155
+ //# sourceMappingURL=RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/RuiCalendarGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { inject, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getDaysOfWeek,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { tv } from '@/utils/tv';\n\ndefineOptions({\n name: 'RuiCalendarGrid',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>();\n\nconst { viewMonth, viewYear } = defineProps<{\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Helper functions to reduce duplication\nfunction createDateKey(date: Date): string {\n return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n}\n\n// Pre-calculated constants\nconst daysOfWeek = getDaysOfWeek();\nconst today = new Date();\nconst todayKey = createDateKey(today);\n\nconst dayButton = tv({\n base: 'h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50',\n variants: {\n selected: {\n true: 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90',\n },\n currentMonth: {\n true: 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700',\n false: 'text-gray-400 dark:text-gray-600',\n },\n inRange: {\n false: 'opacity-50 cursor-not-allowed hover:bg-transparent',\n },\n today: {\n true: `relative after:content-[''] after:absolute after:size-1 after:rounded-full after:bottom-1 after:left-1/2 after:-translate-x-1/2 after:bg-rui-primary`,\n },\n },\n compoundVariants: [\n {\n selected: true,\n class: 'text-white dark:text-white',\n },\n ],\n});\n\n// Pre-calculated arrays for performance - using refs for better control\nconst calendarDays = ref<\n Array<{\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n }>\n>([]);\n\nfunction createDayData(\n date: Date,\n isCurrentMonth: boolean,\n modelValue: Date | null | undefined,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): {\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n} {\n const key = createDateKey(date);\n return {\n date,\n isCurrentMonth,\n isInRange: isDateInRangeCheck(date, maxDateValue, minDateValue),\n isSelected: modelValue ? isDateSelectedCheck(date, modelValue) : false,\n isToday: key === todayKey,\n key,\n dayNumber: date.getDate(),\n };\n}\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateCalendarDays(): void {\n const firstDayOfMonth = new Date(viewYear, viewMonth, 1);\n const lastDayOfMonth = new Date(viewYear, viewMonth + 1, 0);\n const daysInMonth = lastDayOfMonth.getDate();\n const startingDayOfWeek = firstDayOfMonth.getDay();\n\n const { maxDate, minDate } = calendarState;\n const modelValue = get(model);\n const maxDateValue = isDefined(maxDate) ? get(maxDate) : null;\n const minDateValue = isDefined(minDate) ? get(minDate) : null;\n\n const result = [];\n\n // Previous month days\n if (startingDayOfWeek > 0) {\n const prevMonthLastDay = new Date(viewYear, viewMonth, 0).getDate();\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(viewYear, viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(viewYear, viewMonth, i, 12, 0, 0, 0);\n result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));\n }\n\n // Next month days\n const totalDaysSoFar = result.length;\n const daysToAdd = 42 - totalDaysSoFar;\n for (let i = 1; i <= daysToAdd; i++) {\n const date = new Date(viewYear, viewMonth + 1, i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n\n set(calendarDays, result);\n}\n\nfunction isDateInRangeCheck(\n date: Date,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): boolean {\n if (maxDateValue && date > maxDateValue)\n return false;\n if (minDateValue && date < minDateValue)\n return false;\n return true;\n}\n\nfunction isDateSelectedCheck(date: Date, modelValue: Date): boolean {\n return (\n date.getFullYear() === modelValue.getFullYear() &&\n date.getMonth() === modelValue.getMonth() &&\n date.getDate() === modelValue.getDate()\n );\n}\n\nfunction selectDate(dayData: { date: Date; isInRange: boolean; isSelected: boolean }): void {\n if (!dayData.isInRange)\n return;\n\n let updateModel: Date | undefined;\n\n if (dayData.isSelected && calendarState.allowEmpty) {\n updateModel = undefined;\n }\n else if (isDefined(model)) {\n const modelValue = get(model);\n const newDate = new Date(dayData.date);\n newDate.setHours(modelValue.getHours());\n newDate.setMinutes(modelValue.getMinutes());\n newDate.setSeconds(modelValue.getSeconds());\n updateModel = newDate;\n }\n else {\n updateModel = new Date(dayData.date);\n }\n set(model, updateModel);\n}\n\n// Initial calculation\ncalculateCalendarDays();\n\n// Watchers for recalculation only when needed\nwatch([() => viewMonth, () => viewYear], () => {\n calculateCalendarDays();\n});\n\nwatch(model, () => {\n calculateCalendarDays();\n});\n\nwatch(\n [() => calendarState.maxDate, () => calendarState.minDate],\n () => {\n calculateCalendarDays();\n },\n);\n</script>\n\n<template>\n <div class=\"w-full p-2 pt-0\">\n <div class=\"grid grid-cols-7 pb-2\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0.5\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n :data-current-month=\"dayData.isCurrentMonth || undefined\"\n :data-selected=\"dayData.isSelected || undefined\"\n :data-today=\"(dayData.isToday && !dayData.isSelected) || undefined\"\n :class=\"dayButton({\n selected: dayData.isSelected,\n currentMonth: !dayData.isSelected && dayData.isCurrentMonth,\n inRange: dayData.isInRange,\n today: dayData.isToday && !dayData.isSelected,\n })\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default from "./RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/calendar/RuiCalendarHeader.vue
3
+ var RuiCalendarHeader_default = RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiCalendarHeader_default as default };
6
+
7
+ //# sourceMappingURL=RuiCalendarHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendarHeader.js","names":[],"sources":["../../../src/components/calendar/RuiCalendarHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, inject, ref } from 'vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiCalendarMenu from './RuiCalendarMenu.vue';\n\ndefineOptions({\n name: 'RuiCalendarHeader',\n inheritAttrs: false,\n});\n\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: true });\n\nconst { viewMonth, viewYear } = defineProps<{\n title: string;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n 'prev-month': [];\n 'next-month': [];\n 'select-month': [MonthYearSelection];\n}>();\n\nconst anchorEl = ref<HTMLElement>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\nconst navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst canGoToNext = computed<boolean>(() => {\n const { maxDate } = calendarState;\n if (!isDefined(maxDate)) {\n return true;\n }\n\n const date = new Date(viewYear, viewMonth);\n return date.getTime() < get(maxDate).getTime();\n});\n\nconst canGoToPrev = computed<boolean>(() => {\n const { minDate } = calendarState;\n if (!isDefined(minDate)) {\n return true;\n }\n\n const date = new Date(viewYear, viewMonth);\n return date.getTime() > get(minDate).getTime();\n});\n\nfunction handleTitleClick(e: Event): void {\n set(anchorEl, (e.currentTarget as HTMLElement) ?? undefined);\n set(isMenuOpen, true);\n}\n\nfunction handleDateSelection(selection: MonthYearSelection): void {\n emit('select-month', selection);\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-between px-4 py-3\">\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n icon\n data-id=\"nav-prev\"\n :disabled=\"!canGoToPrev\"\n variant=\"text\"\n @click.stop=\"emit('prev-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <h3\n class=\"font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8\"\n data-id=\"header-title\"\n @click.stop=\"handleTitleClick($event)\"\n >\n {{ title }}\n <RuiIcon\n name=\"lu-chevron-down\"\n size=\"16\"\n class=\"ml-1\"\n />\n </h3>\n\n <RuiCalendarMenu\n v-model=\"isMenuOpen\"\n :anchor-el=\"anchorEl\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @select=\"handleDateSelection($event)\"\n />\n\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n variant=\"text\"\n icon\n data-id=\"nav-next\"\n :disabled=\"!canGoToNext\"\n @click.stop=\"emit('next-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import RuiIcon_default from "../icons/RuiIcon.js";
2
+ import RuiButton_default from "../buttons/button/RuiButton.js";
3
+ import { CalendarStateSymbol } from "./state.js";
4
+ import RuiCalendarMenu_default from "./RuiCalendarMenu.js";
5
+ import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, mergeModels, normalizeClass, openBlock, ref, toDisplayString, useModel, withCtx, withModifiers } from "vue";
6
+ import { get, isDefined, set } from "@vueuse/core";
7
+ //#region src/components/calendar/RuiCalendarHeader.vue?vue&type=script&setup=true&lang.ts
8
+ var _hoisted_1 = { class: "flex items-center justify-between px-4 py-3" };
9
+ var navButtonClass = "p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary";
10
+ var RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ name: "RuiCalendarHeader",
12
+ inheritAttrs: false,
13
+ __name: "RuiCalendarHeader",
14
+ props: /* @__PURE__ */ mergeModels({
15
+ title: {},
16
+ viewMonth: {},
17
+ viewYear: {}
18
+ }, {
19
+ "menu-open": {
20
+ type: Boolean,
21
+ required: true
22
+ },
23
+ "menu-openModifiers": {}
24
+ }),
25
+ emits: /* @__PURE__ */ mergeModels([
26
+ "prev-month",
27
+ "next-month",
28
+ "select-month"
29
+ ], ["update:menu-open"]),
30
+ setup(__props, { emit: __emit }) {
31
+ const isMenuOpen = useModel(__props, "menu-open");
32
+ const emit = __emit;
33
+ const anchorEl = ref();
34
+ const calendarState = inject(CalendarStateSymbol);
35
+ const canGoToNext = computed(() => {
36
+ const { maxDate } = calendarState;
37
+ if (!isDefined(maxDate)) return true;
38
+ return new Date(__props.viewYear, __props.viewMonth).getTime() < get(maxDate).getTime();
39
+ });
40
+ const canGoToPrev = computed(() => {
41
+ const { minDate } = calendarState;
42
+ if (!isDefined(minDate)) return true;
43
+ return new Date(__props.viewYear, __props.viewMonth).getTime() > get(minDate).getTime();
44
+ });
45
+ function handleTitleClick(e) {
46
+ set(anchorEl, e.currentTarget ?? void 0);
47
+ set(isMenuOpen, true);
48
+ }
49
+ function handleDateSelection(selection) {
50
+ emit("select-month", selection);
51
+ }
52
+ return (_ctx, _cache) => {
53
+ return openBlock(), createElementBlock("div", _hoisted_1, [
54
+ createVNode(RuiButton_default, {
55
+ type: "button",
56
+ class: normalizeClass(navButtonClass),
57
+ icon: "",
58
+ "data-id": "nav-prev",
59
+ disabled: !canGoToPrev.value,
60
+ variant: "text",
61
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("prev-month"), ["stop"]))
62
+ }, {
63
+ default: withCtx(() => [createVNode(RuiIcon_default, {
64
+ name: "lu-chevron-left",
65
+ size: "20"
66
+ })]),
67
+ _: 1
68
+ }, 8, ["disabled"]),
69
+ createElementVNode("h3", {
70
+ class: "font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8",
71
+ "data-id": "header-title",
72
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => handleTitleClick($event), ["stop"]))
73
+ }, [createTextVNode(toDisplayString(__props.title) + " ", 1), createVNode(RuiIcon_default, {
74
+ name: "lu-chevron-down",
75
+ size: "16",
76
+ class: "ml-1"
77
+ })]),
78
+ createVNode(RuiCalendarMenu_default, {
79
+ modelValue: isMenuOpen.value,
80
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isMenuOpen.value = $event),
81
+ "anchor-el": anchorEl.value,
82
+ "view-month": __props.viewMonth,
83
+ "view-year": __props.viewYear,
84
+ onSelect: _cache[3] || (_cache[3] = ($event) => handleDateSelection($event))
85
+ }, null, 8, [
86
+ "modelValue",
87
+ "anchor-el",
88
+ "view-month",
89
+ "view-year"
90
+ ]),
91
+ createVNode(RuiButton_default, {
92
+ type: "button",
93
+ class: normalizeClass(navButtonClass),
94
+ variant: "text",
95
+ icon: "",
96
+ "data-id": "nav-next",
97
+ disabled: !canGoToNext.value,
98
+ onClick: _cache[4] || (_cache[4] = withModifiers(($event) => emit("next-month"), ["stop"]))
99
+ }, {
100
+ default: withCtx(() => [createVNode(RuiIcon_default, {
101
+ name: "lu-chevron-right",
102
+ size: "20"
103
+ })]),
104
+ _: 1
105
+ }, 8, ["disabled"])
106
+ ]);
107
+ };
108
+ }
109
+ });
110
+ //#endregion
111
+ export { RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default as default };
112
+
113
+ //# sourceMappingURL=RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/RuiCalendarHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, inject, ref } from 'vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiCalendarMenu from './RuiCalendarMenu.vue';\n\ndefineOptions({\n name: 'RuiCalendarHeader',\n inheritAttrs: false,\n});\n\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: true });\n\nconst { viewMonth, viewYear } = defineProps<{\n title: string;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n 'prev-month': [];\n 'next-month': [];\n 'select-month': [MonthYearSelection];\n}>();\n\nconst anchorEl = ref<HTMLElement>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\nconst navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst canGoToNext = computed<boolean>(() => {\n const { maxDate } = calendarState;\n if (!isDefined(maxDate)) {\n return true;\n }\n\n const date = new Date(viewYear, viewMonth);\n return date.getTime() < get(maxDate).getTime();\n});\n\nconst canGoToPrev = computed<boolean>(() => {\n const { minDate } = calendarState;\n if (!isDefined(minDate)) {\n return true;\n }\n\n const date = new Date(viewYear, viewMonth);\n return date.getTime() > get(minDate).getTime();\n});\n\nfunction handleTitleClick(e: Event): void {\n set(anchorEl, (e.currentTarget as HTMLElement) ?? undefined);\n set(isMenuOpen, true);\n}\n\nfunction handleDateSelection(selection: MonthYearSelection): void {\n emit('select-month', selection);\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-between px-4 py-3\">\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n icon\n data-id=\"nav-prev\"\n :disabled=\"!canGoToPrev\"\n variant=\"text\"\n @click.stop=\"emit('prev-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <h3\n class=\"font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8\"\n data-id=\"header-title\"\n @click.stop=\"handleTitleClick($event)\"\n >\n {{ title }}\n <RuiIcon\n name=\"lu-chevron-down\"\n size=\"16\"\n class=\"ml-1\"\n />\n </h3>\n\n <RuiCalendarMenu\n v-model=\"isMenuOpen\"\n :anchor-el=\"anchorEl\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @select=\"handleDateSelection($event)\"\n />\n\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n variant=\"text\"\n icon\n data-id=\"nav-next\"\n :disabled=\"!canGoToNext\"\n @click.stop=\"emit('next-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n</template>\n"],"mappings":";;;;;;;;AAmCA,IAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAlBvB,MAAM,aAAa,SAAoB,SAAC,YAAgC;EAQxE,MAAM,OAAO;EAMb,MAAM,WAAW,KAAkB;EAEnC,MAAM,gBAAgB,OAAyB,oBAAoB;EAInE,MAAM,cAAc,eAAwB;GAC1C,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,QAAQ,CACrB,QAAO;AAIT,UADa,IAAI,KAAK,QAAA,UAAU,QAAA,UAAU,CAC9B,SAAS,GAAG,IAAI,QAAQ,CAAC,SAAS;IAC9C;EAEF,MAAM,cAAc,eAAwB;GAC1C,MAAM,EAAE,YAAY;AACpB,OAAI,CAAC,UAAU,QAAQ,CACrB,QAAO;AAIT,UADa,IAAI,KAAK,QAAA,UAAU,QAAA,UAAU,CAC9B,SAAS,GAAG,IAAI,QAAQ,CAAC,SAAS;IAC9C;EAEF,SAAS,iBAAiB,GAAgB;AACxC,OAAI,UAAW,EAAE,iBAAiC,KAAA,EAAU;AAC5D,OAAI,YAAY,KAAK;;EAGvB,SAAS,oBAAoB,WAAqC;AAChE,QAAK,gBAAgB,UAAU;;;uBAK/B,mBAmDM,OAnDN,YAmDM;IAlDJ,YAaY,mBAAA;KAZV,MAAK;KACJ,OAAK,eAAE,eAAc;KACtB,MAAA;KACA,WAAQ;KACP,UAAQ,CAAG,YAAA;KACZ,SAAQ;KACP,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,aAAA,EAAA,CAAA,OAAA,CAAA;;4BAKf,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK;;;;IAIT,mBAWK,MAAA;KAVH,OAAM;KACN,WAAQ;KACP,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,iBAAiB,OAAM,EAAA,CAAA,OAAA,CAAA;wCAEjC,QAAA,MAAK,GAAG,KACX,EAAA,EAAA,YAIE,iBAAA;KAHA,MAAK;KACL,MAAK;KACL,OAAM;;IAIV,YAME,yBAAA;iBALS,WAAA;6EAAU,QAAA;KAClB,aAAW,SAAA;KACX,cAAY,QAAA;KACZ,aAAW,QAAA;KACX,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,oBAAoB,OAAM;;;;;;;IAGrC,YAaY,mBAAA;KAZV,MAAK;KACJ,OAAK,eAAE,eAAc;KACtB,SAAQ;KACR,MAAA;KACA,WAAQ;KACP,UAAQ,CAAG,YAAA;KACX,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,aAAA,EAAA,CAAA,OAAA,CAAA;;4BAKf,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK"}
@@ -0,0 +1,7 @@
1
+ import RuiCalendarMenu_vue_vue_type_script_setup_true_lang_default from "./RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/calendar/RuiCalendarMenu.vue
3
+ var RuiCalendarMenu_default = RuiCalendarMenu_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RuiCalendarMenu_default as default };
6
+
7
+ //# sourceMappingURL=RuiCalendarMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuiCalendarMenu.js","names":[],"sources":["../../../src/components/calendar/RuiCalendarMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getShortMonthNames,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport { tv } from '@/utils/tv';\nimport RuiButton from '../buttons/button/RuiButton.vue';\n\ndefineOptions({\n name: 'RuiCalendarMenu',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>();\n\nconst { viewMonth, viewYear } = defineProps<{\n anchorEl: HTMLElement | undefined;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n select: [MonthYearSelection];\n}>();\n\n// Core reactive state - minimal\nconst viewMode = ref<'months' | 'years'>('months');\nconst startYear = ref<number>(viewYear - 6);\n\n// Pre-calculated constants\nconst months = getShortMonthNames();\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\nconst navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst cellButton = tv({\n base: 'h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50',\n variants: {\n selected: {\n true: 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker',\n },\n inRange: {\n true: 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600',\n false: 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600',\n },\n selectedOutOfRange: {\n true: 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400',\n },\n },\n});\n\n// Pre-calculated arrays for performance - using refs for better control\nconst yearRange = ref<number[]>([]);\nconst monthsInRange = ref<boolean[]>([]);\nconst yearsInRange = ref<boolean[]>([]);\nconst title = ref<string>('');\nconst canGoToNext = ref<boolean>(true);\nconst canGoToPrev = ref<boolean>(true);\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateYearRange(): void {\n const start = get(startYear);\n set(\n yearRange,\n Array.from({ length: 12 }, (_, i) => start + i),\n );\n}\n\nfunction calculateTitle(): void {\n if (get(viewMode) === 'months') {\n set(title, viewYear.toString());\n }\n else {\n const range = get(yearRange);\n set(title, `${range[0]} - ${range.at(-1)}`);\n }\n}\n\nfunction calculateNavigation(): void {\n const { maxDate, minDate } = calendarState;\n const mode = get(viewMode);\n\n if (mode === 'months') {\n const nextYear = viewYear + 1;\n const previousYear = viewYear - 1;\n\n set(canGoToNext, !isDefined(maxDate) || nextYear <= get(maxDate).getFullYear());\n set(canGoToPrev, !isDefined(minDate) || previousYear >= get(minDate).getFullYear());\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n const firstYearInRange = get(startYear);\n\n // Check if we can navigate to the next range of years\n const nextRangeStart = lastYearInRange + 1;\n set(canGoToNext, !isDefined(maxDate) || nextRangeStart <= get(maxDate).getFullYear());\n\n // Check if we can navigate to the previous range of years\n const prevRangeEnd = firstYearInRange - 1;\n set(canGoToPrev, !isDefined(minDate) || prevRangeEnd >= get(minDate).getFullYear());\n }\n}\n\nfunction calculateMonthsInRange(): void {\n const { minDate, maxDate } = calendarState;\n const currentYear = viewYear;\n const result = new Array(12).fill(true);\n\n if (isDefined(minDate) || isDefined(maxDate)) {\n for (let month = 0; month < 12; month++) {\n const date = new Date(currentYear, month);\n if (isDefined(maxDate) && date > get(maxDate)) {\n result[month] = false;\n }\n if (isDefined(minDate) && date < get(minDate)) {\n result[month] = false;\n }\n }\n }\n\n set(monthsInRange, result);\n}\n\nfunction calculateYearsInRange(): void {\n const { minDate, maxDate } = calendarState;\n const range = get(yearRange);\n const currentMonth = viewMonth;\n\n if (!isDefined(minDate) && !isDefined(maxDate)) {\n set(yearsInRange, new Array(range.length).fill(true));\n return;\n }\n\n const result = range.map((year) => {\n const date = new Date(year, currentMonth);\n if (isDefined(maxDate) && date > get(maxDate)) {\n return false;\n }\n return !isDefined(minDate) || date >= get(minDate);\n });\n\n set(yearsInRange, result);\n}\n\nfunction toggleSelection(): void {\n set(viewMode, get(viewMode) === 'months' ? 'years' : 'months');\n}\n\nfunction selectMonth(month: number): void {\n if (!get(monthsInRange)[month])\n return;\n emit('select', { month, year: viewYear });\n set(modelValue, false);\n}\n\nfunction selectYear(year: number): void {\n const yearIndex = get(yearRange).indexOf(year);\n if (yearIndex === -1 || !get(yearsInRange)[yearIndex])\n return;\n\n emit('select', { month: viewMonth, year });\n set(viewMode, 'months');\n}\n\nfunction handleNext(): void {\n if (get(viewMode) === 'months') {\n const nextYear = viewYear + 1;\n // Emit directly - navigation is already constrained by canGoToNext\n emit('select', { month: viewMonth, year: nextYear });\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n set(startYear, lastYearInRange + 1);\n }\n}\n\nfunction handlePrev(): void {\n if (get(viewMode) === 'months') {\n const previousYear = viewYear - 1;\n // Emit directly - navigation is already constrained by canGoToPrev\n emit('select', { month: viewMonth, year: previousYear });\n }\n else {\n const firstYearInRange = get(startYear);\n set(startYear, firstYearInRange - 12);\n }\n}\n\n// Initial calculations\ncalculateYearRange();\ncalculateTitle();\ncalculateNavigation();\ncalculateMonthsInRange();\ncalculateYearsInRange();\n\n// Watchers for recalculation only when needed\nwatch(startYear, () => {\n calculateYearRange();\n calculateTitle();\n calculateNavigation();\n calculateYearsInRange();\n});\n\nwatch(viewMode, () => {\n calculateTitle();\n calculateNavigation();\n});\n\nwatch(\n () => viewYear,\n () => {\n calculateTitle();\n calculateNavigation();\n calculateMonthsInRange();\n calculateYearsInRange();\n },\n);\n\nwatch(\n () => viewMonth,\n () => {\n calculateYearsInRange();\n },\n);\n</script>\n\n<template>\n <RuiMenu\n v-model=\"modelValue\"\n :anchor-el=\"anchorEl\"\n placement=\"bottom-start\"\n >\n <div class=\"w-64 shadow-lg overflow-hidden\">\n <div class=\"flex items-center justify-center p-1 font-medium text-gray-800 dark:text-gray-200 border-b border-rui-grey-200 dark:border-rui-grey-800 cursor-pointer hover:bg-rui-grey-100 dark:hover:bg-rui-grey-800\">\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n icon\n :disabled=\"!get(canGoToPrev)\"\n variant=\"text\"\n @click.stop=\"handlePrev()\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <div\n class=\"flex-1 text-center cursor-pointer\"\n @click.stop=\"toggleSelection()\"\n >\n {{ get(title) }}\n </div>\n\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n icon\n :disabled=\"!get(canGoToNext)\"\n variant=\"text\"\n @click.stop=\"handleNext()\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n\n <div\n v-if=\"viewMode === 'months'\"\n class=\"grid grid-cols-3 gap-1 p-2\"\n >\n <button\n v-for=\"(month, index) in months\"\n :key=\"month\"\n type=\"button\"\n :class=\"cellButton({\n selected: index === viewMonth && get(monthsInRange)[index],\n selectedOutOfRange: index === viewMonth && !get(monthsInRange)[index],\n inRange: index !== viewMonth ? get(monthsInRange)[index] : undefined,\n })\"\n :disabled=\"!get(monthsInRange)[index]\"\n @click.stop=\"selectMonth(index)\"\n >\n {{ month.substring(0, 3) }}\n </button>\n </div>\n\n <div\n v-else-if=\"viewMode === 'years'\"\n class=\"grid grid-cols-3 gap-1 p-2\"\n >\n <button\n v-for=\"(year, index) in yearRange\"\n :key=\"year\"\n type=\"button\"\n :class=\"cellButton({\n selected: year === viewYear && get(yearsInRange)[index],\n selectedOutOfRange: year === viewYear && !get(yearsInRange)[index],\n inRange: year !== viewYear ? get(yearsInRange)[index] : undefined,\n })\"\n :disabled=\"!get(yearsInRange)[index]\"\n @click.stop=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n </RuiMenu>\n</template>\n"],"mappings":""}