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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/.nuxt/ui/accordion.ts +20 -0
  2. package/.nuxt/ui/alert.ts +242 -0
  3. package/.nuxt/ui/avatar-group.ts +40 -0
  4. package/.nuxt/ui/avatar.ts +42 -0
  5. package/.nuxt/ui/badge.ts +194 -0
  6. package/.nuxt/ui/breadcrumb.ts +45 -0
  7. package/.nuxt/ui/button-group.ts +16 -0
  8. package/.nuxt/ui/button.ts +344 -0
  9. package/.nuxt/ui/calendar.ts +85 -0
  10. package/.nuxt/ui/card.ts +8 -0
  11. package/.nuxt/ui/carousel.ts +41 -0
  12. package/.nuxt/ui/checkbox.ts +105 -0
  13. package/.nuxt/ui/chip.ts +67 -0
  14. package/.nuxt/ui/collapsible.ts +6 -0
  15. package/.nuxt/ui/color-picker.ts +39 -0
  16. package/.nuxt/ui/command-palette.ts +50 -0
  17. package/.nuxt/ui/container.ts +3 -0
  18. package/.nuxt/ui/context-menu.ts +198 -0
  19. package/.nuxt/ui/drawer.ts +55 -0
  20. package/.nuxt/ui/dropdown-menu.ts +199 -0
  21. package/.nuxt/ui/form-field.ts +40 -0
  22. package/.nuxt/ui/form.ts +3 -0
  23. package/.nuxt/ui/index.ts +48 -0
  24. package/.nuxt/ui/input-menu.ts +410 -0
  25. package/.nuxt/ui/input-number.ts +204 -0
  26. package/.nuxt/ui/input.ts +263 -0
  27. package/.nuxt/ui/kbd.ts +19 -0
  28. package/.nuxt/ui/link.ts +15 -0
  29. package/.nuxt/ui/modal.ts +28 -0
  30. package/.nuxt/ui/navigation-menu.ts +390 -0
  31. package/.nuxt/ui/pagination.ts +8 -0
  32. package/.nuxt/ui/pin-input.ts +145 -0
  33. package/.nuxt/ui/popover.ts +6 -0
  34. package/.nuxt/ui/progress.ts +258 -0
  35. package/.nuxt/ui/radio-group.ts +112 -0
  36. package/.nuxt/ui/select-menu.ts +316 -0
  37. package/.nuxt/ui/select.ts +315 -0
  38. package/.nuxt/ui/separator.ts +143 -0
  39. package/.nuxt/ui/skeleton.ts +3 -0
  40. package/.nuxt/ui/slideover.ts +63 -0
  41. package/.nuxt/ui/slider.ts +148 -0
  42. package/.nuxt/ui/stepper.ts +180 -0
  43. package/.nuxt/ui/switch.ts +113 -0
  44. package/.nuxt/ui/table.ts +129 -0
  45. package/.nuxt/ui/tabs.ts +227 -0
  46. package/.nuxt/ui/textarea.ts +263 -0
  47. package/.nuxt/ui/toast.ts +66 -0
  48. package/.nuxt/ui/toaster.ts +75 -0
  49. package/.nuxt/ui/tooltip.ts +9 -0
  50. package/README.md +75 -54
  51. package/cli/commands/{init.mjs → make/component.mjs} +5 -5
  52. package/cli/commands/make/index.mjs +14 -0
  53. package/cli/commands/make/locale.mjs +64 -0
  54. package/cli/index.mjs +2 -2
  55. package/cli/templates.mjs +52 -7
  56. package/cli/utils.mjs +14 -0
  57. package/dist/chunks/component-meta.cjs +82802 -0
  58. package/dist/chunks/component-meta.mjs +82800 -0
  59. package/dist/client/devtools/200.html +1 -0
  60. package/dist/client/devtools/404.html +1 -0
  61. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  62. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  63. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  64. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  65. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  66. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  67. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  68. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  69. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  70. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  71. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  72. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  73. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  74. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  75. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  76. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  77. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  78. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  79. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  80. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  81. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  82. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  83. package/dist/client/devtools/_nuxt/B1fTd_Rf.js +1 -0
  84. package/dist/client/devtools/_nuxt/CSUxkedg.js +1 -0
  85. package/dist/client/devtools/_nuxt/CbRTGpb7.js +1 -0
  86. package/dist/client/devtools/_nuxt/YQTlxbcT.js +53 -0
  87. package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
  88. package/dist/client/devtools/_nuxt/builds/meta/b3465abc-0a92-4ee7-ba6b-e5174891fcc0.json +1 -0
  89. package/dist/client/devtools/_nuxt/entry.DXXceQev.css +1 -0
  90. package/dist/client/devtools/_nuxt/error-404.BJpkZFyY.css +1 -0
  91. package/dist/client/devtools/_nuxt/error-500.D3i9VDlt.css +1 -0
  92. package/dist/client/devtools/favicon.svg +1 -0
  93. package/dist/client/devtools/index.html +1 -0
  94. package/dist/devtools/runtime/DevtoolsRenderer.vue +54 -0
  95. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +7 -0
  96. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +8 -0
  97. package/dist/devtools/runtime/examples/CardExample.vue +13 -0
  98. package/dist/devtools/runtime/examples/CarouselExample.vue +13 -0
  99. package/dist/devtools/runtime/examples/ChipExample.vue +5 -0
  100. package/dist/devtools/runtime/examples/CollapsibleExample.vue +8 -0
  101. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +29 -0
  102. package/dist/devtools/runtime/examples/ContainerExample.vue +5 -0
  103. package/dist/devtools/runtime/examples/ContextMenuExample.vue +5 -0
  104. package/dist/devtools/runtime/examples/DrawerExample.vue +8 -0
  105. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +5 -0
  106. package/dist/devtools/runtime/examples/FormExample.vue +30 -0
  107. package/dist/devtools/runtime/examples/FormFieldExample.vue +5 -0
  108. package/dist/devtools/runtime/examples/LinkExample.vue +5 -0
  109. package/dist/devtools/runtime/examples/ModalExample.vue +8 -0
  110. package/dist/devtools/runtime/examples/PopoverExample.vue +8 -0
  111. package/dist/devtools/runtime/examples/SkeletonExample.vue +3 -0
  112. package/dist/devtools/runtime/examples/SlideoverExample.vue +8 -0
  113. package/dist/devtools/runtime/examples/StepperExample.vue +44 -0
  114. package/dist/devtools/runtime/examples/ToasterExample.vue +11 -0
  115. package/dist/devtools/runtime/examples/TooltipExample.vue +5 -0
  116. package/dist/module.cjs +223 -4
  117. package/dist/module.d.cts +54 -0
  118. package/dist/module.d.mts +38 -7
  119. package/dist/module.d.ts +38 -7
  120. package/dist/module.json +2 -1
  121. package/dist/module.mjs +179 -2568
  122. package/dist/runtime/components/Accordion.vue +49 -8
  123. package/dist/runtime/components/Alert.vue +13 -6
  124. package/dist/runtime/components/App.vue +20 -7
  125. package/dist/runtime/components/Avatar.vue +33 -9
  126. package/dist/runtime/components/AvatarGroup.vue +4 -1
  127. package/dist/runtime/components/Badge.vue +34 -4
  128. package/dist/runtime/components/Breadcrumb.vue +52 -13
  129. package/dist/runtime/components/Button.vue +45 -6
  130. package/dist/runtime/components/ButtonGroup.vue +5 -2
  131. package/dist/runtime/components/Calendar.vue +190 -0
  132. package/dist/runtime/components/Card.vue +4 -1
  133. package/dist/runtime/components/Carousel.vue +322 -0
  134. package/dist/runtime/components/Checkbox.vue +28 -33
  135. package/dist/runtime/components/Chip.vue +9 -2
  136. package/dist/runtime/components/Collapsible.vue +7 -4
  137. package/dist/runtime/components/ColorPicker.vue +265 -0
  138. package/dist/runtime/components/CommandPalette.vue +122 -96
  139. package/dist/runtime/components/Container.vue +4 -1
  140. package/dist/runtime/components/ContextMenu.vue +101 -14
  141. package/dist/runtime/components/ContextMenuContent.vue +48 -18
  142. package/dist/runtime/components/Drawer.vue +22 -11
  143. package/dist/runtime/components/DropdownMenu.vue +91 -16
  144. package/dist/runtime/components/DropdownMenuContent.vue +50 -18
  145. package/dist/runtime/components/Form.vue +49 -32
  146. package/dist/runtime/components/FormField.vue +18 -6
  147. package/dist/runtime/components/Icon.vue +1 -1
  148. package/dist/runtime/components/Input.vue +15 -6
  149. package/dist/runtime/components/InputMenu.vue +152 -65
  150. package/dist/runtime/components/InputNumber.vue +192 -0
  151. package/dist/runtime/components/Kbd.vue +3 -1
  152. package/dist/runtime/components/Link.vue +71 -8
  153. package/dist/runtime/components/LinkBase.vue +10 -7
  154. package/dist/runtime/components/Modal.vue +23 -11
  155. package/dist/runtime/components/NavigationMenu.vue +170 -75
  156. package/dist/runtime/components/Pagination.vue +31 -15
  157. package/dist/runtime/components/PinInput.vue +96 -0
  158. package/dist/runtime/components/Popover.vue +26 -7
  159. package/dist/runtime/components/Progress.vue +25 -8
  160. package/dist/runtime/components/RadioGroup.vue +28 -7
  161. package/dist/runtime/components/Select.vue +79 -32
  162. package/dist/runtime/components/SelectMenu.vue +164 -80
  163. package/dist/runtime/components/Separator.vue +3 -3
  164. package/dist/runtime/components/Skeleton.vue +4 -1
  165. package/dist/runtime/components/Slideover.vue +23 -11
  166. package/dist/runtime/components/Slider.vue +3 -3
  167. package/dist/runtime/components/Stepper.vue +171 -0
  168. package/dist/runtime/components/Switch.vue +16 -16
  169. package/dist/runtime/components/Table.vue +262 -0
  170. package/dist/runtime/components/Tabs.vue +42 -15
  171. package/dist/runtime/components/Textarea.vue +9 -3
  172. package/dist/runtime/components/Toast.vue +13 -5
  173. package/dist/runtime/components/Toaster.vue +31 -16
  174. package/dist/runtime/components/Tooltip.vue +9 -6
  175. package/dist/runtime/composables/defineLocale.d.ts +9 -0
  176. package/dist/runtime/composables/defineLocale.js +4 -0
  177. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  178. package/dist/runtime/composables/defineShortcuts.js +2 -8
  179. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +7 -0
  180. package/dist/runtime/composables/extendDevtoolsMeta.js +2 -0
  181. package/dist/runtime/composables/useAvatarGroup.d.ts +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 +8 -4
  185. package/dist/runtime/composables/useFormField.js +2 -1
  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 +53 -0
  197. package/dist/runtime/locale/cs.d.ts +2 -0
  198. package/dist/runtime/locale/cs.js +52 -0
  199. package/dist/runtime/locale/de.d.ts +2 -0
  200. package/dist/runtime/locale/de.js +52 -0
  201. package/dist/runtime/locale/en.d.ts +2 -0
  202. package/dist/runtime/locale/en.js +52 -0
  203. package/dist/runtime/locale/es.d.ts +2 -0
  204. package/dist/runtime/locale/es.js +52 -0
  205. package/dist/runtime/locale/fa_ir.d.ts +2 -0
  206. package/dist/runtime/locale/fa_ir.js +53 -0
  207. package/dist/runtime/locale/fr.d.ts +2 -0
  208. package/dist/runtime/locale/fr.js +52 -0
  209. package/dist/runtime/locale/index.d.ts +19 -0
  210. package/dist/runtime/locale/index.js +19 -0
  211. package/dist/runtime/locale/it.d.ts +2 -0
  212. package/dist/runtime/locale/it.js +52 -0
  213. package/dist/runtime/locale/ja.d.ts +2 -0
  214. package/dist/runtime/locale/ja.js +52 -0
  215. package/dist/runtime/locale/ko.d.ts +2 -0
  216. package/dist/runtime/locale/ko.js +52 -0
  217. package/dist/runtime/locale/nl.d.ts +2 -0
  218. package/dist/runtime/locale/nl.js +52 -0
  219. package/dist/runtime/locale/pl.d.ts +2 -0
  220. package/dist/runtime/locale/pl.js +52 -0
  221. package/dist/runtime/locale/pt.d.ts +2 -0
  222. package/dist/runtime/locale/pt.js +52 -0
  223. package/dist/runtime/locale/pt_br.d.ts +2 -0
  224. package/dist/runtime/locale/pt_br.js +52 -0
  225. package/dist/runtime/locale/ru.d.ts +2 -0
  226. package/dist/runtime/locale/ru.js +52 -0
  227. package/dist/runtime/locale/sk.d.ts +2 -0
  228. package/dist/runtime/locale/sk.js +52 -0
  229. package/dist/runtime/locale/tr.d.ts +2 -0
  230. package/dist/runtime/locale/tr.js +52 -0
  231. package/dist/runtime/locale/zh_hans.d.ts +2 -0
  232. package/dist/runtime/locale/zh_hans.js +52 -0
  233. package/dist/runtime/locale/zh_hant.d.ts +2 -0
  234. package/dist/runtime/locale/zh_hant.js +52 -0
  235. package/dist/runtime/plugins/colors.js +12 -8
  236. package/dist/runtime/types/form.d.ts +9 -2
  237. package/dist/runtime/types/index.d.ts +50 -42
  238. package/dist/runtime/types/index.js +8 -0
  239. package/dist/runtime/types/locale.d.ts +54 -0
  240. package/dist/runtime/types/utils.d.ts +8 -3
  241. package/dist/runtime/utils/form.d.ts +7 -5
  242. package/dist/runtime/utils/form.js +117 -28
  243. package/dist/runtime/utils/index.d.ts +2 -1
  244. package/dist/runtime/utils/index.js +16 -0
  245. package/dist/runtime/utils/link.d.ts +5 -3
  246. package/dist/runtime/utils/link.js +1 -1
  247. package/dist/runtime/utils/locale.d.ts +15 -0
  248. package/dist/runtime/utils/locale.js +25 -0
  249. package/dist/runtime/vue/components/Icon.vue +15 -0
  250. package/dist/runtime/vue/components/Link.vue +208 -0
  251. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  252. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  253. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  254. package/dist/runtime/vue/plugins/head.js +6 -0
  255. package/dist/runtime/vue/stubs.d.ts +15 -0
  256. package/dist/runtime/vue/stubs.js +27 -0
  257. package/dist/shared/ui.CwmIkD_Y.cjs +3269 -0
  258. package/dist/shared/ui.D_93iuwH.mjs +3262 -0
  259. package/dist/unplugin.cjs +192 -0
  260. package/dist/unplugin.d.cts +49 -0
  261. package/dist/unplugin.d.mts +49 -0
  262. package/dist/unplugin.d.ts +49 -0
  263. package/dist/unplugin.mjs +181 -0
  264. package/dist/vite.cjs +22 -0
  265. package/dist/vite.d.cts +13 -0
  266. package/dist/vite.d.mts +13 -0
  267. package/dist/vite.d.ts +13 -0
  268. package/dist/vite.mjs +20 -0
  269. package/package.json +98 -31
  270. package/vue-plugin.d.ts +5 -0
  271. package/cli/node_modules/.ignored/citty/LICENSE +0 -36
  272. package/cli/node_modules/.ignored/citty/README.md +0 -134
  273. package/cli/node_modules/.ignored/citty/dist/index.cjs +0 -475
  274. package/cli/node_modules/.ignored/citty/dist/index.d.cts +0 -80
  275. package/cli/node_modules/.ignored/citty/dist/index.d.mts +0 -80
  276. package/cli/node_modules/.ignored/citty/dist/index.d.ts +0 -80
  277. package/cli/node_modules/.ignored/citty/dist/index.mjs +0 -463
  278. package/cli/node_modules/.ignored/citty/package.json +0 -49
  279. package/cli/node_modules/.ignored/consola/LICENSE +0 -47
  280. package/cli/node_modules/.ignored/consola/README.md +0 -318
  281. package/cli/node_modules/.ignored/consola/core.d.ts +0 -1
  282. package/cli/node_modules/.ignored/consola/dist/basic.cjs +0 -32
  283. package/cli/node_modules/.ignored/consola/dist/basic.d.ts +0 -9
  284. package/cli/node_modules/.ignored/consola/dist/basic.mjs +0 -24
  285. package/cli/node_modules/.ignored/consola/dist/browser.cjs +0 -80
  286. package/cli/node_modules/.ignored/consola/dist/browser.d.ts +0 -7
  287. package/cli/node_modules/.ignored/consola/dist/browser.mjs +0 -72
  288. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.cjs +0 -436
  289. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.mjs +0 -429
  290. package/cli/node_modules/.ignored/consola/dist/core.cjs +0 -415
  291. package/cli/node_modules/.ignored/consola/dist/core.d.ts +0 -124
  292. package/cli/node_modules/.ignored/consola/dist/core.mjs +0 -410
  293. package/cli/node_modules/.ignored/consola/dist/index.cjs +0 -21
  294. package/cli/node_modules/.ignored/consola/dist/index.d.ts +0 -9
  295. package/cli/node_modules/.ignored/consola/dist/index.mjs +0 -8
  296. package/cli/node_modules/.ignored/consola/dist/shared/consola.06ad8a64.mjs +0 -62
  297. package/cli/node_modules/.ignored/consola/dist/shared/consola.36c0034f.mjs +0 -636
  298. package/cli/node_modules/.ignored/consola/dist/shared/consola.4bbae468.cjs +0 -645
  299. package/cli/node_modules/.ignored/consola/dist/shared/consola.deac7d5a.cjs +0 -65
  300. package/cli/node_modules/.ignored/consola/dist/utils.cjs +0 -308
  301. package/cli/node_modules/.ignored/consola/dist/utils.d.ts +0 -169
  302. package/cli/node_modules/.ignored/consola/dist/utils.mjs +0 -284
  303. package/cli/node_modules/.ignored/consola/lib/index.cjs +0 -9
  304. package/cli/node_modules/.ignored/consola/package.json +0 -101
  305. package/cli/node_modules/.ignored/consola/utils.d.ts +0 -1
  306. package/cli/node_modules/.ignored/pathe/LICENSE +0 -44
  307. package/cli/node_modules/.ignored/pathe/README.md +0 -69
  308. package/cli/node_modules/.ignored/pathe/dist/index.cjs +0 -23
  309. package/cli/node_modules/.ignored/pathe/dist/index.d.cts +0 -36
  310. package/cli/node_modules/.ignored/pathe/dist/index.d.mts +0 -36
  311. package/cli/node_modules/.ignored/pathe/dist/index.d.ts +0 -36
  312. package/cli/node_modules/.ignored/pathe/dist/index.mjs +0 -1
  313. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.1f0a373c.cjs +0 -238
  314. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.ff20891b.mjs +0 -221
  315. package/cli/node_modules/.ignored/pathe/dist/utils.cjs +0 -58
  316. package/cli/node_modules/.ignored/pathe/dist/utils.d.cts +0 -5
  317. package/cli/node_modules/.ignored/pathe/dist/utils.d.mts +0 -5
  318. package/cli/node_modules/.ignored/pathe/dist/utils.d.ts +0 -5
  319. package/cli/node_modules/.ignored/pathe/dist/utils.mjs +0 -54
  320. package/cli/node_modules/.ignored/pathe/package.json +0 -48
  321. package/cli/node_modules/.ignored/pathe/utils.d.ts +0 -1
  322. package/cli/node_modules/.ignored/scule/LICENSE +0 -21
  323. package/cli/node_modules/.ignored/scule/README.md +0 -149
  324. package/cli/node_modules/.ignored/scule/dist/index.cjs +0 -92
  325. package/cli/node_modules/.ignored/scule/dist/index.d.cts +0 -57
  326. package/cli/node_modules/.ignored/scule/dist/index.d.mts +0 -57
  327. package/cli/node_modules/.ignored/scule/dist/index.d.ts +0 -57
  328. package/cli/node_modules/.ignored/scule/dist/index.mjs +0 -80
  329. package/cli/node_modules/.ignored/scule/package.json +0 -43
  330. package/cli/node_modules/.package-lock.json +0 -33
  331. package/dist/runtime/types/component.d.ts +0 -17
  332. /package/dist/runtime/types/{component.js → locale.js} +0 -0
