@nuxt/ui 3.0.0-alpha.0 → 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 (322) 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 +4 -3
  121. package/dist/module.mjs +180 -2617
  122. package/dist/runtime/components/Accordion.vue +95 -11
  123. package/dist/runtime/components/Alert.vue +69 -10
  124. package/dist/runtime/components/App.vue +28 -5
  125. package/dist/runtime/components/Avatar.vue +57 -12
  126. package/dist/runtime/components/AvatarGroup.vue +34 -7
  127. package/dist/runtime/components/Badge.vue +61 -9
  128. package/dist/runtime/components/Breadcrumb.vue +93 -16
  129. package/dist/runtime/components/Button.vue +78 -12
  130. package/dist/runtime/components/ButtonGroup.vue +35 -8
  131. package/dist/runtime/components/Calendar.vue +190 -0
  132. package/dist/runtime/components/Card.vue +29 -7
  133. package/dist/runtime/components/Carousel.vue +322 -0
  134. package/dist/runtime/components/Checkbox.vue +64 -30
  135. package/dist/runtime/components/Chip.vue +48 -8
  136. package/dist/runtime/components/Collapsible.vue +32 -8
  137. package/dist/runtime/components/ColorPicker.vue +265 -0
  138. package/dist/runtime/components/CommandPalette.vue +207 -88
  139. package/dist/runtime/components/Container.vue +26 -7
  140. package/dist/runtime/components/ContextMenu.vue +150 -11
  141. package/dist/runtime/components/ContextMenuContent.vue +63 -19
  142. package/dist/runtime/components/Drawer.vue +68 -15
  143. package/dist/runtime/components/DropdownMenu.vue +147 -12
  144. package/dist/runtime/components/DropdownMenuContent.vue +69 -19
  145. package/dist/runtime/components/Form.vue +80 -42
  146. package/dist/runtime/components/FormField.vue +58 -21
  147. package/dist/runtime/components/Icon.vue +13 -3
  148. package/dist/runtime/components/Input.vue +61 -12
  149. package/dist/runtime/components/InputMenu.vue +247 -53
  150. package/dist/runtime/components/InputNumber.vue +192 -0
  151. package/dist/runtime/components/Kbd.vue +31 -7
  152. package/dist/runtime/components/Link.vue +148 -21
  153. package/dist/runtime/components/LinkBase.vue +21 -8
  154. package/dist/runtime/components/Modal.vue +90 -15
  155. package/dist/runtime/components/NavigationMenu.vue +234 -69
  156. package/dist/runtime/components/Pagination.vue +124 -15
  157. package/dist/runtime/components/PinInput.vue +96 -0
  158. package/dist/runtime/components/Popover.vue +66 -11
  159. package/dist/runtime/components/Progress.vue +67 -12
  160. package/dist/runtime/components/RadioGroup.vue +78 -9
  161. package/dist/runtime/components/Select.vue +155 -26
  162. package/dist/runtime/components/SelectMenu.vue +245 -63
  163. package/dist/runtime/components/Separator.vue +42 -7
  164. package/dist/runtime/components/Skeleton.vue +22 -7
  165. package/dist/runtime/components/Slideover.vue +88 -15
  166. package/dist/runtime/components/Slider.vue +37 -7
  167. package/dist/runtime/components/Stepper.vue +171 -0
  168. package/dist/runtime/components/Switch.vue +58 -14
  169. package/dist/runtime/components/Table.vue +262 -0
  170. package/dist/runtime/components/Tabs.vue +97 -17
  171. package/dist/runtime/components/Textarea.vue +55 -9
  172. package/dist/runtime/components/Toast.vue +66 -9
  173. package/dist/runtime/components/Toaster.vue +57 -21
  174. package/dist/runtime/components/Tooltip.vue +49 -10
  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 +2 -2
  182. package/dist/runtime/composables/useButtonGroup.d.ts +5 -5
  183. package/dist/runtime/composables/useComponentIcons.d.ts +3 -0
  184. package/dist/runtime/composables/useFormField.d.ts +13 -6
  185. package/dist/runtime/composables/useFormField.js +12 -7
  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 -0
  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.d.ts +2 -0
  236. package/dist/runtime/plugins/colors.js +12 -8
  237. package/dist/runtime/plugins/modal.d.ts +2 -0
  238. package/dist/runtime/plugins/slideover.d.ts +2 -0
  239. package/dist/runtime/types/form.d.ts +10 -4
  240. package/dist/runtime/types/index.d.ts +50 -42
  241. package/dist/runtime/types/index.js +8 -0
  242. package/dist/runtime/types/locale.d.ts +54 -0
  243. package/dist/runtime/types/utils.d.ts +8 -3
  244. package/dist/runtime/utils/form.d.ts +7 -5
  245. package/dist/runtime/utils/form.js +117 -28
  246. package/dist/runtime/utils/index.d.ts +2 -1
  247. package/dist/runtime/utils/index.js +16 -0
  248. package/dist/runtime/utils/link.d.ts +25 -55
  249. package/dist/runtime/utils/link.js +1 -1
  250. package/dist/runtime/utils/locale.d.ts +15 -0
  251. package/dist/runtime/utils/locale.js +25 -0
  252. package/dist/runtime/vue/components/Icon.vue +15 -0
  253. package/dist/runtime/vue/components/Link.vue +208 -0
  254. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  255. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  256. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  257. package/dist/runtime/vue/plugins/head.js +6 -0
  258. package/dist/runtime/vue/stubs.d.ts +15 -0
  259. package/dist/runtime/vue/stubs.js +27 -0
  260. package/dist/shared/ui.CwmIkD_Y.cjs +3269 -0
  261. package/dist/shared/ui.D_93iuwH.mjs +3262 -0
  262. package/dist/unplugin.cjs +192 -0
  263. package/dist/unplugin.d.cts +49 -0
  264. package/dist/unplugin.d.mts +49 -0
  265. package/dist/unplugin.d.ts +49 -0
  266. package/dist/unplugin.mjs +181 -0
  267. package/dist/vite.cjs +22 -0
  268. package/dist/vite.d.cts +13 -0
  269. package/dist/vite.d.mts +13 -0
  270. package/dist/vite.d.ts +13 -0
  271. package/dist/vite.mjs +20 -0
  272. package/package.json +103 -37
  273. package/vue-plugin.d.ts +5 -0
  274. package/dist/runtime/assets/css/animations.css +0 -1
  275. package/dist/runtime/components/Accordion.vue.d.ts +0 -492
  276. package/dist/runtime/components/Alert.vue.d.ts +0 -548
  277. package/dist/runtime/components/App.vue.d.ts +0 -25
  278. package/dist/runtime/components/Avatar.vue.d.ts +0 -384
  279. package/dist/runtime/components/AvatarGroup.vue.d.ts +0 -381
  280. package/dist/runtime/components/Badge.vue.d.ts +0 -422
  281. package/dist/runtime/components/Breadcrumb.vue.d.ts +0 -307
  282. package/dist/runtime/components/Button.vue.d.ts +0 -949
  283. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -182
  284. package/dist/runtime/components/Card.vue.d.ts +0 -191
  285. package/dist/runtime/components/Checkbox.vue.d.ts +0 -819
  286. package/dist/runtime/components/Chip.vue.d.ts +0 -590
  287. package/dist/runtime/components/Collapsible.vue.d.ts +0 -159
  288. package/dist/runtime/components/CommandPalette.vue.d.ts +0 -684
  289. package/dist/runtime/components/Container.vue.d.ts +0 -27
  290. package/dist/runtime/components/ContextMenu.vue.d.ts +0 -796
  291. package/dist/runtime/components/Drawer.vue.d.ts +0 -343
  292. package/dist/runtime/components/DropdownMenu.vue.d.ts +0 -815
  293. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +0 -0
  294. package/dist/runtime/components/Form.vue.d.ts +0 -39
  295. package/dist/runtime/components/FormField.vue.d.ts +0 -356
  296. package/dist/runtime/components/Icon.vue.d.ts +0 -17
  297. package/dist/runtime/components/Input.vue.d.ts +0 -1137
  298. package/dist/runtime/components/InputMenu.vue.d.ts +0 -2121
  299. package/dist/runtime/components/Kbd.vue.d.ts +0 -169
  300. package/dist/runtime/components/Link.vue.d.ts +0 -76
  301. package/dist/runtime/components/LinkBase.vue.d.ts +0 -49
  302. package/dist/runtime/components/Modal.vue.d.ts +0 -319
  303. package/dist/runtime/components/NavigationMenu.vue.d.ts +0 -1789
  304. package/dist/runtime/components/Pagination.vue.d.ts +0 -295
  305. package/dist/runtime/components/Popover.vue.d.ts +0 -197
  306. package/dist/runtime/components/Progress.vue.d.ts +0 -1781
  307. package/dist/runtime/components/RadioGroup.vue.d.ts +0 -1715
  308. package/dist/runtime/components/Select.vue.d.ts +0 -1569
  309. package/dist/runtime/components/SelectMenu.vue.d.ts +0 -1661
  310. package/dist/runtime/components/Separator.vue.d.ts +0 -0
  311. package/dist/runtime/components/Skeleton.vue.d.ts +0 -26
  312. package/dist/runtime/components/Slideover.vue.d.ts +0 -375
  313. package/dist/runtime/components/Slider.vue.d.ts +0 -0
  314. package/dist/runtime/components/Switch.vue.d.ts +0 -1676
  315. package/dist/runtime/components/Tabs.vue.d.ts +0 -934
  316. package/dist/runtime/components/Textarea.vue.d.ts +0 -1133
  317. package/dist/runtime/components/Toast.vue.d.ts +0 -0
  318. package/dist/runtime/components/Toaster.vue.d.ts +0 -362
  319. package/dist/runtime/components/Tooltip.vue.d.ts +0 -248
  320. package/dist/runtime/types/component.d.ts +0 -17
  321. package/dist/runtime/types/component.js +0 -0
  322. /package/dist/runtime/{components/ContextMenuContent.vue.d.ts → types/locale.js} +0 -0
