@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,12 +1,13 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
- import type { ComboboxRootProps, ComboboxRootEmits, ComboboxItemProps } from 'radix-vue'
2
+ import type { ListboxRootProps, ListboxRootEmits } from 'reka-ui'
4
3
  import type { FuseResult } from 'fuse.js'
5
4
  import type { AppConfig } from '@nuxt/schema'
6
5
  import type { UseFuseOptions } from '@vueuse/integrations/useFuse'
7
6
  import _appConfig from '#build/app.config'
8
7
  import theme from '#build/ui/command-palette'
9
8
  import type { UseComponentIconsProps } from '../composables/useComponentIcons'
9
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
10
+ import { tv } from '../utils/tv'
10
11
  import type { AvatarProps, ButtonProps, ChipProps, KbdProps, InputProps } from '../types'
11
12
  import type { DynamicSlots, PartialString } from '../types/utils'
12
13
 
@@ -14,7 +15,7 @@ const appConfig = _appConfig as AppConfig & { ui: { commandPalette: Partial<type
14
15
 
15
16
  const commandPalette = tv({ extend: tv(theme), ...(appConfig.ui?.commandPalette || {}) })
16
17
 
17
- export interface CommandPaletteItem extends Pick<ComboboxItemProps, 'disabled'> {
18
+ export interface CommandPaletteItem {
18
19
  prefix?: string
19
20
  label?: string
20
21
  suffix?: string
@@ -22,8 +23,11 @@ export interface CommandPaletteItem extends Pick<ComboboxItemProps, 'disabled'>
22
23
  avatar?: AvatarProps
23
24
  chip?: ChipProps
24
25
  kbds?: KbdProps['value'][] | KbdProps[]
26
+ active?: boolean
27
+ loading?: boolean
28
+ disabled?: boolean
25
29
  slot?: string
26
- select?(e?: Event): void
30
+ onSelect?(e?: Event): void
27
31
  }
28
32
 
29
33
  export interface CommandPaletteGroup<T> {
@@ -32,18 +36,18 @@ export interface CommandPaletteGroup<T> {
32
36
  slot?: string
33
37
  items?: T[]
34
38
  /**
35
- * Wether to filter group items with [useFuse](https://vueuse.org/integrations/useFuse).
36
- * When `false`, items will not be filtered which is useful for custom filtering (useAsyncData, useFetch, etc.).
37
- * @defaultValue true
39
+ * Whether to filter group items with [useFuse](https://vueuse.org/integrations/useFuse).
40
+ * When `true`, items will not be filtered which is useful for custom filtering (useAsyncData, useFetch, etc.).
41
+ * @defaultValue false
38
42
  */
39
- filter?: boolean
43
+ ignoreFilter?: boolean
40
44
  /** Filter group items after the search happened. */
41
45
  postFilter?: (searchTerm: string, items: T[]) => T[]
42
46
  /** The icon displayed when an item is highlighted. */
43
47
  highlightedIcon?: string
44
48
  }
45
49
 
46
- export interface CommandPaletteProps<G, T> extends Pick<ComboboxRootProps, 'multiple' | 'disabled' | 'modelValue' | 'defaultValue' | 'selectedValue' | 'resetSearchTermOnBlur'>, Pick<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
50
+ export interface CommandPaletteProps<G, T> extends Pick<ListboxRootProps, 'multiple' | 'disabled' | 'modelValue' | 'defaultValue' | 'highlightOnHover'>, Pick<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
47
51
  /**
48
52
  * The element or component this component should render as.
49
53
  * @defaultValue 'div'
@@ -65,8 +69,14 @@ export interface CommandPaletteProps<G, T> extends Pick<ComboboxRootProps, 'mult
65
69
  */
66
70
  placeholder?: InputProps['placeholder']
67
71
  /**
68
- * Display a close button in the input (useful when inside a `UModal`).
69
- * `{ size: 'md', color: 'gray', variant: 'ghost' }`{lang="ts-type"}
72
+ * Automatically focus the input when component is mounted.
73
+ * @defaultValue true
74
+ */
75
+ autofocus?: boolean
76
+ /**
77
+ * Display a close button in the input (useful when inside a Modal for example).
78
+ * `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
79
+ * @emits 'update:open'
70
80
  * @defaultValue false
71
81
  */
72
82
  close?: ButtonProps | boolean
@@ -78,14 +88,29 @@ export interface CommandPaletteProps<G, T> extends Pick<ComboboxRootProps, 'mult
78
88
  groups?: G[]
79
89
  /**
80
90
  * Options for [useFuse](https://vueuse.org/integrations/useFuse).
81
- * @defaultValue { ignoreLocation: true, threshold: 0.1, keys: ['label', 'suffix'], resultLimit: 12, matchAllWhenSearchEmpty: true }
91
+ * @defaultValue {
92
+ fuseOptions: {
93
+ ignoreLocation: true,
94
+ threshold: 0.1,
95
+ keys: ['label', 'suffix']
96
+ },
97
+ resultLimit: 12,
98
+ matchAllWhenSearchEmpty: true
99
+ }
82
100
  */
83
101
  fuse?: UseFuseOptions<T>
102
+ /**
103
+ * The key used to get the label from the item.
104
+ * @defaultValue 'label'
105
+ */
106
+ labelKey?: string
84
107
  class?: any
85
108
  ui?: PartialString<typeof commandPalette.slots>
86
109
  }
87
110
 
88
- export type CommandPaletteEmits<T> = ComboboxRootEmits<T>
111
+ export type CommandPaletteEmits<T> = ListboxRootEmits<T> & {
112
+ 'update:open': [value: boolean]
113
+ }
89
114
 
90
115
  type SlotProps<T> = (props: { item: T, index: number }) => any
91
116
 
@@ -97,35 +122,42 @@ export type CommandPaletteSlots<G extends { slot?: string }, T extends { slot?:
97
122
  'item-label': SlotProps<T>
98
123
  'item-trailing': SlotProps<T>
99
124
  } & DynamicSlots<G, SlotProps<T>> & DynamicSlots<T, SlotProps<T>>
125
+
126
+ extendDevtoolsMeta({ example: 'CommandPaletteExample', ignoreProps: ['groups'] })
100
127
  </script>
101
128
 
102
129
  <script setup lang="ts" generic="G extends CommandPaletteGroup<T>, T extends CommandPaletteItem">
103
130
  import { computed } from 'vue'
104
- import { ComboboxRoot, ComboboxInput, ComboboxPortal, ComboboxContent, ComboboxEmpty, ComboboxViewport, ComboboxGroup, ComboboxLabel, ComboboxItem, ComboboxItemIndicator, useForwardProps, useForwardPropsEmits } from 'radix-vue'
131
+ import { ListboxRoot, ListboxFilter, ListboxContent, ListboxGroup, ListboxGroupLabel, ListboxItem, ListboxItemIndicator, useForwardProps, useForwardPropsEmits } from 'reka-ui'
105
132
  import { defu } from 'defu'
106
133
  import { reactivePick } from '@vueuse/core'
107
134
  import { useFuse } from '@vueuse/integrations/useFuse'
108
135
  import { useAppConfig } from '#imports'
136
+ import { useLocale } from '../composables/useLocale'
137
+ import { omit, get } from '../utils'
138
+ import { highlight } from '../utils/fuse'
109
139
  import UIcon from './Icon.vue'
110
140
  import UAvatar from './Avatar.vue'
141
+ import UButton from './Button.vue'
111
142
  import UChip from './Chip.vue'
112
143
  import UKbd from './Kbd.vue'
113
144
  import UInput from './Input.vue'
114
- import { omit } from '../utils'
115
- import { highlight } from '../utils/fuse'
116
145
 
117
146
  const props = withDefaults(defineProps<CommandPaletteProps<G, T>>(), {
118
147
  modelValue: '',
119
- placeholder: 'Type a command or search...'
148
+ labelKey: 'label',
149
+ autofocus: true
120
150
  })
121
151
  const emits = defineEmits<CommandPaletteEmits<T>>()
122
152
  const slots = defineSlots<CommandPaletteSlots<G, T>>()
123
153
 
124
154
  const searchTerm = defineModel<string>('searchTerm', { default: '' })
125
155
 
156
+ const { t } = useLocale()
126
157
  const appConfig = useAppConfig()
127
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'disabled', 'multiple', 'modelValue', 'defaultValue', 'selectedValue', 'resetSearchTermOnBlur'), emits)
128
- const inputProps = useForwardProps(reactivePick(props, 'loading', 'loadingIcon', 'placeholder'))
158
+
159
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'disabled', 'multiple', 'modelValue', 'defaultValue', 'highlightOnHover'), emits)
160
+ const inputProps = useForwardProps(reactivePick(props, 'loading', 'loadingIcon'))
129
161
 
