@rotki/ui-library 3.1.7 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.js.map +1 -1
  2. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +4 -2
  3. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +3 -3
  4. package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/components/accordions/accordion/accordion-styles.d.ts +1 -0
  6. package/dist/components/accordions/accordion/accordion-styles.js +7 -0
  7. package/dist/components/accordions/accordion/accordion-styles.js.map +1 -0
  8. package/dist/components/accordions/accordions/RuiAccordions.js.map +1 -1
  9. package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +26 -9
  10. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js +11 -10
  11. package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/alerts/RuiAlert.js.map +1 -1
  13. package/dist/components/alerts/RuiAlert.vue.d.ts +4 -2
  14. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js +1 -65
  15. package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/components/alerts/alert-styles.d.ts +145 -0
  17. package/dist/components/alerts/alert-styles.js +70 -0
  18. package/dist/components/alerts/alert-styles.js.map +1 -0
  19. package/dist/components/avatars/RuiAvatar.js.map +1 -1
  20. package/dist/components/avatars/RuiAvatar.vue.d.ts +4 -2
  21. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js +1 -38
  22. package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/components/avatars/RuiAvatarGroup.js.map +1 -1
  24. package/dist/components/avatars/RuiAvatarGroup.vue.d.ts +3 -2
  25. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js +1 -13
  26. package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/avatars/avatar-group-styles.d.ts +49 -0
  28. package/dist/components/avatars/avatar-group-styles.js +18 -0
  29. package/dist/components/avatars/avatar-group-styles.js.map +1 -0
  30. package/dist/components/avatars/avatar-styles.d.ts +181 -0
  31. package/dist/components/avatars/avatar-styles.js +43 -0
  32. package/dist/components/avatars/avatar-styles.js.map +1 -0
  33. package/dist/components/buttons/button/RuiButton.js.map +1 -1
  34. package/dist/components/buttons/button/RuiButton.vue.d.ts +2 -1
  35. package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/components/buttons/button-group/RuiButtonGroup.js.map +1 -1
  37. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +10 -4
  38. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +9 -146
  39. package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/buttons/button-group/button-group-styles.d.ts +142 -0
  41. package/dist/components/buttons/button-group/button-group-styles.js +143 -0
  42. package/dist/components/buttons/button-group/button-group-styles.js.map +1 -0
  43. package/dist/components/calendar/RuiCalendar.js.map +1 -1
  44. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js +1 -8
  45. package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/calendar/RuiCalendarGrid.js.map +1 -1
  47. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +5 -25
  48. package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  49. package/dist/components/calendar/RuiCalendarHeader.js.map +1 -1
  50. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js +3 -3
  51. package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/components/calendar/RuiCalendarMenu.js.map +1 -1
  53. package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +3 -3
  54. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +10 -18
  55. package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  56. package/dist/components/calendar/calendar-grid-styles.d.ts +43 -0
  57. package/dist/components/calendar/calendar-grid-styles.js +26 -0
  58. package/dist/components/calendar/calendar-grid-styles.js.map +1 -0
  59. package/dist/components/calendar/calendar-menu-styles.d.ts +34 -0
  60. package/dist/components/calendar/calendar-menu-styles.js +17 -0
  61. package/dist/components/calendar/calendar-menu-styles.js.map +1 -0
  62. package/dist/components/calendar/calendar-styles.d.ts +16 -0
  63. package/dist/components/calendar/calendar-styles.js +13 -0
  64. package/dist/components/calendar/calendar-styles.js.map +1 -0
  65. package/dist/components/calendar/state.d.ts +8 -1
  66. package/dist/components/calendar/state.js +13 -1
  67. package/dist/components/calendar/state.js.map +1 -1
  68. package/dist/components/cards/RuiCard.js.map +1 -1
  69. package/dist/components/cards/RuiCard.vue.d.ts +3 -1
  70. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +3 -58
  71. package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/cards/RuiCardHeader.js.map +1 -1
  73. package/dist/components/cards/RuiCardHeader.vue.d.ts +3 -1
  74. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js +2 -20
  75. package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  76. package/dist/components/cards/card-header-styles.d.ts +46 -0
  77. package/dist/components/cards/card-header-styles.js +24 -0
  78. package/dist/components/cards/card-header-styles.js.map +1 -0
  79. package/dist/components/cards/card-styles.d.ts +175 -0
  80. package/dist/components/cards/card-styles.js +62 -0
  81. package/dist/components/cards/card-styles.js.map +1 -0
  82. package/dist/components/chips/RuiChip.js.map +1 -1
  83. package/dist/components/chips/RuiChip.vue.d.ts +4 -2
  84. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +2 -241
  85. package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  86. package/dist/components/chips/chip-styles.d.ts +223 -0
  87. package/dist/components/chips/chip-styles.js +246 -0
  88. package/dist/components/chips/chip-styles.js.map +1 -0
  89. package/dist/components/color-picker/RuiColorBoard.js.map +1 -1
  90. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js +3 -3
  91. package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  92. package/dist/components/color-picker/RuiColorHue.js.map +1 -1
  93. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +3 -3
  94. package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -1
  95. package/dist/components/color-picker/RuiColorPicker.js.map +1 -1
  96. package/dist/components/color-picker/RuiColorPicker.vue.d.ts +5 -2
  97. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js +3 -3
  98. package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/color-picker/color-board-styles.d.ts +1 -0
  100. package/dist/components/color-picker/color-board-styles.js +7 -0
  101. package/dist/components/color-picker/color-board-styles.js.map +1 -0
  102. package/dist/components/color-picker/color-hue-styles.d.ts +1 -0
  103. package/dist/components/color-picker/color-hue-styles.js +7 -0
  104. package/dist/components/color-picker/color-hue-styles.js.map +1 -0
  105. package/dist/components/color-picker/color-picker-styles.d.ts +1 -0
  106. package/dist/components/color-picker/color-picker-styles.js +7 -0
  107. package/dist/components/color-picker/color-picker-styles.js.map +1 -0
  108. package/dist/components/date-time-picker/RuiDateTimePicker.js.map +1 -1
  109. package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +39 -30
  110. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +8 -3
  111. package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  112. package/dist/components/date-time-picker/RuiDateTimePickerMenu.js.map +1 -1
  113. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +2 -1
  114. package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/components/date-time-picker/RuiTimezoneSelect.js.map +1 -1
  116. package/dist/components/date-time-picker/RuiTimezoneSelect.vue.d.ts +2 -1
  117. package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/components/divider/RuiDivider.js.map +1 -1
  119. package/dist/components/divider/RuiDivider.vue.d.ts +3 -1
  120. package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
  122. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +11 -5
  123. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +5 -0
  124. package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  125. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.js.map +1 -1
  126. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue.d.ts +2 -1
  127. package/dist/components/forms/auto-complete/RuiAutoCompleteOption.vue_vue_type_script_setup_true_lang.js.map +1 -1
  128. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.js.map +1 -1
  129. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue.d.ts +2 -2
  130. package/dist/components/forms/auto-complete/RuiAutoCompleteOptionList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  131. package/dist/components/forms/auto-complete/auto-complete-props.d.ts +0 -1
  132. package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -1
  133. package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +2 -1
  134. package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  135. package/dist/components/forms/checkbox/RuiCheckbox.js.map +1 -1
  136. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +2 -1
  137. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +4 -1
  138. package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.js.map +1 -1
  140. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue.d.ts +2 -1
  141. package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/components/forms/field-label/RuiFieldLabel.js.map +1 -1
  143. package/dist/components/forms/field-label/RuiFieldLabel.vue_vue_type_script_setup_true_lang.js +1 -11
  144. package/dist/components/forms/field-label/RuiFieldLabel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  145. package/dist/components/forms/field-label/field-label-styles.d.ts +43 -0
  146. package/dist/components/forms/field-label/field-label-styles.js +16 -0
  147. package/dist/components/forms/field-label/field-label-styles.js.map +1 -0
  148. package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -1
  149. package/dist/components/forms/file-upload/RuiFileUpload.vue.d.ts +36 -29
  150. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +5 -0
  151. package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
  152. package/dist/components/forms/radio-button/radio/RuiRadio.js.map +1 -1
  153. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +5 -3
  154. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +7 -8
  155. package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  156. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.js.map +1 -1
  157. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +5 -3
  158. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +9 -10
  159. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  160. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.js.map +1 -1
  161. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +9 -2
  162. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/components/forms/select/RuiMenuSelect.js.map +1 -1
  164. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +10 -4
  165. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +5 -0
  166. package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  167. package/dist/components/forms/select/RuiSimpleSelect.js.map +1 -1
  168. package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +22 -11
  169. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js +2 -11
  170. package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  171. package/dist/components/forms/select/simple-select-styles.d.ts +2 -0
  172. package/dist/components/forms/select/simple-select-styles.js +15 -0
  173. package/dist/components/forms/select/simple-select-styles.js.map +1 -0
  174. package/dist/components/forms/slider/RuiSlider.js.map +1 -1
  175. package/dist/components/forms/slider/RuiSlider.vue.d.ts +2 -1
  176. package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  177. package/dist/components/forms/switch/RuiSwitch.js.map +1 -1
  178. package/dist/components/forms/switch/RuiSwitch.vue.d.ts +2 -1
  179. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +1 -126
  180. package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/components/forms/switch/switch-styles.d.ts +151 -0
  182. package/dist/components/forms/switch/switch-styles.js +131 -0
  183. package/dist/components/forms/switch/switch-styles.js.map +1 -0
  184. package/dist/components/forms/text-area/RuiTextArea.js.map +1 -1
  185. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +3 -1
  186. package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  187. package/dist/components/forms/text-field/RuiTextField.js.map +1 -1
  188. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +3 -1
  189. package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  190. package/dist/components/icons/RuiIcon.js.map +1 -1
  191. package/dist/components/icons/RuiIcon.vue.d.ts +3 -1
  192. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +2 -28
  193. package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  194. package/dist/components/icons/icon-styles.d.ts +44 -0
  195. package/dist/components/icons/icon-styles.js +33 -0
  196. package/dist/components/icons/icon-styles.js.map +1 -0
  197. package/dist/components/index.d.ts +2 -2
  198. package/dist/components/loaders/RuiSkeletonBase.js.map +1 -1
  199. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js +2 -12
  200. package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
  201. package/dist/components/loaders/RuiSkeletonLoader.js.map +1 -1
  202. package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +3 -1
  203. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js +3 -13
  204. package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  205. package/dist/components/loaders/skeleton-base-styles.d.ts +25 -0
  206. package/dist/components/loaders/skeleton-base-styles.js +16 -0
  207. package/dist/components/loaders/skeleton-base-styles.js.map +1 -0
  208. package/dist/components/loaders/skeleton-loader-styles.d.ts +37 -0
  209. package/dist/components/loaders/skeleton-loader-styles.js +18 -0
  210. package/dist/components/loaders/skeleton-loader-styles.js.map +1 -0
  211. package/dist/components/logos/RuiLogo.js.map +1 -1
  212. package/dist/components/logos/RuiLogo.vue.d.ts +3 -1
  213. package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -1
  214. package/dist/components/overlays/badge/RuiBadge.js.map +1 -1
  215. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +3 -1
  216. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js +1 -83
  217. package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  218. package/dist/components/overlays/badge/badge-styles.d.ts +193 -0
  219. package/dist/components/overlays/badge/badge-styles.js +88 -0
  220. package/dist/components/overlays/badge/badge-styles.js.map +1 -0
  221. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.js.map +1 -1
  222. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +11 -5
  223. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js +6 -7
  224. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js.map +1 -1
  225. package/dist/components/overlays/dialog/RuiDialog.js.map +1 -1
  226. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +5 -3
  227. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +3 -14
  228. package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  229. package/dist/components/overlays/dialog/dialog-styles.d.ts +40 -0
  230. package/dist/components/overlays/dialog/dialog-styles.js +18 -0
  231. package/dist/components/overlays/dialog/dialog-styles.js.map +1 -0
  232. package/dist/components/overlays/menu/RuiMenu.js.map +1 -1
  233. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +11 -1
  234. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +113 -58
  235. package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  236. package/dist/components/overlays/menu/menu-styles.d.ts +58 -0
  237. package/dist/components/overlays/menu/menu-styles.js +25 -0
  238. package/dist/components/overlays/menu/menu-styles.js.map +1 -0
  239. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.js.map +1 -1
  240. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +2 -1
  241. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +4 -69
  242. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  243. package/dist/components/overlays/navigation-drawer/navigation-drawer-styles.d.ts +76 -0
  244. package/dist/components/overlays/navigation-drawer/navigation-drawer-styles.js +72 -0
  245. package/dist/components/overlays/navigation-drawer/navigation-drawer-styles.js.map +1 -0
  246. package/dist/components/overlays/notification/RuiNotification.js.map +1 -1
  247. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +2 -1
  248. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +3 -3
  249. package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
  250. package/dist/components/overlays/notification/notification-styles.d.ts +1 -0
  251. package/dist/components/overlays/notification/notification-styles.js +7 -0
  252. package/dist/components/overlays/notification/notification-styles.js.map +1 -0
  253. package/dist/components/overlays/tooltip/RuiTooltip.js.map +1 -1
  254. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +8 -4
  255. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +42 -25
  256. package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  257. package/dist/components/overlays/tooltip/tooltip-styles.d.ts +2 -0
  258. package/dist/components/overlays/tooltip/tooltip-styles.js +3 -1
  259. package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -1
  260. package/dist/components/progress/RuiProgress.js.map +1 -1
  261. package/dist/components/progress/RuiProgress.vue.d.ts +3 -1
  262. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +1 -133
  263. package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
  264. package/dist/components/progress/progress-styles.d.ts +181 -0
  265. package/dist/components/progress/progress-styles.js +139 -0
  266. package/dist/components/progress/progress-styles.js.map +1 -0
  267. package/dist/components/steppers/RuiFooterStepper.js.map +1 -1
  268. package/dist/components/steppers/RuiFooterStepper.vue.d.ts +2 -1
  269. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +3 -13
  270. package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  271. package/dist/components/steppers/RuiStepper.js.map +1 -1
  272. package/dist/components/steppers/RuiStepper.vue.d.ts +3 -1
  273. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +4 -94
  274. package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  275. package/dist/components/steppers/RuiStepperIcon.js.map +1 -1
  276. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +2 -34
  277. package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  278. package/dist/components/steppers/footer-stepper-styles.d.ts +28 -0
  279. package/dist/components/steppers/footer-stepper-styles.js +16 -0
  280. package/dist/components/steppers/footer-stepper-styles.js.map +1 -0
  281. package/dist/components/steppers/stepper-icon-styles.d.ts +60 -0
  282. package/dist/components/steppers/stepper-icon-styles.js +39 -0
  283. package/dist/components/steppers/stepper-icon-styles.js.map +1 -0
  284. package/dist/components/steppers/stepper-styles.d.ts +202 -0
  285. package/dist/components/steppers/stepper-styles.js +98 -0
  286. package/dist/components/steppers/stepper-styles.js.map +1 -0
  287. package/dist/components/tables/RuiDataTable.js.map +1 -1
  288. package/dist/components/tables/RuiDataTable.vue.d.ts +14 -19
  289. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +25 -29
  290. package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  291. package/dist/components/tables/RuiExpandButton.js.map +1 -1
  292. package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -1
  293. package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  294. package/dist/components/tables/RuiTable.js.map +1 -1
  295. package/dist/components/tables/RuiTable.vue.d.ts +4 -2
  296. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js +1 -32
  297. package/dist/components/tables/RuiTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  298. package/dist/components/tables/RuiTableEmptyState.js.map +1 -1
  299. package/dist/components/tables/RuiTableEmptyState.vue.d.ts +3 -1
  300. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +1 -15
  301. package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  302. package/dist/components/tables/RuiTableErrorState.js.map +1 -1
  303. package/dist/components/tables/RuiTableErrorState.vue.d.ts +4 -2
  304. package/dist/components/tables/RuiTableErrorState.vue_vue_type_script_setup_true_lang.js +2 -5
  305. package/dist/components/tables/RuiTableErrorState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  306. package/dist/components/tables/RuiTableHead.js.map +1 -1
  307. package/dist/components/tables/RuiTableHead.vue.d.ts +3 -2
  308. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +4 -37
  309. package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
  310. package/dist/components/tables/RuiTableLoadingState.js.map +1 -1
  311. package/dist/components/tables/RuiTableLoadingState.vue.d.ts +3 -1
  312. package/dist/components/tables/RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js +1 -8
  313. package/dist/components/tables/RuiTableLoadingState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  314. package/dist/components/tables/RuiTablePagination.js.map +1 -1
  315. package/dist/components/tables/RuiTablePagination.vue.d.ts +2 -1
  316. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +1 -30
  317. package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -1
  319. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +2 -4
  320. package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  321. package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -1
  322. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue.d.ts +1 -1
  323. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +2 -3
  324. package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
  325. package/dist/components/tables/data-table/context.d.ts +6 -6
  326. package/dist/components/tables/data-table/context.js +1 -1
  327. package/dist/components/tables/data-table/context.js.map +1 -1
  328. package/dist/components/tables/table-empty-state-styles.d.ts +43 -0
  329. package/dist/components/tables/table-empty-state-styles.js +20 -0
  330. package/dist/components/tables/table-empty-state-styles.js.map +1 -0
  331. package/dist/components/tables/table-error-state-styles.d.ts +36 -0
  332. package/dist/components/tables/table-error-state-styles.js +15 -0
  333. package/dist/components/tables/table-error-state-styles.js.map +1 -0
  334. package/dist/components/tables/table-head-styles.d.ts +91 -0
  335. package/dist/components/tables/table-head-styles.js +39 -0
  336. package/dist/components/tables/table-head-styles.js.map +1 -0
  337. package/dist/components/tables/table-loading-state-styles.d.ts +34 -0
  338. package/dist/components/tables/table-loading-state-styles.js +13 -0
  339. package/dist/components/tables/table-loading-state-styles.js.map +1 -0
  340. package/dist/components/tables/table-pagination-styles.d.ts +82 -0
  341. package/dist/components/tables/table-pagination-styles.js +35 -0
  342. package/dist/components/tables/table-pagination-styles.js.map +1 -0
  343. package/dist/components/tables/table-props.d.ts +9 -0
  344. package/dist/components/tables/table-props.js +13 -1
  345. package/dist/components/tables/table-props.js.map +1 -1
  346. package/dist/components/tables/table-styles.d.ts +62 -0
  347. package/dist/components/tables/table-styles.js +37 -0
  348. package/dist/components/tables/table-styles.js.map +1 -0
  349. package/dist/components/tabs/tab/RuiTab.js.map +1 -1
  350. package/dist/components/tabs/tab/RuiTab.vue.d.ts +4 -2
  351. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +3 -84
  352. package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  353. package/dist/components/tabs/tab/tab-styles.d.ts +153 -0
  354. package/dist/components/tabs/tab/tab-styles.js +89 -0
  355. package/dist/components/tabs/tab/tab-styles.js.map +1 -0
  356. package/dist/components/tabs/tab-item/RuiTabItem.js.map +1 -1
  357. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -1
  358. package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  359. package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
  360. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +5 -12
  361. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +8 -14
  362. package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
  363. package/dist/components/tabs/tabs/RuiTabs.js.map +1 -1
  364. package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +26 -14
  365. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +13 -150
  366. package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  367. package/dist/components/tabs/tabs/tabs-styles.d.ts +168 -0
  368. package/dist/components/tabs/tabs/tabs-styles.js +142 -0
  369. package/dist/components/tabs/tabs/tabs-styles.js.map +1 -0
  370. package/dist/components/time-picker/RuiTimePicker.js.map +1 -1
  371. package/dist/components/time-picker/RuiTimePicker.vue.d.ts +2 -1
  372. package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  373. package/dist/composables/dropdown-menu.js.map +1 -1
  374. package/dist/composables/floating.d.ts +3 -1
  375. package/dist/composables/floating.js +8 -9
  376. package/dist/composables/floating.js.map +1 -1
  377. package/dist/composables/forms/auto-complete/search.js.map +1 -1
  378. package/dist/composables/forms/auto-complete/value.d.ts +1 -1
  379. package/dist/composables/forms/auto-complete/value.js.map +1 -1
  380. package/dist/composables/prop-model.d.ts +21 -0
  381. package/dist/composables/prop-model.js +33 -0
  382. package/dist/composables/prop-model.js.map +1 -0
  383. package/dist/composables/tables/data-table/columns.d.ts +2 -1
  384. package/dist/composables/tables/data-table/columns.js.map +1 -1
  385. package/dist/composables/tables/data-table/types.d.ts +35 -0
  386. package/dist/composables/tables/data-table/types.js.map +1 -1
  387. package/dist/composables/use-rui-i18n.d.ts +6 -3
  388. package/dist/composables/use-rui-i18n.js +1 -1
  389. package/dist/composables/use-rui-i18n.js.map +1 -1
  390. package/dist/icons/icons_1.d.ts +1 -1
  391. package/dist/icons/icons_1.js +10 -9
  392. package/dist/icons/icons_1.js.map +1 -1
  393. package/dist/icons/icons_2.d.ts +1 -1
  394. package/dist/icons/icons_2.js +9 -11
  395. package/dist/icons/icons_2.js.map +1 -1
  396. package/dist/icons/icons_3.d.ts +1 -1
  397. package/dist/icons/icons_3.js +11 -5
  398. package/dist/icons/icons_3.js.map +1 -1
  399. package/dist/icons/icons_4.d.ts +1 -1
  400. package/dist/icons/icons_4.js +5 -10
  401. package/dist/icons/icons_4.js.map +1 -1
  402. package/dist/icons/icons_5.d.ts +1 -0
  403. package/dist/icons/icons_5.js +10 -1
  404. package/dist/icons/icons_5.js.map +1 -1
  405. package/dist/icons/index.d.ts +1 -1
  406. package/dist/icons/index.js +7 -6
  407. package/dist/icons/index.js.map +1 -1
  408. package/dist/index.d.ts +7 -1
  409. package/dist/index.js +20 -12
  410. package/dist/index.js.map +1 -1
  411. package/dist/types/attributes.d.ts +9 -0
  412. package/dist/utils/blockie.js +10 -9
  413. package/dist/utils/blockie.js.map +1 -1
  414. package/dist/utils/form-text-detail.d.ts +2 -0
  415. package/dist/utils/form-text-detail.js +5 -1
  416. package/dist/utils/form-text-detail.js.map +1 -1
  417. package/dist/web-types.json +290 -110
  418. package/package.json +3 -3
