@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,36 +1,41 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
- import type { ContextMenuContentProps as RadixContextMenuContentProps, ContextMenuContentEmits as RadixContextMenuContentEmits } from 'radix-vue'
2
+ import type { ContextMenuContentProps as RekaContextMenuContentProps, ContextMenuContentEmits as RekaContextMenuContentEmits } from 'reka-ui'
4
3
  import theme from '#build/ui/context-menu'
4
+ import { tv } from '../utils/tv'
5
5
  import type { KbdProps, AvatarProps, ContextMenuItem, ContextMenuSlots } from '../types'
6
6
 
7
7
  const _contextMenu = tv(theme)()
8
8
 
9
- interface ContextMenuContentProps<T> extends Omit<RadixContextMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
9
+ interface ContextMenuContentProps<T> extends Omit<RekaContextMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
10
10
  items?: T[] | T[][]
11
11
  portal?: boolean
12
12
  sub?: boolean
13
+ labelKey: string
14
+ checkedIcon?: string
15
+ loadingIcon?: string
13
16
  class?: any
14
17
  ui: typeof _contextMenu
15
18
  uiOverride?: any
16
19
  }
17
20
 
18
- interface ContextMenuContentEmits extends RadixContextMenuContentEmits {}
21
+ interface ContextMenuContentEmits extends RekaContextMenuContentEmits {}
19
22
  </script>
20
23
 
21
24
  <script setup lang="ts" generic="T extends ContextMenuItem">
22
25
  import { computed } from 'vue'
23
- import { ContextMenu } from 'radix-vue/namespaced'
24
- import { useForwardPropsEmits } from 'radix-vue'
26
+ import { ContextMenu } from 'reka-ui/namespaced'
27
+ import { useForwardPropsEmits } from 'reka-ui'
25
28
  import { reactiveOmit, createReusableTemplate } from '@vueuse/core'
26
29
  import { useAppConfig } from '#imports'
30
+ import { omit, get } from '../utils'
31
+ import { pickLinkProps } from '../utils/link'
27
32
  import ULinkBase from './LinkBase.vue'
28
33
  import ULink from './Link.vue'
29
34
  import UAvatar from './Avatar.vue'
30
35
  import UIcon from './Icon.vue'
31
36
  import UKbd from './Kbd.vue'
32
- import { omit } from '../utils'
33
- import { pickLinkProps } from '../utils/link'
37
+ // eslint-disable-next-line import/no-self-import
38
+ import UContextMenuContent from './ContextMenuContent.vue'
34
39
 
35
40
  const props = defineProps<ContextMenuContentProps<T>>()
36
41
  const emits = defineEmits<ContextMenuContentEmits>()
@@ -49,25 +54,30 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
49
54
  <DefineItemTemplate v-slot="{ item, active, index }">
50
55
  <slot :name="item.slot || 'item'" :item="(item as T)" :index="index">
51
56
  <slot :name="item.slot ? `${item.slot}-leading`: 'item-leading'" :item="(item as T)" :active="active" :index="index">
52
- <UAvatar v-if="item.avatar" :size="((props.uiOverride?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: uiOverride?.itemLeadingAvatar, active })" />
53
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: uiOverride?.itemLeadingIcon, active })" />
57
+ <UIcon v-if="item.loading" :name="loadingIcon || appConfig.ui.icons.loading" :class="ui.itemLeadingIcon({ class: uiOverride?.itemLeadingIcon, color: item?.color, loading: true })" />
58
+ <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: uiOverride?.itemLeadingIcon, color: item?.color, active })" />
59
+ <UAvatar v-else-if="item.avatar" :size="((props.uiOverride?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: uiOverride?.itemLeadingAvatar, active })" />
54
60
  </slot>
55
61
 
56
- <span v-if="item.label || !!slots[item.slot ? `${item.slot}-label`: 'item-label']" :class="ui.itemLabel({ class: uiOverride?.itemLabel, active })">
62
+ <span v-if="get(item, props.labelKey as string) || !!slots[item.slot ? `${item.slot}-label`: 'item-label']" :class="ui.itemLabel({ class: uiOverride?.itemLabel, active })">
57
63
  <slot :name="item.slot ? `${item.slot}-label`: 'item-label'" :item="(item as T)" :active="active" :index="index">
58
- {{ item.label }}
64
+ {{ get(item, props.labelKey as string) }}
59
65
  </slot>
