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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/.nuxt/ui/accordion.ts +20 -0
  2. package/.nuxt/ui/alert.ts +242 -0
  3. package/.nuxt/ui/avatar-group.ts +40 -0
  4. package/.nuxt/ui/avatar.ts +42 -0
  5. package/.nuxt/ui/badge.ts +194 -0
  6. package/.nuxt/ui/breadcrumb.ts +45 -0
  7. package/.nuxt/ui/button-group.ts +16 -0
  8. package/.nuxt/ui/button.ts +344 -0
  9. package/.nuxt/ui/calendar.ts +85 -0
  10. package/.nuxt/ui/card.ts +8 -0
  11. package/.nuxt/ui/carousel.ts +41 -0
  12. package/.nuxt/ui/checkbox.ts +105 -0
  13. package/.nuxt/ui/chip.ts +67 -0
  14. package/.nuxt/ui/collapsible.ts +6 -0
  15. package/.nuxt/ui/color-picker.ts +39 -0
  16. package/.nuxt/ui/command-palette.ts +50 -0
  17. package/.nuxt/ui/container.ts +3 -0
  18. package/.nuxt/ui/context-menu.ts +198 -0
  19. package/.nuxt/ui/drawer.ts +55 -0
  20. package/.nuxt/ui/dropdown-menu.ts +199 -0
  21. package/.nuxt/ui/form-field.ts +40 -0
  22. package/.nuxt/ui/form.ts +3 -0
  23. package/.nuxt/ui/index.ts +48 -0
  24. package/.nuxt/ui/input-menu.ts +410 -0
  25. package/.nuxt/ui/input-number.ts +204 -0
  26. package/.nuxt/ui/input.ts +263 -0
  27. package/.nuxt/ui/kbd.ts +19 -0
  28. package/.nuxt/ui/link.ts +15 -0
  29. package/.nuxt/ui/modal.ts +28 -0
  30. package/.nuxt/ui/navigation-menu.ts +390 -0
  31. package/.nuxt/ui/pagination.ts +8 -0
  32. package/.nuxt/ui/pin-input.ts +145 -0
  33. package/.nuxt/ui/popover.ts +6 -0
  34. package/.nuxt/ui/progress.ts +258 -0
  35. package/.nuxt/ui/radio-group.ts +112 -0
  36. package/.nuxt/ui/select-menu.ts +316 -0
  37. package/.nuxt/ui/select.ts +315 -0
  38. package/.nuxt/ui/separator.ts +143 -0
  39. package/.nuxt/ui/skeleton.ts +3 -0
  40. package/.nuxt/ui/slideover.ts +63 -0
  41. package/.nuxt/ui/slider.ts +148 -0
  42. package/.nuxt/ui/stepper.ts +180 -0
  43. package/.nuxt/ui/switch.ts +113 -0
  44. package/.nuxt/ui/table.ts +129 -0
  45. package/.nuxt/ui/tabs.ts +227 -0
  46. package/.nuxt/ui/textarea.ts +263 -0
  47. package/.nuxt/ui/toast.ts +66 -0
  48. package/.nuxt/ui/toaster.ts +75 -0
  49. package/.nuxt/ui/tooltip.ts +9 -0
  50. package/README.md +75 -54
  51. package/cli/commands/{init.mjs → make/component.mjs} +5 -5
  52. package/cli/commands/make/index.mjs +14 -0
  53. package/cli/commands/make/locale.mjs +64 -0
  54. package/cli/index.mjs +2 -2
  55. package/cli/templates.mjs +52 -7
  56. package/cli/utils.mjs +14 -0
  57. package/dist/chunks/component-meta.cjs +82802 -0
  58. package/dist/chunks/component-meta.mjs +82800 -0
  59. package/dist/client/devtools/200.html +1 -0
  60. package/dist/client/devtools/404.html +1 -0
  61. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  62. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  63. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  64. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  65. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  66. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  67. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  68. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  69. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  70. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  71. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  72. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  73. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  74. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  75. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  76. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  77. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  78. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  79. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  80. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  81. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  82. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  83. package/dist/client/devtools/_nuxt/B1fTd_Rf.js +1 -0
  84. package/dist/client/devtools/_nuxt/CSUxkedg.js +1 -0
  85. package/dist/client/devtools/_nuxt/CbRTGpb7.js +1 -0
  86. package/dist/client/devtools/_nuxt/YQTlxbcT.js +53 -0
  87. package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
  88. package/dist/client/devtools/_nuxt/builds/meta/b3465abc-0a92-4ee7-ba6b-e5174891fcc0.json +1 -0
  89. package/dist/client/devtools/_nuxt/entry.DXXceQev.css +1 -0
  90. package/dist/client/devtools/_nuxt/error-404.BJpkZFyY.css +1 -0
  91. package/dist/client/devtools/_nuxt/error-500.D3i9VDlt.css +1 -0
  92. package/dist/client/devtools/favicon.svg +1 -0
  93. package/dist/client/devtools/index.html +1 -0
  94. package/dist/devtools/runtime/DevtoolsRenderer.vue +54 -0
  95. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +7 -0
  96. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +8 -0
  97. package/dist/devtools/runtime/examples/CardExample.vue +13 -0
  98. package/dist/devtools/runtime/examples/CarouselExample.vue +13 -0
  99. package/dist/devtools/runtime/examples/ChipExample.vue +5 -0
  100. package/dist/devtools/runtime/examples/CollapsibleExample.vue +8 -0
  101. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +29 -0
  102. package/dist/devtools/runtime/examples/ContainerExample.vue +5 -0
  103. package/dist/devtools/runtime/examples/ContextMenuExample.vue +5 -0
  104. package/dist/devtools/runtime/examples/DrawerExample.vue +8 -0
  105. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +5 -0
  106. package/dist/devtools/runtime/examples/FormExample.vue +30 -0
  107. package/dist/devtools/runtime/examples/FormFieldExample.vue +5 -0
  108. package/dist/devtools/runtime/examples/LinkExample.vue +5 -0
  109. package/dist/devtools/runtime/examples/ModalExample.vue +8 -0
  110. package/dist/devtools/runtime/examples/PopoverExample.vue +8 -0
  111. package/dist/devtools/runtime/examples/SkeletonExample.vue +3 -0
  112. package/dist/devtools/runtime/examples/SlideoverExample.vue +8 -0
  113. package/dist/devtools/runtime/examples/StepperExample.vue +44 -0
  114. package/dist/devtools/runtime/examples/ToasterExample.vue +11 -0
  115. package/dist/devtools/runtime/examples/TooltipExample.vue +5 -0
  116. package/dist/module.cjs +223 -4
  117. package/dist/module.d.cts +54 -0
  118. package/dist/module.d.mts +38 -7
  119. package/dist/module.d.ts +38 -7
  120. package/dist/module.json +4 -3
  121. package/dist/module.mjs +180 -2617
  122. package/dist/runtime/components/Accordion.vue +95 -11
  123. package/dist/runtime/components/Alert.vue +69 -10
  124. package/dist/runtime/components/App.vue +28 -5
  125. package/dist/runtime/components/Avatar.vue +57 -12
  126. package/dist/runtime/components/AvatarGroup.vue +34 -7
  127. package/dist/runtime/components/Badge.vue +61 -9
  128. package/dist/runtime/components/Breadcrumb.vue +93 -16
  129. package/dist/runtime/components/Button.vue +78 -12
  130. package/dist/runtime/components/ButtonGroup.vue +35 -8
  131. package/dist/runtime/components/Calendar.vue +190 -0
  132. package/dist/runtime/components/Card.vue +29 -7
  133. package/dist/runtime/components/Carousel.vue +322 -0
  134. package/dist/runtime/components/Checkbox.vue +64 -30
  135. package/dist/runtime/components/Chip.vue +48 -8
  136. package/dist/runtime/components/Collapsible.vue +32 -8
  137. package/dist/runtime/components/ColorPicker.vue +265 -0
  138. package/dist/runtime/components/CommandPalette.vue +207 -88
  139. package/dist/runtime/components/Container.vue +26 -7
  140. package/dist/runtime/components/ContextMenu.vue +150 -11
  141. package/dist/runtime/components/ContextMenuContent.vue +63 -19
  142. package/dist/runtime/components/Drawer.vue +68 -15
  143. package/dist/runtime/components/DropdownMenu.vue +147 -12
  144. package/dist/runtime/components/DropdownMenuContent.vue +69 -19
  145. package/dist/runtime/components/Form.vue +80 -42
  146. package/dist/runtime/components/FormField.vue +58 -21
  147. package/dist/runtime/components/Icon.vue +13 -3
  148. package/dist/runtime/components/Input.vue +61 -12
  149. package/dist/runtime/components/InputMenu.vue +247 -53
  150. package/dist/runtime/components/InputNumber.vue +192 -0
  151. package/dist/runtime/components/Kbd.vue +31 -7
  152. package/dist/runtime/components/Link.vue +148 -21
  153. package/dist/runtime/components/LinkBase.vue +21 -8
  154. package/dist/runtime/components/Modal.vue +90 -15
  155. package/dist/runtime/components/NavigationMenu.vue +234 -69
  156. package/dist/runtime/components/Pagination.vue +124 -15
  157. package/dist/runtime/components/PinInput.vue +96 -0
  158. package/dist/runtime/components/Popover.vue +66 -11
  159. package/dist/runtime/components/Progress.vue +67 -12
  160. package/dist/runtime/components/RadioGroup.vue +78 -9
  161. package/dist/runtime/components/Select.vue +155 -26
  162. package/dist/runtime/components/SelectMenu.vue +245 -63
  163. package/dist/runtime/components/Separator.vue +42 -7
  164. package/dist/runtime/components/Skeleton.vue +22 -7
  165. package/dist/runtime/components/Slideover.vue +88 -15
  166. package/dist/runtime/components/Slider.vue +37 -7
  167. package/dist/runtime/components/Stepper.vue +171 -0
  168. package/dist/runtime/components/Switch.vue +58 -14
  169. package/dist/runtime/components/Table.vue +262 -0
  170. package/dist/runtime/components/Tabs.vue +97 -17
  171. package/dist/runtime/components/Textarea.vue +55 -9
  172. package/dist/runtime/components/Toast.vue +66 -9
  173. package/dist/runtime/components/Toaster.vue +57 -21
  174. package/dist/runtime/components/Tooltip.vue +49 -10
  175. package/dist/runtime/composables/defineLocale.d.ts +9 -0
  176. package/dist/runtime/composables/defineLocale.js +4 -0
  177. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  178. package/dist/runtime/composables/defineShortcuts.js +2 -8
  179. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +7 -0
  180. package/dist/runtime/composables/extendDevtoolsMeta.js +2 -0
  181. package/dist/runtime/composables/useAvatarGroup.d.ts +2 -2
  182. package/dist/runtime/composables/useButtonGroup.d.ts +5 -5
  183. package/dist/runtime/composables/useComponentIcons.d.ts +3 -0
  184. package/dist/runtime/composables/useFormField.d.ts +13 -6
  185. package/dist/runtime/composables/useFormField.js +12 -7
  186. package/dist/runtime/composables/useKbd.d.ts +10 -3
  187. package/dist/runtime/composables/useKbd.js +14 -8
  188. package/dist/runtime/composables/useLocale.d.ts +4 -0
  189. package/dist/runtime/composables/useLocale.js +10 -0
  190. package/dist/runtime/composables/useModal.d.ts +2 -2
  191. package/dist/runtime/composables/useSlideover.d.ts +2 -2
  192. package/dist/runtime/composables/useToast.d.ts +2 -2
  193. package/dist/runtime/index.css +1 -0
  194. package/dist/runtime/keyframes.css +1 -0
  195. package/dist/runtime/locale/ar.d.ts +2 -0
  196. package/dist/runtime/locale/ar.js +53 -0
  197. package/dist/runtime/locale/cs.d.ts +2 -0
  198. package/dist/runtime/locale/cs.js +52 -0
  199. package/dist/runtime/locale/de.d.ts +2 -0
  200. package/dist/runtime/locale/de.js +52 -0
  201. package/dist/runtime/locale/en.d.ts +2 -0
  202. package/dist/runtime/locale/en.js +52 -0
  203. package/dist/runtime/locale/es.d.ts +2 -0
  204. package/dist/runtime/locale/es.js +52 -0
  205. package/dist/runtime/locale/fa_ir.d.ts +2 -0
  206. package/dist/runtime/locale/fa_ir.js +53 -0
  207. package/dist/runtime/locale/fr.d.ts +2 -0
  208. package/dist/runtime/locale/fr.js +52 -0
  209. package/dist/runtime/locale/index.d.ts +19 -0
  210. package/dist/runtime/locale/index.js +19 -0
  211. package/dist/runtime/locale/it.d.ts +2 -0
  212. package/dist/runtime/locale/it.js +52 -0
  213. package/dist/runtime/locale/ja.d.ts +2 -0
  214. package/dist/runtime/locale/ja.js +52 -0
  215. package/dist/runtime/locale/ko.d.ts +2 -0
  216. package/dist/runtime/locale/ko.js +52 -0
  217. package/dist/runtime/locale/nl.d.ts +2 -0
  218. package/dist/runtime/locale/nl.js +52 -0
  219. package/dist/runtime/locale/pl.d.ts +2 -0
  220. package/dist/runtime/locale/pl.js +52 -0
  221. package/dist/runtime/locale/pt.d.ts +2 -0
  222. package/dist/runtime/locale/pt.js +52 -0
  223. package/dist/runtime/locale/pt_br.d.ts +2 -0
  224. package/dist/runtime/locale/pt_br.js +52 -0
  225. package/dist/runtime/locale/ru.d.ts +2 -0
  226. package/dist/runtime/locale/ru.js +52 -0
  227. package/dist/runtime/locale/sk.d.ts +2 -0
  228. package/dist/runtime/locale/sk.js +52 -0
  229. package/dist/runtime/locale/tr.d.ts +2 -0
  230. package/dist/runtime/locale/tr.js +52 -0
  231. package/dist/runtime/locale/zh_hans.d.ts +2 -0
  232. package/dist/runtime/locale/zh_hans.js +52 -0
  233. package/dist/runtime/locale/zh_hant.d.ts +2 -0
  234. package/dist/runtime/locale/zh_hant.js +52 -0
  235. package/dist/runtime/plugins/colors.d.ts +2 -0
  236. package/dist/runtime/plugins/colors.js +12 -8
  237. package/dist/runtime/plugins/modal.d.ts +2 -0
  238. package/dist/runtime/plugins/slideover.d.ts +2 -0
  239. package/dist/runtime/types/form.d.ts +10 -4
  240. package/dist/runtime/types/index.d.ts +50 -42
  241. package/dist/runtime/types/index.js +8 -0
  242. package/dist/runtime/types/locale.d.ts +54 -0
  243. package/dist/runtime/types/utils.d.ts +8 -3
  244. package/dist/runtime/utils/form.d.ts +7 -5
  245. package/dist/runtime/utils/form.js +117 -28
  246. package/dist/runtime/utils/index.d.ts +2 -1
  247. package/dist/runtime/utils/index.js +16 -0
  248. package/dist/runtime/utils/link.d.ts +25 -55
  249. package/dist/runtime/utils/link.js +1 -1
  250. package/dist/runtime/utils/locale.d.ts +15 -0
  251. package/dist/runtime/utils/locale.js +25 -0
  252. package/dist/runtime/vue/components/Icon.vue +15 -0
  253. package/dist/runtime/vue/components/Link.vue +208 -0
  254. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  255. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  256. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  257. package/dist/runtime/vue/plugins/head.js +6 -0
  258. package/dist/runtime/vue/stubs.d.ts +15 -0
  259. package/dist/runtime/vue/stubs.js +27 -0
  260. package/dist/shared/ui.CwmIkD_Y.cjs +3269 -0
  261. package/dist/shared/ui.D_93iuwH.mjs +3262 -0
  262. package/dist/unplugin.cjs +192 -0
  263. package/dist/unplugin.d.cts +49 -0
  264. package/dist/unplugin.d.mts +49 -0
  265. package/dist/unplugin.d.ts +49 -0
  266. package/dist/unplugin.mjs +181 -0
  267. package/dist/vite.cjs +22 -0
  268. package/dist/vite.d.cts +13 -0
  269. package/dist/vite.d.mts +13 -0
  270. package/dist/vite.d.ts +13 -0
  271. package/dist/vite.mjs +20 -0
  272. package/package.json +103 -37
  273. package/vue-plugin.d.ts +5 -0
  274. package/dist/runtime/assets/css/animations.css +0 -1
  275. package/dist/runtime/components/Accordion.vue.d.ts +0 -492
  276. package/dist/runtime/components/Alert.vue.d.ts +0 -548
  277. package/dist/runtime/components/App.vue.d.ts +0 -25
  278. package/dist/runtime/components/Avatar.vue.d.ts +0 -384
  279. package/dist/runtime/components/AvatarGroup.vue.d.ts +0 -381
  280. package/dist/runtime/components/Badge.vue.d.ts +0 -422
  281. package/dist/runtime/components/Breadcrumb.vue.d.ts +0 -307
  282. package/dist/runtime/components/Button.vue.d.ts +0 -949
  283. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -182
  284. package/dist/runtime/components/Card.vue.d.ts +0 -191
  285. package/dist/runtime/components/Checkbox.vue.d.ts +0 -819
  286. package/dist/runtime/components/Chip.vue.d.ts +0 -590
  287. package/dist/runtime/components/Collapsible.vue.d.ts +0 -159
  288. package/dist/runtime/components/CommandPalette.vue.d.ts +0 -684
  289. package/dist/runtime/components/Container.vue.d.ts +0 -27
  290. package/dist/runtime/components/ContextMenu.vue.d.ts +0 -796
  291. package/dist/runtime/components/Drawer.vue.d.ts +0 -343
  292. package/dist/runtime/components/DropdownMenu.vue.d.ts +0 -815
  293. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +0 -0
  294. package/dist/runtime/components/Form.vue.d.ts +0 -39
  295. package/dist/runtime/components/FormField.vue.d.ts +0 -356
  296. package/dist/runtime/components/Icon.vue.d.ts +0 -17
  297. package/dist/runtime/components/Input.vue.d.ts +0 -1137
  298. package/dist/runtime/components/InputMenu.vue.d.ts +0 -2121
  299. package/dist/runtime/components/Kbd.vue.d.ts +0 -169
  300. package/dist/runtime/components/Link.vue.d.ts +0 -76
  301. package/dist/runtime/components/LinkBase.vue.d.ts +0 -49
  302. package/dist/runtime/components/Modal.vue.d.ts +0 -319
  303. package/dist/runtime/components/NavigationMenu.vue.d.ts +0 -1789
  304. package/dist/runtime/components/Pagination.vue.d.ts +0 -295
  305. package/dist/runtime/components/Popover.vue.d.ts +0 -197
  306. package/dist/runtime/components/Progress.vue.d.ts +0 -1781
  307. package/dist/runtime/components/RadioGroup.vue.d.ts +0 -1715
  308. package/dist/runtime/components/Select.vue.d.ts +0 -1569
  309. package/dist/runtime/components/SelectMenu.vue.d.ts +0 -1661
  310. package/dist/runtime/components/Separator.vue.d.ts +0 -0
  311. package/dist/runtime/components/Skeleton.vue.d.ts +0 -26
  312. package/dist/runtime/components/Slideover.vue.d.ts +0 -375
  313. package/dist/runtime/components/Slider.vue.d.ts +0 -0
  314. package/dist/runtime/components/Switch.vue.d.ts +0 -1676
  315. package/dist/runtime/components/Tabs.vue.d.ts +0 -934
  316. package/dist/runtime/components/Textarea.vue.d.ts +0 -1133
  317. package/dist/runtime/components/Toast.vue.d.ts +0 -0
  318. package/dist/runtime/components/Toaster.vue.d.ts +0 -362
  319. package/dist/runtime/components/Tooltip.vue.d.ts +0 -248
  320. package/dist/runtime/types/component.d.ts +0 -17
  321. package/dist/runtime/types/component.js +0 -0
  322. /package/dist/runtime/{components/ContextMenuContent.vue.d.ts → types/locale.js} +0 -0