@@ -1,16 +1,60 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import _appConfig from "#build/app.config";
4
- import theme from "#build/ui/popover";
5
- const appConfig = _appConfig;
6
- const popover = tv({ extend: tv(theme), ...appConfig.ui?.popover || {} });
1
+ <script lang="ts">
2
+ import { tv } from 'tailwind-variants'
3
+ import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverArrowProps } from 'reka-ui'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/popover'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { popover: Partial<typeof theme> } }
10
+
11
+ const popover = tv({ extend: tv(theme), ...(appConfig.ui?.popover || {}) })
12
+
13
+ export interface PopoverProps extends PopoverRootProps, Pick<HoverCardRootProps, 'openDelay' | 'closeDelay'> {
14
+ /**
15
+ * The display mode of the popover.
16
+ * @defaultValue 'click'
17
+ */
18
+ mode?: 'click' | 'hover'
19
+ /**
20
+ * The content of the popover.
21
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
22
+ */
23
+ content?: Omit<PopoverContentProps, 'as' | 'asChild' | 'forceMount'>
24
+ /**
25
+ * Display an arrow alongside the popover.
26
+ * @defaultValue false
27
+ */
28
+ arrow?: boolean | Omit<PopoverArrowProps, 'as' | 'asChild'>
29
+ /**
30
+ * Render the popover in a portal.
31
+ * @defaultValue true
32
+ */
33
+ portal?: boolean
34
+ /**
35
+ * When `true`, the popover will not close when clicking outside.
36
+ * @defaultValue false
37
+ */
38
+ preventClose?: boolean
39
+ class?: any
40
+ ui?: Partial<typeof popover.slots>
41
+ }
42
+
43
+ export interface PopoverEmits extends PopoverRootEmits {}
44
+
45
+ export interface PopoverSlots {
46
+ default(props: { open: boolean }): any
47
+ content(props?: {}): any
48
+ }
49
+
50
+ extendDevtoolsMeta({ example: 'PopoverExample' })
7
51
  </script>
