@rotki/ui-library 2.26.1 → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/README.md +36 -15
  2. package/dist/components/accordions/accordion/RuiAccordion.js.map +1 -1
  3. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +0 -4
  4. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +6 -7
  5. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/accordions/accordions/RuiAccordions.js.map +1 -1
  7. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js +15 -2
  8. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/alerts/RuiAlert.js.map +1 -1
  10. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js +43 -212
  11. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/avatars/RuiAvatar.js.map +1 -1
  13. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js +21 -31
  14. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/avatars/RuiAvatarGroup.js.map +1 -1
  16. package/dist/components/avatars/RuiAvatarGroup.vue.d.ts +6 -0
  17. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js +16 -12
  18. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/avatars/avatar-props.d.ts +16 -3
  20. package/dist/components/avatars/avatar-props.js +42 -5
  21. package/dist/components/avatars/avatar-props.js.map +1 -1
  22. package/dist/components/buttons/button/RuiButton.js.map +1 -1
  23. package/dist/components/buttons/button/RuiButton.vue.d.ts +0 -1
  24. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js +29 -16
  25. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/components/buttons/button/button-props.d.ts +0 -2
  27. package/dist/components/buttons/button/button-props.js +5 -5
  28. package/dist/components/buttons/button/button-props.js.map +1 -1
  29. package/dist/components/buttons/button/button-styles.d.ts +4 -1
  30. package/dist/components/buttons/button/button-styles.js +127 -54
  31. package/dist/components/buttons/button/button-styles.js.map +1 -1
  32. package/dist/components/buttons/button-group/RuiButtonGroup.js.map +1 -1
  33. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +8 -2
  34. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +65 -96
  35. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/components/buttons/button-group/button-group-context.d.ts +28 -0
  37. package/dist/components/buttons/button-group/button-group-context.js +22 -0
  38. package/dist/components/buttons/button-group/button-group-context.js.map +1 -0
  39. package/dist/components/calendar/RuiCalendar.js.map +1 -1
  40. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js +5 -2
  41. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/calendar/RuiCalendarGrid.js.map +1 -1
  43. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +11 -7
  44. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/calendar/RuiCalendarHeader.js.map +1 -1
  46. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js +20 -21
  47. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/calendar/RuiCalendarMenu.js.map +1 -1
  49. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +16 -20
  50. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/cards/RuiCard.js.map +1 -1
  52. package/dist/components/cards/RuiCard.vue.d.ts +0 -3
  53. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +31 -19
  54. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/cards/RuiCardHeader.js.map +1 -1
  56. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js +13 -25
  57. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  58. package/dist/components/chips/RuiChip.js.map +1 -1
  59. package/dist/components/chips/RuiChip.vue.d.ts +5 -2
  60. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +127 -78
  61. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  62. package/dist/components/chips/chip-props.d.ts +2 -0
  63. package/dist/components/chips/chip-props.js +5 -3
  64. package/dist/components/chips/chip-props.js.map +1 -1
  65. package/dist/components/color-picker/RuiColorBoard.js.map +1 -1
  66. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js +4 -4
  67. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  68. package/dist/components/color-picker/RuiColorHue.js.map +1 -1
  69. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +1 -1
  70. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/components/color-picker/RuiColorInput.js.map +1 -1
  72. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js +38 -27
  73. package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  74. package/dist/components/color-picker/RuiColorPicker.js.map +1 -1
  75. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js +1 -1
  76. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  77. package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
  78. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +3 -2
  79. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +49 -47
  80. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/date-time-picker/RuiDateTimePickerMenu.js.map +1 -1
  82. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js +2 -2
  83. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/date-time-picker/RuiTimezoneSelect.js.map +1 -1
  85. package/dist/components/date-time-picker/RuiTimezoneSelect.vue.d.ts +4 -3
  86. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js +3 -3
  87. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/components/date-time-picker/date-time-picker-styles.d.ts +128 -219
  89. package/dist/components/date-time-picker/date-time-picker-styles.js +1 -2
  90. package/dist/components/date-time-picker/date-time-picker-styles.js.map +1 -1
  91. package/dist/components/date-time-picker/dayjs-setup.d.ts +12 -1
  92. package/dist/components/date-time-picker/dayjs-setup.js +19 -4
  93. package/dist/components/date-time-picker/dayjs-setup.js.map +1 -1
  94. package/dist/components/date-time-picker/segment-utils.d.ts +1 -2
  95. package/dist/components/date-time-picker/segment-utils.js +1 -2
  96. package/dist/components/date-time-picker/segment-utils.js.map +1 -1
  97. package/dist/components/date-time-picker/use-date-bounds.d.ts +1 -1
  98. package/dist/components/date-time-picker/use-date-bounds.js +1 -1
  99. package/dist/components/date-time-picker/use-date-bounds.js.map +1 -1
  100. package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -2
  101. package/dist/components/date-time-picker/use-date-time-selection.js +1 -2
  102. package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
  103. package/dist/components/date-time-picker/utils.d.ts +0 -1
  104. package/dist/components/date-time-picker/utils.js +1 -2
  105. package/dist/components/date-time-picker/utils.js.map +1 -1
  106. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
  107. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +1 -68
  108. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +184 -180
  109. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.js.map +1 -1
  111. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue_vue_type_script_setup_true_lang.js +1 -0
  112. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue_vue_type_script_setup_true_lang.js.map +1 -1
  113. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.js.map +1 -1
  114. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue.d.ts +2 -0
  115. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue_vue_type_script_setup_true_lang.js +8 -3
  116. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.js.map +1 -1
  118. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.vue.d.ts +4 -0
  119. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.vue_vue_type_script_setup_true_lang.js +24 -10
  120. package/dist/components/forms/auto-complete/RuiAutoCompleteSelection.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/components/forms/auto-complete/auto-complete-props.d.ts +66 -0
  122. package/dist/components/forms/auto-complete/auto-complete-styles.d.ts +128 -218
  123. package/dist/components/forms/auto-complete/auto-complete-styles.js +4 -2
  124. package/dist/components/forms/auto-complete/auto-complete-styles.js.map +1 -1
  125. package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -1
  126. package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +3 -6
  127. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js +106 -105
  128. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  129. package/dist/components/forms/category-picker/category-picker-styles.d.ts +83 -232
  130. package/dist/components/forms/category-picker/category-picker-styles.js +20 -26
  131. package/dist/components/forms/category-picker/category-picker-styles.js.map +1 -1
  132. package/dist/components/forms/check-control-styles.d.ts +61 -2
  133. package/dist/components/forms/check-control-styles.js +53 -46
  134. package/dist/components/forms/check-control-styles.js.map +1 -1
  135. package/dist/components/forms/checkbox/RuiCheckbox.js.map +1 -1
  136. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +31 -18
  137. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.js.map +1 -1
  139. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js +3 -3
  140. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/forms/field-defaults/RuiFieldDefaults.js +7 -0
  142. package/dist/components/forms/field-defaults/RuiFieldDefaults.js.map +1 -0
  143. package/dist/components/forms/field-defaults/RuiFieldDefaults.vue.d.ts +16 -0
  144. package/dist/components/forms/field-defaults/RuiFieldDefaults.vue_vue_type_script_setup_true_lang.js +18 -0
  145. package/dist/components/forms/field-defaults/RuiFieldDefaults.vue_vue_type_script_setup_true_lang.js.map +1 -0
  146. package/dist/components/forms/field-label/RuiFieldLabel.js +7 -0
  147. package/dist/components/forms/field-label/RuiFieldLabel.js.map +1 -0
  148. package/dist/components/forms/field-label/RuiFieldLabel.vue.d.ts +17 -0
  149. package/dist/components/forms/field-label/RuiFieldLabel.vue_vue_type_script_setup_true_lang.js +57 -0
  150. package/dist/components/forms/field-label/RuiFieldLabel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  151. package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -1
  152. package/dist/components/forms/file-upload/RuiFileUpload.vue.d.ts +1 -1
  153. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +39 -20
  154. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/forms/radio-button/radio/RuiRadio.js.map +1 -1
  156. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +13 -14
  157. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  158. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.js.map +1 -1
  159. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +3 -3
  160. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.js.map +1 -1
  162. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js +6 -6
  163. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
  165. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +3 -12
  166. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +50 -45
  167. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/components/forms/select/RuiSimpleSelect.js.map +1 -1
  169. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +0 -1
  170. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js +13 -20
  171. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/components/forms/select/menu-select-styles.d.ts +99 -221
  173. package/dist/components/forms/select/menu-select-styles.js +1 -4
  174. package/dist/components/forms/select/menu-select-styles.js.map +1 -1
  175. package/dist/components/forms/slider/RuiSlider.js.map +1 -1
  176. package/dist/components/forms/slider/RuiSlider.vue.d.ts +0 -4
  177. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +113 -90
  178. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  179. package/dist/components/forms/slider/slider-styles.d.ts +40 -40
  180. package/dist/components/forms/slider/slider-styles.js +67 -109
  181. package/dist/components/forms/slider/slider-styles.js.map +1 -1
  182. package/dist/components/forms/switch/RuiSwitch.js.map +1 -1
  183. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +32 -44
  184. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  185. package/dist/components/forms/text-area/RuiTextArea.js.map +1 -1
  186. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +3 -2
  187. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js +120 -99
  188. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  189. package/dist/components/forms/text-area/text-area-styles.d.ts +41 -115
  190. package/dist/components/forms/text-area/text-area-styles.js +34 -194
  191. package/dist/components/forms/text-area/text-area-styles.js.map +1 -1
  192. package/dist/components/forms/text-field/RuiTextField.js.map +1 -1
  193. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +3 -2
  194. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js +93 -90
  195. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  196. package/dist/components/forms/text-field/text-field-styles.d.ts +37 -145
  197. package/dist/components/forms/text-field/text-field-styles.js +24 -267
  198. package/dist/components/forms/text-field/text-field-styles.js.map +1 -1
  199. package/dist/components/forms/text-input-styles.d.ts +98 -229
  200. package/dist/components/forms/text-input-styles.js +63 -193
  201. package/dist/components/forms/text-input-styles.js.map +1 -1
  202. package/dist/components/helpers/RuiFormTextDetail.js.map +1 -1
  203. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js +2 -2
  204. package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  205. package/dist/components/icons/RuiIcon.js.map +1 -1
  206. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +6 -3
  207. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  208. package/dist/components/index.d.ts +5 -3
  209. package/dist/components/index.js +4 -3
  210. package/dist/components/loaders/RuiSkeletonBase.js.map +1 -1
  211. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js +6 -5
  212. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/components/loaders/RuiSkeletonLoader.js.map +1 -1
  214. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js +8 -8
  215. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  216. package/dist/components/logos/RuiLogo.js.map +1 -1
  217. package/dist/components/logos/RuiLogo.vue.d.ts +8 -10
  218. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js +42 -43
  219. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -1
  220. package/dist/components/logos/verified-logo.d.ts +17 -0
  221. package/dist/components/logos/verified-logo.js +36 -0
  222. package/dist/components/logos/verified-logo.js.map +1 -0
  223. package/dist/components/overlays/badge/RuiBadge.js.map +1 -1
  224. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js +75 -47
  225. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  226. package/dist/components/overlays/dialog/RuiDialog.js.map +1 -1
  227. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +3 -2
  228. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +16 -12
  229. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  230. package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
  231. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +15 -10
  232. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +29 -22
  233. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  234. package/dist/components/overlays/menu/activator-handlers.d.ts +11 -0
  235. package/dist/components/overlays/menu/activator-handlers.js +18 -0
  236. package/dist/components/overlays/menu/activator-handlers.js.map +1 -0
  237. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.js.map +1 -1
  238. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +6 -2
  239. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +40 -16
  240. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/components/overlays/notification/RuiNotification.js.map +1 -1
  242. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +4 -4
  243. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
  244. package/dist/components/overlays/tooltip/RuiTooltip.js.map +1 -1
  245. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +0 -5
  246. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +16 -10
  247. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  248. package/dist/components/overlays/tooltip/tooltip-styles.d.ts +5 -12
  249. package/dist/components/overlays/tooltip/tooltip-styles.js +11 -18
  250. package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -1
  251. package/dist/components/progress/RuiProgress.js.map +1 -1
  252. package/dist/components/progress/RuiProgress.vue.d.ts +4 -0
  253. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +72 -46
  254. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  255. package/dist/components/steppers/RuiFooterStepper.js.map +1 -1
  256. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +27 -28
  257. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  258. package/dist/components/steppers/RuiStepper.js.map +1 -1
  259. package/dist/components/steppers/RuiStepper.vue.d.ts +0 -4
  260. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +25 -23
  261. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  262. package/dist/components/steppers/RuiStepperIcon.js.map +1 -1
  263. package/dist/components/steppers/RuiStepperIcon.vue.d.ts +2 -0
  264. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +47 -47
  265. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  266. package/dist/components/tables/RuiDataTable.js.map +1 -1
  267. package/dist/components/tables/RuiDataTable.vue.d.ts +3 -6
  268. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +65 -47
  269. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  270. package/dist/components/tables/RuiExpandButton.js.map +1 -1
  271. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js +1 -0
  272. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  273. package/dist/components/tables/RuiTable.js.map +1 -1
  274. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js +8 -5
  275. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  276. package/dist/components/tables/RuiTableEmptyState.js.map +1 -1
  277. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +1 -1
  278. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  279. package/dist/components/tables/RuiTableHead.js.map +1 -1
  280. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +88 -66
  281. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  282. package/dist/components/tables/RuiTablePagination.js.map +1 -1
  283. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +8 -11
  284. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  285. package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -1
  286. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +3 -3
  287. package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  288. package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -1
  289. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +7 -3
  290. package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  291. package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -1
  292. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +1 -1
  293. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
  294. package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -1
  295. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +58 -19
  296. package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  297. package/dist/components/tables/data-table-styles.d.ts +24 -0
  298. package/dist/components/tables/data-table-styles.js +35 -20
  299. package/dist/components/tables/data-table-styles.js.map +1 -1
  300. package/dist/components/tables/table_no_data_placeholder.js +1 -1
  301. package/dist/components/tables/table_no_data_placeholder.js.map +1 -1
  302. package/dist/components/tables/table_no_data_placeholder_dark.js +1 -1
  303. package/dist/components/tables/table_no_data_placeholder_dark.js.map +1 -1
  304. package/dist/components/tabs/tab/RuiTab.js.map +1 -1
  305. package/dist/components/tabs/tab/RuiTab.vue.d.ts +2 -5
  306. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +94 -68
  307. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  308. package/dist/components/tabs/tab-item/RuiTabItem.js.map +1 -1
  309. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +0 -1
  310. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js +5 -11
  311. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  312. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
  313. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +3 -8
  314. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
  315. package/dist/components/tabs/tab-props.d.ts +7 -1
  316. package/dist/components/tabs/tab-props.js +7 -1
  317. package/dist/components/tabs/tab-props.js.map +1 -1
  318. package/dist/components/tabs/tabs/RuiTabs.js.map +1 -1
  319. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +2 -1
  320. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +178 -32
  321. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  322. package/dist/components/tabs/tabs/use-tab-indicator.d.ts +27 -0
  323. package/dist/components/tabs/tabs/use-tab-indicator.js +67 -0
  324. package/dist/components/tabs/tabs/use-tab-indicator.js.map +1 -0
  325. package/dist/components/tabs/tabs/use-tab-keyboard.d.ts +17 -0
  326. package/dist/components/tabs/tabs/use-tab-keyboard.js +57 -0
  327. package/dist/components/tabs/tabs/use-tab-keyboard.js.map +1 -0
  328. package/dist/components/tabs/tabs/use-tab-routing.js +1 -2
  329. package/dist/components/tabs/tabs/use-tab-routing.js.map +1 -1
  330. package/dist/components/time-picker/RuiTimePicker.js.map +1 -1
  331. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js +35 -32
  332. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  333. package/dist/components/time-picker/time-picker-styles.d.ts +18 -0
  334. package/dist/components/time-picker/time-picker-styles.js +16 -10
  335. package/dist/components/time-picker/time-picker-styles.js.map +1 -1
  336. package/dist/composables/defaults/field.d.ts +22 -0
  337. package/dist/composables/defaults/field.js +29 -0
  338. package/dist/composables/defaults/field.js.map +1 -0
  339. package/dist/composables/defaults/logo.d.ts +18 -0
  340. package/dist/composables/defaults/logo.js +13 -0
  341. package/dist/composables/defaults/logo.js.map +1 -0
  342. package/dist/composables/dropdown-menu.d.ts +14 -2
  343. package/dist/composables/dropdown-menu.js +12 -2
  344. package/dist/composables/dropdown-menu.js.map +1 -1
  345. package/dist/composables/floating.d.ts +0 -2
  346. package/dist/composables/floating.js +5 -2
  347. package/dist/composables/floating.js.map +1 -1
  348. package/dist/composables/forms/auto-complete/chips.d.ts +22 -0
  349. package/dist/composables/forms/auto-complete/chips.js +42 -0
  350. package/dist/composables/forms/auto-complete/chips.js.map +1 -0
  351. package/dist/composables/forms/auto-complete/combobox.d.ts +25 -0
  352. package/dist/composables/forms/auto-complete/combobox.js +35 -0
  353. package/dist/composables/forms/auto-complete/combobox.js.map +1 -0
  354. package/dist/composables/forms/auto-complete/focus.d.ts +5 -2
  355. package/dist/composables/forms/auto-complete/focus.js +36 -10
  356. package/dist/composables/forms/auto-complete/focus.js.map +1 -1
  357. package/dist/composables/forms/auto-complete/index.d.ts +3 -0
  358. package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -1
  359. package/dist/composables/forms/auto-complete/keyboard-navigation.js +48 -20
  360. package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
  361. package/dist/composables/forms/auto-complete/selection.d.ts +37 -0
  362. package/dist/composables/forms/auto-complete/selection.js +60 -0
  363. package/dist/composables/forms/auto-complete/selection.js.map +1 -0
  364. package/dist/composables/forms/auto-complete/value.js +19 -0
  365. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  366. package/dist/composables/keyboard-scroll.d.ts +17 -0
  367. package/dist/composables/keyboard-scroll.js +58 -0
  368. package/dist/composables/keyboard-scroll.js.map +1 -0
  369. package/dist/composables/sticky-header.d.ts +8 -0
  370. package/dist/composables/sticky-header.js +13 -2
  371. package/dist/composables/sticky-header.js.map +1 -1
  372. package/dist/composables/tables/data-table/page-scroll.d.ts +30 -0
  373. package/dist/composables/tables/data-table/page-scroll.js +113 -0
  374. package/dist/composables/tables/data-table/page-scroll.js.map +1 -0
  375. package/dist/consts/colors.d.ts +4 -0
  376. package/dist/consts/colors.js +1 -37
  377. package/dist/consts/colors.js.map +1 -1
  378. package/dist/consts/tokens.d.ts +56 -0
  379. package/dist/consts/tokens.js +46 -0
  380. package/dist/consts/tokens.js.map +1 -0
  381. package/dist/consts/typography.d.ts +51 -18
  382. package/dist/index.d.ts +13 -0
  383. package/dist/index.js +12 -7
  384. package/dist/index.js.map +1 -1
  385. package/dist/library-icons.json +0 -10
  386. package/dist/style.css +5644 -4677
  387. package/dist/styles/colors.css +315 -0
  388. package/dist/styles/tokens.css +50 -0
  389. package/dist/tailwind.css +145 -0
  390. package/dist/theme/theme.css +403 -0
  391. package/dist/theme.css +403 -0
  392. package/dist/utils/helpers.d.ts +0 -8
  393. package/dist/utils/helpers.js +1 -17
  394. package/dist/utils/helpers.js.map +1 -1
  395. package/dist/utils/tv.js +13 -21
  396. package/dist/utils/tv.js.map +1 -1
  397. package/dist/web-types.json +271 -413
  398. package/package.json +17 -16
  399. package/dist/components/icons/LazyIcon.vue.d.ts +0 -8
  400. package/dist/components/logos/use-logo-sources.d.ts +0 -29
  401. package/dist/components/logos/use-logo-sources.js +0 -90
  402. package/dist/components/logos/use-logo-sources.js.map +0 -1
  403. package/dist/components/steppers/RuiStepperCustomIcon.js +0 -7
  404. package/dist/components/steppers/RuiStepperCustomIcon.js.map +0 -1
  405. package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +0 -8
  406. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js +0 -43
  407. package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +0 -1
  408. package/dist/composables/colors/common.d.ts +0 -20
  409. package/dist/composables/colors/index.d.ts +0 -3
  410. package/dist/composables/colors/text-input.d.ts +0 -27
  411. package/dist/composables/forms/auto-complete/index.js +0 -5
  412. package/dist/composables/forms/use-label-with-quote.d.ts +0 -2
  413. package/dist/composables/popper.d.ts +0 -16
  414. package/dist/composables/popper.js +0 -23
  415. package/dist/composables/popper.js.map +0 -1
  416. package/dist/consts/forms/auto-complete/index.d.ts +0 -4
  417. package/dist/theme/index.d.ts +0 -5
  418. package/dist/theme/index.js +0 -162
  419. package/dist/theme/index.js.map +0 -1
  420. package/dist/utils/forms/auto-complete/index.d.ts +0 -2
