@livestorm/ui-vue 1.1.3 → 2.0.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 (401) hide show
  1. package/README.md +164 -32
  2. package/components-vite.js +5 -5
  3. package/components.d.ts +3 -3
  4. package/dist/UiTimelineItem.vue_vue_type_style_index_0_lang-DOLFRKcb.mjs +5565 -0
  5. package/dist/a11y-DIdrv5Mn.mjs +66 -0
  6. package/dist/breakpoints.mjs +9 -0
  7. package/dist/bus.mjs +5 -0
  8. package/dist/components.mjs +214 -1663
  9. package/dist/index.mjs +84 -166
  10. package/dist/integrations.mjs +8 -0
  11. package/dist/layouts.mjs +236 -0
  12. package/dist/responsive.mjs +25 -0
  13. package/dist/slot.mjs +21 -0
  14. package/dist/toastDSV2-wMh-UMzW.mjs +74 -0
  15. package/dist/types/index.d.ts +84 -0
  16. package/dist/types/src/components/Toast/LayoutToasts.vue.d.ts +3 -0
  17. package/dist/types/src/components/Toast/ToastMessage.vue.d.ts +21 -0
  18. package/dist/types/src/components/Toast/toastDSV2.d.ts +102 -0
  19. package/dist/types/src/components/UiActionBar/UiActionBar.vue.d.ts +44 -0
  20. package/dist/types/src/components/UiActionBar/UiActionBarItem.vue.d.ts +47 -0
  21. package/dist/types/src/components/UiActionBar/UiActionBarSeparator.vue.d.ts +3 -0
  22. package/dist/types/src/components/UiActionBar/index.d.ts +4 -0
  23. package/dist/types/src/components/UiActionBar/types.d.ts +14 -0
  24. package/dist/types/src/components/UiAnimatedLogo/UiAnimatedLogo.vue.d.ts +10 -0
  25. package/dist/types/src/components/UiAnimatedLogo/animations-links.d.ts +3 -0
  26. package/dist/types/src/components/UiAvatar/UiAvatar.vue.d.ts +55 -0
  27. package/dist/types/src/components/UiAvatar/index.d.ts +1 -0
  28. package/dist/types/src/components/UiAvatarList/UiAvatarList.vue.d.ts +28 -0
  29. package/dist/types/src/components/UiAvatarList/index.d.ts +1 -0
  30. package/dist/types/src/components/UiBadge/UiBadge.vue.d.ts +47 -0
  31. package/dist/types/src/components/UiBadge/index.d.ts +1 -0
  32. package/dist/types/src/components/UiBanner/UiBanner.vue.d.ts +96 -0
  33. package/dist/types/src/components/UiBanner/index.d.ts +2 -0
  34. package/dist/types/src/components/UiBreadcrumb/UiBreadcrumb.vue.d.ts +15 -0
  35. package/dist/types/src/components/UiBreadcrumb/index.d.ts +2 -0
  36. package/dist/types/src/components/UiButton/UiButton.vue.d.ts +249 -0
  37. package/dist/types/src/components/UiButtonGroup/UiButtonGroup.vue.d.ts +42 -0
  38. package/dist/types/src/components/UiButtonGroup/UiButtonGroupItem.vue.d.ts +21 -0
  39. package/dist/types/src/components/UiButtonGroup/index.d.ts +3 -0
  40. package/dist/types/src/components/UiButtonGroup/types.d.ts +10 -0
  41. package/dist/types/src/components/UiCard/UiCard.vue.d.ts +31 -0
  42. package/dist/types/src/components/UiCarousel/UiCarousel.vue.d.ts +63 -0
  43. package/dist/types/src/components/UiCarousel/index.d.ts +2 -0
  44. package/dist/types/src/components/UiColorField/UiColorField.vue.d.ts +19 -0
  45. package/dist/types/src/components/UiColorField/index.d.ts +2 -0
  46. package/dist/types/src/components/UiColorField/types.d.ts +29 -0
  47. package/dist/types/src/components/UiColorPicker/UiColorPicker.vue.d.ts +35 -0
  48. package/dist/types/src/components/UiColorPicker/index.d.ts +2 -0
  49. package/dist/types/src/components/UiColorPicker/types.d.ts +97 -0
  50. package/dist/types/src/components/UiDialog/MarketplaceHeaderExample.vue.d.ts +28 -0
  51. package/dist/types/src/components/UiDialog/UiDialog.vue.d.ts +18 -0
  52. package/dist/types/src/components/UiDialog/UiDialogClose.vue.d.ts +10 -0
  53. package/dist/types/src/components/UiDialog/UiDialogContent.vue.d.ts +54 -0
  54. package/dist/types/src/components/UiDialog/UiDialogFooter.vue.d.ts +13 -0
  55. package/dist/types/src/components/UiDialog/UiDialogTrigger.vue.d.ts +14 -0
  56. package/dist/types/src/components/UiDialog/index.d.ts +7 -0
  57. package/dist/types/src/components/UiDropdown/UiDropdown.vue.d.ts +42 -0
  58. package/dist/types/src/components/UiDropdown/UiDropdownContent.vue.d.ts +32 -0
  59. package/dist/types/src/components/UiDropdown/UiDropdownItem.vue.d.ts +27 -0
  60. package/dist/types/src/components/UiDropdown/UiDropdownSeparator.vue.d.ts +3 -0
  61. package/dist/types/src/components/UiDropdown/UiDropdownTrigger.vue.d.ts +45 -0
  62. package/dist/types/src/components/UiDropdown/context.d.ts +7 -0
  63. package/dist/types/src/components/UiDropdown/index.d.ts +6 -0
  64. package/dist/types/src/components/UiEmptyState/UiEmptyState.vue.d.ts +29 -0
  65. package/dist/types/src/components/UiFieldWrapper/UiFieldWrapper.vue.d.ts +36 -0
  66. package/dist/types/src/components/UiFieldWrapper/index.d.ts +1 -0
  67. package/dist/types/src/components/UiForm/UiFormField.types.d.ts +22 -0
  68. package/dist/types/src/components/UiForm/UiFormField.vue.d.ts +34 -0
  69. package/dist/types/src/components/UiForm/index.d.ts +3 -0
  70. package/dist/types/src/components/UiHorizontalSeparator/UiHorizontalSeparator.vue.d.ts +6 -0
  71. package/dist/types/src/components/UiInputCheckbox/UiInputCheckbox.vue.d.ts +108 -0
  72. package/dist/types/src/components/UiInputCheckbox/index.d.ts +2 -0
  73. package/dist/types/src/components/UiInputCheckbox/types.d.ts +1 -0
  74. package/dist/types/src/components/UiInputSelect/UiInputSelect.vue.d.ts +66 -0
  75. package/dist/types/src/components/UiInputSelect/index.d.ts +2 -0
  76. package/dist/types/src/components/UiInputSelect/types.d.ts +1 -0
  77. package/dist/types/src/components/UiInputTextarea/UiInputTextarea.vue.d.ts +49 -0
  78. package/dist/types/src/components/UiInputTextarea/index.d.ts +2 -0
  79. package/dist/types/src/components/UiInputTextarea/types.d.ts +1 -0
  80. package/dist/types/src/components/UiLabel/UiLabel.vue.d.ts +17 -0
  81. package/dist/types/src/components/UiList/UiList.vue.d.ts +27 -0
  82. package/dist/types/src/components/UiListItem/UiListItem.vue.d.ts +35 -0
  83. package/dist/types/src/components/UiLoader/UiLoader.vue.d.ts +17 -0
  84. package/dist/types/src/components/UiLogo/UiLogo.vue.d.ts +20 -0
  85. package/dist/types/src/components/UiLogo/variants/PulseVariant.vue.d.ts +3 -0
  86. package/dist/types/src/components/UiLogo/variants/TornadoVariant.vue.d.ts +3 -0
  87. package/dist/types/src/components/UiMenu/UiMenu.vue.d.ts +18 -0
  88. package/dist/types/src/components/UiMenu/UiMenuContent.vue.d.ts +30 -0
  89. package/dist/types/src/components/UiMenu/UiMenuGroup.vue.d.ts +16 -0
  90. package/dist/types/src/components/UiMenu/UiMenuItem.vue.d.ts +18 -0
  91. package/dist/types/src/components/UiMenu/UiMenuLabel.vue.d.ts +13 -0
  92. package/dist/types/src/components/UiMenu/UiMenuSeparator.vue.d.ts +13 -0
  93. package/dist/types/src/components/UiMenu/UiMenuSub.vue.d.ts +18 -0
  94. package/dist/types/src/components/UiMenu/UiMenuSubContent.vue.d.ts +32 -0
  95. package/dist/types/src/components/UiMenu/UiMenuSubTrigger.vue.d.ts +14 -0
  96. package/dist/types/src/components/UiMenu/UiMenuTrigger.vue.d.ts +14 -0
  97. package/dist/types/src/components/UiMenu/index.d.ts +10 -0
  98. package/dist/types/src/components/UiPage/UiPage.vue.d.ts +37 -0
  99. package/dist/types/src/components/UiPageHeader/UiPageHeader.vue.d.ts +33 -0
  100. package/dist/types/src/components/UiPopover/UiPopover.vue.d.ts +18 -0
  101. package/dist/types/src/components/UiPopover/UiPopoverAnchor.vue.d.ts +14 -0
  102. package/dist/types/src/components/UiPopover/UiPopoverContent.vue.d.ts +28 -0
  103. package/dist/types/src/components/UiPopover/UiPopoverTrigger.vue.d.ts +14 -0
  104. package/dist/types/src/components/UiProgress/UiProgress.vue.d.ts +15 -0
  105. package/dist/types/src/components/UiProgress/index.d.ts +2 -0
  106. package/dist/types/src/components/UiProgress/types.d.ts +4 -0
  107. package/dist/types/src/components/UiRoomButton/UiRoomButton.vue.d.ts +29 -0
  108. package/dist/types/src/components/UiShell/UiShell.vue.d.ts +24 -0
  109. package/dist/types/src/components/UiSideMenu/UiSideMenu.vue.d.ts +64 -0
  110. package/dist/types/src/components/UiSideMenu/UiSideMenuBottom.vue.d.ts +7 -0
  111. package/dist/types/src/components/UiSideMenu/UiSideMenuItem.vue.d.ts +53 -0
  112. package/dist/types/src/components/UiSideMenu/UiSideMenuItemContent.vue.d.ts +43 -0
  113. package/dist/types/src/components/UiSideMenu/UiSideMenuTop.vue.d.ts +7 -0
  114. package/dist/types/src/components/UiSideMenu/injection.d.ts +7 -0
  115. package/dist/types/src/components/UiSideMenu/types.d.ts +39 -0
  116. package/dist/types/src/components/UiSideMenu/useLabelHidden.d.ts +2 -0
  117. package/dist/types/src/components/UiSideMenu/useSideMenuLayout.d.ts +7 -0
  118. package/dist/types/src/components/UiStepper/UiStepper.vue.d.ts +18 -0
  119. package/dist/types/src/components/UiStepper/UiStepperDescription.vue.d.ts +14 -0
  120. package/dist/types/src/components/UiStepper/UiStepperIndicator.vue.d.ts +20 -0
  121. package/dist/types/src/components/UiStepper/UiStepperItem.vue.d.ts +19 -0
  122. package/dist/types/src/components/UiStepper/UiStepperSeparator.vue.d.ts +10 -0
  123. package/dist/types/src/components/UiStepper/UiStepperTitle.vue.d.ts +14 -0
  124. package/dist/types/src/components/UiStepper/index.d.ts +7 -0
  125. package/dist/types/src/components/UiTable/UiTable.vue.d.ts +20 -0
  126. package/dist/types/src/components/UiTable/UiTableBody.vue.d.ts +13 -0
  127. package/dist/types/src/components/UiTable/UiTableCell.vue.d.ts +13 -0
  128. package/dist/types/src/components/UiTable/UiTableHeader.vue.d.ts +13 -0
  129. package/dist/types/src/components/UiTable/UiTableHeaderCell.vue.d.ts +13 -0
  130. package/dist/types/src/components/UiTable/UiTableRow.vue.d.ts +16 -0
  131. package/dist/types/src/components/UiTable/index.d.ts +6 -0
  132. package/dist/types/src/components/UiTabs/UiTabs.vue.d.ts +37 -0
  133. package/dist/types/src/components/UiTabs/index.d.ts +2 -0
  134. package/dist/types/src/components/UiTag/UiTag.vue.d.ts +43 -0
  135. package/dist/types/src/components/UiTag/index.d.ts +1 -0
  136. package/dist/types/src/components/UiTextField/UiTextField.vue.d.ts +65 -0
  137. package/dist/types/src/components/UiTextField/index.d.ts +2 -0
  138. package/dist/types/src/components/UiTextField/types.d.ts +2 -0
  139. package/dist/types/src/components/UiTimeline/UiTimeline.vue.d.ts +19 -0
  140. package/dist/types/src/components/UiTimeline/UiTimelineItem.vue.d.ts +28 -0
  141. package/dist/types/src/components/UiTimeline/index.d.ts +2 -0
  142. package/dist/types/src/components/UiTooltip/UiTooltip.vue.d.ts +18 -0
  143. package/dist/types/src/components/UiTooltip/UiTooltipContent.vue.d.ts +54 -0
  144. package/dist/types/src/components/UiTooltip/UiTooltipProvider.vue.d.ts +17 -0
  145. package/dist/types/src/components/UiTooltip/UiTooltipTrigger.vue.d.ts +14 -0
  146. package/dist/types/src/components/UiTooltip/index.d.ts +4 -0
  147. package/dist/types/src/composables/useButtonStyles.d.ts +20 -0
  148. package/dist/types/src/composables/useMobileMenu.d.ts +11 -0
  149. package/dist/types/src/composables/useThemeAndModes.d.ts +34 -0
  150. package/dist/types/src/constants/index.d.ts +2 -0
  151. package/dist/types/src/constants/sizes.d.ts +2 -0
  152. package/dist/types/src/constants/themes.d.ts +22 -0
  153. package/dist/types/src/integrations/index.d.ts +1 -0
  154. package/dist/types/src/layouts/index.d.ts +2 -0
  155. package/dist/types/src/mixins/DynamicAction.d.ts +30 -0
  156. package/dist/types/src/primitives.d.ts +6 -0
  157. package/dist/types/src/theme.d.ts +1 -0
  158. package/dist/types/src/utils/a11y.d.ts +2 -0
  159. package/dist/types/src/utils/breakpoints.d.ts +9 -0
  160. package/dist/types/src/utils/bus.d.ts +2 -0
  161. package/dist/types/src/utils/clipboard.d.ts +4 -0
  162. package/dist/types/src/utils/devices.d.ts +19 -0
  163. package/dist/types/src/utils/elements.d.ts +1 -0
  164. package/dist/types/src/utils/index.d.ts +9 -0
  165. package/dist/types/src/utils/numbers.d.ts +30 -0
  166. package/dist/types/src/utils/responsive.d.ts +5 -0
  167. package/dist/types/src/utils/responsive.types.d.ts +12 -0
  168. package/dist/types/src/utils/router.d.ts +1 -0
  169. package/dist/types/src/utils/slot.d.ts +8 -0
  170. package/dist/types/src/utils/stack-view.d.ts +10 -0
  171. package/dist/types/src/utils/uid.d.ts +1 -0
  172. package/dist/types/style.d.ts +1 -0
  173. package/dist/ui-vue.css +1 -0
  174. package/dist/useThemeAndModes-DY5SDC0a.mjs +109 -0
  175. package/dist/utils.mjs +111 -0
  176. package/index.d.ts +88 -2
  177. package/index.js +169 -16
  178. package/integrations.d.ts +10 -0
  179. package/package.json +131 -63
  180. package/src/components/Toast/LayoutToasts.vue +63 -0
  181. package/src/components/Toast/ToastMessage.vue +208 -0
  182. package/src/components/Toast/toastDSV2.ts +151 -0
  183. package/src/components/UiActionBar/UiActionBar.vue +86 -0
  184. package/src/components/UiActionBar/UiActionBarItem.vue +179 -0
  185. package/src/components/UiActionBar/UiActionBarSeparator.vue +18 -0
  186. package/src/components/UiActionBar/index.ts +4 -0
  187. package/src/components/UiActionBar/types.ts +24 -0
  188. package/src/components/UiAnimatedLogo/UiAnimatedLogo.vue +47 -0
  189. package/src/components/UiAnimatedLogo/animations-links.ts +6 -0
  190. package/src/components/UiAvatar/UiAvatar.vue +186 -0
  191. package/src/components/UiAvatar/index.js +1 -0
  192. package/src/components/UiAvatarList/UiAvatarList.vue +109 -0
  193. package/src/components/UiAvatarList/index.js +1 -0
  194. package/src/components/UiBadge/UiBadge.vue +161 -0
  195. package/src/components/UiBadge/index.ts +2 -0
  196. package/src/components/UiBanner/UiBanner.vue +363 -0
  197. package/src/components/UiBanner/index.ts +2 -0
  198. package/src/components/UiBreadcrumb/UiBreadcrumb.vue +93 -0
  199. package/src/components/UiBreadcrumb/index.ts +2 -0
  200. package/src/components/UiButton/UiButton.vue +319 -0
  201. package/src/components/UiButtonGroup/UiButtonGroup.vue +198 -0
  202. package/src/components/UiButtonGroup/UiButtonGroupItem.vue +123 -0
  203. package/src/components/UiButtonGroup/index.ts +3 -0
  204. package/src/components/UiButtonGroup/types.ts +24 -0
  205. package/src/components/UiCard/UiCard.vue +112 -0
  206. package/src/components/UiCarousel/UiCarousel.vue +215 -0
  207. package/src/components/UiCarousel/index.ts +2 -0
  208. package/src/components/UiColorField/UiColorField.vue +158 -0
  209. package/src/components/UiColorField/index.ts +2 -0
  210. package/src/components/UiColorField/types.ts +30 -0
  211. package/src/components/UiColorPicker/UiColorPicker.vue +487 -0
  212. package/src/components/UiColorPicker/index.ts +2 -0
  213. package/src/components/UiColorPicker/types.ts +103 -0
  214. package/src/components/UiDialog/MarketplaceHeaderExample.vue +217 -0
  215. package/src/components/UiDialog/UiDialog.md +97 -0
  216. package/src/components/UiDialog/UiDialog.vue +16 -0
  217. package/src/components/UiDialog/UiDialogClose.vue +29 -0
  218. package/src/components/UiDialog/UiDialogContent.vue +238 -0
  219. package/src/components/UiDialog/UiDialogFooter.vue +9 -0
  220. package/src/components/UiDialog/UiDialogTrigger.vue +12 -0
  221. package/src/components/UiDialog/index.ts +18 -0
  222. package/src/components/UiDropdown/UiDropdown.vue +48 -0
  223. package/src/components/UiDropdown/UiDropdownContent.vue +72 -0
  224. package/src/components/UiDropdown/UiDropdownItem.vue +75 -0
  225. package/src/components/UiDropdown/UiDropdownSeparator.vue +7 -0
  226. package/src/components/UiDropdown/UiDropdownTrigger.vue +239 -0
  227. package/src/components/UiDropdown/context.ts +9 -0
  228. package/src/components/UiDropdown/index.ts +21 -0
  229. package/src/components/UiEmptyState/UiEmptyState.vue +80 -0
  230. package/src/components/UiFieldWrapper/UiFieldWrapper.vue +79 -0
  231. package/src/components/UiFieldWrapper/index.ts +1 -0
  232. package/src/components/UiForm/UiFormField.types.ts +24 -0
  233. package/src/components/UiForm/UiFormField.vue +66 -0
  234. package/src/components/UiForm/index.ts +3 -0
  235. package/src/components/UiHorizontalSeparator/UiHorizontalSeparator.vue +28 -0
  236. package/src/components/UiInputCheckbox/UiInputCheckbox.vue +477 -0
  237. package/src/components/UiInputCheckbox/index.ts +2 -0
  238. package/src/components/UiInputCheckbox/types.ts +1 -0
  239. package/src/components/UiInputSelect/UiInputSelect.vue +166 -0
  240. package/src/components/UiInputSelect/index.ts +2 -0
  241. package/src/components/UiInputSelect/types.ts +1 -0
  242. package/src/components/UiInputTextarea/UiInputTextarea.vue +219 -0
  243. package/src/components/UiInputTextarea/index.ts +2 -0
  244. package/src/components/UiInputTextarea/types.ts +1 -0
  245. package/src/components/UiLabel/UiLabel.vue +34 -0
  246. package/src/components/UiList/UiList.vue +45 -0
  247. package/src/components/UiListItem/UiListItem.vue +108 -0
  248. package/src/components/UiLoader/UiLoader.vue +45 -0
  249. package/src/components/UiLogo/UiLogo.vue +99 -0
  250. package/src/components/UiLogo/variants/PulseVariant.vue +51 -0
  251. package/src/components/UiLogo/variants/TornadoVariant.vue +147 -0
  252. package/src/components/UiMenu/UiMenu.vue +15 -0
  253. package/src/components/UiMenu/UiMenuContent.vue +25 -0
  254. package/src/components/UiMenu/UiMenuGroup.vue +19 -0
  255. package/src/components/UiMenu/UiMenuItem.vue +18 -0
  256. package/src/components/UiMenu/UiMenuLabel.vue +9 -0
  257. package/src/components/UiMenu/UiMenuSeparator.vue +9 -0
  258. package/src/components/UiMenu/UiMenuSub.vue +15 -0
  259. package/src/components/UiMenu/UiMenuSubContent.vue +23 -0
  260. package/src/components/UiMenu/UiMenuSubTrigger.vue +17 -0
  261. package/src/components/UiMenu/UiMenuTrigger.vue +13 -0
  262. package/src/components/UiMenu/index.ts +10 -0
  263. package/src/components/UiPage/UiPage.vue +201 -0
  264. package/src/components/UiPageHeader/UiPageHeader.vue +128 -0
  265. package/src/components/UiPopover/UiPopover.vue +16 -0
  266. package/src/components/UiPopover/UiPopoverAnchor.vue +12 -0
  267. package/src/components/UiPopover/UiPopoverContent.vue +26 -0
  268. package/src/components/UiPopover/UiPopoverTrigger.vue +19 -0
  269. package/src/components/UiProgress/UiProgress.vue +92 -0
  270. package/src/components/UiProgress/index.ts +2 -0
  271. package/src/components/UiProgress/types.ts +5 -0
  272. package/src/components/UiRoomButton/UiRoomButton.vue +240 -0
  273. package/src/components/UiShell/UiShell.vue +88 -0
  274. package/src/components/UiSideMenu/UiSideMenu.vue +513 -0
  275. package/src/components/UiSideMenu/UiSideMenuBottom.vue +27 -0
  276. package/src/components/UiSideMenu/UiSideMenuItem.vue +102 -0
  277. package/src/components/UiSideMenu/UiSideMenuItemContent.vue +172 -0
  278. package/src/components/UiSideMenu/UiSideMenuTop.vue +29 -0
  279. package/src/components/UiSideMenu/injection.ts +9 -0
  280. package/src/components/UiSideMenu/types.ts +41 -0
  281. package/src/components/UiSideMenu/useLabelHidden.ts +33 -0
  282. package/src/components/UiSideMenu/useSideMenuLayout.ts +12 -0
  283. package/src/components/UiStepper/UiStepper.vue +40 -0
  284. package/src/components/UiStepper/UiStepperDescription.vue +27 -0
  285. package/src/components/UiStepper/UiStepperIndicator.vue +93 -0
  286. package/src/components/UiStepper/UiStepperItem.vue +30 -0
  287. package/src/components/UiStepper/UiStepperSeparator.vue +49 -0
  288. package/src/components/UiStepper/UiStepperTitle.vue +24 -0
  289. package/src/components/UiStepper/index.ts +17 -0
  290. package/src/components/UiTable/UiTable.vue +24 -0
  291. package/src/components/UiTable/UiTableBody.vue +5 -0
  292. package/src/components/UiTable/UiTableCell.vue +26 -0
  293. package/src/components/UiTable/UiTableHeader.vue +17 -0
  294. package/src/components/UiTable/UiTableHeaderCell.vue +19 -0
  295. package/src/components/UiTable/UiTableRow.vue +27 -0
  296. package/src/components/UiTable/index.ts +6 -0
  297. package/src/components/UiTabs/UiTabs.vue +218 -0
  298. package/src/components/UiTabs/index.ts +5 -0
  299. package/src/components/UiTag/UiTag.vue +187 -0
  300. package/src/components/UiTag/index.js +1 -0
  301. package/src/components/UiTextField/UiTextField.vue +370 -0
  302. package/src/components/UiTextField/index.ts +2 -0
  303. package/src/components/UiTextField/types.ts +2 -0
  304. package/src/components/UiTimeline/README.md +169 -0
  305. package/src/components/UiTimeline/UiTimeline.vue +58 -0
  306. package/src/components/UiTimeline/UiTimelineItem.vue +141 -0
  307. package/src/components/UiTimeline/index.ts +2 -0
  308. package/src/components/UiTooltip/UiTooltip.vue +16 -0
  309. package/src/components/UiTooltip/UiTooltipContent.vue +86 -0
  310. package/src/components/UiTooltip/UiTooltipProvider.vue +15 -0
  311. package/src/components/UiTooltip/UiTooltipTrigger.vue +19 -0
  312. package/src/components/UiTooltip/index.js +4 -0
  313. package/src/composables/useButtonStyles.ts +242 -0
  314. package/src/composables/useMobileMenu.ts +57 -0
  315. package/src/composables/useThemeAndModes.ts +225 -0
  316. package/src/constants/index.ts +2 -0
  317. package/src/constants/sizes.ts +2 -0
  318. package/src/constants/themes.ts +34 -0
  319. package/src/css/{body.postcss → body.css} +3 -2
  320. package/src/css/reka-animations.css +209 -0
  321. package/src/css/{transitions.postcss → transitions.css} +12 -5
  322. package/src/global.d.ts +181 -0
  323. package/src/integrations/index.js +1 -0
  324. package/src/layouts/index.js +5 -0
  325. package/src/mixins/DynamicAction.js +5 -3
  326. package/src/primitives.ts +6 -0
  327. package/src/theme.ts +1 -0
  328. package/src/utils/a11y.ts +8 -0
  329. package/src/utils/{breakpoints.js → breakpoints.ts} +1 -0
  330. package/src/utils/clipboard.js +2 -2
  331. package/src/utils/devices.js +0 -3
  332. package/src/utils/index.js +2 -1
  333. package/src/utils/numbers.ts +61 -0
  334. package/src/utils/responsive.types.ts +12 -0
  335. package/src/utils/{slot.js → slot.ts} +18 -1
  336. package/style.js +3 -12
  337. package/theme.d.ts +1 -0
  338. package/.env +0 -1
  339. package/.eslintignore +0 -4
  340. package/.eslintrc.js +0 -49
  341. package/.pkg +0 -11
  342. package/babel.config.js +0 -5
  343. package/build/Dockerfile +0 -31
  344. package/ci/ci.yml +0 -54
  345. package/components-webpack.js +0 -29
  346. package/dist/environment-da321c85.mjs +0 -1656
  347. package/dist/style.css +0 -1
  348. package/plugins.js +0 -17
  349. package/postcss.config.js +0 -1
  350. package/src/components/BaseAutocomplete/BaseAutocomplete.spec.js +0 -506
  351. package/src/components/BaseAutocomplete/BaseAutocomplete.stories.js +0 -184
  352. package/src/components/BaseAutocomplete/BaseAutocomplete.vue +0 -431
  353. package/src/components/BaseBanner/BaseBanner.spec.js +0 -32
  354. package/src/components/BaseBanner/BaseBanner.stories.js +0 -133
  355. package/src/components/BaseBanner/BaseBanner.vue +0 -229
  356. package/src/components/BaseButton/BaseButton.spec.js +0 -98
  357. package/src/components/BaseButton/BaseButton.stories.js +0 -300
  358. package/src/components/BaseButton/BaseButton.vue +0 -193
  359. package/src/components/BaseButton/__snapshots__/BaseButton.spec.js.snap +0 -37
  360. package/src/components/BaseButton/__snapshots__/BaseButton.spec.js.snap.old +0 -31
  361. package/src/components/BaseCheckbox/BaseCheckbox.stories.js +0 -157
  362. package/src/components/BaseCheckbox/BaseCheckbox.vue +0 -180
  363. package/src/components/BaseDropdownMenu/BaseDropdownMenu.stories.js +0 -84
  364. package/src/components/BaseDropdownMenu/BaseDropdownMenu.vue +0 -251
  365. package/src/components/BaseDropdownMenu/BaseDropdownMenuButton.vue +0 -26
  366. package/src/components/BaseDropdownMenu/BaseDropdownMenuDivider.vue +0 -10
  367. package/src/components/BaseDropdownMenu/BaseDropdownMenuItem.vue +0 -206
  368. package/src/components/BaseDropdownMenu/BaseDropdownMenuSearch.vue +0 -49
  369. package/src/components/BaseDropdownMenu/BaseDropdownMenuTitle.vue +0 -26
  370. package/src/components/BaseModal/BaseModal.stories.js +0 -155
  371. package/src/components/BaseModal/BaseModal.vue +0 -187
  372. package/src/components/BaseModal/BaseModalContent.vue +0 -166
  373. package/src/components/BaseModal/BaseModalContentOld.vue +0 -242
  374. package/src/components/BaseRadio/BaseRadio.stories.js +0 -164
  375. package/src/components/BaseRadio/BaseRadio.vue +0 -153
  376. package/src/components/BaseRating/BaseRating.spec.js +0 -46
  377. package/src/components/BaseRating/BaseRating.stories.js +0 -46
  378. package/src/components/BaseRating/BaseRating.vue +0 -119
  379. package/src/components/BaseSelect/BaseSelect.stories.js +0 -177
  380. package/src/components/BaseSelect/BaseSelect.vue +0 -443
  381. package/src/components/BaseSelect/BaseSelectGroup.vue +0 -34
  382. package/src/components/BaseSelect/BaseSelectOption.vue +0 -219
  383. package/src/components/BaseSwitch/BaseSwitch.stories.js +0 -44
  384. package/src/components/BaseSwitch/BaseSwitch.vue +0 -114
  385. package/src/components/BaseTag/BaseTag.stories.js +0 -123
  386. package/src/components/BaseTag/BaseTag.vue +0 -244
  387. package/src/css/button.postcss +0 -363
  388. package/src/css/checkbox-radio.postcss +0 -188
  389. package/src/css/icon.postcss +0 -9
  390. package/src/css/loader.postcss +0 -120
  391. package/src/css/popper.postcss +0 -161
  392. package/src/css/tailwind-utilities.postcss +0 -1
  393. package/src/css/tailwind.postcss +0 -2
  394. package/style-postcss.d.ts +0 -3
  395. package/style-postcss.js +0 -2
  396. package/tailwind.config.base.cjs +0 -88
  397. package/tailwind.config.js +0 -9
  398. package/tsconfig.check.json +0 -13
  399. package/tsconfig.json +0 -66
  400. package/vite.config.js +0 -43
  401. package/vitest.setup.js +0 -26
