@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,9 +1,10 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
- import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverArrowProps } from 'radix-vue'
2
+ import type { PopoverRootProps, HoverCardRootProps, PopoverRootEmits, PopoverContentProps, PopoverArrowProps } 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/popover'
6
+ import { tv } from '../utils/tv'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
8
 
8
9
  const appConfig = _appConfig as AppConfig & { ui: { popover: Partial<typeof theme> } }
9
10
 
@@ -17,7 +18,7 @@ export interface PopoverProps extends PopoverRootProps, Pick<HoverCardRootProps,
17
18
  mode?: 'click' | 'hover'
18
19
  /**
19
20
  * The content of the popover.
20
- * @defaultValue { side: 'bottom', sideOffset: 8 }
21
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
21
22
  */
22
23
  content?: Omit<PopoverContentProps, 'as' | 'asChild' | 'forceMount'>
23
24
  /**
@@ -30,6 +31,11 @@ export interface PopoverProps extends PopoverRootProps, Pick<HoverCardRootProps,
30
31
  * @defaultValue true
31
32
  */
32
33
  portal?: boolean
34
+ /**
35
+ * When `false`, the popover will not close when clicking outside or pressing escape.
36
+ * @defaultValue true
37
+ */
38
+ dismissible?: boolean
33
39
  class?: any
34
40
  ui?: Partial<typeof popover.slots>
35
41
  }
@@ -40,27 +46,41 @@ export interface PopoverSlots {
40
46
  default(props: { open: boolean }): any
41
47
  content(props?: {}): any
42
48
  }
49
+
50
+ extendDevtoolsMeta({ example: 'PopoverExample' })
43
51
  </script>
44
52
 
45
53
  <script setup lang="ts">
46
54
  import { computed, toRef } from 'vue'
47
55
  import { defu } from 'defu'
48
- import { useForwardPropsEmits } from 'radix-vue'
49
- import { Popover, HoverCard } from 'radix-vue/namespaced'
56
+ import { useForwardPropsEmits } from 'reka-ui'
57
+ import { Popover, HoverCard } from 'reka-ui/namespaced'
50
58
  import { reactivePick } from '@vueuse/core'
51
59
 
52
60
  const props = withDefaults(defineProps<PopoverProps>(), {
53
61
  portal: true,
54
62
  mode: 'click',
55
63
  openDelay: 0,
56
- closeDelay: 0
64
+ closeDelay: 0,
65
+ dismissible: true
57
66
  })
58
67
  const emits = defineEmits<PopoverEmits>()
59
68
  const slots = defineSlots<PopoverSlots>()
60
69
 
61
70
  const pick = props.mode === 'hover' ? reactivePick(props, 'defaultOpen', 'open', 'openDelay', 'closeDelay') : reactivePick(props, 'defaultOpen', 'open', 'modal')
62
71
  const rootProps = useForwardPropsEmits(pick, emits)
63
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8 }) as PopoverContentProps)
72
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8 }) as PopoverContentProps)
73
+ const contentEvents = computed(() => {
74
+ if (!props.dismissible) {
75
+ return {
76
+ pointerDownOutside: (e: Event) => e.preventDefault(),
77
+ interactOutside: (e: Event) => e.preventDefault(),
78
+ escapeKeyDown: (e: Event) => e.preventDefault()
79
+ }
80
+ }
81
+
82
+ return {}
83
+ })
64
84
  const arrowProps = toRef(() => props.arrow as PopoverArrowProps)
65
85
 
66
86
  // eslint-disable-next-line vue/no-dupe-keys
@@ -73,12 +93,12 @@ const Component = computed(() => props.mode === 'hover' ? HoverCard : Popover)
73
93
 
74
94
  <template>
75
95
  <Component.Root v-slot="{ open }" v-bind="rootProps">
76
- <Component.Trigger v-if="!!slots.default" as-child>
96
+ <Component.Trigger v-if="!!slots.default" as-child :class="props.class">
77
97
  <slot :open="open" />
78
98
  </Component.Trigger>
79
99
 
80
100
  <Component.Portal :disabled="!portal">
81
- <Component.Content v-bind="contentProps" :class="ui.content({ class: [props.class, props.ui?.content] })">
101
+ <Component.Content v-bind="contentProps" :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-on="contentEvents">
82
102
  <slot name="content" />