@@ -8,64 +8,60 @@ var SliderInteraction = {
8
8
  };
9
9
  /** Static class map for highlighted big-tick colors (avoids dynamic class construction) */
10
10
  var HIGHLIGHT_COLOR_MAP = {
11
- primary: "!bg-rui-primary",
12
- secondary: "!bg-rui-secondary",
13
- error: "!bg-rui-error",
14
- warning: "!bg-rui-warning",
15
- info: "!bg-rui-info",
16
- success: "!bg-rui-success"
11
+ primary: "!bg-rui-primary-fill",
12
+ secondary: "!bg-rui-secondary-fill",
13
+ error: "!bg-rui-error-fill",
14
+ warning: "!bg-rui-warning-fill",
15
+ info: "!bg-rui-info-fill",
16
+ success: "!bg-rui-success-fill"
17
17
  };
18
18
  /** Default highlighted tick color (non-big-tick) */
19
- var HIGHLIGHT_DEFAULT = "bg-rui-grey-100 dark:bg-[#121212]";
19
+ var HIGHLIGHT_DEFAULT = "bg-rui-neutral-100 dark:bg-rui-neutral-950";
20
20
  var sliderStyles = tv({
21
21
  slots: {
22
- wrapper: "flex items-start gap-3",
23
- label: "mt-1 text-rui-text text-body-1",
22
+ root: "",
23
+ wrapper: "flex items-start",
24
+ label: "",
24
25
  outer: "relative h-8 flex-1 min-w-[7.5rem]",
25
26
  inner: "relative",
26
- input: "h-full w-full opacity-0 cursor-pointer",
27
- slider: "absolute h-full w-full top-0 px-2 pointer-events-none",
27
+ input: "peer h-full w-full opacity-0 cursor-pointer",
28
+ slider: "absolute h-full w-full top-0 px-2 pointer-events-none peer-focus-visible:[&_[data-id=slider-thumb]]:focus-ring",
28
29
  sliderInner: "relative h-full w-full cursor-pointer",
29
- container: "absolute top-1/2 -translate-y-1/2 w-full h-1 rounded-full",
30
+ container: "absolute top-1/2 -translate-y-1/2 w-full h-1.5 rounded-full bg-rui-neutral-200 dark:bg-rui-neutral-700",
30
31
  track: "transition-all ease-linear duration-75 h-full rounded-full",
31
32
  ticks: "h-full absolute top-0 flex justify-between items-center",
32
33
  tick: "rounded-full",
33
- thumb: "absolute top-1/2 transition-all ease-linear duration-75 -translate-y-1/2 -translate-x-1/2 w-3 h-3 rounded-full shadow-2",
34
- thumbRipple: [`before:content-[''] before:w-8 before:h-8 before:rounded-full before:absolute before:top-1/2 before:left-1/2`, "before:opacity-10 before:transition before:-translate-x-1/2 before:-translate-y-1/2 before:scale-0"].join(" "),
34
+ thumb: ["absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-4 rounded-full", "bg-white border-2 shadow-rui-control transition-[left,top,box-shadow] ease-linear duration-75"].join(" "),
35
35
  thumbLabel: [
36
36
  "invisible opacity-0",
37
37
  "absolute -mt-7 transition-all ease-linear duration-75 -translate-x-1/2",
38
38
  "px-2 py-1 text-xs font-normal",
39
- "bg-rui-grey-700/90 text-white rounded shadow"
39
+ "bg-rui-neutral-900 dark:bg-rui-neutral-700 text-white rounded-rui-control shadow-rui-tooltip"
40
40
  ].join(" ")
41
41
  },
42
42
  variants: {
43
43
  disabled: { true: {
44
- label: "text-rui-text-disabled",
45
- container: "!bg-rui-grey-300 dark:!bg-rui-grey-800",
46
- track: "!bg-rui-grey-400 dark:!bg-rui-grey-700",
47
- thumb: "!bg-rui-grey-400 dark:!bg-rui-grey-700"
44
+ container: "!bg-rui-neutral-200 dark:!bg-rui-neutral-800",
45
+ track: "!bg-rui-neutral-400 dark:!bg-rui-neutral-600",
46
+ thumb: "!border-rui-neutral-400 dark:!border-rui-neutral-600 dark:!bg-rui-neutral-300 !ring-0"
48
47
  } },
49
48
  vertical: { true: {
50
- wrapper: "flex-col-reverse items-center h-full",
51
- label: "mb-2 text-center",
49
+ root: "flex flex-col",
50
+ wrapper: "flex-col-reverse items-center flex-1 min-h-0",
51
+ label: "text-center",
52
52
  outer: "min-w-0 min-h-[7.5rem] w-8",
53
- inner: "-rotate-90",
53
+ inner: "-rotate-90 translate-y-(--rui-slider-shift)",
54
54
  thumbLabel: "mt-6 rotate-90 translate-x-0 [transform-origin:0_50%]"
55
55
  } },
56
56
  interaction: {
57
57
  idle: {},
58
- hover: { thumbRipple: "before:scale-100" },
59
- focus: { thumbRipple: "before:scale-100 before:opacity-15" },
58
+ hover: { thumb: "ring-4" },
59
+ focus: { thumbLabel: "visible opacity-100" },
60
60
  active: {
61
- thumbRipple: "before:scale-100 before:opacity-30",
61
+ thumb: "ring-6",
62
62
  thumbLabel: "visible opacity-100"
63
63
  }
64
64
  },
65
- validation: {
66
- error: { label: "text-rui-error" },
67
- success: { label: "text-rui-success" }
68
- },
69
65
  color: {
70
66
  primary: {},
71
67
  secondary: {},
@@ -74,122 +70,78 @@ var sliderStyles = tv({
74
70
  info: {},
75
71
  success: {}
76
72
  },
77
- bigTick: { true: {} }
73
+ bigTick: {
74
+ false: {
75
+ ticks: "[&>span:first-child]:invisible [&>span:last-child]:invisible",
76
+ tick: "bg-rui-neutral-500 dark:bg-rui-neutral-300"
77
+ },
78
+ true: {}
79
+ },
80
+ hasLabel: {
81
+ true: {},
82
+ false: {}
83
+ }
78
84
  },
79
85
  compoundSlots: [
80
86
  {
81
- slots: ["container"],
87
+ slots: ["track"],
82
88
  color: "primary",
83
- class: "bg-rui-primary bg-opacity-40"
89
+ class: "bg-rui-primary-fill"
84
90
  },
85
91
  {
86
- slots: ["container"],
92
+ slots: ["track"],
87
93
  color: "secondary",
88
- class: "bg-rui-secondary bg-opacity-40"
94
+ class: "bg-rui-secondary-fill"
89
95
  },
90
96
  {
91
- slots: ["container"],
97
+ slots: ["track"],
92
98
  color: "error",
93
- class: "bg-rui-error bg-opacity-40"
99
+ class: "bg-rui-error-fill"
94
100
  },
95
101
  {
96
- slots: ["container"],
102
+ slots: ["track"],
97
103
  color: "warning",
98
- class: "bg-rui-warning bg-opacity-40"
104
+ class: "bg-rui-warning-fill"
99
105
  },
100
106
  {
101
- slots: ["container"],
107
+ slots: ["track"],
102
108
  color: "info",
103
- class: "bg-rui-info bg-opacity-40"
109
+ class: "bg-rui-info-fill"
104
110
  },
105
111
  {
106
- slots: ["container"],
112
+ slots: ["track"],
107
113
  color: "success",
108
- class: "bg-rui-success bg-opacity-40"
114
+ class: "bg-rui-success-fill"
109
115
  },
110
116
  {
111
- slots: [
112
- "track",
113
- "thumb",
114
- "tick"
115
- ],
117
+ slots: ["thumb"],
116
118
  color: "primary",
117
- class: "bg-rui-primary"
119
+ class: "border-rui-primary-fill ring-rui-primary-soft"
118
120
  },
119
121
  {
120
- slots: [
121
- "track",
122
- "thumb",
123
- "tick"
124
- ],
122
+ slots: ["thumb"],
125
123
  color: "secondary",
126
- class: "bg-rui-secondary"
124
+ class: "border-rui-secondary-fill ring-rui-secondary-soft"
127
125
  },
128
126
  {
129
- slots: [
130
- "track",
131
- "thumb",
132
- "tick"
133
- ],
127
+ slots: ["thumb"],
134
128
  color: "error",
135
- class: "bg-rui-error"
129
+ class: "border-rui-error-fill ring-rui-error-soft"
136
130
  },
137
131
  {
138
- slots: [
139
- "track",
140
- "thumb",
141
- "tick"
142
- ],
132
+ slots: ["thumb"],
143
133
  color: "warning",
144
- class: "bg-rui-warning"
134
+ class: "border-rui-warning-fill ring-rui-warning-soft"
145
135
  },
146
136
  {
147
- slots: [
148
- "track",
149
- "thumb",
150
- "tick"
151
- ],
137
+ slots: ["thumb"],
152
138
  color: "info",
153
- class: "bg-rui-info"
139
+ class: "border-rui-info-fill ring-rui-info-soft"
154
140
  },
155
141
  {
156
- slots: [
157
- "track",
158
- "thumb",
159
- "tick"
160
- ],
142
+ slots: ["thumb"],
161
143
  color: "success",
162
- class: "bg-rui-success"
163
- },
164
- {
165
- slots: ["thumbRipple"],
166
- color: "primary",
167
- class: "before:bg-rui-primary"
168
- },
169
- {
170
- slots: ["thumbRipple"],
171
- color: "secondary",
172
- class: "before:bg-rui-secondary"
173
- },
174
- {
175
- slots: ["thumbRipple"],
176
- color: "error",
177
- class: "before:bg-rui-error"
178
- },
179
- {
180
- slots: ["thumbRipple"],
181
- color: "warning",
182
- class: "before:bg-rui-warning"
183
- },
184
- {
185
- slots: ["thumbRipple"],
186
- color: "info",
187
- class: "before:bg-rui-info"
188
- },
189
- {
190
- slots: ["thumbRipple"],
191
- color: "success",
192
- class: "before:bg-rui-success"
144
+ class: "border-rui-success-fill ring-rui-success-soft"
193
145
  }
194
146
  ],
195
147
  compoundVariants: [
@@ -222,11 +174,17 @@ var sliderStyles = tv({
222
174
  bigTick: true,
223
175
  color: "success",
224
176
  class: { tick: "!bg-rui-success-lighter" }
177
+ },
178
+ {
179
+ vertical: false,
180
+ hasLabel: true,
181
+ class: { outer: "-mt-2" }
225
182
  }
226
183
  ],
227
184
  defaultVariants: {
228
185
  interaction: "idle",
229
- color: "primary"
186
+ color: "primary",
187
+ bigTick: false
230
188
  }
231
189
  });
232
190
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"slider-styles.js","names":[],"sources":["../../../../src/components/forms/slider/slider-styles.ts"],"sourcesContent":["import type { ContextColorsType } from '@/consts/colors';\nimport { tv } from '@/utils/tv';\n\nexport const SliderInteraction = {\n idle: 'idle',\n hover: 'hover',\n focus: 'focus',\n active: 'active',\n} as const;\n\nexport type SliderInteraction = (typeof SliderInteraction)[keyof typeof SliderInteraction];\n\n/** Static class map for highlighted big-tick colors (avoids dynamic class construction) */\nexport const HIGHLIGHT_COLOR_MAP: Record<ContextColorsType, string> = {\n primary: '!bg-rui-primary',\n secondary: '!bg-rui-secondary',\n error: '!bg-rui-error',\n warning: '!bg-rui-warning',\n info: '!bg-rui-info',\n success: '!bg-rui-success',\n};\n\n/** Default highlighted tick color (non-big-tick) */\nexport const HIGHLIGHT_DEFAULT = 'bg-rui-grey-100 dark:bg-[#121212]';\n\nexport const sliderStyles = tv({\n slots: {\n wrapper: 'flex items-start gap-3',\n label: 'mt-1 text-rui-text text-body-1',\n outer: 'relative h-8 flex-1 min-w-[7.5rem]',\n inner: 'relative',\n input: 'h-full w-full opacity-0 cursor-pointer',\n slider: 'absolute h-full w-full top-0 px-2 pointer-events-none',\n sliderInner: 'relative h-full w-full cursor-pointer',\n container: 'absolute top-1/2 -translate-y-1/2 w-full h-1 rounded-full',\n track: 'transition-all ease-linear duration-75 h-full rounded-full',\n ticks: 'h-full absolute top-0 flex justify-between items-center',\n tick: 'rounded-full',\n thumb: 'absolute top-1/2 transition-all ease-linear duration-75 -translate-y-1/2 -translate-x-1/2 w-3 h-3 rounded-full shadow-2',\n thumbRipple: [\n `before:content-[''] before:w-8 before:h-8 before:rounded-full before:absolute before:top-1/2 before:left-1/2`,\n 'before:opacity-10 before:transition before:-translate-x-1/2 before:-translate-y-1/2 before:scale-0',\n ].join(' '),\n thumbLabel: [\n 'invisible opacity-0',\n 'absolute -mt-7 transition-all ease-linear duration-75 -translate-x-1/2',\n 'px-2 py-1 text-xs font-normal',\n 'bg-rui-grey-700/90 text-white rounded shadow',\n ].join(' '),\n },\n variants: {\n disabled: {\n true: {\n label: 'text-rui-text-disabled',\n container: '!bg-rui-grey-300 dark:!bg-rui-grey-800',\n track: '!bg-rui-grey-400 dark:!bg-rui-grey-700',\n thumb: '!bg-rui-grey-400 dark:!bg-rui-grey-700',\n },\n },\n vertical: {\n true: {\n wrapper: 'flex-col-reverse items-center h-full',\n label: 'mb-2 text-center',\n outer: 'min-w-0 min-h-[7.5rem] w-8',\n inner: '-rotate-90',\n thumbLabel: 'mt-6 rotate-90 translate-x-0 [transform-origin:0_50%]',\n },\n },\n interaction: {\n idle: {},\n hover: { thumbRipple: 'before:scale-100' },\n focus: { thumbRipple: 'before:scale-100 before:opacity-15' },\n active: { thumbRipple: 'before:scale-100 before:opacity-30', thumbLabel: 'visible opacity-100' },\n },\n validation: {\n error: { label: 'text-rui-error' },\n success: { label: 'text-rui-success' },\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n bigTick: {\n true: {},\n },\n },\n compoundSlots: [\n // Container bg (with opacity)\n { slots: ['container'], color: 'primary', class: 'bg-rui-primary bg-opacity-40' },\n { slots: ['container'], color: 'secondary', class: 'bg-rui-secondary bg-opacity-40' },\n { slots: ['container'], color: 'error', class: 'bg-rui-error bg-opacity-40' },\n { slots: ['container'], color: 'warning', class: 'bg-rui-warning bg-opacity-40' },\n { slots: ['container'], color: 'info', class: 'bg-rui-info bg-opacity-40' },\n { slots: ['container'], color: 'success', class: 'bg-rui-success bg-opacity-40' },\n\n // Track + thumb + thumb ripple + tick color\n { slots: ['track', 'thumb', 'tick'], color: 'primary', class: 'bg-rui-primary' },\n { slots: ['track', 'thumb', 'tick'], color: 'secondary', class: 'bg-rui-secondary' },\n { slots: ['track', 'thumb', 'tick'], color: 'error', class: 'bg-rui-error' },\n { slots: ['track', 'thumb', 'tick'], color: 'warning', class: 'bg-rui-warning' },\n { slots: ['track', 'thumb', 'tick'], color: 'info', class: 'bg-rui-info' },\n { slots: ['track', 'thumb', 'tick'], color: 'success', class: 'bg-rui-success' },\n\n // Thumb ripple (before pseudo) color\n { slots: ['thumbRipple'], color: 'primary', class: 'before:bg-rui-primary' },\n { slots: ['thumbRipple'], color: 'secondary', class: 'before:bg-rui-secondary' },\n { slots: ['thumbRipple'], color: 'error', class: 'before:bg-rui-error' },\n { slots: ['thumbRipple'], color: 'warning', class: 'before:bg-rui-warning' },\n { slots: ['thumbRipple'], color: 'info', class: 'before:bg-rui-info' },\n { slots: ['thumbRipple'], color: 'success', class: 'before:bg-rui-success' },\n ],\n compoundVariants: [\n // Big tick: lighter default, color highlighted\n { bigTick: true, color: 'primary', class: { tick: '!bg-rui-primary-lighter' } },\n { bigTick: true, color: 'secondary', class: { tick: '!bg-rui-secondary-lighter' } },\n { bigTick: true, color: 'error', class: { tick: '!bg-rui-error-lighter' } },\n { bigTick: true, color: 'warning', class: { tick: '!bg-rui-warning-lighter' } },\n { bigTick: true, color: 'info', class: { tick: '!bg-rui-info-lighter' } },\n { bigTick: true, color: 'success', class: { tick: '!bg-rui-success-lighter' } },\n ],\n defaultVariants: {\n interaction: 'idle',\n color: 'primary',\n },\n});\n"],"mappings":";;AAGA,IAAa,oBAAoB;CAC/B,MAAM;CACN,OAAO;CACP,OAAO;CACP,QAAQ;AACV;;AAKA,IAAa,sBAAyD;CACpE,SAAS;CACT,WAAW;CACX,OAAO;CACP,SAAS;CACT,MAAM;CACN,SAAS;AACX;;AAGA,IAAa,oBAAoB;AAEjC,IAAa,eAAe,GAAG;CAC7B,OAAO;EACL,SAAS;EACT,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,QAAQ;EACR,aAAa;EACb,WAAW;EACX,OAAO;EACP,OAAO;EACP,MAAM;EACN,OAAO;EACP,aAAa,CACX,gHACA,oGACF,CAAC,CAAC,KAAK,GAAG;EACV,YAAY;GACV;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,GAAG;CACZ;CACA,UAAU;EACR,UAAU,EACR,MAAM;GACJ,OAAO;GACP,WAAW;GACX,OAAO;GACP,OAAO;EACT,EACF;EACA,UAAU,EACR,MAAM;GACJ,SAAS;GACT,OAAO;GACP,OAAO;GACP,OAAO;GACP,YAAY;EACd,EACF;EACA,aAAa;GACX,MAAM,CAAC;GACP,OAAO,EAAE,aAAa,mBAAmB;GACzC,OAAO,EAAE,aAAa,qCAAqC;GAC3D,QAAQ;IAAE,aAAa;IAAsC,YAAY;GAAsB;EACjG;EACA,YAAY;GACV,OAAO,EAAE,OAAO,iBAAiB;GACjC,SAAS,EAAE,OAAO,mBAAmB;EACvC;EACA,OAAO;GACL,SAAS,CAAC;GACV,WAAW,CAAC;GACZ,OAAO,CAAC;GACR,SAAS,CAAC;GACV,MAAM,CAAC;GACP,SAAS,CAAC;EACZ;EACA,SAAS,EACP,MAAM,CAAC,EACT;CACF;CACA,eAAe;EAEb;GAAE,OAAO,CAAC,WAAW;GAAG,OAAO;GAAW,OAAO;EAA+B;EAChF;GAAE,OAAO,CAAC,WAAW;GAAG,OAAO;GAAa,OAAO;EAAiC;EACpF;GAAE,OAAO,CAAC,WAAW;GAAG,OAAO;GAAS,OAAO;EAA6B;EAC5E;GAAE,OAAO,CAAC,WAAW;GAAG,OAAO;GAAW,OAAO;EAA+B;EAChF;GAAE,OAAO,CAAC,WAAW;GAAG,OAAO;GAAQ,OAAO;EAA4B;EAC1E;GAAE,OAAO,CAAC,WAAW;GAAG,OAAO;GAAW,OAAO;EAA+B;EAGhF;GAAE,OAAO;IAAC;IAAS;IAAS;GAAM;GAAG,OAAO;GAAW,OAAO;EAAiB;EAC/E;GAAE,OAAO;IAAC;IAAS;IAAS;GAAM;GAAG,OAAO;GAAa,OAAO;EAAmB;EACnF;GAAE,OAAO;IAAC;IAAS;IAAS;GAAM;GAAG,OAAO;GAAS,OAAO;EAAe;EAC3E;GAAE,OAAO;IAAC;IAAS;IAAS;GAAM;GAAG,OAAO;GAAW,OAAO;EAAiB;EAC/E;GAAE,OAAO;IAAC;IAAS;IAAS;GAAM;GAAG,OAAO;GAAQ,OAAO;EAAc;EACzE;GAAE,OAAO;IAAC;IAAS;IAAS;GAAM;GAAG,OAAO;GAAW,OAAO;EAAiB;EAG/E;GAAE,OAAO,CAAC,aAAa;GAAG,OAAO;GAAW,OAAO;EAAwB;EAC3E;GAAE,OAAO,CAAC,aAAa;GAAG,OAAO;GAAa,OAAO;EAA0B;EAC/E;GAAE,OAAO,CAAC,aAAa;GAAG,OAAO;GAAS,OAAO;EAAsB;EACvE;GAAE,OAAO,CAAC,aAAa;GAAG,OAAO;GAAW,OAAO;EAAwB;EAC3E;GAAE,OAAO,CAAC,aAAa;GAAG,OAAO;GAAQ,OAAO;EAAqB;EACrE;GAAE,OAAO,CAAC,aAAa;GAAG,OAAO;GAAW,OAAO;EAAwB;CAC7E;CACA,kBAAkB;EAEhB;GAAE,SAAS;GAAM,OAAO;GAAW,OAAO,EAAE,MAAM,0BAA0B;EAAE;EAC9E;GAAE,SAAS;GAAM,OAAO;GAAa,OAAO,EAAE,MAAM,4BAA4B;EAAE;EAClF;GAAE,SAAS;GAAM,OAAO;GAAS,OAAO,EAAE,MAAM,wBAAwB;EAAE;EAC1E;GAAE,SAAS;GAAM,OAAO;GAAW,OAAO,EAAE,MAAM,0BAA0B;EAAE;EAC9E;GAAE,SAAS;GAAM,OAAO;GAAQ,OAAO,EAAE,MAAM,uBAAuB;EAAE;EACxE;GAAE,SAAS;GAAM,OAAO;GAAW,OAAO,EAAE,MAAM,0BAA0B;EAAE;CAChF;CACA,iBAAiB;EACf,aAAa;EACb,OAAO;CACT;AACF,CAAC"}
1
+ {"version":3,"file":"slider-styles.js","names":[],"sources":["../../../../src/components/forms/slider/slider-styles.ts"],"sourcesContent":["import type { ContextColorsType } from '@/consts/colors';\nimport { tv } from '@/utils/tv';\n\nexport const SliderInteraction = {\n idle: 'idle',\n hover: 'hover',\n focus: 'focus',\n active: 'active',\n} as const;\n\nexport type SliderInteraction = (typeof SliderInteraction)[keyof typeof SliderInteraction];\n\n/** Static class map for highlighted big-tick colors (avoids dynamic class construction) */\nexport const HIGHLIGHT_COLOR_MAP: Record<ContextColorsType, string> = {\n primary: '!bg-rui-primary-fill',\n secondary: '!bg-rui-secondary-fill',\n error: '!bg-rui-error-fill',\n warning: '!bg-rui-warning-fill',\n info: '!bg-rui-info-fill',\n success: '!bg-rui-success-fill',\n};\n\n/** Default highlighted tick color (non-big-tick) */\nexport const HIGHLIGHT_DEFAULT = 'bg-rui-neutral-100 dark:bg-rui-neutral-950';\n\nexport const sliderStyles = tv({\n slots: {\n root: '',\n wrapper: 'flex items-start',\n // classes added to RuiFieldLabel, which carries the type and its neutral and disabled colors\n label: '',\n outer: 'relative h-8 flex-1 min-w-[7.5rem]',\n inner: 'relative',\n input: 'peer h-full w-full opacity-0 cursor-pointer',\n // the range input is invisible, so its keyboard focus rings the thumb drawn over it\n slider: 'absolute h-full w-full top-0 px-2 pointer-events-none peer-focus-visible:[&_[data-id=slider-thumb]]:focus-ring',\n sliderInner: 'relative h-full w-full cursor-pointer',\n // a quiet neutral rail in every color, so only the filled part and the thumb carry it; a step lighter in dark to stay findable\n container: 'absolute top-1/2 -translate-y-1/2 w-full h-1.5 rounded-full bg-rui-neutral-200 dark:bg-rui-neutral-700',\n track: 'transition-all ease-linear duration-75 h-full rounded-full',\n ticks: 'h-full absolute top-0 flex justify-between items-center',\n tick: 'rounded-full',\n // a white knob with a colored edge, like the switch's, that gains a soft halo instead of growing\n thumb: [\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2 size-4 rounded-full',\n 'bg-white border-2 shadow-rui-control transition-[left,top,box-shadow] ease-linear duration-75',\n ].join(' '),\n thumbLabel: [\n 'invisible opacity-0',\n 'absolute -mt-7 transition-all ease-linear duration-75 -translate-x-1/2',\n 'px-2 py-1 text-xs font-normal',\n 'bg-rui-neutral-900 dark:bg-rui-neutral-700 text-white rounded-rui-control shadow-rui-tooltip',\n ].join(' '),\n },\n variants: {\n disabled: {\n true: {\n container: '!bg-rui-neutral-200 dark:!bg-rui-neutral-800',\n track: '!bg-rui-neutral-400 dark:!bg-rui-neutral-600',\n thumb: '!border-rui-neutral-400 dark:!border-rui-neutral-600 dark:!bg-rui-neutral-300 !ring-0',\n },\n },\n vertical: {\n true: {\n // the label stays above, centred over the upright rail, which takes the height left under it\n root: 'flex flex-col',\n wrapper: 'flex-col-reverse items-center flex-1 min-h-0',\n label: 'text-center',\n outer: 'min-w-0 min-h-[7.5rem] w-8',\n // turned about its top-left corner, then pushed down its own height back into the box\n inner: '-rotate-90 translate-y-(--rui-slider-shift)',\n thumbLabel: 'mt-6 rotate-90 translate-x-0 [transform-origin:0_50%]',\n },\n },\n interaction: {\n idle: {},\n hover: { thumb: 'ring-4' },\n // keyboard focus shows the value too, since arrow keys move the thumb without a press\n focus: { thumbLabel: 'visible opacity-100' },\n active: { thumb: 'ring-6', thumbLabel: 'visible opacity-100' },\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n bigTick: {\n // small ticks sit inside the rail, whose rounded ends already mark the first and last stop\n false: {\n ticks: '[&>span:first-child]:invisible [&>span:last-child]:invisible',\n // two shades off the rail in either theme, so a 2px dot still shows on the empty part\n tick: 'bg-rui-neutral-500 dark:bg-rui-neutral-300',\n },\n true: {},\n },\n hasLabel: {\n true: {},\n false: {},\n },\n },\n compoundSlots: [\n // The filled part takes the color's fill tone, which is the deep one for a status color in dark\n { slots: ['track'], color: 'primary', class: 'bg-rui-primary-fill' },\n { slots: ['track'], color: 'secondary', class: 'bg-rui-secondary-fill' },\n { slots: ['track'], color: 'error', class: 'bg-rui-error-fill' },\n { slots: ['track'], color: 'warning', class: 'bg-rui-warning-fill' },\n { slots: ['track'], color: 'info', class: 'bg-rui-info-fill' },\n { slots: ['track'], color: 'success', class: 'bg-rui-success-fill' },\n\n // The thumb's edge and its hover halo\n { slots: ['thumb'], color: 'primary', class: 'border-rui-primary-fill ring-rui-primary-soft' },\n { slots: ['thumb'], color: 'secondary', class: 'border-rui-secondary-fill ring-rui-secondary-soft' },\n { slots: ['thumb'], color: 'error', class: 'border-rui-error-fill ring-rui-error-soft' },\n { slots: ['thumb'], color: 'warning', class: 'border-rui-warning-fill ring-rui-warning-soft' },\n { slots: ['thumb'], color: 'info', class: 'border-rui-info-fill ring-rui-info-soft' },\n { slots: ['thumb'], color: 'success', class: 'border-rui-success-fill ring-rui-success-soft' },\n ],\n compoundVariants: [\n // Big tick: lighter default, color highlighted\n { bigTick: true, color: 'primary', class: { tick: '!bg-rui-primary-lighter' } },\n { bigTick: true, color: 'secondary', class: { tick: '!bg-rui-secondary-lighter' } },\n { bigTick: true, color: 'error', class: { tick: '!bg-rui-error-lighter' } },\n { bigTick: true, color: 'warning', class: { tick: '!bg-rui-warning-lighter' } },\n { bigTick: true, color: 'info', class: { tick: '!bg-rui-info-lighter' } },\n { bigTick: true, color: 'success', class: { tick: '!bg-rui-success-lighter' } },\n // the rail sits mid-way down its 32px hit area, so a label above pulls that area up to keep the gap of a field\n { vertical: false, hasLabel: true, class: { outer: '-mt-2' } },\n ],\n defaultVariants: {\n interaction: 'idle',\n color: 'primary',\n bigTick: false,\n },\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiSwitch.js","names":[],"sources":["../../../../src/components/forms/switch/RuiSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSwitch',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n disabled = false,\n color = undefined,\n size = undefined,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n required = false,\n} = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst switchStyles = tv({\n slots: {\n wrapper: 'relative flex gap-2 items-start cursor-pointer group/switch',\n inner: 'relative w-[2.6875rem] h-6 shrink-0',\n input: 'peer appearance-none relative w-full h-full rounded-full bg-rui-grey-400 dark:bg-rui-grey-700 transition-all duration-75 ease-in-out cursor-pointer',\n toggle: [\n 'absolute w-5 h-5 transition-all duration-75 ease-in-out -translate-y-1/2 top-1/2 rounded-full pointer-events-none',\n 'bg-white left-0.5',\n `before:content-[''] before:absolute before:size-10 before:bg-black dark:before:bg-white before:rounded-full`,\n 'before:top-1/2 before:left-1/2 before:-translate-x-1/2 before:-translate-y-1/2 before:transition-all before:ease-in-out before:opacity-0',\n 'peer-active:before:opacity-20',\n 'group-hover/switch:shadow-1',\n ].join(' '),\n label: 'text-rui-text text-body-1',\n },\n variants: {\n checked: {\n true: {\n toggle: 'left-[1.3125rem]',\n },\n false: {},\n },\n disabled: {\n true: {\n wrapper: 'cursor-not-allowed',\n input: '!bg-rui-grey-300 dark:!bg-rui-grey-800 cursor-not-allowed',\n toggle: '!bg-rui-grey-500 dark:!bg-rui-grey-600 before:!content-none group-hover/switch:!shadow-none',\n label: 'text-rui-text-disabled',\n },\n },\n size: {\n sm: {\n inner: 'w-10 h-5 mt-0.5',\n toggle: 'w-4 h-4 before:size-6',\n },\n },\n validation: {\n error: {\n input: '!bg-rui-error dark:!bg-rui-error/[0.5]',\n label: 'text-rui-error',\n toggle: 'dark:!bg-rui-error',\n },\n success: {\n input: '!bg-rui-success dark:!bg-rui-success/[0.5]',\n label: 'text-rui-success',\n toggle: 'dark:!bg-rui-success',\n },\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n // Checked (no color): track + toggle dark mode\n { checked: true, disabled: false, class: { input: 'bg-black dark:bg-white' } },\n { checked: true, disabled: false, class: { toggle: 'dark:bg-black' } },\n\n // Checked + color (light: track bg, dark: track bg/50 + toggle bg)\n { checked: true, disabled: false, color: 'primary', class: { input: 'bg-rui-primary dark:bg-rui-primary/[0.5]', toggle: 'dark:bg-rui-primary' } },\n { checked: true, disabled: false, color: 'secondary', class: { input: 'bg-rui-secondary dark:bg-rui-secondary/[0.5]', toggle: 'dark:bg-rui-secondary' } },\n { checked: true, disabled: false, color: 'error', class: { input: 'bg-rui-error dark:bg-rui-error/[0.5]', toggle: 'dark:bg-rui-error' } },\n { checked: true, disabled: false, color: 'warning', class: { input: 'bg-rui-warning dark:bg-rui-warning/[0.5]', toggle: 'dark:bg-rui-warning' } },\n { checked: true, disabled: false, color: 'info', class: { input: 'bg-rui-info dark:bg-rui-info/[0.5]', toggle: 'dark:bg-rui-info' } },\n { checked: true, disabled: false, color: 'success', class: { input: 'bg-rui-success dark:bg-rui-success/[0.5]', toggle: 'dark:bg-rui-success' } },\n\n // Size sm + checked: different toggle position\n { size: 'sm', checked: true, class: { toggle: 'left-[1.375rem]' } },\n ],\n defaultVariants: {\n checked: false,\n disabled: false,\n },\n});\n\nconst { hasError, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst ui = computed<ReturnType<typeof switchStyles>>(() => switchStyles({\n checked: get(modelValue),\n disabled,\n size,\n validation: get(validation),\n color,\n}));\n\nfunction input(event: Event): void {\n const target = event.target;\n if (target instanceof HTMLInputElement)\n set(modelValue, target.checked);\n}\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"ui.wrapper()\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"modelValue || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div :class=\"ui.inner()\">\n <input\n :checked=\"modelValue\"\n type=\"checkbox\"\n :class=\"ui.input()\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n />\n <div :class=\"ui.toggle()\" />\n </div>\n <span\n v-if=\"label || $slots.default\"\n :class=\"ui.label()\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiSwitch.js","names":[],"sources":["../../../../src/components/forms/switch/RuiSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSwitch',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n disabled = false,\n color = undefined,\n size = undefined,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n required = false,\n} = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst switchStyles = tv({\n slots: {\n // 13px to the label, the gap a checkbox or radio leaves, so the focus ring clears the text\n wrapper: 'relative flex gap-3.25 items-start cursor-pointer group/switch',\n // 40 × 22, nudged down a pixel to sit centred on the label's 24px line\n inner: 'relative w-10 h-5.5 mt-px shrink-0',\n // the off track is the control edge color, 3:1 against the page in both themes\n input: 'peer appearance-none relative w-full h-full rounded-full bg-rui-outline transition-colors duration-150 cursor-pointer focus-visible:focus-ring',\n toggle: [\n 'absolute size-4.5 transition-all duration-75 ease-in-out -translate-y-1/2 top-1/2 rounded-full pointer-events-none',\n 'bg-white left-0.5 shadow-rui-control',\n ].join(' '),\n label: 'text-rui-text text-sm/6',\n },\n variants: {\n checked: {\n true: {\n toggle: 'left-5',\n },\n false: {},\n },\n disabled: {\n true: {\n wrapper: 'cursor-not-allowed',\n input: 'bg-rui-neutral-200! dark:bg-rui-neutral-800! cursor-not-allowed',\n toggle: 'bg-rui-neutral-50! dark:bg-rui-neutral-600! shadow-none!',\n label: 'text-rui-text-disabled',\n },\n },\n size: {\n sm: {\n inner: 'w-8.5 h-4.5 mt-0.75',\n toggle: 'size-3.5',\n },\n },\n // a ring and the message below mark the state; a filled red or green track would read as \"on\"\n validation: {\n error: {\n input: 'ring-1 ring-rui-error',\n },\n success: {\n input: 'ring-1 ring-rui-success',\n },\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n { checked: false, disabled: false, class: { input: 'group-hover/switch:bg-rui-neutral-500 dark:group-hover/switch:bg-rui-neutral-400' } },\n\n // Checked (no color): an inverted neutral track, with a dark knob in dark mode\n { checked: true, disabled: false, class: { input: 'bg-rui-neutral-900 dark:bg-rui-neutral-100', toggle: 'dark:bg-rui-neutral-900' } },\n\n // Checked + color: a solid track with the white knob, in both themes\n { checked: true, disabled: false, color: 'primary', class: { input: 'bg-rui-primary dark:bg-rui-primary', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'secondary', class: { input: 'bg-rui-secondary dark:bg-rui-secondary', toggle: 'dark:bg-white' } },\n // a status color's dark `main` is a text tone, so the track takes the deep `darker` under the white knob\n { checked: true, disabled: false, color: 'error', class: { input: 'bg-rui-error dark:bg-rui-error-darker', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'warning', class: { input: 'bg-rui-warning dark:bg-rui-warning-darker', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'info', class: { input: 'bg-rui-info dark:bg-rui-info-darker', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'success', class: { input: 'bg-rui-success dark:bg-rui-success-darker', toggle: 'dark:bg-white' } },\n\n // Size sm + checked: 34 - 14 - 2\n { size: 'sm', checked: true, class: { toggle: 'left-4.5' } },\n ],\n defaultVariants: {\n checked: false,\n disabled: false,\n },\n});\n\nconst { hasError, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst ui = computed<ReturnType<typeof switchStyles>>(() => switchStyles({\n checked: get(modelValue),\n disabled,\n size,\n validation: get(validation),\n color,\n}));\n\nfunction input(event: Event): void {\n const target = event.target;\n if (target instanceof HTMLInputElement)\n set(modelValue, target.checked);\n}\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"ui.wrapper()\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"modelValue || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div :class=\"ui.inner()\">\n <input\n :checked=\"modelValue\"\n type=\"checkbox\"\n :class=\"ui.input()\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n />\n <div :class=\"ui.toggle()\" />\n </div>\n <span\n v-if=\"label || $slots.default\"\n :class=\"ui.label()\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n *\n </span>\n </span>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":""}
@@ -54,45 +54,30 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
54
54
  const modelValue = useModel(__props, "modelValue");
55
55
  const switchStyles = tv({
56
56
  slots: {
57
- wrapper: "relative flex gap-2 items-start cursor-pointer group/switch",
58
- inner: "relative w-[2.6875rem] h-6 shrink-0",
59
- input: "peer appearance-none relative w-full h-full rounded-full bg-rui-grey-400 dark:bg-rui-grey-700 transition-all duration-75 ease-in-out cursor-pointer",
60
- toggle: [
61
- "absolute w-5 h-5 transition-all duration-75 ease-in-out -translate-y-1/2 top-1/2 rounded-full pointer-events-none",
62
- "bg-white left-0.5",
63
- `before:content-[''] before:absolute before:size-10 before:bg-black dark:before:bg-white before:rounded-full`,
64
- "before:top-1/2 before:left-1/2 before:-translate-x-1/2 before:-translate-y-1/2 before:transition-all before:ease-in-out before:opacity-0",
65
- "peer-active:before:opacity-20",
66
- "group-hover/switch:shadow-1"
67
- ].join(" "),
68
- label: "text-rui-text text-body-1"
57
+ wrapper: "relative flex gap-3.25 items-start cursor-pointer group/switch",
58
+ inner: "relative w-10 h-5.5 mt-px shrink-0",
59
+ input: "peer appearance-none relative w-full h-full rounded-full bg-rui-outline transition-colors duration-150 cursor-pointer focus-visible:focus-ring",
60
+ toggle: ["absolute size-4.5 transition-all duration-75 ease-in-out -translate-y-1/2 top-1/2 rounded-full pointer-events-none", "bg-white left-0.5 shadow-rui-control"].join(" "),
61
+ label: "text-rui-text text-sm/6"
69
62
  },
70
63
  variants: {
71
64
  checked: {
72
- true: { toggle: "left-[1.3125rem]" },
65
+ true: { toggle: "left-5" },
73
66
  false: {}
74
67
  },
75
68
  disabled: { true: {
76
69
  wrapper: "cursor-not-allowed",
77
- input: "!bg-rui-grey-300 dark:!bg-rui-grey-800 cursor-not-allowed",
78
- toggle: "!bg-rui-grey-500 dark:!bg-rui-grey-600 before:!content-none group-hover/switch:!shadow-none",
70
+ input: "bg-rui-neutral-200! dark:bg-rui-neutral-800! cursor-not-allowed",
71
+ toggle: "bg-rui-neutral-50! dark:bg-rui-neutral-600! shadow-none!",
79
72
  label: "text-rui-text-disabled"
80
73
  } },
81
74
  size: { sm: {
82
- inner: "w-10 h-5 mt-0.5",
83
- toggle: "w-4 h-4 before:size-6"
75
+ inner: "w-8.5 h-4.5 mt-0.75",
76
+ toggle: "size-3.5"
84
77
  } },
85
78
  validation: {
86
- error: {
87
- input: "!bg-rui-error dark:!bg-rui-error/[0.5]",
88
- label: "text-rui-error",
89
- toggle: "dark:!bg-rui-error"
90
- },
91
- success: {
92
- input: "!bg-rui-success dark:!bg-rui-success/[0.5]",
93
- label: "text-rui-success",
94
- toggle: "dark:!bg-rui-success"
95
- }
79
+ error: { input: "ring-1 ring-rui-error" },
80
+ success: { input: "ring-1 ring-rui-success" }
96
81
  },
97
82
  color: {
98
83
  primary: {},
@@ -105,22 +90,25 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
105
90
  },
106
91
  compoundVariants: [
107
92
  {
108
- checked: true,
93
+ checked: false,
109
94
  disabled: false,
110
- class: { input: "bg-black dark:bg-white" }
95
+ class: { input: "group-hover/switch:bg-rui-neutral-500 dark:group-hover/switch:bg-rui-neutral-400" }
111
96
  },
112
97
  {
113
98
  checked: true,
114
99
  disabled: false,
115
- class: { toggle: "dark:bg-black" }
100
+ class: {
101
+ input: "bg-rui-neutral-900 dark:bg-rui-neutral-100",
102
+ toggle: "dark:bg-rui-neutral-900"
103
+ }
116
104
  },
117
105
  {
118
106
  checked: true,
119
107
  disabled: false,
120
108
  color: "primary",
121
109
  class: {
122
- input: "bg-rui-primary dark:bg-rui-primary/[0.5]",
123
- toggle: "dark:bg-rui-primary"
110
+ input: "bg-rui-primary dark:bg-rui-primary",
111
+ toggle: "dark:bg-white"
124
112
  }
125
113
  },
126
114
  {
@@ -128,8 +116,8 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
128
116
  disabled: false,
129
117
  color: "secondary",
130
118
  class: {
131
- input: "bg-rui-secondary dark:bg-rui-secondary/[0.5]",
132
- toggle: "dark:bg-rui-secondary"
119
+ input: "bg-rui-secondary dark:bg-rui-secondary",
120
+ toggle: "dark:bg-white"
133
121
  }
134
122
  },
135
123
  {
@@ -137,8 +125,8 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
137
125
  disabled: false,
138
126
  color: "error",
139
127
  class: {
140
- input: "bg-rui-error dark:bg-rui-error/[0.5]",
141
- toggle: "dark:bg-rui-error"
128
+ input: "bg-rui-error dark:bg-rui-error-darker",
129
+ toggle: "dark:bg-white"
142
130
  }
143
131
  },
144
132
  {
@@ -146,8 +134,8 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
146
134
  disabled: false,
147
135
  color: "warning",
148
136
  class: {
149
- input: "bg-rui-warning dark:bg-rui-warning/[0.5]",
150
- toggle: "dark:bg-rui-warning"
137
+ input: "bg-rui-warning dark:bg-rui-warning-darker",
138
+ toggle: "dark:bg-white"
151
139
  }
152
140
  },
153
141
  {
@@ -155,8 +143,8 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
155
143
  disabled: false,
156
144
  color: "info",
157
145
  class: {
158
- input: "bg-rui-info dark:bg-rui-info/[0.5]",
159
- toggle: "dark:bg-rui-info"
146
+ input: "bg-rui-info dark:bg-rui-info-darker",
147
+ toggle: "dark:bg-white"
160
148
  }
161
149
  },
162
150
  {
@@ -164,14 +152,14 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
164
152
  disabled: false,
165
153
  color: "success",
166
154
  class: {
167
- input: "bg-rui-success dark:bg-rui-success/[0.5]",
168
- toggle: "dark:bg-rui-success"
155
+ input: "bg-rui-success dark:bg-rui-success-darker",
156
+ toggle: "dark:bg-white"
169
157
  }
170
158
  },
171
159
  {
172
160
  size: "sm",
173
161
  checked: true,
174
- class: { toggle: "left-[1.375rem]" }
162
+ class: { toggle: "left-4.5" }
175
163
  }
176
164
  ],
177
165
  defaultVariants: {
@@ -206,7 +194,7 @@ var RuiSwitch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
206
194
  }, unref(getNonRootAttrs)(_ctx.$attrs), { onInput: _cache[0] || (_cache[0] = ($event) => input($event)) }), null, 16, _hoisted_2), createElementVNode("div", { class: normalizeClass(unref(ui).toggle()) }, null, 2)], 2), __props.label || _ctx.$slots.default ? (openBlock(), createElementBlock("span", {
207
195
  key: 0,
208
196
  class: normalizeClass(unref(ui).label())
209
- }, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)]), __props.required ? (openBlock(), createElementBlock("span", _hoisted_3, " ﹡ ")) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 10, _hoisted_1), !__props.hideDetails ? (openBlock(), createBlock(RuiFormTextDetail_default, {
197
+ }, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.label), 1)]), __props.required ? (openBlock(), createElementBlock("span", _hoisted_3, " * ")) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 10, _hoisted_1), !__props.hideDetails ? (openBlock(), createBlock(RuiFormTextDetail_default, {
210
198
  key: 0,
211
199
  class: "pt-1",
212
200
  "error-messages": __props.errorMessages,
@@ -1 +1 @@
1
- {"version":3,"file":"RuiSwitch.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../src/components/forms/switch/RuiSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSwitch',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n disabled = false,\n color = undefined,\n size = undefined,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n required = false,\n} = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst switchStyles = tv({\n slots: {\n wrapper: 'relative flex gap-2 items-start cursor-pointer group/switch',\n inner: 'relative w-[2.6875rem] h-6 shrink-0',\n input: 'peer appearance-none relative w-full h-full rounded-full bg-rui-grey-400 dark:bg-rui-grey-700 transition-all duration-75 ease-in-out cursor-pointer',\n toggle: [\n 'absolute w-5 h-5 transition-all duration-75 ease-in-out -translate-y-1/2 top-1/2 rounded-full pointer-events-none',\n 'bg-white left-0.5',\n `before:content-[''] before:absolute before:size-10 before:bg-black dark:before:bg-white before:rounded-full`,\n 'before:top-1/2 before:left-1/2 before:-translate-x-1/2 before:-translate-y-1/2 before:transition-all before:ease-in-out before:opacity-0',\n 'peer-active:before:opacity-20',\n 'group-hover/switch:shadow-1',\n ].join(' '),\n label: 'text-rui-text text-body-1',\n },\n variants: {\n checked: {\n true: {\n toggle: 'left-[1.3125rem]',\n },\n false: {},\n },\n disabled: {\n true: {\n wrapper: 'cursor-not-allowed',\n input: '!bg-rui-grey-300 dark:!bg-rui-grey-800 cursor-not-allowed',\n toggle: '!bg-rui-grey-500 dark:!bg-rui-grey-600 before:!content-none group-hover/switch:!shadow-none',\n label: 'text-rui-text-disabled',\n },\n },\n size: {\n sm: {\n inner: 'w-10 h-5 mt-0.5',\n toggle: 'w-4 h-4 before:size-6',\n },\n },\n validation: {\n error: {\n input: '!bg-rui-error dark:!bg-rui-error/[0.5]',\n label: 'text-rui-error',\n toggle: 'dark:!bg-rui-error',\n },\n success: {\n input: '!bg-rui-success dark:!bg-rui-success/[0.5]',\n label: 'text-rui-success',\n toggle: 'dark:!bg-rui-success',\n },\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n // Checked (no color): track + toggle dark mode\n { checked: true, disabled: false, class: { input: 'bg-black dark:bg-white' } },\n { checked: true, disabled: false, class: { toggle: 'dark:bg-black' } },\n\n // Checked + color (light: track bg, dark: track bg/50 + toggle bg)\n { checked: true, disabled: false, color: 'primary', class: { input: 'bg-rui-primary dark:bg-rui-primary/[0.5]', toggle: 'dark:bg-rui-primary' } },\n { checked: true, disabled: false, color: 'secondary', class: { input: 'bg-rui-secondary dark:bg-rui-secondary/[0.5]', toggle: 'dark:bg-rui-secondary' } },\n { checked: true, disabled: false, color: 'error', class: { input: 'bg-rui-error dark:bg-rui-error/[0.5]', toggle: 'dark:bg-rui-error' } },\n { checked: true, disabled: false, color: 'warning', class: { input: 'bg-rui-warning dark:bg-rui-warning/[0.5]', toggle: 'dark:bg-rui-warning' } },\n { checked: true, disabled: false, color: 'info', class: { input: 'bg-rui-info dark:bg-rui-info/[0.5]', toggle: 'dark:bg-rui-info' } },\n { checked: true, disabled: false, color: 'success', class: { input: 'bg-rui-success dark:bg-rui-success/[0.5]', toggle: 'dark:bg-rui-success' } },\n\n // Size sm + checked: different toggle position\n { size: 'sm', checked: true, class: { toggle: 'left-[1.375rem]' } },\n ],\n defaultVariants: {\n checked: false,\n disabled: false,\n },\n});\n\nconst { hasError, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst ui = computed<ReturnType<typeof switchStyles>>(() => switchStyles({\n checked: get(modelValue),\n disabled,\n size,\n validation: get(validation),\n color,\n}));\n\nfunction input(event: Event): void {\n const target = event.target;\n if (target instanceof HTMLInputElement)\n set(modelValue, target.checked);\n}\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"ui.wrapper()\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"modelValue || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div :class=\"ui.inner()\">\n <input\n :checked=\"modelValue\"\n type=\"checkbox\"\n :class=\"ui.input()\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n />\n <div :class=\"ui.toggle()\" />\n </div>\n <span\n v-if=\"label || $slots.default\"\n :class=\"ui.label()\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n ﹡\n </span>\n </span>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuiSwitch.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../../src/components/forms/switch/RuiSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n disabled?: boolean;\n color?: ContextColorsType;\n size?: 'sm';\n label?: string;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiSwitch',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n disabled = false,\n color = undefined,\n size = undefined,\n label = '',\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n required = false,\n} = defineProps<Props>();\n\ndefineSlots<{\n default?: () => any;\n}>();\n\nconst switchStyles = tv({\n slots: {\n // 13px to the label, the gap a checkbox or radio leaves, so the focus ring clears the text\n wrapper: 'relative flex gap-3.25 items-start cursor-pointer group/switch',\n // 40 × 22, nudged down a pixel to sit centred on the label's 24px line\n inner: 'relative w-10 h-5.5 mt-px shrink-0',\n // the off track is the control edge color, 3:1 against the page in both themes\n input: 'peer appearance-none relative w-full h-full rounded-full bg-rui-outline transition-colors duration-150 cursor-pointer focus-visible:focus-ring',\n toggle: [\n 'absolute size-4.5 transition-all duration-75 ease-in-out -translate-y-1/2 top-1/2 rounded-full pointer-events-none',\n 'bg-white left-0.5 shadow-rui-control',\n ].join(' '),\n label: 'text-rui-text text-sm/6',\n },\n variants: {\n checked: {\n true: {\n toggle: 'left-5',\n },\n false: {},\n },\n disabled: {\n true: {\n wrapper: 'cursor-not-allowed',\n input: 'bg-rui-neutral-200! dark:bg-rui-neutral-800! cursor-not-allowed',\n toggle: 'bg-rui-neutral-50! dark:bg-rui-neutral-600! shadow-none!',\n label: 'text-rui-text-disabled',\n },\n },\n size: {\n sm: {\n inner: 'w-8.5 h-4.5 mt-0.75',\n toggle: 'size-3.5',\n },\n },\n // a ring and the message below mark the state; a filled red or green track would read as \"on\"\n validation: {\n error: {\n input: 'ring-1 ring-rui-error',\n },\n success: {\n input: 'ring-1 ring-rui-success',\n },\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n { checked: false, disabled: false, class: { input: 'group-hover/switch:bg-rui-neutral-500 dark:group-hover/switch:bg-rui-neutral-400' } },\n\n // Checked (no color): an inverted neutral track, with a dark knob in dark mode\n { checked: true, disabled: false, class: { input: 'bg-rui-neutral-900 dark:bg-rui-neutral-100', toggle: 'dark:bg-rui-neutral-900' } },\n\n // Checked + color: a solid track with the white knob, in both themes\n { checked: true, disabled: false, color: 'primary', class: { input: 'bg-rui-primary dark:bg-rui-primary', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'secondary', class: { input: 'bg-rui-secondary dark:bg-rui-secondary', toggle: 'dark:bg-white' } },\n // a status color's dark `main` is a text tone, so the track takes the deep `darker` under the white knob\n { checked: true, disabled: false, color: 'error', class: { input: 'bg-rui-error dark:bg-rui-error-darker', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'warning', class: { input: 'bg-rui-warning dark:bg-rui-warning-darker', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'info', class: { input: 'bg-rui-info dark:bg-rui-info-darker', toggle: 'dark:bg-white' } },\n { checked: true, disabled: false, color: 'success', class: { input: 'bg-rui-success dark:bg-rui-success-darker', toggle: 'dark:bg-white' } },\n\n // Size sm + checked: 34 - 14 - 2\n { size: 'sm', checked: true, class: { toggle: 'left-4.5' } },\n ],\n defaultVariants: {\n checked: false,\n disabled: false,\n },\n});\n\nconst { hasError, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst ui = computed<ReturnType<typeof switchStyles>>(() => switchStyles({\n checked: get(modelValue),\n disabled,\n size,\n validation: get(validation),\n color,\n}));\n\nfunction input(event: Event): void {\n const target = event.target;\n if (target instanceof HTMLInputElement)\n set(modelValue, target.checked);\n}\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <label\n :class=\"ui.wrapper()\"\n :data-disabled=\"disabled || undefined\"\n :data-checked=\"modelValue || undefined\"\n :data-error=\"hasError ? '' : undefined\"\n >\n <div :class=\"ui.inner()\">\n <input\n :checked=\"modelValue\"\n type=\"checkbox\"\n :class=\"ui.input()\"\n :disabled=\"disabled\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n @input=\"input($event)\"\n />\n <div :class=\"ui.toggle()\" />\n </div>\n <span\n v-if=\"label || $slots.default\"\n :class=\"ui.label()\"\n >\n <slot>{{ label }}</slot>\n <span\n v-if=\"required\"\n class=\"text-rui-error\"\n >\n *\n </span>\n </span>\n </label>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n class=\"pt-1\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiTextArea.js","names":[],"sources":["../../../../src/components/forms/text-area/RuiTextArea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport { textAreaStyles, type TextAreaVariant } from '@/components/forms/text-area/text-area-styles';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { usePrependAppendWidth } from '@/composables/forms/use-prepend-append-width';\nimport { useTimeoutManager } from '@/composables/timeout-manager';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface TextAreaProps {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n variant?: TextAreaVariant;\n color?: ContextColorsType;\n textColor?: ContextColorsType;\n dense?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n prependIcon?: RuiIcons;\n appendIcon?: RuiIcons;\n readonly?: boolean;\n clearable?: boolean;\n noResize?: boolean;\n minRows?: number | string;\n maxRows?: number | string;\n rowHeight?: number | string;\n autoGrow?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTextArea',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst {\n label = '',\n placeholder = '',\n disabled = false,\n variant = 'default',\n color = undefined,\n textColor = undefined,\n dense = false,\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n prependIcon = undefined,\n appendIcon = undefined,\n readonly = false,\n clearable = false,\n noResize = false,\n minRows = 2,\n rowHeight = 1.5,\n maxRows = undefined,\n autoGrow = false,\n required = false,\n} = defineProps<TextAreaProps>();\n\nconst emit = defineEmits<{\n 'click:clear': [];\n}>();\n\ndefineSlots<{\n prepend?: () => any;\n append?: () => any;\n}>();\n\nconst isHovered = ref<boolean>(false);\nconst showClearButton = ref<boolean>(false);\n\nconst prepend = useTemplateRef<HTMLDivElement>('prepend');\nconst append = useTemplateRef<HTMLDivElement>('append');\nconst textarea = useTemplateRef<HTMLTextAreaElement>('textarea');\nconst textareaSizer = useTemplateRef<HTMLTextAreaElement>('textareaSizer');\n\nconst { focused } = useFocus(textarea);\nconst { create: delayClearHide } = useTimeoutManager();\nconst { prependWidth, appendWidth } = usePrependAppendWidth(prepend, append, 24);\nconst { hasError, hasSuccess, hasMessages, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst active = computed<boolean>(() => get(focused) || !!get(modelValue));\n\nconst showClearIcon = computed<boolean>(() => clearable && !!get(modelValue) && !disabled && !readonly);\n\nconst effectiveTextColor = computed<ContextColorsType | undefined>(() => {\n if (get(hasError))\n return 'error';\n if (get(hasSuccess))\n return 'success';\n if (textColor && !get(hasMessages))\n return textColor;\n return undefined;\n});\n\nconst effectiveColor = computed<ContextColorsType | undefined>(() => get(validation) ?? color);\n\nconst ui = computed<ReturnType<typeof textAreaStyles>>(() => textAreaStyles({\n variant,\n dense,\n disabled,\n noResize,\n hovered: get(isHovered),\n focused: get(focused),\n active: get(active),\n noLabel: !label,\n color: get(effectiveColor),\n textColor: get(effectiveTextColor),\n validation: get(validation),\n showLabel: !!label,\n}));\n\nconst wrapperStyle = computed<Record<string, string>>(() => ({\n '--prepend-w': get(prependWidth),\n '--append-w': get(appendWidth),\n}));\n\nconst legendText = computed<string>(() => {\n if (!get(active) || !label)\n return '';\n return required ? `${label} ﹡` : label;\n});\n\nconst fieldStyles = computed<{ minHeight: string; maxHeight?: string }>(() => {\n const height = Number(rowHeight);\n const min = Number(minRows);\n const max = Number(maxRows);\n const value: { minHeight: string; maxHeight?: string } = {\n minHeight: `${min * height + 0.75}rem`,\n };\n if (max)\n value.maxHeight = `${max * height + 0.75}rem`;\n\n return value;\n});\n\nfunction clearIconClicked(): void {\n set(modelValue, '');\n emit('click:clear');\n}\n\nfunction computeFieldHeight(newVal?: string, oldVal?: string): void {\n if (!autoGrow)\n return;\n\n const field = get(textarea);\n const fieldValue = newVal ?? get(modelValue);\n const fieldSizer = get(textareaSizer);\n if (!(field && fieldSizer))\n return;\n\n nextTick(() => {\n const sizerHeight = fieldSizer.scrollHeight;\n const fieldHeight = field.scrollHeight;\n let height = `${Math.max(sizerHeight, fieldHeight) / 16}rem`;\n if (oldVal && oldVal.length > fieldValue.length)\n height = `${Math.min(sizerHeight, fieldHeight) / 16}rem`;\n\n field.style.height = height;\n });\n}\n\nwatch(focused, (value) => {\n if (value) {\n set(showClearButton, true);\n }\n else {\n delayClearHide(() => set(showClearButton, false), 500);\n }\n});\n\nwatchDebounced(modelValue, computeFieldHeight, { debounce: 50 });\n\nonMounted(computeFieldHeight);\n\ndefineExpose({\n focus: () => get(textarea)?.focus(),\n element: textarea,\n});\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <div\n :class=\"ui.wrapper()\"\n :style=\"wrapperStyle\"\n data-id=\"wrapper\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <div\n v-if=\"$slots.prepend || prependIcon\"\n ref=\"prepend\"\n :class=\"ui.prepend()\"\n data-id=\"prepend\"\n >\n <slot\n v-if=\"$slots.prepend\"\n name=\"prepend\"\n />\n <div\n v-else-if=\"prependIcon\"\n :class=\"ui.icon()\"\n >\n <RuiIcon :name=\"prependIcon\" />\n </div>\n </div>\n <div :class=\"ui.inputWrapper()\">\n <textarea\n v-if=\"autoGrow\"\n ref=\"textareaSizer\"\n :value=\"modelValue\"\n :class=\"ui.textareaSizer()\"\n :style=\"fieldStyles\"\n aria-hidden=\"true\"\n disabled\n readonly\n />\n <textarea\n ref=\"textarea\"\n v-model=\"modelValue\"\n :placeholder=\"placeholder || ' '\"\n :class=\"ui.textarea()\"\n :style=\"fieldStyles\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n />\n <label :class=\"ui.label()\">\n <span :class=\"ui.labelText()\">\n {{ label }}\n <span\n v-if=\"required\"\n :class=\"ui.required()\"\n >\n ﹡\n </span>\n </span>\n </label>\n <fieldset\n v-if=\"variant === 'outlined'\"\n :class=\"ui.fieldset()\"\n >\n <legend :class=\"ui.legend()\">\n {{ legendText }}\n </legend>\n </fieldset>\n </div>\n <div\n v-if=\"$slots.append || appendIcon || showClearIcon\"\n ref=\"append\"\n :class=\"ui.append()\"\n data-id=\"append\"\n >\n <RuiButton\n v-if=\"showClearIcon\"\n :class=\"[ui.clearButton(), { hidden: !showClearButton }]\"\n variant=\"text\"\n type=\"button\"\n icon\n color=\"error\"\n data-id=\"clear-btn\"\n tabindex=\"-1\"\n @click.stop=\"clearIconClicked()\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"20\"\n />\n </RuiButton>\n <slot\n v-if=\"$slots.append\"\n name=\"append\"\n />\n <div\n v-else-if=\"appendIcon\"\n :class=\"ui.icon()\"\n >\n <RuiIcon :name=\"appendIcon\" />\n </div>\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :class=\"ui.details()\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiTextArea.js","names":[],"sources":["../../../../src/components/forms/text-area/RuiTextArea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport RuiFieldLabel from '@/components/forms/field-label/RuiFieldLabel.vue';\nimport { textAreaStyles } from '@/components/forms/text-area/text-area-styles';\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { type LabelPlacement, useLabelPlacement } from '@/composables/defaults/field';\nimport { usePrependAppendWidth } from '@/composables/forms/use-prepend-append-width';\nimport { useTimeoutManager } from '@/composables/timeout-manager';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\nimport { getNonRootAttrs, getRootAttrs } from '@/utils/helpers';\n\nexport interface TextAreaProps {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n /** Where the label shows; falls back to the nearest `RuiFieldDefaults`, then the app default, then `top`. */\n labelPlacement?: LabelPlacement;\n color?: ContextColorsType;\n textColor?: ContextColorsType;\n dense?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n hideDetails?: boolean;\n prependIcon?: RuiIcons;\n appendIcon?: RuiIcons;\n readonly?: boolean;\n clearable?: boolean;\n noResize?: boolean;\n minRows?: number | string;\n maxRows?: number | string;\n rowHeight?: number | string;\n autoGrow?: boolean;\n required?: boolean;\n}\n\ndefineOptions({\n name: 'RuiTextArea',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<string>({ required: true });\n\nconst {\n label = '',\n placeholder = '',\n disabled = false,\n labelPlacement = undefined,\n color = undefined,\n textColor = undefined,\n dense = false,\n hint = '',\n errorMessages = [],\n successMessages = [],\n hideDetails = false,\n prependIcon = undefined,\n appendIcon = undefined,\n readonly = false,\n clearable = false,\n noResize = false,\n minRows = 2,\n rowHeight = 1.5,\n maxRows = undefined,\n autoGrow = false,\n required = false,\n} = defineProps<TextAreaProps>();\n\nconst emit = defineEmits<{\n 'click:clear': [];\n}>();\n\ndefineSlots<{\n prepend?: () => any;\n append?: () => any;\n}>();\n\nconst isHovered = ref<boolean>(false);\nconst showClearButton = ref<boolean>(false);\n\nconst prepend = useTemplateRef<HTMLDivElement>('prepend');\nconst append = useTemplateRef<HTMLDivElement>('append');\nconst textarea = useTemplateRef<HTMLTextAreaElement>('textarea');\nconst textareaSizer = useTemplateRef<HTMLTextAreaElement>('textareaSizer');\n\nconst generatedId = useId();\nconst attrs = useAttrs();\n\nconst { focused } = useFocus(textarea);\nconst placement = useLabelPlacement(() => labelPlacement);\nconst { clear: cancelClearHide, create: delayClearHide } = useTimeoutManager();\nconst { prependWidth, appendWidth } = usePrependAppendWidth(prepend, append, 24);\nconst { hasError, hasSuccess, hasMessages, validation } = useFormTextDetail(\n () => errorMessages,\n () => successMessages,\n);\n\nconst textareaId = computed<string>(() => {\n const id = attrs.id;\n return typeof id === 'string' && id ? id : generatedId;\n});\n\nconst showClearIcon = computed<boolean>(() => clearable && !!get(modelValue) && !disabled && !readonly);\n\nconst effectiveTextColor = computed<ContextColorsType | undefined>(() => {\n if (get(hasError))\n return 'error';\n if (get(hasSuccess))\n return 'success';\n if (textColor && !get(hasMessages))\n return textColor;\n return undefined;\n});\n\nconst effectiveColor = computed<ContextColorsType | undefined>(() => get(validation) ?? color);\n\nconst ui = computed<ReturnType<typeof textAreaStyles>>(() => textAreaStyles({\n dense,\n disabled,\n readonly,\n noResize,\n hovered: get(isHovered),\n focused: get(focused),\n color: get(effectiveColor),\n textColor: get(effectiveTextColor),\n validation: get(validation),\n}));\n\nconst wrapperStyle = computed<Record<string, string>>(() => ({\n '--prepend-w': get(prependWidth),\n '--append-w': get(appendWidth),\n}));\n\nconst fieldStyles = computed<{ minHeight: string; maxHeight?: string }>(() => {\n const height = Number(rowHeight);\n const min = Number(minRows);\n const max = Number(maxRows);\n const value: { minHeight: string; maxHeight?: string } = {\n minHeight: `${min * height + 0.75}rem`,\n };\n if (max)\n value.maxHeight = `${max * height + 0.75}rem`;\n\n return value;\n});\n\nfunction clearIconClicked(): void {\n set(modelValue, '');\n emit('click:clear');\n}\n\nfunction computeFieldHeight(newVal?: string, oldVal?: string): void {\n if (!autoGrow)\n return;\n\n const field = get(textarea);\n const fieldValue = newVal ?? get(modelValue);\n const fieldSizer = get(textareaSizer);\n if (!(field && fieldSizer))\n return;\n\n nextTick(() => {\n const sizerHeight = fieldSizer.scrollHeight;\n const fieldHeight = field.scrollHeight;\n let height = `${Math.max(sizerHeight, fieldHeight) / 16}rem`;\n if (oldVal && oldVal.length > fieldValue.length)\n height = `${Math.min(sizerHeight, fieldHeight) / 16}rem`;\n\n field.style.height = height;\n });\n}\n\nwatch(focused, (value) => {\n if (value) {\n // a refocus within the delay keeps the button\n cancelClearHide();\n set(showClearButton, true);\n }\n else {\n delayClearHide(() => set(showClearButton, false), 500);\n }\n});\n\nwatchDebounced(modelValue, computeFieldHeight, { debounce: 50 });\n\nonMounted(computeFieldHeight);\n\ndefineExpose({\n focus: () => get(textarea)?.focus(),\n element: textarea,\n});\n</script>\n\n<template>\n <div v-bind=\"getRootAttrs($attrs)\">\n <RuiFieldLabel\n v-if=\"label\"\n :text=\"label\"\n :for=\"textareaId\"\n :hidden=\"placement === 'hidden'\"\n :required=\"required\"\n :disabled=\"disabled\"\n />\n <div\n :class=\"ui.wrapper()\"\n :style=\"wrapperStyle\"\n data-id=\"wrapper\"\n @mouseenter=\"isHovered = true\"\n @mouseleave=\"isHovered = false\"\n >\n <div\n v-if=\"$slots.prepend || prependIcon\"\n ref=\"prepend\"\n :class=\"ui.prepend()\"\n data-id=\"prepend\"\n >\n <slot\n v-if=\"$slots.prepend\"\n name=\"prepend\"\n />\n <div\n v-else-if=\"prependIcon\"\n :class=\"ui.icon()\"\n >\n <RuiIcon\n :name=\"prependIcon\"\n :size=\"18\"\n />\n </div>\n </div>\n <div :class=\"ui.inputWrapper()\">\n <textarea\n v-if=\"autoGrow\"\n ref=\"textareaSizer\"\n :value=\"modelValue\"\n :class=\"ui.textareaSizer()\"\n :style=\"fieldStyles\"\n aria-hidden=\"true\"\n disabled\n readonly\n />\n <textarea\n :id=\"textareaId\"\n ref=\"textarea\"\n v-model=\"modelValue\"\n :placeholder=\"placeholder || ' '\"\n :class=\"ui.textarea()\"\n :style=\"fieldStyles\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :aria-invalid=\"hasError\"\n v-bind=\"getNonRootAttrs($attrs)\"\n />\n <fieldset :class=\"ui.fieldset()\" />\n </div>\n <div\n v-if=\"$slots.append || appendIcon || showClearIcon\"\n ref=\"append\"\n :class=\"ui.append()\"\n data-id=\"append\"\n >\n <RuiButton\n v-if=\"showClearIcon\"\n :class=\"[ui.clearButton(), { hidden: !showClearButton }]\"\n variant=\"text\"\n type=\"button\"\n icon\n data-id=\"clear-btn\"\n aria-label=\"Clear\"\n tabindex=\"-1\"\n @click.stop=\"clearIconClicked()\"\n >\n <RuiIcon\n name=\"lu-x\"\n size=\"16\"\n />\n </RuiButton>\n <slot\n v-if=\"$slots.append\"\n name=\"append\"\n />\n <div\n v-else-if=\"appendIcon\"\n :class=\"ui.icon()\"\n >\n <RuiIcon\n :name=\"appendIcon\"\n :size=\"18\"\n />\n </div>\n </div>\n </div>\n <RuiFormTextDetail\n v-if=\"!hideDetails\"\n :class=\"ui.details()\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n"],"mappings":""}