@@ -1,28 +1,160 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import _appConfig from "#build/app.config";
4
- import theme from "#build/ui/dropdown-menu";
5
- const appConfig = _appConfig;
6
- const dropdownMenu = tv({ extend: tv(theme), ...appConfig.ui?.dropdownMenu || {} });
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { DropdownMenuRootProps, DropdownMenuRootEmits, DropdownMenuContentProps, DropdownMenuArrowProps } from 'reka-ui'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/dropdown-menu'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
+ import type { AvatarProps, KbdProps, LinkProps } from '../types'
9
+ import type { DynamicSlots, PartialString } from '../types/utils'
10
+
11
+ const appConfig = _appConfig as AppConfig & { ui: { dropdownMenu: Partial<typeof theme> } }
12
+
13
+ const dropdownMenu = tv({ extend: tv(theme), ...(appConfig.ui?.dropdownMenu || {}) })
14
+
15
+ type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
16
+
17
+ export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom'> {
18
+ label?: string
19
+ icon?: string
20
+ color?: DropdownMenuVariants['color']
21
+ avatar?: AvatarProps
22
+ content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'>
23
+ kbds?: KbdProps['value'][] | KbdProps[]
24
+ /**
25
+ * The item type.
26
+ * @defaultValue 'link'
27
+ */
28
+ type?: 'label' | 'separator' | 'link' | 'checkbox'
29
+ slot?: string
30
+ loading?: boolean
31
+ disabled?: boolean
32
+ checked?: boolean
33
+ open?: boolean
34
+ defaultOpen?: boolean
35
+ children?: DropdownMenuItem[] | DropdownMenuItem[][]
36
+ onSelect?(e: Event): void
37
+ onUpdateChecked?(checked: boolean): void
38
+ }
39
+
40
+ export interface DropdownMenuProps<T> extends Omit<DropdownMenuRootProps, 'dir'> {
41
+ size?: DropdownMenuVariants['size']
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
53
+ /**
54
+ * The content of the menu.
55
+ * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
56
+ */
57
+ content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'>
58
+ /**
59
+ * Display an arrow alongside the menu.
60
+ * @defaultValue false
61
+ */
62
+ arrow?: boolean | Omit<DropdownMenuArrowProps, 'as' | 'asChild'>
63
+ /**
64
+ * Render the menu in a portal.
65
+ * @defaultValue true
66
+ */
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
74
+ class?: any
75
+ ui?: PartialString<typeof dropdownMenu.slots>
76
+ }
77
+
78
+ export interface DropdownMenuEmits extends DropdownMenuRootEmits {}
79
+
80
+ type SlotProps<T> = (props: { item: T, active?: boolean, index: number }) => any
81
+
82
+ export type DropdownMenuSlots<T extends { slot?: string }> = {
83
+ 'default'(props: { open: boolean }): any
84
+ 'item': SlotProps<T>
85
+ 'item-leading': SlotProps<T>
86
+ 'item-label': SlotProps<T>
87
+ 'item-trailing': SlotProps<T>
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
+ })
7
138
  </script>