83
103
 
84
104
  <Component.Arrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
@@ -1,9 +1,11 @@
1
+ <!-- eslint-disable vue/block-tag-newline -->
1
2
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { ProgressRootProps, ProgressRootEmits } from 'radix-vue'
3
+ import type { VariantProps } from 'tailwind-variants'
4
+ import type { ProgressRootProps, ProgressRootEmits } from 'reka-ui'
4
5
  import type { AppConfig } from '@nuxt/schema'
5
6
  import _appConfig from '#build/app.config'
6
7
  import theme from '#build/ui/progress'
8
+ import { tv } from '../utils/tv'
7
9
 
8
10
  const appConfig = _appConfig as AppConfig & { ui: { progress: Partial<typeof theme> } }
9
11
 
@@ -14,7 +16,7 @@ type ProgressVariants = VariantProps<typeof progress>
14
16
  export interface ProgressProps extends Pick<ProgressRootProps, 'getValueLabel' | 'modelValue'> {
15
17
  /**
16
18
  * The element or component this component should render as.
17
- * @defaultValue `div`
19
+ * @defaultValue 'div'
18
20
  */
19
21
  as?: any
20
22
  /** The maximum progress value. */
@@ -42,12 +44,14 @@ export type ProgressSlots = {
42
44
  } & {
43
45
  [key: string]: (props: { step: number }) => any
44
46
  }
47
+
45
48
  </script>
46
49
 
47
50
  <script setup lang="ts">
48
51
  import { computed } from 'vue'
49
- import { ProgressIndicator, ProgressRoot, useForwardPropsEmits } from 'radix-vue'
52
+ import { Primitive, ProgressRoot, ProgressIndicator, useForwardPropsEmits } from 'reka-ui'
50
53
  import { reactivePick } from '@vueuse/core'
54
+ import { useLocale } from '../composables/useLocale'
51
55
 
52
56
  const props = withDefaults(defineProps<ProgressProps>(), {
53
57
  inverted: false,
@@ -55,9 +59,11 @@ const props = withDefaults(defineProps<ProgressProps>(), {
55
59
  orientation: 'horizontal'
56
60
  })
57
61
  const emits = defineEmits<ProgressEmits>()
58
- defineSlots<ProgressSlots>()
62
+ const slots = defineSlots<ProgressSlots>()
63
+
64
+ const { dir } = useLocale()
59
65
 
60
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'getValueLabel', 'modelValue'), emits)
66
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'getValueLabel', 'modelValue'), emits)
61
67
 
62
68
  const isIndeterminate = computed(() => rootProps.value.modelValue === null)
63
69
  const hasSteps = computed(() => Array.isArray(props.max))
@@ -91,8 +97,20 @@ const indicatorStyle = computed(() => {
91
97
  return
92
98
  }
93
99
 
94
- return {
95
- transform: `translate${props.orientation === 'vertical' ? 'Y' : 'X'}(${props.inverted ? '' : '-'}${100 - percent.value}%)`
100
+ if (props.orientation === 'vertical') {
101
+ return {
102
+ transform: `translateY(${props.inverted ? '' : '-'}${100 - percent.value}%)`
103
+ }
104
+ } else {
105
+ if (dir.value === 'rtl') {
106
+ return {
107
+ transform: `translateX(${props.inverted ? '-' : ''}${100 - percent.value}%)`
108
+ }
109
+ } else {
110
+ return {
111
+ transform: `translateX(${props.inverted ? '' : '-'}${100 - percent.value}%)`
112
+ }
113
+ }
96
114
  }
97
115
  })
98
116
 