60
66
 
61
- <UIcon v-if="item.target === '_blank'" :name="appConfig.ui.icons.external" :class="ui.itemLabelExternalIcon({ class: uiOverride?.itemLabelExternalIcon, active })" />
67
+ <UIcon v-if="item.target === '_blank'" :name="appConfig.ui.icons.external" :class="ui.itemLabelExternalIcon({ class: uiOverride?.itemLabelExternalIcon, color: item?.color, active })" />
62
68
  </span>
63
69
 
64
- <span v-if="item.children?.length || item.kbds?.length || !!slots[item.slot ? `${item.slot}-trailing`: 'item-trailing']" :class="ui.itemTrailing({ class: uiOverride?.itemTrailing })">
70
+ <span :class="ui.itemTrailing({ class: uiOverride?.itemTrailing })">
65
71
  <slot :name="item.slot ? `${item.slot}-trailing`: 'item-trailing'" :item="(item as T)" :active="active" :index="index">
66
- <UIcon v-if="item.children?.length" :name="appConfig.ui.icons.chevronRight" :class="ui.itemTrailingIcon({ class: uiOverride?.itemTrailingIcon, active })" />
72
+ <UIcon v-if="item.children?.length" :name="appConfig.ui.icons.chevronRight" :class="ui.itemTrailingIcon({ class: uiOverride?.itemTrailingIcon, color: item?.color, active })" />
67
73
  <span v-else-if="item.kbds?.length" :class="ui.itemTrailingKbds({ class: uiOverride?.itemTrailingKbds })">
68
74
  <UKbd v-for="(kbd, kbdIndex) in item.kbds" :key="kbdIndex" :size="((props.uiOverride?.itemTrailingKbdsSize || ui.itemTrailingKbdsSize()) as KbdProps['size'])" v-bind="typeof kbd === 'string' ? { value: kbd } : kbd" />
69
75
  </span>
70
76
  </slot>
77
+
78
+ <ContextMenu.ItemIndicator as-child>
79
+ <UIcon :name="checkedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: uiOverride?.itemTrailingIcon, color: item?.color })" />
80
+ </ContextMenu.ItemIndicator>
71
81
  </span>
72
82
  </slot>
73
83
  </DefineItemTemplate>
@@ -85,8 +95,8 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
85
95
  as="button"
86
96
  type="button"
87
97
  :disabled="item.disabled"
88
- :text-value="item.label"
89
- :class="ui.item({ class: uiOverride?.item })"
98
+ :text-value="get(item, props.labelKey as string)"
99
+ :class="ui.item({ class: uiOverride?.item, color: item?.color })"
90
100
  >
91
101
  <ReuseItemTemplate :item="item" :index="index" />
92
102
  </ContextMenu.SubTrigger>
@@ -99,6 +109,9 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
99
109
  :portal="portal"
100
110
  :items="item.children"
101
111
  :align-offset="-4"
112
+ :label-key="labelKey"
113
+ :checked-icon="checkedIcon"
114
+ :loading-icon="loadingIcon"
102
115
  v-bind="item.content"
103
116
  >
104
117
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
@@ -106,9 +119,26 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
106
119
  </template>
107
120
  </UContextMenuContent>
108
121
  </ContextMenu.Sub>
109
- <ContextMenu.Item v-else as-child :disabled="item.disabled" :text-value="item.label" @select="item.select">
122
+ <ContextMenu.CheckboxItem
123
+ v-else-if="item.type === 'checkbox'"
124
+ :model-value="item.checked"
125
+ :disabled="item.disabled"
126
+ :text-value="get(item, props.labelKey as string)"
127
+ :class="ui.item({ class: [uiOverride?.item, item.class], color: item?.color })"
128
+ @update:model-value="item.onUpdateChecked"
129
+ @select="item.onSelect"
130
+ >
131
+ <ReuseItemTemplate :item="item" :index="index" />
132
+ </ContextMenu.CheckboxItem>
133
+ <ContextMenu.Item
134
+ v-else
135
+ as-child
136
+ :disabled="item.disabled"
137
+ :text-value="get(item, props.labelKey as string)"
138
+ @select="item.onSelect"
139
+ >
110
140
  <ULink v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item as Omit<ContextMenuItem, 'type'>)" custom>