8
139
 
9
140
  <script setup lang="ts" generic="T extends DropdownMenuItem">
10
141
  import { computed, toRef } from 'vue'
11
142
  import { defu } from 'defu'
12
- import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuArrow, useForwardPropsEmits } from 'radix-vue'
143
+ import { DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuArrow, useForwardPropsEmits } from 'reka-ui'
13
144
  import { reactivePick } from '@vueuse/core'
14
- import UDropdownMenuContent from './DropdownMenuContent.vue'
15
145
  import { omit } from '../utils'
146
+ import UDropdownMenuContent from './DropdownMenuContent.vue'
16
147
 
17
148
  const props = withDefaults(defineProps<DropdownMenuProps<T>>(), {
18
149
  portal: true,
19
- modal: true
150
+ modal: true,
151
+ labelKey: 'label'
20
152
  })
21
153
  const emits = defineEmits<DropdownMenuEmits>()
22
154
  const slots = defineSlots<DropdownMenuSlots<T>>()
23
155
 
24
156
  const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultOpen', 'open', 'modal'), emits)
25
- 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)
26
158
  const arrowProps = toRef(() => props.arrow as DropdownMenuArrowProps)
27
159
  const proxySlots = omit(slots, ['default']) as Record<string, DropdownMenuSlots<T>[string]>
