@nuxt/ui 3.0.0-alpha.1 → 3.0.0-alpha.10

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 (332) hide show
  1. package/.nuxt/ui/accordion.ts +20 -0
  2. package/.nuxt/ui/alert.ts +242 -0
  3. package/.nuxt/ui/avatar-group.ts +40 -0
  4. package/.nuxt/ui/avatar.ts +42 -0
  5. package/.nuxt/ui/badge.ts +194 -0
  6. package/.nuxt/ui/breadcrumb.ts +45 -0
  7. package/.nuxt/ui/button-group.ts +16 -0
  8. package/.nuxt/ui/button.ts +344 -0
  9. package/.nuxt/ui/calendar.ts +85 -0
  10. package/.nuxt/ui/card.ts +8 -0
  11. package/.nuxt/ui/carousel.ts +41 -0
  12. package/.nuxt/ui/checkbox.ts +105 -0
  13. package/.nuxt/ui/chip.ts +67 -0
  14. package/.nuxt/ui/collapsible.ts +6 -0
  15. package/.nuxt/ui/color-picker.ts +39 -0
  16. package/.nuxt/ui/command-palette.ts +50 -0
  17. package/.nuxt/ui/container.ts +3 -0
  18. package/.nuxt/ui/context-menu.ts +198 -0
  19. package/.nuxt/ui/drawer.ts +55 -0
  20. package/.nuxt/ui/dropdown-menu.ts +199 -0
  21. package/.nuxt/ui/form-field.ts +40 -0
  22. package/.nuxt/ui/form.ts +3 -0
  23. package/.nuxt/ui/index.ts +48 -0
  24. package/.nuxt/ui/input-menu.ts +410 -0
  25. package/.nuxt/ui/input-number.ts +204 -0
  26. package/.nuxt/ui/input.ts +263 -0
  27. package/.nuxt/ui/kbd.ts +19 -0
  28. package/.nuxt/ui/link.ts +15 -0
  29. package/.nuxt/ui/modal.ts +28 -0
  30. package/.nuxt/ui/navigation-menu.ts +390 -0
  31. package/.nuxt/ui/pagination.ts +8 -0
  32. package/.nuxt/ui/pin-input.ts +145 -0
  33. package/.nuxt/ui/popover.ts +6 -0
  34. package/.nuxt/ui/progress.ts +258 -0
  35. package/.nuxt/ui/radio-group.ts +112 -0
  36. package/.nuxt/ui/select-menu.ts +316 -0
  37. package/.nuxt/ui/select.ts +315 -0
  38. package/.nuxt/ui/separator.ts +143 -0
  39. package/.nuxt/ui/skeleton.ts +3 -0
  40. package/.nuxt/ui/slideover.ts +63 -0
  41. package/.nuxt/ui/slider.ts +148 -0
  42. package/.nuxt/ui/stepper.ts +180 -0
  43. package/.nuxt/ui/switch.ts +113 -0
  44. package/.nuxt/ui/table.ts +129 -0
  45. package/.nuxt/ui/tabs.ts +227 -0
  46. package/.nuxt/ui/textarea.ts +263 -0
  47. package/.nuxt/ui/toast.ts +66 -0
  48. package/.nuxt/ui/toaster.ts +75 -0
  49. package/.nuxt/ui/tooltip.ts +9 -0
  50. package/README.md +75 -54
  51. package/cli/commands/{init.mjs → make/component.mjs} +5 -5
  52. package/cli/commands/make/index.mjs +14 -0
  53. package/cli/commands/make/locale.mjs +64 -0
  54. package/cli/index.mjs +2 -2
  55. package/cli/templates.mjs +52 -7
  56. package/cli/utils.mjs +14 -0
  57. package/dist/chunks/component-meta.cjs +82802 -0
  58. package/dist/chunks/component-meta.mjs +82800 -0
  59. package/dist/client/devtools/200.html +1 -0
  60. package/dist/client/devtools/404.html +1 -0
  61. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  62. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  63. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  64. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  65. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  66. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  67. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  68. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  69. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  70. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  71. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  72. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  73. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  74. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  75. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  76. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  77. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  78. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  79. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  80. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  81. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  82. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  83. package/dist/client/devtools/_nuxt/B1fTd_Rf.js +1 -0
  84. package/dist/client/devtools/_nuxt/CSUxkedg.js +1 -0
  85. package/dist/client/devtools/_nuxt/CbRTGpb7.js +1 -0
  86. package/dist/client/devtools/_nuxt/YQTlxbcT.js +53 -0
  87. package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
  88. package/dist/client/devtools/_nuxt/builds/meta/b3465abc-0a92-4ee7-ba6b-e5174891fcc0.json +1 -0
  89. package/dist/client/devtools/_nuxt/entry.DXXceQev.css +1 -0
  90. package/dist/client/devtools/_nuxt/error-404.BJpkZFyY.css +1 -0
  91. package/dist/client/devtools/_nuxt/error-500.D3i9VDlt.css +1 -0
  92. package/dist/client/devtools/favicon.svg +1 -0
  93. package/dist/client/devtools/index.html +1 -0
  94. package/dist/devtools/runtime/DevtoolsRenderer.vue +54 -0
  95. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +7 -0
  96. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +8 -0
  97. package/dist/devtools/runtime/examples/CardExample.vue +13 -0
  98. package/dist/devtools/runtime/examples/CarouselExample.vue +13 -0
  99. package/dist/devtools/runtime/examples/ChipExample.vue +5 -0
  100. package/dist/devtools/runtime/examples/CollapsibleExample.vue +8 -0
  101. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +29 -0
  102. package/dist/devtools/runtime/examples/ContainerExample.vue +5 -0
  103. package/dist/devtools/runtime/examples/ContextMenuExample.vue +5 -0
  104. package/dist/devtools/runtime/examples/DrawerExample.vue +8 -0
  105. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +5 -0
  106. package/dist/devtools/runtime/examples/FormExample.vue +30 -0
  107. package/dist/devtools/runtime/examples/FormFieldExample.vue +5 -0
  108. package/dist/devtools/runtime/examples/LinkExample.vue +5 -0
  109. package/dist/devtools/runtime/examples/ModalExample.vue +8 -0
  110. package/dist/devtools/runtime/examples/PopoverExample.vue +8 -0
  111. package/dist/devtools/runtime/examples/SkeletonExample.vue +3 -0
  112. package/dist/devtools/runtime/examples/SlideoverExample.vue +8 -0
  113. package/dist/devtools/runtime/examples/StepperExample.vue +44 -0
  114. package/dist/devtools/runtime/examples/ToasterExample.vue +11 -0
  115. package/dist/devtools/runtime/examples/TooltipExample.vue +5 -0
  116. package/dist/module.cjs +223 -4
  117. package/dist/module.d.cts +54 -0
  118. package/dist/module.d.mts +38 -7
  119. package/dist/module.d.ts +38 -7
  120. package/dist/module.json +2 -1
  121. package/dist/module.mjs +179 -2568
  122. package/dist/runtime/components/Accordion.vue +49 -8
  123. package/dist/runtime/components/Alert.vue +13 -6
  124. package/dist/runtime/components/App.vue +20 -7
  125. package/dist/runtime/components/Avatar.vue +33 -9
  126. package/dist/runtime/components/AvatarGroup.vue +4 -1
  127. package/dist/runtime/components/Badge.vue +34 -4
  128. package/dist/runtime/components/Breadcrumb.vue +52 -13
  129. package/dist/runtime/components/Button.vue +45 -6
  130. package/dist/runtime/components/ButtonGroup.vue +5 -2
  131. package/dist/runtime/components/Calendar.vue +190 -0
  132. package/dist/runtime/components/Card.vue +4 -1
  133. package/dist/runtime/components/Carousel.vue +322 -0
  134. package/dist/runtime/components/Checkbox.vue +28 -33
  135. package/dist/runtime/components/Chip.vue +9 -2
  136. package/dist/runtime/components/Collapsible.vue +7 -4
  137. package/dist/runtime/components/ColorPicker.vue +265 -0
  138. package/dist/runtime/components/CommandPalette.vue +122 -96
  139. package/dist/runtime/components/Container.vue +4 -1
  140. package/dist/runtime/components/ContextMenu.vue +101 -14
  141. package/dist/runtime/components/ContextMenuContent.vue +48 -18
  142. package/dist/runtime/components/Drawer.vue +22 -11
  143. package/dist/runtime/components/DropdownMenu.vue +91 -16
  144. package/dist/runtime/components/DropdownMenuContent.vue +50 -18
  145. package/dist/runtime/components/Form.vue +49 -32
  146. package/dist/runtime/components/FormField.vue +18 -6
  147. package/dist/runtime/components/Icon.vue +1 -1
  148. package/dist/runtime/components/Input.vue +15 -6
  149. package/dist/runtime/components/InputMenu.vue +152 -65
  150. package/dist/runtime/components/InputNumber.vue +192 -0
  151. package/dist/runtime/components/Kbd.vue +3 -1
  152. package/dist/runtime/components/Link.vue +71 -8
  153. package/dist/runtime/components/LinkBase.vue +10 -7
  154. package/dist/runtime/components/Modal.vue +23 -11
  155. package/dist/runtime/components/NavigationMenu.vue +170 -75
  156. package/dist/runtime/components/Pagination.vue +31 -15
  157. package/dist/runtime/components/PinInput.vue +96 -0
  158. package/dist/runtime/components/Popover.vue +26 -7
  159. package/dist/runtime/components/Progress.vue +25 -8
  160. package/dist/runtime/components/RadioGroup.vue +28 -7
  161. package/dist/runtime/components/Select.vue +79 -32
  162. package/dist/runtime/components/SelectMenu.vue +164 -80
  163. package/dist/runtime/components/Separator.vue +3 -3
  164. package/dist/runtime/components/Skeleton.vue +4 -1
  165. package/dist/runtime/components/Slideover.vue +23 -11
  166. package/dist/runtime/components/Slider.vue +3 -3
  167. package/dist/runtime/components/Stepper.vue +171 -0
  168. package/dist/runtime/components/Switch.vue +16 -16
  169. package/dist/runtime/components/Table.vue +262 -0
  170. package/dist/runtime/components/Tabs.vue +42 -15
  171. package/dist/runtime/components/Textarea.vue +9 -3
  172. package/dist/runtime/components/Toast.vue +13 -5
  173. package/dist/runtime/components/Toaster.vue +31 -16
  174. package/dist/runtime/components/Tooltip.vue +9 -6
  175. package/dist/runtime/composables/defineLocale.d.ts +9 -0
  176. package/dist/runtime/composables/defineLocale.js +4 -0
  177. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  178. package/dist/runtime/composables/defineShortcuts.js +2 -8
  179. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +7 -0
  180. package/dist/runtime/composables/extendDevtoolsMeta.js +2 -0
  181. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  182. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  183. package/dist/runtime/composables/useComponentIcons.d.ts +3 -0
  184. package/dist/runtime/composables/useFormField.d.ts +8 -4
  185. package/dist/runtime/composables/useFormField.js +2 -1
  186. package/dist/runtime/composables/useKbd.d.ts +10 -3
  187. package/dist/runtime/composables/useKbd.js +14 -8
  188. package/dist/runtime/composables/useLocale.d.ts +4 -0
  189. package/dist/runtime/composables/useLocale.js +10 -0
  190. package/dist/runtime/composables/useModal.d.ts +2 -2
  191. package/dist/runtime/composables/useSlideover.d.ts +2 -2
  192. package/dist/runtime/composables/useToast.d.ts +2 -2
  193. package/dist/runtime/index.css +1 -1
  194. package/dist/runtime/keyframes.css +1 -0
  195. package/dist/runtime/locale/ar.d.ts +2 -0
  196. package/dist/runtime/locale/ar.js +53 -0
  197. package/dist/runtime/locale/cs.d.ts +2 -0
  198. package/dist/runtime/locale/cs.js +52 -0
  199. package/dist/runtime/locale/de.d.ts +2 -0
  200. package/dist/runtime/locale/de.js +52 -0
  201. package/dist/runtime/locale/en.d.ts +2 -0
  202. package/dist/runtime/locale/en.js +52 -0
  203. package/dist/runtime/locale/es.d.ts +2 -0
  204. package/dist/runtime/locale/es.js +52 -0
  205. package/dist/runtime/locale/fa_ir.d.ts +2 -0
  206. package/dist/runtime/locale/fa_ir.js +53 -0
  207. package/dist/runtime/locale/fr.d.ts +2 -0
  208. package/dist/runtime/locale/fr.js +52 -0
  209. package/dist/runtime/locale/index.d.ts +19 -0
  210. package/dist/runtime/locale/index.js +19 -0
  211. package/dist/runtime/locale/it.d.ts +2 -0
  212. package/dist/runtime/locale/it.js +52 -0
  213. package/dist/runtime/locale/ja.d.ts +2 -0
  214. package/dist/runtime/locale/ja.js +52 -0
  215. package/dist/runtime/locale/ko.d.ts +2 -0
  216. package/dist/runtime/locale/ko.js +52 -0
  217. package/dist/runtime/locale/nl.d.ts +2 -0
  218. package/dist/runtime/locale/nl.js +52 -0
  219. package/dist/runtime/locale/pl.d.ts +2 -0
  220. package/dist/runtime/locale/pl.js +52 -0
  221. package/dist/runtime/locale/pt.d.ts +2 -0
  222. package/dist/runtime/locale/pt.js +52 -0
  223. package/dist/runtime/locale/pt_br.d.ts +2 -0
  224. package/dist/runtime/locale/pt_br.js +52 -0
  225. package/dist/runtime/locale/ru.d.ts +2 -0
  226. package/dist/runtime/locale/ru.js +52 -0
  227. package/dist/runtime/locale/sk.d.ts +2 -0
  228. package/dist/runtime/locale/sk.js +52 -0
  229. package/dist/runtime/locale/tr.d.ts +2 -0
  230. package/dist/runtime/locale/tr.js +52 -0
  231. package/dist/runtime/locale/zh_hans.d.ts +2 -0
  232. package/dist/runtime/locale/zh_hans.js +52 -0
  233. package/dist/runtime/locale/zh_hant.d.ts +2 -0
  234. package/dist/runtime/locale/zh_hant.js +52 -0
  235. package/dist/runtime/plugins/colors.js +12 -8
  236. package/dist/runtime/types/form.d.ts +9 -2
  237. package/dist/runtime/types/index.d.ts +50 -42
  238. package/dist/runtime/types/index.js +8 -0
  239. package/dist/runtime/types/locale.d.ts +54 -0
  240. package/dist/runtime/types/utils.d.ts +8 -3
  241. package/dist/runtime/utils/form.d.ts +7 -5
  242. package/dist/runtime/utils/form.js +117 -28
  243. package/dist/runtime/utils/index.d.ts +2 -1
  244. package/dist/runtime/utils/index.js +16 -0
  245. package/dist/runtime/utils/link.d.ts +5 -3
  246. package/dist/runtime/utils/link.js +1 -1
  247. package/dist/runtime/utils/locale.d.ts +15 -0
  248. package/dist/runtime/utils/locale.js +25 -0
  249. package/dist/runtime/vue/components/Icon.vue +15 -0
  250. package/dist/runtime/vue/components/Link.vue +208 -0
  251. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  252. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  253. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  254. package/dist/runtime/vue/plugins/head.js +6 -0
  255. package/dist/runtime/vue/stubs.d.ts +15 -0
  256. package/dist/runtime/vue/stubs.js +27 -0
  257. package/dist/shared/ui.CwmIkD_Y.cjs +3269 -0
  258. package/dist/shared/ui.D_93iuwH.mjs +3262 -0
  259. package/dist/unplugin.cjs +192 -0
  260. package/dist/unplugin.d.cts +49 -0
  261. package/dist/unplugin.d.mts +49 -0
  262. package/dist/unplugin.d.ts +49 -0
  263. package/dist/unplugin.mjs +181 -0
  264. package/dist/vite.cjs +22 -0
  265. package/dist/vite.d.cts +13 -0
  266. package/dist/vite.d.mts +13 -0
  267. package/dist/vite.d.ts +13 -0
  268. package/dist/vite.mjs +20 -0
  269. package/package.json +98 -31
  270. package/vue-plugin.d.ts +5 -0
  271. package/cli/node_modules/.ignored/citty/LICENSE +0 -36
  272. package/cli/node_modules/.ignored/citty/README.md +0 -134
  273. package/cli/node_modules/.ignored/citty/dist/index.cjs +0 -475
  274. package/cli/node_modules/.ignored/citty/dist/index.d.cts +0 -80
  275. package/cli/node_modules/.ignored/citty/dist/index.d.mts +0 -80
  276. package/cli/node_modules/.ignored/citty/dist/index.d.ts +0 -80
  277. package/cli/node_modules/.ignored/citty/dist/index.mjs +0 -463
  278. package/cli/node_modules/.ignored/citty/package.json +0 -49
  279. package/cli/node_modules/.ignored/consola/LICENSE +0 -47
  280. package/cli/node_modules/.ignored/consola/README.md +0 -318
  281. package/cli/node_modules/.ignored/consola/core.d.ts +0 -1
  282. package/cli/node_modules/.ignored/consola/dist/basic.cjs +0 -32
  283. package/cli/node_modules/.ignored/consola/dist/basic.d.ts +0 -9
  284. package/cli/node_modules/.ignored/consola/dist/basic.mjs +0 -24
  285. package/cli/node_modules/.ignored/consola/dist/browser.cjs +0 -80
  286. package/cli/node_modules/.ignored/consola/dist/browser.d.ts +0 -7
  287. package/cli/node_modules/.ignored/consola/dist/browser.mjs +0 -72
  288. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.cjs +0 -436
  289. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.mjs +0 -429
  290. package/cli/node_modules/.ignored/consola/dist/core.cjs +0 -415
  291. package/cli/node_modules/.ignored/consola/dist/core.d.ts +0 -124
  292. package/cli/node_modules/.ignored/consola/dist/core.mjs +0 -410
  293. package/cli/node_modules/.ignored/consola/dist/index.cjs +0 -21
  294. package/cli/node_modules/.ignored/consola/dist/index.d.ts +0 -9
  295. package/cli/node_modules/.ignored/consola/dist/index.mjs +0 -8
  296. package/cli/node_modules/.ignored/consola/dist/shared/consola.06ad8a64.mjs +0 -62
  297. package/cli/node_modules/.ignored/consola/dist/shared/consola.36c0034f.mjs +0 -636
  298. package/cli/node_modules/.ignored/consola/dist/shared/consola.4bbae468.cjs +0 -645
  299. package/cli/node_modules/.ignored/consola/dist/shared/consola.deac7d5a.cjs +0 -65
  300. package/cli/node_modules/.ignored/consola/dist/utils.cjs +0 -308
  301. package/cli/node_modules/.ignored/consola/dist/utils.d.ts +0 -169
  302. package/cli/node_modules/.ignored/consola/dist/utils.mjs +0 -284
  303. package/cli/node_modules/.ignored/consola/lib/index.cjs +0 -9
  304. package/cli/node_modules/.ignored/consola/package.json +0 -101
  305. package/cli/node_modules/.ignored/consola/utils.d.ts +0 -1
  306. package/cli/node_modules/.ignored/pathe/LICENSE +0 -44
  307. package/cli/node_modules/.ignored/pathe/README.md +0 -69
  308. package/cli/node_modules/.ignored/pathe/dist/index.cjs +0 -23
  309. package/cli/node_modules/.ignored/pathe/dist/index.d.cts +0 -36
  310. package/cli/node_modules/.ignored/pathe/dist/index.d.mts +0 -36
  311. package/cli/node_modules/.ignored/pathe/dist/index.d.ts +0 -36
  312. package/cli/node_modules/.ignored/pathe/dist/index.mjs +0 -1
  313. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.1f0a373c.cjs +0 -238
  314. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.ff20891b.mjs +0 -221
  315. package/cli/node_modules/.ignored/pathe/dist/utils.cjs +0 -58
  316. package/cli/node_modules/.ignored/pathe/dist/utils.d.cts +0 -5
  317. package/cli/node_modules/.ignored/pathe/dist/utils.d.mts +0 -5
  318. package/cli/node_modules/.ignored/pathe/dist/utils.d.ts +0 -5
  319. package/cli/node_modules/.ignored/pathe/dist/utils.mjs +0 -54
  320. package/cli/node_modules/.ignored/pathe/package.json +0 -48
  321. package/cli/node_modules/.ignored/pathe/utils.d.ts +0 -1
  322. package/cli/node_modules/.ignored/scule/LICENSE +0 -21
  323. package/cli/node_modules/.ignored/scule/README.md +0 -149
  324. package/cli/node_modules/.ignored/scule/dist/index.cjs +0 -92
  325. package/cli/node_modules/.ignored/scule/dist/index.d.cts +0 -57
  326. package/cli/node_modules/.ignored/scule/dist/index.d.mts +0 -57
  327. package/cli/node_modules/.ignored/scule/dist/index.d.ts +0 -57
  328. package/cli/node_modules/.ignored/scule/dist/index.mjs +0 -80
  329. package/cli/node_modules/.ignored/scule/package.json +0 -43
  330. package/cli/node_modules/.package-lock.json +0 -33
  331. package/dist/runtime/types/component.d.ts +0 -17
  332. /package/dist/runtime/types/{component.js → locale.js} +0 -0
