@nuxt/ui 3.0.0-alpha.9 → 3.0.0-beta.2

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 (289) hide show
  1. package/.nuxt/ui/accordion.ts +2 -2
  2. package/.nuxt/ui/alert.ts +122 -95
  3. package/.nuxt/ui/avatar-group.ts +14 -2
  4. package/.nuxt/ui/avatar.ts +16 -4
  5. package/.nuxt/ui/badge.ts +139 -93
  6. package/.nuxt/ui/breadcrumb.ts +5 -5
  7. package/.nuxt/ui/button-group.ts +13 -0
  8. package/.nuxt/ui/button.ts +167 -136
  9. package/.nuxt/ui/calendar.ts +103 -0
  10. package/.nuxt/ui/card.ts +27 -1
  11. package/.nuxt/ui/carousel.ts +7 -5
  12. package/.nuxt/ui/checkbox.ts +45 -27
  13. package/.nuxt/ui/chip.ts +44 -15
  14. package/.nuxt/ui/color-picker.ts +47 -0
  15. package/.nuxt/ui/command-palette.ts +28 -18
  16. package/.nuxt/ui/container.ts +1 -1
  17. package/.nuxt/ui/context-menu.ts +64 -46
  18. package/.nuxt/ui/drawer.ts +83 -15
  19. package/.nuxt/ui/dropdown-menu.ts +65 -47
  20. package/.nuxt/ui/form-field.ts +15 -7
  21. package/.nuxt/ui/index.ts +5 -1
  22. package/.nuxt/ui/input-menu.ts +150 -116
  23. package/.nuxt/ui/input-number.ts +102 -71
  24. package/.nuxt/ui/input.ts +111 -76
  25. package/.nuxt/ui/kbd.ts +18 -6
  26. package/.nuxt/ui/link.ts +3 -3
  27. package/.nuxt/ui/modal.ts +8 -7
  28. package/.nuxt/ui/navigation-menu.ts +244 -131
  29. package/.nuxt/ui/pin-input.ts +77 -51
  30. package/.nuxt/ui/popover.ts +2 -2
  31. package/.nuxt/ui/progress.ts +111 -72
  32. package/.nuxt/ui/radio-group.ts +45 -22
  33. package/.nuxt/ui/select-menu.ts +122 -86
  34. package/.nuxt/ui/select.ts +120 -84
  35. package/.nuxt/ui/separator.ts +60 -31
  36. package/.nuxt/ui/skeleton.ts +1 -1
  37. package/.nuxt/ui/slideover.ts +17 -9
  38. package/.nuxt/ui/slider.ts +61 -38
  39. package/.nuxt/ui/stepper.ts +202 -0
  40. package/.nuxt/ui/switch.ts +40 -22
  41. package/.nuxt/ui/table.ts +48 -31
  42. package/.nuxt/ui/tabs.ts +100 -72
  43. package/.nuxt/ui/textarea.ts +111 -76
  44. package/.nuxt/ui/toast.ts +53 -33
  45. package/.nuxt/ui/toaster.ts +31 -15
  46. package/.nuxt/ui/tooltip.ts +2 -2
  47. package/.nuxt/ui/tree.ts +154 -0
  48. package/.nuxt/ui.css +92 -0
  49. package/README.md +19 -8
  50. package/cli/commands/make/component.mjs +12 -0
  51. package/cli/package.json +2 -2
  52. package/cli/templates.mjs +27 -22
  53. package/dist/module.cjs +9 -171
  54. package/dist/module.d.cts +5 -15
  55. package/dist/module.d.mts +5 -15
  56. package/dist/module.d.ts +5 -15
  57. package/dist/module.json +2 -2
  58. package/dist/module.mjs +12 -168
  59. package/dist/runtime/components/Accordion.vue +8 -39
  60. package/dist/runtime/components/Alert.vue +22 -21
  61. package/dist/runtime/components/App.vue +9 -15
  62. package/dist/runtime/components/Avatar.vue +33 -21
  63. package/dist/runtime/components/AvatarGroup.vue +5 -7
  64. package/dist/runtime/components/Badge.vue +10 -8
  65. package/dist/runtime/components/Breadcrumb.vue +5 -31
  66. package/dist/runtime/components/Button.vue +5 -8
  67. package/dist/runtime/components/ButtonGroup.vue +5 -7
  68. package/dist/runtime/components/Calendar.vue +194 -0
  69. package/dist/runtime/components/Card.vue +10 -9
  70. package/dist/runtime/components/Carousel.vue +15 -10
  71. package/dist/runtime/components/Checkbox.vue +32 -38
  72. package/dist/runtime/components/Chip.vue +6 -8
  73. package/dist/runtime/components/Collapsible.vue +10 -11
  74. package/dist/runtime/components/ColorPicker.vue +297 -0
  75. package/dist/runtime/components/CommandPalette.vue +111 -97
  76. package/dist/runtime/components/Container.vue +4 -7
  77. package/dist/runtime/components/ContextMenu.vue +16 -69
  78. package/dist/runtime/components/ContextMenuContent.vue +12 -10
  79. package/dist/runtime/components/Drawer.vue +23 -12
  80. package/dist/runtime/components/DropdownMenu.vue +18 -59
  81. package/dist/runtime/components/DropdownMenuContent.vue +12 -10
  82. package/dist/runtime/components/Form.vue +65 -34
  83. package/dist/runtime/components/FormField.vue +22 -13
  84. package/dist/runtime/components/Icon.vue +1 -1
  85. package/dist/runtime/components/Input.vue +15 -7
  86. package/dist/runtime/components/InputMenu.vue +95 -104
  87. package/dist/runtime/components/InputNumber.vue +14 -9
  88. package/dist/runtime/components/Kbd.vue +5 -6
  89. package/dist/runtime/components/Link.vue +5 -8
  90. package/dist/runtime/components/LinkBase.vue +1 -1
  91. package/dist/runtime/components/Modal.vue +51 -38
  92. package/dist/runtime/components/NavigationMenu.vue +129 -114
  93. package/dist/runtime/components/OverlayProvider.vue +29 -0
  94. package/dist/runtime/components/Pagination.vue +6 -9
  95. package/dist/runtime/components/PinInput.vue +10 -11
  96. package/dist/runtime/components/Popover.vue +16 -18
  97. package/dist/runtime/components/Progress.vue +28 -12
  98. package/dist/runtime/components/RadioGroup.vue +9 -12
  99. package/dist/runtime/components/Select.vue +60 -34
  100. package/dist/runtime/components/SelectMenu.vue +160 -165
  101. package/dist/runtime/components/Separator.vue +6 -5
  102. package/dist/runtime/components/Skeleton.vue +4 -7
  103. package/dist/runtime/components/Slideover.vue +51 -37
  104. package/dist/runtime/components/Slider.vue +8 -7
  105. package/dist/runtime/components/Stepper.vue +170 -0
  106. package/dist/runtime/components/Switch.vue +19 -23
  107. package/dist/runtime/components/Table.vue +146 -31
  108. package/dist/runtime/components/Tabs.vue +12 -31
  109. package/dist/runtime/components/Textarea.vue +17 -8
  110. package/dist/runtime/components/Toast.vue +36 -25
  111. package/dist/runtime/components/Toaster.vue +10 -11
  112. package/dist/runtime/components/Tooltip.vue +9 -12
  113. package/dist/runtime/components/Tree.vue +196 -0
  114. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  115. package/dist/runtime/composables/defineShortcuts.js +2 -2
  116. package/dist/runtime/composables/useFormField.d.ts +7 -3
  117. package/dist/runtime/composables/useFormField.js +18 -8
  118. package/dist/runtime/composables/useLocale.js +1 -1
  119. package/dist/runtime/composables/useOverlay.d.ts +30 -0
  120. package/dist/runtime/composables/useOverlay.js +71 -0
  121. package/dist/runtime/composables/useToast.d.ts +4 -3
  122. package/dist/runtime/composables/useToast.js +20 -6
  123. package/dist/runtime/index.css +1 -1
  124. package/dist/runtime/keyframes.css +1 -1
  125. package/dist/runtime/locale/ar.js +9 -1
  126. package/dist/runtime/locale/az.js +54 -0
  127. package/dist/runtime/locale/bn.js +54 -0
  128. package/dist/runtime/locale/cs.js +9 -1
  129. package/dist/runtime/locale/da.d.ts +2 -0
  130. package/dist/runtime/locale/da.js +54 -0
  131. package/dist/runtime/locale/de.js +11 -3
  132. package/dist/runtime/locale/el.d.ts +2 -0
  133. package/dist/runtime/locale/el.js +54 -0
  134. package/dist/runtime/locale/en.js +9 -1
  135. package/dist/runtime/locale/es.js +9 -1
  136. package/dist/runtime/locale/et.d.ts +2 -0
  137. package/dist/runtime/locale/et.js +54 -0
  138. package/dist/runtime/locale/fa_ir.js +9 -1
  139. package/dist/runtime/locale/fi.d.ts +2 -0
  140. package/dist/runtime/locale/fi.js +54 -0
  141. package/dist/runtime/locale/fr.js +9 -1
  142. package/dist/runtime/locale/he.d.ts +2 -0
  143. package/dist/runtime/locale/he.js +53 -0
  144. package/dist/runtime/locale/hi.d.ts +2 -0
  145. package/dist/runtime/locale/hi.js +54 -0
  146. package/dist/runtime/locale/hu.d.ts +2 -0
  147. package/dist/runtime/locale/hu.js +54 -0
  148. package/dist/runtime/locale/id.d.ts +2 -0
  149. package/dist/runtime/locale/id.js +54 -0
  150. package/dist/runtime/locale/index.d.ts +25 -3
  151. package/dist/runtime/locale/index.js +25 -3
  152. package/dist/runtime/locale/it.js +9 -1
  153. package/dist/runtime/locale/ja.d.ts +2 -0
  154. package/dist/runtime/locale/ja.js +54 -0
  155. package/dist/runtime/locale/km.d.ts +2 -0
  156. package/dist/runtime/locale/km.js +54 -0
  157. package/dist/runtime/locale/ko.d.ts +2 -0
  158. package/dist/runtime/locale/ko.js +54 -0
  159. package/dist/runtime/locale/nb_no.d.ts +2 -0
  160. package/dist/runtime/locale/nb_no.js +54 -0
  161. package/dist/runtime/locale/nl.d.ts +2 -0
  162. package/dist/runtime/locale/nl.js +54 -0
  163. package/dist/runtime/locale/pl.js +9 -1
  164. package/dist/runtime/locale/pt.d.ts +2 -0
  165. package/dist/runtime/locale/pt.js +54 -0
  166. package/dist/runtime/locale/pt_br.d.ts +2 -0
  167. package/dist/runtime/locale/pt_br.js +54 -0
  168. package/dist/runtime/locale/ru.js +9 -1
  169. package/dist/runtime/locale/sk.d.ts +2 -0
  170. package/dist/runtime/locale/sk.js +54 -0
  171. package/dist/runtime/locale/sv.d.ts +2 -0
  172. package/dist/runtime/locale/sv.js +54 -0
  173. package/dist/runtime/locale/th.d.ts +2 -0
  174. package/dist/runtime/locale/th.js +54 -0
  175. package/dist/runtime/locale/tr.d.ts +2 -0
  176. package/dist/runtime/locale/tr.js +54 -0
  177. package/dist/runtime/locale/uk.d.ts +2 -0
  178. package/dist/runtime/locale/uk.js +54 -0
  179. package/dist/runtime/locale/vi.d.ts +2 -0
  180. package/dist/runtime/locale/vi.js +54 -0
  181. package/dist/runtime/locale/zh_cn.d.ts +2 -0
  182. package/dist/runtime/locale/{zh_hans.js → zh_cn.js} +10 -2
  183. package/dist/runtime/locale/zh_tw.d.ts +2 -0
  184. package/dist/runtime/locale/{zh_hant.js → zh_tw.js} +16 -8
  185. package/dist/runtime/plugins/colors.js +8 -5
  186. package/dist/runtime/types/form.d.ts +24 -15
  187. package/dist/runtime/types/form.js +2 -2
  188. package/dist/runtime/types/index.d.ts +5 -0
  189. package/dist/runtime/types/index.js +5 -0
  190. package/dist/runtime/types/locale.d.ts +8 -0
  191. package/dist/runtime/types/utils.d.ts +7 -3
  192. package/dist/runtime/utils/form.d.ts +4 -4
  193. package/dist/runtime/utils/form.js +6 -8
  194. package/dist/runtime/utils/index.d.ts +1 -1
  195. package/dist/runtime/utils/index.js +15 -2
  196. package/dist/runtime/utils/tv.d.ts +1 -0
  197. package/dist/runtime/utils/tv.js +4 -0
  198. package/dist/runtime/vue/components/Icon.vue +2 -2
  199. package/dist/runtime/vue/components/Link.vue +87 -23
  200. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  201. package/dist/runtime/vue/composables/useAppConfig.js +2 -0
  202. package/dist/runtime/vue/plugins/head.d.ts +1 -1
  203. package/dist/runtime/vue/plugins/head.js +3 -3
  204. package/dist/runtime/vue/stubs.d.ts +19 -0
  205. package/dist/runtime/vue/stubs.js +37 -0
  206. package/dist/shared/{ui.d52SSCwA.mjs → ui.DSPu6Y8j.mjs} +905 -401
  207. package/dist/shared/{ui.BPnAe4QS.cjs → ui.DfK2RX6G.cjs} +908 -401
  208. package/dist/unplugin.cjs +62 -26
  209. package/dist/unplugin.d.cts +13 -1
  210. package/dist/unplugin.d.mts +13 -1
  211. package/dist/unplugin.d.ts +13 -1
  212. package/dist/unplugin.mjs +61 -25
  213. package/dist/vite.cjs +3 -2
  214. package/dist/vite.d.cts +2 -0
  215. package/dist/vite.d.mts +2 -0
  216. package/dist/vite.d.ts +2 -0
  217. package/dist/vite.mjs +3 -2
  218. package/package.json +103 -67
  219. package/dist/chunks/component-meta.cjs +0 -77249
  220. package/dist/chunks/component-meta.mjs +0 -77247
  221. package/dist/client/devtools/200.html +0 -1
  222. package/dist/client/devtools/404.html +0 -1
  223. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  224. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  225. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  226. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  227. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  228. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  229. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  230. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  231. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  232. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  233. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  234. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  235. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  236. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  237. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  238. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  239. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  240. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  241. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  242. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  243. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  244. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  245. package/dist/client/devtools/_nuxt/BDC8ywlR.js +0 -1
  246. package/dist/client/devtools/_nuxt/BT004Uxp.js +0 -53
  247. package/dist/client/devtools/_nuxt/C1H2Soz3.js +0 -1
  248. package/dist/client/devtools/_nuxt/builds/latest.json +0 -1
  249. package/dist/client/devtools/_nuxt/builds/meta/f98c13ea-d751-4b37-8ce3-94e99708745f.json +0 -1
  250. package/dist/client/devtools/_nuxt/entry.Bx6WJjrx.css +0 -1
  251. package/dist/client/devtools/_nuxt/error-404.Cq4qshcf.css +0 -1
  252. package/dist/client/devtools/_nuxt/error-500.ax1aM34m.css +0 -1
  253. package/dist/client/devtools/favicon.svg +0 -1
  254. package/dist/client/devtools/index.html +0 -1
  255. package/dist/devtools/runtime/DevtoolsRenderer.vue +0 -53
  256. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +0 -7
  257. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +0 -8
  258. package/dist/devtools/runtime/examples/CardExample.vue +0 -13
  259. package/dist/devtools/runtime/examples/CarouselExample.vue +0 -13
  260. package/dist/devtools/runtime/examples/ChipExample.vue +0 -5
  261. package/dist/devtools/runtime/examples/CollapsibleExample.vue +0 -8
  262. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +0 -29
  263. package/dist/devtools/runtime/examples/ContainerExample.vue +0 -5
  264. package/dist/devtools/runtime/examples/ContextMenuExample.vue +0 -5
  265. package/dist/devtools/runtime/examples/DrawerExample.vue +0 -8
  266. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +0 -5
  267. package/dist/devtools/runtime/examples/FormExample.vue +0 -30
  268. package/dist/devtools/runtime/examples/FormFieldExample.vue +0 -5
  269. package/dist/devtools/runtime/examples/LinkExample.vue +0 -5
  270. package/dist/devtools/runtime/examples/ModalExample.vue +0 -8
  271. package/dist/devtools/runtime/examples/PopoverExample.vue +0 -8
  272. package/dist/devtools/runtime/examples/SkeletonExample.vue +0 -3
  273. package/dist/devtools/runtime/examples/SlideoverExample.vue +0 -8
  274. package/dist/devtools/runtime/examples/ToasterExample.vue +0 -11
  275. package/dist/devtools/runtime/examples/TooltipExample.vue +0 -5
  276. package/dist/runtime/components/ModalProvider.vue +0 -12
  277. package/dist/runtime/components/SlideoverProvider.vue +0 -12
  278. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +0 -7
  279. package/dist/runtime/composables/extendDevtoolsMeta.js +0 -2
  280. package/dist/runtime/composables/useModal.d.ts +0 -17
  281. package/dist/runtime/composables/useModal.js +0 -46
  282. package/dist/runtime/composables/useSlideover.d.ts +0 -17
  283. package/dist/runtime/composables/useSlideover.js +0 -46
  284. package/dist/runtime/plugins/modal.d.ts +0 -2
  285. package/dist/runtime/plugins/modal.js +0 -10
  286. package/dist/runtime/plugins/slideover.d.ts +0 -2
  287. package/dist/runtime/plugins/slideover.js +0 -10
  288. /package/dist/runtime/locale/{zh_hans.d.ts → az.d.ts} +0 -0
  289. /package/dist/runtime/locale/{zh_hant.d.ts → bn.d.ts} +0 -0