111
- <ULinkBase v-bind="slotProps" :class="ui.item({ class: [uiOverride?.item, item.class], active })">
141
+ <ULinkBase v-bind="slotProps" :class="ui.item({ class: [uiOverride?.item, item.class], active, color: item?.color })">
112
142
  <ReuseItemTemplate :item="item" :active="active" :index="index" />
113
143
  </ULinkBase>
114
144
  </ULink>
@@ -1,16 +1,17 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
2
  import type { DrawerRootProps, DrawerRootEmits } from 'vaul-vue'
4
- import type { DialogContentProps } from 'radix-vue'
3
+ import type { DialogContentProps } from 'reka-ui'
5
4
  import type { AppConfig } from '@nuxt/schema'
6
5
  import _appConfig from '#build/app.config'
7
6
  import theme from '#build/ui/drawer'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+ import { tv } from '../utils/tv'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { drawer: Partial<typeof theme> } }
10
11
 
11
12
  const drawer = tv({ extend: tv(theme), ...(appConfig.ui?.drawer || {}) })
12
13
 
13
- export interface DrawerProps extends Pick<DrawerRootProps, 'activeSnapPoint' | 'closeThreshold' | 'defaultOpen' | 'direction' | 'dismissible' | 'fadeFromIndex' | 'fixed' | 'modal' | 'nested' | 'open' | 'scrollLockTimeout' | 'shouldScaleBackground' | 'snapPoints'> {
14
+ export interface DrawerProps extends Pick<DrawerRootProps, 'activeSnapPoint' | 'closeThreshold' | 'defaultOpen' | 'direction' | 'fadeFromIndex' | 'fixed' | 'modal' | 'nested' | 'direction' | 'open' | 'scrollLockTimeout' | 'shouldScaleBackground' | 'snapPoints'> {
14
15
  /**
15
16
  * The element or component this component should render as.
16
17
  * @defaultValue 'div'
@@ -25,11 +26,21 @@ export interface DrawerProps extends Pick<DrawerRootProps, 'activeSnapPoint' | '
25
26
  * @defaultValue true
26
27
  */
27
28
  overlay?: boolean
29
+ /**
30
+ * Render a handle on the drawer.
31
+ * @defaultValue true
32
+ */
33
+ handle?: boolean
28
34
  /**
29
35
  * Render the drawer in a portal.
30
36
  * @defaultValue true
31
37
  */
32
38
  portal?: boolean
39
+ /**
40
+ * When `false`, the drawer will not close when clicking outside or pressing escape.
41
+ * @defaultValue true
42
+ */
43
+ dismissible?: boolean
33
44
  class?: any
34
45
  ui?: Partial<typeof drawer.slots>
35
46
  }
@@ -46,40 +57,45 @@ export interface DrawerSlots {
46
57
  body(props?: {}): any
47
58
  footer(props?: {}): any
48
59
  }
60
+
61
+ extendDevtoolsMeta({ example: 'DrawerExample' })
49
62
  </script>
50
63
 
51
64
  <script setup lang="ts">
52
- import { toRef } from 'vue'
53
- import { useForwardPropsEmits } from 'radix-vue'
65
+ import { computed, toRef } from 'vue'
66
+ import { useForwardPropsEmits } from 'reka-ui'
54
67
  import { DrawerRoot, DrawerTrigger, DrawerPortal, DrawerOverlay, DrawerContent, DrawerTitle, DrawerDescription } from 'vaul-vue'
55
68
  import { reactivePick } from '@vueuse/core'
56
69
 
57
70
  const props = withDefaults(defineProps<DrawerProps>(), {
71
+ direction: 'bottom',
58
72
  portal: true,
59
- overlay: true
73
+ overlay: true,
74
+ handle: true
60
75
  })
61
76
  const emits = defineEmits<DrawerEmits>()
62
77
  const slots = defineSlots<DrawerSlots>()
63
78
 
64
- const rootProps = useForwardPropsEmits(reactivePick(props, 'activeSnapPoint', 'closeThreshold', 'defaultOpen', 'dismissible', 'fadeFromIndex', 'fixed', 'modal', 'nested', 'open', 'scrollLockTimeout', 'shouldScaleBackground', 'snapPoints'), emits)
79
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'activeSnapPoint', 'closeThreshold', 'defaultOpen', 'dismissible', 'fadeFromIndex', 'fixed', 'modal', 'nested', 'direction', 'open', 'scrollLockTimeout', 'shouldScaleBackground', 'snapPoints'), emits)
65
80
  const contentProps = toRef(() => props.content)