@@ -1,16 +1,17 @@
1
1
  <script lang="ts">
2
2
  import { tv } from 'tailwind-variants'
3
- import type { AccordionRootProps, AccordionRootEmits, AccordionItemProps } from 'radix-vue'
3
+ import type { AccordionRootProps, AccordionRootEmits } 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/accordion'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
8
  import type { DynamicSlots } from '../types/utils'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { accordion: Partial<typeof theme> } }
10
11
 
11
12
  const accordion = tv({ extend: tv(theme), ...(appConfig.ui?.accordion || {}) })
12
13
 
13
- export interface AccordionItem extends Pick<AccordionItemProps, 'disabled'> {
14
+ export interface AccordionItem {
14
15
  label?: string
15
16
  icon?: string
16
17
  trailingIcon?: string
@@ -18,9 +19,10 @@ export interface AccordionItem extends Pick<AccordionItemProps, 'disabled'> {
18
19
  content?: string
19
20
  /** A unique value for the accordion item. Defaults to the index. */
20
21
  value?: string
22
+ disabled?: boolean
21
23
  }
22
24
 
23
- export interface AccordionProps<T> extends Pick<AccordionRootProps, 'collapsible' | 'defaultValue' | 'modelValue' | 'type' | 'disabled'> {
25
+ export interface AccordionProps<T> extends Pick<AccordionRootProps, 'collapsible' | 'defaultValue' | 'modelValue' | 'type' | 'disabled' | 'unmountOnHide'> {
24
26
  /**
25
27
  * The element or component this component should render as.
26
28
  * @defaultValue 'div'
@@ -32,6 +34,11 @@ export interface AccordionProps<T> extends Pick<AccordionRootProps, 'collapsible
32
34
  * @defaultValue appConfig.ui.icons.chevronDown
33
35
  */
34
36
  trailingIcon?: string
37
+ /**
38
+ * The key used to get the label from the item.
39
+ * @defaultValue 'label'
40
+ */
41
+ labelKey?: string
35
42
  class?: any
36
43
  ui?: Partial<typeof accordion.slots>
37
44
  }
@@ -47,23 +54,57 @@ export type AccordionSlots<T extends { slot?: string }> = {
47
54
  content: SlotProps<T>
48
55
  body: SlotProps<T>
49
56
  } & DynamicSlots<T, SlotProps<T>>
57
+
58
+ extendDevtoolsMeta({
59
+ defaultProps: {
60
+ items: [{
61
+ label: 'Getting Started',
62
+ icon: 'i-lucide-info',
63
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.'
64
+ }, {
65
+ label: 'Installation',
66
+ icon: 'i-lucide-download',
67
+ disabled: true,
68
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.'
69
+ }, {
70
+ label: 'Theming',
71
+ icon: 'i-lucide-pipette',
72
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.'
73
+ }, {
74
+ label: 'Layouts',
75
+ icon: 'i-lucide-layout-dashboard',
76
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.'
77
+ }, {
78
+ label: 'Components',
79
+ icon: 'i-lucide-layers-3',
80
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.'
81
+ }, {
82
+ label: 'Utilities',
83
+ icon: 'i-lucide-wrench',
84
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.'
85
+ }]
86
+ }
87
+ })
50
88
  </script>
51
89
 
52
90
  <script setup lang="ts" generic="T extends AccordionItem">
53
91
  import { computed } from 'vue'
54
- import { AccordionRoot, AccordionItem, AccordionHeader, AccordionTrigger, AccordionContent, useForwardPropsEmits } from 'radix-vue'
92
+ import { AccordionRoot, AccordionItem, AccordionHeader, AccordionTrigger, AccordionContent, useForwardPropsEmits } from 'reka-ui'
55
93
  import { reactivePick } from '@vueuse/core'
56
94
  import { useAppConfig } from '#imports'
95
+ import { get } from '../utils'
96
+ import UIcon from './Icon.vue'
57
97
 
58
98
  const props = withDefaults(defineProps<AccordionProps<T>>(), {
59
99
  type: 'single',
60
- collapsible: true
100
+ collapsible: true,
101
+ labelKey: 'label'
61
102
  })
62
103
  const emits = defineEmits<AccordionEmits>()
63
104
  const slots = defineSlots<AccordionSlots<T>>()
64
105
 
65
106
  const appConfig = useAppConfig()
66
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'collapsible', 'defaultValue', 'disabled', 'modelValue', 'type'), emits)
107
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'collapsible', 'defaultValue', 'disabled', 'modelValue', 'type', 'unmountOnHide'), emits)
67
108
 