@@ -1,36 +1,41 @@
1
1
  <script lang="ts">
2
2
  import { tv } from 'tailwind-variants'
3
- import type { ContextMenuContentProps as RadixContextMenuContentProps, ContextMenuContentEmits as RadixContextMenuContentEmits } from 'radix-vue'
3
+ import type { ContextMenuContentProps as RekaContextMenuContentProps, ContextMenuContentEmits as RekaContextMenuContentEmits } from 'reka-ui'
4
4
  import theme from '#build/ui/context-menu'
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
+ :checked="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:checked="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
2
  import { tv } from 'tailwind-variants'
3
3
  import type { DrawerRootProps, DrawerRootEmits } from 'vaul-vue'
4
- import type { DialogContentProps } from 'radix-vue'
4
+ import type { DialogContentProps } from 'reka-ui'
5
5
  import type { AppConfig } from '@nuxt/schema'
6
6
  import _appConfig from '#build/app.config'
7
7
  import theme from '#build/ui/drawer'
8
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
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' | 'dismissible' | '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,6 +26,11 @@ 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
@@ -46,40 +52,45 @@ export interface DrawerSlots {
46
52
  body(props?: {}): any
47
53
  footer(props?: {}): any
48
54
  }
55
+
56
+ extendDevtoolsMeta({ example: 'DrawerExample' })
49
57
  </script>
