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

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 (353) hide show
  1. package/.nuxt/ui/accordion.ts +20 -0
  2. package/.nuxt/ui/alert.ts +259 -0
  3. package/.nuxt/ui/avatar-group.ts +52 -0
  4. package/.nuxt/ui/avatar.ts +54 -0
  5. package/.nuxt/ui/badge.ts +231 -0
  6. package/.nuxt/ui/breadcrumb.ts +45 -0
  7. package/.nuxt/ui/button-group.ts +29 -0
  8. package/.nuxt/ui/button.ts +376 -0
  9. package/.nuxt/ui/calendar.ts +103 -0
  10. package/.nuxt/ui/card.ts +8 -0
  11. package/.nuxt/ui/carousel.ts +43 -0
  12. package/.nuxt/ui/checkbox.ts +123 -0
  13. package/.nuxt/ui/chip.ts +96 -0
  14. package/.nuxt/ui/collapsible.ts +6 -0
  15. package/.nuxt/ui/color-picker.ts +47 -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 +216 -0
  19. package/.nuxt/ui/drawer.ts +62 -0
  20. package/.nuxt/ui/dropdown-menu.ts +217 -0
  21. package/.nuxt/ui/form-field.ts +48 -0
  22. package/.nuxt/ui/form.ts +3 -0
  23. package/.nuxt/ui/index.ts +48 -0
  24. package/.nuxt/ui/input-menu.ts +445 -0
  25. package/.nuxt/ui/input-number.ts +235 -0
  26. package/.nuxt/ui/input.ts +298 -0
  27. package/.nuxt/ui/kbd.ts +31 -0
  28. package/.nuxt/ui/link.ts +15 -0
  29. package/.nuxt/ui/modal.ts +28 -0
  30. package/.nuxt/ui/navigation-menu.ts +436 -0
  31. package/.nuxt/ui/pagination.ts +8 -0
  32. package/.nuxt/ui/pin-input.ts +171 -0
  33. package/.nuxt/ui/popover.ts +6 -0
  34. package/.nuxt/ui/progress.ts +297 -0
  35. package/.nuxt/ui/radio-group.ts +135 -0
  36. package/.nuxt/ui/select-menu.ts +351 -0
  37. package/.nuxt/ui/select.ts +350 -0
  38. package/.nuxt/ui/separator.ts +172 -0
  39. package/.nuxt/ui/skeleton.ts +3 -0
  40. package/.nuxt/ui/slideover.ts +70 -0
  41. package/.nuxt/ui/slider.ts +171 -0
  42. package/.nuxt/ui/stepper.ts +202 -0
  43. package/.nuxt/ui/switch.ts +131 -0
  44. package/.nuxt/ui/table.ts +146 -0
  45. package/.nuxt/ui/tabs.ts +255 -0
  46. package/.nuxt/ui/textarea.ts +298 -0
  47. package/.nuxt/ui/toast.ts +76 -0
  48. package/.nuxt/ui/toaster.ts +91 -0
  49. package/.nuxt/ui/tooltip.ts +9 -0
  50. package/README.md +82 -54
  51. package/cli/commands/{init.mjs → make/component.mjs} +17 -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/package.json +2 -2
  56. package/cli/templates.mjs +60 -10
  57. package/cli/utils.mjs +14 -0
  58. package/dist/chunks/component-meta.cjs +82802 -0
  59. package/dist/chunks/component-meta.mjs +82800 -0
  60. package/dist/client/devtools/200.html +1 -0
  61. package/dist/client/devtools/404.html +1 -0
  62. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  63. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  64. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  65. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  66. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  67. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  68. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  69. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  70. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  71. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  72. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  73. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  74. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  75. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  76. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  77. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  78. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  79. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  80. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  81. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  82. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  83. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  84. package/dist/client/devtools/_nuxt/CQ-XZFu7.js +54 -0
  85. package/dist/client/devtools/_nuxt/DNZFyo26.js +1 -0
  86. package/dist/client/devtools/_nuxt/Dtz-o9GB.js +1 -0
  87. package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
  88. package/dist/client/devtools/_nuxt/builds/meta/1f5fbd7b-9d97-480e-9ae4-e02b4ff7018b.json +1 -0
  89. package/dist/client/devtools/_nuxt/entry.qOdop8tq.css +1 -0
  90. package/dist/client/devtools/_nuxt/error-404.D-rS9BDk.css +1 -0
  91. package/dist/client/devtools/_nuxt/error-500.CfcCHs91.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 +51 -9
  123. package/dist/runtime/components/Alert.vue +16 -8
  124. package/dist/runtime/components/App.vue +20 -7
  125. package/dist/runtime/components/Avatar.vue +36 -11
  126. package/dist/runtime/components/AvatarGroup.vue +6 -2
  127. package/dist/runtime/components/Badge.vue +36 -5
  128. package/dist/runtime/components/Breadcrumb.vue +53 -14
  129. package/dist/runtime/components/Button.vue +47 -7
  130. package/dist/runtime/components/ButtonGroup.vue +7 -3
  131. package/dist/runtime/components/Calendar.vue +191 -0
  132. package/dist/runtime/components/Card.vue +5 -2
  133. package/dist/runtime/components/Carousel.vue +323 -0
  134. package/dist/runtime/components/Checkbox.vue +30 -34
  135. package/dist/runtime/components/Chip.vue +12 -4
  136. package/dist/runtime/components/Collapsible.vue +11 -6
  137. package/dist/runtime/components/ColorPicker.vue +266 -0
  138. package/dist/runtime/components/CommandPalette.vue +132 -99
  139. package/dist/runtime/components/Container.vue +5 -2
  140. package/dist/runtime/components/ContextMenu.vue +103 -15
  141. package/dist/runtime/components/ContextMenuContent.vue +49 -19
  142. package/dist/runtime/components/Drawer.vue +28 -12
  143. package/dist/runtime/components/DropdownMenu.vue +93 -17
  144. package/dist/runtime/components/DropdownMenuContent.vue +51 -19
  145. package/dist/runtime/components/Form.vue +59 -41
  146. package/dist/runtime/components/FormField.vue +20 -7
  147. package/dist/runtime/components/Icon.vue +1 -1
  148. package/dist/runtime/components/Input.vue +18 -8
  149. package/dist/runtime/components/InputMenu.vue +164 -66
  150. package/dist/runtime/components/InputNumber.vue +193 -0
  151. package/dist/runtime/components/Kbd.vue +5 -2
  152. package/dist/runtime/components/Link.vue +72 -9
  153. package/dist/runtime/components/LinkBase.vue +10 -7
  154. package/dist/runtime/components/Modal.vue +23 -16
  155. package/dist/runtime/components/NavigationMenu.vue +178 -78
  156. package/dist/runtime/components/Pagination.vue +32 -16
  157. package/dist/runtime/components/PinInput.vue +97 -0
  158. package/dist/runtime/components/Popover.vue +29 -9
  159. package/dist/runtime/components/Progress.vue +29 -11
  160. package/dist/runtime/components/RadioGroup.vue +30 -8
  161. package/dist/runtime/components/Select.vue +81 -33
  162. package/dist/runtime/components/SelectMenu.vue +181 -81
  163. package/dist/runtime/components/Separator.vue +5 -4
  164. package/dist/runtime/components/Skeleton.vue +5 -2
  165. package/dist/runtime/components/Slideover.vue +23 -15
  166. package/dist/runtime/components/Slider.vue +5 -4
  167. package/dist/runtime/components/Stepper.vue +173 -0
  168. package/dist/runtime/components/Switch.vue +18 -17
  169. package/dist/runtime/components/Table.vue +263 -0
  170. package/dist/runtime/components/Tabs.vue +45 -16
  171. package/dist/runtime/components/Textarea.vue +12 -5
  172. package/dist/runtime/components/Toast.vue +15 -6
  173. package/dist/runtime/components/Toaster.vue +33 -17
  174. package/dist/runtime/components/Tooltip.vue +10 -7
  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 +3 -9
  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 +9 -5
  185. package/dist/runtime/composables/useFormField.js +8 -4
  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 +55 -0
  197. package/dist/runtime/locale/cs.d.ts +2 -0
  198. package/dist/runtime/locale/cs.js +54 -0
  199. package/dist/runtime/locale/da.d.ts +2 -0
  200. package/dist/runtime/locale/da.js +54 -0
  201. package/dist/runtime/locale/de.d.ts +2 -0
  202. package/dist/runtime/locale/de.js +54 -0
  203. package/dist/runtime/locale/el.d.ts +2 -0
  204. package/dist/runtime/locale/el.js +54 -0
  205. package/dist/runtime/locale/en.d.ts +2 -0
  206. package/dist/runtime/locale/en.js +54 -0
  207. package/dist/runtime/locale/es.d.ts +2 -0
  208. package/dist/runtime/locale/es.js +54 -0
  209. package/dist/runtime/locale/et.d.ts +2 -0
  210. package/dist/runtime/locale/et.js +54 -0
  211. package/dist/runtime/locale/fa_ir.d.ts +2 -0
  212. package/dist/runtime/locale/fa_ir.js +55 -0
  213. package/dist/runtime/locale/fi.d.ts +2 -0
  214. package/dist/runtime/locale/fi.js +54 -0
  215. package/dist/runtime/locale/fr.d.ts +2 -0
  216. package/dist/runtime/locale/fr.js +54 -0
  217. package/dist/runtime/locale/id.d.ts +2 -0
  218. package/dist/runtime/locale/id.js +54 -0
  219. package/dist/runtime/locale/index.d.ts +28 -0
  220. package/dist/runtime/locale/index.js +28 -0
  221. package/dist/runtime/locale/it.d.ts +2 -0
  222. package/dist/runtime/locale/it.js +54 -0
  223. package/dist/runtime/locale/ja.d.ts +2 -0
  224. package/dist/runtime/locale/ja.js +54 -0
  225. package/dist/runtime/locale/ko.d.ts +2 -0
  226. package/dist/runtime/locale/ko.js +54 -0
  227. package/dist/runtime/locale/nl.d.ts +2 -0
  228. package/dist/runtime/locale/nl.js +54 -0
  229. package/dist/runtime/locale/pl.d.ts +2 -0
  230. package/dist/runtime/locale/pl.js +54 -0
  231. package/dist/runtime/locale/pt.d.ts +2 -0
  232. package/dist/runtime/locale/pt.js +54 -0
  233. package/dist/runtime/locale/pt_br.d.ts +2 -0
  234. package/dist/runtime/locale/pt_br.js +54 -0
  235. package/dist/runtime/locale/ru.d.ts +2 -0
  236. package/dist/runtime/locale/ru.js +54 -0
  237. package/dist/runtime/locale/sk.d.ts +2 -0
  238. package/dist/runtime/locale/sk.js +54 -0
  239. package/dist/runtime/locale/sv.d.ts +2 -0
  240. package/dist/runtime/locale/sv.js +54 -0
  241. package/dist/runtime/locale/th.d.ts +2 -0
  242. package/dist/runtime/locale/th.js +54 -0
  243. package/dist/runtime/locale/tr.d.ts +2 -0
  244. package/dist/runtime/locale/tr.js +54 -0
  245. package/dist/runtime/locale/uk.d.ts +2 -0
  246. package/dist/runtime/locale/uk.js +54 -0
  247. package/dist/runtime/locale/vi.d.ts +2 -0
  248. package/dist/runtime/locale/vi.js +54 -0
  249. package/dist/runtime/locale/zh_hans.d.ts +2 -0
  250. package/dist/runtime/locale/zh_hans.js +54 -0
  251. package/dist/runtime/locale/zh_hant.d.ts +2 -0
  252. package/dist/runtime/locale/zh_hant.js +54 -0
  253. package/dist/runtime/plugins/colors.js +12 -8
  254. package/dist/runtime/types/form.d.ts +11 -4
  255. package/dist/runtime/types/form.js +2 -2
  256. package/dist/runtime/types/index.d.ts +50 -42
  257. package/dist/runtime/types/index.js +8 -0
  258. package/dist/runtime/types/locale.d.ts +56 -0
  259. package/dist/runtime/types/utils.d.ts +8 -3
  260. package/dist/runtime/utils/form.d.ts +7 -5
  261. package/dist/runtime/utils/form.js +117 -28
  262. package/dist/runtime/utils/index.d.ts +2 -1
  263. package/dist/runtime/utils/index.js +16 -0
  264. package/dist/runtime/utils/link.d.ts +5 -3
  265. package/dist/runtime/utils/link.js +1 -1
  266. package/dist/runtime/utils/locale.d.ts +15 -0
  267. package/dist/runtime/utils/locale.js +25 -0
  268. package/dist/runtime/utils/tv.d.ts +1 -0
  269. package/dist/runtime/utils/tv.js +4 -0
  270. package/dist/runtime/vue/components/Icon.vue +15 -0
  271. package/dist/runtime/vue/components/Link.vue +208 -0
  272. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  273. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  274. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  275. package/dist/runtime/vue/plugins/head.js +6 -0
  276. package/dist/runtime/vue/stubs.d.ts +15 -0
  277. package/dist/runtime/vue/stubs.js +27 -0
  278. package/dist/shared/ui.BKsd22-Q.mjs +3289 -0
  279. package/dist/shared/ui.DCjJwb6l.cjs +3296 -0
  280. package/dist/unplugin.cjs +192 -0
  281. package/dist/unplugin.d.cts +49 -0
  282. package/dist/unplugin.d.mts +49 -0
  283. package/dist/unplugin.d.ts +49 -0
  284. package/dist/unplugin.mjs +181 -0
  285. package/dist/vite.cjs +22 -0
  286. package/dist/vite.d.cts +13 -0
  287. package/dist/vite.d.mts +13 -0
  288. package/dist/vite.d.ts +13 -0
  289. package/dist/vite.mjs +20 -0
  290. package/package.json +107 -35
  291. package/vue-plugin.d.ts +5 -0
  292. package/cli/node_modules/.ignored/citty/LICENSE +0 -36
  293. package/cli/node_modules/.ignored/citty/README.md +0 -134
  294. package/cli/node_modules/.ignored/citty/dist/index.cjs +0 -475
  295. package/cli/node_modules/.ignored/citty/dist/index.d.cts +0 -80
  296. package/cli/node_modules/.ignored/citty/dist/index.d.mts +0 -80
  297. package/cli/node_modules/.ignored/citty/dist/index.d.ts +0 -80
  298. package/cli/node_modules/.ignored/citty/dist/index.mjs +0 -463
  299. package/cli/node_modules/.ignored/citty/package.json +0 -49
  300. package/cli/node_modules/.ignored/consola/LICENSE +0 -47
  301. package/cli/node_modules/.ignored/consola/README.md +0 -318
  302. package/cli/node_modules/.ignored/consola/core.d.ts +0 -1
  303. package/cli/node_modules/.ignored/consola/dist/basic.cjs +0 -32
  304. package/cli/node_modules/.ignored/consola/dist/basic.d.ts +0 -9
  305. package/cli/node_modules/.ignored/consola/dist/basic.mjs +0 -24
  306. package/cli/node_modules/.ignored/consola/dist/browser.cjs +0 -80
  307. package/cli/node_modules/.ignored/consola/dist/browser.d.ts +0 -7
  308. package/cli/node_modules/.ignored/consola/dist/browser.mjs +0 -72
  309. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.cjs +0 -436
  310. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.mjs +0 -429
  311. package/cli/node_modules/.ignored/consola/dist/core.cjs +0 -415
  312. package/cli/node_modules/.ignored/consola/dist/core.d.ts +0 -124
  313. package/cli/node_modules/.ignored/consola/dist/core.mjs +0 -410
  314. package/cli/node_modules/.ignored/consola/dist/index.cjs +0 -21
  315. package/cli/node_modules/.ignored/consola/dist/index.d.ts +0 -9
  316. package/cli/node_modules/.ignored/consola/dist/index.mjs +0 -8
  317. package/cli/node_modules/.ignored/consola/dist/shared/consola.06ad8a64.mjs +0 -62
  318. package/cli/node_modules/.ignored/consola/dist/shared/consola.36c0034f.mjs +0 -636
  319. package/cli/node_modules/.ignored/consola/dist/shared/consola.4bbae468.cjs +0 -645
  320. package/cli/node_modules/.ignored/consola/dist/shared/consola.deac7d5a.cjs +0 -65
  321. package/cli/node_modules/.ignored/consola/dist/utils.cjs +0 -308
  322. package/cli/node_modules/.ignored/consola/dist/utils.d.ts +0 -169
  323. package/cli/node_modules/.ignored/consola/dist/utils.mjs +0 -284
  324. package/cli/node_modules/.ignored/consola/lib/index.cjs +0 -9
  325. package/cli/node_modules/.ignored/consola/package.json +0 -101
  326. package/cli/node_modules/.ignored/consola/utils.d.ts +0 -1
  327. package/cli/node_modules/.ignored/pathe/LICENSE +0 -44
  328. package/cli/node_modules/.ignored/pathe/README.md +0 -69
  329. package/cli/node_modules/.ignored/pathe/dist/index.cjs +0 -23
  330. package/cli/node_modules/.ignored/pathe/dist/index.d.cts +0 -36
  331. package/cli/node_modules/.ignored/pathe/dist/index.d.mts +0 -36
  332. package/cli/node_modules/.ignored/pathe/dist/index.d.ts +0 -36
  333. package/cli/node_modules/.ignored/pathe/dist/index.mjs +0 -1
  334. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.1f0a373c.cjs +0 -238
  335. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.ff20891b.mjs +0 -221
  336. package/cli/node_modules/.ignored/pathe/dist/utils.cjs +0 -58
  337. package/cli/node_modules/.ignored/pathe/dist/utils.d.cts +0 -5
  338. package/cli/node_modules/.ignored/pathe/dist/utils.d.mts +0 -5
  339. package/cli/node_modules/.ignored/pathe/dist/utils.d.ts +0 -5
  340. package/cli/node_modules/.ignored/pathe/dist/utils.mjs +0 -54
  341. package/cli/node_modules/.ignored/pathe/package.json +0 -48
  342. package/cli/node_modules/.ignored/pathe/utils.d.ts +0 -1
  343. package/cli/node_modules/.ignored/scule/LICENSE +0 -21
  344. package/cli/node_modules/.ignored/scule/README.md +0 -149
  345. package/cli/node_modules/.ignored/scule/dist/index.cjs +0 -92
  346. package/cli/node_modules/.ignored/scule/dist/index.d.cts +0 -57
  347. package/cli/node_modules/.ignored/scule/dist/index.d.mts +0 -57
  348. package/cli/node_modules/.ignored/scule/dist/index.d.ts +0 -57
  349. package/cli/node_modules/.ignored/scule/dist/index.mjs +0 -80
  350. package/cli/node_modules/.ignored/scule/package.json +0 -43
  351. package/cli/node_modules/.package-lock.json +0 -33
  352. package/dist/runtime/types/component.d.ts +0 -17
  353. /package/dist/runtime/types/{component.js → locale.js} +0 -0
