[{"data":1,"prerenderedAt":962},["ShallowReactive",2],{"navigation":3,"$f1jvagmno7cfld":496,"\u002Fdocs\u002Fcomponents\u002Fform":507,"surround-\u002Fdocs\u002Fcomponents\u002Fform":959},[4],{"title":5,"path":6,"stem":7,"children":8,"page":18},"Docs","\u002Fdocs","docs",[9,326,352,370,376,393,419,432],{"title":10,"path":11,"stem":12,"children":13,"new":18,"type":325},"Components","\u002Fdocs\u002Fcomponents","docs\u002F02.components",[14,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321],{"title":15,"path":16,"stem":17,"new":18,"type":19,"children":-1},"Accordion","\u002Fdocs\u002Fcomponents\u002Faccordion","docs\u002Fcomponents\u002Faccordion",false,"component",{"title":21,"path":22,"stem":23,"new":18,"type":19,"children":-1},"Alert","\u002Fdocs\u002Fcomponents\u002Falert","docs\u002Fcomponents\u002Falert",{"title":25,"path":26,"stem":27,"new":18,"type":19,"children":-1},"Alert Dialog","\u002Fdocs\u002Fcomponents\u002Falert-dialog","docs\u002Fcomponents\u002Falert-dialog",{"title":29,"path":30,"stem":31,"new":18,"type":19,"children":-1},"Aspect Ratio","\u002Fdocs\u002Fcomponents\u002Faspect-ratio","docs\u002Fcomponents\u002Faspect-ratio",{"title":33,"path":34,"stem":35,"new":18,"type":19,"children":-1},"Attachment","\u002Fdocs\u002Fcomponents\u002Fattachment","docs\u002Fcomponents\u002Fattachment",{"title":37,"path":38,"stem":39,"new":18,"type":19,"children":-1},"Avatar","\u002Fdocs\u002Fcomponents\u002Favatar","docs\u002Fcomponents\u002Favatar",{"title":41,"path":42,"stem":43,"new":18,"type":19,"children":-1},"Badge","\u002Fdocs\u002Fcomponents\u002Fbadge","docs\u002Fcomponents\u002Fbadge",{"title":45,"path":46,"stem":47,"new":18,"type":19,"children":-1},"Breadcrumb","\u002Fdocs\u002Fcomponents\u002Fbreadcrumb","docs\u002Fcomponents\u002Fbreadcrumb",{"title":49,"path":50,"stem":51,"new":18,"type":19,"children":-1},"Bubble","\u002Fdocs\u002Fcomponents\u002Fbubble","docs\u002Fcomponents\u002Fbubble",{"title":53,"path":54,"stem":55,"new":18,"type":19,"children":-1},"Button","\u002Fdocs\u002Fcomponents\u002Fbutton","docs\u002Fcomponents\u002Fbutton",{"title":57,"path":58,"stem":59,"new":18,"type":19,"children":-1},"Button Group","\u002Fdocs\u002Fcomponents\u002Fbutton-group","docs\u002Fcomponents\u002Fbutton-group",{"title":61,"path":62,"stem":63,"new":18,"type":19,"children":-1},"Calendar","\u002Fdocs\u002Fcomponents\u002Fcalendar","docs\u002Fcomponents\u002Fcalendar",{"title":65,"path":66,"stem":67,"new":18,"type":19,"children":-1},"Card","\u002Fdocs\u002Fcomponents\u002Fcard","docs\u002Fcomponents\u002Fcard",{"title":69,"path":70,"stem":71,"new":18,"type":19,"children":-1},"Carousel","\u002Fdocs\u002Fcomponents\u002Fcarousel","docs\u002Fcomponents\u002Fcarousel",{"title":73,"path":74,"stem":75,"new":18,"type":19,"children":-1},"Chart","\u002Fdocs\u002Fcomponents\u002Fchart","docs\u002Fcomponents\u002Fchart",{"title":77,"path":78,"stem":79,"new":18,"type":19,"children":-1},"Checkbox","\u002Fdocs\u002Fcomponents\u002Fcheckbox","docs\u002Fcomponents\u002Fcheckbox",{"title":81,"path":82,"stem":83,"new":18,"type":19,"children":-1},"Collapsible","\u002Fdocs\u002Fcomponents\u002Fcollapsible","docs\u002Fcomponents\u002Fcollapsible",{"title":85,"path":86,"stem":87,"new":18,"type":19,"children":-1},"ColorPicker","\u002Fdocs\u002Fcomponents\u002Fcolor-picker","docs\u002Fcomponents\u002Fcolor-picker",{"title":89,"path":90,"stem":91,"new":18,"type":19,"children":-1},"Combobox","\u002Fdocs\u002Fcomponents\u002Fcombobox","docs\u002Fcomponents\u002Fcombobox",{"title":93,"path":94,"stem":95,"new":18,"type":19,"children":-1},"Command","\u002Fdocs\u002Fcomponents\u002Fcommand","docs\u002Fcomponents\u002Fcommand",{"title":97,"path":98,"stem":99,"new":18,"type":19,"children":-1},"Context Menu","\u002Fdocs\u002Fcomponents\u002Fcontext-menu","docs\u002Fcomponents\u002Fcontext-menu",{"title":101,"path":102,"stem":103,"new":18,"type":19,"children":-1},"Curves","\u002Fdocs\u002Fcomponents\u002Fcurves","docs\u002Fcomponents\u002Fcurves",{"title":105,"path":106,"stem":107,"new":18,"type":19,"children":-1},"Data Table","\u002Fdocs\u002Fcomponents\u002Fdata-table","docs\u002Fcomponents\u002Fdata-table",{"title":109,"path":110,"stem":111,"new":18,"type":19,"children":-1},"Date Picker","\u002Fdocs\u002Fcomponents\u002Fdate-picker","docs\u002Fcomponents\u002Fdate-picker",{"title":113,"path":114,"stem":115,"new":18,"type":19,"children":-1},"Dialog","\u002Fdocs\u002Fcomponents\u002Fdialog","docs\u002Fcomponents\u002Fdialog",{"title":117,"path":118,"stem":119,"new":18,"type":19,"children":-1},"Drawer","\u002Fdocs\u002Fcomponents\u002Fdrawer","docs\u002Fcomponents\u002Fdrawer",{"title":121,"path":122,"stem":123,"new":18,"type":19,"children":-1},"Dropdown Menu","\u002Fdocs\u002Fcomponents\u002Fdropdown-menu","docs\u002Fcomponents\u002Fdropdown-menu",{"title":125,"path":126,"stem":127,"new":18,"type":19,"children":-1},"Empty","\u002Fdocs\u002Fcomponents\u002Fempty","docs\u002Fcomponents\u002Fempty",{"title":129,"path":130,"stem":131,"new":18,"type":19,"children":-1},"Field","\u002Fdocs\u002Fcomponents\u002Ffield","docs\u002Fcomponents\u002Ffield",{"title":133,"path":134,"stem":135,"new":18,"type":19,"children":-1},"FontPicker","\u002Fdocs\u002Fcomponents\u002Ffont-picker","docs\u002Fcomponents\u002Ffont-picker",{"title":137,"path":138,"stem":139,"new":18,"type":19,"children":-1},"Form","\u002Fdocs\u002Fcomponents\u002Fform","docs\u002Fcomponents\u002Fform",{"title":141,"path":142,"stem":143,"new":18,"type":19,"children":-1},"Gradient Picker","\u002Fdocs\u002Fcomponents\u002Fgradient-picker","docs\u002Fcomponents\u002Fgradient-picker",{"title":145,"path":146,"stem":147,"new":18,"type":19,"children":-1},"Hover Card","\u002Fdocs\u002Fcomponents\u002Fhover-card","docs\u002Fcomponents\u002Fhover-card",{"title":149,"path":150,"stem":151,"new":18,"type":19,"children":-1},"Input","\u002Fdocs\u002Fcomponents\u002Finput","docs\u002Fcomponents\u002Finput",{"title":153,"path":154,"stem":155,"new":18,"type":19,"children":-1},"Input Group","\u002Fdocs\u002Fcomponents\u002Finput-group","docs\u002Fcomponents\u002Finput-group",{"title":157,"path":158,"stem":159,"new":18,"type":19,"children":-1},"Input OTP","\u002Fdocs\u002Fcomponents\u002Finput-otp","docs\u002Fcomponents\u002Finput-otp",{"title":161,"path":162,"stem":163,"new":18,"type":19,"children":-1},"Item","\u002Fdocs\u002Fcomponents\u002Fitem","docs\u002Fcomponents\u002Fitem",{"title":165,"path":166,"stem":167,"new":18,"type":19,"children":-1},"Kbd","\u002Fdocs\u002Fcomponents\u002Fkbd","docs\u002Fcomponents\u002Fkbd",{"title":169,"path":170,"stem":171,"new":18,"type":19,"children":-1},"Label","\u002Fdocs\u002Fcomponents\u002Flabel","docs\u002Fcomponents\u002Flabel",{"title":173,"path":174,"stem":175,"new":18,"type":19,"children":-1},"Marker","\u002Fdocs\u002Fcomponents\u002Fmarker","docs\u002Fcomponents\u002Fmarker",{"title":177,"path":178,"stem":179,"new":18,"type":19,"children":-1},"Menubar","\u002Fdocs\u002Fcomponents\u002Fmenubar","docs\u002Fcomponents\u002Fmenubar",{"title":181,"path":182,"stem":183,"new":18,"type":19,"children":-1},"Message","\u002Fdocs\u002Fcomponents\u002Fmessage","docs\u002Fcomponents\u002Fmessage",{"title":185,"path":186,"stem":187,"new":18,"type":19,"children":-1},"Message Scroller","\u002Fdocs\u002Fcomponents\u002Fmessage-scroller","docs\u002Fcomponents\u002Fmessage-scroller",{"title":189,"path":190,"stem":191,"new":18,"type":19,"children":-1},"Native Select","\u002Fdocs\u002Fcomponents\u002Fnative-select","docs\u002Fcomponents\u002Fnative-select",{"title":193,"path":194,"stem":195,"new":18,"type":19,"children":-1},"Navigation Menu","\u002Fdocs\u002Fcomponents\u002Fnavigation-menu","docs\u002Fcomponents\u002Fnavigation-menu",{"title":197,"path":198,"stem":199,"new":18,"type":19,"children":-1},"Number Field","\u002Fdocs\u002Fcomponents\u002Fnumber-field","docs\u002Fcomponents\u002Fnumber-field",{"title":201,"path":202,"stem":203,"new":18,"type":19,"children":-1},"Pagination","\u002Fdocs\u002Fcomponents\u002Fpagination","docs\u002Fcomponents\u002Fpagination",{"title":205,"path":206,"stem":207,"new":18,"type":19,"children":-1},"Pin Input","\u002Fdocs\u002Fcomponents\u002Fpin-input","docs\u002Fcomponents\u002Fpin-input",{"title":209,"path":210,"stem":211,"new":18,"type":19,"children":-1},"Popover","\u002Fdocs\u002Fcomponents\u002Fpopover","docs\u002Fcomponents\u002Fpopover",{"title":213,"path":214,"stem":215,"new":18,"type":19,"children":-1},"Progress","\u002Fdocs\u002Fcomponents\u002Fprogress","docs\u002Fcomponents\u002Fprogress",{"title":217,"path":218,"stem":219,"new":220,"type":19,"children":-1},"Questionnaire","\u002Fdocs\u002Fcomponents\u002Fquestionnaire","docs\u002Fcomponents\u002Fquestionnaire",true,{"title":222,"path":223,"stem":224,"new":18,"type":19,"children":-1},"Radio Group","\u002Fdocs\u002Fcomponents\u002Fradio-group","docs\u002Fcomponents\u002Fradio-group",{"title":226,"path":227,"stem":228,"new":18,"type":19,"children":-1},"Range Calendar","\u002Fdocs\u002Fcomponents\u002Frange-calendar","docs\u002Fcomponents\u002Frange-calendar",{"title":230,"path":231,"stem":232,"new":18,"type":19,"children":-1},"Resizable","\u002Fdocs\u002Fcomponents\u002Fresizable","docs\u002Fcomponents\u002Fresizable",{"title":234,"path":235,"stem":236,"new":18,"type":19,"children":-1},"Scroll Area","\u002Fdocs\u002Fcomponents\u002Fscroll-area","docs\u002Fcomponents\u002Fscroll-area",{"title":238,"path":239,"stem":240,"new":18,"type":19,"children":-1},"Select","\u002Fdocs\u002Fcomponents\u002Fselect","docs\u002Fcomponents\u002Fselect",{"title":242,"path":243,"stem":244,"new":18,"type":19,"children":-1},"Separator","\u002Fdocs\u002Fcomponents\u002Fseparator","docs\u002Fcomponents\u002Fseparator",{"title":246,"path":247,"stem":248,"new":18,"type":19,"children":-1},"Sheet","\u002Fdocs\u002Fcomponents\u002Fsheet","docs\u002Fcomponents\u002Fsheet",{"title":250,"path":251,"stem":252,"new":18,"type":19,"children":-1},"Sidebar","\u002Fdocs\u002Fcomponents\u002Fsidebar","docs\u002Fcomponents\u002Fsidebar",{"title":254,"path":255,"stem":256,"new":18,"type":19,"children":-1},"Skeleton","\u002Fdocs\u002Fcomponents\u002Fskeleton","docs\u002Fcomponents\u002Fskeleton",{"title":258,"path":259,"stem":260,"new":18,"type":19,"children":-1},"Slider","\u002Fdocs\u002Fcomponents\u002Fslider","docs\u002Fcomponents\u002Fslider",{"title":262,"path":263,"stem":264,"new":18,"type":19,"children":-1},"Sonner","\u002Fdocs\u002Fcomponents\u002Fsonner","docs\u002Fcomponents\u002Fsonner",{"title":266,"path":267,"stem":268,"new":18,"type":19,"children":-1},"Spinner","\u002Fdocs\u002Fcomponents\u002Fspinner","docs\u002Fcomponents\u002Fspinner",{"title":270,"path":271,"stem":272,"new":18,"type":19,"children":-1},"Stepper","\u002Fdocs\u002Fcomponents\u002Fstepper","docs\u002Fcomponents\u002Fstepper",{"title":274,"path":275,"stem":276,"new":18,"type":19,"children":-1},"Switch","\u002Fdocs\u002Fcomponents\u002Fswitch","docs\u002Fcomponents\u002Fswitch",{"title":278,"path":279,"stem":280,"new":18,"type":19,"children":-1},"Table","\u002Fdocs\u002Fcomponents\u002Ftable","docs\u002Fcomponents\u002Ftable",{"title":282,"path":283,"stem":284,"new":18,"type":19,"children":-1},"Tabs","\u002Fdocs\u002Fcomponents\u002Ftabs","docs\u002Fcomponents\u002Ftabs",{"title":286,"path":287,"stem":288,"new":18,"type":19,"children":-1},"Tags Input","\u002Fdocs\u002Fcomponents\u002Ftags-input","docs\u002Fcomponents\u002Ftags-input",{"title":290,"path":291,"stem":292,"new":18,"type":19,"children":-1},"Textarea","\u002Fdocs\u002Fcomponents\u002Ftextarea","docs\u002Fcomponents\u002Ftextarea",{"title":294,"path":295,"stem":296,"new":18,"type":19,"children":-1},"Toast","\u002Fdocs\u002Fcomponents\u002Ftoast","docs\u002Fcomponents\u002Ftoast",{"title":298,"path":299,"stem":300,"new":18,"type":19,"children":-1},"Toggle","\u002Fdocs\u002Fcomponents\u002Ftoggle","docs\u002Fcomponents\u002Ftoggle",{"title":302,"path":303,"stem":304,"new":18,"type":19,"children":-1},"Toggle Group","\u002Fdocs\u002Fcomponents\u002Ftoggle-group","docs\u002Fcomponents\u002Ftoggle-group",{"title":306,"path":307,"stem":308,"new":18,"type":19,"children":-1},"Tool Rail","\u002Fdocs\u002Fcomponents\u002Ftool-rail","docs\u002Fcomponents\u002Ftool-rail",{"title":310,"path":311,"stem":312,"new":18,"type":19,"children":-1},"Tooltip","\u002Fdocs\u002Fcomponents\u002Ftooltip","docs\u002Fcomponents\u002Ftooltip",{"title":314,"path":315,"stem":316,"new":18,"type":19,"children":-1},"Tree","\u002Fdocs\u002Fcomponents\u002Ftree","docs\u002Fcomponents\u002Ftree",{"title":318,"path":319,"stem":320,"new":18,"type":19,"children":-1},"Typography","\u002Fdocs\u002Fcomponents\u002Ftypography","docs\u002Fcomponents\u002Ftypography",{"title":322,"path":323,"stem":324,"new":18,"type":19,"children":-1},"Vector Pad","\u002Fdocs\u002Fcomponents\u002Fvector-pad","docs\u002Fcomponents\u002Fvector-pad","group",{"title":327,"path":328,"stem":329,"children":330,"new":18,"type":325},"Installation","\u002Fdocs\u002Finstallation","docs\u002F02.installation",[331,336,340,344,348],{"title":332,"path":333,"stem":334,"new":18,"type":335,"children":-1},"Vite","\u002Fdocs\u002Finstallation\u002Fvite","docs\u002Finstallation\u002F01.vite","page",{"title":337,"path":338,"stem":339,"new":18,"type":335,"children":-1},"Nuxt","\u002Fdocs\u002Finstallation\u002Fnuxt","docs\u002Finstallation\u002F02.nuxt",{"title":341,"path":342,"stem":343,"new":18,"type":335,"children":-1},"Astro","\u002Fdocs\u002Finstallation\u002Fastro","docs\u002Finstallation\u002F03.astro",{"title":345,"path":346,"stem":347,"new":18,"type":335,"children":-1},"Laravel","\u002Fdocs\u002Finstallation\u002Flaravel","docs\u002Finstallation\u002F04.laravel",{"title":349,"path":350,"stem":351,"new":18,"type":335,"children":-1},"Manual Installation","\u002Fdocs\u002Finstallation\u002Fmanual","docs\u002Finstallation\u002F05.manual",{"title":353,"path":354,"stem":355,"children":356,"new":18,"type":325},"Dark Mode","\u002Fdocs\u002Fdark-mode","docs\u002F05.dark-mode",[357,360,363,367],{"title":332,"path":358,"stem":359,"new":18,"type":335,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fvite","docs\u002Fdark-mode\u002F01.vite",{"title":337,"path":361,"stem":362,"new":18,"type":335,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fnuxt","docs\u002Fdark-mode\u002F02.nuxt",{"title":364,"path":365,"stem":366,"new":18,"type":335,"children":-1},"Vitepress","\u002Fdocs\u002Fdark-mode\u002Fvitepress","docs\u002Fdark-mode\u002F03.vitepress",{"title":341,"path":368,"stem":369,"new":18,"type":335,"children":-1},"\u002Fdocs\u002Fdark-mode\u002Fastro","docs\u002Fdark-mode\u002F04.astro",{"title":371,"path":372,"stem":373,"children":374,"new":18,"type":325},"Directory","\u002Fdocs\u002Fdirectory","docs\u002Fdirectory\u002Findex",[375],{"title":371,"path":372,"stem":373,"new":18,"type":335,"children":-1},{"title":377,"path":378,"stem":379,"children":380,"new":18,"type":325},"Forms","\u002Fdocs\u002Fforms","docs\u002Fforms",[381,385,389],{"title":382,"path":383,"stem":384,"new":18,"type":335,"children":-1},"VeeValidate","\u002Fdocs\u002Fforms\u002Fvee-validate","docs\u002Fforms\u002F01.vee-validate",{"title":386,"path":387,"stem":388,"new":18,"type":335,"children":-1},"TanStack Form","\u002Fdocs\u002Fforms\u002Ftanstack-form","docs\u002Fforms\u002F02.tanstack-form",{"title":390,"path":391,"stem":392,"new":18,"type":335,"children":-1},"Formisch","\u002Fdocs\u002Fforms\u002Fformisch","docs\u002Fforms\u002F03.formisch",{"title":394,"path":395,"stem":396,"children":397,"new":18,"type":325},"Registry","\u002Fdocs\u002Fregistry","docs\u002Fregistry\u002Findex",[398,399,403,407,411,415],{"title":394,"path":395,"stem":396,"new":18,"type":335,"children":-1},{"title":400,"path":401,"stem":402,"new":18,"type":335,"children":-1},"Examples","\u002Fdocs\u002Fregistry\u002Fexamples","docs\u002Fregistry\u002Fexamples",{"title":404,"path":405,"stem":406,"new":18,"type":335,"children":-1},"FAQ","\u002Fdocs\u002Fregistry\u002Ffaq","docs\u002Fregistry\u002Ffaq",{"title":408,"path":409,"stem":410,"new":18,"type":335,"children":-1},"Getting Started","\u002Fdocs\u002Fregistry\u002Fgetting-started","docs\u002Fregistry\u002Fgetting-started",{"title":412,"path":413,"stem":414,"new":18,"type":335,"children":-1},"registry-item.json","\u002Fdocs\u002Fregistry\u002Fregistry-item-json","docs\u002Fregistry\u002Fregistry-item-json",{"title":416,"path":417,"stem":418,"new":18,"type":335,"children":-1},"registry.json","\u002Fdocs\u002Fregistry\u002Fregistry-json","docs\u002Fregistry\u002Fregistry-json",{"title":420,"path":421,"stem":422,"children":423,"page":18,"type":325},"Utilities","\u002Fdocs\u002Futilities","docs\u002Futilities",[424,428],{"title":425,"path":426,"stem":427,"new":18,"type":335,"children":-1},"scroll-fade","\u002Fdocs\u002Futilities\u002Fscroll-fade","docs\u002Futilities\u002Fscroll-fade",{"title":429,"path":430,"stem":431,"new":18,"type":335,"children":-1},"shimmer","\u002Fdocs\u002Futilities\u002Fshimmer","docs\u002Futilities\u002Fshimmer",{"path":6,"stem":7,"title":433,"type":325,"children":434},"Get Started",[435,439,446,450,454,460,464,468,472,476,480,484,488,492],{"title":436,"path":437,"stem":438,"new":18,"type":335,"children":-1},"Introduction","\u002Fdocs\u002Fintroduction","docs\u002F01.introduction",{"title":327,"path":328,"stem":329,"children":440,"new":18,"type":325},[441,442,443,444,445],{"title":332,"path":333,"stem":334,"new":18,"type":335,"children":-1},{"title":337,"path":338,"stem":339,"new":18,"type":335,"children":-1},{"title":341,"path":342,"stem":343,"new":18,"type":335,"children":-1},{"title":345,"path":346,"stem":347,"new":18,"type":335,"children":-1},{"title":349,"path":350,"stem":351,"new":18,"type":335,"children":-1},{"title":447,"path":448,"stem":449,"new":18,"type":335,"children":-1},"components.json","\u002Fdocs\u002Fcomponents-json","docs\u002F03.components-json",{"title":451,"path":452,"stem":453,"new":18,"type":335,"children":-1},"Theming","\u002Fdocs\u002Ftheming","docs\u002F04.theming",{"title":353,"path":354,"stem":355,"children":455,"new":18,"type":325},[456,457,458,459],{"title":332,"path":358,"stem":359,"new":18,"type":335,"children":-1},{"title":337,"path":361,"stem":362,"new":18,"type":335,"children":-1},{"title":364,"path":365,"stem":366,"new":18,"type":335,"children":-1},{"title":341,"path":368,"stem":369,"new":18,"type":335,"children":-1},{"title":461,"path":462,"stem":463,"new":18,"type":335,"children":-1},"CLI","\u002Fdocs\u002Fcli","docs\u002F06.cli",{"title":465,"path":466,"stem":467,"new":18,"type":335,"children":-1},"JavaScript","\u002Fdocs\u002Fjavascript","docs\u002F07.javascript",{"title":469,"path":470,"stem":471,"new":18,"type":335,"children":-1},"RTL","\u002Fdocs\u002Frtl","docs\u002F08.rtl",{"title":473,"path":474,"stem":475,"new":18,"type":335,"children":-1},"Figma","\u002Fdocs\u002Ffigma","docs\u002F09.figma",{"title":477,"path":478,"stem":479,"new":18,"type":335,"children":-1},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F10.changelog",{"title":481,"path":482,"stem":483,"new":18,"type":335,"children":-1},"Legacy Docs","\u002Fdocs\u002Flegacy","docs\u002F11.legacy",{"title":485,"path":486,"stem":487,"new":18,"type":335,"children":-1},"Skills","\u002Fdocs\u002Fskills","docs\u002Fskills",{"title":489,"path":490,"stem":491,"new":18,"type":335,"children":-1},"Typeset","\u002Fdocs\u002Ftypeset","docs\u002Ftypeset",{"title":420,"path":421,"stem":422,"children":493,"page":18,"type":325},[494,495],{"title":425,"path":426,"stem":427,"new":18,"type":335,"children":-1},{"title":429,"path":430,"stem":431,"new":18,"type":335,"children":-1},{"repo":497},{"id":498,"name":499,"repo":500,"description":501,"createdAt":502,"updatedAt":503,"pushedAt":504,"stars":505,"watchers":505,"forks":505,"defaultBranch":506},1338772706,"hui-vue","Clientik\u002Fhui-vue",null,"2026-08-18T19:33:07Z","2026-08-25T22:44:28Z","2026-08-25T22:44:11Z",0,"main",{"id":508,"title":137,"body":509,"description":952,"extension":953,"links":501,"meta":954,"navigation":220,"new":18,"path":138,"rawbody":956,"seo":957,"stem":139,"__hash__":958},"content\u002Fdocs\u002Fcomponents\u002Fform.md",{"type":510,"value":511,"toc":940},"minimark",[512,535,538,541,560,583,588,598,653,661,669,673,683,687,738,741,799,803,809,814,821,830,836,848,852,865],[513,514,516],"callout",{"title":515},"We are not actively developing this component anymore.",[517,518,519,520,524,525,531,532,534],"p",{},"The Form component is an abstraction over the ",[521,522,523],"code",{},"vee-validate"," library. Going forward, we recommend using the ",[526,527,528],"a",{"href":130},[521,529,530],{},"\u003CField \u002F>"," component to build forms. See the ",[526,533,137],{"href":378}," documentation for more information.",[517,536,537],{},"Forms are tricky. They are one of the most common things you'll build in a web application, but also one of the most complex.",[517,539,540],{},"Well-designed HTML forms are:",[542,543,544,548,551,554,557],"ul",{},[545,546,547],"li",{},"Well-structured and semantically correct.",[545,549,550],{},"Easy to use and navigate (keyboard).",[545,552,553],{},"Accessible with ARIA attributes and proper labels.",[545,555,556],{},"Has support for client and server side validation.",[545,558,559],{},"Well-styled and consistent with the rest of the application.",[517,561,562,563,570,571,578,579,582],{},"In this guide, we will take a look at building forms with ",[526,564,568],{"href":565,"rel":566},"https:\u002F\u002Fvee-validate.logaretm.com\u002Fv4\u002F",[567],"nofollow",[521,569,523],{}," and ",[526,572,575],{"href":573,"rel":574},"https:\u002F\u002Fzod.dev",[567],[521,576,577],{},"zod",". We're going to use a ",[521,580,581],{},"\u003CFormField>"," component to compose accessible forms using Reka UI components.",[584,585,587],"h2",{"id":586},"features","Features",[517,589,590,591,594,595,597],{},"The ",[521,592,593],{},"\u003CForm \u002F>"," component is a wrapper around the ",[521,596,523],{}," library. It provides a few things:",[542,599,600,603,610,616,623,626,647],{},[545,601,602],{},"Composable components for building forms.",[545,604,605,606,609],{},"A ",[521,607,608],{},"\u003CFormField \u002F>"," component for building controlled form fields.",[545,611,612,613,615],{},"Form validation using ",[521,614,577],{},".",[545,617,618,619,622],{},"Applies the correct ",[521,620,621],{},"aria"," attributes to form fields based on states, handle unique IDs",[545,624,625],{},"Built to work with all Reka UI components.",[545,627,628,629,631,632,639,640,615],{},"Bring your own schema library. We use ",[521,630,577],{}," but you can use any other supported schema validation you want, like ",[526,633,636],{"href":634,"rel":635},"https:\u002F\u002Fgithub.com\u002Fjquense\u002Fyup",[567],[521,637,638],{},"yup"," or ",[526,641,644],{"href":642,"rel":643},"https:\u002F\u002Fvalibot.dev\u002F",[567],[521,645,646],{},"valibot",[545,648,649],{},[650,651,652],"strong",{},"You have full control over the markup and styling.",[517,654,655,660],{},[526,656,658],{"href":565,"rel":657},[567],[521,659,523],{}," makes use of two flavors to add validation to your forms.",[542,662,663,666],{},[545,664,665],{},"Composition API",[545,667,668],{},"Higher-order components (HOC)",[584,670,672],{"id":671},"anatomy","Anatomy",[674,675,681],"pre",{"className":676,"code":678,"language":679,"meta":680},[677],"language-vue","\u003Ctemplate>\n  \u003CForm>\n    \u003CFormField>\n      \u003CFormItem>\n        \u003CFormLabel \u002F>\n        \u003CFormControl>\n        \u003C!-- any Form Input component or native input elements -->\n        \u003C\u002FFormControl>\n        \u003CFormDescription \u002F>\n        \u003CFormMessage \u002F>\n      \u003C\u002FFormItem>\n    \u003C\u002FFormField>\n  \u003C\u002FForm>\n\u003C\u002Ftemplate>\n","vue","",[521,682,678],{"__ignoreMap":680},[584,684,686],{"id":685},"example","Example",[688,689,690,705,722],"tabs",{"default-value":19},[691,692,693,699],"tabs-list",{},[694,695,696],"tabs-trigger",{"value":19},[517,697,698],{},"Component",[694,700,702],{"value":701},"native",[517,703,704],{},"Native",[706,707,708,715],"tabs-content",{"value":19},[709,710,712,714],"h4",{"id":711},"input-component",[521,713,149],{}," Component",[674,716,720],{"className":717,"code":718,"language":679,"meta":719},[677],"\u003Ctemplate>\n  \u003CFormField v-slot=\"{ componentField }\">\n    \u003CFormItem>\n      \u003CFormLabel>Username\u003C\u002FFormLabel>\n      \u003CFormControl>\n        \u003CInput placeholder=\"hui\" v-bind=\"componentField\" \u002F>\n      \u003C\u002FFormControl>\n      \u003CFormDescription \u002F>\n      \u003CFormMessage \u002F>\n    \u003C\u002FFormItem>\n  \u003C\u002FFormField>\n\u003C\u002Ftemplate>\n","showLineNumbers",[521,721,718],{"__ignoreMap":680},[706,723,724,732],{"value":701},[709,725,727,728,731],{"id":726},"native-input-element","native ",[521,729,730],{},"input"," element",[674,733,736],{"className":734,"code":735,"language":679,"meta":719},[677],"\u003Ctemplate>\n  \u003CFormField v-slot=\"{ field }\">\n    \u003CFormItem>\n      \u003CFormLabel>Username\u003C\u002FFormLabel>\n      \u003CFormControl>\n        \u003Cinput placeholder=\"hui\" v-bind=\"field\">\n      \u003C\u002FFormControl>\n      \u003CFormDescription \u002F>\n      \u003CFormMessage \u002F>\n    \u003C\u002FFormItem>\n  \u003C\u002FFormField>\n\u003C\u002Ftemplate>\n",[521,737,735],{"__ignoreMap":680},[584,739,327],{"id":740},"installation",[688,742,744,756,766],{"default-value":743},"cli",[691,745,746,750],{},[694,747,748],{"value":743},[517,749,461],{},[694,751,753],{"value":752},"manual",[517,754,755],{},"Manual",[706,757,758],{"value":743},[674,759,764],{"className":760,"code":762,"language":763,"meta":680},[761],"language-bash","npx hui-kit@latest add form\n","bash",[521,765,762],{"__ignoreMap":680},[706,767,768],{"value":752},[769,770,771,777,783,794],"steps",{},[772,773,774],"step",{},[517,775,776],{},"Install the following dependency:",[674,778,781],{"className":779,"code":780,"language":763,"meta":680},[761],"npm install reka-ui vee-validate @vee-validate\u002Fzod zod\n",[521,782,780],{"__ignoreMap":680},[772,784,785],{},[517,786,787,788,793],{},"Copy and paste the ",[526,789,792],{"href":790,"rel":791},"https:\u002F\u002Fgithub.com\u002FClientik\u002Fhui-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fhui\u002Fui\u002Fform",[567],"GitHub source code"," into your project.",[772,795,796],{},[517,797,798],{},"Update the import paths to match your project setup.",[584,800,802],{"id":801},"usage","Usage",[674,804,807],{"className":805,"code":806,"language":679,"meta":719},[677],"\u003Cscript setup lang=\"ts\">\nimport {\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from '@\u002Fcomponents\u002Fui\u002Fform'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CFormField v-slot=\"{ componentField }\" name=\"username\">\n    \u003CFormItem>\n      \u003CFormLabel>Username\u003C\u002FFormLabel>\n      \u003CFormControl>\n        \u003CInput placeholder=\"hui\" v-bind=\"componentField\" \u002F>\n      \u003C\u002FFormControl>\n      \u003CFormDescription>\n        This is your public display name.\n      \u003C\u002FFormDescription>\n      \u003CFormMessage \u002F>\n    \u003C\u002FFormItem>\n  \u003C\u002FFormField>\n\u003C\u002Ftemplate>\n",[521,808,806],{"__ignoreMap":680},[810,811,813],"h3",{"id":812},"create-a-form-schema","Create a form schema",[517,815,816,817,615],{},"Define the shape of your form using a Zod schema. You can read more about using Zod in the ",[526,818,820],{"href":573,"rel":819},[567],"Zod documentation",[517,822,823,824,827,828],{},"Use ",[521,825,826],{},"@vee-validate\u002Fzod"," to integrate Zod schema validation with ",[521,829,523],{},[517,831,832,835],{},[521,833,834],{},"toTypedSchema"," also makes the form values and submitted values typed automatically and caters for both input and output types of that schema.",[674,837,846],{"className":838,"code":839,"highlights":840,"language":679,"meta":719},[677],"\u003Cscript setup lang=\"ts\">\nimport { toTypedSchema } from '@vee-validate\u002Fzod'\nimport * as z from 'zod'\n\nconst formSchema = toTypedSchema(z.object({\n  username: z.string().min(2).max(50),\n}))\n\u003C\u002Fscript>\n",[841,842,843,844,845],2,3,5,6,7,[521,847,839],{"__ignoreMap":680},[810,849,851],{"id":850},"define-a-form","Define a form",[517,853,854,855,858,859,861,862,864],{},"Use the ",[521,856,857],{},"useForm"," composable from ",[521,860,523],{}," or use ",[521,863,593],{}," component to create a form.",[688,866,868,879,891,903,907,919,926,930,933],{"default-value":867},"composition",[691,869,870,875],{},[694,871,872],{"value":867},[517,873,874],{},"Composition",[694,876,877],{"value":19},[517,878,698],{},[706,880,881],{"value":867},[674,882,889],{"className":883,"code":884,"highlights":885,"language":679,"meta":719},[677],"\u003Cscript setup lang=\"ts\">\nimport { useForm } from 'vee-validate'\nimport { toTypedSchema } from '@vee-validate\u002Fzod'\nimport * as z from 'zod'\n\nimport {\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage\n} from '@\u002Fcomponents\u002Fui\u002Fform'\n\nconst formSchema = toTypedSchema(z.object({\n  username: z.string().min(2).max(50),\n}))\n\nconst form = useForm({\n  validationSchema: formSchema,\n})\n\nconst onSubmit = form.handleSubmit((values) => {\n  console.log('Form submitted!', values)\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cform @submit=\"onSubmit\">\n    ...\n  \u003C\u002Fform>\n\u003C\u002Ftemplate>\n",[841,886,887,888],19,20,21,[521,890,884],{"__ignoreMap":680},[706,892,893],{"value":19},[674,894,901],{"className":895,"code":896,"highlights":897,"language":679,"meta":719},[677],"\u003Cscript setup lang=\"ts\">\nimport { toTypedSchema } from '@vee-validate\u002Fzod'\nimport * as z from 'zod'\nimport {\n  Form,\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage\n} from '@\u002Fcomponents\u002Fui\u002Fform'\n\nconst formSchema = toTypedSchema(z.object({\n  username: z.string().min(2).max(50),\n}))\n\nfunction onSubmit(values) {\n  console.log('Form submitted!', values)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CForm :validation-schema=\"formSchema\" @submit=\"onSubmit\">\n    ...\n  \u003C\u002FForm>\n\u003C\u002Ftemplate>\n",[843,898,899,900],24,25,26,[521,902,896],{"__ignoreMap":680},[810,904,906],{"id":905},"build-your-form","Build your form",[517,908,909,910,912,913,915,916,918],{},"Based on last step we can either use ",[521,911,593],{}," component or ",[521,914,857],{}," composable\n",[521,917,857],{}," is recommended because values are typed automatically",[674,920,924],{"className":921,"code":922,"highlights":923,"language":679,"meta":719},[677],"\u003Cscript setup lang=\"ts\">\nimport { toTypedSchema } from '@vee-validate\u002Fzod'\nimport { useForm } from 'vee-validate'\nimport * as z from 'zod'\n\nimport { Button } from '@\u002Fcomponents\u002Fui\u002Fbutton'\nimport {\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from '@\u002Fcomponents\u002Fui\u002Fform'\nimport { Input } from '@\u002Fcomponents\u002Fui\u002Finput'\n\nconst formSchema = toTypedSchema(z.object({\n  username: z.string().min(2).max(50),\n}))\n\nconst form = useForm({\n  validationSchema: formSchema,\n})\n\nconst onSubmit = form.handleSubmit((values) => {\n  console.log('Form submitted!', values)\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cform @submit=\"onSubmit\">\n    \u003CFormField v-slot=\"{ componentField }\" name=\"username\">\n      \u003CFormItem>\n        \u003CFormLabel>Username\u003C\u002FFormLabel>\n        \u003CFormControl>\n          \u003CInput type=\"text\" placeholder=\"hui\" v-bind=\"componentField\" \u002F>\n        \u003C\u002FFormControl>\n        \u003CFormDescription>\n          This is your public display name.\n        \u003C\u002FFormDescription>\n        \u003CFormMessage \u002F>\n      \u003C\u002FFormItem>\n    \u003C\u002FFormField>\n    \u003CButton type=\"submit\">\n      Submit\n    \u003C\u002FButton>\n  \u003C\u002Fform>\n\u003C\u002Ftemplate>\n",[841],[521,925,922],{"__ignoreMap":680},[810,927,929],{"id":928},"done","Done",[517,931,932],{},"That's it. You now have a fully accessible form that is type-safe with client-side validation.",[934,935],"component-preview",{"className":936,"name":939},[937,938],"[&_[role=tablist]]:hidden","[&>div>div:first-child]:hidden","InputForm",{"title":680,"searchDepth":841,"depth":841,"links":941},[942,943,944,945,946],{"id":586,"depth":841,"text":587},{"id":671,"depth":841,"text":672},{"id":685,"depth":841,"text":686},{"id":740,"depth":841,"text":327},{"id":801,"depth":841,"text":802,"children":947},[948,949,950,951],{"id":812,"depth":842,"text":813},{"id":850,"depth":842,"text":851},{"id":905,"depth":842,"text":906},{"id":928,"depth":842,"text":929},"Building forms with VeeValidate and Zod.","md",{"primitive":955,"component":220},"https:\u002F\u002Fvee-validate.logaretm.com\u002Fv4\u002Fguide\u002Foverview\u002F","---\ntitle: Form\ndescription: Building forms with VeeValidate and Zod.\nprimitive: https:\u002F\u002Fvee-validate.logaretm.com\u002Fv4\u002Fguide\u002Foverview\u002F\ncomponent: true\n---\n\n::callout{title=\"We are not actively developing this component anymore.\"}\n\nThe Form component is an abstraction over the `vee-validate` library. Going forward, we recommend using the [`\u003CField \u002F>`](\u002Fdocs\u002Fcomponents\u002Ffield) component to build forms. See the [Form](\u002Fdocs\u002Fforms) documentation for more information.\n\n::\n\nForms are tricky. They are one of the most common things you'll build in a web application, but also one of the most complex.\n\nWell-designed HTML forms are:\n\n- Well-structured and semantically correct.\n- Easy to use and navigate (keyboard).\n- Accessible with ARIA attributes and proper labels.\n- Has support for client and server side validation.\n- Well-styled and consistent with the rest of the application.\n\nIn this guide, we will take a look at building forms with [`vee-validate`](https:\u002F\u002Fvee-validate.logaretm.com\u002Fv4\u002F) and [`zod`](https:\u002F\u002Fzod.dev). We're going to use a `\u003CFormField>` component to compose accessible forms using Reka UI components.\n\n## Features\n\nThe `\u003CForm \u002F>` component is a wrapper around the `vee-validate` library. It provides a few things:\n\n- Composable components for building forms.\n- A `\u003CFormField \u002F>` component for building controlled form fields.\n- Form validation using `zod`.\n- Applies the correct `aria` attributes to form fields based on states, handle unique IDs\n- Built to work with all Reka UI components.\n- Bring your own schema library. We use `zod` but you can use any other supported schema validation you want, like [`yup`](https:\u002F\u002Fgithub.com\u002Fjquense\u002Fyup) or [`valibot`](https:\u002F\u002Fvalibot.dev\u002F).\n- **You have full control over the markup and styling.**\n\n[`vee-validate`](https:\u002F\u002Fvee-validate.logaretm.com\u002Fv4\u002F) makes use of two flavors to add validation to your forms.\n- Composition API\n- Higher-order components (HOC)\n\n## Anatomy\n\n```vue\n\u003Ctemplate>\n  \u003CForm>\n    \u003CFormField>\n      \u003CFormItem>\n        \u003CFormLabel \u002F>\n        \u003CFormControl>\n        \u003C!-- any Form Input component or native input elements -->\n        \u003C\u002FFormControl>\n        \u003CFormDescription \u002F>\n        \u003CFormMessage \u002F>\n      \u003C\u002FFormItem>\n    \u003C\u002FFormField>\n  \u003C\u002FForm>\n\u003C\u002Ftemplate>\n```\n\n## Example\n\n::::tabs{default-value=\"component\"}\n\n  :::tabs-list\n\n    ::tabs-trigger{value=\"component\"}\n    Component\n    ::\n\n    ::tabs-trigger{value=\"native\"}\n    Native\n    ::\n\n  :::\n\n  ::tabs-content{value=\"component\"}\n\n  #### `Input` Component\n\n  ```vue showLineNumbers\n  \u003Ctemplate>\n    \u003CFormField v-slot=\"{ componentField }\">\n      \u003CFormItem>\n        \u003CFormLabel>Username\u003C\u002FFormLabel>\n        \u003CFormControl>\n          \u003CInput placeholder=\"hui\" v-bind=\"componentField\" \u002F>\n        \u003C\u002FFormControl>\n        \u003CFormDescription \u002F>\n        \u003CFormMessage \u002F>\n      \u003C\u002FFormItem>\n    \u003C\u002FFormField>\n  \u003C\u002Ftemplate>\n  ```\n\n  ::\n\n  ::tabs-content{value=\"native\"}\n\n  #### native `input` element\n\n  ```vue showLineNumbers\n  \u003Ctemplate>\n    \u003CFormField v-slot=\"{ field }\">\n      \u003CFormItem>\n        \u003CFormLabel>Username\u003C\u002FFormLabel>\n        \u003CFormControl>\n          \u003Cinput placeholder=\"hui\" v-bind=\"field\">\n        \u003C\u002FFormControl>\n        \u003CFormDescription \u002F>\n        \u003CFormMessage \u002F>\n      \u003C\u002FFormItem>\n    \u003C\u002FFormField>\n  \u003C\u002Ftemplate>\n  ```\n\n  ::\n::::\n\n## Installation\n\n:::::tabs{default-value=\"cli\"}\n\n  :::tabs-list\n\n    ::tabs-trigger{value=\"cli\"}\n    CLI\n    ::\n\n    ::tabs-trigger{value=\"manual\"}\n    Manual\n    ::\n\n  :::\n\n  ::tabs-content{value=\"cli\"}\n\n  ```bash\n  npx hui-kit@latest add form\n  ```\n\n  ::\n\n  ::::tabs-content{value=\"manual\"}\n\n    :::steps\n      ::step\n      Install the following dependency:\n      ::\n\n      ```bash\n      npm install reka-ui vee-validate @vee-validate\u002Fzod zod\n      ```\n\n      ::step\n      Copy and paste the [GitHub source code](https:\u002F\u002Fgithub.com\u002FClientik\u002Fhui-vue\u002Ftree\u002Fdev\u002Fapps\u002Fv4\u002Fregistry\u002Fhui\u002Fui\u002Fform) into your project.\n      ::\n\n      ::step\n      Update the import paths to match your project setup.\n      ::\n    :::\n\n  ::::\n\n:::::\n\n## Usage\n\n```vue showLineNumbers\n\u003Cscript setup lang=\"ts\">\nimport {\n  FormControl,\n  FormDescription,\n  FormField,\n  FormItem,\n  FormLabel,\n  FormMessage,\n} from '@\u002Fcomponents\u002Fui\u002Fform'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CFormField v-slot=\"{ componentField }\" name=\"username\">\n    \u003CFormItem>\n      \u003CFormLabel>Username\u003C\u002FFormLabel>\n      \u003CFormControl>\n        \u003CInput placeholder=\"hui\" v-bind=\"componentField\" \u002F>\n      \u003C\u002FFormControl>\n      \u003CFormDescription>\n        This is your public display name.\n      \u003C\u002FFormDescription>\n      \u003CFormMessage \u002F>\n    \u003C\u002FFormItem>\n  \u003C\u002FFormField>\n\u003C\u002Ftemplate>\n```\n\n### Create a form schema\n\n  Define the shape of your form using a Zod schema. You can read more about using Zod in the [Zod documentation](https:\u002F\u002Fzod.dev).\n\n  Use `@vee-validate\u002Fzod` to integrate Zod schema validation with `vee-validate`\n\n  `toTypedSchema` also makes the form values and submitted values typed automatically and caters for both input and output types of that schema.\n\n  ```vue showLineNumbers {2-3,5-7}\n  \u003Cscript setup lang=\"ts\">\n  import { toTypedSchema } from '@vee-validate\u002Fzod'\n  import * as z from 'zod'\n\n  const formSchema = toTypedSchema(z.object({\n    username: z.string().min(2).max(50),\n  }))\n  \u003C\u002Fscript>\n  ```\n\n### Define a form\n\n  Use the `useForm` composable from `vee-validate` or use `\u003CForm \u002F>` component to create a form.\n\n  ::::tabs{default-value=\"composition\"}\n\n    :::tabs-list\n\n      ::tabs-trigger{value=\"composition\"}\n      Composition\n      ::\n\n      ::tabs-trigger{value=\"component\"}\n      Component\n      ::\n\n    :::\n\n    ::tabs-content{value=\"composition\"}\n\n    ```vue showLineNumbers {2,19-21}\n    \u003Cscript setup lang=\"ts\">\n    import { useForm } from 'vee-validate'\n    import { toTypedSchema } from '@vee-validate\u002Fzod'\n    import * as z from 'zod'\n\n    import {\n      FormControl,\n      FormDescription,\n      FormField,\n      FormItem,\n      FormLabel,\n      FormMessage\n    } from '@\u002Fcomponents\u002Fui\u002Fform'\n\n    const formSchema = toTypedSchema(z.object({\n      username: z.string().min(2).max(50),\n    }))\n\n    const form = useForm({\n      validationSchema: formSchema,\n    })\n\n    const onSubmit = form.handleSubmit((values) => {\n      console.log('Form submitted!', values)\n    })\n    \u003C\u002Fscript>\n\n    \u003Ctemplate>\n      \u003Cform @submit=\"onSubmit\">\n        ...\n      \u003C\u002Fform>\n    \u003C\u002Ftemplate>\n    ```\n\n    ::\n\n    ::tabs-content{value=\"component\"}\n\n    ```vue showLineNumbers {5,24-26}\n    \u003Cscript setup lang=\"ts\">\n    import { toTypedSchema } from '@vee-validate\u002Fzod'\n    import * as z from 'zod'\n    import {\n      Form,\n      FormControl,\n      FormDescription,\n      FormField,\n      FormItem,\n      FormLabel,\n      FormMessage\n    } from '@\u002Fcomponents\u002Fui\u002Fform'\n\n    const formSchema = toTypedSchema(z.object({\n      username: z.string().min(2).max(50),\n    }))\n\n    function onSubmit(values) {\n      console.log('Form submitted!', values)\n    }\n    \u003C\u002Fscript>\n\n    \u003Ctemplate>\n      \u003CForm :validation-schema=\"formSchema\" @submit=\"onSubmit\">\n        ...\n      \u003C\u002FForm>\n    \u003C\u002Ftemplate>\n    ```\n\n    ::\n\n### Build your form\n\n  Based on last step we can either use `\u003CForm \u002F>` component or `useForm` composable\n  `useForm` is recommended because values are typed automatically\n\n  ```vue showLineNumbers {2}\n  \u003Cscript setup lang=\"ts\">\n  import { toTypedSchema } from '@vee-validate\u002Fzod'\n  import { useForm } from 'vee-validate'\n  import * as z from 'zod'\n\n  import { Button } from '@\u002Fcomponents\u002Fui\u002Fbutton'\n  import {\n    FormControl,\n    FormDescription,\n    FormField,\n    FormItem,\n    FormLabel,\n    FormMessage,\n  } from '@\u002Fcomponents\u002Fui\u002Fform'\n  import { Input } from '@\u002Fcomponents\u002Fui\u002Finput'\n\n  const formSchema = toTypedSchema(z.object({\n    username: z.string().min(2).max(50),\n  }))\n\n  const form = useForm({\n    validationSchema: formSchema,\n  })\n\n  const onSubmit = form.handleSubmit((values) => {\n    console.log('Form submitted!', values)\n  })\n  \u003C\u002Fscript>\n\n  \u003Ctemplate>\n    \u003Cform @submit=\"onSubmit\">\n      \u003CFormField v-slot=\"{ componentField }\" name=\"username\">\n        \u003CFormItem>\n          \u003CFormLabel>Username\u003C\u002FFormLabel>\n          \u003CFormControl>\n            \u003CInput type=\"text\" placeholder=\"hui\" v-bind=\"componentField\" \u002F>\n          \u003C\u002FFormControl>\n          \u003CFormDescription>\n            This is your public display name.\n          \u003C\u002FFormDescription>\n          \u003CFormMessage \u002F>\n        \u003C\u002FFormItem>\n      \u003C\u002FFormField>\n      \u003CButton type=\"submit\">\n        Submit\n      \u003C\u002FButton>\n    \u003C\u002Fform>\n  \u003C\u002Ftemplate>\n  ```\n\n### Done\n\n  That's it. You now have a fully accessible form that is type-safe with client-side validation.\n\n  ::component-preview\n  ---\n  name: InputForm\n  class: '[&_[role=tablist]]:hidden [&>div>div:first-child]:hidden'\n  ---\n  ::\n\n::::\n\n\u003C!-- ## Extras\n\nThis example shows how to add motion to your forms with [Formkit AutoAnimate](https:\u002F\u002Fauto-animate.formkit.com\u002F)\n\n**Note:** You need to install `@formkit\u002Fauto-animate` to use this feature:\n\n```bash\nnpm install @formkit\u002Fauto-animate\n```\n\n::component-preview\n---\nname: InputFormAutoAnimate\n---\n:: -->\n",{"title":137,"description":952},"0eeQxThE4mDdM3WDbYIx4lc3czkO03ZlaoLLOlG-Vys",[960,961],{"title":133,"path":134,"stem":135,"children":-1},{"title":141,"path":142,"stem":143,"children":-1},1787698059436]