@nuxt/ui 3.0.0-alpha.8 → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) 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 +9 -7
  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 +7 -1
  22. package/.nuxt/ui/input-menu.ts +150 -116
  23. package/.nuxt/ui/input-number.ts +235 -0
  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 +171 -0
  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 +127 -96
  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 +49 -31
  42. package/.nuxt/ui/tabs.ts +101 -73
  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 +69 -18
  50. package/cli/commands/{init.mjs → make/component.mjs} +16 -4
  51. package/cli/commands/make/index.mjs +14 -0
  52. package/cli/commands/make/locale.mjs +64 -0
  53. package/cli/index.mjs +2 -2
  54. package/cli/package.json +2 -2
  55. package/cli/templates.mjs +62 -12
  56. package/cli/utils.mjs +14 -0
  57. package/dist/module.cjs +9 -170
  58. package/dist/module.d.cts +5 -15
  59. package/dist/module.d.mts +5 -15
  60. package/dist/module.d.ts +5 -15
  61. package/dist/module.json +2 -2
  62. package/dist/module.mjs +12 -167
  63. package/dist/runtime/components/Accordion.vue +8 -39
  64. package/dist/runtime/components/Alert.vue +25 -21
  65. package/dist/runtime/components/App.vue +15 -15
  66. package/dist/runtime/components/Avatar.vue +33 -21
  67. package/dist/runtime/components/AvatarGroup.vue +5 -7
  68. package/dist/runtime/components/Badge.vue +10 -8
  69. package/dist/runtime/components/Breadcrumb.vue +13 -34
  70. package/dist/runtime/components/Button.vue +5 -8
  71. package/dist/runtime/components/ButtonGroup.vue +5 -7
  72. package/dist/runtime/components/Calendar.vue +194 -0
  73. package/dist/runtime/components/Card.vue +10 -9
  74. package/dist/runtime/components/Carousel.vue +26 -17
  75. package/dist/runtime/components/Checkbox.vue +32 -38
  76. package/dist/runtime/components/Chip.vue +6 -8
  77. package/dist/runtime/components/Collapsible.vue +10 -11
  78. package/dist/runtime/components/ColorPicker.vue +297 -0
  79. package/dist/runtime/components/CommandPalette.vue +114 -98
  80. package/dist/runtime/components/Container.vue +4 -7
  81. package/dist/runtime/components/ContextMenu.vue +16 -69
  82. package/dist/runtime/components/ContextMenuContent.vue +14 -10
  83. package/dist/runtime/components/Drawer.vue +23 -12
  84. package/dist/runtime/components/DropdownMenu.vue +18 -59
  85. package/dist/runtime/components/DropdownMenuContent.vue +14 -10
  86. package/dist/runtime/components/Form.vue +78 -49
  87. package/dist/runtime/components/FormField.vue +28 -15
  88. package/dist/runtime/components/Icon.vue +1 -1
  89. package/dist/runtime/components/Input.vue +15 -7
  90. package/dist/runtime/components/InputMenu.vue +133 -66
  91. package/dist/runtime/components/InputNumber.vue +197 -0
  92. package/dist/runtime/components/Kbd.vue +5 -6
  93. package/dist/runtime/components/Link.vue +24 -13
  94. package/dist/runtime/components/LinkBase.vue +1 -1
  95. package/dist/runtime/components/Modal.vue +56 -34
  96. package/dist/runtime/components/NavigationMenu.vue +129 -112
  97. package/dist/runtime/components/OverlayProvider.vue +28 -0
  98. package/dist/runtime/components/Pagination.vue +18 -14
  99. package/dist/runtime/components/PinInput.vue +95 -0
  100. package/dist/runtime/components/Popover.vue +28 -14
  101. package/dist/runtime/components/Progress.vue +28 -12
  102. package/dist/runtime/components/RadioGroup.vue +9 -12
  103. package/dist/runtime/components/Select.vue +61 -35
  104. package/dist/runtime/components/SelectMenu.vue +201 -130
  105. package/dist/runtime/components/Separator.vue +6 -5
  106. package/dist/runtime/components/Skeleton.vue +4 -7
  107. package/dist/runtime/components/Slideover.vue +56 -33
  108. package/dist/runtime/components/Slider.vue +8 -7
  109. package/dist/runtime/components/Stepper.vue +170 -0
  110. package/dist/runtime/components/Switch.vue +19 -23
  111. package/dist/runtime/components/Table.vue +157 -32
  112. package/dist/runtime/components/Tabs.vue +12 -31
  113. package/dist/runtime/components/Textarea.vue +18 -9
  114. package/dist/runtime/components/Toast.vue +39 -25
  115. package/dist/runtime/components/Toaster.vue +31 -24
  116. package/dist/runtime/components/Tooltip.vue +9 -12
  117. package/dist/runtime/components/Tree.vue +196 -0
  118. package/dist/runtime/composables/defineLocale.d.ts +9 -0
  119. package/dist/runtime/composables/defineLocale.js +4 -0
  120. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  121. package/dist/runtime/composables/defineShortcuts.js +2 -2
  122. package/dist/runtime/composables/useFormField.d.ts +11 -4
  123. package/dist/runtime/composables/useFormField.js +19 -9
  124. package/dist/runtime/composables/useLocale.d.ts +4 -0
  125. package/dist/runtime/composables/useLocale.js +10 -0
  126. package/dist/runtime/composables/useOverlay.d.ts +30 -0
  127. package/dist/runtime/composables/useOverlay.js +70 -0
  128. package/dist/runtime/composables/useToast.d.ts +4 -3
  129. package/dist/runtime/composables/useToast.js +20 -6
  130. package/dist/runtime/index.css +1 -1
  131. package/dist/runtime/keyframes.css +1 -1
  132. package/dist/runtime/locale/ar.d.ts +2 -0
  133. package/dist/runtime/locale/ar.js +55 -0
  134. package/dist/runtime/locale/az.d.ts +2 -0
  135. package/dist/runtime/locale/az.js +54 -0
  136. package/dist/runtime/locale/bn.d.ts +2 -0
  137. package/dist/runtime/locale/bn.js +54 -0
  138. package/dist/runtime/locale/cs.d.ts +2 -0
  139. package/dist/runtime/locale/cs.js +54 -0
  140. package/dist/runtime/locale/da.d.ts +2 -0
  141. package/dist/runtime/locale/da.js +54 -0
  142. package/dist/runtime/locale/de.d.ts +2 -0
  143. package/dist/runtime/locale/de.js +54 -0
  144. package/dist/runtime/locale/el.d.ts +2 -0
  145. package/dist/runtime/locale/el.js +54 -0
  146. package/dist/runtime/locale/en.d.ts +2 -0
  147. package/dist/runtime/locale/en.js +54 -0
  148. package/dist/runtime/locale/es.d.ts +2 -0
  149. package/dist/runtime/locale/es.js +54 -0
  150. package/dist/runtime/locale/et.d.ts +2 -0
  151. package/dist/runtime/locale/et.js +54 -0
  152. package/dist/runtime/locale/fa_ir.d.ts +2 -0
  153. package/dist/runtime/locale/fa_ir.js +55 -0
  154. package/dist/runtime/locale/fi.d.ts +2 -0
  155. package/dist/runtime/locale/fi.js +54 -0
  156. package/dist/runtime/locale/fr.d.ts +2 -0
  157. package/dist/runtime/locale/fr.js +54 -0
  158. package/dist/runtime/locale/he.d.ts +2 -0
  159. package/dist/runtime/locale/he.js +53 -0
  160. package/dist/runtime/locale/hi.d.ts +2 -0
  161. package/dist/runtime/locale/hi.js +54 -0
  162. package/dist/runtime/locale/hu.d.ts +2 -0
  163. package/dist/runtime/locale/hu.js +54 -0
  164. package/dist/runtime/locale/id.d.ts +2 -0
  165. package/dist/runtime/locale/id.js +54 -0
  166. package/dist/runtime/locale/index.d.ts +34 -0
  167. package/dist/runtime/locale/index.js +34 -0
  168. package/dist/runtime/locale/it.d.ts +2 -0
  169. package/dist/runtime/locale/it.js +54 -0
  170. package/dist/runtime/locale/ja.d.ts +2 -0
  171. package/dist/runtime/locale/ja.js +54 -0
  172. package/dist/runtime/locale/km.d.ts +2 -0
  173. package/dist/runtime/locale/km.js +54 -0
  174. package/dist/runtime/locale/ko.d.ts +2 -0
  175. package/dist/runtime/locale/ko.js +54 -0
  176. package/dist/runtime/locale/nb_no.d.ts +2 -0
  177. package/dist/runtime/locale/nb_no.js +54 -0
  178. package/dist/runtime/locale/nl.d.ts +2 -0
  179. package/dist/runtime/locale/nl.js +54 -0
  180. package/dist/runtime/locale/pl.d.ts +2 -0
  181. package/dist/runtime/locale/pl.js +54 -0
  182. package/dist/runtime/locale/pt.d.ts +2 -0
  183. package/dist/runtime/locale/pt.js +54 -0
  184. package/dist/runtime/locale/pt_br.d.ts +2 -0
  185. package/dist/runtime/locale/pt_br.js +54 -0
  186. package/dist/runtime/locale/ru.d.ts +2 -0
  187. package/dist/runtime/locale/ru.js +54 -0
  188. package/dist/runtime/locale/sk.d.ts +2 -0
  189. package/dist/runtime/locale/sk.js +54 -0
  190. package/dist/runtime/locale/sv.d.ts +2 -0
  191. package/dist/runtime/locale/sv.js +54 -0
  192. package/dist/runtime/locale/th.d.ts +2 -0
  193. package/dist/runtime/locale/th.js +54 -0
  194. package/dist/runtime/locale/tr.d.ts +2 -0
  195. package/dist/runtime/locale/tr.js +54 -0
  196. package/dist/runtime/locale/uk.d.ts +2 -0
  197. package/dist/runtime/locale/uk.js +54 -0
  198. package/dist/runtime/locale/vi.d.ts +2 -0
  199. package/dist/runtime/locale/vi.js +54 -0
  200. package/dist/runtime/locale/zh_cn.d.ts +2 -0
  201. package/dist/runtime/locale/zh_cn.js +54 -0
  202. package/dist/runtime/locale/zh_tw.d.ts +2 -0
  203. package/dist/runtime/locale/zh_tw.js +54 -0
  204. package/dist/runtime/plugins/colors.js +8 -5
  205. package/dist/runtime/types/form.d.ts +29 -15
  206. package/dist/runtime/types/form.js +2 -2
  207. package/dist/runtime/types/index.d.ts +8 -0
  208. package/dist/runtime/types/index.js +8 -0
  209. package/dist/runtime/types/locale.d.ts +56 -0
  210. package/dist/runtime/types/locale.js +0 -0
  211. package/dist/runtime/types/utils.d.ts +7 -3
  212. package/dist/runtime/utils/form.d.ts +5 -9
  213. package/dist/runtime/utils/form.js +113 -50
  214. package/dist/runtime/utils/index.d.ts +1 -1
  215. package/dist/runtime/utils/index.js +15 -2
  216. package/dist/runtime/utils/link.d.ts +1 -1
  217. package/dist/runtime/utils/locale.d.ts +15 -0
  218. package/dist/runtime/utils/locale.js +25 -0
  219. package/dist/runtime/utils/tv.d.ts +1 -0
  220. package/dist/runtime/utils/tv.js +4 -0
  221. package/dist/runtime/vue/components/Icon.vue +2 -2
  222. package/dist/runtime/vue/components/Link.vue +87 -23
  223. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  224. package/dist/runtime/vue/composables/useAppConfig.js +2 -0
  225. package/dist/runtime/vue/plugins/head.d.ts +1 -1
  226. package/dist/runtime/vue/plugins/head.js +3 -3
  227. package/dist/runtime/vue/stubs.d.ts +19 -0
  228. package/dist/runtime/vue/stubs.js +37 -0
  229. package/dist/shared/{ui.BufKhDiD.mjs → ui.DSPu6Y8j.mjs} +1071 -409
  230. package/dist/shared/{ui.BU7wzH0D.cjs → ui.DfK2RX6G.cjs} +1074 -409
  231. package/dist/unplugin.cjs +62 -26
  232. package/dist/unplugin.d.cts +17 -3
  233. package/dist/unplugin.d.mts +17 -3
  234. package/dist/unplugin.d.ts +17 -3
  235. package/dist/unplugin.mjs +61 -25
  236. package/dist/vite.cjs +3 -2
  237. package/dist/vite.d.cts +2 -0
  238. package/dist/vite.d.mts +2 -0
  239. package/dist/vite.d.ts +2 -0
  240. package/dist/vite.mjs +3 -2
  241. package/package.json +110 -67
  242. package/dist/chunks/component-meta.cjs +0 -73264
  243. package/dist/chunks/component-meta.mjs +0 -73262
  244. package/dist/client/devtools/200.html +0 -1
  245. package/dist/client/devtools/404.html +0 -1
  246. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  247. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  248. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  249. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  250. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  251. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  252. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  253. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  254. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  255. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  256. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  257. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  258. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  259. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  260. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  261. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  262. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  263. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  264. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  265. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  266. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  267. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  268. package/dist/client/devtools/_nuxt/Bj9hdafK.js +0 -1
  269. package/dist/client/devtools/_nuxt/DM3_wAgz.js +0 -62
  270. package/dist/client/devtools/_nuxt/builds/latest.json +0 -1
  271. package/dist/client/devtools/_nuxt/builds/meta/e6b425f7-b919-4014-915b-0ea07c316790.json +0 -1
  272. package/dist/client/devtools/_nuxt/entry.DaJP-ZMB.css +0 -24
  273. package/dist/client/devtools/_nuxt/error-404.B0Nmv3fV.css +0 -1
  274. package/dist/client/devtools/_nuxt/error-500.C8fgTxVz.css +0 -1
  275. package/dist/client/devtools/_nuxt/hKiujHsR.js +0 -1
  276. package/dist/client/devtools/favicon.svg +0 -1
  277. package/dist/client/devtools/index.html +0 -1
  278. package/dist/devtools/runtime/DevtoolsRenderer.vue +0 -53
  279. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +0 -7
  280. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +0 -8
  281. package/dist/devtools/runtime/examples/CardExample.vue +0 -13
  282. package/dist/devtools/runtime/examples/CarouselExample.vue +0 -13
  283. package/dist/devtools/runtime/examples/ChipExample.vue +0 -5
  284. package/dist/devtools/runtime/examples/CollapsibleExample.vue +0 -8
  285. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +0 -29
  286. package/dist/devtools/runtime/examples/ContainerExample.vue +0 -5
  287. package/dist/devtools/runtime/examples/ContextMenuExample.vue +0 -5
  288. package/dist/devtools/runtime/examples/DrawerExample.vue +0 -8
  289. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +0 -5
  290. package/dist/devtools/runtime/examples/FormExample.vue +0 -30
  291. package/dist/devtools/runtime/examples/FormFieldExample.vue +0 -5
  292. package/dist/devtools/runtime/examples/LinkExample.vue +0 -5
  293. package/dist/devtools/runtime/examples/ModalExample.vue +0 -8
  294. package/dist/devtools/runtime/examples/PopoverExample.vue +0 -8
  295. package/dist/devtools/runtime/examples/SkeletonExample.vue +0 -3
  296. package/dist/devtools/runtime/examples/SlideoverExample.vue +0 -8
  297. package/dist/devtools/runtime/examples/ToasterExample.vue +0 -11
  298. package/dist/devtools/runtime/examples/TooltipExample.vue +0 -5
  299. package/dist/runtime/components/ModalProvider.vue +0 -12
  300. package/dist/runtime/components/SlideoverProvider.vue +0 -12
  301. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +0 -7
  302. package/dist/runtime/composables/extendDevtoolsMeta.js +0 -2
  303. package/dist/runtime/composables/useModal.d.ts +0 -17
  304. package/dist/runtime/composables/useModal.js +0 -46
  305. package/dist/runtime/composables/useSlideover.d.ts +0 -17
  306. package/dist/runtime/composables/useSlideover.js +0 -46
  307. package/dist/runtime/plugins/modal.d.ts +0 -2
  308. package/dist/runtime/plugins/modal.js +0 -10
  309. package/dist/runtime/plugins/slideover.d.ts +0 -2
  310. package/dist/runtime/plugins/slideover.js +0 -10