@@ -1,8 +1,10 @@
1
+ import type { HTMLAttributes } from 'vue';
1
2
  import { type Props as SkeletonBaseProps } from './RuiSkeletonBase.vue.js';
2
3
  import { SkeletonType } from './skeleton-type.js';
3
4
  export interface Props extends SkeletonBaseProps {
4
5
  type?: SkeletonType;
5
6
  }
6
- declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ type __VLS_Props = Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>;
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
9
  declare const _default: typeof __VLS_export;
8
10
  export default _default;
@@ -1,6 +1,7 @@
1
- import { cn, tv } from "../../utils/tv.js";
1
+ import { cn } from "../../utils/tv.js";
2
2
  import RuiSkeletonBase_default from "./RuiSkeletonBase.js";
3
3
  import { SkeletonType } from "./skeleton-type.js";
4
+ import { skeletonLoaderStyles } from "./skeleton-loader-styles.js";
4
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, mergeProps, openBlock, unref, useAttrs } from "vue";
5
6
  //#region src/components/loaders/RuiSkeletonLoader.vue?vue&type=script&setup=true&lang.ts
6
7
  var RuiSkeletonLoader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -13,19 +14,8 @@ var RuiSkeletonLoader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
13
14
  },
14
15
  setup(__props) {
15
16
  const multiLineTypes = [SkeletonType.PARAGRAPH, SkeletonType.ARTICLE];
16
- const skeletonType = tv({ variants: { type: {
17
- [SkeletonType.CUSTOM]: "box-border",
18
- [SkeletonType.TEXT]: "w-full h-4 rounded-rui-control",
19
- [SkeletonType.HEADING]: "w-full h-6 rounded-rui-control",
20
- [SkeletonType.BUTTON]: "w-full max-w-24 h-9 rounded-rui-control",
21
- [SkeletonType.ICON]: "w-6 h-6 rounded-full",
22
- [SkeletonType.AVATAR]: "w-10 h-10 rounded-full",
23
- [SkeletonType.THUMBNAIL]: "w-14 h-14 rounded-xs",
24
- [SkeletonType.PARAGRAPH]: "flex flex-col gap-2",
25
- [SkeletonType.ARTICLE]: "flex flex-col gap-2"
26
- } } });
27
17
  const attrs = useAttrs();
28
- const ui = computed(() => skeletonType({
18
+ const ui = computed(() => skeletonLoaderStyles({
29
19
  type: __props.type,
30
20
  class: cn(attrs.class)
31
21
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js","names":["_unref","_openBlock","_createBlock","RuiSkeletonBase","_mergeProps","_createElementBlock","_createCommentVNode","_createVNode"],"sources":["../../../src/components/loaders/RuiSkeletonLoader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport RuiSkeletonBase, {\n type Props as SkeletonBaseProps,\n} from '@/components/loaders/RuiSkeletonBase.vue';\nimport { SkeletonType } from '@/components/loaders/skeleton-type';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface Props extends SkeletonBaseProps {\n type?: SkeletonType;\n}\n\ndefineOptions({\n name: 'RuiSkeletonLoader',\n inheritAttrs: false,\n});\n\nconst { type = SkeletonType.TEXT, rounded } = defineProps<Props>();\n\nconst multiLineTypes: SkeletonType[] = [SkeletonType.PARAGRAPH, SkeletonType.ARTICLE];\n\nconst skeletonType = tv({\n variants: {\n type: {\n [SkeletonType.CUSTOM]: 'box-border',\n [SkeletonType.TEXT]: 'w-full h-4 rounded-rui-control',\n [SkeletonType.HEADING]: 'w-full h-6 rounded-rui-control',\n [SkeletonType.BUTTON]: 'w-full max-w-24 h-9 rounded-rui-control',\n [SkeletonType.ICON]: 'w-6 h-6 rounded-full',\n [SkeletonType.AVATAR]: 'w-10 h-10 rounded-full',\n [SkeletonType.THUMBNAIL]: 'w-14 h-14 rounded-xs',\n [SkeletonType.PARAGRAPH]: 'flex flex-col gap-2',\n [SkeletonType.ARTICLE]: 'flex flex-col gap-2',\n },\n },\n});\n\nconst attrs = useAttrs();\nconst ui = computed<string>(() => skeletonType({ type, class: cn(attrs.class) }));\nconst isMultiLine = computed<boolean>(() => multiLineTypes.includes(type));\n</script>\n\n<template>\n <RuiSkeletonBase\n v-if=\"!isMultiLine\"\n :class=\"ui\"\n :rounded=\"rounded\"\n v-bind=\"{ ...attrs, class: undefined }\"\n />\n <div\n v-else\n :class=\"ui\"\n v-bind=\"{ ...attrs, class: undefined }\"\n >\n <RuiSkeletonBase\n v-if=\"type === SkeletonType.ARTICLE\"\n class=\"w-full h-6 rounded-rui-control mb-1\"\n :rounded=\"rounded\"\n />\n <RuiSkeletonBase\n class=\"w-full h-3 rounded-rui-control\"\n :rounded=\"rounded\"\n />\n <RuiSkeletonBase\n class=\"w-full h-3 rounded-rui-control max-w-[80%]\"\n :rounded=\"rounded\"\n />\n <RuiSkeletonBase\n class=\"w-full h-3 rounded-rui-control max-w-[90%]\"\n :rounded=\"rounded\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAkBA,MAAM,iBAAiC,CAAC,aAAa,WAAW,aAAa,OAAO;EAEpF,MAAM,eAAe,GAAG,EACtB,UAAU,EACR,MAAM;IACH,aAAa,SAAS;IACtB,aAAa,OAAO;IACpB,aAAa,UAAU;IACvB,aAAa,SAAS;IACtB,aAAa,OAAO;IACpB,aAAa,SAAS;IACtB,aAAa,YAAY;IACzB,aAAa,YAAY;IACzB,aAAa,UAAU;EAC1B,EACF,EACF,CAAC;EAED,MAAM,QAAQ,SAAS;EACvB,MAAM,KAAK,eAAuB,aAAa;GAAE,MAAG,QAAA;GAAG,OAAO,GAAG,MAAM,KAAK;EAAE,CAAC,CAAC;EAChF,MAAM,cAAc,eAAwB,eAAe,SAAS,QAAA,IAAI,CAAC;;GAK9D,OAAA,CAAAA,MAAA,WAAA,KADTC,UAAA,GAAAC,YAKEC,yBALFC,WAKE;;IAHC,OAAOJ,MAAA,EAAA;IACP,SAAS,QAAA;GACG,GAAA;IAAA,GAAAA,MAAA,KAAA;IAAK,OAAS,KAAA;GAAS,CAAA,GAAA,MAAA,IAAA,CAAA,SAAA,SAAA,CAAA,MAEtCC,UAAA,GAAAI,mBAsBM,OAtBND,WAsBM;;IApBH,OAAOJ,MAAA,EAAA;GACK,GAAA;IAAA,GAAAA,MAAA,KAAA;IAAK,OAAS,KAAA;GAAS,CAAA,GAAA;IAG5B,QAAA,SAASA,MAAA,YAAA,CAAY,CAAC,WAD9BC,UAAA,GAAAC,YAIEC,yBAAA;;KAFA,OAAM;KACL,SAAS,QAAA;;IAEZI,YAGEJ,yBAAA;KAFA,OAAM;KACL,SAAS,QAAA;;IAEZI,YAGEJ,yBAAA;KAFA,OAAM;KACL,SAAS,QAAA;;IAEZI,YAGEJ,yBAAA;KAFA,OAAM;KACL,SAAS,QAAA"}
1
+ {"version":3,"file":"RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js","names":["_unref","_openBlock","_createBlock","RuiSkeletonBase","_mergeProps","_createElementBlock","_createCommentVNode","_createVNode"],"sources":["../../../src/components/loaders/RuiSkeletonLoader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { HTMLAttributes } from 'vue';\nimport RuiSkeletonBase, {\n type Props as SkeletonBaseProps,\n} from '@/components/loaders/RuiSkeletonBase.vue';\nimport { SkeletonType } from '@/components/loaders/skeleton-type';\nimport { cn } from '@/utils/tv';\nimport { skeletonLoaderStyles } from './skeleton-loader-styles';\n\nexport interface Props extends SkeletonBaseProps {\n type?: SkeletonType;\n}\n\ndefineOptions({\n name: 'RuiSkeletonLoader',\n inheritAttrs: false,\n});\n\nconst { type = SkeletonType.TEXT, rounded } = defineProps<Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>>();\n\nconst multiLineTypes: SkeletonType[] = [SkeletonType.PARAGRAPH, SkeletonType.ARTICLE];\n\nconst attrs = useAttrs();\nconst ui = computed<string>(() => skeletonLoaderStyles({ type, class: cn(attrs.class) }));\nconst isMultiLine = computed<boolean>(() => multiLineTypes.includes(type));\n</script>\n\n<template>\n <RuiSkeletonBase\n v-if=\"!isMultiLine\"\n :class=\"ui\"\n :rounded=\"rounded\"\n v-bind=\"{ ...attrs, class: undefined }\"\n />\n <div\n v-else\n :class=\"ui\"\n v-bind=\"{ ...attrs, class: undefined }\"\n >\n <RuiSkeletonBase\n v-if=\"type === SkeletonType.ARTICLE\"\n class=\"w-full h-6 rounded-rui-control mb-1\"\n :rounded=\"rounded\"\n />\n <RuiSkeletonBase\n class=\"w-full h-3 rounded-rui-control\"\n :rounded=\"rounded\"\n />\n <RuiSkeletonBase\n class=\"w-full h-3 rounded-rui-control max-w-[80%]\"\n :rounded=\"rounded\"\n />\n <RuiSkeletonBase\n class=\"w-full h-3 rounded-rui-control max-w-[90%]\"\n :rounded=\"rounded\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAoBA,MAAM,iBAAiC,CAAC,aAAa,WAAW,aAAa,OAAO;EAEpF,MAAM,QAAQ,SAAS;EACvB,MAAM,KAAK,eAAuB,qBAAqB;GAAE,MAAG,QAAA;GAAG,OAAO,GAAG,MAAM,KAAK;EAAE,CAAC,CAAC;EACxF,MAAM,cAAc,eAAwB,eAAe,SAAS,QAAA,IAAI,CAAC;;GAK9D,OAAA,CAAAA,MAAA,WAAA,KADTC,UAAA,GAAAC,YAKEC,yBALFC,WAKE;;IAHC,OAAOJ,MAAA,EAAA;IACP,SAAS,QAAA;GACG,GAAA;IAAA,GAAAA,MAAA,KAAA;IAAK,OAAS,KAAA;GAAS,CAAA,GAAA,MAAA,IAAA,CAAA,SAAA,SAAA,CAAA,MAEtCC,UAAA,GAAAI,mBAsBM,OAtBND,WAsBM;;IApBH,OAAOJ,MAAA,EAAA;GACK,GAAA;IAAA,GAAAA,MAAA,KAAA;IAAK,OAAS,KAAA;GAAS,CAAA,GAAA;IAG5B,QAAA,SAASA,MAAA,YAAA,CAAY,CAAC,WAD9BC,UAAA,GAAAC,YAIEC,yBAAA;;KAFA,OAAM;KACL,SAAS,QAAA;;IAEZI,YAGEJ,yBAAA;KAFA,OAAM;KACL,SAAS,QAAA;;IAEZI,YAGEJ,yBAAA;KAFA,OAAM;KACL,SAAS,QAAA;;IAEZI,YAGEJ,yBAAA;KAFA,OAAM;KACL,SAAS,QAAA"}
@@ -0,0 +1,25 @@
1
+ export declare const skeletonBaseStyles: import("tailwind-variants").TVReturnType<{
2
+ rounded: {
3
+ none: "rounded-none";
4
+ sm: "rounded-xs";
5
+ md: "rounded-rui-control";
6
+ lg: "rounded-rui-card";
7
+ full: "rounded-full";
8
+ };
9
+ }, undefined, "animate-pulse bg-rui-neutral-200 dark:bg-rui-neutral-800", {
10
+ rounded: {
11
+ none: "rounded-none";
12
+ sm: "rounded-xs";
13
+ md: "rounded-rui-control";
14
+ lg: "rounded-rui-card";
15
+ full: "rounded-full";
16
+ };
17
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
18
+ rounded: {
19
+ none: "rounded-none";
20
+ sm: "rounded-xs";
21
+ md: "rounded-rui-control";
22
+ lg: "rounded-rui-card";
23
+ full: "rounded-full";
24
+ };
25
+ }, undefined>>;
@@ -0,0 +1,16 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ //#region src/components/loaders/skeleton-base-styles.ts
3
+ var skeletonBaseStyles = tv({
4
+ base: "animate-pulse bg-rui-neutral-200 dark:bg-rui-neutral-800",
5
+ variants: { rounded: {
6
+ none: "rounded-none",
7
+ sm: "rounded-xs",
8
+ md: "rounded-rui-control",
9
+ lg: "rounded-rui-card",
10
+ full: "rounded-full"
11
+ } }
12
+ });
13
+ //#endregion
14
+ export { skeletonBaseStyles };
15
+
16
+ //# sourceMappingURL=skeleton-base-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton-base-styles.js","names":[],"sources":["../../../src/components/loaders/skeleton-base-styles.ts"],"sourcesContent":["import { tv } from '@/utils/tv';\n\nexport const skeletonBaseStyles = tv({\n // zinc steps rather than translucent black and white, which in dark came out lighter than any surface\n base: 'animate-pulse bg-rui-neutral-200 dark:bg-rui-neutral-800',\n variants: {\n rounded: {\n none: 'rounded-none',\n sm: 'rounded-xs',\n md: 'rounded-rui-control',\n lg: 'rounded-rui-card',\n full: 'rounded-full',\n },\n },\n});\n"],"mappings":";;AAEA,IAAa,qBAAqB,GAAG;CAEnC,MAAM;CACN,UAAU,EACR,SAAS;EACP,MAAM;EACN,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,MAAM;CACR,EACF;AACF,CAAC"}
@@ -0,0 +1,37 @@
1
+ export declare const skeletonLoaderStyles: import("tailwind-variants").TVReturnType<{
2
+ type: {
3
+ custom: "box-border";
4
+ text: "w-full h-4 rounded-rui-control";
5
+ heading: "w-full h-6 rounded-rui-control";
6
+ button: "w-full max-w-24 h-9 rounded-rui-control";
7
+ icon: "w-6 h-6 rounded-full";
8
+ avatar: "w-10 h-10 rounded-full";
9
+ thumbnail: "w-14 h-14 rounded-xs";
10
+ paragraph: "flex flex-col gap-2";
11
+ article: "flex flex-col gap-2";
12
+ };
13
+ }, undefined, undefined, {
14
+ type: {
15
+ custom: "box-border";
16
+ text: "w-full h-4 rounded-rui-control";
17
+ heading: "w-full h-6 rounded-rui-control";
18
+ button: "w-full max-w-24 h-9 rounded-rui-control";
19
+ icon: "w-6 h-6 rounded-full";
20
+ avatar: "w-10 h-10 rounded-full";
21
+ thumbnail: "w-14 h-14 rounded-xs";
22
+ paragraph: "flex flex-col gap-2";
23
+ article: "flex flex-col gap-2";
24
+ };
25
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
26
+ type: {
27
+ custom: "box-border";
28
+ text: "w-full h-4 rounded-rui-control";
29
+ heading: "w-full h-6 rounded-rui-control";
30
+ button: "w-full max-w-24 h-9 rounded-rui-control";
31
+ icon: "w-6 h-6 rounded-full";
32
+ avatar: "w-10 h-10 rounded-full";
33
+ thumbnail: "w-14 h-14 rounded-xs";
34
+ paragraph: "flex flex-col gap-2";
35
+ article: "flex flex-col gap-2";
36
+ };
37
+ }, undefined>>;
@@ -0,0 +1,18 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ import { SkeletonType } from "./skeleton-type.js";
3
+ //#region src/components/loaders/skeleton-loader-styles.ts
4
+ var skeletonLoaderStyles = tv({ variants: { type: {
5
+ [SkeletonType.CUSTOM]: "box-border",
6
+ [SkeletonType.TEXT]: "w-full h-4 rounded-rui-control",
7
+ [SkeletonType.HEADING]: "w-full h-6 rounded-rui-control",
8
+ [SkeletonType.BUTTON]: "w-full max-w-24 h-9 rounded-rui-control",
9
+ [SkeletonType.ICON]: "w-6 h-6 rounded-full",
10
+ [SkeletonType.AVATAR]: "w-10 h-10 rounded-full",
11
+ [SkeletonType.THUMBNAIL]: "w-14 h-14 rounded-xs",
12
+ [SkeletonType.PARAGRAPH]: "flex flex-col gap-2",
13
+ [SkeletonType.ARTICLE]: "flex flex-col gap-2"
14
+ } } });
15
+ //#endregion
16
+ export { skeletonLoaderStyles };
17
+
18
+ //# sourceMappingURL=skeleton-loader-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton-loader-styles.js","names":[],"sources":["../../../src/components/loaders/skeleton-loader-styles.ts"],"sourcesContent":["import { SkeletonType } from '@/components/loaders/skeleton-type';\nimport { tv } from '@/utils/tv';\n\nexport const skeletonLoaderStyles = tv({\n variants: {\n type: {\n [SkeletonType.CUSTOM]: 'box-border',\n [SkeletonType.TEXT]: 'w-full h-4 rounded-rui-control',\n [SkeletonType.HEADING]: 'w-full h-6 rounded-rui-control',\n [SkeletonType.BUTTON]: 'w-full max-w-24 h-9 rounded-rui-control',\n [SkeletonType.ICON]: 'w-6 h-6 rounded-full',\n [SkeletonType.AVATAR]: 'w-10 h-10 rounded-full',\n [SkeletonType.THUMBNAIL]: 'w-14 h-14 rounded-xs',\n [SkeletonType.PARAGRAPH]: 'flex flex-col gap-2',\n [SkeletonType.ARTICLE]: 'flex flex-col gap-2',\n },\n },\n});\n"],"mappings":";;;AAGA,IAAa,uBAAuB,GAAG,EACrC,UAAU,EACR,MAAM;EACH,aAAa,SAAS;EACtB,aAAa,OAAO;EACpB,aAAa,UAAU;EACvB,aAAa,SAAS;EACtB,aAAa,OAAO;EACpB,aAAa,SAAS;EACtB,aAAa,YAAY;EACzB,aAAa,YAAY;EACzB,aAAa,UAAU;AAC1B,EACF,EACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiLogo.js","names":["_sfc_main"],"sources":["../../../src/components/logos/RuiLogo.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport fallback from '@/components/logos/logo.svg';\nimport { getVerifiedLogoUrl, removeVerifiedLogoUrl, setVerifiedLogoUrl } from '@/components/logos/verified-logo';\nimport { useLogoOptions } from '@/composables/defaults/logo';\n\nexport interface Props {\n text?: boolean;\n /**\n * Name handed to the `logo.resolve` option of `createRui`. Without a resolver\n * the bundled logo shows.\n */\n logo?: string;\n size?: string | number; // in rems\n /**\n * Appended to the resolved URL as `key`, so each instance loads its own copy.\n */\n uniqueKey?: string | number;\n src?: string;\n}\n\ndefineOptions({\n name: 'RuiLogo',\n});\n\nconst { text = false, logo, size = 3, uniqueKey, src } = defineProps<Props>();\n\nconst appName = 'rotki';\n\nconst resolvedUrl = ref<string>();\nconst error = ref<boolean>(false);\nconst seasonalReady = ref<boolean>(false);\n\nconst isMounted = ref<boolean>(false);\n\nconst customImageRef = useTemplateRef<HTMLImageElement>('customImageRef');\n\nconst logoOptions = useLogoOptions();\n\nconst externalSource = computed<string | undefined>(() => {\n if (src)\n return src;\n\n const url = get(resolvedUrl);\n if (!url || uniqueKey === undefined)\n return url;\n\n return `${url}${url.includes('?') ? '&' : '?'}key=${uniqueKey}`;\n});\n\nconst showCustom = computed<boolean>(() => !!src || (!!get(externalSource) && get(seasonalReady) && !get(error)));\n\nfunction preloadImage(url: string): void {\n const existing = document.head.querySelectorAll<HTMLLinkElement>('link[rel=\"preload\"][as=\"image\"]');\n for (const link of existing) {\n if (link.href === url)\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = url;\n document.head.appendChild(link);\n}\n\nasync function callResolver(name: string): Promise<string | undefined> {\n try {\n return await logoOptions?.resolve(name);\n }\n catch {\n // A failing resolver leaves the bundled logo in place\n return undefined;\n }\n}\n\n/**\n * Asks the app's resolver for the logo URL. It runs only after mount, so the\n * server and the client's first render both show the bundled fallback (or\n * `src`) and hydration matches.\n */\nasync function resolveLogo(): Promise<void> {\n if (!get(isMounted))\n return;\n\n if (src || !logo || !logoOptions) {\n set(resolvedUrl, undefined);\n return;\n }\n\n const name = logo;\n const url = await callResolver(name);\n\n // The logo prop changed while the resolver ran; that newer run wins\n if (name !== logo)\n return;\n\n set(error, false);\n // A URL that already decoded in this session is shown without waiting for it again\n set(seasonalReady, !!url && getVerifiedLogoUrl(name) === url);\n set(resolvedUrl, url);\n\n const source = get(externalSource);\n if (source)\n preloadImage(source);\n}\n\nfunction onImageError(): void {\n set(error, true);\n if (logo)\n removeVerifiedLogoUrl(logo);\n}\n\nfunction onImageLoaded(): void {\n const img = get(customImageRef);\n if (!img)\n return;\n\n img.decode()\n .then(() => {\n set(seasonalReady, true);\n // Remember the decoded URL so the next page load can trust it immediately\n const url = get(resolvedUrl);\n if (url && logo)\n setVerifiedLogoUrl(logo, url);\n })\n .catch(() => set(error, true));\n}\n\nwatch(() => get(customImageRef)?.complete, (complete) => {\n if (complete)\n onImageLoaded();\n});\n\nwatchEffect(resolveLogo);\n\nonMounted(() => {\n set(isMounted, true);\n});\n</script>\n\n<template>\n <div\n class=\"gap-x-4 flex items-center relative\"\n :style=\"{ height: `${size}rem` }\"\n >\n <div\n class=\"relative\"\n :style=\"{ width: `${size}rem`, height: `${size}rem` }\"\n >\n <!-- Fallback: always in DOM, fades out when custom image is ready -->\n <img\n :src=\"fallback\"\n :alt=\"appName\"\n data-image=\"fallback\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-0' : 'opacity-100'\"\n />\n\n <!-- Custom/seasonal image: fades in when decoded -->\n <img\n v-if=\"externalSource && !error\"\n ref=\"customImageRef\"\n :src=\"externalSource\"\n :alt=\"appName\"\n data-image=\"custom\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n @error=\"onImageError()\"\n @load=\"onImageLoaded()\"\n />\n </div>\n\n <div\n v-if=\"text\"\n class=\"text-h4 text-rui-primary dark:text-rui-text\"\n >\n {{ appName }}\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiLogo.js","names":["_sfc_main"],"sources":["../../../src/components/logos/RuiLogo.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport fallback from '@/components/logos/logo.svg';\nimport { getVerifiedLogoUrl, removeVerifiedLogoUrl, setVerifiedLogoUrl } from '@/components/logos/verified-logo';\nimport { useLogoOptions } from '@/composables/defaults/logo';\n\nexport interface Props {\n text?: boolean;\n /**\n * Name handed to the `logo.resolve` option of `createRui`. Without a resolver\n * the bundled logo shows.\n */\n logo?: string;\n size?: string | number; // in rems\n /**\n * Appended to the resolved URL as `key`, so each instance loads its own copy.\n */\n uniqueKey?: string | number;\n src?: string;\n}\n\ndefineOptions({\n name: 'RuiLogo',\n});\n\nconst { text = false, logo, size = 3, uniqueKey, src } = defineProps<Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>>();\n\nconst appName = 'rotki';\n\nconst resolvedUrl = ref<string>();\nconst error = ref<boolean>(false);\nconst seasonalReady = ref<boolean>(false);\n\nconst isMounted = ref<boolean>(false);\n\nconst customImageRef = useTemplateRef<HTMLImageElement>('customImageRef');\n\nconst logoOptions = useLogoOptions();\n\nconst externalSource = computed<string | undefined>(() => {\n if (src)\n return src;\n\n const url = get(resolvedUrl);\n if (!url || uniqueKey === undefined)\n return url;\n\n return `${url}${url.includes('?') ? '&' : '?'}key=${uniqueKey}`;\n});\n\nconst showCustom = computed<boolean>(() => !!src || (!!get(externalSource) && get(seasonalReady) && !get(error)));\n\nfunction preloadImage(url: string): void {\n const existing = document.head.querySelectorAll<HTMLLinkElement>('link[rel=\"preload\"][as=\"image\"]');\n for (const link of existing) {\n if (link.href === url)\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = url;\n document.head.appendChild(link);\n}\n\nasync function callResolver(name: string): Promise<string | undefined> {\n try {\n return await logoOptions?.resolve(name);\n }\n catch {\n // A failing resolver leaves the bundled logo in place\n return undefined;\n }\n}\n\n/**\n * Asks the app's resolver for the logo URL. It runs only after mount, so the\n * server and the client's first render both show the bundled fallback (or\n * `src`) and hydration matches.\n */\nasync function resolveLogo(): Promise<void> {\n if (!get(isMounted))\n return;\n\n if (src || !logo || !logoOptions) {\n set(resolvedUrl, undefined);\n return;\n }\n\n const name = logo;\n const url = await callResolver(name);\n\n // The logo prop changed while the resolver ran; that newer run wins\n if (name !== logo)\n return;\n\n set(error, false);\n // A URL that already decoded in this session is shown without waiting for it again\n set(seasonalReady, !!url && getVerifiedLogoUrl(name) === url);\n set(resolvedUrl, url);\n\n const source = get(externalSource);\n if (source)\n preloadImage(source);\n}\n\nfunction onImageError(): void {\n set(error, true);\n if (logo)\n removeVerifiedLogoUrl(logo);\n}\n\nfunction onImageLoaded(): void {\n const img = get(customImageRef);\n if (!img)\n return;\n\n img.decode()\n .then(() => {\n set(seasonalReady, true);\n // Remember the decoded URL so the next page load can trust it immediately\n const url = get(resolvedUrl);\n if (url && logo)\n setVerifiedLogoUrl(logo, url);\n })\n .catch(() => set(error, true));\n}\n\nwatch(() => get(customImageRef)?.complete, (complete) => {\n if (complete)\n onImageLoaded();\n});\n\nwatchEffect(resolveLogo);\n\nonMounted(() => {\n set(isMounted, true);\n});\n</script>\n\n<template>\n <div\n class=\"gap-x-4 flex items-center relative\"\n :style=\"{ height: `${size}rem` }\"\n >\n <div\n class=\"relative\"\n :style=\"{ width: `${size}rem`, height: `${size}rem` }\"\n >\n <!-- Fallback: always in DOM, fades out when custom image is ready -->\n <img\n :src=\"fallback\"\n :alt=\"appName\"\n data-image=\"fallback\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-0' : 'opacity-100'\"\n />\n\n <!-- Custom/seasonal image: fades in when decoded -->\n <img\n v-if=\"externalSource && !error\"\n ref=\"customImageRef\"\n :src=\"externalSource\"\n :alt=\"appName\"\n data-image=\"custom\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n @error=\"onImageError()\"\n @load=\"onImageLoaded()\"\n />\n </div>\n\n <div\n v-if=\"text\"\n class=\"text-h4 text-rui-primary dark:text-rui-text\"\n >\n {{ appName }}\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import type { HTMLAttributes } from 'vue';
1
2
  export interface Props {
2
3
  text?: boolean;
3
4
  /**
@@ -12,6 +13,7 @@ export interface Props {
12
13
  uniqueKey?: string | number;
13
14
  src?: string;
14
15
  }
15
- declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ type __VLS_Props = Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>;
17
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
18
  declare const _default: typeof __VLS_export;
17
19
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"RuiLogo.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeStyle","_createElementVNode","_unref","fallback","_normalizeClass","_createCommentVNode","_toDisplayString"],"sources":["../../../src/components/logos/RuiLogo.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport fallback from '@/components/logos/logo.svg';\nimport { getVerifiedLogoUrl, removeVerifiedLogoUrl, setVerifiedLogoUrl } from '@/components/logos/verified-logo';\nimport { useLogoOptions } from '@/composables/defaults/logo';\n\nexport interface Props {\n text?: boolean;\n /**\n * Name handed to the `logo.resolve` option of `createRui`. Without a resolver\n * the bundled logo shows.\n */\n logo?: string;\n size?: string | number; // in rems\n /**\n * Appended to the resolved URL as `key`, so each instance loads its own copy.\n */\n uniqueKey?: string | number;\n src?: string;\n}\n\ndefineOptions({\n name: 'RuiLogo',\n});\n\nconst { text = false, logo, size = 3, uniqueKey, src } = defineProps<Props>();\n\nconst appName = 'rotki';\n\nconst resolvedUrl = ref<string>();\nconst error = ref<boolean>(false);\nconst seasonalReady = ref<boolean>(false);\n\nconst isMounted = ref<boolean>(false);\n\nconst customImageRef = useTemplateRef<HTMLImageElement>('customImageRef');\n\nconst logoOptions = useLogoOptions();\n\nconst externalSource = computed<string | undefined>(() => {\n if (src)\n return src;\n\n const url = get(resolvedUrl);\n if (!url || uniqueKey === undefined)\n return url;\n\n return `${url}${url.includes('?') ? '&' : '?'}key=${uniqueKey}`;\n});\n\nconst showCustom = computed<boolean>(() => !!src || (!!get(externalSource) && get(seasonalReady) && !get(error)));\n\nfunction preloadImage(url: string): void {\n const existing = document.head.querySelectorAll<HTMLLinkElement>('link[rel=\"preload\"][as=\"image\"]');\n for (const link of existing) {\n if (link.href === url)\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = url;\n document.head.appendChild(link);\n}\n\nasync function callResolver(name: string): Promise<string | undefined> {\n try {\n return await logoOptions?.resolve(name);\n }\n catch {\n // A failing resolver leaves the bundled logo in place\n return undefined;\n }\n}\n\n/**\n * Asks the app's resolver for the logo URL. It runs only after mount, so the\n * server and the client's first render both show the bundled fallback (or\n * `src`) and hydration matches.\n */\nasync function resolveLogo(): Promise<void> {\n if (!get(isMounted))\n return;\n\n if (src || !logo || !logoOptions) {\n set(resolvedUrl, undefined);\n return;\n }\n\n const name = logo;\n const url = await callResolver(name);\n\n // The logo prop changed while the resolver ran; that newer run wins\n if (name !== logo)\n return;\n\n set(error, false);\n // A URL that already decoded in this session is shown without waiting for it again\n set(seasonalReady, !!url && getVerifiedLogoUrl(name) === url);\n set(resolvedUrl, url);\n\n const source = get(externalSource);\n if (source)\n preloadImage(source);\n}\n\nfunction onImageError(): void {\n set(error, true);\n if (logo)\n removeVerifiedLogoUrl(logo);\n}\n\nfunction onImageLoaded(): void {\n const img = get(customImageRef);\n if (!img)\n return;\n\n img.decode()\n .then(() => {\n set(seasonalReady, true);\n // Remember the decoded URL so the next page load can trust it immediately\n const url = get(resolvedUrl);\n if (url && logo)\n setVerifiedLogoUrl(logo, url);\n })\n .catch(() => set(error, true));\n}\n\nwatch(() => get(customImageRef)?.complete, (complete) => {\n if (complete)\n onImageLoaded();\n});\n\nwatchEffect(resolveLogo);\n\nonMounted(() => {\n set(isMounted, true);\n});\n</script>\n\n<template>\n <div\n class=\"gap-x-4 flex items-center relative\"\n :style=\"{ height: `${size}rem` }\"\n >\n <div\n class=\"relative\"\n :style=\"{ width: `${size}rem`, height: `${size}rem` }\"\n >\n <!-- Fallback: always in DOM, fades out when custom image is ready -->\n <img\n :src=\"fallback\"\n :alt=\"appName\"\n data-image=\"fallback\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-0' : 'opacity-100'\"\n />\n\n <!-- Custom/seasonal image: fades in when decoded -->\n <img\n v-if=\"externalSource && !error\"\n ref=\"customImageRef\"\n :src=\"externalSource\"\n :alt=\"appName\"\n data-image=\"custom\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n @error=\"onImageError()\"\n @load=\"onImageLoaded()\"\n />\n </div>\n\n <div\n v-if=\"text\"\n class=\"text-h4 text-rui-primary dark:text-rui-text\"\n >\n {{ appName }}\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuiLogo.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_normalizeStyle","_createElementVNode","_unref","fallback","_normalizeClass","_createCommentVNode","_toDisplayString"],"sources":["../../../src/components/logos/RuiLogo.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport fallback from '@/components/logos/logo.svg';\nimport { getVerifiedLogoUrl, removeVerifiedLogoUrl, setVerifiedLogoUrl } from '@/components/logos/verified-logo';\nimport { useLogoOptions } from '@/composables/defaults/logo';\n\nexport interface Props {\n text?: boolean;\n /**\n * Name handed to the `logo.resolve` option of `createRui`. Without a resolver\n * the bundled logo shows.\n */\n logo?: string;\n size?: string | number; // in rems\n /**\n * Appended to the resolved URL as `key`, so each instance loads its own copy.\n */\n uniqueKey?: string | number;\n src?: string;\n}\n\ndefineOptions({\n name: 'RuiLogo',\n});\n\nconst { text = false, logo, size = 3, uniqueKey, src } = defineProps<Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>>();\n\nconst appName = 'rotki';\n\nconst resolvedUrl = ref<string>();\nconst error = ref<boolean>(false);\nconst seasonalReady = ref<boolean>(false);\n\nconst isMounted = ref<boolean>(false);\n\nconst customImageRef = useTemplateRef<HTMLImageElement>('customImageRef');\n\nconst logoOptions = useLogoOptions();\n\nconst externalSource = computed<string | undefined>(() => {\n if (src)\n return src;\n\n const url = get(resolvedUrl);\n if (!url || uniqueKey === undefined)\n return url;\n\n return `${url}${url.includes('?') ? '&' : '?'}key=${uniqueKey}`;\n});\n\nconst showCustom = computed<boolean>(() => !!src || (!!get(externalSource) && get(seasonalReady) && !get(error)));\n\nfunction preloadImage(url: string): void {\n const existing = document.head.querySelectorAll<HTMLLinkElement>('link[rel=\"preload\"][as=\"image\"]');\n for (const link of existing) {\n if (link.href === url)\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'image';\n link.href = url;\n document.head.appendChild(link);\n}\n\nasync function callResolver(name: string): Promise<string | undefined> {\n try {\n return await logoOptions?.resolve(name);\n }\n catch {\n // A failing resolver leaves the bundled logo in place\n return undefined;\n }\n}\n\n/**\n * Asks the app's resolver for the logo URL. It runs only after mount, so the\n * server and the client's first render both show the bundled fallback (or\n * `src`) and hydration matches.\n */\nasync function resolveLogo(): Promise<void> {\n if (!get(isMounted))\n return;\n\n if (src || !logo || !logoOptions) {\n set(resolvedUrl, undefined);\n return;\n }\n\n const name = logo;\n const url = await callResolver(name);\n\n // The logo prop changed while the resolver ran; that newer run wins\n if (name !== logo)\n return;\n\n set(error, false);\n // A URL that already decoded in this session is shown without waiting for it again\n set(seasonalReady, !!url && getVerifiedLogoUrl(name) === url);\n set(resolvedUrl, url);\n\n const source = get(externalSource);\n if (source)\n preloadImage(source);\n}\n\nfunction onImageError(): void {\n set(error, true);\n if (logo)\n removeVerifiedLogoUrl(logo);\n}\n\nfunction onImageLoaded(): void {\n const img = get(customImageRef);\n if (!img)\n return;\n\n img.decode()\n .then(() => {\n set(seasonalReady, true);\n // Remember the decoded URL so the next page load can trust it immediately\n const url = get(resolvedUrl);\n if (url && logo)\n setVerifiedLogoUrl(logo, url);\n })\n .catch(() => set(error, true));\n}\n\nwatch(() => get(customImageRef)?.complete, (complete) => {\n if (complete)\n onImageLoaded();\n});\n\nwatchEffect(resolveLogo);\n\nonMounted(() => {\n set(isMounted, true);\n});\n</script>\n\n<template>\n <div\n class=\"gap-x-4 flex items-center relative\"\n :style=\"{ height: `${size}rem` }\"\n >\n <div\n class=\"relative\"\n :style=\"{ width: `${size}rem`, height: `${size}rem` }\"\n >\n <!-- Fallback: always in DOM, fades out when custom image is ready -->\n <img\n :src=\"fallback\"\n :alt=\"appName\"\n data-image=\"fallback\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-0' : 'opacity-100'\"\n />\n\n <!-- Custom/seasonal image: fades in when decoded -->\n <img\n v-if=\"externalSource && !error\"\n ref=\"customImageRef\"\n :src=\"externalSource\"\n :alt=\"appName\"\n data-image=\"custom\"\n class=\"absolute inset-0 h-full w-full transition ease-out duration-200\"\n :class=\"showCustom ? 'opacity-100' : 'opacity-0 pointer-events-none'\"\n @error=\"onImageError()\"\n @load=\"onImageLoaded()\"\n />\n </div>\n\n <div\n v-if=\"text\"\n class=\"text-h4 text-rui-primary dark:text-rui-text\"\n >\n {{ appName }}\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;AA2BA,IAAM,UAAU;;;;;;;;;;;;;;;EAEhB,MAAM,cAAc,IAAY;EAChC,MAAM,QAAQ,IAAa,KAAK;EAChC,MAAM,gBAAgB,IAAa,KAAK;EAExC,MAAM,YAAY,IAAa,KAAK;EAEpC,MAAM,iBAAiB,eAAiC,gBAAgB;EAExE,MAAM,cAAc,eAAe;EAEnC,MAAM,iBAAiB,eAAmC;GACxD,IAAI,QAAA,KACF,OAAO,QAAA;GAET,MAAM,MAAM,IAAI,WAAW;GAC3B,IAAI,CAAC,OAAO,QAAA,cAAc,KAAA,GACxB,OAAO;GAET,OAAO,GAAG,MAAM,IAAI,SAAS,GAAG,IAAI,MAAM,IAAI,MAAM,QAAA;EACtD,CAAC;EAED,MAAM,aAAa,eAAwB,CAAC,CAAC,QAAA,OAAQ,CAAC,CAAC,IAAI,cAAc,KAAK,IAAI,aAAa,KAAK,CAAC,IAAI,KAAK,CAAE;EAEhH,SAAS,aAAa,KAAmB;GACvC,MAAM,WAAW,SAAS,KAAK,iBAAkC,qCAAiC;GAClG,KAAK,MAAM,QAAQ,UACjB,IAAI,KAAK,SAAS,KAChB;GAGJ,MAAM,OAAO,SAAS,cAAc,MAAM;GAC1C,KAAK,MAAM;GACX,KAAK,KAAK;GACV,KAAK,OAAO;GACZ,SAAS,KAAK,YAAY,IAAI;EAChC;EAEA,eAAe,aAAa,MAA2C;GACrE,IAAI;IACF,OAAO,MAAM,aAAa,QAAQ,IAAI;GACxC,QACM;IAEJ;GACF;EACF;;;;;;EAOA,eAAe,cAA6B;GAC1C,IAAI,CAAC,IAAI,SAAS,GAChB;GAEF,IAAI,QAAA,OAAO,CAAC,QAAA,QAAQ,CAAC,aAAa;IAChC,IAAI,aAAa,KAAA,CAAS;IAC1B;GACF;GAEA,MAAM,OAAO,QAAA;GACb,MAAM,MAAM,MAAM,aAAa,IAAI;GAGnC,IAAI,SAAS,QAAA,MACX;GAEF,IAAI,OAAO,KAAK;GAEhB,IAAI,eAAe,CAAC,CAAC,OAAO,mBAAmB,IAAI,MAAM,GAAG;GAC5D,IAAI,aAAa,GAAG;GAEpB,MAAM,SAAS,IAAI,cAAc;GACjC,IAAI,QACF,aAAa,MAAM;EACvB;EAEA,SAAS,eAAqB;GAC5B,IAAI,OAAO,IAAI;GACf,IAAI,QAAA,MACF,sBAAsB,QAAA,IAAI;EAC9B;EAEA,SAAS,gBAAsB;GAC7B,MAAM,MAAM,IAAI,cAAc;GAC9B,IAAI,CAAC,KACH;GAEF,IAAI,OAAO,CAAA,CACR,WAAW;IACV,IAAI,eAAe,IAAI;IAEvB,MAAM,MAAM,IAAI,WAAW;IAC3B,IAAI,OAAO,QAAA,MACT,mBAAmB,QAAA,MAAM,GAAG;GAChC,CAAC,CAAA,CACA,YAAY,IAAI,OAAO,IAAI,CAAC;EACjC;EAEA,YAAY,IAAI,cAAc,CAAC,EAAE,WAAW,aAAa;GACvD,IAAI,UACF,cAAc;EAClB,CAAC;EAED,YAAY,WAAW;EAEvB,gBAAgB;GACd,IAAI,WAAW,IAAI;EACrB,CAAC;;GAIC,OAAAA,UAAA,GAAAC,mBAqCM,OAAA;IApCJ,OAAM;IACL,OAAKC,eAAA,EAAA,QAAA,GAAe,QAAA,KAAI,KAAA,CAAA;GAEzBC,GAAAA,CAAAA,mBAyBM,OAAA;IAxBJ,OAAM;IACL,OAAKD,eAAA;KAAA,OAAA,GAAc,QAAA,KAAI;KAAA,QAAA,GAAkB,QAAA,KAAI;IAAA,CAAA;GAG9CC,GAAAA,CAAAA,mBAME,OAAA;IALC,KAAKC,MAAAC,YAAA;IACL,KAAK;IACN,cAAW;IACX,OAAKC,eAAA,CAAC,mEACEF,MAAA,UAAA,IAAU,cAAA,aAAA,CAAA;GAKZA,GAAAA,MAAAA,IAAAA,UAAAA,GAAAA,MAAA,cAAA,KAAc,CAAKA,MAAA,KAAA,KAD3BJ,UAAA,GAAAC,mBAUE,OAAA;;IARI,SAAA;IAAJ,KAAI;IACH,KAAKG,MAAA,cAAA;IACL,KAAK;IACN,cAAW;IACX,OAAKE,eAAA,CAAC,mEACEF,MAAA,UAAA,IAAU,gBAAA,+BAAA,CAAA;IACjB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,aAAY;IACnB,QAAI,OAAA,OAAA,OAAA,MAAA,WAAE,cAAa;GAKhB,GAAA,MAAA,IAAA,UAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,CAAA,GAAA,QAAA,QADRJ,UAAA,GAAAC,mBAKM,OALN,YAKMO,gBADD,OAAO,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuiBadge.js","names":["_sfc_main"],"sources":["../../../../src/components/overlays/badge/RuiBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { BadgePlacement, BadgeRounded, BadgeSize } from '@/components/overlays/badge/badge-props';\nimport { tv } from '@/utils/tv';\n\ntype PosConfig = [left: number, right: string, edge: string, center: number];\n\nexport interface Props {\n text?: string | null;\n icon?: RuiIcons | null;\n modelValue?: boolean;\n dot?: boolean;\n left?: boolean;\n offsetX?: string | number;\n offsetY?: string | number;\n placement?: BadgePlacement;\n size?: BadgeSize;\n rounded?: BadgeRounded;\n color?: 'default' | ContextColorsType;\n}\n\ndefineOptions({\n name: 'RuiBadge',\n});\n\nconst {\n text = null,\n icon = null,\n modelValue = true,\n dot = false,\n placement = BadgePlacement.top,\n left = false,\n size = BadgeSize.md,\n rounded = BadgeRounded.full,\n color = 'primary',\n offsetX = 0,\n offsetY = 0,\n} = defineProps<Props>();\n\nconst slots = defineSlots<{\n default?: () => any;\n badge?: () => any;\n icon?: () => any;\n}>();\n\nconst badgeStyles = tv({\n slots: {\n wrapper: 'relative inline-block',\n badge: 'flex items-center justify-center text-xs font-medium tabular-nums absolute bg-transparent text-rui-text',\n content: 'flex items-center gap-1 px-1.5',\n },\n variants: {\n // `-fill` is `main` in light and, for a status color, the deep `darker` in dark, where `main` is a text tone\n color: {\n default: { badge: 'bg-rui-neutral-200 dark:bg-rui-neutral-700' },\n primary: { badge: 'bg-rui-primary-fill text-rui-primary-foreground' },\n secondary: { badge: 'bg-rui-secondary-fill text-rui-secondary-foreground' },\n error: { badge: 'bg-rui-error-fill text-rui-error-foreground' },\n warning: { badge: 'bg-rui-warning-fill text-rui-warning-foreground' },\n info: { badge: 'bg-rui-info-fill text-rui-info-foreground' },\n success: { badge: 'bg-rui-success-fill text-rui-success-foreground' },\n },\n // the icon is 60% of the badge height, as the text is, rather than filling it\n size: {\n sm: { badge: 'min-h-4 min-w-4 text-caption-2 [--rui-icon-size:0.625rem]' },\n md: { badge: 'min-h-5 min-w-5 [--rui-icon-size:0.75rem]' },\n lg: { badge: 'min-h-6 min-w-6 [--rui-icon-size:0.875rem]' },\n },\n rounded: {\n sm: { badge: 'rounded-xs' },\n md: { badge: 'rounded-rui-control' },\n lg: { badge: 'rounded-rui-card' },\n full: { badge: 'rounded-full' },\n },\n // A surface ring keeps a dot apart from whatever it overlaps, such as an avatar edge\n dot: {\n true: { badge: 'ring-2 ring-rui-surface' },\n },\n // an icon alone needs no side padding, so the badge stays as wide as it is tall\n iconOnly: {\n true: { content: 'px-0' },\n false: {},\n },\n },\n compoundVariants: [\n // the default dot is a step lighter in dark, where neutral-500 nearly vanished against a dark control\n { dot: true, color: 'default', class: { badge: 'bg-rui-neutral-500 dark:bg-rui-neutral-400' } },\n // A dot carries no text, so it keeps the brighter `main`, which reads better as a small mark on a dark page\n { dot: true, color: 'error', class: { badge: 'dark:bg-rui-error' } },\n { dot: true, color: 'warning', class: { badge: 'dark:bg-rui-warning' } },\n { dot: true, color: 'info', class: { badge: 'dark:bg-rui-info' } },\n { dot: true, color: 'success', class: { badge: 'dark:bg-rui-success' } },\n\n // Dot sizes: 8, 10 and 12px, since half of a dot sits off the corner and reads smaller than it is\n { dot: true, size: 'sm', class: { badge: 'min-w-2 min-h-2' } },\n { dot: true, size: 'md', class: { badge: 'min-w-2.5 min-h-2.5' } },\n { dot: true, size: 'lg', class: { badge: 'min-w-3 min-h-3' } },\n ],\n defaultVariants: {\n color: 'primary',\n size: 'md',\n rounded: 'full',\n dot: false,\n },\n});\n\nconst hasText = computed<boolean>(() => !!text || !!slots.badge);\n\nconst hasIconAndText = computed<boolean>(() => (!!icon || !!slots.icon) && get(hasText));\n\nconst ui = computed<ReturnType<typeof badgeStyles>>(() => badgeStyles({\n color,\n size,\n rounded,\n dot,\n iconOnly: (!!icon || !!slots.icon) && !get(hasText),\n}));\n\n/** Dot positions as [leftOffset, rightBase, edgeBase, centerOffset]; a dot's center sits on the corner, so each size moves by half its diameter. */\nconst DOT_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.25, '100% - 0.25rem', '100% - 0.25rem', 0.25],\n md: [-0.3125, '100% - 0.3125rem', '100% - 0.3125rem', 0.3125],\n lg: [-0.375, '100% - 0.375rem', '100% - 0.375rem', 0.375],\n};\nconst BADGE_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.85, '100% - 0.375rem', '100% - 0.375rem', 0.55],\n md: [-0.95, '100% - 0.5rem', '100% - 0.5rem', 0.65],\n lg: [-1.05, '100% - 0.5rem', '100% - 0.5rem', 0.75],\n};\n\nconst positionStyle = computed<Record<string, string>>(() => {\n const ox = Number(offsetX) * 0.0625;\n const oy = Number(offsetY) * 0.0625;\n const [l, r, edge, center] = dot ? DOT_POS[size] : BADGE_POS[size];\n\n const horizontal = `calc(${left ? `${l}rem` : r} + ${ox}rem)`;\n const vertical = placement === 'center'\n ? `calc(50% - ${center}rem - ${oy}rem)`\n : `calc(${edge} - ${oy}rem)`;\n\n return {\n left: horizontal,\n [placement === 'top' ? 'bottom' : 'top']: vertical,\n };\n});\n</script>\n\n<template>\n <div :class=\"ui.wrapper()\">\n <slot />\n <!-- under reduced motion the badge appears and leaves at full size, with no scale -->\n <Transition\n appear\n enter-active-class=\"transition-[scale] ease-out duration-200 motion-reduce:transition-none\"\n enter-from-class=\"scale-0 motion-reduce:scale-100\"\n enter-to-class=\"scale-100\"\n leave-active-class=\"transition-[scale] ease-in duration-150 motion-reduce:transition-none\"\n leave-from-class=\"scale-100\"\n leave-to-class=\"scale-0 motion-reduce:scale-100\"\n >\n <div\n v-if=\"modelValue\"\n :class=\"ui.badge()\"\n :style=\"positionStyle\"\n :data-placement=\"placement\"\n :data-dot=\"dot || undefined\"\n :data-left=\"left || undefined\"\n aria-atomic=\"true\"\n aria-live=\"polite\"\n role=\"status\"\n >\n <!-- no aria-label: on a live region it replaced the count, so a reader announced \"Badge\" -->\n <span\n v-if=\"!dot\"\n :class=\"ui.content({ class: hasIconAndText ? 'px-2' : undefined })\"\n >\n <slot name=\"badge\">\n {{ text }}\n </slot>\n <slot name=\"icon\">\n <RuiIcon\n v-if=\"icon\"\n :name=\"icon\"\n />\n </slot>\n </span>\n </div>\n </Transition>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"RuiBadge.js","names":["_sfc_main"],"sources":["../../../../src/components/overlays/badge/RuiBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { BadgePlacement, BadgeRounded, BadgeSize } from '@/components/overlays/badge/badge-props';\nimport { badgeStyles } from './badge-styles';\n\ntype PosConfig = [left: number, right: string, edge: string, center: number];\n\nexport interface Props {\n text?: string | null;\n icon?: RuiIcons | null;\n modelValue?: boolean;\n dot?: boolean;\n left?: boolean;\n offsetX?: string | number;\n offsetY?: string | number;\n placement?: BadgePlacement;\n size?: BadgeSize;\n rounded?: BadgeRounded;\n color?: 'default' | ContextColorsType;\n}\n\ndefineOptions({\n name: 'RuiBadge',\n});\n\nconst {\n text = null,\n icon = null,\n modelValue = true,\n dot = false,\n placement = BadgePlacement.top,\n left = false,\n size = BadgeSize.md,\n rounded = BadgeRounded.full,\n color = 'primary',\n offsetX = 0,\n offsetY = 0,\n} = defineProps<Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>>();\n\nconst slots = defineSlots<{\n default?: () => any;\n badge?: () => any;\n icon?: () => any;\n}>();\n\nconst hasText = computed<boolean>(() => !!text || !!slots.badge);\n\nconst hasIconAndText = computed<boolean>(() => (!!icon || !!slots.icon) && get(hasText));\n\nconst ui = computed<ReturnType<typeof badgeStyles>>(() => badgeStyles({\n color,\n size,\n rounded,\n dot,\n iconOnly: (!!icon || !!slots.icon) && !get(hasText),\n}));\n\n/** Dot positions as [leftOffset, rightBase, edgeBase, centerOffset]; a dot's center sits on the corner, so each size moves by half its diameter. */\nconst DOT_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.25, '100% - 0.25rem', '100% - 0.25rem', 0.25],\n md: [-0.3125, '100% - 0.3125rem', '100% - 0.3125rem', 0.3125],\n lg: [-0.375, '100% - 0.375rem', '100% - 0.375rem', 0.375],\n};\nconst BADGE_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.85, '100% - 0.375rem', '100% - 0.375rem', 0.55],\n md: [-0.95, '100% - 0.5rem', '100% - 0.5rem', 0.65],\n lg: [-1.05, '100% - 0.5rem', '100% - 0.5rem', 0.75],\n};\n\nconst positionStyle = computed<Record<string, string>>(() => {\n const ox = Number(offsetX) * 0.0625;\n const oy = Number(offsetY) * 0.0625;\n const [l, r, edge, center] = dot ? DOT_POS[size] : BADGE_POS[size];\n\n const horizontal = `calc(${left ? `${l}rem` : r} + ${ox}rem)`;\n const vertical = placement === 'center'\n ? `calc(50% - ${center}rem - ${oy}rem)`\n : `calc(${edge} - ${oy}rem)`;\n\n return {\n left: horizontal,\n [placement === 'top' ? 'bottom' : 'top']: vertical,\n };\n});\n</script>\n\n<template>\n <div :class=\"ui.wrapper()\">\n <slot />\n <!-- under reduced motion the badge appears and leaves at full size, with no scale -->\n <Transition\n appear\n enter-active-class=\"transition-[scale] ease-out duration-200 motion-reduce:transition-none\"\n enter-from-class=\"scale-0 motion-reduce:scale-100\"\n enter-to-class=\"scale-100\"\n leave-active-class=\"transition-[scale] ease-in duration-150 motion-reduce:transition-none\"\n leave-from-class=\"scale-100\"\n leave-to-class=\"scale-0 motion-reduce:scale-100\"\n >\n <div\n v-if=\"modelValue\"\n :class=\"ui.badge()\"\n :style=\"positionStyle\"\n :data-placement=\"placement\"\n :data-dot=\"dot || undefined\"\n :data-left=\"left || undefined\"\n aria-atomic=\"true\"\n aria-live=\"polite\"\n role=\"status\"\n >\n <!-- no aria-label: on a live region it replaced the count, so a reader announced \"Badge\" -->\n <span\n v-if=\"!dot\"\n :class=\"ui.content({ class: hasIconAndText ? 'px-2' : undefined })\"\n >\n <slot name=\"badge\">\n {{ text }}\n </slot>\n <slot name=\"icon\">\n <RuiIcon\n v-if=\"icon\"\n :name=\"icon\"\n />\n </slot>\n </span>\n </div>\n </Transition>\n </div>\n</template>\n"],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import type { HTMLAttributes } from 'vue';
1
2
  import type { ContextColorsType } from '../../../consts/colors.js';
2
3
  import type { RuiIcons } from '../../../icons/index.js';
3
4
  import { BadgePlacement, BadgeRounded, BadgeSize } from './badge-props.js';
@@ -14,12 +15,13 @@ export interface Props {
14
15
  rounded?: BadgeRounded;
15
16
  color?: 'default' | ContextColorsType;
16
17
  }
18
+ type __VLS_Props = Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>;
17
19
  type __VLS_Slots = {
18
20
  default?: () => any;
19
21
  badge?: () => any;
20
22
  icon?: () => any;
21
23
  };
22
- declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
25
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
24
26
  declare const _default: typeof __VLS_export;
25
27
  export default _default;
@@ -1,7 +1,7 @@
1
1
  import { get } from "../../../vendor/@vueuse/shared/dist/index.js";
2
- import { tv } from "../../../utils/tv.js";
3
2
  import RuiIcon_default from "../../icons/RuiIcon.js";
4
3
  import { BadgePlacement, BadgeRounded, BadgeSize } from "./badge-props.js";
4
+ import { badgeStyles } from "./badge-styles.js";
5
5
  import { Transition, computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, toDisplayString, unref, useSlots, withCtx } from "vue";
6
6
  //#region src/components/overlays/badge/RuiBadge.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = [
@@ -36,88 +36,6 @@ var RuiBadge_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
36
36
  },
37
37
  setup(__props) {
38
38
  const slots = useSlots();
39
- const badgeStyles = tv({
40
- slots: {
41
- wrapper: "relative inline-block",
42
- badge: "flex items-center justify-center text-xs font-medium tabular-nums absolute bg-transparent text-rui-text",
43
- content: "flex items-center gap-1 px-1.5"
44
- },
45
- variants: {
46
- color: {
47
- default: { badge: "bg-rui-neutral-200 dark:bg-rui-neutral-700" },
48
- primary: { badge: "bg-rui-primary-fill text-rui-primary-foreground" },
49
- secondary: { badge: "bg-rui-secondary-fill text-rui-secondary-foreground" },
50
- error: { badge: "bg-rui-error-fill text-rui-error-foreground" },
51
- warning: { badge: "bg-rui-warning-fill text-rui-warning-foreground" },
52
- info: { badge: "bg-rui-info-fill text-rui-info-foreground" },
53
- success: { badge: "bg-rui-success-fill text-rui-success-foreground" }
54
- },
55
- size: {
56
- sm: { badge: "min-h-4 min-w-4 text-caption-2 [--rui-icon-size:0.625rem]" },
57
- md: { badge: "min-h-5 min-w-5 [--rui-icon-size:0.75rem]" },
58
- lg: { badge: "min-h-6 min-w-6 [--rui-icon-size:0.875rem]" }
59
- },
60
- rounded: {
61
- sm: { badge: "rounded-xs" },
62
- md: { badge: "rounded-rui-control" },
63
- lg: { badge: "rounded-rui-card" },
64
- full: { badge: "rounded-full" }
65
- },
66
- dot: { true: { badge: "ring-2 ring-rui-surface" } },
67
- iconOnly: {
68
- true: { content: "px-0" },
69
- false: {}
70
- }
71
- },
72
- compoundVariants: [
73
- {
74
- dot: true,
75
- color: "default",
76
- class: { badge: "bg-rui-neutral-500 dark:bg-rui-neutral-400" }
77
- },
78
- {
79
- dot: true,
80
- color: "error",
81
- class: { badge: "dark:bg-rui-error" }
82
- },
83
- {
84
- dot: true,
85
- color: "warning",
86
- class: { badge: "dark:bg-rui-warning" }
87
- },
88
- {
89
- dot: true,
90
- color: "info",
91
- class: { badge: "dark:bg-rui-info" }
92
- },
93
- {
94
- dot: true,
95
- color: "success",
96
- class: { badge: "dark:bg-rui-success" }
97
- },
98
- {
99
- dot: true,
100
- size: "sm",
101
- class: { badge: "min-w-2 min-h-2" }
102
- },
103
- {
104
- dot: true,
105
- size: "md",
106
- class: { badge: "min-w-2.5 min-h-2.5" }
107
- },
108
- {
109
- dot: true,
110
- size: "lg",
111
- class: { badge: "min-w-3 min-h-3" }
112
- }
113
- ],
114
- defaultVariants: {
115
- color: "primary",
116
- size: "md",
117
- rounded: "full",
118
- dot: false
119
- }
120
- });
121
39
  const hasText = computed(() => !!__props.text || !!slots.badge);
122
40
  const hasIconAndText = computed(() => (!!__props.icon || !!slots.icon) && get(hasText));
123
41
  const ui = computed(() => badgeStyles({
@@ -1 +1 @@
1
- {"version":3,"file":"RuiBadge.vue_vue_type_script_setup_true_lang.js","names":["_useSlots","_openBlock","_createElementBlock","_normalizeClass","_unref","_renderSlot","_createVNode","_Transition","_withCtx","_normalizeStyle","_createTextVNode","_toDisplayString","_createBlock","RuiIcon","_createCommentVNode"],"sources":["../../../../src/components/overlays/badge/RuiBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { BadgePlacement, BadgeRounded, BadgeSize } from '@/components/overlays/badge/badge-props';\nimport { tv } from '@/utils/tv';\n\ntype PosConfig = [left: number, right: string, edge: string, center: number];\n\nexport interface Props {\n text?: string | null;\n icon?: RuiIcons | null;\n modelValue?: boolean;\n dot?: boolean;\n left?: boolean;\n offsetX?: string | number;\n offsetY?: string | number;\n placement?: BadgePlacement;\n size?: BadgeSize;\n rounded?: BadgeRounded;\n color?: 'default' | ContextColorsType;\n}\n\ndefineOptions({\n name: 'RuiBadge',\n});\n\nconst {\n text = null,\n icon = null,\n modelValue = true,\n dot = false,\n placement = BadgePlacement.top,\n left = false,\n size = BadgeSize.md,\n rounded = BadgeRounded.full,\n color = 'primary',\n offsetX = 0,\n offsetY = 0,\n} = defineProps<Props>();\n\nconst slots = defineSlots<{\n default?: () => any;\n badge?: () => any;\n icon?: () => any;\n}>();\n\nconst badgeStyles = tv({\n slots: {\n wrapper: 'relative inline-block',\n badge: 'flex items-center justify-center text-xs font-medium tabular-nums absolute bg-transparent text-rui-text',\n content: 'flex items-center gap-1 px-1.5',\n },\n variants: {\n // `-fill` is `main` in light and, for a status color, the deep `darker` in dark, where `main` is a text tone\n color: {\n default: { badge: 'bg-rui-neutral-200 dark:bg-rui-neutral-700' },\n primary: { badge: 'bg-rui-primary-fill text-rui-primary-foreground' },\n secondary: { badge: 'bg-rui-secondary-fill text-rui-secondary-foreground' },\n error: { badge: 'bg-rui-error-fill text-rui-error-foreground' },\n warning: { badge: 'bg-rui-warning-fill text-rui-warning-foreground' },\n info: { badge: 'bg-rui-info-fill text-rui-info-foreground' },\n success: { badge: 'bg-rui-success-fill text-rui-success-foreground' },\n },\n // the icon is 60% of the badge height, as the text is, rather than filling it\n size: {\n sm: { badge: 'min-h-4 min-w-4 text-caption-2 [--rui-icon-size:0.625rem]' },\n md: { badge: 'min-h-5 min-w-5 [--rui-icon-size:0.75rem]' },\n lg: { badge: 'min-h-6 min-w-6 [--rui-icon-size:0.875rem]' },\n },\n rounded: {\n sm: { badge: 'rounded-xs' },\n md: { badge: 'rounded-rui-control' },\n lg: { badge: 'rounded-rui-card' },\n full: { badge: 'rounded-full' },\n },\n // A surface ring keeps a dot apart from whatever it overlaps, such as an avatar edge\n dot: {\n true: { badge: 'ring-2 ring-rui-surface' },\n },\n // an icon alone needs no side padding, so the badge stays as wide as it is tall\n iconOnly: {\n true: { content: 'px-0' },\n false: {},\n },\n },\n compoundVariants: [\n // the default dot is a step lighter in dark, where neutral-500 nearly vanished against a dark control\n { dot: true, color: 'default', class: { badge: 'bg-rui-neutral-500 dark:bg-rui-neutral-400' } },\n // A dot carries no text, so it keeps the brighter `main`, which reads better as a small mark on a dark page\n { dot: true, color: 'error', class: { badge: 'dark:bg-rui-error' } },\n { dot: true, color: 'warning', class: { badge: 'dark:bg-rui-warning' } },\n { dot: true, color: 'info', class: { badge: 'dark:bg-rui-info' } },\n { dot: true, color: 'success', class: { badge: 'dark:bg-rui-success' } },\n\n // Dot sizes: 8, 10 and 12px, since half of a dot sits off the corner and reads smaller than it is\n { dot: true, size: 'sm', class: { badge: 'min-w-2 min-h-2' } },\n { dot: true, size: 'md', class: { badge: 'min-w-2.5 min-h-2.5' } },\n { dot: true, size: 'lg', class: { badge: 'min-w-3 min-h-3' } },\n ],\n defaultVariants: {\n color: 'primary',\n size: 'md',\n rounded: 'full',\n dot: false,\n },\n});\n\nconst hasText = computed<boolean>(() => !!text || !!slots.badge);\n\nconst hasIconAndText = computed<boolean>(() => (!!icon || !!slots.icon) && get(hasText));\n\nconst ui = computed<ReturnType<typeof badgeStyles>>(() => badgeStyles({\n color,\n size,\n rounded,\n dot,\n iconOnly: (!!icon || !!slots.icon) && !get(hasText),\n}));\n\n/** Dot positions as [leftOffset, rightBase, edgeBase, centerOffset]; a dot's center sits on the corner, so each size moves by half its diameter. */\nconst DOT_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.25, '100% - 0.25rem', '100% - 0.25rem', 0.25],\n md: [-0.3125, '100% - 0.3125rem', '100% - 0.3125rem', 0.3125],\n lg: [-0.375, '100% - 0.375rem', '100% - 0.375rem', 0.375],\n};\nconst BADGE_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.85, '100% - 0.375rem', '100% - 0.375rem', 0.55],\n md: [-0.95, '100% - 0.5rem', '100% - 0.5rem', 0.65],\n lg: [-1.05, '100% - 0.5rem', '100% - 0.5rem', 0.75],\n};\n\nconst positionStyle = computed<Record<string, string>>(() => {\n const ox = Number(offsetX) * 0.0625;\n const oy = Number(offsetY) * 0.0625;\n const [l, r, edge, center] = dot ? DOT_POS[size] : BADGE_POS[size];\n\n const horizontal = `calc(${left ? `${l}rem` : r} + ${ox}rem)`;\n const vertical = placement === 'center'\n ? `calc(50% - ${center}rem - ${oy}rem)`\n : `calc(${edge} - ${oy}rem)`;\n\n return {\n left: horizontal,\n [placement === 'top' ? 'bottom' : 'top']: vertical,\n };\n});\n</script>\n\n<template>\n <div :class=\"ui.wrapper()\">\n <slot />\n <!-- under reduced motion the badge appears and leaves at full size, with no scale -->\n <Transition\n appear\n enter-active-class=\"transition-[scale] ease-out duration-200 motion-reduce:transition-none\"\n enter-from-class=\"scale-0 motion-reduce:scale-100\"\n enter-to-class=\"scale-100\"\n leave-active-class=\"transition-[scale] ease-in duration-150 motion-reduce:transition-none\"\n leave-from-class=\"scale-100\"\n leave-to-class=\"scale-0 motion-reduce:scale-100\"\n >\n <div\n v-if=\"modelValue\"\n :class=\"ui.badge()\"\n :style=\"positionStyle\"\n :data-placement=\"placement\"\n :data-dot=\"dot || undefined\"\n :data-left=\"left || undefined\"\n aria-atomic=\"true\"\n aria-live=\"polite\"\n role=\"status\"\n >\n <!-- no aria-label: on a live region it replaced the count, so a reader announced \"Badge\" -->\n <span\n v-if=\"!dot\"\n :class=\"ui.content({ class: hasIconAndText ? 'px-2' : undefined })\"\n >\n <slot name=\"badge\">\n {{ text }}\n </slot>\n <slot name=\"icon\">\n <RuiIcon\n v-if=\"icon\"\n :name=\"icon\"\n />\n </slot>\n </span>\n </div>\n </Transition>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"RuiBadge.vue_vue_type_script_setup_true_lang.js","names":["_useSlots","_openBlock","_createElementBlock","_normalizeClass","_unref","_renderSlot","_createVNode","_Transition","_withCtx","_normalizeStyle","_createTextVNode","_toDisplayString","_createBlock","RuiIcon","_createCommentVNode"],"sources":["../../../../src/components/overlays/badge/RuiBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue';\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { BadgePlacement, BadgeRounded, BadgeSize } from '@/components/overlays/badge/badge-props';\nimport { badgeStyles } from './badge-styles';\n\ntype PosConfig = [left: number, right: string, edge: string, center: number];\n\nexport interface Props {\n text?: string | null;\n icon?: RuiIcons | null;\n modelValue?: boolean;\n dot?: boolean;\n left?: boolean;\n offsetX?: string | number;\n offsetY?: string | number;\n placement?: BadgePlacement;\n size?: BadgeSize;\n rounded?: BadgeRounded;\n color?: 'default' | ContextColorsType;\n}\n\ndefineOptions({\n name: 'RuiBadge',\n});\n\nconst {\n text = null,\n icon = null,\n modelValue = true,\n dot = false,\n placement = BadgePlacement.top,\n left = false,\n size = BadgeSize.md,\n rounded = BadgeRounded.full,\n color = 'primary',\n offsetX = 0,\n offsetY = 0,\n} = defineProps<Props & /* @vue-ignore */ Omit<HTMLAttributes, keyof Props>>();\n\nconst slots = defineSlots<{\n default?: () => any;\n badge?: () => any;\n icon?: () => any;\n}>();\n\nconst hasText = computed<boolean>(() => !!text || !!slots.badge);\n\nconst hasIconAndText = computed<boolean>(() => (!!icon || !!slots.icon) && get(hasText));\n\nconst ui = computed<ReturnType<typeof badgeStyles>>(() => badgeStyles({\n color,\n size,\n rounded,\n dot,\n iconOnly: (!!icon || !!slots.icon) && !get(hasText),\n}));\n\n/** Dot positions as [leftOffset, rightBase, edgeBase, centerOffset]; a dot's center sits on the corner, so each size moves by half its diameter. */\nconst DOT_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.25, '100% - 0.25rem', '100% - 0.25rem', 0.25],\n md: [-0.3125, '100% - 0.3125rem', '100% - 0.3125rem', 0.3125],\n lg: [-0.375, '100% - 0.375rem', '100% - 0.375rem', 0.375],\n};\nconst BADGE_POS: Record<BadgeSize, PosConfig> = {\n sm: [-0.85, '100% - 0.375rem', '100% - 0.375rem', 0.55],\n md: [-0.95, '100% - 0.5rem', '100% - 0.5rem', 0.65],\n lg: [-1.05, '100% - 0.5rem', '100% - 0.5rem', 0.75],\n};\n\nconst positionStyle = computed<Record<string, string>>(() => {\n const ox = Number(offsetX) * 0.0625;\n const oy = Number(offsetY) * 0.0625;\n const [l, r, edge, center] = dot ? DOT_POS[size] : BADGE_POS[size];\n\n const horizontal = `calc(${left ? `${l}rem` : r} + ${ox}rem)`;\n const vertical = placement === 'center'\n ? `calc(50% - ${center}rem - ${oy}rem)`\n : `calc(${edge} - ${oy}rem)`;\n\n return {\n left: horizontal,\n [placement === 'top' ? 'bottom' : 'top']: vertical,\n };\n});\n</script>\n\n<template>\n <div :class=\"ui.wrapper()\">\n <slot />\n <!-- under reduced motion the badge appears and leaves at full size, with no scale -->\n <Transition\n appear\n enter-active-class=\"transition-[scale] ease-out duration-200 motion-reduce:transition-none\"\n enter-from-class=\"scale-0 motion-reduce:scale-100\"\n enter-to-class=\"scale-100\"\n leave-active-class=\"transition-[scale] ease-in duration-150 motion-reduce:transition-none\"\n leave-from-class=\"scale-100\"\n leave-to-class=\"scale-0 motion-reduce:scale-100\"\n >\n <div\n v-if=\"modelValue\"\n :class=\"ui.badge()\"\n :style=\"positionStyle\"\n :data-placement=\"placement\"\n :data-dot=\"dot || undefined\"\n :data-left=\"left || undefined\"\n aria-atomic=\"true\"\n aria-live=\"polite\"\n role=\"status\"\n >\n <!-- no aria-label: on a live region it replaced the count, so a reader announced \"Badge\" -->\n <span\n v-if=\"!dot\"\n :class=\"ui.content({ class: hasIconAndText ? 'px-2' : undefined })\"\n >\n <slot name=\"badge\">\n {{ text }}\n </slot>\n <slot name=\"icon\">\n <RuiIcon\n v-if=\"icon\"\n :name=\"icon\"\n />\n </slot>\n </span>\n </div>\n </Transition>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CA,MAAM,QAAQA,SAAA;EAMd,MAAM,UAAU,eAAwB,CAAC,CAAC,QAAA,QAAQ,CAAC,CAAC,MAAM,KAAK;EAE/D,MAAM,iBAAiB,gBAAyB,CAAC,CAAC,QAAA,QAAQ,CAAC,CAAC,MAAM,SAAS,IAAI,OAAO,CAAC;EAEvF,MAAM,KAAK,eAA+C,YAAY;GACpE,OAAI,QAAA;GACJ,MAAG,QAAA;GACH,SAAM,QAAA;GACN,KAAE,QAAA;GACF,WAAW,CAAC,CAAC,QAAA,QAAQ,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,OAAO;EACpD,CAAC,CAAC;;EAGF,MAAM,UAAwC;GAC5C,IAAI;IAAC;IAAO;IAAkB;IAAkB;GAAI;GACpD,IAAI;IAAC;IAAS;IAAoB;IAAoB;GAAM;GAC5D,IAAI;IAAC;IAAQ;IAAmB;IAAmB;GAAK;EAC1D;EACA,MAAM,YAA0C;GAC9C,IAAI;IAAC;IAAO;IAAmB;IAAmB;GAAI;GACtD,IAAI;IAAC;IAAO;IAAiB;IAAiB;GAAI;GAClD,IAAI;IAAC;IAAO;IAAiB;IAAiB;GAAI;EACpD;EAEA,MAAM,gBAAgB,eAAuC;GAC3D,MAAM,KAAK,OAAO,QAAA,OAAO,IAAI;GAC7B,MAAM,KAAK,OAAO,QAAA,OAAO,IAAI;GAC7B,MAAM,CAAC,GAAG,GAAG,MAAM,UAAU,QAAA,MAAM,QAAQ,QAAA,QAAQ,UAAU,QAAA;GAE7D,MAAM,aAAa,QAAQ,QAAA,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG;GACxD,MAAM,WAAW,QAAA,cAAc,WAC3B,cAAc,OAAO,QAAQ,GAAG,QAChC,QAAQ,KAAK,KAAK,GAAG;GAEzB,OAAO;IACL,MAAM;KACL,QAAA,cAAc,QAAQ,WAAW,QAAQ;GAC5C;EACF,CAAC;;GAIC,OAAAC,UAAA,GAAAC,mBAwCM,OAAA,EAxCA,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,QAAO,CAAA,EAAA,GAAA,CACrBC,WAAQ,KAAA,QAAA,SAAA,GAERC,YAoCaC,YAAA;IAnCX,QAAA;IACA,sBAAmB;IACnB,oBAAiB;IACjB,kBAAe;IACf,sBAAmB;IACnB,oBAAiB;IACjB,kBAAe;;IAEf,SAAAC,cA0BM,CAzBE,QAAA,cADRP,UAAA,GAAAC,mBA0BM,OAAA;;KAxBH,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,MAAK,CAAA;KACf,OAAKK,eAAEL,MAAA,aAAA,CAAa;KACpB,kBAAgB,QAAA;KAChB,YAAU,QAAA,OAAO,KAAA;KACjB,aAAW,QAAA,QAAQ,KAAA;KACpB,eAAY;KACZ,aAAU;KACV,MAAK;IAII,GAAA,CAAA,CAAA,QAAA,OADTH,UAAA,GAAAC,mBAaO,QAAA;;KAXJ,OAAKC,eAAEC,MAAA,EAAA,CAAE,CAAC,QAAO,EAAA,OAAUA,MAAA,cAAA,IAAc,SAAY,KAAA,EAAS,CAAA,CAAA;IAE/DC,GAAAA,CAAAA,WAEO,KAAA,QAAA,SAAA,CAAA,SAAA,CADFK,gBAAAC,gBAAA,QAAA,IAAI,GAAA,CAAA,CAAA,CAAA,GAETN,WAKO,KAAA,QAAA,QAAA,CAAA,SAAA,CAHG,QAAA,QADRJ,UAAA,GAAAW,YAGEC,iBAAA;;KADC,MAAM,QAAA"}