50
58
 
51
59
  <script setup lang="ts">
52
- import { toRef } from 'vue'
53
- import { useForwardPropsEmits } from 'radix-vue'
60
+ import { computed, toRef } from 'vue'
61
+ import { useForwardPropsEmits } from 'reka-ui'
54
62
  import { DrawerRoot, DrawerTrigger, DrawerPortal, DrawerOverlay, DrawerContent, DrawerTitle, DrawerDescription } from 'vaul-vue'
55
63
  import { reactivePick } from '@vueuse/core'
56
64
 
57
65
  const props = withDefaults(defineProps<DrawerProps>(), {
66
+ direction: 'bottom',
58
67
  portal: true,
59
- overlay: true
68
+ overlay: true,
69
+ handle: true
60
70
  })
61
71
  const emits = defineEmits<DrawerEmits>()
62
72
  const slots = defineSlots<DrawerSlots>()
63
73
 
64
- const rootProps = useForwardPropsEmits(reactivePick(props, 'activeSnapPoint', 'closeThreshold', 'defaultOpen', 'dismissible', 'fadeFromIndex', 'fixed', 'modal', 'nested', 'open', 'scrollLockTimeout', 'shouldScaleBackground', 'snapPoints'), emits)
74
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'activeSnapPoint', 'closeThreshold', 'defaultOpen', 'dismissible', 'fadeFromIndex', 'fixed', 'modal', 'nested', 'direction', 'open', 'scrollLockTimeout', 'shouldScaleBackground', 'snapPoints'), emits)
65
75
  const contentProps = toRef(() => props.content)