@@ -0,0 +1,217 @@
1
+ <script setup lang="ts">
2
+ import { computed, ref, type Slot } from 'vue'
3
+
4
+ interface UiDialogMarketplaceHeaderProps {
5
+ icon?: string
6
+ logo?: string
7
+ title: string
8
+ description?: string
9
+ gradientColor?: string
10
+ images?: string[]
11
+ }
12
+
13
+ const props = withDefaults(defineProps<UiDialogMarketplaceHeaderProps>(), {
14
+ icon: undefined,
15
+ logo: undefined,
16
+ description: undefined,
17
+ gradientColor: '#0b42c3', // Default primary color
18
+ images: () => [],
19
+ })
20
+
21
+ defineSlots<{
22
+ switch(): Slot
23
+ carousel(): Slot
24
+ }>()
25
+
26
+ // Convert hex to HSL for gradient
27
+ const hexToHSL = (hex: string) => {
28
+ // Remove # if present
29
+ const sanitizedHex = hex.replace('#', '')
30
+
31
+ // Convert hex to RGB
32
+ const r = Number.parseInt(sanitizedHex.substring(0, 2), 16) / 255
33
+ const g = Number.parseInt(sanitizedHex.substring(2, 4), 16) / 255
34
+ const b = Number.parseInt(sanitizedHex.substring(4, 6), 16) / 255
35
+
36
+ const max = Math.max(r, g, b)
37
+ const min = Math.min(r, g, b)
38
+ let h = 0
39
+
40
+ if (max !== min) {
41
+ const d = max - min
42
+ if (max === r) {
43
+ h = ((g - b) / d + (g < b ? 6 : 0)) / 6
44
+ } else if (max === g) {
45
+ h = ((b - r) / d + 2) / 6
46
+ } else {
47
+ h = ((r - g) / d + 4) / 6
48
+ }
49
+ }
50
+
51
+ return Math.round(h * 360)
52
+ }
53
+
54
+ const hue = computed(() => hexToHSL(props.gradientColor))
55
+
56
+ // Current image index for simple carousel
57
+ const currentImageIndex = ref(0)
58
+
59
+ const hasImages = computed(() => props.images.length > 0)
60
+
61
+ const nextImage = () => {
62
+ if (props.images.length > 0) {
63
+ currentImageIndex.value = (currentImageIndex.value + 1) % props.images.length
64
+ }
65
+ }
66
+
67
+ const prevImage = () => {
68
+ if (props.images.length > 0) {
69
+ currentImageIndex.value = (currentImageIndex.value - 1 + props.images.length) % props.images.length
70
+ }
71
+ }
72
+
73
+ const goToImage = (index: number) => {
74
+ currentImageIndex.value = index
75
+ }
76
+ </script>
77
+
78
+ <template>
79
+ <div
80
+ class="py-16 max-sm:py-8 flex transition-all duration-100 ease-in items-center custom-gradient bg-no-repeat bg-left-bottom"
81
+ >
82
+ <div class="w-full flex items-center relative">
83
+ <div class="grid grid-cols-1 md:grid-cols-[280px_1fr] w-full px-8 lg:px-16 gap-8">
84
+ <!-- Left side: Icon/Logo + Title + Description + Switch -->
85
+ <div class="flex flex-col justify-center w-full">
86
+ <div class="flex flex-col flex-wrap gap-4 w-full">
87
+ <!-- Icon -->
88
+ <div
89
+ v-if="icon"
90
+ class="w-12 h-12 grid place-items-center bg-cover bg-center bg-no-repeat rounded-full bg-surface-primary-alpha-100"
91
+ >
92
+ <span :class="[icon, 'text-2xl text-text-primary-base']" />
93
+ </div>
94
+
95
+ <!-- Logo -->
96
+ <div
97
+ v-else-if="logo"
98
+ class="w-12 h-12 flex-none bg-center bg-contain bg-no-repeat rounded-full"
99
+ :style="{ backgroundImage: `url(${logo})` }"
100
+ />
101
+
102
+ <!-- Title and Description -->
103
+ <div class="flex flex-col gap-2 flex-1 min-w-0">
104
+ <h2 class="text-text-neutral-base text-title-md-bold">
105
+ {{ title }}
106
+ </h2>
107
+ <p
108
+ v-if="description"
109
+ class="text-text-neutral-secondary text-content-text-lg-regular"
110
+ >
111
+ {{ description }}
112
+ </p>
113
+ </div>
114
+
115
+ <!-- Switch/Toggle Slot -->
116
+ <div
117
+ v-if="$slots.switch"
118
+ class="transition-all duration-400 ease-in-out"
119
+ >
120
+ <slot name="switch" />
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+ <!-- Right side: Carousel or custom content -->
126
+ <div class="w-full grid place-items-center">
127
+ <div class="grid relative place-items-center pt-8 lg:pt-0">
128
+ <!-- Custom carousel slot -->
129
+ <slot name="carousel">
130
+ <!-- Default carousel implementation -->
131
+ <div
132
+ v-if="hasImages"
133
+ class="relative w-full aspect-video bg-surface-neutral-alpha-100 rounded-lg overflow-hidden"
134
+ >
135
+ <!-- Images -->
136
+ <TransitionGroup name="fade">
137
+ <img
138
+ v-for="(image, index) in images"
139
+ v-show="index === currentImageIndex"
140
+ :key="image"
141
+ :src="image"
142
+ :alt="`Screenshot ${index + 1}`"
143
+ class="absolute inset-0 w-full h-full object-cover"
144
+ >
145
+ </TransitionGroup>
146
+
147
+ <!-- Navigation arrows -->
148
+ <button
149
+ v-if="images.length > 1"
150
+ class="absolute left-4 top-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-surface-neutral-bg-main/80 backdrop-blur-xs flex items-center justify-center hover:bg-surface-neutral-bg-main transition-colors"
151
+ @click="prevImage"
152
+ >
153
+ <span class="i-ls-chevron-left w-4 h-4 text-text-neutral-base" />
154
+ </button>
155
+ <button
156
+ v-if="images.length > 1"
157
+ class="absolute right-4 top-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-surface-neutral-bg-main/80 backdrop-blur-xs flex items-center justify-center hover:bg-surface-neutral-bg-main transition-colors"
158
+ @click="nextImage"
159
+ >
160
+ <span class="i-ls-chevron-right w-4 h-4 text-text-neutral-base" />
161
+ </button>
162
+
163
+ <!-- Dots indicator -->
164
+ <div
165
+ v-if="images.length > 1"
166
+ class="absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-2"
167
+ >
168
+ <button
169
+ v-for="(_, index) in images"
170
+ :key="index"
171
+ :class="[
172
+ 'w-2 h-2 rounded-full transition-all',
173
+ index === currentImageIndex
174
+ ? 'bg-surface-neutral-bg-main w-6'
175
+ : 'bg-surface-neutral-bg-main/50',
176
+ ]"
177
+ @click="goToImage(index)"
178
+ />
179
+ </div>
180
+ </div>
181
+
182
+ <!-- Placeholder when no images -->
183
+ <div
184
+ v-else
185
+ class="w-full aspect-video min-h-[288px] bg-surface-neutral-alpha-100 rounded-lg flex items-center justify-center"
186
+ >
187
+ <span class="text-text-neutral-tertiary text-content-text-md-regular">
188
+ Integration Screenshots
189
+ </span>
190
+ </div>
191
+ </slot>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </template>
198
+
199
+ <style scoped>
200
+ .custom-gradient {
201
+ background:
202
+ radial-gradient(57.62% 57.62% at 8.3% 63.87%, hsla(v-bind(hue), 89%, 61%, 0.2) 0%, hsla(v-bind(hue), 71%, 99%, 0) 100%),
203
+ radial-gradient(45.83% 45.83% at 93.65% 51.82%, hsla(v-bind(hue), 89%, 61%, 0.1) 0%, hsla(0, 0%, 100%, 0.1) 100%),
204
+ linear-gradient(0deg, #FFFFFF, #FFFFFF);
205
+ background-attachment: fixed;
206
+ }
207
+
208
+ .fade-enter-active,
209
+ .fade-leave-active {
210
+ transition: opacity 0.5s ease;
211
+ }
212
+
213
+ .fade-enter-from,
214
+ .fade-leave-to {
215
+ opacity: 0;
216
+ }
217
+ </style>
@@ -0,0 +1,97 @@
1
+ # UiDialog
2
+
3
+ A modal dialog component built on top of [reka-ui](https://reka-ui.com/docs/components/dialog) with built-in open/close animations, scroll detection, and footer border.
4
+
5
+ ## Components
6
+
7
+ - `UiDialog` - Root wrapper (controls open/close state)
8
+ - `UiDialogContent` - The dialog panel (overlay, header, content, footer)
9
+ - `UiDialogTrigger` - Optional inline trigger button
10
+ - `UiDialogFooter` - Convenience layout for footer action buttons
11
+
12
+ ## Basic Usage
13
+
14
+ ### Child component (the modal)
15
+
16
+ Use `useVModel` from `@vueuse/core` to create a two-way binding for the `open` prop:
17
+
18
+ ```vue
19
+ <script setup lang="ts">
20
+ import { useVModel } from '@vueuse/core'
21
+
22
+ const props = defineProps<{
23
+ open: boolean
24
+ }>()
25
+
26
+ const emit = defineEmits<{
27
+ 'update:open': [value: boolean]
28
+ }>()
29
+
30
+ const isOpen = useVModel(props, 'open', emit)
31
+ </script>
32
+
33
+ <template>
34
+ <UiDialog v-model:open="isOpen">
35
+ <UiDialogContent title="My Dialog">
36
+ <p>Dialog content goes here.</p>
37
+
38
+ <template #footer>
39
+ <UiDialogFooter>
40
+ <UiButton variant="secondary" color="neutral" @click="isOpen = false">
41
+ Cancel
42
+ </UiButton>
43
+ <UiButton variant="cta" color="primary" @click="handleConfirm">
44
+ Confirm
45
+ </UiButton>
46
+ </UiDialogFooter>
47
+ </template>
48
+ </UiDialogContent>
49
+ </UiDialog>
50
+ </template>
51
+ ```
52
+
53
+ ### Parent component
54
+
55
+ Control the dialog from the parent using `v-model:open`:
56
+
57
+ ```vue
58
+ <script setup lang="ts">
59
+ import { ref } from 'vue'
60
+ import MyModal from './MyModal.vue'
61
+
62
+ const isModalOpen = ref(false)
63
+ </script>
64
+
65
+ <template>
66
+ <button @click="isModalOpen = true">Open</button>
67
+ <MyModal v-model:open="isModalOpen" />
68
+ </template>
69
+ ```
70
+
71
+ ## How open/close works
72
+
73
+ 1. The parent binds a `ref` via `v-model:open` on the child modal component
74
+ 2. The child forwards it to `<UiDialog v-model:open="isOpen">` using `useVModel`
75
+ 3. reka-ui's `DialogRoot` manages the actual visibility
76
+ 4. On close, reka-ui sets `data-state="closed"` on overlay and content, waits for CSS animations to finish, then unmounts
77
+
78
+ **Important:** Never use `v-if` on the modal component itself — this would unmount the component before reka-ui can play the close animation. Always use `v-model:open` to let reka-ui control visibility.
79
+
80
+ ## Closing the dialog
81
+
82
+ From the **template**, assign directly (Vue auto-unwraps refs):
83
+
84
+ ```vue
85
+ <UiButton @click="isOpen = false">Cancel</UiButton>
86
+ ```
87
+
88
+ From the **script**, use `.value`:
89
+
90
+ ```ts
91
+ async function handleSubmit() {
92
+ await doSomething()
93
+ isOpen.value = false
94
+ }
95
+ ```
96
+
97
+ The built-in close button (X) is handled automatically by reka-ui's `DialogClose`.
@@ -0,0 +1,16 @@
1
+ <!-- UiDialog.vue -->
2
+ <script setup lang="ts">
3
+ import type { DialogRootEmits, DialogRootProps } from 'reka-ui'
4
+ import { DialogRoot, useForwardPropsEmits } from 'reka-ui'
5
+
6
+ const props = defineProps<DialogRootProps>()
7
+ const emits = defineEmits<DialogRootEmits>()
8
+
9
+ const forwarded = useForwardPropsEmits(props, emits)
10
+ </script>
11
+
12
+ <template>
13
+ <DialogRoot v-bind="{ ...forwarded, ...$attrs }">
14
+ <slot />
15
+ </DialogRoot>
16
+ </template>
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import { DialogClose } from 'reka-ui';
3
+ import UiButton from '../UiButton/UiButton.vue';
4
+
5
+ interface UiDialogCloseProps {
6
+ ariaLabel?: string;
7
+ mode?: 'light' | 'dark';
8
+ }
9
+
10
+ withDefaults(defineProps<UiDialogCloseProps>(), {
11
+ ariaLabel: 'Close',
12
+ mode: 'light',
13
+ });
14
+ </script>
15
+
16
+ <template>
17
+ <DialogClose
18
+ as-child
19
+ >
20
+ <UiButton
21
+ variant="tertiary"
22
+ color="neutral"
23
+ size="md"
24
+ icon="i-ls-x-stream"
25
+ :aria-label="ariaLabel"
26
+ :data-colors-semantic="mode"
27
+ />
28
+ </DialogClose>
29
+ </template>
@@ -0,0 +1,238 @@
1
+ <script setup lang="ts">
2
+ import { useMutationObserver, useThrottleFn } from '@vueuse/core'
3
+ import i18n from 'i18next'
4
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui'
5
+ import {
6
+ DialogContent,
7
+ DialogDescription,
8
+ DialogOverlay,
9
+ DialogPortal,
10
+ DialogTitle,
11
+ useForwardPropsEmits,
12
+ VisuallyHidden,
13
+ } from 'reka-ui'
14
+ import { computed, ref, useAttrs, watch } from 'vue'
15
+ import UiDialogClose from './UiDialogClose.vue'
16
+
17
+ interface UiDialogContentProps extends DialogContentProps {
18
+ title?: string
19
+ description?: string
20
+ hideClose?: boolean
21
+ closeButtonAriaLabel?: string
22
+ overlayClass?: string
23
+ contentMode?: 'light' | 'dark'
24
+ closeButtonMode?: 'light' | 'dark'
25
+ size?: 'sm' | 'lg' | '2xl' | '3xl' | '5xl' | '7xl'
26
+ noPadding?: boolean
27
+ /** When true, disables default scroll handling on the content wrapper, allowing custom scroll behavior */
28
+ customScroll?: boolean
29
+ }
30
+
31
+ const props = withDefaults(defineProps<UiDialogContentProps>(), {
32
+ title: undefined,
33
+ description: undefined,
34
+ hideClose: false,
35
+ closeButtonAriaLabel: i18n.t('general_close'),
36
+ overlayClass: '',
37
+ contentMode: 'light',
38
+ closeButtonMode: undefined,
39
+ size: 'lg',
40
+ noPadding: false,
41
+ customScroll: false,
42
+ })
43
+
44
+ const sizeClasses: Record<string, string> = {
45
+ sm: 'max-w-sm',
46
+ lg: 'max-w-lg',
47
+ '2xl': 'max-w-2xl',
48
+ '3xl': 'max-w-3xl',
49
+ '5xl': 'max-w-5xl',
50
+ '7xl': 'max-w-7xl',
51
+ }
52
+
53
+ const widthClass = computed(() => sizeClasses[props.size] ?? '')
54
+
55
+ const emits = defineEmits<DialogContentEmits>()
56
+
57
+ // Forward only the DialogContentProps, not our custom props
58
+ const forwarded = useForwardPropsEmits(props, emits)
59
+
60
+ // Scroll detection for conditional footer border
61
+ const contentRef = ref<HTMLElement | null>(null)
62
+ const hasScroll = ref(false)
63
+
64
+ function checkScroll () {
65
+ if (contentRef.value) {
66
+ hasScroll.value = contentRef.value.scrollHeight > contentRef.value.clientHeight
67
+ }
68
+ }
69
+
70
+ const throttledCheckScroll = useThrottleFn(checkScroll, 100)
71
+
72
+ const attrs = useAttrs();
73
+ const accessibleTitle = computed(
74
+ () =>
75
+ props.title ||
76
+ (attrs['aria-label'] as string) ||
77
+ i18n.t('general_dialog_title'),
78
+ );
79
+ const accessibleDescription = computed(
80
+ () =>
81
+ props.description ||
82
+ (attrs['aria-description'] as string),
83
+ );
84
+
85
+ watch(contentRef, (el) => {
86
+ if (el) {
87
+ checkScroll() // Immediate, not throttled
88
+ }
89
+ }, { immediate: true })
90
+
91
+ useMutationObserver(contentRef, () => {
92
+ throttledCheckScroll() // Throttled for performance
93
+ }, {
94
+ childList: true,
95
+ subtree: true,
96
+ attributes: true,
97
+ attributeFilter: ['style', 'class'],
98
+ })
99
+ </script>
100
+
101
+ <template>
102
+ <DialogPortal>
103
+ <DialogOverlay
104
+ :class="[
105
+ 'fixed inset-0 bg-surface-overlay-alpha z-50',
106
+ 'ui-dialog-overlay',
107
+ overlayClass,
108
+ ]"
109
+ />
110
+ <div class="fixed inset-0 z-50 flex items-center justify-center pointer-events-none">
111
+ <DialogContent
112
+ v-bind="{ ...forwarded, ...$attrs }"
113
+ :class="[
114
+ 'bg-surface-neutral-bg-main rounded-2xl pointer-events-auto focus-indicator-none',
115
+ 'shadow-shadows-drop-shadow-2xl',
116
+ 'w-[95vw] max-h-[85vh]',
117
+ widthClass,
118
+ 'overflow-hidden flex flex-col',
119
+ 'ui-dialog-content animate-fade-scale',
120
+ 'focus:outline-hidden focus-indicator-none',
121
+ 'm-2',
122
+ !noPadding && 'py-6'
123
+ ]"
124
+ :data-colors-semantic="contentMode"
125
+ >
126
+ <VisuallyHidden
127
+ v-if="!title && accessibleTitle"
128
+ as-child
129
+ >
130
+ <DialogTitle>{{ accessibleTitle }}</DialogTitle>
131
+ </VisuallyHidden>
132
+ <!-- Header -->
133
+ <div
134
+ v-if="title || !hideClose"
135
+ :class="[
136
+ 'flex justify-between flex-col',
137
+ !noPadding && 'px-6',
138
+ ]"
139
+ >
140
+ <div
141
+ class="flex-1 flex flex-row items-center min-h-10"
142
+ :class="{'justify-between': !!title, 'justify-end': !title}"
143
+ >
144
+ <DialogTitle
145
+ v-if="title"
146
+ class="text-title-sm-bold text-text-neutral-base"
147
+ >
148
+ {{ title }}
149
+ </DialogTitle>
150
+
151
+ <UiDialogClose
152
+ v-if="!hideClose"
153
+ :aria-label="closeButtonAriaLabel"
154
+ :mode="closeButtonMode ?? contentMode"
155
+ :class="{
156
+ 'ml-4': !noPadding
157
+ }"
158
+ />
159
+ </div>
160
+ </div>
161
+
162
+ <VisuallyHidden
163
+ v-if="!description && accessibleDescription"
164
+ as-child
165
+ >
166
+ <DialogDescription>{{ accessibleDescription }}</DialogDescription>
167
+ </VisuallyHidden>
168
+ <DialogDescription
169
+ v-if="description"
170
+ class="text-content-text-md-regular text-text-neutral-secondary"
171
+ :class="{
172
+ 'pt-6 px-6': !noPadding,
173
+ 'pb-6': !$slots.footer && !$slots.default,
174
+ 'pb-2': $slots.footer || $slots.default
175
+ }"
176
+ >
177
+ {{ description }}
178
+ </DialogDescription>
179
+
180
+ <!-- Content Slot -->
181
+ <div
182
+ v-if="$slots.default"
183
+ ref="contentRef"
184
+ :class="[
185
+ !noPadding && 'px-6',
186
+ !noPadding && (title || description || !hideClose ? 'pt-4' : 'pt-6'),
187
+ !noPadding && $slots.footer && 'pb-4',
188
+ !customScroll && 'overflow-y-auto',
189
+ 'min-h-0 flex-1',
190
+ ]"
191
+ >
192
+ <slot />
193
+ </div>
194
+
195
+ <!-- Footer Slot (optional) -->
196
+ <div
197
+ v-if="$slots.footer"
198
+ :class="[
199
+ !noPadding && 'px-6 pt-6',
200
+ hasScroll && 'border-t border-borders-neutral-light',
201
+ ]"
202
+ >
203
+ <slot name="footer" />
204
+ </div>
205
+ </DialogContent>
206
+ </div>
207
+ </DialogPortal>
208
+ </template>
209
+
210
+ <style scoped>
211
+ @keyframes fade-in {
212
+ from { opacity: 0; }
213
+ to { opacity: 1; }
214
+ }
215
+
216
+ @keyframes fade-out {
217
+ from { opacity: 1; }
218
+ to { opacity: 0; }
219
+ }
220
+
221
+ /* Overlay animations */
222
+ .ui-dialog-overlay[data-state='open'] {
223
+ animation: fade-in 150ms ease-out;
224
+ }
225
+
226
+ .ui-dialog-overlay[data-state='closed'] {
227
+ animation: fade-out 150ms ease-in;
228
+ }
229
+
230
+ /* Content animations */
231
+ .ui-dialog-content[data-state='open'] {
232
+ animation: fade-scale 200ms ease-out;
233
+ }
234
+
235
+ .ui-dialog-content[data-state='closed'] {
236
+ animation: fade-scale 150ms ease-in reverse;
237
+ }
238
+ </style>
@@ -0,0 +1,9 @@
1
+ <script setup lang="ts">
2
+ // UiDialogFooter - A convenience component for dialog footer actions
3
+ </script>
4
+
5
+ <template>
6
+ <div class="flex flex-col-reverse sm:flex-row gap-2.5 w-full justify-end">
7
+ <slot />
8
+ </div>
9
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { DialogTriggerProps } from 'reka-ui'
3
+ import { DialogTrigger } from 'reka-ui'
4
+
5
+ defineProps<DialogTriggerProps>()
6
+ </script>
7
+
8
+ <template>
9
+ <DialogTrigger v-bind="$attrs">
10
+ <slot />
11
+ </DialogTrigger>
12
+ </template>
@@ -0,0 +1,18 @@
1
+ // UiDialog exports
2
+ export { default as UiDialog } from './UiDialog.vue'
3
+ export { default as UiDialogTrigger } from './UiDialogTrigger.vue'
4
+ export { default as UiDialogContent } from './UiDialogContent.vue'
5
+ export { default as UiDialogFooter } from './UiDialogFooter.vue'
6
+ export { default as UiDialogClose } from './UiDialogClose.vue'
7
+ export { default as UiDialogMarketplaceHeader } from './MarketplaceHeaderExample.vue'
8
+
9
+ // Re-export useful Reka UI types and components for advanced usage
10
+ export {
11
+ DialogClose,
12
+ DialogDescription,
13
+ DialogTitle,
14
+ type DialogRootProps,
15
+ type DialogRootEmits,
16
+ type DialogContentProps,
17
+ type DialogContentEmits,
18
+ } from 'reka-ui'
@@ -0,0 +1,48 @@
1
+ <script setup lang="ts">
2
+ import type { SelectRootEmits, SelectRootProps } from 'reka-ui'
3
+ import { SelectRoot, useForwardPropsEmits } from 'reka-ui'
4
+ import { computed, provide } from 'vue'
5
+ import { UI_DROPDOWN_MULTIPLE_KEY } from './context'
6
+
7
+ // `SelectRoot` accepts many more props than we expose here; explicit prop
8
+ // declarations are documentation-driven. Storybook autodocs and Vue's
9
+ // `defineProps` cannot introspect external types like `SelectRootProps`,
10
+ // so anything we want surfaced in editor/type/docs must be listed here.
11
+ // Everything else passes through via `useForwardPropsEmits` + `$attrs`.
12
+ interface Props extends SelectRootProps {
13
+ /**
14
+ * Selected value. Pass a `string` for single-select, or a `string[]` when
15
+ * `multiple` is enabled.
16
+ */
17
+ modelValue?: string | string[]
18
+ /**
19
+ * Enable multi-select mode. When set, `v-model` must be bound to an array;
20
+ * clicking an option toggles its value and the menu stays open between
21
+ * selections.
22
+ */
23
+ multiple?: boolean
24
+ /** Open the dropdown on mount (uncontrolled). */
25
+ defaultOpen?: boolean
26
+ /** Disable the entire dropdown. */
27
+ disabled?: boolean
28
+ }
29
+
30
+ const props = withDefaults(defineProps<Props>(), {
31
+ modelValue: undefined,
32
+ multiple: false,
33
+ defaultOpen: false,
34
+ disabled: false,
35
+ })
36
+ const emits = defineEmits<SelectRootEmits>()
37
+
38
+ const forwarded = useForwardPropsEmits(props, emits)
39
+
40
+ // Expose `multiple` to descendant `UiDropdownItem`s so they can render the
41
+ // leading checkbox automatically in multi-select mode.
42
+ provide(UI_DROPDOWN_MULTIPLE_KEY, computed(() => props.multiple))
43
+ </script>
44
+ <template>
45
+ <SelectRoot v-bind="{ ...forwarded, ...$attrs }">
46
+ <slot />
47
+ </SelectRoot>
48
+ </template>