68
109
  const ui = computed(() => accordion({
69
110
  disabled: props.disabled
@@ -86,8 +127,8 @@ const ui = computed(() => accordion({
86
127
  <UIcon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
87
128
  </slot>
88
129
 
89
- <span v-if="item.label || !!slots.default" :class="ui.label({ class: props.ui?.label })">
90
- <slot :item="item" :index="index" :open="open">{{ item.label }}</slot>
130
+ <span v-if="get(item, props.labelKey as string) || !!slots.default" :class="ui.label({ class: props.ui?.label })">
131
+ <slot :item="item" :index="index" :open="open">{{ get(item, props.labelKey as string) }}</slot>
91
132
  </span>
92
133
 
93
134
  <slot name="trailing" :item="item" :index="index" :open="open">
@@ -3,6 +3,7 @@ import { tv, type VariantProps } from 'tailwind-variants'
3
3
  import type { AppConfig } from '@nuxt/schema'
4
4
  import _appConfig from '#build/app.config'
5
5
  import theme from '#build/ui/alert'
6
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
7
  import type { AvatarProps, ButtonProps } from '../types'
7
8
 
8
9
  const appConfig = _appConfig as AppConfig & { ui: { alert: Partial<typeof theme> } }
@@ -27,11 +28,12 @@ export interface AlertProps {
27
28
  * Display a list of actions:
28
29
  * - under the title and description if multiline
29
30
  * - next to the close button if not multiline
31
+ * `{ size: 'xs' }`{lang="ts-type"}
30
32
  */
31
33
  actions?: ButtonProps[]
32
34
  /**
33
35
  * Display a close button to dismiss the alert.
34
- * `{ size: 'md', color: 'gray', variant: 'link' }`{lang="ts-type"}
36
+ * `{ size: 'md', color: 'neutral', variant: 'link' }`{lang="ts-type"}
35
37
  * @emits `close`
36
38
  * @defaultValue false
37
39
  */
@@ -46,7 +48,7 @@ export interface AlertProps {
46
48
  }
47
49
 
48
50
  export interface AlertEmits {
49
- (e: 'close'): void
51
+ (e: 'update:open', value: boolean): void
50
52
  }
51
53
 
52
54
  export interface AlertSlots {
@@ -56,19 +58,24 @@ export interface AlertSlots {
56
58
  actions(props?: {}): any
57
59
  close(props: { ui: any }): any
58
60
  }
61
+
62
+ extendDevtoolsMeta<AlertProps>({ defaultProps: { title: 'Heads up!' } })
59
63
  </script>
60
64
 
61
65
  <script setup lang="ts">
62
66
  import { computed } from 'vue'
63
- import { Primitive } from 'radix-vue'
67
+ import { Primitive } from 'reka-ui'
64
68
  import { useAppConfig } from '#imports'
69
+ import { useLocale } from '../composables/useLocale'
65
70
  import UIcon from './Icon.vue'
66
71
  import UAvatar from './Avatar.vue'
72
+ import UButton from './Button.vue'
67
73
 
68
74
  const props = defineProps<AlertProps>()
69
75
  const emits = defineEmits<AlertEmits>()
70
76
  const slots = defineSlots<AlertSlots>()
71
77
 
78
+ const { t } = useLocale()
72
79
  const appConfig = useAppConfig()
73
80
 
74
81
  const multiline = computed(() => !!props.title && !!props.description)
@@ -117,12 +124,12 @@ const ui = computed(() => alert({
117
124
  v-if="close"
118
125
  :icon="closeIcon || appConfig.ui.icons.close"
119
126
  size="md"
120
- color="gray"
127
+ color="neutral"
121
128
  variant="link"
122
- aria-label="Close"
129
+ :aria-label="t('alert.close')"
123
130
  v-bind="typeof close === 'object' ? close : undefined"
124
131
  :class="ui.close({ class: props.ui?.close })"
125
- @click="emits('close')"
132
+ @click="emits('update:open', false)"
126
133
  />
127
134
  </slot>
128
135
  </div>
@@ -1,20 +1,29 @@
1
1
  <script lang="ts">
2
- import type { ConfigProviderProps, TooltipProviderProps } from 'radix-vue'
3
- import type { ToasterProps } from '../types'
2
+ import type { ConfigProviderProps, TooltipProviderProps } from 'reka-ui'
3
+ import { localeContextInjectionKey } from '../composables/useLocale'
4
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
5
+ import type { ToasterProps, Locale } from '../types'
4
6
 
5
- export interface AppProps extends Omit<ConfigProviderProps, 'useId'> {
7
+ export interface AppProps extends Omit<ConfigProviderProps, 'useId' | 'dir' | 'locale'> {
6
8
  tooltip?: TooltipProviderProps
7
9
  toaster?: ToasterProps | null
10
+ locale?: Locale
8
11
  }
9
12
 
10
13
  export interface AppSlots {
11
14
  default(props?: {}): any
12
15
  }
16
+
17
+ export default {
18
+ name: 'App'
19
+ }
20
+
21
+ extendDevtoolsMeta({ ignore: true })
13
22
  </script>
14
23
 
15
24
  <script setup lang="ts">
16
- import { toRef, useId } from 'vue'
17
- import { ConfigProvider, TooltipProvider, useForwardProps } from 'radix-vue'
25
+ import { toRef, useId, provide } from 'vue'
26
+ import { ConfigProvider, TooltipProvider, useForwardProps } from 'reka-ui'
18
27
  import { reactivePick } from '@vueuse/core'
19
28
  import UToaster from './Toaster.vue'
20
29
  import UModalProvider from './ModalProvider.vue'
@@ -23,17 +32,21 @@ import USlideoverProvider from './SlideoverProvider.vue'
23
32
  const props = defineProps<AppProps>()
24
33
  defineSlots<AppSlots>()
25
34
 
26
- const configProviderProps = useForwardProps(reactivePick(props, 'dir', 'scrollBody'))
35
+ const configProviderProps = useForwardProps(reactivePick(props, 'scrollBody'))
27
36
  const tooltipProps = toRef(() => props.tooltip)
28
37
  const toasterProps = toRef(() => props.toaster)
38
+
39
+ const locale = toRef(() => props.locale)
40
+ provide(localeContextInjectionKey, locale)
29
41
  </script>
30
42
 
31
43
  <template>
32
- <ConfigProvider :use-id="() => (useId() as string)" v-bind="configProviderProps">
44
+ <ConfigProvider :use-id="() => (useId() as string)" :dir="locale?.dir" :locale="locale?.code" v-bind="configProviderProps">
33
45
  <TooltipProvider v-bind="tooltipProps">
34
46
  <UToaster v-if="toaster !== null" v-bind="toasterProps">
35
47
  <slot />
36
48
  </UToaster>
49
+ <slot v-else />
37
50
  </TooltipProvider>
38
51
 
39
52
  <UModalProvider />
@@ -1,7 +1,8 @@
1
1
  <script lang="ts">
2
2
  import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { AvatarFallbackProps } from 'radix-vue'
3
+ import type { AvatarFallbackProps } from 'reka-ui'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
5
6
  import _appConfig from '#build/app.config'
6
7
  import theme from '#build/ui/avatar'
7
8
 
@@ -14,9 +15,9 @@ type AvatarVariants = VariantProps<typeof avatar>
14
15
  export interface AvatarProps extends Pick<AvatarFallbackProps, 'delayMs'> {
15
16
  /**
16
17
  * The element or component this component should render as.
17
- * @defaultValue 'img'
18
+ * @defaultValue 'span'
18
19
  */
19
- as?: string | object
20
+ as?: any
20
21
  src?: string
21
22
  alt?: string
22
23
  icon?: string
@@ -25,18 +26,25 @@ export interface AvatarProps extends Pick<AvatarFallbackProps, 'delayMs'> {
25
26
  class?: any
26
27
  ui?: Partial<typeof avatar.slots>
27
28
  }
29
+
30
+ export interface AvatarSlots {
31
+ default(props?: {}): any
32
+ }
33
+
34
+ extendDevtoolsMeta<AvatarProps>({ defaultProps: { src: 'https://avatars.githubusercontent.com/u/739984?v=4', alt: 'Benjamin Canac' } })
28
35
  </script>
29
36
 
30
37
  <script setup lang="ts">
31
38
  import { computed } from 'vue'
32
- import { AvatarRoot, AvatarImage, AvatarFallback, useForwardProps } from 'radix-vue'
39
+ import { AvatarRoot, AvatarImage, AvatarFallback, useForwardProps } from 'reka-ui'
33
40
  import { reactivePick } from '@vueuse/core'
34
41
  import { useAvatarGroup } from '../composables/useAvatarGroup'
35
42
  import UIcon from './Icon.vue'
43
+ import ImageComponent from '#build/ui-image-component'
36
44
 
37
45
  defineOptions({ inheritAttrs: false })
38
46
 
39
- const props = defineProps<AvatarProps>()
47
+ const props = withDefaults(defineProps<AvatarProps>(), { as: 'span' })
40
48
 
41
49
  const fallbackProps = useForwardProps(reactivePick(props, 'delayMs'))
42
50
 
@@ -48,22 +56,38 @@ const { size } = useAvatarGroup(props)
48
56
  const ui = computed(() => avatar({
49
57
  size: size.value
50
58
  }))
59
+
60
+ const sizePx = computed(() => ({
61
+ '3xs': 16,
62
+ '2xs': 20,
63
+ 'xs': 24,
64
+ 'sm': 28,
65
+ 'md': 32,
66
+ 'lg': 36,
67
+ 'xl': 40,
68
+ '2xl': 44,
69
+ '3xl': 48
70
+ })[props.size || 'md'])
51
71
  </script>
52
72
 
53
73
  <template>
54
- <AvatarRoot :class="ui.root({ class: [props.class, props.ui?.root] })">
74
+ <AvatarRoot :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
55
75
  <AvatarImage
56
76
  v-if="src"
57
- :as="as"
77
+ :as="ImageComponent"
58
78
  :src="src"
59
79
  :alt="alt"
80
+ :width="sizePx"
81
+ :height="sizePx"
60
82
  v-bind="$attrs"
61
83
  :class="ui.image({ class: props.ui?.image })"
62
84
  />
63
85
 
64
86
  <AvatarFallback as-child v-bind="fallbackProps">
65
- <UIcon v-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
66
- <span v-else :class="ui.fallback({ class: props.ui?.fallback })">{{ fallback }}</span>
87
+ <slot>
88
+ <UIcon v-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
89
+ <span v-else :class="ui.fallback({ class: props.ui?.fallback })">{{ fallback }}</span>
90
+ </slot>
67
91
  </AvatarFallback>
68
92
  </AvatarRoot>
69
93
  </template>
@@ -3,6 +3,7 @@ import { tv, type VariantProps } from 'tailwind-variants'
3
3
  import type { AppConfig } from '@nuxt/schema'
4
4
  import _appConfig from '#build/app.config'
5
5
  import theme from '#build/ui/avatar-group'
6
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
7
 
7
8
  const appConfig = _appConfig as AppConfig & { ui: { avatarGroup: Partial<typeof theme> } }
8
9
 
@@ -28,11 +29,13 @@ export interface AvatarGroupProps {
28
29
  export interface AvatarGroupSlots {
29
30
  default(props?: {}): any
30
31
  }
32
+
33
+ extendDevtoolsMeta({ example: 'AvatarGroupExample' })
31
34
  </script>
32
35
 
33
36
  <script setup lang="ts">
34
37
  import { computed, provide } from 'vue'
35
- import { Primitive } from 'radix-vue'
38
+ import { Primitive } from 'reka-ui'
36
39
  import { avatarGroupInjectionKey } from '../composables/useAvatarGroup'
37
40
  import UAvatar from './Avatar.vue'
38
41
 
@@ -3,6 +3,9 @@ import { tv, type VariantProps } from 'tailwind-variants'
3
3
  import type { AppConfig } from '@nuxt/schema'
4
4
  import _appConfig from '#build/app.config'
5
5
  import theme from '#build/ui/badge'
6
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
+ import type { AvatarProps } from '../types'
6
9
 
7
10
  const appConfig = _appConfig as AppConfig & { ui: { badge: Partial<typeof theme> } }
8
11
 
@@ -10,7 +13,7 @@ const badge = tv({ extend: tv(theme), ...(appConfig.ui?.badge || {}) })
10
13
 
11
14
  type BadgeVariants = VariantProps<typeof badge>
12
15
 
13
- export interface BadgeProps {
16
+ export interface BadgeProps extends Omit<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
14
17
  /**
15
18
  * The element or component this component should render as.
16
19
  * @defaultValue 'span'
@@ -21,26 +24,53 @@ export interface BadgeProps {
21
24
  variant?: BadgeVariants['variant']
22
25
  size?: BadgeVariants['size']
23
26
  class?: any
27
+ ui?: Partial<typeof badge.slots>
24
28
  }
25
29
 
26
30
  export interface BadgeSlots {
31
+ leading(props?: {}): any
27
32
  default(props?: {}): any
33
+ trailing(props?: {}): any
28
34
  }
29
35
  </script>
30
36
 
31
37
  <script setup lang="ts">
32
- import { Primitive } from 'radix-vue'
38
+ import { computed } from 'vue'
39
+ import { Primitive } from 'reka-ui'
40
+ import { useComponentIcons } from '../composables/useComponentIcons'
41
+ import UIcon from './Icon.vue'
33
42
 
34
43
  const props = withDefaults(defineProps<BadgeProps>(), {
35
44
  as: 'span'
36
45
  })
37
46
  defineSlots<BadgeSlots>()
47
+
48
+ const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props)
49
+
50
+ const ui = computed(() => badge({
51
+ color: props.color,
52
+ variant: props.variant,
53
+ size: props.size
54
+ }))
55
+
56
+ extendDevtoolsMeta({ defaultProps: { label: 'Badge' } })
38
57
  </script>
39
58
 
40
59
  <template>
41
- <Primitive :as="as" :class="badge({ color, variant, size, class: props.class })">
60
+ <Primitive :as="as" :class="ui.base({ class: [props.class, props.ui?.base] })">
61
+ <slot name="leading">
62
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
63
+ <UAvatar v-else-if="!!avatar" :size="((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
64
+ </slot>
65
+
42
66
  <slot>
43
- {{ label }}
67
+ <span v-if="label" :class="ui.label({ class: props.ui?.label })">
68
+ {{ label }}
69
+ </span>
70
+ </slot>
71
+
72
+ <slot name="trailing">
73
+ <UIcon v-if="isTrailing && trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
44
74
  </slot>
45
75
  </Primitive>
46
76
  </template>
@@ -3,8 +3,9 @@ import { tv } from 'tailwind-variants'
3
3
  import type { AppConfig } from '@nuxt/schema'
4
4
  import _appConfig from '#build/app.config'
5
5
  import theme from '#build/ui/breadcrumb'
6
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
7
  import type { AvatarProps, LinkProps } from '../types'
7
- import type { DynamicSlots } from '../types/utils'
8
+ import type { DynamicSlots, PartialString } from '../types/utils'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { breadcrumb: Partial<typeof theme> } }
10
11
 
@@ -20,7 +21,7 @@ export interface BreadcrumbItem extends Omit<LinkProps, 'raw' | 'custom'> {
20
21
  export interface BreadcrumbProps<T> {
21
22
  /**
22
23
  * The element or component this component should render as.
23
- * @defaultValue 'div'
24
+ * @defaultValue 'nav'
24
25
  */
25
26
  as?: any
26
27
  items?: T[]
@@ -29,8 +30,13 @@ export interface BreadcrumbProps<T> {
29
30
  * @defaultValue appConfig.ui.icons.chevronRight
30
31
  */
31
32
  separatorIcon?: string
33
+ /**
34
+ * The key used to get the label from the item.
35
+ * @defaultValue 'label'
36
+ */
37
+ labelKey?: string
32
38
  class?: any
33
- ui?: Partial<typeof breadcrumb.slots>
39
+ ui?: PartialString<typeof breadcrumb.slots>
34
40
  }
35
41
 
36
42
  type SlotProps<T> = (props: { item: T, index: number, active?: boolean }) => any
@@ -42,22 +48,55 @@ export type BreadcrumbSlots<T extends { slot?: string }> = {
42
48
  'item-trailing': SlotProps<T>
43
49
  'separator'(props?: {}): any
44
50
  } & DynamicSlots<T, SlotProps<T>>
51
+
52
+ extendDevtoolsMeta({
53
+ defaultProps: {
54
+ items: [
55
+ { label: 'Home', to: '/' },
56
+ {
57
+ slot: 'dropdown',
58
+ icon: 'i-lucide-ellipsis',
59
+ children: [{
60
+ label: 'Documentation'
61
+ }, {
62
+ label: 'Themes'
63
+ }, {
64
+ label: 'GitHub'
65
+ }]
66
+ }, {
67
+ label: 'Components',
68
+ disabled: true
69
+ }, {
70
+ label: 'Breadcrumb',
71
+ to: '/components/breadcrumb'
72
+ }
73
+ ]
74
+ }
75
+ })
45
76
  </script>
46
77
 
47
78
  <script setup lang="ts" generic="T extends BreadcrumbItem">
48
- import { Primitive } from 'radix-vue'
79
+ import { computed } from 'vue'
80
+ import { Primitive } from 'reka-ui'
49
81
  import { useAppConfig } from '#imports'
82
+ import { useLocale } from '../composables/useLocale'
83
+ import { get } from '../utils'
84
+ import { pickLinkProps } from '../utils/link'
50
85
  import UIcon from './Icon.vue'
51
86
  import UAvatar from './Avatar.vue'
52
87
  import ULinkBase from './LinkBase.vue'
53
88
  import ULink from './Link.vue'
54
- import { pickLinkProps } from '../utils/link'
55
89
 
56
- const props = defineProps<BreadcrumbProps<T>>()
90
+ const props = withDefaults(defineProps<BreadcrumbProps<T>>(), {
91
+ as: 'nav',
92
+ labelKey: 'label'
93
+ })
57
94
  const slots = defineSlots<BreadcrumbSlots<T>>()
58
-
95
+ const { dir } = useLocale()
59
96
  const appConfig = useAppConfig()
60
97
 
98
+ const separatorIcon = computed(() => props.separatorIcon || (dir.value === 'rtl' ? appConfig.ui.icons.chevronLeft : appConfig.ui.icons.chevronRight))
99
+
61
100
  // eslint-disable-next-line vue/no-dupe-keys
62
101
  const ui = breadcrumb()
63
102
  </script>
@@ -71,13 +110,13 @@ const ui = breadcrumb()
71
110
  <ULinkBase v-bind="slotProps" as="span" :aria-current="active && (index === items!.length - 1) ? 'page' : undefined" :class="ui.link({ class: [props.ui?.link, item.class], active: index === items!.length - 1, disabled: !!item.disabled, to: !!item.to })">
72
111
  <slot :name="item.slot || 'item'" :item="item" :index="index">
73
112
  <slot :name="item.slot ? `${item.slot}-leading`: 'item-leading'" :item="item" :active="index === items!.length - 1" :index="index">
74
- <UAvatar v-if="item.avatar" :size="((props.ui?.linkLeadingAvatarSize || ui.linkLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.linkLeadingAvatar({ class: props.ui?.linkLeadingAvatar, active: index === items!.length - 1 })" />
75
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.linkLeadingIcon({ class: props.ui?.linkLeadingIcon, active: index === items!.length - 1 })" />
113
+ <UIcon v-if="item.icon" :name="item.icon" :class="ui.linkLeadingIcon({ class: props.ui?.linkLeadingIcon, active: index === items!.length - 1 })" />
114
+ <UAvatar v-else-if="item.avatar" :size="((props.ui?.linkLeadingAvatarSize || ui.linkLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.linkLeadingAvatar({ class: props.ui?.linkLeadingAvatar, active: index === items!.length - 1 })" />
76
115
  </slot>
77
116
 
78
- <span v-if="item.label || !!slots[item.slot ? `${item.slot}-label`: 'item-label']" :class="ui.linkLabel({ class: props.ui?.linkLabel })">
117
+ <span v-if="get(item, props.labelKey as string) || !!slots[item.slot ? `${item.slot}-label`: 'item-label']" :class="ui.linkLabel({ class: props.ui?.linkLabel })">
79
118
  <slot :name="item.slot ? `${item.slot}-label`: 'item-label'" :item="item" :active="index === items!.length - 1" :index="index">
80
- {{ item.label }}
119
+ {{ get(item, props.labelKey as string) }}
81
120
  </slot>
82
121
  </span>
83
122
 
@@ -87,9 +126,9 @@ const ui = breadcrumb()
87
126
  </ULink>
88
127
  </li>
89
128
 
90
- <li v-if="index < items!.length - 1" role="presentation" :class="ui.separator({ class: props.ui?.separator })">
129
+ <li v-if="index < items!.length - 1" role="presentation" aria-hidden="true" :class="ui.separator({ class: props.ui?.separator })">
91
130
  <slot name="separator">
92
- <UIcon :name="separatorIcon || appConfig.ui.icons.chevronRight" :class="ui.separatorIcon({ class: props.ui?.separatorIcon })" />
131
+ <UIcon :name="separatorIcon" :class="ui.separatorIcon({ class: props.ui?.separatorIcon })" />
93
132
  </slot>
94
133
  </li>
95
134
  </template>
@@ -5,6 +5,8 @@ import _appConfig from '#build/app.config'
5
5
  import theme from '#build/ui/button'
6
6
  import type { LinkProps } from './Link.vue'
7
7
  import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
9
+ import type { AvatarProps } from '../types'
8
10
  import type { PartialString } from '../types/utils'
9
11
 
10
12
  const appConfig = _appConfig as AppConfig & { ui: { button: Partial<typeof theme> } }
@@ -22,10 +24,16 @@ export interface ButtonProps extends UseComponentIconsProps, Omit<LinkProps, 'ra
22
24
  square?: boolean
23
25
  /** Render the button full width. */
24
26
  block?: boolean
27
+ /** Set loading state automatically based on the `@click` promise state */
28
+ loadingAuto?: boolean
29
+ onClick?: ((event: MouseEvent) => void | Promise<void>) | Array<((event: MouseEvent) => void | Promise<void>)>
25
30
  class?: any
26
31
  ui?: PartialString<typeof button.slots>
27
32
  }
28
33
 
34
+ // Injects props to use as default in the devtools playground.
35
+ extendDevtoolsMeta<ButtonProps>({ defaultProps: { label: 'Click me!' } })
36
+
29
37
  export interface ButtonSlots {
30
38
  leading(props?: {}): any
31
39
  default(props?: {}): any
@@ -34,13 +42,16 @@ export interface ButtonSlots {
34
42
  </script>
35
43
 
36
44
  <script setup lang="ts">
37
- import { computed } from 'vue'
38
- import { useForwardProps } from 'radix-vue'
45
+ import { type Ref, computed, ref, inject } from 'vue'
46
+ import { useForwardProps } from 'reka-ui'
39
47
  import { useComponentIcons } from '../composables/useComponentIcons'
40
48
  import { useButtonGroup } from '../composables/useButtonGroup'
49
+ import { formLoadingInjectionKey } from '../composables/useFormField'
50
+ import { omit } from '../utils'
51
+ import { pickLinkProps } from '../utils/link'
41
52
  import UIcon from './Icon.vue'
53
+ import UAvatar from './Avatar.vue'
42
54
  import ULink from './Link.vue'
43
- import { pickLinkProps } from '../utils/link'
44
55
 
45
56
  const props = defineProps<ButtonProps>()
46
57
  const slots = defineSlots<ButtonSlots>()
@@ -48,13 +59,33 @@ const slots = defineSlots<ButtonSlots>()
48
59
  const linkProps = useForwardProps(pickLinkProps(props))
49
60
 
50
61
  const { orientation, size: buttonSize } = useButtonGroup<ButtonProps>(props)
51
- const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props)
62
+
63
+ const loadingAutoState = ref(false)
64
+ const formLoading = inject<Ref<boolean> | undefined>(formLoadingInjectionKey, undefined)
65
+
66
+ async function onClickWrapper(event: MouseEvent) {
67
+ loadingAutoState.value = true
68
+ const callbacks = Array.isArray(props.onClick) ? props.onClick : [props.onClick]
69
+ try {
70
+ await Promise.all(callbacks.map(fn => fn?.(event)))
71
+ } finally {
72
+ loadingAutoState.value = false
73
+ }
74
+ }
75
+
76
+ const isLoading = computed(() => {
77
+ return props.loading || (props.loadingAuto && (loadingAutoState.value || (formLoading?.value && props.type === 'submit')))
78
+ })
79
+
80
+ const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(
81
+ computed(() => ({ ...props, loading: isLoading.value }))
82
+ )
52
83
 
53
84
  const ui = computed(() => button({
54
85
  color: props.color,
55
86
  variant: props.variant,
56
87
  size: buttonSize.value,
57
- loading: props.loading,
88
+ loading: isLoading.value,
58
89
  block: props.block,
59
90
  square: props.square || (!slots.default && !props.label),
60
91
  leading: isLeading.value,
@@ -64,9 +95,17 @@ const ui = computed(() => button({
64
95
  </script>
65
96
 
66
97
  <template>
67
- <ULink :type="type" :disabled="disabled || loading" :class="ui.base({ class: props.class })" v-bind="linkProps" raw>
98
+ <ULink
99
+ :type="type"
100
+ :disabled="disabled || isLoading"
101
+ :class="ui.base({ class: [props.class, props.ui?.base] })"
102
+ v-bind="omit(linkProps, ['type', 'disabled'])"
103
+ raw
104
+ @click="onClickWrapper"
105
+ >
68
106
  <slot name="leading">
69
107
  <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
108
+ <UAvatar v-else-if="!!avatar" :size="((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
70
109
  </slot>
71
110
 
72
111
  <slot>