28
160
 
@@ -33,17 +165,20 @@ const ui = computed(() => dropdownMenu({
33
165
 
34
166
  <template>
35
167
  <DropdownMenuRoot v-slot="{ open }" v-bind="rootProps">
36
- <DropdownMenuTrigger v-if="!!slots.default" as-child :disabled="disabled">
168
+ <DropdownMenuTrigger v-if="!!slots.default" as-child :class="props.class" :disabled="disabled">
37
169
  <slot :open="open" />
38
170
  </DropdownMenuTrigger>
39
171
 
40
172
  <UDropdownMenuContent
41
- :class="ui.content({ class: [props.class, props.ui?.content] })"
173
+ :class="ui.content({ class: [!slots.default && props.class, props.ui?.content] })"
42
174
  :ui="ui"
43
175
  :ui-override="props.ui"
44
176
  v-bind="contentProps"
45
177
  :items="items"
46
178
  :portal="portal"
179
+ :label-key="labelKey"
180
+ :checked-icon="checkedIcon"
181
+ :loading-icon="loadingIcon"
47
182
  >
48
183
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
49
184
  <slot :name="name" v-bind="slotData" />
@@ -1,22 +1,47 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import theme from "#build/ui/dropdown-menu";
4
- const dropdownMenu = tv(theme)();
1
+ <!-- eslint-disable vue/block-tag-newline -->
2
+ <script lang="ts">
3
+ import { tv } from 'tailwind-variants'
4
+ import type { DropdownMenuContentProps as RekaDropdownMenuContentProps, DropdownMenuContentEmits as RekaDropdownMenuContentEmits } from 'reka-ui'
5
+ import theme from '#build/ui/dropdown-menu'
6
+ import type { KbdProps, AvatarProps, DropdownMenuItem, DropdownMenuSlots } from '../types'
7
+
8
+ const _dropdownMenu = tv(theme)()
9
+
10
+ interface DropdownMenuContentProps<T> extends Omit<RekaDropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
11
+ items?: T[] | T[][]
12
+ portal?: boolean
13
+ sub?: boolean
14
+ labelKey: string
15
+ checkedIcon?: string
16
+ loadingIcon?: string
17
+ class?: any
18
+ ui: typeof _dropdownMenu
19
+ uiOverride?: any
20
+ }
21
+
22
+ interface DropdownMenuContentEmits extends RekaDropdownMenuContentEmits {}
23
+
24
+ type DropdownMenuContentSlots<T extends { slot?: string }> = Omit<DropdownMenuSlots<T>, 'default'> & {
25
+ default(props?: {}): any
26
+ }
27
+
5
28
  </script>
6
29
 
7
30
  <script setup lang="ts" generic="T extends DropdownMenuItem">
8
31
  import { computed } from 'vue'
9
- import { DropdownMenu } from 'radix-vue/namespaced'
10
- import { useForwardPropsEmits } from 'radix-vue'
32
+ import { DropdownMenu } from 'reka-ui/namespaced'
33
+ import { useForwardPropsEmits } from 'reka-ui'
11
34
  import { reactiveOmit, createReusableTemplate } from '@vueuse/core'
12
35
  import { useAppConfig } from '#imports'
36
+ import { omit, get } from '../utils'
37
+ import { pickLinkProps } from '../utils/link'
13
38
  import ULinkBase from './LinkBase.vue'
14
39
  import ULink from './Link.vue'
15
40
  import UAvatar from './Avatar.vue'
16
41
  import UIcon from './Icon.vue'
17
42
  import UKbd from './Kbd.vue'
18
- import { omit } from '../utils'
19
- import { pickLinkProps } from '../utils/link'
43
+ // eslint-disable-next-line import/no-self-import
44
+ import UDropdownMenuContent from './DropdownMenuContent.vue'
20
45
 
21
46
  const props = defineProps<DropdownMenuContentProps<T>>()
22
47
  const emits = defineEmits<DropdownMenuContentEmits>()
@@ -35,25 +60,30 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
35
60
  <DefineItemTemplate v-slot="{ item, active, index }">
36
61
  <slot :name="item.slot || 'item'" :item="(item as T)" :index="index">
37
62
  <slot :name="item.slot ? `${item.slot}-leading`: 'item-leading'" :item="(item as T)" :active="active" :index="index">
38
- <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 })" />
39
- <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 })" />
40
66
  </slot>