@@ -142,8 +160,8 @@ const ui = computed(() => progress({
142
160
  </script>
143
161
 
144
162
  <template>
145
- <div :class="ui.root({ class: [props.class, props.ui?.root] })">
146
- <div v-if="!isIndeterminate && (status || $slots.status)" :class="ui.status({ class: props.ui?.status })" :style="statusStyle">
163
+ <Primitive :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })">
164
+ <div v-if="!isIndeterminate && (status || !!slots.status)" :class="ui.status({ class: props.ui?.status })" :style="statusStyle">
147
165
  <slot name="status" :percent="percent">
148
166
  {{ percent }}%
149
167
  </slot>
@@ -160,5 +178,5 @@ const ui = computed(() => progress({
160
178
  </slot>
161
179
  </div>
162
180
  </div>
163
- </div>
181
+ </Primitive>
164
182
  </template>
@@ -1,10 +1,11 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { RadioGroupRootProps, RadioGroupRootEmits, RadioGroupItemProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { RadioGroupRootProps, RadioGroupRootEmits, AcceptableValue } 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/radio-group'
7
- import type { AcceptableValue } from '../types/utils'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+ import { tv } from '../utils/tv'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { radioGroup: Partial<typeof theme> } }
10
11
 
@@ -12,15 +13,17 @@ const radioGroup = tv({ extend: tv(theme), ...(appConfig.ui?.radioGroup || {}) }
12
13
 
13
14
  type RadioGroupVariants = VariantProps<typeof radioGroup>
14
15
 
15
- export interface RadioGroupItem extends Pick<RadioGroupItemProps, 'disabled' | 'value'> {
16
+ export interface RadioGroupItem {
16
17
  label?: string
17
18
  description?: string
19
+ disabled?: boolean
20
+ value?: string
18
21
  }
19
22
 
20
23
  export interface RadioGroupProps<T> extends Pick<RadioGroupRootProps, 'defaultValue' | 'disabled' | 'loop' | 'modelValue' | 'name' | 'required'> {
21
24
  /**
22
25
  * The element or component this component should render as.
23
- * @defaultValue `div`
26
+ * @defaultValue 'div'
24
27
  */
25
28
  as?: any
26
29
  legend?: string
@@ -29,6 +32,16 @@ export interface RadioGroupProps<T> extends Pick<RadioGroupRootProps, 'defaultVa
29
32
  * @defaultValue 'value'
30
33
  */
31
34
  valueKey?: string
35
+ /**
36
+ * When `items` is an array of objects, select the field to use as the label.
37
+ * @defaultValue 'label'
38
+ */
39
+ labelKey?: string
40
+ /**
41
+ * When `items` is an array of objects, select the field to use as the description.
42
+ * @defaultValue 'description'
43
+ */
44
+ descriptionKey?: string
32
45
  items?: T[]
33
46
  size?: RadioGroupVariants['size']
34
47
  color?: RadioGroupVariants['color']
@@ -45,23 +58,28 @@ export type RadioGroupEmits = RadioGroupRootEmits & {
45
58
  change: [payload: Event]
46
59
  }
47
60
 
48
- type SlotProps<T> = (props: { item: T, modelValue?: string }) => any
61
+ type SlotProps<T> = (props: { item: T, modelValue?: AcceptableValue }) => any
49
62
 
50
63
  export interface RadioGroupSlots<T> {
51
64
  legend(props?: {}): any
52
65
  label: SlotProps<T>
53
66
  description: SlotProps<T>
54
67
  }
68
+
69
+ extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
55
70
  </script>
56
71
 
57
72
  <script setup lang="ts" generic="T extends RadioGroupItem | AcceptableValue">
58
73
  import { computed, useId } from 'vue'
59
- import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator, Label, useForwardPropsEmits } from 'radix-vue'
74
+ import { RadioGroupRoot, RadioGroupItem, RadioGroupIndicator, Label, useForwardPropsEmits } from 'reka-ui'
60
75
  import { reactivePick } from '@vueuse/core'
61
76
  import { useFormField } from '../composables/useFormField'
77
+ import { get } from '../utils'
62
78
 
63
79
  const props = withDefaults(defineProps<RadioGroupProps<T>>(), {
64
80
  valueKey: 'value',
81
+ labelKey: 'label',
82
+ descriptionKey: 'description',
65
83
  orientation: 'vertical'
66
84
  })
67
85
  const emits = defineEmits<RadioGroupEmits>()
@@ -89,11 +107,15 @@ function normalizeItem(item: any) {
89
107
  }
90
108
  }
91
109
 
92
- const value = item[props.valueKey]
110
+ const value = get(item, props.valueKey as string)
111
+ const label = get(item, props.labelKey as string)
112
+ const description = get(item, props.descriptionKey as string)
93
113
 
94
114
  return {
95
115
  ...item,
96
116
  value,
117
+ label,
118
+ description,
97
119
  id: `${id}:${value}`
98
120
  }
99
121
  }
@@ -1,18 +1,20 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { SelectRootProps, SelectRootEmits, SelectContentProps, SelectArrowProps, SelectItemProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { SelectRootProps, SelectRootEmits, SelectContentProps, SelectArrowProps, AcceptableValue } 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/select'
7
7
  import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
9
+ import { tv } from '../utils/tv'
8
10
  import type { AvatarProps, ChipProps, InputProps } from '../types'
9
- import type { AcceptableValue, PartialString } from '../types/utils'
11
+ import type { PartialString, MaybeArrayOfArray, MaybeArrayOfArrayItem, SelectModelValue, SelectModelValueEmits, SelectItemKey } from '../types/utils'
10
12
 
11
13
  const appConfig = _appConfig as AppConfig & { ui: { select: Partial<typeof theme> } }
12
14
 
13
15
  const select = tv({ extend: tv(theme), ...(appConfig.ui?.select || {}) })
14
16
 
15
- export interface SelectItem extends Pick<SelectItemProps, 'disabled' | 'value'> {
17
+ export interface SelectItem {
16
18
  label?: string
17
19
  icon?: string
18
20
  avatar?: AvatarProps
@@ -22,11 +24,13 @@ export interface SelectItem extends Pick<SelectItemProps, 'disabled' | 'value'>
22
24
  * @defaultValue 'item'
23
25
  */
24
26
  type?: 'label' | 'separator' | 'item'
27
+ value?: string
28
+ disabled?: boolean
25
29
  }
26
30
 
27
31
  type SelectVariants = VariantProps<typeof select>
28
32
 
29
- export interface SelectProps<T> extends Omit<SelectRootProps, 'dir'>, UseComponentIconsProps {
33
+ 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 {
30
34
  id?: string
31
35
  /** The placeholder text when the select is empty. */
32
36
  placeholder?: string
@@ -45,7 +49,7 @@ export interface SelectProps<T> extends Omit<SelectRootProps, 'dir'>, UseCompone
45
49
  selectedIcon?: string
46
50
  /**
47
51
  * The content of the menu.
48
- * @defaultValue { side: 'bottom', sideOffset: 8, position: 'popper' }
52
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
49
53
  */
50
54
  content?: Omit<SelectContentProps, 'as' | 'asChild' | 'forceMount'>
51
55
  /**
@@ -62,55 +66,72 @@ export interface SelectProps<T> extends Omit<SelectRootProps, 'dir'>, UseCompone
62
66
  * When `items` is an array of objects, select the field to use as the value.
63
67
  * @defaultValue 'value'
64
68
  */
65
- valueKey?: string
66
- items?: T[] | T[][]
69
+ valueKey?: V
70
+ /**
71
+ * When `items` is an array of objects, select the field to use as the label.
72
+ * @defaultValue 'label'
73
+ */
74
+ labelKey?: V
75
+ items?: I
76
+ /** The value of the Select when initially rendered. Use when you do not need to control the state of the Select. */
77
+ defaultValue?: SelectModelValue<T, V, M, T extends { value: infer U } ? U : never>
78
+ /** The controlled value of the Select. Can be bind as `v-model`. */
79
+ modelValue?: SelectModelValue<T, V, M, T extends { value: infer U } ? U : never>
80
+ /** Whether multiple options can be selected or not. */
81
+ multiple?: M & boolean
67
82
  /** Highlight the ring color like a focus state. */
68
83
  highlight?: boolean
69
84
  class?: any
70
85
  ui?: PartialString<typeof select.slots>
71
86
  }
72
87
 
73
- export type SelectEmits = SelectRootEmits & {
88
+ export type SelectEmits<T, V, M extends boolean> = Omit<SelectRootEmits<T>, 'update:modelValue'> & {
74
89
  change: [payload: Event]
75
90
  blur: [payload: FocusEvent]
76
91
  focus: [payload: FocusEvent]
77
- }
92
+ } & SelectModelValueEmits<T, V, M, T extends { value: infer U } ? U : never>
78
93
 
79
94
  type SlotProps<T> = (props: { item: T, index: number }) => any
80
95
 
81
- export interface SelectSlots<T> {
82
- 'leading'(props: { modelValue: string, open: boolean, ui: any }): any
83
- 'trailing'(props: { modelValue: string, open: boolean, ui: any }): any
96
+ export interface SelectSlots<T, M extends boolean> {
97
+ 'leading'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean, ui: any }): any
98
+ 'default'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean }): any
99
+ 'trailing'(props: { modelValue?: M extends true ? AcceptableValue[] : AcceptableValue, open: boolean, ui: any }): any
84
100
  'item': SlotProps<T>
85
101
  'item-leading': SlotProps<T>
86
102
  'item-label': SlotProps<T>
87
103
  'item-trailing': SlotProps<T>
88
104
  }
105
+
106
+ extendDevtoolsMeta({ defaultProps: { items: ['Option 1', 'Option 2', 'Option 3'] } })
89
107
  </script>
90
108
 
91
- <script setup lang="ts" generic="T extends SelectItem | AcceptableValue">
109
+ <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">
92
110
  import { computed, toRef } from 'vue'
93
- import { SelectRoot, SelectTrigger, SelectValue, SelectPortal, SelectContent, SelectViewport, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from 'radix-vue'
111
+ import { SelectRoot, SelectArrow, SelectTrigger, SelectPortal, SelectContent, SelectViewport, SelectLabel, SelectGroup, SelectItem, SelectItemIndicator, SelectItemText, SelectSeparator, useForwardPropsEmits } from 'reka-ui'
94
112
  import { defu } from 'defu'
95
113
  import { reactivePick } from '@vueuse/core'
96
114
  import { useAppConfig } from '#imports'
97
115
  import { useButtonGroup } from '../composables/useButtonGroup'
98
116
  import { useComponentIcons } from '../composables/useComponentIcons'
99
117
  import { useFormField } from '../composables/useFormField'
118
+ import { get, compare } from '../utils'
100
119
  import UIcon from './Icon.vue'
101
120
  import UAvatar from './Avatar.vue'
102
121
  import UChip from './Chip.vue'
103
122
 
104
- const props = withDefaults(defineProps<SelectProps<T>>(), {
105
- valueKey: 'value',
123
+ const props = withDefaults(defineProps<SelectProps<T, I, V, M>>(), {
124
+ valueKey: 'value' as never,
125
+ labelKey: 'label' as never,
106
126
  portal: true
107
127
  })
108
- const emits = defineEmits<SelectEmits>()
109
- const slots = defineSlots<SelectSlots<T>>()
128
+ const emits = defineEmits<SelectEmits<T, V, M>>()
129
+ const slots = defineSlots<SelectSlots<T, M>>()
110
130
 
111
131
  const appConfig = useAppConfig()
112
- const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required'), emits)
113
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, position: 'popper' }) as SelectContentProps)
132
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required', 'multiple'), emits)
133
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as SelectContentProps)
134
+ const arrowProps = toRef(() => props.arrow as SelectArrowProps)
114
135
 
115
136
  const { emitFormChange, emitFormInput, emitFormBlur, size: formGroupSize, color, id, name, highlight, disabled } = useFormField<InputProps>(props)
116
137
  const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
@@ -124,12 +145,23 @@ const ui = computed(() => select({
124
145
  size: selectSize?.value,
125
146
  loading: props.loading,
126
147
  highlight: highlight.value,
127
- leading: isLeading.value || !!slots.leading,
148
+ leading: isLeading.value || !!props.avatar || !!slots.leading,
128
149
  trailing: isTrailing.value || !!slots.trailing,
129
150
  buttonGroup: orientation.value
130
151
  }))
131
152
 
132
153
  const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0]) ? props.items : [props.items]) as SelectItem[][] : [])