66
81
 
67
- // eslint-disable-next-line vue/no-dupe-keys
68
- const ui = drawer()
82
+ const ui = computed(() => drawer({
83
+ direction: props.direction
84
+ }))
69
85
  </script>
70
86
 
71
87
  <template>
72
88
  <DrawerRoot v-bind="rootProps">
73
- <DrawerTrigger v-if="!!slots.default" as-child>
89
+ <DrawerTrigger v-if="!!slots.default" as-child :class="props.class">
74
90
  <slot />
75
91
  </DrawerTrigger>
76
92
 
77
93
  <DrawerPortal :disabled="!portal">
78
94
  <DrawerOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
79
95
 
80
- <DrawerContent :class="ui.content({ class: [props.class, props.ui?.content] })" v-bind="contentProps">
96
+ <DrawerContent :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-bind="contentProps">
81
97
  <slot name="handle">
82
- <div :class="ui.handle({ class: props.ui?.handle })" />
98
+ <div v-if="handle" :class="ui.handle({ class: props.ui?.handle })" />
83
99
  </slot>
84
100
 
85
101
  <slot name="content">
@@ -1,19 +1,24 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { DropdownMenuRootProps, DropdownMenuRootEmits, DropdownMenuContentProps, DropdownMenuArrowProps, DropdownMenuTriggerProps, DropdownMenuItemProps } from 'radix-vue'
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { DropdownMenuRootProps, DropdownMenuRootEmits, DropdownMenuContentProps, DropdownMenuArrowProps } 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/dropdown-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: { dropdownMenu: Partial<typeof theme> } }
11
13
 
12
14
  const dropdownMenu = tv({ extend: tv(theme), ...(appConfig.ui?.dropdownMenu || {}) })
13
15
 
14
- export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'>, Pick<DropdownMenuItemProps, 'disabled'> {
16
+ type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
17
+
18
+ export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'> {
15
19
  label?: string
16
20
  icon?: string
21
+ color?: DropdownMenuVariants['color']
17
22
  avatar?: AvatarProps
18
23
  content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'>
19
24
  kbds?: KbdProps['value'][] | KbdProps[]
@@ -21,22 +26,34 @@ export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'cust
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?: DropdownMenuItem[] | DropdownMenuItem[][]
29
- select?(e: Event): void
37
+ onSelect?(e: Event): void
38
+ onUpdateChecked?(checked: boolean): void
30
39
  }
31
40
 
32
- type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
33
-
34
- export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'>, Pick<DropdownMenuTriggerProps, 'disabled'> {
41
+ export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'> {
35
42
  size?: DropdownMenuVariants['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
  /**
38
55
  * The content of the menu.
39
- * @defaultValue { side: 'bottom', sideOffset: 8 }
56
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
40
57
  */
41
58
  content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'>
42
59
  /**
@@ -49,8 +66,14 @@ export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'>
49
66
  * @defaultValue true
50
67
  */
51
68
  portal?: boolean
69
+ /**
70
+ * The key used to get the label from the item.
71
+ * @defaultValue 'label'
72
+ */
73
+ labelKey?: string
74
+ disabled?: boolean
52
75
  class?: any
53
- ui?: Partial<typeof dropdownMenu.slots>
76
+ ui?: PartialString<typeof dropdownMenu.slots>
54
77
  }
55
78
 
56
79
  export interface DropdownMenuEmits extends DropdownMenuRootEmits {}
@@ -64,25 +87,75 @@ export type DropdownMenuSlots<T extends { slot?: string }> = {
64
87
  'item-label': SlotProps<T>
65
88
  'item-trailing': SlotProps<T>
66
89
  } & DynamicSlots<T, SlotProps<T>>