41
67
 
42
- <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 })">
43
69
  <slot :name="item.slot ? `${item.slot}-label`: 'item-label'" :item="(item as T)" :active="active" :index="index">
44
- {{ item.label }}
70
+ {{ get(item, props.labelKey as string) }}
45
71
  </slot>
46
72
 
47
- <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 })" />
48
74
  </span>
49
75
 
50
- <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 })">
51
77
  <slot :name="item.slot ? `${item.slot}-trailing`: 'item-trailing'" :item="(item as T)" :active="active" :index="index">
52
- <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 })" />
53
79
  <span v-else-if="item.kbds?.length" :class="ui.itemTrailingKbds({ class: uiOverride?.itemTrailingKbds })">
54
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" />
55
81
  </span>
56
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>
57
87
  </span>
58
88
  </slot>
59
89
  </DefineItemTemplate>
@@ -71,8 +101,8 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
71
101
  as="button"
72
102
  type="button"
73
103
  :disabled="item.disabled"
74
- :text-value="item.label"
75
- :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 })"
76
106
  >
77
107
  <ReuseItemTemplate :item="item" :index="index" />
78
108
  </DropdownMenu.SubTrigger>
@@ -88,6 +118,9 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
88
118
  align="start"
89
119
  :align-offset="-4"
90
120
  :side-offset="3"