154
+ // eslint-disable-next-line vue/no-dupe-keys
155
+ const items = computed(() => groups.value.flatMap(group => group) as T[])
156
+
157
+ function displayValue(value?: AcceptableValue | AcceptableValue[]): string | undefined {
158
+ if (props.multiple && Array.isArray(value)) {
159
+ return value.map(v => displayValue(v)).filter(Boolean).join(', ')
160
+ }
161
+
162
+ const item = items.value.find(item => compare(typeof item === 'object' ? get(item as Record<string, any>, props.valueKey as string) : item, value))
163
+ return item && (typeof item === 'object' ? get(item, props.labelKey as string) : item)
164
+ }
133
165
 
134
166
  function onUpdate(value: any) {
135
167
  // @ts-expect-error - 'target' does not exist in type 'EventInit'
@@ -151,27 +183,39 @@ function onUpdateOpen(value: boolean) {
151
183
  }
152
184
  </script>
153
185
 
186
+ <!-- eslint-disable vue/no-template-shadow -->
154
187
  <template>
155
188
  <SelectRoot
156
189
  :id="id"
157
190
  v-slot="{ modelValue, open }"
158
191
  v-bind="rootProps"
159
192
  :name="name"
193
+ :autocomplete="autocomplete"
160
194
  :disabled="disabled"
161
195
  @update:model-value="onUpdate"
162
196
  @update:open="onUpdateOpen"
163
197
  >
164
- <SelectTrigger :class="ui.base({ class: props.class })">
165
- <span v-if="isLeading || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
166
- <slot name="leading" :model-value="modelValue" :open="open" :ui="ui">
167
- <UIcon v-if="leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
198
+ <SelectTrigger :class="ui.base({ class: [props.class, props.ui?.base] })">
199
+ <span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
200
+ <slot name="leading" :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open" :ui="ui">
201
+ <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
202
+ <UAvatar v-else-if="!!avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
168
203
  </slot>
169
204
  </span>
170
205
 
171
- <SelectValue :placeholder="placeholder ?? '&nbsp;'" :class="ui.value({ class: props.ui?.value })" />
206
+ <slot :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open">
207
+ <template v-for="displayedModelValue in [displayValue(modelValue)]" :key="displayedModelValue">
208
+ <span v-if="displayedModelValue" :class="ui.value({ class: props.ui?.value })">
209
+ {{ displayedModelValue }}
210
+ </span>
211
+ <span v-else :class="ui.placeholder({ class: props.ui?.placeholder })">
212
+ {{ placeholder ?? '&nbsp;' }}
213
+ </span>
214
+ </template>
215
+ </slot>
172
216
 
173
217
  <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
174
- <slot name="trailing" :model-value="modelValue" :open="open" :ui="ui">
218
+ <slot name="trailing" :model-value="(modelValue as M extends true ? AcceptableValue[] : AcceptableValue)" :open="open" :ui="ui">
175
219
  <UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
176
220
  </slot>
177
221
  </span>
@@ -183,19 +227,21 @@ function onUpdateOpen(value: boolean) {
183
227
  <SelectGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
184
228
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
185
229
  <SelectLabel v-if="item?.type === 'label'" :class="ui.label({ class: props.ui?.label })">
186
- {{ item.label }}
230
+ {{ get(item, props.labelKey as string) }}
187
231
  </SelectLabel>
232
+
188
233
  <SelectSeparator v-else-if="item?.type === 'separator'" :class="ui.separator({ class: props.ui?.separator })" />
234
+
189
235
  <SelectItem
190
236
  v-else
191
237
  :class="ui.item({ class: props.ui?.item })"
192
238
  :disabled="item.disabled"
193
- :value="typeof item === 'object' ? (item[valueKey as keyof SelectItem] as string) : item"
239
+ :value="typeof item === 'object' ? get(item, props.valueKey as string) : item"
194
240
  >
195
241
  <slot name="item" :item="(item as T)" :index="index">
196
242
  <slot name="item-leading" :item="(item as T)" :index="index">
197
- <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 })" />
198
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
243
+ <UIcon v-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
244
+ <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 })" />
199
245
  <UChip
200
246
  v-else-if="item.chip"
201
247
  :size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
@@ -208,7 +254,7 @@ function onUpdateOpen(value: boolean) {
208
254
 
209
255
  <SelectItemText :class="ui.itemLabel({ class: props.ui?.itemLabel })">
210
256
  <slot name="item-label" :item="(item as T)" :index="index">
211
- {{ typeof item === 'object' ? item.label : item }}
257
+ {{ typeof item === 'object' ? get(item, props.labelKey as string) : item }}
212
258
  </slot>
213
259
  </SelectItemText>
214
260
 
@@ -224,6 +270,8 @@ function onUpdateOpen(value: boolean) {
224
270
  </template>
225
271
  </SelectGroup>
226
272
  </SelectViewport>
273
+
274
+ <SelectArrow v-if="!!arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" />
227
275
  </SelectContent>
228
276
  </SelectPortal>
229
277
  </SelectRoot>