130
162
  // eslint-disable-next-line vue/no-dupe-keys
131
163
  const ui = commandPalette()
@@ -134,7 +166,7 @@ const fuse = computed(() => defu({}, props.fuse, {
134
166
  fuseOptions: {
135
167
  ignoreLocation: true,
136
168
  threshold: 0.1,
137
- keys: ['label', 'suffix']
169
+ keys: [props.labelKey, 'suffix']
138
170
  },
139
171
  resultLimit: 12,
140
172
  matchAllWhenSearchEmpty: true
@@ -146,7 +178,7 @@ const items = computed(() => props.groups?.filter((group) => {
146
178
  return false
147
179
  }
148
180
 
149
- if (group.filter === false) {
181
+ if (group.ignoreFilter) {
150
182
  return false
151
183
  }
152
184
 
@@ -165,8 +197,8 @@ function getGroupWithItems(group: G, items: (T & { matches?: FuseResult<T>['matc
165
197
  items: items.slice(0, fuse.value.resultLimit).map((item) => {
166
198
  return {
167
199
  ...item,
168
- labelHtml: highlight<T>(item, searchTerm.value, 'label'),
169
- suffixHtml: highlight<T>(item, searchTerm.value, undefined, ['label'])
200
+ labelHtml: highlight<T>(item, searchTerm.value, props.labelKey),
201
+ suffixHtml: highlight<T>(item, searchTerm.value, undefined, [props.labelKey])
170
202
  }
171
203
  })
172
204
  }
@@ -180,7 +212,7 @@ const groups = computed(() => {
180
212
  }
181
213
 
182
214
  acc[item.group] ||= []
183
- acc[item.group].push({ ...item, matches })
215
+ acc[item.group]?.push({ ...item, matches })
184
216
 
185
217
  return acc
186
218
  }, {} as Record<string, (T & { matches?: FuseResult<T>['matches'] })[]>)
@@ -194,24 +226,26 @@ const groups = computed(() => {
194
226
  return getGroupWithItems(group, items)
195
227
  }).filter(group => !!group)
196
228
 
197
- const nonFuseGroups = props.groups?.filter(group => group.filter === false && group.items?.length).map((group) => {
198
- return getGroupWithItems(group, group.items || [])
199
- }) || []
229
+ const nonFuseGroups = props.groups
230
+ ?.map((group, index) => ({ ...group, index }))
231
+ ?.filter(group => group.ignoreFilter && group.items?.length)
232
+ ?.map(group => ({ ...getGroupWithItems(group, group.items || []), index: group.index })) || []
200
233
 
201
- return [
202
- ...fuseGroups,
203
- ...nonFuseGroups
204
- ]
234
+ return nonFuseGroups.reduce((acc, group) => {
235
+ acc.splice(group.index, 0, group)
236
+ return acc
237
+ }, [...fuseGroups])
205
238
  })
206
239
  </script>
207
240
 
208
241
  <!-- eslint-disable vue/no-v-html -->
209
242
  <template>
210
- <ComboboxRoot v-bind="rootProps" v-model:search-term="searchTerm" open :class="ui.root({ class: [props.class, props.ui?.root] })">
211
- <ComboboxInput as-child>
243
+ <ListboxRoot v-bind="rootProps" :class="ui.root({ class: [props.class, props.ui?.root] })">
244
+ <ListboxFilter v-model="searchTerm" as-child>
212
245
  <UInput
246
+ :placeholder="placeholder || t('commandPalette.placeholder')"
213
247
  variant="none"
214
- autofocus
248
+ :autofocus="autofocus"
215
249
  size="lg"
216
250
  v-bind="inputProps"
217
251
  :icon="icon || appConfig.ui.icons.search"
@@ -223,9 +257,9 @@ const groups = computed(() => {
223
257
  v-if="close"
224
258
  :icon="closeIcon || appConfig.ui.icons.close"
225
259
  size="md"
226
- color="gray"
260
+ color="neutral"
227
261
  variant="ghost"
228
- aria-label="Close"
262
+ :aria-label="t('commandPalette.close')"
229
263
  v-bind="typeof close === 'object' ? close : undefined"
230
264
  :class="ui.close({ class: props.ui?.close })"
231
265
  @click="emits('update:open', false)"
@@ -233,71 +267,70 @@ const groups = computed(() => {
233
267
  </slot>
234
268
  </template>
235
269
  </UInput>
236
- </ComboboxInput>
237
-
238
- <ComboboxPortal disabled>
239
- <ComboboxContent :class="ui.content({ class: props.ui?.content })" :dismissable="false">
240
- <ComboboxEmpty :class="ui.empty({ class: props.ui?.empty })">
241
- <slot name="empty" :search-term="searchTerm">
242
- {{ searchTerm ? `No results for ${searchTerm}` : 'No results' }}
243
- </slot>
244
- </ComboboxEmpty>
245
-
246
- <ComboboxViewport :class="ui.viewport({ class: props.ui?.viewport })">
247
- <ComboboxGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
248
- <ComboboxLabel v-if="group.label" :class="ui.label({ class: props.ui?.label })">
249
- {{ group.label }}
250
- </ComboboxLabel>
251
-
252
- <ComboboxItem
253
- v-for="(item, index) in group.items"
254
- :key="`group-${groupIndex}-${index}`"
255
- :value="omit(item, ['matches' as any, 'group' as any, 'select', 'labelHtml', 'suffixHtml'])"
256
- :disabled="item.disabled"
257
- :class="ui.item({ class: props.ui?.item })"
258
- @select="item.select"
259
- >
260
- <slot :name="item.slot || group.slot || 'item'" :item="item" :index="index">
261
- <slot :name="item.slot ? `${item.slot}-leading` : group.slot ? `${group.slot}-leading` : `item-leading`" :item="item" :index="index">
262
- <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 })" />
263
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
264
- <UChip
265
- v-else-if="item.chip"
266
- :size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
267
- inset
268
- standalone
269
- v-bind="item.chip"
270
- :class="ui.itemLeadingChip({ class: props.ui?.itemLeadingChip })"
271
- />
272
- </slot>
273
-
274
- <span v-if="item.label || !!slots[item.slot ? `${item.slot}-label` : group.slot ? `${group.slot}-label` : `item-label`]" :class="ui.itemLabel({ class: props.ui?.itemLabel })">
275
- <slot :name="item.slot ? `${item.slot}-label` : group.slot ? `${group.slot}-label` : `item-label`" :item="item" :index="index">
276
- <span v-if="item.prefix" :class="ui.itemLabelPrefix({ class: props.ui?.itemLabelPrefix })">{{ item.prefix }}</span>
270
+ </ListboxFilter>
271
+
272
+ <ListboxContent :class="ui.content({ class: props.ui?.content })">
273
+ <div v-if="groups?.length" :class="ui.viewport({ class: props.ui?.viewport })">
274
+ <ListboxGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
275
+ <ListboxGroupLabel v-if="get(group, props.labelKey as string)" :class="ui.label({ class: props.ui?.label })">
276
+ {{ get(group, props.labelKey as string) }}
277
+ </ListboxGroupLabel>
278
+
279
+ <ListboxItem
280
+ v-for="(item, index) in group.items"
281
+ :key="`group-${groupIndex}-${index}`"
282
+ :value="omit(item, ['matches' as any, 'group' as any, 'onSelect', 'labelHtml', 'suffixHtml'])"
283
+ :disabled="item.disabled"
284
+ :class="ui.item({ class: props.ui?.item, active: item.active })"
285
+ @select="item.onSelect"
286
+ >
287
+ <slot :name="item.slot || group.slot || 'item'" :item="item" :index="index">
288
+ <slot :name="item.slot ? `${item.slot}-leading` : group.slot ? `${group.slot}-leading` : `item-leading`" :item="item" :index="index">
289
+ <UIcon v-if="item.loading" :name="loadingIcon || appConfig.ui.icons.loading" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon, loading: true })" />
290
+ <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon, active: item.active })" />
291
+ <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, active: item.active })" />
292
+ <UChip
293
+ v-else-if="item.chip"
294
+ :size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
295
+ inset
296
+ standalone
297
+ v-bind="item.chip"
298
+ :class="ui.itemLeadingChip({ class: props.ui?.itemLeadingChip, active: item.active })"
299
+ />
300
+ </slot>
277
301
 
278
- <span :class="ui.itemLabelBase({ class: props.ui?.itemLabelBase })" v-html="item.labelHtml || item.label" />
302
+ <span v-if="item.labelHtml || get(item, props.labelKey as string) || !!slots[item.slot ? `${item.slot}-label` : group.slot ? `${group.slot}-label` : `item-label`]" :class="ui.itemLabel({ class: props.ui?.itemLabel, active: item.active })">
303
+ <slot :name="item.slot ? `${item.slot}-label` : group.slot ? `${group.slot}-label` : `item-label`" :item="item" :index="index">
304
+ <span v-if="item.prefix" :class="ui.itemLabelPrefix({ class: props.ui?.itemLabelPrefix })">{{ item.prefix }}</span>
279
305
 
280
- <span :class="ui.itemLabelSuffix({ class: props.ui?.itemLabelSuffix })" v-html="item.suffixHtml || item.suffix" />
281
- </slot>
282
- </span>
306
+ <span :class="ui.itemLabelBase({ class: props.ui?.itemLabelBase, active: item.active })" v-html="item.labelHtml || get(item, props.labelKey as string)" />
283
307
 
284
- <span :class="ui.itemTrailing({ class: props.ui?.itemTrailing })">
285
- <slot :name="item.slot ? `${item.slot}-trailing` : group.slot ? `${group.slot}-trailing` : `item-trailing`" :item="item" :index="index">
286
- <span v-if="item.kbds?.length" :class="ui.itemTrailingKbds({ class: props.ui?.itemTrailingKbds })">
287
- <UKbd v-for="(kbd, kbdIndex) in item.kbds" :key="kbdIndex" :size="((props.ui?.itemTrailingKbdsSize || ui.itemTrailingKbdsSize()) as KbdProps['size'])" v-bind="typeof kbd === 'string' ? { value: kbd } : kbd" />
288
- </span>
289
- <UIcon v-else-if="group.highlightedIcon" :name="group.highlightedIcon" :class="ui.itemTrailingHighlightedIcon({ class: props.ui?.itemTrailingHighlightedIcon })" />
290
- </slot>
308
+ <span :class="ui.itemLabelSuffix({ class: props.ui?.itemLabelSuffix, active: item.active })" v-html="item.suffixHtml || item.suffix" />
309
+ </slot>
310
+ </span>
311
+
312
+ <span :class="ui.itemTrailing({ class: props.ui?.itemTrailing })">
313
+ <slot :name="item.slot ? `${item.slot}-trailing` : group.slot ? `${group.slot}-trailing` : `item-trailing`" :item="item" :index="index">
314
+ <span v-if="item.kbds?.length" :class="ui.itemTrailingKbds({ class: props.ui?.itemTrailingKbds })">
315
+ <UKbd v-for="(kbd, kbdIndex) in item.kbds" :key="kbdIndex" :size="((props.ui?.itemTrailingKbdsSize || ui.itemTrailingKbdsSize()) as KbdProps['size'])" v-bind="typeof kbd === 'string' ? { value: kbd } : kbd" />
316
+ </span>
317
+ <UIcon v-else-if="group.highlightedIcon" :name="group.highlightedIcon" :class="ui.itemTrailingHighlightedIcon({ class: props.ui?.itemTrailingHighlightedIcon })" />
318
+ </slot>
291
319
 
292
- <ComboboxItemIndicator as-child>
293
- <UIcon :name="selectedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: props.ui?.itemTrailingIcon })" />
294
- </ComboboxItemIndicator>
295
- </span>
296
- </slot>
297
- </ComboboxItem>
298
- </ComboboxGroup>
299
- </ComboboxViewport>
300
- </ComboboxContent>
301
- </ComboboxPortal>
302
- </ComboboxRoot>
320
+ <ListboxItemIndicator as-child>
321
+ <UIcon :name="selectedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: props.ui?.itemTrailingIcon })" />
322
+ </ListboxItemIndicator>
323
+ </span>
324
+ </slot>
325
+ </ListboxItem>
326
+ </ListboxGroup>
327
+ </div>
328
+
329
+ <div v-else :class="ui.empty({ class: props.ui?.empty })">
330
+ <slot name="empty" :search-term="searchTerm">
331
+ {{ searchTerm ? t('commandPalette.noMatch', { searchTerm }) : t('commandPalette.noData') }}
332
+ </slot>
333
+ </div>
334
+ </ListboxContent>
335
+ </ListboxRoot>
303
336
  </template>
@@ -1,8 +1,9 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
2
  import type { AppConfig } from '@nuxt/schema'
4
3
  import _appConfig from '#build/app.config'
5
4
  import theme from '#build/ui/container'
5
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
+ import { tv } from '../utils/tv'
6
7
 
7
8
  const appConfig = _appConfig as AppConfig & { ui: { container: Partial<typeof theme> } }
8
9
 
@@ -20,10 +21,12 @@ export interface ContainerProps {
20
21
  export interface ContainerSlots {
21
22
  default(props?: {}): any
22
23
  }
24
+
25
+ extendDevtoolsMeta({ example: 'ContainerExample' })
23
26
  </script>
24
27
 
25
28
  <script setup lang="ts">
26
- import { Primitive } from 'radix-vue'
29
+ import { Primitive } from 'reka-ui'
27
30
 
28
31
  const props = defineProps<ContainerProps>()
29
32
  defineSlots<ContainerSlots>()
@@ -1,19 +1,24 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { ContextMenuRootProps, ContextMenuRootEmits, ContextMenuContentProps, ContextMenuTriggerProps, ContextMenuItemProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { ContextMenuRootProps, ContextMenuRootEmits, ContextMenuContentProps } 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/context-menu'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+ import { tv } from '../utils/tv'
7
9
  import type { AvatarProps, KbdProps, LinkProps } from '../types'
8
- import type { DynamicSlots } from '../types/utils'
10
+ import type { DynamicSlots, PartialString } from '../types/utils'
9
11
 
10
12
  const appConfig = _appConfig as AppConfig & { ui: { contextMenu: Partial<typeof theme> } }
11
13
 
12
14
  const contextMenu = tv({ extend: tv(theme), ...(appConfig.ui?.contextMenu || {}) })
13
15
 
14
- export interface ContextMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'>, Pick<ContextMenuItemProps, 'disabled'> {
16
+ type ContextMenuVariants = VariantProps<typeof contextMenu>
17
+
18
+ export interface ContextMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'> {
15
19
  label?: string
16
20
  icon?: string
21
+ color?: ContextMenuVariants['color']
17
22
  avatar?: AvatarProps
18
23
  content?: Omit<ContextMenuContentProps, 'as' | 'asChild' | 'forceMount'>
19
24
  kbds?: KbdProps['value'][] | KbdProps[]
@@ -21,19 +26,31 @@ export interface ContextMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custo
21
26
  * The item type.
22
27
  * @defaultValue 'link'
23
28
  */
24
- type?: 'label' | 'separator' | 'link'
29
+ type?: 'label' | 'separator' | 'link' | 'checkbox'
25
30
  slot?: string
31
+ loading?: boolean
32
+ disabled?: boolean
33
+ checked?: boolean
26
34
  open?: boolean
27
35
  defaultOpen?: boolean
28
36
  children?: ContextMenuItem[] | ContextMenuItem[][]
29
- select?(e: Event): void
37
+ onSelect?(e: Event): void
38
+ onUpdateChecked?(checked: boolean): void
30
39
  }
31
40
 
32
- type ContextMenuVariants = VariantProps<typeof contextMenu>
33
-
34
- export interface ContextMenuProps<T> extends Omit<ContextMenuRootProps, 'dir'>, Pick<ContextMenuTriggerProps, 'disabled'> {
41
+ export interface ContextMenuProps<T> extends Omit<ContextMenuRootProps, 'dir'> {
35
42
  size?: ContextMenuVariants['size']
36
43
  items?: T[] | T[][]
44
+ /**
45
+ * The icon displayed when an item is checked.
46
+ * @defaultValue appConfig.ui.icons.check
47
+ */
48
+ checkedIcon?: string
49
+ /**
50
+ * The icon displayed when an item is loading.
51
+ * @defaultValue appConfig.ui.icons.loading
52
+ */
53
+ loadingIcon?: string
37
54
  /** The content of the menu. */
38
55
  content?: Omit<ContextMenuContentProps, 'as' | 'asChild' | 'forceMount'>
39
56
  /**
@@ -41,8 +58,14 @@ export interface ContextMenuProps<T> extends Omit<ContextMenuRootProps, 'dir'>,
41
58
  * @defaultValue true
42
59
  */
43
60
  portal?: boolean
61
+ /**
62
+ * The key used to get the label from the item.
63
+ * @defaultValue 'label'
64
+ */
65
+ labelKey?: string
66
+ disabled?: boolean
44
67
  class?: any
45
- ui?: Partial<typeof contextMenu.slots>
68
+ ui?: PartialString<typeof contextMenu.slots>
46
69
  }
47
70
 
48
71
  export interface ContextMenuEmits extends ContextMenuRootEmits {}
@@ -56,18 +79,80 @@ export type ContextMenuSlots<T extends { slot?: string }> = {
56
79
  'item-label': SlotProps<T>
57
80
  'item-trailing': SlotProps<T>
58
81
  } & DynamicSlots<T, SlotProps<T>>
82
+
83
+ extendDevtoolsMeta({
84
+ example: 'ContextMenuExample',
85
+ ignoreProps: ['items'],
86
+ defaultProps: {
87
+ items: [
88
+ [{
89
+ label: 'My account',
90
+ avatar: {
91
+ src: 'https://avatars.githubusercontent.com/u/739984?v=4'
92
+ }
93
+ }],
94
+ [{
95
+ label: 'Appearance',
96
+ children: [{
97
+ label: 'System',
98
+ icon: 'i-lucide-monitor'
99
+ }, {
100
+ label: 'Light',
101
+ icon: 'i-lucide-sun'
102
+ }, {
103
+ label: 'Dark',
104
+ icon: 'i-lucide-moon'
105
+ }]
106
+ }],
107
+ [{
108
+ label: 'Show Sidebar',
109
+ kbds: ['meta', 'S']
110
+ }, {
111
+ label: 'Show Toolbar',
112
+ kbds: ['shift', 'meta', 'D']
113
+ }, {
114
+ label: 'Collapse Pinned Tabs',
115
+ disabled: true
116
+ }], [{
117
+ label: 'Refresh the Page'
118
+ }, {
119
+ label: 'Clear Cookies and Refresh'
120
+ }, {
121
+ label: 'Clear Cache and Refresh'
122
+ }, {
123
+ type: 'separator'
124
+ }, {
125
+ label: 'Developer',
126
+ children: [[{
127
+ label: 'View Source',
128
+ kbds: ['option', 'meta', 'U']
129
+ }, {
130
+ label: 'Developer Tools',
131
+ kbds: ['option', 'meta', 'I']
132
+ }], [{
133
+ label: 'Inspect Elements',
134
+ kbds: ['option', 'meta', 'C']
135
+ }], [{
136
+ label: 'JavaScript Console',
137
+ kbds: ['option', 'meta', 'J']
138
+ }]]
139
+ }]
140
+ ]
141
+ }
142
+ })
59
143
  </script>
60
144
 
61
145
  <script setup lang="ts" generic="T extends ContextMenuItem">
62
146
  import { computed, toRef } from 'vue'
63
- import { ContextMenuRoot, ContextMenuTrigger, useForwardPropsEmits } from 'radix-vue'
147
+ import { ContextMenuRoot, ContextMenuTrigger, useForwardPropsEmits } from 'reka-ui'
64
148
  import { reactivePick } from '@vueuse/core'
65
- import UContextMenuContent from './ContextMenuContent.vue'
66
149
  import { omit } from '../utils'
150
+ import UContextMenuContent from './ContextMenuContent.vue'
67
151
 
68
152
  const props = withDefaults(defineProps<ContextMenuProps<T>>(), {
69
153
  portal: true,
70
- modal: true
154
+ modal: true,
155
+ labelKey: 'label'
71
156
  })
72
157
  const emits = defineEmits<ContextMenuEmits>()
73
158
  const slots = defineSlots<ContextMenuSlots<T>>()
@@ -83,17 +168,20 @@ const ui = computed(() => contextMenu({
83
168
 
84
169
  <template>
85
170
  <ContextMenuRoot v-bind="rootProps">
86
- <ContextMenuTrigger v-if="!!slots.default" as-child :disabled="disabled">
171
+ <ContextMenuTrigger v-if="!!slots.default" as-child :disabled="disabled" :class="props.class">
87
172
  <slot />
88
173
  </ContextMenuTrigger>
89
174
 
90
175
  <UContextMenuContent
91
- :class="ui.content({ class: [props.class, props.ui?.content] })"
176
+ :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })"
92
177
  :ui="ui"
93
178
  :ui-override="props.ui"
94
179
  v-bind="contentProps"
95
180
  :items="items"
96
181
  :portal="portal"
182
+ :label-key="labelKey"
183
+ :checked-icon="checkedIcon"
184
+ :loading-icon="loadingIcon"
97
185
  >
98
186
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
99
187
  <slot :name="name" v-bind="slotData" />