66
76
 
67
- // eslint-disable-next-line vue/no-dupe-keys
68
- const ui = drawer()
77
+ const ui = computed(() => drawer({
78
+ direction: props.direction
79
+ }))
69
80
  </script>
70
81
 
71
82
  <template>
72
83
  <DrawerRoot v-bind="rootProps">
73
- <DrawerTrigger v-if="!!slots.default" as-child>
84
+ <DrawerTrigger v-if="!!slots.default" as-child :class="props.class">
74
85
  <slot />
75
86
  </DrawerTrigger>
76
87
 
77
88
  <DrawerPortal :disabled="!portal">
78
89
  <DrawerOverlay v-if="overlay" :class="ui.overlay({ class: props.ui?.overlay })" />
79
90
 
80
- <DrawerContent :class="ui.content({ class: [props.class, props.ui?.content] })" v-bind="contentProps">
91
+ <DrawerContent :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })" v-bind="contentProps">
81
92
  <slot name="handle">
82
- <div :class="ui.handle({ class: props.ui?.handle })" />
93
+ <div v-if="handle" :class="ui.handle({ class: props.ui?.handle })" />
83
94
  </slot>
84
95
 
85
96
  <slot name="content">
@@ -1,19 +1,23 @@
1
1
  <script lang="ts">