121
+ :label-key="labelKey"
122
+ :checked-icon="checkedIcon"
123
+ :loading-icon="loadingIcon"
91
124
  v-bind="item.content"
92
125
  >
93
126
  <template v-for="(_, name) in proxySlots" #[name]="slotData: any">
@@ -95,9 +128,26 @@ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0
95
128
  </template>
96
129
  </UDropdownMenuContent>
97
130
  </DropdownMenu.Sub>
98
- <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
+ >
99
149
  <ULink v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item as Omit<DropdownMenuItem, 'type'>)" custom>
100
- <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 })">
101
151
  <ReuseItemTemplate :item="item" :active="active" :index="index" />
102
152
  </ULinkBase>
103
153
  </ULink>
@@ -1,16 +1,44 @@
1
- <script>
2
- import { tv } from "tailwind-variants";
3
- import _appConfig from "#build/app.config";
4
- import theme from "#build/ui/form";
5
- const appConfig = _appConfig;
6
- const form = tv({ extend: tv(theme), ...appConfig.ui?.form || {} });
1
+ <script lang="ts">
2
+ import { tv } from 'tailwind-variants'
3
+ import type { AppConfig } from '@nuxt/schema'
4
+ import _appConfig from '#build/app.config'
5
+ import theme from '#build/ui/form'
6
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
+ import type { FormSchema, FormError, FormInputEvents, FormErrorEvent, FormSubmitEvent, FormEvent, Form, FormErrorWithId } from '../types/form'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { form: Partial<typeof theme> } }
10
+
11
+ const form = tv({ extend: tv(theme), ...(appConfig.ui?.form || {}) })
12
+
13
+ export interface FormProps<T extends object> {
14
+ id?: string | number
15
+ schema?: FormSchema<T>
16
+ state: Partial<T>
17
+ validate?: (state: Partial<T>) => Promise<FormError[]> | FormError[]
18
+ validateOn?: FormInputEvents[]
19
+ disabled?: boolean
20
+ validateOnInputDelay?: number
21
+ class?: any
22
+ onSubmit?: ((event: FormSubmitEvent<T>) => void | Promise<void>) | (() => void | Promise<void>)
23
+ }
24
+
25
+ export interface FormEmits<T extends object> {
26
+ (e: 'submit', payload: FormSubmitEvent<T>): void
27
+ (e: 'error', payload: FormErrorEvent): void
28
+ }
29
+
30
+ export interface FormSlots {
31
+ default(props?: {}): any
32
+ }
33
+
34
+ extendDevtoolsMeta({ example: 'FormExample' })
7
35
  </script>