90
+
91
+ extendDevtoolsMeta({
92
+ example: 'DropdownMenuExample',
93
+ ignoreProps: ['items'],
94
+ defaultProps: {
95
+ items: [
96
+ [{
97
+ label: 'My account',
98
+ avatar: {
99
+ src: 'https://avatars.githubusercontent.com/u/739984?v=4'
100
+ },
101
+ type: 'label'
102
+ }], [{
103
+ label: 'Profile',
104
+ icon: 'i-lucide-user',
105
+ slot: 'custom'
106
+ }, {
107
+ label: 'Billing',
108
+ icon: 'i-lucide-credit-card',
109
+ kbds: ['meta', 'b']
110
+ }, {
111
+ label: 'Settings',
112
+ icon: 'i-lucide-cog',
113
+ kbds: ['?']
114
+ }], [{
115
+ label: 'Invite users',
116
+ icon: 'i-lucide-user-plus',
117
+ children: [[{
118
+ label: 'Invite by email',
119
+ icon: 'i-lucide-send-horizontal'
120
+ }, {
121
+ label: 'Invite by link',
122
+ icon: 'i-lucide-link',
123
+ kbds: ['meta', 'i']
124
+ }]]
125
+ }],
126
+ [{
127
+ label: 'GitHub',
128
+ icon: 'i-simple-icons-github',
129
+ to: 'https://github.com/nuxt/ui',
130
+ target: '_blank'
131
+ }, {
132
+ label: 'Support',
133
+ icon: 'i-lucide-life-buoy',
134
+ to: '/components/dropdown-menu'
135
+ }]
136
+ ]
137
+ }
138
+ })
67
139
  </script>
68
140
 
69
141
  <script setup lang="ts" generic="T extends DropdownMenuItem">
70
142
  import { computed, toRef } from 'vue'
71
143
  import { defu } from 'defu'
72
- import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuArrow, useForwardPropsEmits } from 'radix-vue'
144
+ import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuArrow, useForwardPropsEmits } from 'reka-ui'
73
145
  import { reactivePick } from '@vueuse/core'
74
- import UDropdownMenuContent from './DropdownMenuContent.vue'
75
146
  import { omit } from '../utils'
147
+ import UDropdownMenuContent from './DropdownMenuContent.vue'
76
148
 
77
149
  const props = withDefaults(defineProps<DropdownMenuProps<T>>(), {
78
150
  portal: true,
79
- modal: true
151
+ modal: true,
152
+ labelKey: 'label'
80
153
  })
81
154
  const emits = defineEmits<DropdownMenuEmits>()
82
155
  const slots = defineSlots<DropdownMenuSlots<T>>()
83
156
 
84
157
  const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultOpen', 'open', 'modal'), emits)
85
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8 }) as DropdownMenuContentProps)
158
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8 }) as DropdownMenuContentProps)
86
159
  const arrowProps = toRef(() => props.arrow as DropdownMenuArrowProps)
87
160
  const proxySlots = omit(slots, ['default']) as Record<string, DropdownMenuSlots<T>[string]>
88
161
 
@@ -93,17 +166,20 @@ const ui = computed(() => dropdownMenu({
93
166
 
94
167
  <template>
95
168
  <DropdownMenuRoot v-slot="{ open }" v-bind="rootProps">
96
- <DropdownMenuTrigger v-if="!!slots.default" as-child :disabled="disabled">
169
+ <DropdownMenuTrigger v-if="!!slots.default" as-child :class="props.class" :disabled="disabled">
97
170
  <slot :open="open" />
98
171
  </DropdownMenuTrigger>
99
172
 
100
173
  <UDropdownMenuContent
101
- :class="ui.content({ class: [props.class, props.ui?.content] })"
174
+ :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })"
102
175
  :ui="ui"
103
176
  :ui-override="props.ui"
104
177
  v-bind="contentProps"
105
178
  :items="items"
106
179
  :portal="portal"
180
+ :label-key="labelKey"
181
+ :checked-icon="checkedIcon"
182
+ :loading-icon="loadingIcon"
107
183
  >
108
184
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
109
185
  <slot :name="name" v-bind="slotData" />
@@ -1,40 +1,47 @@
1
+ <!-- eslint-disable vue/block-tag-newline -->
1
2
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
- import type { DropdownMenuContentProps as RadixDropdownMenuContentProps, DropdownMenuContentEmits as RadixDropdownMenuContentEmits } from 'radix-vue'
3
+ import type { DropdownMenuContentProps as RekaDropdownMenuContentProps, DropdownMenuContentEmits as RekaDropdownMenuContentEmits } from 'reka-ui'
4
4
  import theme from '#build/ui/dropdown-menu'
5
+ import { tv } from '../utils/tv'
5
6
  import type { KbdProps, AvatarProps, DropdownMenuItem, DropdownMenuSlots } from '../types'
6
7
 
7
8
  const _dropdownMenu = tv(theme)()
8
9
 
9
- interface DropdownMenuContentProps<T> extends Omit<RadixDropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
10
+ interface DropdownMenuContentProps<T> extends Omit<RekaDropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
10
11
  items?: T[] | T[][]
11
12
  portal?: boolean
12
13
  sub?: boolean
14
+ labelKey: string
15
+ checkedIcon?: string
16
+ loadingIcon?: string
13
17
  class?: any
14
18
  ui: typeof _dropdownMenu
15
19
  uiOverride?: any
16
20
  }