@@ -1,15 +1,15 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { DialogRootProps, DialogRootEmits, DialogContentProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { DialogRootProps, DialogRootEmits, DialogContentProps } from 'reka-ui'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/slideover'
7
- import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
+ import { tv } from '../utils/tv'
8
8
  import type { ButtonProps } from '../types'
9
9
 
10
- const appConfig = _appConfig as AppConfig & { ui: { slideover: Partial<typeof theme> } }
10
+ const appConfigSlideover = _appConfig as AppConfig & { ui: { slideover: Partial<typeof theme> } }
11
11
 
12
- const slideover = tv({ extend: tv(theme), ...(appConfig.ui?.slideover || {}) })
12
+ const slideover = tv({ extend: tv(theme), ...(appConfigSlideover.ui?.slideover || {}) })
13
13
 
14
14
  type SlideoverVariants = VariantProps<typeof slideover>
15
15
 
@@ -39,22 +39,24 @@ export interface SlideoverProps extends DialogRootProps {
39
39
  * `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
40
40
  * @defaultValue true
41
41
  */
42
- close?: ButtonProps | boolean
42
+ close?: boolean | Partial<ButtonProps>
43
43
  /**
44
44
  * The icon displayed in the close button.
45
45
  * @defaultValue appConfig.ui.icons.close
46
46
  */
47
47
  closeIcon?: string
48
48
  /**
49
- * When `true`, the slideover will not close when clicking outside.
50
- * @defaultValue false
49
+ * When `false`, the slideover will not close when clicking outside or pressing escape.
50
+ * @defaultValue true
51
51
  */
52
- preventClose?: boolean
52
+ dismissible?: boolean
53
53
  class?: any
54
54
  ui?: Partial<typeof slideover.slots>
55
55
  }
56
56
 
57
- export interface SlideoverEmits extends DialogRootEmits {}
57
+ export interface SlideoverEmits extends DialogRootEmits {
58
+ 'after:leave': []
59
+ }
58
60
 
59
61
  export interface SlideoverSlots {
60
62
  default(props: { open: boolean }): any
@@ -66,13 +68,11 @@ export interface SlideoverSlots {
66
68
  body(props?: {}): any
67
69
  footer(props?: {}): any
68
70
  }
69
-
70
- extendDevtoolsMeta({ example: 'SlideoverExample' })
71
71
  </script>
72
72
 
73
73
  <script setup lang="ts">
74
74
  import { computed, toRef } from 'vue'
75
- import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, useForwardPropsEmits } from 'radix-vue'
75
+ import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, VisuallyHidden, useForwardPropsEmits } from 'reka-ui'
76
76
  import { reactivePick } from '@vueuse/core'
77
77
  import { useAppConfig } from '#imports'
78
78
  import { useLocale } from '../composables/useLocale'
@@ -84,34 +84,32 @@ const props = withDefaults(defineProps<SlideoverProps>(), {
84
84
  overlay: true,
85
85
  transition: true,
86
86
  modal: true,
87
+ dismissible: true,
87
88
  side: 'right'
88
89
  })
89
90
  const emits = defineEmits<SlideoverEmits>()
90
91
  const slots = defineSlots<SlideoverSlots>()
91
92
 
93
+ const { t } = useLocale()
94
+ const appConfig = useAppConfig()
95
+
92
96
  const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'modal'), emits)
93
97
  const contentProps = toRef(() => props.content)
94
98
  const contentEvents = computed(() => {
95
- if (props.preventClose) {
99
+ if (!props.dismissible) {
96
100
  return {
97
101
  pointerDownOutside: (e: Event) => e.preventDefault(),
98
102
  interactOutside: (e: Event) => e.preventDefault(),
99
- escapeKeyDown: (e: Event) => e.preventDefault()
103
+ escapeKeyDown: (e: Event) => e.preventDefault(),
104
+ closeAutoFocus: (e: Event) => e.preventDefault()
100
105
  }
101
106
  }
102
107
 
103
108
  return {
104
- interactOutside: (e: Event) => {
105
- if (e.target instanceof Element && e.target.closest('[data-sonner-toaster]')) {
106
- return e.preventDefault()
107
- }
108
- }
109
+ closeAutoFocus: (e: Event) => e.preventDefault()
109
110
  }
110
111
  })
111
112
 
112
- const appConfig = useAppConfig()
113
- const { t } = useLocale()
114
-
115
113
  const ui = computed(() => slideover({
116
114
  transition: props.transition,
117
115
  side: props.side
@@ -120,28 +118,44 @@ const ui = computed(() => slideover({
120
118
 
121
119
  <template>
122
120
  <DialogRoot v-slot="{ open }" v-bind="rootProps">
123
- <DialogTrigger v-if="!!slots.default" as-child>
121
+ <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
124
122
  <slot :open="open" />
125
123
  </DialogTrigger>
126
124
 
127
125
  <DialogPortal :disabled="!portal">
128
126
  <DialogOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
129
127
 
130
- <DialogContent :data-side="side" :class="ui.content({ class: [props.class, props.ui?.content] })" v-bind="contentProps" v-on="contentEvents">
128
+ <DialogContent :data-side="side" :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-bind="contentProps" @after-leave="emits('after:leave')" v-on="contentEvents">
129
+ <VisuallyHidden v-if="!!slots.content && ((title || !!slots.title) || (description || !!slots.description))">
130
+ <DialogTitle v-if="title || !!slots.title">
131
+ <slot name="title">
132
+ {{ title }}
133
+ </slot>
134
+ </DialogTitle>
135
+
136
+ <DialogDescription v-if="description || !!slots.description">
137
+ <slot name="description">
138
+ {{ description }}
139
+ </slot>
140
+ </DialogDescription>
141
+ </VisuallyHidden>
142
+
131
143
  <slot name="content">
132
144
  <div v-if="!!slots.header || (title || !!slots.title) || (description || !!slots.description) || (close || !!slots.close)" :class="ui.header({ class: props.ui?.header })">
133
145
  <slot name="header">
134
- <DialogTitle v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
135
- <slot name="title">
136
- {{ title }}
137
- </slot>
138
- </DialogTitle>
139
-
140
- <DialogDescription v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
141
- <slot name="description">
142
- {{ description }}
143
- </slot>
144
- </DialogDescription>
146
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })">
147
+ <DialogTitle v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
148
+ <slot name="title">
149
+ {{ title }}
150
+ </slot>
151
+ </DialogTitle>
152
+
153
+ <DialogDescription v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
154
+ <slot name="description">
155
+ {{ description }}
156
+ </slot>
157
+ </DialogDescription>
158
+ </div>
145
159
 
146
160
  <DialogClose as-child>
147
161
  <slot name="close" :ui="ui">
@@ -152,7 +166,7 @@ const ui = computed(() => slideover({
152
166
  color="neutral"
153
167
  variant="ghost"
154
168
  :aria-label="t('slideover.close')"
155
- v-bind="typeof close === 'object' ? close : undefined"
169
+ v-bind="(typeof close === 'object' ? close as Partial<ButtonProps> : {})"
156
170
  :class="ui.close({ class: props.ui?.close })"
157
171
  />
158
172
  </slot>
@@ -1,13 +1,14 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { SliderRootProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { SliderRootProps } from 'reka-ui'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/slider'
7
+ import { tv } from '../utils/tv'
7
8
 
8
- const appConfig = _appConfig as AppConfig & { ui: { slider: Partial<typeof theme> } }
9
+ const appConfigSlider = _appConfig as AppConfig & { ui: { slider: Partial<typeof theme> } }
9
10
 
10
- const slider = tv({ extend: tv(theme), ...(appConfig.ui?.slider || {}) })
11
+ const slider = tv({ extend: tv(theme), ...(appConfigSlider.ui?.slider || {}) })
11
12
 
12
13
  type SliderVariants = VariantProps<typeof slider>
13
14
 
@@ -38,7 +39,7 @@ export interface SliderEmits {
38
39
 
39
40
  <script setup lang="ts">
40
41
  import { computed } from 'vue'
41
- import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from 'radix-vue'
42
+ import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from 'reka-ui'
42
43
  import { reactivePick } from '@vueuse/core'
43
44
  import { useFormField } from '../composables/useFormField'
44
45
 
@@ -54,7 +55,7 @@ const modelValue = defineModel<number | number[]>()
54
55
 
55
56
  const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'orientation', 'min', 'max', 'step', 'minStepsBetweenThumbs', 'inverted'), emits)
56
57
 
57
- const { id, emitFormChange, emitFormInput, size, color, name, disabled } = useFormField<SliderProps>(props)
58
+ const { id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField<SliderProps>(props)
58
59
 
59
60
  const defaultSliderValue = computed(() => {
60
61
  if (typeof props.defaultValue === 'number') {
@@ -94,7 +95,7 @@ function onChange(value: any) {
94
95
 
95
96
  <template>
96
97
  <SliderRoot
97
- v-bind="rootProps"
98
+ v-bind="{ ...rootProps, ...ariaAttrs }"
98
99
  :id="id"
99
100
  v-model="sliderValue"
100
101
  :name="name"
@@ -0,0 +1,170 @@
1
+ <script lang="ts">
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { StepperRootProps, StepperRootEmits } from 'reka-ui'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/stepper'
7
+ import { tv } from '../utils/tv'
8
+ import type { DynamicSlots } from '../types/utils'
9
+
10
+ const appConfigStepper = _appConfig as AppConfig & { ui: { stepper: Partial<typeof theme> } }
11
+
12
+ const stepper = tv({ extend: tv(theme), ...(appConfigStepper.ui?.stepper || {}) })
13
+
14
+ type StepperVariants = VariantProps<typeof stepper>
15
+
16
+ export interface StepperItem {
17
+ slot?: string
18
+ value?: string | number
19
+ title?: string
20
+ description?: string
21
+ icon?: string
22
+ content?: string
23
+ disabled?: boolean
24
+ }
25
+
26
+ export interface StepperProps<T extends StepperItem> extends Pick<StepperRootProps, 'linear'> {
27
+ /**
28
+ * The element or component this component should render as.
29
+ * @defaultValue 'div'
30
+ */
31
+ as?: any
32
+ items: T[]
33
+ size?: StepperVariants['size']
34
+ color?: StepperVariants['color']
35
+ orientation?: StepperVariants['orientation']
36
+ /**
37
+ * The value of the step that should be active when initially rendered. Use when you do not need to control the state of the steps.
38
+ */
39
+ defaultValue?: string | number
40
+ disabled?: boolean
41
+ ui?: Partial<typeof stepper.slots>
42
+ class?: any
43
+ }
44
+
45
+ export type StepperEmits<T> = Omit<StepperRootEmits, 'update:modelValue'> & {
46
+ next: [payload: T]
47
+ prev: [payload: T]
48
+ }
49
+
50
+ type SlotProps<T extends StepperItem> = (props: { item: T }) => any
51
+
52
+ export type StepperSlots<T extends StepperItem> = {
53
+ indicator: SlotProps<T>
54
+ title: SlotProps<T>
55
+ description: SlotProps<T>
56
+ content: SlotProps<T>
57
+ } & DynamicSlots<T, SlotProps<T>>
58
+ </script>
59
+
60
+ <script setup lang="ts" generic="T extends StepperItem">
61
+ import { computed } from 'vue'
62
+ import { StepperRoot, StepperItem, StepperTrigger, StepperIndicator, StepperSeparator, StepperTitle, StepperDescription, useForwardProps } from 'reka-ui'
63
+ import { reactivePick } from '@vueuse/core'
64
+ import UIcon from './Icon.vue'
65
+
66
+ const props = withDefaults(defineProps<StepperProps<T>>(), {
67
+ orientation: 'horizontal',
68
+ linear: true
69
+ })
70
+ const emits = defineEmits<StepperEmits<T>>()
71
+ const slots = defineSlots<StepperSlots<T>>()
72
+
73
+ const modelValue = defineModel<string | number>()
74
+
75
+ const rootProps = useForwardProps(reactivePick(props, 'as', 'orientation', 'linear'))
76
+
77
+ const ui = computed(() => stepper({
78
+ orientation: props.orientation,
79
+ size: props.size,
80
+ color: props.color
81
+ }))
82
+
83
+ const currentStepIndex = computed({
84
+ get() {
85
+ const value = modelValue.value ?? props.defaultValue
86
+
87
+ return ((typeof value === 'string')
88
+ ? props.items.findIndex(item => item.value === value)
89
+ : value) ?? 0
90
+ },
91
+ set(value: number) {
92
+ modelValue.value = props.items?.[value]?.value ?? value
93
+ }
94
+ })
95
+
96
+ const currentStep = computed(() => props.items?.[currentStepIndex.value] as T)
97
+ const hasNext = computed(() => currentStepIndex.value < props.items?.length - 1)
98
+ const hasPrev = computed(() => currentStepIndex.value > 0)
99
+
100
+ defineExpose({
101
+ next() {
102
+ if (hasNext.value) {
103
+ currentStepIndex.value += 1
104
+ emits('next', currentStep.value)
105
+ }
106
+ },
107
+ prev() {
108
+ if (hasPrev.value) {
109
+ currentStepIndex.value -= 1
110
+ emits('prev', currentStep.value)
111
+ }
112
+ },
113
+ hasNext,
114
+ hasPrev
115
+ })
116
+ </script>
117
+
118
+ <template>
119
+ <StepperRoot v-bind="rootProps" v-model="currentStepIndex" :class="ui.root({ class: [props.class, props.ui?.root] })">
120
+ <div :class="ui.header({ class: props.ui?.header })">
121
+ <StepperItem
122
+ v-for="(item, count) in items"
123
+ :key="item.value ?? count"
124
+ :step="count"
125
+ :disabled="item.disabled || props.disabled"
126
+ :class="ui.item({ class: props.ui?.item })"
127
+ >
128
+ <div :class="ui.container({ class: props.ui?.container })">
129
+ <StepperTrigger :class="ui.trigger({ class: props.ui?.trigger })">
130
+ <StepperIndicator :class="ui.indicator({ class: props.ui?.indicator })">
131
+ <slot name="indicator" :item="item">
132
+ <UIcon v-if="item.icon" :name="item.icon" :class="ui.icon({ class: props.ui?.indicator })" />
133
+ <template v-else>
134
+ {{ count + 1 }}
135
+ </template>
136
+ </slot>
137
+ </StepperIndicator>
138
+ </StepperTrigger>
139
+
140
+ <StepperSeparator
141
+ v-if="count < items.length - 1"
142
+ :class="ui.separator({ class: props.ui?.separator })"
143
+ />
144
+ </div>
145
+
146
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })">
147
+ <StepperTitle :class="ui.title({ class: props.ui?.title })">
148
+ <slot name="title" :item="item">
149
+ {{ item.title }}
150
+ </slot>
151
+ </StepperTitle>
152
+ <StepperDescription :class="ui.description({ class: props.ui?.description })">
153
+ <slot name="description" :item="item">
154
+ {{ item.description }}
155
+ </slot>
156
+ </StepperDescription>
157
+ </div>
158
+ </StepperItem>
159
+ </div>
160
+
161
+ <div v-if="currentStep?.content || !!slots.content || (currentStep?.slot && !!slots[currentStep.slot]) || (currentStep?.value && !!slots[currentStep.value])" :class="ui.content({ class: props.ui?.description })">
162
+ <slot
163
+ :name="!!slots[currentStep?.slot ?? currentStep.value!] ? currentStep.slot ?? currentStep.value : 'content'"
164
+ :item="currentStep"
165
+ >
166
+ {{ currentStep?.content }}
167
+ </slot>
168
+ </div>
169
+ </StepperRoot>
170
+ </template>
@@ -1,19 +1,19 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { SwitchRootProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { SwitchRootProps } from 'reka-ui'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/switch'
7
- import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
+ import { tv } from '../utils/tv'
8
8
  import type { PartialString } from '../types/utils'
9
9
 
10
- const appConfig = _appConfig as AppConfig & { ui: { switch: Partial<typeof theme> } }
10
+ const appConfigSwitch = _appConfig as AppConfig & { ui: { switch: Partial<typeof theme> } }
11
11
 
12
- const switchTv = tv({ extend: tv(theme), ...(appConfig.ui?.switch || {}) })
12
+ const switchTv = tv({ extend: tv(theme), ...(appConfigSwitch.ui?.switch || {}) })
13
13
 
14
14
  type SwitchVariants = VariantProps<typeof switchTv>
15
15
 
16
- export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value'> {
16
+ export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'> {
17
17
  /**
18
18
  * The element or component this component should render as.
19
19
  * @defaultValue 'div'
@@ -34,43 +34,40 @@ export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | '
34
34
  uncheckedIcon?: string
35
35
  label?: string
36
36
  description?: string
37
- /** The state of the switch when it is initially rendered. Use when you do not need to control its state. */
38
- defaultValue?: boolean
39
37
  class?: any
40
38
  ui?: PartialString<typeof switchTv.slots>
41
39
  }
42
40
 
43
- export interface SwitchEmits {
44
- (e: 'update:modelValue', payload: boolean): void
45
- (e: 'change', payload: Event): void
41
+ export type SwitchEmits = {
42
+ change: [payload: Event]
46
43
  }
47
44
 
48
45
  export interface SwitchSlots {
49
46
  label(props: { label?: string }): any
50
47
  description(props: { description?: string }): any
51
48
  }
52
-
53
- extendDevtoolsMeta({ defaultProps: { label: 'Switch me!' } })
54
49
  </script>
55
50
 
56
51
  <script setup lang="ts">
57
52
  import { computed, useId } from 'vue'
58
- import { SwitchRoot, SwitchThumb, useForwardProps, Label } from 'radix-vue'
53
+ import { Primitive, SwitchRoot, SwitchThumb, useForwardProps, Label } from 'reka-ui'
59
54
  import { reactivePick } from '@vueuse/core'
60
55
  import { useAppConfig } from '#imports'
61
56
  import { useFormField } from '../composables/useFormField'
62
57
  import UIcon from './Icon.vue'
63
58
 
59
+ defineOptions({ inheritAttrs: false })
60
+
64
61
  const props = defineProps<SwitchProps>()
65
62
  const slots = defineSlots<SwitchSlots>()
66
63
  const emits = defineEmits<SwitchEmits>()
67
64
 
68
- const modelValue = defineModel<boolean | undefined>({ default: undefined })
65
+ const modelValue = defineModel<boolean>({ default: undefined })
69
66
 
70
67
  const appConfig = useAppConfig()
71
- const rootProps = useForwardProps(reactivePick(props, 'as', 'required', 'value'))
68
+ const rootProps = useForwardProps(reactivePick(props, 'required', 'value', 'defaultValue'))
72
69
 
73
- const { id: _id, emitFormChange, emitFormInput, size, color, name, disabled } = useFormField<SwitchProps>(props)
70
+ const { id: _id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField<SwitchProps>(props)
74
71
  const id = _id.value ?? useId()
75
72
 
76
73
  const ui = computed(() => switchTv({
@@ -91,17 +88,16 @@ function onUpdate(value: any) {
91
88
  </script>
92
89
 
93
90
  <template>
94
- <div :class="ui.root({ class: [props.class, props.ui?.root] })">
91
+ <Primitive :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
95
92
  <div :class="ui.container({ class: props.ui?.container })">
96
93
  <SwitchRoot
97
94
  :id="id"
98
- v-model:checked="modelValue"
99
- :default-checked="defaultValue"
100
- v-bind="rootProps"
95
+ v-bind="{ ...rootProps, ...$attrs, ...ariaAttrs }"
96
+ v-model="modelValue"
101
97
  :name="name"
102
98
  :disabled="disabled || loading"
103
99
  :class="ui.base({ class: props.ui?.base })"
104
- @update:checked="onUpdate"
100
+ @update:model-value="onUpdate"
105
101
  >
106
102
  <SwitchThumb :class="ui.thumb({ class: props.ui?.thumb })">
107
103
  <UIcon v-if="loading" :name="loadingIcon || appConfig.ui.icons.loading" :class="ui.icon({ class: props.ui?.icon, checked: true, unchecked: true })" />
@@ -124,5 +120,5 @@ function onUpdate(value: any) {
124
120
  </slot>
125
121
  </p>
126
122
  </div>
127
- </div>
123
+ </Primitive>
128
124
  </template>