8
36
 
9
37
  <script lang="ts" setup generic="T extends object">
10
- import { provide, inject, nextTick, ref, onUnmounted, onMounted, computed, useId } from 'vue'
38
+ import { provide, inject, nextTick, ref, onUnmounted, onMounted, computed, useId, readonly } from 'vue'
11
39
  import { useEventBus } from '@vueuse/core'
12
- import { formOptionsInjectionKey, formInputsInjectionKey, formBusInjectionKey } from '../composables/useFormField'
13
- import { getYupErrors, isYupSchema, getValibotError, isValibotSchema, getZodErrors, isZodSchema, getJoiErrors, isJoiSchema } from '../utils/form'
40
+ import { formOptionsInjectionKey, formInputsInjectionKey, formBusInjectionKey, formLoadingInjectionKey } from '../composables/useFormField'
41
+ import { parseSchema } from '../utils/form'
14
42
  import { FormValidationException } from '../types/form'
15
43
 
16
44
  const props = withDefaults(defineProps<FormProps<T>>(), {
@@ -22,13 +50,14 @@ const props = withDefaults(defineProps<FormProps<T>>(), {
22
50
  const emits = defineEmits<FormEmits<T>>()
23
51
  defineSlots<FormSlots>()
24
52
 
25
- const formId = props.id ?? useId()
53
+ const formId = props.id ?? useId() as string
26
54
 
27
55
  const bus = useEventBus<FormEvent>(`form-${formId}`)
28
56
  const parentBus = inject(
29
57
  formBusInjectionKey,
30
58
  undefined
31
59
  )
60
+
32
61
  provide(formBusInjectionKey, bus)
33
62
 
34
63
  const nestedForms = ref<Map<string | number, { validate: () => any }>>(new Map())
@@ -62,38 +91,29 @@ onUnmounted(() => {
62
91
  }
63
92
  })
64
93
 
65
- provide(formOptionsInjectionKey, computed(() => ({
66
- disabled: props.disabled,
67
- validateOnInputDelay: props.validateOnInputDelay
68
- })))
69
-
70
94
  const errors = ref<FormErrorWithId[]>([])
71
95
  provide('form-errors', errors)
72
96
 
73
- const inputs = ref<Record<string, string>>({})
97
+ const inputs = ref<Record<string, { id?: string, pattern?: RegExp }>>({})
74
98
  provide(formInputsInjectionKey, inputs)
75
99
 
76
100
  function resolveErrorIds(errs: FormError[]): FormErrorWithId[] {
77
101
  return errs.map(err => ({
78
102
  ...err,
79
- id: inputs.value[err.name]
103
+ id: inputs.value[err.name]?.id
80
104
  }))
81
105
  }
82
106
 
107
+ const parsedValue = ref<T | null>(null)
83
108
  async function getErrors(): Promise<FormErrorWithId[]> {
84
109
  let errs = props.validate ? (await props.validate(props.state)) ?? [] : []
85
110
 
86
111
  if (props.schema) {
87
- if (isZodSchema(props.schema)) {
88
- errs = errs.concat(await getZodErrors(props.state, props.schema))
89
- } else if (isYupSchema(props.schema)) {
90
- errs = errs.concat(await getYupErrors(props.state, props.schema))
91
- } else if (isJoiSchema(props.schema)) {
92
- errs = errs.concat(await getJoiErrors(props.state, props.schema))
93
- } else if (isValibotSchema(props.schema)) {
94
- errs = errs.concat(await getValibotError(props.state, props.schema))
112
+ const { errors, result } = await parseSchema(props.state, props.schema as FormSchema<typeof props.state>)
113
+ if (errors) {
114
+ errs = errs.concat(errors)
95
115
  } else {
96
- throw new Error('Form validation failed: Unsupported form schema')
116
+ parsedValue.value = result
97
117
  }
98
118
  }
99
119
 
@@ -101,7 +121,7 @@ async function getErrors(): Promise<FormErrorWithId[]> {
101
121
  }
102
122
 
103
123
  async function _validate(opts: { name?: string | string[], silent?: boolean, nested?: boolean } = { silent: false, nested: true }): Promise<T | false> {
104
- const names = opts.name && !Array.isArray(opts.name) ? [opts.name] : opts.name
124
+ const names = opts.name && !Array.isArray(opts.name) ? [opts.name] : opts.name as string[]
105
125
 
106
126
  const nestedValidatePromises = !names && opts.nested
107
127
  ? Array.from(nestedForms.value.values()).map(
@@ -115,15 +135,23 @@ async function _validate(opts: { name?: string | string[], silent?: boolean, nes
115
135
  : []
116
136
 
117
137
  if (names) {
118
- const otherErrors = errors.value.filter(error => !names!.includes(error.name))
119
- const pathErrors = (await getErrors()).filter(error => names!.includes(error.name)
120
- )
138
+ const otherErrors = errors.value.filter(error => !names.some((name) => {
139
+ const pattern = inputs.value?.[name]?.pattern
140
+ return name === error.name || (pattern && error.name.match(pattern))
141
+ }))
142
+
143
+ const pathErrors = (await getErrors()).filter(error => names.some((name) => {
144
+ const pattern = inputs.value?.[name]?.pattern
145
+ return name === error.name || (pattern && error.name.match(pattern))
146
+ }))
147
+
121
148
  errors.value = otherErrors.concat(pathErrors)
122
149
  } else {
123
150
  errors.value = await getErrors()
124
151
  }
125
152
 
126
- const childErrors = nestedValidatePromises ? await Promise.all(nestedValidatePromises) : []
153
+ const childErrors = (await Promise.all(nestedValidatePromises)).filter(val => val)
154
+
127
155
  if (errors.value.length + childErrors.length > 0) {
128
156
  if (opts.silent) return false
129
157
  throw new FormValidationException(formId, errors.value, childErrors)
@@ -132,16 +160,18 @@ async function _validate(opts: { name?: string | string[], silent?: boolean, nes
132
160
  return props.state as T
133
161
  }
134
162
 
135
- async function onSubmit(payload: Event) {
136
- const event = payload as SubmitEvent
163
+ const loading = ref(false)
164
+ provide(formLoadingInjectionKey, readonly(loading))
165
+
166
+ async function onSubmitWrapper(payload: Event) {
167
+ loading.value = true
168
+
169
+ const event = payload as FormSubmitEvent<any>
137
170
 
138
171
  try {
139
172
  await _validate({ nested: true })
140
- const submitEvent: FormSubmitEvent<any> = {
141
- ...event,
142
- data: props.state
143
- }
144
- emits('submit', submitEvent)
173
+ event.data = props.schema ? parsedValue.value : props.state
174
+ await props.onSubmit?.(event)
145
175
  } catch (error) {
146
176
  if (!(error instanceof FormValidationException)) {
147
177
  throw error
@@ -152,11 +182,19 @@ async function onSubmit(payload: Event) {
152
182
  errors: error.errors,
153
183
  childrens: error.childrens
154
184
  }
155
-
156
185
  emits('error', errorEvent)
157
186
  }
187
+
188
+ loading.value = false
158
189
  }
159
190
 
191
+ const disabled = computed(() => props.disabled || loading.value)
192
+
193
+ provide(formOptionsInjectionKey, computed(() => ({
194
+ disabled: disabled.value,
195
+ validateOnInputDelay: props.validateOnInputDelay
196
+ })))
197
+
160
198
  defineExpose<Form<T>>({
161
199
  validate: _validate,
162
200
  errors,
@@ -172,7 +210,7 @@ defineExpose<Form<T>>({
172
210
  },
173
211
 
174
212
  async submit() {
175
- await onSubmit(new Event('submit'))
213
+ await onSubmitWrapper(new Event('submit'))
176
214
  },
177
215
 
178
216
  getErrors(name?: string) {
@@ -190,7 +228,7 @@ defineExpose<Form<T>>({
190
228
  }
191
229
  },
192
230
 
193
- disabled: computed(() => props.disabled)
231
+ disabled
194
232
  })
195
233
  </script>
196
234
 
@@ -199,7 +237,7 @@ defineExpose<Form<T>>({
199
237
  :is="parentBus ? 'div' : 'form'"
200
238
  :id="formId"
201
239
  :class="form({ class: props.class })"
202
- @submit.prevent="onSubmit"
240
+ @submit.prevent="onSubmitWrapper"
203
241
  >
204
242
  <slot />
205
243
  </component>