8
52
 
9
53
  <script setup lang="ts">
10
54
  import { computed, toRef } from 'vue'
11
55
  import { defu } from 'defu'
12
- import { useForwardPropsEmits } from 'radix-vue'
13
- import { Popover, HoverCard } from 'radix-vue/namespaced'
56
+ import { useForwardPropsEmits } from 'reka-ui'
57
+ import { Popover, HoverCard } from 'reka-ui/namespaced'
14
58
  import { reactivePick } from '@vueuse/core'
15
59
 
16
60
  const props = withDefaults(defineProps<PopoverProps>(), {
@@ -24,7 +68,18 @@ const slots = defineSlots<PopoverSlots>()
24
68
 
25
69
  const pick = props.mode === 'hover' ? reactivePick(props, 'defaultOpen', 'open', 'openDelay', 'closeDelay') : reactivePick(props, 'defaultOpen', 'open', 'modal')
26
70
  const rootProps = useForwardPropsEmits(pick, emits)
27
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8 }) as PopoverContentProps)
71
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8 }) as PopoverContentProps)
72
+ const contentEvents = computed(() => {
73
+ if (props.preventClose) {
74
+ return {
75
+ pointerDownOutside: (e: Event) => e.preventDefault(),
76
+ interactOutside: (e: Event) => e.preventDefault(),
77
+ escapeKeyDown: (e: Event) => e.preventDefault()
78
+ }
79
+ }
80
+
81
+ return {}
82
+ })
28
83
  const arrowProps = toRef(() => props.arrow as PopoverArrowProps)
29
84
 