2
2
  import { tv, type VariantProps } from 'tailwind-variants'
3
- import type { DropdownMenuRootProps, DropdownMenuRootEmits, DropdownMenuContentProps, DropdownMenuArrowProps, DropdownMenuTriggerProps, DropdownMenuItemProps } from 'radix-vue'
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'
7
8
  import type { AvatarProps, KbdProps, LinkProps } from '../types'
8
- import type { DynamicSlots } from '../types/utils'
9
+ import type { DynamicSlots, PartialString } from '../types/utils'
9
10
 
10
11
  const appConfig = _appConfig as AppConfig & { ui: { dropdownMenu: Partial<typeof theme> } }
11
12
 
12
13
  const dropdownMenu = tv({ extend: tv(theme), ...(appConfig.ui?.dropdownMenu || {}) })
13
14
 
14
- export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'>, Pick<DropdownMenuItemProps, 'disabled'> {
15
+ type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
16
+
17
+ export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'> {
15
18
  label?: string
16
19
  icon?: string
20
+ color?: DropdownMenuVariants['color']
17
21
  avatar?: AvatarProps
18
22
  content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'>
19
23
  kbds?: KbdProps['value'][] | KbdProps[]
@@ -21,22 +25,34 @@ export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'cust
21
25
  * The item type.