17
21
 
18
- interface DropdownMenuContentEmits extends RadixDropdownMenuContentEmits {}
22
+ interface DropdownMenuContentEmits extends RekaDropdownMenuContentEmits {}
19
23
 
20
24
  type DropdownMenuContentSlots<T extends { slot?: string }> = Omit<DropdownMenuSlots<T>, 'default'> & {
21
25
  default(props?: {}): any
22
26
  }
27
+
23
28
  </script>
24
29
 
25
30
  <script setup lang="ts" generic="T extends DropdownMenuItem">
26
31
  import { computed } from 'vue'
27
- import { DropdownMenu } from 'radix-vue/namespaced'
28
- import { useForwardPropsEmits } from 'radix-vue'
32
+ import { DropdownMenu } from 'reka-ui/namespaced'
33
+ import { useForwardPropsEmits } from 'reka-ui'
29
34
  import { reactiveOmit, createReusableTemplate } from '@vueuse/core'
30
35
  import { useAppConfig } from '#imports'
36
+ import { omit, get } from '../utils'
37
+ import { pickLinkProps } from '../utils/link'
31
38
  import ULinkBase from './LinkBase.vue'
32
39
  import ULink from './Link.vue'
33
40
  import UAvatar from './Avatar.vue'
34
41
  import UIcon from './Icon.vue'
35
42
  import UKbd from './Kbd.vue'
36
- import { omit } from '../utils'
37
- import { pickLinkProps } from '../utils/link'
43
+ // eslint-disable-next-line import/no-self-import
44
+ import UDropdownMenuContent from './DropdownMenuContent.vue'
38
45
 
39
46
  const props = defineProps<DropdownMenuContentProps<T>>()
40
47
  const emits = defineEmits<DropdownMenuContentEmits>()
@@ -53,25 +60,30 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
53
60
  <DefineItemTemplate v-slot="{ item, active, index }">
54
61
  <slot :name="item.slot || 'item'" :item="(item as T)" :index="index">
55
62
  <slot :name="item.slot ? `${item.slot}-leading`: 'item-leading'" :item="(item as T)" :active="active" :index="index">
56
- <UAvatar v-if="item.avatar" :size="((props.uiOverride?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: uiOverride?.itemLeadingAvatar, active })" />
57
- <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: uiOverride?.itemLeadingIcon, active })" />
63
+ <UIcon v-if="item.loading" :name="loadingIcon || appConfig.ui.icons.loading" :class="ui.itemLeadingIcon({ class: uiOverride?.itemLeadingIcon, color: item?.color, loading: true })" />
64
+ <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: uiOverride?.itemLeadingIcon, color: item?.color, active })" />
65
+ <UAvatar v-else-if="item.avatar" :size="((props.uiOverride?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: uiOverride?.itemLeadingAvatar, active })" />
58
66
  </slot>
59
67
 
60
- <span v-if="item.label || !!slots[item.slot ? `${item.slot}-label`: 'item-label']" :class="ui.itemLabel({ class: uiOverride?.itemLabel, active })">
68
+ <span v-if="get(item, props.labelKey as string) || !!slots[item.slot ? `${item.slot}-label`: 'item-label']" :class="ui.itemLabel({ class: uiOverride?.itemLabel, active })">
61
69
  <slot :name="item.slot ? `${item.slot}-label`: 'item-label'" :item="(item as T)" :active="active" :index="index">
62
- {{ item.label }}
70
+ {{ get(item, props.labelKey as string) }}
63
71
  </slot>
64
72
 
65
- <UIcon v-if="item.target === '_blank'" :name="appConfig.ui.icons.external" :class="ui.itemLabelExternalIcon({ class: uiOverride?.itemLabelExternalIcon, active })" />
73
+ <UIcon v-if="item.target === '_blank'" :name="appConfig.ui.icons.external" :class="ui.itemLabelExternalIcon({ class: uiOverride?.itemLabelExternalIcon, color: item?.color, active })" />
66
74
  </span>