30
85
  // eslint-disable-next-line vue/no-dupe-keys
@@ -37,12 +92,12 @@ const Component = computed(() => props.mode === 'hover' ? HoverCard : Popover)
37
92
 
38
93
  <template>
39
94
  <Component.Root v-slot="{ open }" v-bind="rootProps">
40
- <Component.Trigger v-if="!!slots.default" as-child>
95
+ <Component.Trigger v-if="!!slots.default" as-child :class="props.class">
41
96
  <slot :open="open" />
42
97
  </Component.Trigger>
43
98
 
44
99
  <Component.Portal :disabled="!portal">
45
- <Component.Content v-bind="contentProps" :class="ui.content({ class: [props.class, props.ui?.content] })">
100
+ <Component.Content v-bind="contentProps" :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-on="contentEvents">
46
101
  <slot name="content" />
47
102
 
48
103
  <Component.Arrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
@@ -1,15 +1,56 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import _appConfig from "#build/app.config";
4
- import theme from "#build/ui/progress";
5
- const appConfig = _appConfig;
6
- const progress = tv({ extend: tv(theme), ...appConfig.ui?.progress || {} });
1
+ <!-- eslint-disable vue/block-tag-newline -->
2
+ <script lang="ts">
3
+ import { tv, type VariantProps } from 'tailwind-variants'
4
+ import type { ProgressRootProps, ProgressRootEmits } from 'reka-ui'
5
+ import type { AppConfig } from '@nuxt/schema'
6
+ import _appConfig from '#build/app.config'
7
+ import theme from '#build/ui/progress'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { progress: Partial<typeof theme> } }
10
+
11
+ const progress = tv({ extend: tv(theme), ...(appConfig.ui?.progress || {}) })
12
+
13
+ type ProgressVariants = VariantProps<typeof progress>
14
+
15
+ export interface ProgressProps extends Pick<ProgressRootProps, 'getValueLabel' | 'modelValue'> {
16
+ /**
17
+ * The element or component this component should render as.
18
+ * @defaultValue 'div'
19
+ */
20
+ as?: any
21
+ /** The maximum progress value. */
22
+ max?: number | Array<any>
23
+ /** Display the current progress value. */
24
+ status?: boolean
25
+ /** Whether the progress is visually inverted. */
26
+ inverted?: boolean
27
+ size?: ProgressVariants['size']
28
+ color?: ProgressVariants['color']
29
+ /**
30
+ * The orientation of the progress bar.
31
+ * @defaultValue 'horizontal'
32
+ */
33
+ orientation?: ProgressVariants['orientation']
34
+ animation?: ProgressVariants['animation']
35
+ class?: any
36
+ ui?: Partial<typeof progress.slots>
37
+ }
38
+
39
+ export interface ProgressEmits extends ProgressRootEmits {}
40
+
41
+ export type ProgressSlots = {
42
+ status(props: { percent?: number }): any
43
+ } & {
44
+ [key: string]: (props: { step: number }) => any
45
+ }
46
+
7
47
  </script>
8
48
 
9
49
  <script setup lang="ts">
10
50
  import { computed } from 'vue'
11
- import { ProgressIndicator, ProgressRoot, useForwardPropsEmits } from 'radix-vue'
51
+ import { Primitive, ProgressRoot, ProgressIndicator, useForwardPropsEmits } from 'reka-ui'
12
52
  import { reactivePick } from '@vueuse/core'
53
+ import { useLocale } from '../composables/useLocale'
13
54
 
14
55
  const props = withDefaults(defineProps<ProgressProps>(), {
15
56
  inverted: false,
@@ -19,7 +60,9 @@ const props = withDefaults(defineProps<ProgressProps>(), {
19
60
  const emits = defineEmits<ProgressEmits>()
20
61
  defineSlots<ProgressSlots>()
21
62
 
22
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'getValueLabel', 'modelValue'), emits)
63
+ const { dir } = useLocale()
64
+
65
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'getValueLabel', 'modelValue'), emits)
23
66
 
24
67
  const isIndeterminate = computed(() => rootProps.value.modelValue === null)
25
68
  const hasSteps = computed(() => Array.isArray(props.max))