22
26
  * @defaultValue 'link'
23
27
  */
24
- type?: 'label' | 'separator' | 'link'
28
+ type?: 'label' | 'separator' | 'link' | 'checkbox'
25
29
  slot?: string
30
+ loading?: boolean
31
+ disabled?: boolean
32
+ checked?: boolean
26
33
  open?: boolean
27
34
  defaultOpen?: boolean
28
35
  children?: DropdownMenuItem[] | DropdownMenuItem[][]
29
- select?(e: Event): void
36
+ onSelect?(e: Event): void
37
+ onUpdateChecked?(checked: boolean): void
30
38
  }
31
39
 
32
- type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
33
-
34
- export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'>, Pick<DropdownMenuTriggerProps, 'disabled'> {
40
+ export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'> {
35
41
  size?: DropdownMenuVariants['size']
36
42
  items?: T[] | T[][]
43
+ /**
44
+ * The icon displayed when an item is checked.
45
+ * @defaultValue appConfig.ui.icons.check
46
+ */
47
+ checkedIcon?: string
48
+ /**
49
+ * The icon displayed when an item is loading.
50
+ * @defaultValue appConfig.ui.icons.loading
51
+ */
52
+ loadingIcon?: string
37
53
  /**
38
54
  * The content of the menu.
39
- * @defaultValue { side: 'bottom', sideOffset: 8 }
55
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
40
56
  */