67
75
 
68
- <span v-if="item.children?.length || item.kbds?.length || !!slots[item.slot ? `${item.slot}-trailing`: 'item-trailing']" :class="ui.itemTrailing({ class: uiOverride?.itemTrailing })">
76
+ <span :class="ui.itemTrailing({ class: uiOverride?.itemTrailing })">
69
77
  <slot :name="item.slot ? `${item.slot}-trailing`: 'item-trailing'" :item="(item as T)" :active="active" :index="index">
70
- <UIcon v-if="item.children?.length" :name="appConfig.ui.icons.chevronRight" :class="ui.itemTrailingIcon({ class: uiOverride?.itemTrailingIcon, active })" />
78
+ <UIcon v-if="item.children?.length" :name="appConfig.ui.icons.chevronRight" :class="ui.itemTrailingIcon({ class: uiOverride?.itemTrailingIcon, color: item?.color, active })" />
71
79
  <span v-else-if="item.kbds?.length" :class="ui.itemTrailingKbds({ class: uiOverride?.itemTrailingKbds })">
72
80
  <UKbd v-for="(kbd, kbdIndex) in item.kbds" :key="kbdIndex" :size="((props.uiOverride?.itemTrailingKbdsSize || ui.itemTrailingKbdsSize()) as KbdProps['size'])" v-bind="typeof kbd === 'string' ? { value: kbd } : kbd" />
73
81
  </span>
74
82
  </slot>
83
+
84
+ <DropdownMenu.ItemIndicator as-child>
85
+ <UIcon :name="checkedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: uiOverride?.itemTrailingIcon, color: item?.color })" />
86
+ </DropdownMenu.ItemIndicator>
75
87
  </span>
76
88
  </slot>
77
89
  </DefineItemTemplate>
@@ -89,8 +101,8 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
89
101
  as="button"
90
102
  type="button"
91
103
  :disabled="item.disabled"
92
- :text-value="item.label"
93
- :class="ui.item({ class: uiOverride?.item })"
104
+ :text-value="get(item, props.labelKey as string)"
105
+ :class="ui.item({ class: uiOverride?.item, color: item?.color })"
94
106
  >
95
107
  <ReuseItemTemplate :item="item" :index="index" />
96
108
  </DropdownMenu.SubTrigger>
@@ -106,6 +118,9 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
106
118
  align="start"
107
119
  :align-offset="-4"
108
120
  :side-offset="3"
121
+ :label-key="labelKey"
122
+ :checked-icon="checkedIcon"
123
+ :loading-icon="loadingIcon"
109
124
  v-bind="item.content"
110
125
  >
111
126
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
@@ -113,9 +128,26 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
113
128
  </template>
114
129
  </UDropdownMenuContent>
115
130
  </DropdownMenu.Sub>
116
- <DropdownMenu.Item v-else as-child :disabled="item.disabled" :text-value="item.label" @select="item.select">
131
+ <DropdownMenu.CheckboxItem
132
+ v-else-if="item.type === 'checkbox'"
133
+ :model-value="item.checked"
134
+ :disabled="item.disabled"
135
+ :text-value="get(item, props.labelKey as string)"
136
+ :class="ui.item({ class: [uiOverride?.item, item.class], color: item?.color })"
137
+ @update:model-value="item.onUpdateChecked"
138
+ @select="item.onSelect"
139
+ >
140
+ <ReuseItemTemplate :item="item" :index="index" />
141
+ </DropdownMenu.CheckboxItem>
142
+ <DropdownMenu.Item
143
+ v-else
144
+ as-child
145
+ :disabled="item.disabled"
146
+ :text-value="get(item, props.labelKey as string)"
147
+ @select="item.onSelect"
148
+ >
117
149
  <ULink v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item as Omit<DropdownMenuItem, 'type'>)" custom>
118
- <ULinkBase v-bind="slotProps" :class="ui.item({ class: [uiOverride?.item, item.class], active })">
150
+ <ULinkBase v-bind="slotProps" :class="ui.item({ class: [uiOverride?.item, item.class], color: item?.color, active })">
119
151
  <ReuseItemTemplate :item="item" :active="active" :index="index" />
120
152
  </ULinkBase>
121
153
  </ULink>