@@ -53,8 +96,20 @@ const indicatorStyle = computed(() => {
53
96
  return
54
97
  }
55
98
 
56
- return {
57
- transform: `translate${props.orientation === 'vertical' ? 'Y' : 'X'}(${props.inverted ? '' : '-'}${100 - percent.value}%)`
99
+ if (props.orientation === 'vertical') {
100
+ return {
101
+ transform: `translateY(${props.inverted ? '' : '-'}${100 - percent.value}%)`
102
+ }
103
+ } else {
104
+ if (dir.value === 'rtl') {
105
+ return {
106
+ transform: `translateX(${props.inverted ? '-' : ''}${100 - percent.value}%)`
107
+ }
108
+ } else {
109
+ return {
110
+ transform: `translateX(${props.inverted ? '' : '-'}${100 - percent.value}%)`
111
+ }
112
+ }
58
113
  }
59
114
  })
60
115
 
@@ -104,7 +159,7 @@ const ui = computed(() => progress({
104
159
  </script>
105
160
 
106
161
  <template>
107
- <div :class="ui.root({ class: [props.class, props.ui?.root] })">
162
+ <Primitive :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
108
163
  <div v-if="!isIndeterminate && (status || $slots.status)" :class="ui.status({ class: props.ui?.status })" :style="statusStyle">
109
164
  <slot name="status" :percent="percent">
110
165
  {{ percent }}%
@@ -122,5 +177,5 @@ const ui = computed(() => progress({
122
177
  </slot>
123
178
  </div>
124
179
  </div>
125
- </div>
180
+ </Primitive>
126
181
  </template>
@@ -1,19 +1,84 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import _appConfig from "#build/app.config";
4
- import theme from "#build/ui/radio-group";
5
- const appConfig = _appConfig;
6
- const radioGroup = tv({ extend: tv(theme), ...appConfig.ui?.radioGroup || {} });
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { RadioGroupRootProps, RadioGroupRootEmits, AcceptableValue } from 'reka-ui'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/radio-group'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { radioGroup: Partial<typeof theme> } }
10
+
11
+ const radioGroup = tv({ extend: tv(theme), ...(appConfig.ui?.radioGroup || {}) })
12
+
13
+ type RadioGroupVariants = VariantProps<typeof radioGroup>
14
+
15
+ export interface RadioGroupItem {
16
+ label?: string
17
+ description?: string
18
+ disabled?: boolean
19
+ value?: string
20
+ }
21
+
22
+ export interface RadioGroupProps<T> extends Pick<RadioGroupRootProps, 'defaultValue' | 'disabled' | 'loop' | 'modelValue' | 'name' | 'required'> {
23
+ /**
24
+ * The element or component this component should render as.
25
+ * @defaultValue 'div'
26
+ */
27
+ as?: any
28
+ legend?: string
29
+ /**
30
+ * When `items` is an array of objects, select the field to use as the value.
31
+ * @defaultValue 'value'
32
+ */
33
+ valueKey?: string
34
+ /**
35
+ * When `items` is an array of objects, select the field to use as the label.
36
+ * @defaultValue 'label'
37
+ */
38
+ labelKey?: string
39
+ /**
40
+ * When `items` is an array of objects, select the field to use as the description.
41
+ * @defaultValue 'description'
42
+ */
43
+ descriptionKey?: string
44
+ items?: T[]
45
+ size?: RadioGroupVariants['size']
46
+ color?: RadioGroupVariants['color']
47
+ /**
48
+ * The orientation the radio buttons are laid out.
49
+ * @defaultValue 'vertical'
50
+ */
51
+ orientation?: RadioGroupRootProps['orientation']
52
+ class?: any
53
+ ui?: Partial<typeof radioGroup.slots>
54
+ }
55
+
56
+ export type RadioGroupEmits = RadioGroupRootEmits & {
57
+ change: [payload: Event]
58
+ }
59
+
60
+ type SlotProps<T> = (props: { item: T, modelValue?: AcceptableValue }) => any
61
+
62
+ export interface RadioGroupSlots<T> {
63
+ legend(props?: {}): any
64
+ label: SlotProps<T>
65
+ description: SlotProps<T>
66
+ }
67
+
68
+ extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
7
69
  </script>
8
70
 
9
71
  <script setup lang="ts" generic="T extends RadioGroupItem | AcceptableValue">
10
72
  import { computed, useId } from 'vue'
11
- import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator, Label, useForwardPropsEmits } from 'radix-vue'
73
+ import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator, Label, useForwardPropsEmits } from 'reka-ui'
12
74
  import { reactivePick } from '@vueuse/core'
13
75
  import { useFormField } from '../composables/useFormField'
76
+ import { get } from '../utils'
14
77
 
15
78
  const props = withDefaults(defineProps<RadioGroupProps<T>>(), {
16
79
  valueKey: 'value',
80
+ labelKey: 'label',
81
+ descriptionKey: 'description',
17
82
  orientation: 'vertical'
18
83
  })
19
84
  const emits = defineEmits<RadioGroupEmits>()
@@ -21,7 +86,7 @@ const slots = defineSlots<RadioGroupSlots<T>>()
21
86
 
22
87
  const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'orientation', 'loop', 'required'), emits)
23
88
 
24
- const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled } = useFormField<RadioGroupProps<T>>(props)
89
+ const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled } = useFormField<RadioGroupProps<T>>(props, { bind: false })
25
90
  const id = _id.value ?? useId()