41
57
  content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'>
42
58
  /**
@@ -49,8 +65,14 @@ export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'>
49
65
  * @defaultValue true
50
66
  */
51
67
  portal?: boolean
68
+ /**
69
+ * The key used to get the label from the item.
70
+ * @defaultValue 'label'
71
+ */
72
+ labelKey?: string
73
+ disabled?: boolean
52
74
  class?: any
53
- ui?: Partial<typeof dropdownMenu.slots>
75
+ ui?: PartialString<typeof dropdownMenu.slots>
54
76
  }
55
77
 
56
78
  export interface DropdownMenuEmits extends DropdownMenuRootEmits {}
@@ -64,25 +86,75 @@ export type DropdownMenuSlots<T extends { slot?: string }> = {
64
86
  'item-label': SlotProps<T>
65
87
  'item-trailing': SlotProps<T>
66
88
  } & DynamicSlots<T, SlotProps<T>>
89
+
90
+ extendDevtoolsMeta({
91
+ example: 'DropdownMenuExample',
92
+ ignoreProps: ['items'],
93
+ defaultProps: {
94
+ items: [
95
+ [{
96
+ label: 'My account',
97
+ avatar: {
98
+ src: 'https://avatars.githubusercontent.com/u/739984?v=4'
99
+ },
100
+ type: 'label'
101
+ }], [{
102
+ label: 'Profile',
103
+ icon: 'i-lucide-user',
104
+ slot: 'custom'
105
+ }, {
106
+ label: 'Billing',
107
+ icon: 'i-lucide-credit-card',
108
+ kbds: ['meta', 'b']
109
+ }, {
110
+ label: 'Settings',
111
+ icon: 'i-lucide-cog',
112
+ kbds: ['?']
113
+ }], [{
114
+ label: 'Invite users',
115
+ icon: 'i-lucide-user-plus',
116
+ children: [[{
117
+ label: 'Invite by email',
118
+ icon: 'i-lucide-send-horizontal'
119
+ }, {
120
+ label: 'Invite by link',
121
+ icon: 'i-lucide-link',
122
+ kbds: ['meta', 'i']
123
+ }]]
124
+ }],
125
+ [{
126
+ label: 'GitHub',
127
+ icon: 'i-simple-icons-github',
128
+ to: 'https://github.com/nuxt/ui',
129
+ target: '_blank'
130
+ }, {
131
+ label: 'Support',
132
+ icon: 'i-lucide-life-buoy',
133
+ to: '/components/dropdown-menu'
134
+ }]
135
+ ]
136
+ }
137
+ })
67
138
  </script>