@@ -1,16 +1,17 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
- import type { AccordionRootProps, AccordionRootEmits, AccordionItemProps } from 'radix-vue'
2
+ import type { AccordionRootProps, AccordionRootEmits } from 'reka-ui'
4
3
  import type { AppConfig } from '@nuxt/schema'
5
4
  import _appConfig from '#build/app.config'
6
5
  import theme from '#build/ui/accordion'
6
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
+ import { tv } from '../utils/tv'
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,58 @@ 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
+ unmountOnHide: true,
102
+ labelKey: 'label'
61
103
  })
62
104
  const emits = defineEmits<AccordionEmits>()
63
105
  const slots = defineSlots<AccordionSlots<T>>()
64
106
 
65
107
  const appConfig = useAppConfig()
66
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'collapsible', 'defaultValue', 'disabled', 'modelValue', 'type'), emits)
108
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'collapsible', 'defaultValue', 'disabled', 'modelValue', 'type', 'unmountOnHide'), emits)
67
109
 
68
110
  const ui = computed(() => accordion({
69
111
  disabled: props.disabled
@@ -86,8 +128,8 @@ const ui = computed(() => accordion({
86
128
  <UIcon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
87
129
  </slot>
88
130
 
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>
131
+ <span v-if="get(item, props.labelKey as string) || !!slots.default" :class="ui.label({ class: props.ui?.label })">
132
+ <slot :item="item" :index="index" :open="open">{{ get(item, props.labelKey as string) }}</slot>
91
133
  </span>
92
134
 
93
135
  <slot name="trailing" :item="item" :index="index" :open="open">
@@ -1,8 +1,10 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
2
+ import 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'
7
+ import { tv } from '../utils/tv'
6
8
  import type { AvatarProps, ButtonProps } from '../types'
7
9
 
8
10
  const appConfig = _appConfig as AppConfig & { ui: { alert: Partial<typeof theme> } }
@@ -27,12 +29,13 @@ export interface AlertProps {
27
29
  * Display a list of actions:
28
30
  * - under the title and description if multiline
29
31
  * - next to the close button if not multiline
32
+ * `{ size: 'xs' }`{lang="ts-type"}
30
33
  */
31
34
  actions?: ButtonProps[]
32
35
  /**
33
36
  * Display a close button to dismiss the alert.
34
- * `{ size: 'md', color: 'gray', variant: 'link' }`{lang="ts-type"}
35
- * @emits `close`
37
+ * `{ size: 'md', color: 'neutral', variant: 'link' }`{lang="ts-type"}
38
+ * @emits 'update:open'
36
39
  * @defaultValue false
37
40
  */
38
41
  close?: ButtonProps | boolean
@@ -46,7 +49,7 @@ export interface AlertProps {
46
49
  }
47
50
 
48
51
  export interface AlertEmits {
49
- (e: 'close'): void
52
+ (e: 'update:open', value: boolean): void
50
53
  }
51
54
 
52
55
  export interface AlertSlots {
@@ -56,19 +59,24 @@ export interface AlertSlots {
56
59
  actions(props?: {}): any
57
60
  close(props: { ui: any }): any
58
61
  }
62
+
63
+ extendDevtoolsMeta<AlertProps>({ defaultProps: { title: 'Heads up!' } })
59
64
  </script>
60
65
 
61
66
  <script setup lang="ts">
62
67
  import { computed } from 'vue'
63
- import { Primitive } from 'radix-vue'
68
+ import { Primitive } from 'reka-ui'
64
69
  import { useAppConfig } from '#imports'
70
+ import { useLocale } from '../composables/useLocale'
65
71
  import UIcon from './Icon.vue'
66
72
  import UAvatar from './Avatar.vue'
73
+ import UButton from './Button.vue'
67
74
 
68
75
  const props = defineProps<AlertProps>()
69
76
  const emits = defineEmits<AlertEmits>()
70
77
  const slots = defineSlots<AlertSlots>()
71
78
 
79
+ const { t } = useLocale()
72
80
  const appConfig = useAppConfig()
73
81
 
74
82
  const multiline = computed(() => !!props.title && !!props.description)
@@ -117,12 +125,12 @@ const ui = computed(() => alert({
117
125
  v-if="close"
118
126
  :icon="closeIcon || appConfig.ui.icons.close"
119
127
  size="md"
120
- color="gray"
128
+ color="neutral"
121
129
  variant="link"
122
- aria-label="Close"
130
+ :aria-label="t('alert.close')"
123
131
  v-bind="typeof close === 'object' ? close : undefined"
124
132
  :class="ui.close({ class: props.ui?.close })"
125
- @click="emits('close')"
133
+ @click="emits('update:open', false)"
126
134
  />
127
135
  </slot>
128
136
  </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,9 +1,11 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { AvatarFallbackProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { AvatarFallbackProps } 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/avatar'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+ import { tv } from '../utils/tv'
7
9
 
8
10
  const appConfig = _appConfig as AppConfig & { ui: { avatar: Partial<typeof theme> } }
9
11
 
@@ -14,9 +16,9 @@ type AvatarVariants = VariantProps<typeof avatar>
14
16
  export interface AvatarProps extends Pick<AvatarFallbackProps, 'delayMs'> {
15
17
  /**
16
18
  * The element or component this component should render as.
17
- * @defaultValue 'img'
19
+ * @defaultValue 'span'
18
20
  */
19
- as?: string | object
21
+ as?: any
20
22
  src?: string
21
23
  alt?: string
22
24
  icon?: string
@@ -25,18 +27,25 @@ export interface AvatarProps extends Pick<AvatarFallbackProps, 'delayMs'> {
25
27
  class?: any
26
28
  ui?: Partial<typeof avatar.slots>
27
29
  }
30
+
31
+ export interface AvatarSlots {
32
+ default(props?: {}): any
33
+ }
34
+
35
+ extendDevtoolsMeta<AvatarProps>({ defaultProps: { src: 'https://avatars.githubusercontent.com/u/739984?v=4', alt: 'Benjamin Canac' } })
28
36
  </script>
29
37
 
30
38
  <script setup lang="ts">
31
39
  import { computed } from 'vue'
32
- import { AvatarRoot, AvatarImage, AvatarFallback, useForwardProps } from 'radix-vue'
40
+ import { AvatarRoot, AvatarImage, AvatarFallback, useForwardProps } from 'reka-ui'
33
41
  import { reactivePick } from '@vueuse/core'
34
42
  import { useAvatarGroup } from '../composables/useAvatarGroup'
35
43
  import UIcon from './Icon.vue'
44
+ import ImageComponent from '#build/ui-image-component'
36
45
 
37
46
  defineOptions({ inheritAttrs: false })
38
47
 
39
- const props = defineProps<AvatarProps>()
48
+ const props = withDefaults(defineProps<AvatarProps>(), { as: 'span' })
40
49
 
41
50
  const fallbackProps = useForwardProps(reactivePick(props, 'delayMs'))
42
51
 
@@ -48,22 +57,38 @@ const { size } = useAvatarGroup(props)
48
57
  const ui = computed(() => avatar({
49
58
  size: size.value
50
59
  }))
60
+
61
+ const sizePx = computed(() => ({
62
+ '3xs': 16,
63
+ '2xs': 20,
64
+ 'xs': 24,
65
+ 'sm': 28,
66
+ 'md': 32,
67
+ 'lg': 36,
68
+ 'xl': 40,
69
+ '2xl': 44,
70
+ '3xl': 48
71
+ })[props.size || 'md'])
51
72
  </script>
52
73
 
53
74
  <template>
54
- <AvatarRoot :class="ui.root({ class: [props.class, props.ui?.root] })">
75
+ <AvatarRoot :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
55
76
  <AvatarImage
56
77
  v-if="src"
57
- :as="as"
78
+ :as="ImageComponent"
58
79
  :src="src"
59
80
  :alt="alt"
81
+ :width="sizePx"
82
+ :height="sizePx"
60
83
  v-bind="$attrs"
61
84
  :class="ui.image({ class: props.ui?.image })"
62
85
  />
63
86
 
64
- <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
+ <AvatarFallback as-child v-bind="{ ...fallbackProps, ...$attrs }">
88
+ <slot>
89
+ <UIcon v-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
90
+ <span v-else :class="ui.fallback({ class: props.ui?.fallback })">{{ fallback || '&nbsp;' }}</span>
91
+ </slot>
67
92
  </AvatarFallback>
68
93
  </AvatarRoot>
69
94
  </template>
@@ -1,8 +1,10 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
2
+ import 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'
7
+ import { tv } from '../utils/tv'
6
8
 
7
9
  const appConfig = _appConfig as AppConfig & { ui: { avatarGroup: Partial<typeof theme> } }
8
10
 
@@ -28,11 +30,13 @@ export interface AvatarGroupProps {
28
30
  export interface AvatarGroupSlots {
29
31
  default(props?: {}): any
30
32
  }
33
+
34
+ extendDevtoolsMeta({ example: 'AvatarGroupExample' })
31
35
  </script>
32
36
 
33
37
  <script setup lang="ts">
34
38
  import { computed, provide } from 'vue'
35
- import { Primitive } from 'radix-vue'
39
+ import { Primitive } from 'reka-ui'
36
40
  import { avatarGroupInjectionKey } from '../composables/useAvatarGroup'
37
41
  import UAvatar from './Avatar.vue'
38
42
 
@@ -1,8 +1,12 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
2
+ import 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 { tv } from '../utils/tv'
9
+ import type { AvatarProps } from '../types'
6
10
 
7
11
  const appConfig = _appConfig as AppConfig & { ui: { badge: Partial<typeof theme> } }
8
12
 
@@ -10,7 +14,7 @@ const badge = tv({ extend: tv(theme), ...(appConfig.ui?.badge || {}) })
10
14
 
11
15
  type BadgeVariants = VariantProps<typeof badge>
12
16
 
13
- export interface BadgeProps {
17
+ export interface BadgeProps extends Omit<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
14
18
  /**
15
19
  * The element or component this component should render as.
16
20
  * @defaultValue 'span'
@@ -21,26 +25,53 @@ export interface BadgeProps {
21
25
  variant?: BadgeVariants['variant']
22
26
  size?: BadgeVariants['size']
23
27
  class?: any
28
+ ui?: Partial<typeof badge.slots>
24
29
  }
25
30
 
26
31
  export interface BadgeSlots {
32
+ leading(props?: {}): any
27
33
  default(props?: {}): any
34
+ trailing(props?: {}): any
28
35
  }
29
36
  </script>
30
37
 
31
38
  <script setup lang="ts">
32
- import { Primitive } from 'radix-vue'
39
+ import { computed } from 'vue'
40
+ import { Primitive } from 'reka-ui'
41
+ import { useComponentIcons } from '../composables/useComponentIcons'
42
+ import UIcon from './Icon.vue'
33
43
 
34
44
  const props = withDefaults(defineProps<BadgeProps>(), {
35
45
  as: 'span'
36
46
  })
37
47
  defineSlots<BadgeSlots>()
48
+
49
+ const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props)
50
+
51
+ const ui = computed(() => badge({
52
+ color: props.color,
53
+ variant: props.variant,
54
+ size: props.size
55
+ }))
56
+
57
+ extendDevtoolsMeta({ defaultProps: { label: 'Badge' } })
38
58
  </script>
39
59
 
40
60
  <template>
41
- <Primitive :as="as" :class="badge({ color, variant, size, class: props.class })">
61
+ <Primitive :as="as" :class="ui.base({ class: [props.class, props.ui?.base] })">
62
+ <slot name="leading">
63
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
64
+ <UAvatar v-else-if="!!avatar" :size="((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
65
+ </slot>
66
+
42
67
  <slot>
43
- {{ label }}
68
+ <span v-if="label" :class="ui.label({ class: props.ui?.label })">
69
+ {{ label }}
70
+ </span>
71
+ </slot>
72
+
73
+ <slot name="trailing">
74
+ <UIcon v-if="isTrailing && trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
44
75
  </slot>
45
76
  </Primitive>
46
77
  </template>
@@ -1,10 +1,11 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
2
  import type { AppConfig } from '@nuxt/schema'
4
3
  import _appConfig from '#build/app.config'
5
4
  import theme from '#build/ui/breadcrumb'
5
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
+ import { tv } from '../utils/tv'
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>