26
91
 
27
92
  const ui = computed(() => radioGroup({
@@ -41,11 +106,15 @@ function normalizeItem(item: any) {
41
106
  }
42
107
  }
43
108
 
44
- const value = item[props.valueKey]
109
+ const value = get(item, props.valueKey as string)
110
+ const label = get(item, props.labelKey as string)
111
+ const description = get(item, props.descriptionKey as string)
45
112
 
46
113
  return {
47
114
  ...item,
48
115
  value,
116
+ label,
117
+ description,
49
118
  id: `${id}:${value}`
50
119
  }
51
120
  }
@@ -1,34 +1,136 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import _appConfig from "#build/app.config";
4
- import theme from "#build/ui/select";
5
- const appConfig = _appConfig;
6
- const select = tv({ extend: tv(theme), ...appConfig.ui?.select || {} });
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { SelectRootProps, SelectRootEmits, SelectContentProps, SelectArrowProps, AcceptableValue } from 'reka-ui'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/select'
7
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
9
+ import type { AvatarProps, ChipProps, InputProps } from '../types'
10
+ import type { PartialString, MaybeArrayOfArray, MaybeArrayOfArrayItem, SelectModelValue, SelectModelValueEmits, SelectItemKey } from '../types/utils'
11
+
12
+ const appConfig = _appConfig as AppConfig & { ui: { select: Partial<typeof theme> } }
13
+
14
+ const select = tv({ extend: tv(theme), ...(appConfig.ui?.select || {}) })
15
+
16
+ export interface SelectItem {
17
+ label?: string
18
+ icon?: string
19
+ avatar?: AvatarProps
20
+ chip?: ChipProps
21
+ /**
22
+ * The item type.
23
+ * @defaultValue 'item'
24
+ */
25
+ type?: 'label' | 'separator' | 'item'
26
+ value?: string
27
+ disabled?: boolean
28
+ }
29
+
30
+ type SelectVariants = VariantProps<typeof select>
31
+
32
+ export interface SelectProps<T extends MaybeArrayOfArrayItem<I>, I extends MaybeArrayOfArray<SelectItem | AcceptableValue | boolean> = MaybeArrayOfArray<SelectItem | AcceptableValue | boolean>, V extends SelectItemKey<T> | undefined = undefined, M extends boolean = false> extends Omit<SelectRootProps<T>, 'dir' | 'multiple' | 'modelValue' | 'defaultValue' | 'by'>, UseComponentIconsProps {
33
+ id?: string
34
+ /** The placeholder text when the select is empty. */
35
+ placeholder?: string
36
+ color?: SelectVariants['color']
37
+ variant?: SelectVariants['variant']
38
+ size?: SelectVariants['size']
39
+ /**
40
+ * The icon displayed to open the menu.
41
+ * @defaultValue appConfig.ui.icons.chevronDown
42
+ */
43
+ trailingIcon?: string
44
+ /**
45
+ * The icon displayed when an item is selected.
46
+ * @defaultValue appConfig.ui.icons.check
47
+ */
48
+ selectedIcon?: string
49
+ /**
50
+ * The content of the menu.
51
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
52
+ */
53
+ content?: Omit<SelectContentProps, 'as' | 'asChild' | 'forceMount'>
54
+ /**
55
+ * Display an arrow alongside the menu.
56
+ * @defaultValue false
57
+ */
58
+ arrow?: boolean | Omit<SelectArrowProps, 'as' | 'asChild'>
59
+ /**
60
+ * Render the menu in a portal.
61
+ * @defaultValue true
62
+ */
63
+ portal?: boolean
64
+ /**
65
+ * When `items` is an array of objects, select the field to use as the value.
66
+ * @defaultValue 'value'
67
+ */
68
+ valueKey?: V
69
+ /**
70
+ * When `items` is an array of objects, select the field to use as the label.
71
+ * @defaultValue 'label'
72
+ */
73
+ labelKey?: V
74
+ items?: I
75
+ /** The value of the Select when initially rendered. Use when you do not need to control the state of the Select. */
76
+ defaultValue?: SelectModelValue<T, V, M, T extends { value: infer U } ? U : never>
77
+ /** The controlled value of the Select. Can be bind as `v-model`. */
78
+ modelValue?: SelectModelValue<T, V, M, T extends { value: infer U } ? U : never>
79
+ /** Whether multiple options can be selected or not. */
80
+ multiple?: M & boolean
81
+ /** Highlight the ring color like a focus state. */
82
+ highlight?: boolean
83
+ class?: any
84
+ ui?: PartialString<typeof select.slots>
85
+ }
86
+
87
+ export type SelectEmits<T, V, M extends boolean> = Omit<SelectRootEmits<T>, 'update:modelValue'> & {
88
+ change: [payload: Event]
89
+ blur: [payload: FocusEvent]
90
+ focus: [payload: FocusEvent]
91
+ } & SelectModelValueEmits<T, V, M, T extends { value: infer U } ? U : never>
92
+
93
+ type SlotProps<T> = (props: { item: T, index: number }) => any
94
+
95
+ export interface SelectSlots<T, M extends boolean> {
96
+ 'leading'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean, ui: any }): any
97
+ 'default'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean }): any
98
+ 'trailing'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean, ui: any }): any
99
+ 'item': SlotProps<T>
100
+ 'item-leading': SlotProps<T>
101
+ 'item-label': SlotProps<T>
102
+ 'item-trailing': SlotProps<T>
103
+ }
104
+
105
+ extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
7
106
  </script>