68
139
 
69
140
  <script setup lang="ts" generic="T extends DropdownMenuItem">
70
141
  import { computed, toRef } from 'vue'
71
142
  import { defu } from 'defu'
72
- import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuArrow, useForwardPropsEmits } from 'radix-vue'
143
+ import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuArrow, useForwardPropsEmits } from 'reka-ui'
73
144
  import { reactivePick } from '@vueuse/core'
74
- import UDropdownMenuContent from './DropdownMenuContent.vue'
75
145
  import { omit } from '../utils'
146
+ import UDropdownMenuContent from './DropdownMenuContent.vue'
76
147
 
77
148
  const props = withDefaults(defineProps<DropdownMenuProps<T>>(), {
78
149
  portal: true,
79
- modal: true
150
+ modal: true,
151
+ labelKey: 'label'
80
152
  })
81
153
  const emits = defineEmits<DropdownMenuEmits>()
82
154
  const slots = defineSlots<DropdownMenuSlots<T>>()
83
155
 
84
156
  const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultOpen', 'open', 'modal'), emits)
85
- const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8 }) as DropdownMenuContentProps)
157
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8 }) as DropdownMenuContentProps)
86
158
  const arrowProps = toRef(() => props.arrow as DropdownMenuArrowProps)
87
159
  const proxySlots = omit(slots, ['default']) as Record<string, DropdownMenuSlots<T>[string]>
88
160
 
@@ -93,17 +165,20 @@ const ui = computed(() => dropdownMenu({
93
165
 
94
166
  <template>
95
167
  <DropdownMenuRoot v-slot="{ open }" v-bind="rootProps">
96
- <DropdownMenuTrigger v-if="!!slots.default" as-child :disabled="disabled">
168
+ <DropdownMenuTrigger v-if="!!slots.default" as-child :class="props.class" :disabled="disabled">
97
169
  <slot :open="open" />
98
170
  </DropdownMenuTrigger>
99
171
 
100
172
  <UDropdownMenuContent
101
- :class="ui.content({ class: [props.class, props.ui?.content] })"
173
+ :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })"
102
174
  :ui="ui"
103
175
  :ui-override="props.ui"
104
176
  v-bind="contentProps"
105
177
  :items="items"
106
178
  :portal="portal"
179
+ :label-key="labelKey"
180
+ :checked-icon="checkedIcon"
181
+ :loading-icon="loadingIcon"
107
182
  >
108
183
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
109
184
  <slot :name="name" v-bind="slotData" />
@@ -1,40 +1,47 @@
1
+ <!-- eslint-disable vue/block-tag-newline -->
1
2
  <script lang="ts">
2
3
  import { tv } from 'tailwind-variants'
3
- import type { DropdownMenuContentProps as RadixDropdownMenuContentProps, DropdownMenuContentEmits as RadixDropdownMenuContentEmits } from 'radix-vue'
4
+ import type { DropdownMenuContentProps as RekaDropdownMenuContentProps, DropdownMenuContentEmits as RekaDropdownMenuContentEmits } from 'reka-ui'
4
5
  import theme from '#build/ui/dropdown-menu'
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
+ :checked="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:checked="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>