@@ -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,15 +68,14 @@ 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
+ import { useLocale } from '../composables/useLocale'
78
79
  import UButton from './Button.vue'
79
80
 
80
81
  const props = withDefaults(defineProps<SlideoverProps>(), {
@@ -83,26 +84,32 @@ const props = withDefaults(defineProps<SlideoverProps>(), {
83
84
  overlay: true,
84
85
  transition: true,
85
86
  modal: true,
87
+ dismissible: true,
86
88
  side: 'right'
87
89
  })
88
90
  const emits = defineEmits<SlideoverEmits>()
89
91
  const slots = defineSlots<SlideoverSlots>()
90
92
 
93
+ const { t } = useLocale()
94
+ const appConfig = useAppConfig()
95
+
91
96
  const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'modal'), emits)
92
97
  const contentProps = toRef(() => props.content)
93
98
  const contentEvents = computed(() => {
94
- if (props.preventClose) {
99
+ if (!props.dismissible) {
95
100
  return {
96
101
  pointerDownOutside: (e: Event) => e.preventDefault(),
97
- interactOutside: (e: Event) => e.preventDefault()
102
+ interactOutside: (e: Event) => e.preventDefault(),
103
+ escapeKeyDown: (e: Event) => e.preventDefault(),
104
+ closeAutoFocus: (e: Event) => e.preventDefault()
98
105
  }
99
106
  }
100
107
 
101
- return {}
108
+ return {
109
+ closeAutoFocus: (e: Event) => e.preventDefault()
110
+ }
102
111
  })
103
112
 
104
- const appConfig = useAppConfig()
105
-
106
113
  const ui = computed(() => slideover({
107
114
  transition: props.transition,
108
115
  side: props.side
@@ -111,28 +118,44 @@ const ui = computed(() => slideover({
111
118
 
112
119
  <template>
113
120
  <DialogRoot v-slot="{ open }" v-bind="rootProps">
114
- <DialogTrigger v-if="!!slots.default" as-child>
121
+ <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
115
122
  <slot :open="open" />
116
123
  </DialogTrigger>
117
124
 
118
125
  <DialogPortal :disabled="!portal">
119
126
  <DialogOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
120
127
 
121
- <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
+
122
143
  <slot name="content">
123
144
  <div v-if="!!slots.header || (title || !!slots.title) || (description || !!slots.description) || (close || !!slots.close)" :class="ui.header({ class: props.ui?.header })">
124
145
  <slot name="header">
125
- <DialogTitle v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
126
- <slot name="title">
127
- {{ title }}
128
- </slot>
129
- </DialogTitle>
130
-
131
- <DialogDescription v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
132
- <slot name="description">
133
- {{ description }}
134
- </slot>
135
- </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>
136
159
 
137
160
  <DialogClose as-child>
138
161
  <slot name="close" :ui="ui">
@@ -142,8 +165,8 @@ const ui = computed(() => slideover({
142
165
  size="md"
143
166
  color="neutral"
144
167
  variant="ghost"
145
- aria-label="Close"
146
- v-bind="typeof close === 'object' ? close : undefined"
168
+ :aria-label="t('slideover.close')"
169
+ v-bind="(typeof close === 'object' ? close as Partial<ButtonProps> : {})"
147
170
  :class="ui.close({ class: props.ui?.close })"
148
171
  />
149
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>