8
107
 
9
- <script setup lang="ts" generic="T extends SelectItem | AcceptableValue">
108
+ <script setup lang="ts" generic="T extends MaybeArrayOfArrayItem<I>, I extends MaybeArrayOfArray<SelectItem | AcceptableValue | boolean> = MaybeArrayOfArray<SelectItem | AcceptableValue | boolean>, V extends SelectItemKey<T> | undefined = undefined, M extends boolean = false">
10
109
  import { computed, toRef } from 'vue'
11
- import { SelectRoot, SelectTrigger, SelectValue, SelectPortal, SelectContent, SelectViewport, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from 'radix-vue'
110
+ import { SelectRoot, SelectArrow, SelectTrigger, SelectPortal, SelectContent, SelectViewport, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from 'reka-ui'
12
111
  import { defu } from 'defu'
13
112
  import { reactivePick } from '@vueuse/core'
14
113
  import { useAppConfig } from '#imports'
15
114
  import { useButtonGroup } from '../composables/useButtonGroup'
16
115
  import { useComponentIcons } from '../composables/useComponentIcons'
17
116
  import { useFormField } from '../composables/useFormField'
117
+ import { get, compare } from '../utils'
18
118
  import UIcon from './Icon.vue'
19
119
  import UAvatar from './Avatar.vue'
20
120
  import UChip from './Chip.vue'
21
121
 
22
- const props = withDefaults(defineProps<SelectProps<T>>(), {
23
- valueKey: 'value',
122
+ const props = withDefaults(defineProps<SelectProps<T, I, V, M>>(), {
123
+ valueKey: 'value' as never,
124
+ labelKey: 'label' as never,
24
125
  portal: true
25
126
  })
26
- const emits = defineEmits<SelectEmits>()
27
- const slots = defineSlots<SelectSlots<T>>()
127
+ const emits = defineEmits<SelectEmits<T, V, M>>()
128
+ const slots = defineSlots<SelectSlots<T, M>>()
28
129
 
29
130
  const appConfig = useAppConfig()
30
- const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required'), emits)
31
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, position: 'popper' }) as SelectContentProps)
131
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required', 'multiple'), emits)
132
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as SelectContentProps)
133
+ const arrowProps = toRef(() => props.arrow as SelectArrowProps)
32
134
 
33
135
  const { emitFormChange, emitFormInput, emitFormBlur, size: formGroupSize, color, id, name, highlight, disabled } = useFormField<InputProps>(props)
34
136
  const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
@@ -42,12 +144,23 @@ const ui = computed(() => select({
42
144
  size: selectSize?.value,
43
145
  loading: props.loading,
44
146
  highlight: highlight.value,
45
- leading: isLeading.value || !!slots.leading,
147
+ leading: isLeading.value || !!props.avatar || !!slots.leading,
46
148
  trailing: isTrailing.value || !!slots.trailing,
47
149
  buttonGroup: orientation.value
48
150
  }))
49
151
 
50
152
  const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0]) ? props.items : [props.items]) as SelectItem[][] : [])
153
+ // eslint-disable-next-line vue/no-dupe-keys
154
+ const items = computed(() => groups.value.flatMap(group => group) as T[])
155
+
156
+ function displayValue(value?: AcceptableValue | AcceptableValue[]): string | undefined {
157
+ if (props.multiple && Array.isArray(value)) {
158
+ return value.map(v => displayValue(v)).filter(Boolean).join(', ')
159
+ }
160
+
161
+ const item = items.value.find(item => compare(typeof item === 'object' ? get(item, props.valueKey as string) : item, value))
162
+ return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
163
+ }
51
164
 
52
165
  function onUpdate(value: any) {
53
166
  // @ts-expect-error - 'target' does not exist in type 'EventInit'
@@ -69,27 +182,39 @@ function onUpdateOpen(value: boolean) {
69
182
  }
70
183
  </script>
71
184
 
185
+ <!-- eslint-disable vue/no-template-shadow -->
72
186
  <template>
73
187
  <SelectRoot
74
188
  :id="id"
75
189
  v-slot="{ modelValue, open }"
76
190
  v-bind="rootProps"
77
191
  :name="name"
192
+ :autocomplete="autocomplete"
78
193
  :disabled="disabled"
79
194
  @update:model-value="onUpdate"
80
195
  @update:open="onUpdateOpen"
81
196
  >
82
- <SelectTrigger :class="ui.base({ class: props.class })">
83
- <span v-if="isLeading || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
84
- <slot name="leading" :model-value="modelValue" :open="open" :ui="ui">
85
- <UIcon v-if="leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
197
+ <SelectTrigger :class="ui.base({ class: [props.class, props.ui?.base] })">
198
+ <span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
199
+ <slot name="leading" :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open" :ui="ui">
200
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
201
+ <UAvatar v-else-if="!!avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
86
202
  </slot>
87
203
  </span>
88
204
 
89
- <SelectValue :placeholder="placeholder ?? '&nbsp;'" :class="ui.value({ class: props.ui?.value })" />
205
+ <slot :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open">
206
+ <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
207
+ <span v-if="displayedModelValue" :class="ui.value({ class: props.ui?.value })">
208
+ {{ displayedModelValue }}
209
+ </span>
210
+ <span v-else :class="ui.placeholder({ class: props.ui?.placeholder })">
211
+ {{ placeholder ?? '&nbsp;' }}
212
+ </span>
213
+ </template>
214
+ </slot>
90
215
 
91
216
  <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
92
- <slot name="trailing" :model-value="modelValue" :open="open" :ui="ui">
217
+ <slot name="trailing" :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open" :ui="ui">
93
218
  <UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
94
219
  </slot>
95
220
  </span>
@@ -101,19 +226,21 @@ function onUpdateOpen(value: boolean) {
101
226
  <SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
102
227
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
103
228
  <SelectLabel v-if="item?.type === 'label'" :class="ui.label({ class: props.ui?.label })">
104
- {{ item.label }}
229
+ {{ get(item, props.labelKey as string) }}
105
230
  </SelectLabel>
231
+
106
232
  <SelectSeparator v-else-if="item?.type === 'separator'" :class="ui.separator({ class: props.ui?.separator })" />
233
+
107
234
  <SelectItem
108
235
  v-else
109
236
  :class="ui.item({ class: props.ui?.item })"
110
237
  :disabled="item.disabled"
111
- :value="typeof item === 'object' ? (item[valueKey as keyof SelectItem] as string) : item"
238
+ :value="typeof item === 'object' ? get(item, props.valueKey as string) : item"
112
239
  >
113
240
  <slot name="item" :item="(item as T)" :index="index">
114
241
  <slot name="item-leading" :item="(item as T)" :index="index">
115
- <UAvatar v-if="item.avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
116
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
242
+ <UIcon v-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
243
+ <UAvatar v-else-if="item.avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
117
244
  <UChip
118
245
  v-else-if="item.chip"
119
246
  :size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
@@ -126,7 +253,7 @@ function onUpdateOpen(value: boolean) {
126
253
 
127
254
  <SelectItemText :class="ui.itemLabel({ class: props.ui?.itemLabel })">
128
255
  <slot name="item-label" :item="(item as T)" :index="index">
129
- {{ typeof item === 'object' ? item.label : item }}
256
+ {{ typeof item === 'object' ? get(item, props.labelKey as string) : item }}
130
257
  </slot>
131
258
  </SelectItemText>
132
259
 
@@ -142,6 +269,8 @@ function onUpdateOpen(value: boolean) {
142
269
  </template>
143
270
  </SelectGroup>
144
271
  </SelectViewport>
272
+
273
+ <SelectArrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
145
274
  </SelectContent>
146
275
  </SelectPortal>
147
276
  </SelectRoot>