@sanity/form-toolkit

3.0.63.0.7
~

Modified (14 files)

Index: package/dist/form-renderer/index.js
===================================================================
--- package/dist/form-renderer/index.js
+++ package/dist/form-renderer/index.js
@@ -24,9 +24,12 @@
 		onChange(e.target.value);
 	}, $[9] = onChange, $[10] = t8);
 	let handleChange = t8, t9;
 	$[11] !== onChange || $[12] !== value ? (t9 = (e_0, choiceValue) => {
-		onChange(Array.isArray(value) ? e_0.target.checked ? [...value, choiceValue] : value.filter((v_0) => v_0 !== choiceValue) : e_0.target.checked ? choiceValue : "");
+		if (Array.isArray(value)) {
+			let newValue = e_0.target.checked ? [...value, choiceValue] : value.filter((v_0) => v_0 !== choiceValue);
+			onChange(newValue);
+		} else onChange(e_0.target.checked ? choiceValue : "");
 	}, $[11] = onChange, $[12] = value, $[13] = t9) : t9 = $[13];
 	let handleCheckboxChange = t9, t10;
 	$[14] !== choices || $[15] !== handleChange || $[16] !== handleCheckboxChange || $[17] !== label || $[18] !== name || $[19] !== onBlur || $[20] !== options || $[21] !== ref || $[22] !== type || $[23] !== validationRules || $[24] !== value ? (t10 = () => {
 		switch (type) {
Index: package/dist/form-schema/index.js
===================================================================
--- package/dist/form-schema/index.js
+++ package/dist/form-schema/index.js
@@ -114,9 +114,9 @@
 			name: "name",
 			title: "Field Name",
 			type: "string",
 			description: "Must start with a letter and contain only letters, numbers, underscores, or hyphens. Must be unique within the form.",
-			validation: (Rule) => Rule.required().custom((name, context) => name ? /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name) ? (context.document?.fields?.map((field) => field.name) || []).filter((n) => n === name).length > 1 ? "Field name must be unique across all form fields" : [
+			validation: (Rule) => Rule.required().custom((name, context) => name ? /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name) ? (context.document?.fields?.map((field) => field.name) || []).filter((n) => n === name).length > 1 ? "Field name must be unique across all form fields" : ![
 				"action",
 				"method",
 				"target",
 				"enctype",
@@ -125,9 +125,9 @@
 				"novalidate",
 				"rel",
 				"submit",
 				"reset"
-			].includes(name.toLowerCase()) ? "This name is reserved for HTML form attributes. Please choose a different name." : !0 : "Field name must start with a letter and contain only letters, numbers, underscores, or hyphens" : "Required")
+			].includes(name.toLowerCase()) || "This name is reserved for HTML form attributes. Please choose a different name." : "Field name must start with a letter and contain only letters, numbers, underscores, or hyphens" : "Required")
 		}),
 		defineField({
 			name: "required",
 			title: "Required",
Index: package/dist/hubspot/index.js
===================================================================
--- package/dist/hubspot/index.js
+++ package/dist/hubspot/index.js
@@ -1,5 +1,5 @@
-import { t as createHandler } from "../create-handler.js";
+import { t as createHandler } from "../_chunks-es/create-handler.js";
 import { asyncList } from "@sanity/sanity-plugin-async-list";
 import { definePlugin } from "sanity";
 import { c } from "react/compiler-runtime";
 import { Card, Text } from "@sanity/ui";
Index: package/dist/mailchimp/index.js
===================================================================
--- package/dist/mailchimp/index.js
+++ package/dist/mailchimp/index.js
@@ -1,5 +1,5 @@
-import { t as createHandler } from "../create-handler.js";
+import { t as createHandler } from "../_chunks-es/create-handler.js";
 import { asyncList } from "@sanity/sanity-plugin-async-list";
 import { definePlugin } from "sanity";
 import { c } from "react/compiler-runtime";
 import { Card, Text } from "@sanity/ui";
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@sanity/form-toolkit",
-  "version": "3.0.6",
+  "version": "3.0.7",
   "description": "Tool kit for integrating forms with a Sanity Studio",
   "keywords": [
     "sanity",
     "sanity-plugin"
@@ -31,25 +31,25 @@
   },
   "dependencies": {
     "@formium/client": "^0.1.4",
     "@mailchimp/mailchimp_marketing": "^3.0.80",
-    "@sanity/ui": "^3.3.1",
+    "@sanity/ui": "^3.3.5",
     "h3": "^1.15.11",
-    "react-icons": "^5.6.0",
-    "@sanity/sanity-plugin-async-list": "^2.0.6"
+    "react-icons": "^5.7.0",
+    "@sanity/sanity-plugin-async-list": "^2.0.7"
   },
   "devDependencies": {
     "@sanity/tsconfig": "^2.2.0",
-    "@sanity/tsdown-config": "^0.11.0",
+    "@sanity/tsdown-config": "^0.13.1",
     "@types/mailchimp__mailchimp_marketing": "^3.0.22",
-    "@types/node": "^24.13.2",
+    "@types/node": "^24.13.3",
     "@types/react": "^19.2.17",
     "@types/react-dom": "^19.2.3",
     "babel-plugin-react-compiler": "^1.0.0",
     "react": "^19.2.7",
     "react-dom": "^19.2.7",
     "sanity": "^6.3.0",
-    "tsdown": "^0.22.3"
+    "tsdown": "^0.22.5"
   },
   "peerDependencies": {
     "react": "^19.2",
     "react-dom": "^19.2",
Index: package/dist/form-renderer/index.d.ts.map
===================================================================
--- package/dist/form-renderer/index.d.ts.map
+++ package/dist/form-renderer/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/form-renderer/components/types.ts","../../src/form-renderer/components/form-renderer.tsx"],"mappings":";KAAY,cAAA;EACV,IAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,WAAA;EACV,KAAA;EACA,KAAK;AAAA;AAAA,KAGK,YAAA;EACV,WAAA;EACA,YAAY;AAAA;AAAA,KAGF,SAAA;EACV,IAAA;EACA,KAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA,GAAa,cAAA;EACb,OAAA,GAAU,YAAA;EACV,OAAA,GAAU,WAAA;EACV,IAAA;AAAA;AAAA,KAGU,aAAA;EACV,KAAA;EACA,EAAA;IACE,OAAA;EAAA;EAEF,MAAA,GAAS,SAAS;EAClB,YAAA;IACE,IAAA;IACA,QAAA;EAAA;AAAA;AAAA,UAIa,UAAA;EACf,KAAA;EACA,QAAA,GAAW,KAAA;EACX,MAAA;EACA,GAAA;AAAA;AAAA,UAGe,mBAAA;EACf,KAAA,EAAO,SAAA;EACP,UAAA,EAAY,UAAU;EACtB,KAAA;AAAA;AAAA,UC5CQ,iBAAA,SAA0B,SAAA,CAAU,eAAA;EAC5C,QAAA,GAAW,aAAA;EAEX,aAAA,IAAiB,SAAA,aAAsB,UAAA;EAEvC,aAAA,IAAiB,SAAA;EAEjB,eAAA,GAAkB,MAAA,SAAe,aAAA,CAAc,mBAAA;AAAA;AAAA,cAWpC,YAAA,EAAc,EAAE,CAAC,iBAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/form-renderer/components/types.ts","../../src/form-renderer/components/form-renderer.tsx"],"mappings":";KAAY;EACV;EACA;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA,aAAa;EACb,UAAU;EACV,UAAU;EACV;;KAGU;EACV;EACA;IACE;;EAEF,SAAS;EACT;IACE;IACA;;;UAIa;EACf;EACA,WAAW;EACX;EACA;;UAGe;EACf,OAAO;EACP,YAAY;EACZ;;UC5CQ,0BAA0B,UAAU;EAC5C,WAAW;EAEX,iBAAiB,sBAAsB;EAEvC,iBAAiB;EAEjB,kBAAkB,eAAe,cAAc;;cAWpC,cAAc,GAAG"}
\ No newline at end of file
Index: package/dist/form-schema/index.d.ts.map
===================================================================
--- package/dist/form-schema/index.d.ts.map
+++ package/dist/form-schema/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/form-schema/index.ts"],"mappings":";;AAoBA;;;;AAAgD;AAAC;;;;AAK1B;AAGvB;;KARY,YAAA,GAAe,KAAK,CAAC,eAAA;AAAA,UACvB,uBAAA;EAOa;;;EAHrB,MAAA,GAAS,YAAY;AAAA;AAAA,cAGV,UAAA,mBAAU,MAAA,QAAA,uBAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/form-schema/index.ts"],"mappings":";;;;;;;;;;;;;;KAoBY,eAAe,MAAM;UACvB;;;;EAIR,SAAS;;cAGE,6BAAU,cAAA"}
\ No newline at end of file
Index: package/dist/formium/index.d.ts.map
===================================================================
--- package/dist/formium/index.d.ts.map
+++ package/dist/formium/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/formium/index.ts"],"mappings":"UAIU,kBAAA;;;AAAkB;AAkB5B;;;;AAAyB;;;;;;cAAZ,YAAA,mBAAY,MAAA,QAAA,kBAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/formium/index.ts"],"mappings":"AAIA,UAAU;;;;;;;;;;;;;;cAkBG,+BAAY,cAAA"}
\ No newline at end of file
Index: package/dist/hubspot/index.d.ts.map
===================================================================
--- package/dist/hubspot/index.d.ts.map
+++ package/dist/hubspot/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/hubspot/create-handler.ts","../../src/hubspot/fetch-hubspot-data.ts","../../src/hubspot/index.ts"],"mappings":"cAGa,cAAA;EAAc;AAAA;EAAc,KAAA;AAAA,mBAAc,YAAA,cAAA,mBAAA,EAAA,OAAA,eAAA,GAAA,iBAAA,eAAA,EAAA,GAAA,iBAAA,cAAA,KAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KCHlD,WAAA;EACH,EAAA;EACA,IAAA;EAAA,CACC,GAAA;AAAA;AAAA,KAGE,YAAA,GAAe,WAAW;EAC7B,KAAK;AAAA;AAAA,iBAEe,gBAAA;EAAkB;AAAA;EAAS,KAAA;AAAA,IAAiB,OAAA,CAAQ,YAAA;AAAA,UCHhE,kBAAA;EACR,GAAA,WAAc,GAAG;AAAA;AAAA,cAuBN,YAAA,mBAAY,MAAA,CAAA,kBAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/hubspot/create-handler.ts","../../src/hubspot/fetch-hubspot-data.ts","../../src/hubspot/index.ts"],"mappings":"AAGA,cAAa,mBAAc;EAAc;mBAAc,0BAAA,qBAAA,sBAAA,oBAAA,iBAAA,oBAAA,mBAAA;;;;;;;;;;;;;;;;;;;;;;;;KCHlD;EACH;EACA;GACC;;KAGE,eAAe;EAClB;;iBAEoB,mBAAkB;EAAS;IAAiB,QAAQ;UCHhE;EACR,cAAc;;cAuBH,+BAAY,OAAA"}
\ No newline at end of file
Index: package/dist/mailchimp/index.d.ts.map
===================================================================
--- package/dist/mailchimp/index.d.ts.map
+++ package/dist/mailchimp/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/mailchimp/create-handler.ts","../../src/mailchimp/index.ts"],"mappings":"iBAUsB,kBAAA;EACpB,GAAA;EACA;AAAA;EAEA,GAAA;EACA,MAAA;AAAA,IACE,OAAA;AAAA,cAyBS,gBAAA,GAAgB,IAAA;EAAW,GAAA;EAAa,MAAA;AAAA,mBAAe,YAAA,cAAA,mBAAA,EAAA,OAAA,eAAA,GAAA,iBAAA,eAAA,EAAA,GAAA,iBAAA,cAAA,KAAA,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCnC1D,oBAAA;EACR,GAAA,WAAc,GAAG;AAAA;;;;;;;;;;;;ADSR;AAyBX;cCjBa,cAAA,mBAAc,MAAA,CAAA,oBAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/mailchimp/create-handler.ts","../../src/mailchimp/index.ts"],"mappings":"AAUA,iBAAsB,qBACpB,KACA;EAEA;EACA;IACE;cAyBS,mBAAgB;EAAW;EAAa;mBAAe,0BAAA,qBAAA,sBAAA,oBAAA,iBAAA,oBAAA,mBAAA;;;;;;;;;;;;;;;;;;;;;;;;UCnC1D;EACR,cAAc;;cAiBH,iCAAc,OAAA"}
\ No newline at end of file
Index: package/dist/form-renderer/index.js.map
===================================================================
--- package/dist/form-renderer/index.js.map
+++ package/dist/form-renderer/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["ChangeEvent","FC","Ref","FieldComponentProps","toRef","HTMLElement","ref","T","DefaultField","t0","$","_c","field","fieldState","error","type","label","name","options","t1","choices","t2","validation","t3","t4","undefined","t5","t6","t7","Symbol","for","bb0","reduce","_temp","validationRules","value","onChange","onBlur","t8","e","target","handleChange","t9","e_0","choiceValue","Array","isArray","newValue","checked","filter","v_0","v","handleCheckboxChange","t10","placeholder","map","_temp2","choice_0","choice","includes","e_1","defaultValue","renderInput","t11","t12","t13","t14","acc","choice_1","ComponentType","FC","HTMLProps","DefaultField","FieldComponentProps","FieldState","FormDataProps","FormField","FormRendererProps","HTMLFormElement","formData","getFieldState","fieldName","getFieldError","fieldComponents","Record","defaultGetFieldState","name","value","undefined","onChange","defaultFieldComponents","FormRenderer","props","$","_c","t0","t1","children","t2","field","CustomComponent","type","fieldState","error","renderField","elProps","Object","assign","t3","id","current","t4","fields","map","field_0","_key","t5","submitButton","text","t6","label","t7"],"sources":["../../src/form-renderer/components/default-field.tsx","../../src/form-renderer/components/form-renderer.tsx"],"sourcesContent":["import type {ChangeEvent, FC, Ref} from 'react'\n\nimport type {FieldComponentProps} from './types'\n\n// oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- FieldState.ref is loosely typed so refs from any form library can be passed through\nconst toRef = <T extends HTMLElement>(ref: unknown) => ref as Ref<T> | undefined\n\nexport const DefaultField: FC<FieldComponentProps> = ({field, fieldState, error}) => {\n  const {type, label, name, options = {}, choices = [], validation = []} = field\n  if (!type || !name) return null\n  const validationRules = validation.reduce((acc: Record<string, string>, v) => {\n    acc[v.type] = v.value\n    return acc\n  }, {})\n  const {value, onChange, onBlur, ref} = fieldState\n\n  const handleChange = (\n    e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>,\n  ) => {\n    onChange(e.target.value)\n  }\n\n  const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>, choiceValue: string) => {\n    if (Array.isArray(value)) {\n      const newValue = e.target.checked\n        ? [...value, choiceValue]\n        : value.filter((v: string) => v !== choiceValue)\n      onChange(newValue)\n    } else {\n      onChange(e.target.checked ? choiceValue : '')\n    }\n  }\n\n  const renderInput = () => {\n    switch (type) {\n      case 'submit':\n        return <button type=\"submit\">{label || 'Submit'}</button>\n      case 'textarea':\n        return (\n          <textarea\n            ref={toRef<HTMLTextAreaElement>(ref)}\n            name={name}\n            onChange={handleChange}\n            onBlur={onBlur}\n            placeholder={options.placeholder}\n            {...validationRules}\n            value={value ?? ''}\n          />\n        )\n\n      case 'select':\n        return (\n          <select\n            ref={toRef<HTMLSelectElement>(ref)}\n            name={name}\n            value={value ?? ''}\n            onChange={handleChange}\n            {...validationRules}\n            onBlur={onBlur}\n          >\n            {choices?.map((choice) => (\n              <option key={choice.value} value={choice.value}>\n                {choice.label}\n              </option>\n            ))}\n          </select>\n        )\n\n      case 'radio':\n        return choices?.map((choice) => (\n          <label key={choice.value}>\n            <input\n              type=\"radio\"\n              name={name}\n              ref={toRef<HTMLInputElement>(ref)}\n              value={choice.value}\n              checked={value === choice.value}\n              onChange={handleChange}\n              onBlur={onBlur}\n              {...validationRules}\n            />\n            {choice.label}\n          </label>\n        ))\n\n      case 'checkbox':\n        return choices?.map((choice) => (\n          <label key={choice.value}>\n            <input\n              type=\"checkbox\"\n              name={name}\n              ref={toRef<HTMLInputElement>(ref)}\n              value={choice.value}\n              checked={Array.isArray(value) ? value.includes(choice.value) : value === choice.value}\n              onChange={(e) => handleCheckboxChange(e, choice.value)}\n              onBlur={onBlur}\n              {...validationRules}\n            />\n            {choice.label}\n          </label>\n        ))\n\n      default:\n        return (\n          <input\n            type={type}\n            ref={toRef<HTMLInputElement>(ref)}\n            name={name}\n            value={value ?? options.defaultValue ?? ''}\n            onChange={handleChange}\n            {...validationRules}\n            onBlur={onBlur}\n            placeholder={options.placeholder}\n          />\n        )\n    }\n  }\n\n  return (\n    <>\n      {label && !['hidden', 'submit'].includes(type) && <label htmlFor={name}>{label}</label>}\n      {renderInput()}\n      {error && <span className=\"error\">{error}</span>}\n    </>\n  )\n}\n","import type {ComponentType, FC, HTMLProps} from 'react'\n\nimport {DefaultField} from './default-field'\nimport type {FieldComponentProps, FieldState, FormDataProps, FormField} from './types'\n\ninterface FormRendererProps extends HTMLProps<HTMLFormElement> {\n  formData?: FormDataProps\n  // Function to get field state for a given field name\n  getFieldState?: (fieldName: string) => FieldState\n  // Function to get field error for a given field name\n  getFieldError?: (fieldName: string) => string | undefined\n  // Override default field components\n  fieldComponents?: Record<string, ComponentType<FieldComponentProps>>\n}\n\nconst defaultGetFieldState = (name: string) => ({\n  value: undefined,\n  onChange: () => {},\n  name, // Pass name to field for native form handling\n})\n\nconst defaultFieldComponents: Record<string, ComponentType<FieldComponentProps>> = {}\n\nexport const FormRenderer: FC<FormRendererProps> = (props) => {\n  const {\n    formData,\n    getFieldState = defaultGetFieldState,\n    getFieldError,\n    fieldComponents = defaultFieldComponents,\n    children,\n  } = props\n  const renderField = (field: FormField) => {\n    const CustomComponent = fieldComponents[field.type]\n    const fieldState = getFieldState(field.name)\n    const error = getFieldError?.(field.name)\n\n    if (CustomComponent) {\n      return <CustomComponent field={field} fieldState={fieldState} error={error} />\n    }\n\n    return <DefaultField field={field} fieldState={fieldState} error={error} />\n  }\n  const elProps = Object.assign({}, props)\n  delete elProps.formData\n  delete elProps.getFieldState\n  delete elProps.getFieldError\n  delete elProps.fieldComponents\n\n  return (\n    <form {...elProps} id={elProps.id ?? formData?.id?.current}>\n      {formData?.fields?.map((field) => (\n        <div key={field._key} className=\"form-field\">\n          {renderField(field)}\n        </div>\n      ))}\n\n      {children}\n\n      {renderField({\n        type: 'submit',\n        name: 'submit',\n        label: formData?.submitButton?.text || 'Submit',\n      })}\n    </form>\n  )\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["ChangeEvent","FC","Ref","FieldComponentProps","toRef","HTMLElement","ref","T","DefaultField","t0","$","_c","field","fieldState","error","type","label","name","options","t1","choices","t2","validation","t3","t4","undefined","t5","t6","t7","Symbol","for","bb0","reduce","_temp","validationRules","value","onChange","onBlur","t8","e","target","handleChange","t9","e_0","choiceValue","Array","isArray","newValue","checked","filter","v_0","v","handleCheckboxChange","t10","placeholder","map","_temp2","choice_0","choice","includes","e_1","defaultValue","renderInput","t11","t12","t13","t14","acc","choice_1","ComponentType","FC","HTMLProps","DefaultField","FieldComponentProps","FieldState","FormDataProps","FormField","FormRendererProps","HTMLFormElement","formData","getFieldState","fieldName","getFieldError","fieldComponents","Record","defaultGetFieldState","name","value","undefined","onChange","defaultFieldComponents","FormRenderer","props","$","_c","t0","t1","children","t2","field","CustomComponent","type","fieldState","error","renderField","elProps","Object","assign","t3","id","current","t4","fields","map","field_0","_key","t5","submitButton","text","t6","label","t7"],"sources":["../../src/form-renderer/components/default-field.tsx","../../src/form-renderer/components/form-renderer.tsx"],"sourcesContent":["import type {ChangeEvent, FC, Ref} from 'react'\n\nimport type {FieldComponentProps} from './types'\n\n// oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- FieldState.ref is loosely typed so refs from any form library can be passed through\nconst toRef = <T extends HTMLElement>(ref: unknown) => ref as Ref<T> | undefined\n\nexport const DefaultField: FC<FieldComponentProps> = ({field, fieldState, error}) => {\n  const {type, label, name, options = {}, choices = [], validation = []} = field\n  if (!type || !name) return null\n  const validationRules = validation.reduce((acc: Record<string, string>, v) => {\n    acc[v.type] = v.value\n    return acc\n  }, {})\n  const {value, onChange, onBlur, ref} = fieldState\n\n  const handleChange = (\n    e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>,\n  ) => {\n    onChange(e.target.value)\n  }\n\n  const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>, choiceValue: string) => {\n    if (Array.isArray(value)) {\n      const newValue = e.target.checked\n        ? [...value, choiceValue]\n        : value.filter((v: string) => v !== choiceValue)\n      onChange(newValue)\n    } else {\n      onChange(e.target.checked ? choiceValue : '')\n    }\n  }\n\n  const renderInput = () => {\n    switch (type) {\n      case 'submit':\n        return <button type=\"submit\">{label || 'Submit'}</button>\n      case 'textarea':\n        return (\n          <textarea\n            ref={toRef<HTMLTextAreaElement>(ref)}\n            name={name}\n            onChange={handleChange}\n            onBlur={onBlur}\n            placeholder={options.placeholder}\n            {...validationRules}\n            value={value ?? ''}\n          />\n        )\n\n      case 'select':\n        return (\n          <select\n            ref={toRef<HTMLSelectElement>(ref)}\n            name={name}\n            value={value ?? ''}\n            onChange={handleChange}\n            {...validationRules}\n            onBlur={onBlur}\n          >\n            {choices?.map((choice) => (\n              <option key={choice.value} value={choice.value}>\n                {choice.label}\n              </option>\n            ))}\n          </select>\n        )\n\n      case 'radio':\n        return choices?.map((choice) => (\n          <label key={choice.value}>\n            <input\n              type=\"radio\"\n              name={name}\n              ref={toRef<HTMLInputElement>(ref)}\n              value={choice.value}\n              checked={value === choice.value}\n              onChange={handleChange}\n              onBlur={onBlur}\n              {...validationRules}\n            />\n            {choice.label}\n          </label>\n        ))\n\n      case 'checkbox':\n        return choices?.map((choice) => (\n          <label key={choice.value}>\n            <input\n              type=\"checkbox\"\n              name={name}\n              ref={toRef<HTMLInputElement>(ref)}\n              value={choice.value}\n              checked={Array.isArray(value) ? value.includes(choice.value) : value === choice.value}\n              onChange={(e) => handleCheckboxChange(e, choice.value)}\n              onBlur={onBlur}\n              {...validationRules}\n            />\n            {choice.label}\n          </label>\n        ))\n\n      default:\n        return (\n          <input\n            type={type}\n            ref={toRef<HTMLInputElement>(ref)}\n            name={name}\n            value={value ?? options.defaultValue ?? ''}\n            onChange={handleChange}\n            {...validationRules}\n            onBlur={onBlur}\n            placeholder={options.placeholder}\n          />\n        )\n    }\n  }\n\n  return (\n    <>\n      {label && !['hidden', 'submit'].includes(type) && <label htmlFor={name}>{label}</label>}\n      {renderInput()}\n      {error && <span className=\"error\">{error}</span>}\n    </>\n  )\n}\n","import type {ComponentType, FC, HTMLProps} from 'react'\n\nimport {DefaultField} from './default-field'\nimport type {FieldComponentProps, FieldState, FormDataProps, FormField} from './types'\n\ninterface FormRendererProps extends HTMLProps<HTMLFormElement> {\n  formData?: FormDataProps\n  // Function to get field state for a given field name\n  getFieldState?: (fieldName: string) => FieldState\n  // Function to get field error for a given field name\n  getFieldError?: (fieldName: string) => string | undefined\n  // Override default field components\n  fieldComponents?: Record<string, ComponentType<FieldComponentProps>>\n}\n\nconst defaultGetFieldState = (name: string) => ({\n  value: undefined,\n  onChange: () => {},\n  name, // Pass name to field for native form handling\n})\n\nconst defaultFieldComponents: Record<string, ComponentType<FieldComponentProps>> = {}\n\nexport const FormRenderer: FC<FormRendererProps> = (props) => {\n  const {\n    formData,\n    getFieldState = defaultGetFieldState,\n    getFieldError,\n    fieldComponents = defaultFieldComponents,\n    children,\n  } = props\n  const renderField = (field: FormField) => {\n    const CustomComponent = fieldComponents[field.type]\n    const fieldState = getFieldState(field.name)\n    const error = getFieldError?.(field.name)\n\n    if (CustomComponent) {\n      return <CustomComponent field={field} fieldState={fieldState} error={error} />\n    }\n\n    return <DefaultField field={field} fieldState={fieldState} error={error} />\n  }\n  const elProps = Object.assign({}, props)\n  delete elProps.formData\n  delete elProps.getFieldState\n  delete elProps.getFieldError\n  delete elProps.fieldComponents\n\n  return (\n    <form {...elProps} id={elProps.id ?? formData?.id?.current}>\n      {formData?.fields?.map((field) => (\n        <div key={field._key} className=\"form-field\">\n          {renderField(field)}\n        </div>\n      ))}\n\n      {children}\n\n      {renderField({\n        type: 'submit',\n        name: 'submit',\n        label: formData?.submitButton?.text || 'Submit',\n      })}\n    </form>\n  )\n}\n"],"mappings":"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"}
\ No newline at end of file
Index: package/dist/form-schema/index.js.map
===================================================================
--- package/dist/form-schema/index.js.map
+++ package/dist/form-schema/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["FaWpforms","defineField","defineType","SchemaTypeDefinition","FieldsOption","formType","fields","name","title","type","icon","description","validation","Rule","required","options","source","of","initialValue","StringInputProps","useFormValue","FormField","validationTypesByFieldType","ValidationType","props","$","_c","t0","path","slice","type","schemaType","options","t1","renderDefault","t2","list","LuTextCursorInput","defineField","defineType","ValidationType","ValidationContextDocument","fields","Array","name","type","validationTypesByFieldType","Record","fieldTypeTitle","fieldType","charAt","toUpperCase","slice","formFieldType","title","icon","options","list","Object","keys","map","value","description","validation","Rule","required","custom","context","test","doc","document","allFieldNames","field","nameCount","filter","n","length","reservedNames","includes","toLowerCase","initialValue","hidden","parent","validationTypes","of","components","input","preview","select","subtitle","label","prepare","SchemaTypeDefinition","FieldsOption","formType","formFieldType","schema","fields","types","definePlugin","FieldDefinition","schema","FieldsOption","Array","FormSchemaPluginOptions","fields","formSchema","options","name"],"sources":["../../src/form-schema/schema-types/form.ts","../../src/form-schema/components/validation-type.tsx","../../src/form-schema/schema-types/form-field.ts","../../src/form-schema/schema-types/index.ts","../../src/form-schema/index.ts"],"sourcesContent":["import {FaWpforms} from 'react-icons/fa'\nimport {defineField, defineType, type SchemaTypeDefinition} from 'sanity'\n\nimport type {FieldsOption} from '..'\n\nexport const formType = (fields: FieldsOption): SchemaTypeDefinition => {\n  // const fieldsOf =\n  //   fields && fields.length ? [{type: 'formField'}, ...fields] : [{type: 'formField'}]\n  return defineType({\n    name: 'form',\n    title: 'Form',\n    type: 'document',\n    icon: FaWpforms,\n    fields: [\n      defineField({\n        name: 'title',\n        title: 'Form Title',\n        type: 'string',\n        description: 'Internal title for the form',\n        validation: (Rule) => Rule.required(),\n      }),\n      defineField({\n        name: 'id',\n        title: 'Form ID',\n        type: 'slug',\n        options: {\n          source: 'title',\n        },\n        // validation: (Rule) => Rule.required(),\n      }),\n      defineField({\n        name: 'fields',\n        title: 'Form Fields',\n        type: 'array',\n        of: [{type: 'formField'}, ...fields],\n      }),\n      defineField({\n        name: 'submitButton',\n        title: 'Submit Button',\n        type: 'object',\n        fields: [\n          defineField({\n            name: 'text',\n            title: 'Button Text',\n            type: 'string',\n            initialValue: 'Submit',\n          }),\n        ],\n      }),\n    ],\n  })\n}\n","import type {StringInputProps} from 'sanity'\nimport {useFormValue} from 'sanity'\n\nimport type {FormField} from '../../form-renderer/components/types'\nimport {validationTypesByFieldType} from '../schema-types/form-field'\n\nexport const ValidationType = (props: StringInputProps) => {\n  // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- parent value shape is defined by the formField schema type\n  const {type} = useFormValue(props.path.slice(0, 2)) as FormField\n  if (!type || !props.schemaType?.options) return props.renderDefault(props)\n  return props.renderDefault({\n    ...props,\n    schemaType: {\n      ...props.schemaType,\n      options: {...props.schemaType.options, list: validationTypesByFieldType[type]},\n    },\n  })\n}\n","import {LuTextCursorInput} from 'react-icons/lu'\nimport {defineField, defineType} from 'sanity'\n\nimport {ValidationType} from '../components/validation-type'\ninterface ValidationContextDocument {\n  fields?: Array<{\n    name: string\n    type?: string\n  }>\n}\n\n// Validation options by field type\nexport const validationTypesByFieldType: Record<string, string[]> = {\n  'checkbox': ['minSelectedCount', 'maxSelectedCount'],\n  'color': [],\n  'date': ['minDate', 'maxDate'],\n  'datetime-local': ['minDate', 'maxDate'],\n  'email': ['pattern'],\n  'file': ['maxSize', 'fileType'],\n  'hidden': [],\n  'number': ['min', 'max'],\n  // password: ['minLength', 'pattern'],\n  'radio': [],\n  'range': ['min', 'max', 'step'],\n  'select': [],\n  'tel': ['pattern'],\n  'text': ['minLength', 'maxLength', 'pattern'],\n  'textarea': ['minLength', 'maxLength'],\n  'time': [],\n  'url': ['pattern'],\n}\nconst fieldTypeTitle = (fieldType: string): string => {\n  switch (fieldType) {\n    case 'datetime-local':\n      return 'Date & Time'\n    case 'textarea':\n      return 'Text Area'\n    case 'tel':\n      return 'Phone Number'\n    default:\n      return fieldType.charAt(0).toUpperCase() + fieldType.slice(1)\n  }\n}\n\nexport const formFieldType = defineType({\n  name: 'formField',\n  title: 'Form Field',\n  type: 'object',\n  icon: LuTextCursorInput,\n  fields: [\n    defineField({\n      name: 'type',\n      title: 'Field Type',\n      type: 'string',\n      options: {\n        list: Object.keys(validationTypesByFieldType).map((type) => {\n          return {title: fieldTypeTitle(type), value: type}\n        }),\n      },\n    }),\n    defineField({\n      name: 'label',\n      title: 'Field Label',\n      type: 'string',\n    }),\n    defineField({\n      name: 'name',\n      title: 'Field Name',\n      type: 'string',\n      description:\n        'Must start with a letter and contain only letters, numbers, underscores, or hyphens. Must be unique within the form.',\n      validation: (Rule) =>\n        Rule.required().custom((name, context) => {\n          if (!name) {\n            return 'Required'\n          }\n          // Check format (HTML ID/name rules)\n          if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {\n            return 'Field name must start with a letter and contain only letters, numbers, underscores, or hyphens'\n          }\n\n          // Check uniqueness across all fields\n          // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- document shape is defined by the form schema type\n          const doc = context.document as ValidationContextDocument\n          const allFieldNames = doc?.fields?.map((field) => field.name) || []\n\n          // Count occurrences of this name\n          const nameCount = allFieldNames.filter((n) => n === name).length\n\n          // If we find more than one occurrence (including current field), it's not unique\n          if (nameCount > 1) {\n            return 'Field name must be unique across all form fields'\n          }\n\n          // Check for reserved HTML form attributes\n          const reservedNames = [\n            'action',\n            'method',\n            'target',\n            'enctype',\n            'accept-charset',\n            'autocomplete',\n            'novalidate',\n            'rel',\n            'submit',\n            'reset',\n          ]\n          if (reservedNames.includes(name.toLowerCase())) {\n            return 'This name is reserved for HTML form attributes. Please choose a different name.'\n          }\n\n          return true\n        }),\n    }),\n    defineField({\n      name: 'required',\n      title: 'Required',\n      type: 'boolean',\n      initialValue: false,\n    }),\n    defineField({\n      name: 'validation',\n      title: 'Validation Rules',\n      type: 'array',\n      hidden: ({parent}) => {\n        if (!parent?.type) return true\n        const validationTypes = validationTypesByFieldType[parent.type]\n        return !validationTypes || validationTypes.length === 0\n      },\n      of: [\n        {\n          type: 'object',\n          fields: [\n            defineField({\n              name: 'type',\n              title: 'Validation Type',\n              type: 'string',\n              options: {\n                // TODO: I think this needs to be a custom input component?\n                // list: ({parent}) => (parent?.type ? validationTypesByFieldType[parent.type] : []),\n                list: [],\n              },\n              components: {\n                input: ValidationType,\n              },\n            }),\n            defineField({\n              name: 'value',\n              title: 'Value',\n              type: 'string',\n            }),\n            defineField({\n              name: 'message',\n              title: 'Error Message',\n              type: 'string',\n            }),\n          ],\n          preview: {\n            select: {\n              title: 'type',\n              subtitle: 'value',\n            },\n          },\n        },\n      ],\n    }),\n    defineField({\n      name: 'choices',\n      title: 'Choices',\n      type: 'array',\n      hidden: ({parent}) => {\n        return !['select', 'radio', 'checkbox'].includes(parent?.type)\n      },\n      of: [\n        {\n          type: 'object',\n          fields: [\n            defineField({\n              name: 'label',\n              title: 'Label',\n              type: 'string',\n            }),\n            defineField({\n              name: 'value',\n              title: 'Value',\n              type: 'string',\n            }),\n          ],\n        },\n      ],\n    }),\n    defineField({\n      name: 'options',\n      title: 'Field Options',\n      type: 'object',\n      hidden: ({parent}) => {\n        return ['select', 'radio', 'checkbox', 'file'].includes(parent?.type)\n      },\n      fields: [\n        defineField({\n          name: 'placeholder',\n          title: 'Placeholder',\n          type: 'string',\n        }),\n        defineField({\n          name: 'defaultValue',\n          title: 'Default Value',\n          type: 'string',\n        }),\n      ],\n    }),\n  ],\n  preview: {\n    select: {\n      label: 'label',\n      name: 'name',\n      type: 'type',\n    },\n    prepare({label, name, type}) {\n      return {\n        title: label || name,\n        subtitle: type,\n      }\n    },\n  },\n})\n","import type {SchemaTypeDefinition} from 'sanity'\n\nimport type {FieldsOption} from '..'\nimport {formType} from './form'\nimport {formFieldType} from './form-field'\n\nexport const schema = (fields: FieldsOption): {types: SchemaTypeDefinition[]} => {\n  return {types: [formType(fields), formFieldType]}\n}\n","import {definePlugin, type FieldDefinition} from 'sanity'\n\n// import {structureTool} from 'sanity/structure'\n// import {FormRenderer} from './components/form-renderer'\nimport {schema} from './schema-types'\n// import {defaultDocumentNode} from './structure'\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {formSchema} from '@sanity/form-toolkit'\n *\n * export default defineConfig({\n *   // ...\n *   plugins: [formSchema()],\n * })\n * ```\n */\nexport type FieldsOption = Array<FieldDefinition>\ninterface FormSchemaPluginOptions {\n  /**\n   * Array of field definitions to be used in the form schema.\n   */\n  fields?: FieldsOption\n}\n\nexport const formSchema = definePlugin<FormSchemaPluginOptions | void>((options) => {\n  return {\n    name: 'form-toolkit_form-schema',\n    schema: schema(options?.fields ?? []),\n    // plugins: [structureTool({defaultDocumentNode})],\n  }\n})\n"],"mappings":";;;;AAKA,MAAaK,YAAYC,WAGhBJ,WAAW;CAChBK,MAAM;CACNC,OAAO;CACPC,MAAM;CACNC,MAAMV;CACNM,QAAQ;EACNL,YAAY;GACVM,MAAM;GACNC,OAAO;GACPC,MAAM;GACNE,aAAa;GACbC,aAAaC,SAASA,KAAKC,SAAS;EACtC,CAAC;EACDb,YAAY;GACVM,MAAM;GACNC,OAAO;GACPC,MAAM;GACNM,SAAS,EACPC,QAAQ,QACV;EAEF,CAAC;EACDf,YAAY;GACVM,MAAM;GACNC,OAAO;GACPC,MAAM;GACNQ,IAAI,CAAC,EAACR,MAAM,YAAW,GAAG,GAAGH,MAAM;EACrC,CAAC;EACDL,YAAY;GACVM,MAAM;GACNC,OAAO;GACPC,MAAM;GACNH,QAAQ,CACNL,YAAY;IACVM,MAAM;IACNC,OAAO;IACPC,MAAM;IACNS,cAAc;GAChB,CAAC,CAAC;EAEN,CAAC;CAAC;AAEN,CAAC,GC5CUK,kBAAiBC,UAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,MAAAI,OAEsBD,KAAAF,EAAA,MAAtBE,KAAAH,MAAKI,KAAKC,MAAO,GAAG,CAAC,GAACJ,EAAA,KAAAD,MAAAI,MAAAH,EAAA,KAAAE;CAAlD,IAAA,EAAAG,SAAeV,aAAaO,EAAsB;CAClD,IAAI,CAACG,QAAD,CAAUN,MAAKO,YAAoBC,SAAA;EAAA,IAAAC;EAAmC,OAAnCR,EAAA,OAAAD,QAAmCS,KAAAR,EAAA,MAA1BQ,KAAAT,MAAKU,cAAeV,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,KAAAQ,KAA1BA;CAA0B;CAKzB,IAAAA,KAAAX,2BAA2BQ,OAAKK;CAE/E,OAF+EV,EAAA,OAAAD,SAAAC,EAAA,OAAAQ,MAJ1EE,KAAAX,MAAKU,cAAe;EAAA,GACtBV;EAAKO,YACI;GAAA,GACPP,MAAKO;GAAWC,SACV;IAAA,GAAIR,MAAKO,WAAWC;IAAQI,MAAQH;GAAgC;EAC/E;CACF,CAAC,GAACR,EAAA,KAAAD,OAAAC,EAAA,KAAAQ,IAAAR,EAAA,KAAAU,MAAAA,KAAAV,EAAA,IANKU;AAML,GCJSW,6BAAuD;CAClE,UAAY,CAAC,oBAAoB,kBAAkB;CACnD,OAAS,CAAA;CACT,MAAQ,CAAC,WAAW,SAAS;CAC7B,kBAAkB,CAAC,WAAW,SAAS;CACvC,OAAS,CAAC,SAAS;CACnB,MAAQ,CAAC,WAAW,UAAU;CAC9B,QAAU,CAAA;CACV,QAAU,CAAC,OAAO,KAAK;CAEvB,OAAS,CAAA;CACT,OAAS;EAAC;EAAO;EAAO;CAAM;CAC9B,QAAU,CAAA;CACV,KAAO,CAAC,SAAS;CACjB,MAAQ;EAAC;EAAa;EAAa;CAAS;CAC5C,UAAY,CAAC,aAAa,WAAW;CACrC,MAAQ,CAAA;CACR,KAAO,CAAC,SAAS;AACnB,GACME,kBAAkBC,cAA8B;CACpD,QAAQA,WAAR;EACE,KAAK,kBACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,SACE,OAAOA,UAAUC,OAAO,CAAC,CAAC,CAACC,YAAY,IAAIF,UAAUG,MAAM,CAAC;CAChE;AACF,GAEaC,gBAAgBd,WAAW;CACtCK,MAAM;CACNU,OAAO;CACPT,MAAM;CACNU,MAAMlB;CACNK,QAAQ;EACNJ,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;GACNW,SAAS,EACPC,MAAMC,OAAOC,KAAKb,0BAA0B,CAAC,CAACc,KAAKf,UAC1C;IAACS,OAAON,eAAeH,IAAI;IAAGgB,OAAOhB;GAAI,EACjD,EACH;EACF,CAAC;EACDP,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;EACR,CAAC;EACDP,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;GACNiB,aACE;GACFC,aAAaC,SACXA,KAAKC,SAAS,CAAC,CAACC,QAAQtB,MAAMuB,YACvBvB,OAIA,2BAA2BwB,KAAKxB,IAAI,KAM7BuB,QAAQG,UACO5B,QAAQkB,KAAKY,UAAUA,MAAM5B,IAAI,KAAK,CAAA,EAAA,CAGjC8B,QAAQC,MAAMA,MAAM/B,IAAI,CAAC,CAACgC,SAG1C,IACP,qDAgBLC;IAXF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAEEA,CAAa,CAACC,SAASlC,KAAKmC,YAAY,CAAC,IACpC,oFAGF,KAjCE,mGAJA,UAsCV;EACL,CAAC;EACDzC,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;GACNmC,cAAc;EAChB,CAAC;EACD1C,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;GACNoC,SAAS,EAACC,aAAY;IACpB,IAAI,CAACA,QAAQrC,MAAM,OAAO;IAC1B,IAAMsC,kBAAkBrC,2BAA2BoC,OAAOrC;IAC1D,OAAO,CAACsC,mBAAmBA,gBAAgBP,WAAW;GACxD;GACAQ,IAAI,CACF;IACEvC,MAAM;IACNH,QAAQ;KACNJ,YAAY;MACVM,MAAM;MACNU,OAAO;MACPT,MAAM;MACNW,SAAS,EAGPC,MAAM,CAAA,EACR;MACA4B,YAAY,EACVC,OAAO9C,eACT;KACF,CAAC;KACDF,YAAY;MACVM,MAAM;MACNU,OAAO;MACPT,MAAM;KACR,CAAC;KACDP,YAAY;MACVM,MAAM;MACNU,OAAO;MACPT,MAAM;KACR,CAAC;IAAC;IAEJ0C,SAAS,EACPC,QAAQ;KACNlC,OAAO;KACPmC,UAAU;IACZ,EACF;GACF,CAAC;EAEL,CAAC;EACDnD,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;GACNoC,SAAS,EAACC,aACD,CAAC;IAAC;IAAU;IAAS;GAAU,CAAC,CAACJ,SAASI,QAAQrC,IAAI;GAE/DuC,IAAI,CACF;IACEvC,MAAM;IACNH,QAAQ,CACNJ,YAAY;KACVM,MAAM;KACNU,OAAO;KACPT,MAAM;IACR,CAAC,GACDP,YAAY;KACVM,MAAM;KACNU,OAAO;KACPT,MAAM;IACR,CAAC,CAAC;GAEN,CAAC;EAEL,CAAC;EACDP,YAAY;GACVM,MAAM;GACNU,OAAO;GACPT,MAAM;GACNoC,SAAS,EAACC,aACD;IAAC;IAAU;IAAS;IAAY;GAAM,CAAC,CAACJ,SAASI,QAAQrC,IAAI;GAEtEH,QAAQ,CACNJ,YAAY;IACVM,MAAM;IACNU,OAAO;IACPT,MAAM;GACR,CAAC,GACDP,YAAY;IACVM,MAAM;IACNU,OAAO;IACPT,MAAM;GACR,CAAC,CAAC;EAEN,CAAC;CAAC;CAEJ0C,SAAS;EACPC,QAAQ;GACNE,OAAO;GACP9C,MAAM;GACNC,MAAM;EACR;EACA8C,QAAQ,EAACD,OAAO9C,MAAMC,QAAO;GAC3B,OAAO;IACLS,OAAOoC,SAAS9C;IAChB6C,UAAU5C;GACZ;EACF;CACF;AACF,CAAC,GC3NYmD,UAAUC,YACd,EAACC,OAAO,CAACJ,SAASG,MAAM,GAAGF,aAAa,EAAC,ICqBrCW,aAAaP,cAA8CQ,aAC/D;CACLC,MAAM;CACNP,QAAQA,OAAOM,SAASF,UAAU,CAAA,CAAE;AAEtC,EACD"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["FaWpforms","defineField","defineType","SchemaTypeDefinition","FieldsOption","formType","fields","name","title","type","icon","description","validation","Rule","required","options","source","of","initialValue","StringInputProps","useFormValue","FormField","validationTypesByFieldType","ValidationType","props","$","_c","t0","path","slice","type","schemaType","options","t1","renderDefault","t2","list","LuTextCursorInput","defineField","defineType","ValidationType","ValidationContextDocument","fields","Array","name","type","validationTypesByFieldType","Record","fieldTypeTitle","fieldType","charAt","toUpperCase","slice","formFieldType","title","icon","options","list","Object","keys","map","value","description","validation","Rule","required","custom","context","test","doc","document","allFieldNames","field","nameCount","filter","n","length","reservedNames","includes","toLowerCase","initialValue","hidden","parent","validationTypes","of","components","input","preview","select","subtitle","label","prepare","SchemaTypeDefinition","FieldsOption","formType","formFieldType","schema","fields","types","definePlugin","FieldDefinition","schema","FieldsOption","Array","FormSchemaPluginOptions","fields","formSchema","options","name"],"sources":["../../src/form-schema/schema-types/form.ts","../../src/form-schema/components/validation-type.tsx","../../src/form-schema/schema-types/form-field.ts","../../src/form-schema/schema-types/index.ts","../../src/form-schema/index.ts"],"sourcesContent":["import {FaWpforms} from 'react-icons/fa'\nimport {defineField, defineType, type SchemaTypeDefinition} from 'sanity'\n\nimport type {FieldsOption} from '..'\n\nexport const formType = (fields: FieldsOption): SchemaTypeDefinition => {\n  // const fieldsOf =\n  //   fields && fields.length ? [{type: 'formField'}, ...fields] : [{type: 'formField'}]\n  return defineType({\n    name: 'form',\n    title: 'Form',\n    type: 'document',\n    icon: FaWpforms,\n    fields: [\n      defineField({\n        name: 'title',\n        title: 'Form Title',\n        type: 'string',\n        description: 'Internal title for the form',\n        validation: (Rule) => Rule.required(),\n      }),\n      defineField({\n        name: 'id',\n        title: 'Form ID',\n        type: 'slug',\n        options: {\n          source: 'title',\n        },\n        // validation: (Rule) => Rule.required(),\n      }),\n      defineField({\n        name: 'fields',\n        title: 'Form Fields',\n        type: 'array',\n        of: [{type: 'formField'}, ...fields],\n      }),\n      defineField({\n        name: 'submitButton',\n        title: 'Submit Button',\n        type: 'object',\n        fields: [\n          defineField({\n            name: 'text',\n            title: 'Button Text',\n            type: 'string',\n            initialValue: 'Submit',\n          }),\n        ],\n      }),\n    ],\n  })\n}\n","import type {StringInputProps} from 'sanity'\nimport {useFormValue} from 'sanity'\n\nimport type {FormField} from '../../form-renderer/components/types'\nimport {validationTypesByFieldType} from '../schema-types/form-field'\n\nexport const ValidationType = (props: StringInputProps) => {\n  // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- parent value shape is defined by the formField schema type\n  const {type} = useFormValue(props.path.slice(0, 2)) as FormField\n  if (!type || !props.schemaType?.options) return props.renderDefault(props)\n  return props.renderDefault({\n    ...props,\n    schemaType: {\n      ...props.schemaType,\n      options: {...props.schemaType.options, list: validationTypesByFieldType[type]},\n    },\n  })\n}\n","import {LuTextCursorInput} from 'react-icons/lu'\nimport {defineField, defineType} from 'sanity'\n\nimport {ValidationType} from '../components/validation-type'\ninterface ValidationContextDocument {\n  fields?: Array<{\n    name: string\n    type?: string\n  }>\n}\n\n// Validation options by field type\nexport const validationTypesByFieldType: Record<string, string[]> = {\n  'checkbox': ['minSelectedCount', 'maxSelectedCount'],\n  'color': [],\n  'date': ['minDate', 'maxDate'],\n  'datetime-local': ['minDate', 'maxDate'],\n  'email': ['pattern'],\n  'file': ['maxSize', 'fileType'],\n  'hidden': [],\n  'number': ['min', 'max'],\n  // password: ['minLength', 'pattern'],\n  'radio': [],\n  'range': ['min', 'max', 'step'],\n  'select': [],\n  'tel': ['pattern'],\n  'text': ['minLength', 'maxLength', 'pattern'],\n  'textarea': ['minLength', 'maxLength'],\n  'time': [],\n  'url': ['pattern'],\n}\nconst fieldTypeTitle = (fieldType: string): string => {\n  switch (fieldType) {\n    case 'datetime-local':\n      return 'Date & Time'\n    case 'textarea':\n      return 'Text Area'\n    case 'tel':\n      return 'Phone Number'\n    default:\n      return fieldType.charAt(0).toUpperCase() + fieldType.slice(1)\n  }\n}\n\nexport const formFieldType = defineType({\n  name: 'formField',\n  title: 'Form Field',\n  type: 'object',\n  icon: LuTextCursorInput,\n  fields: [\n    defineField({\n      name: 'type',\n      title: 'Field Type',\n      type: 'string',\n      options: {\n        list: Object.keys(validationTypesByFieldType).map((type) => {\n          return {title: fieldTypeTitle(type), value: type}\n        }),\n      },\n    }),\n    defineField({\n      name: 'label',\n      title: 'Field Label',\n      type: 'string',\n    }),\n    defineField({\n      name: 'name',\n      title: 'Field Name',\n      type: 'string',\n      description:\n        'Must start with a letter and contain only letters, numbers, underscores, or hyphens. Must be unique within the form.',\n      validation: (Rule) =>\n        Rule.required().custom((name, context) => {\n          if (!name) {\n            return 'Required'\n          }\n          // Check format (HTML ID/name rules)\n          if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {\n            return 'Field name must start with a letter and contain only letters, numbers, underscores, or hyphens'\n          }\n\n          // Check uniqueness across all fields\n          // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion -- document shape is defined by the form schema type\n          const doc = context.document as ValidationContextDocument\n          const allFieldNames = doc?.fields?.map((field) => field.name) || []\n\n          // Count occurrences of this name\n          const nameCount = allFieldNames.filter((n) => n === name).length\n\n          // If we find more than one occurrence (including current field), it's not unique\n          if (nameCount > 1) {\n            return 'Field name must be unique across all form fields'\n          }\n\n          // Check for reserved HTML form attributes\n          const reservedNames = [\n            'action',\n            'method',\n            'target',\n            'enctype',\n            'accept-charset',\n            'autocomplete',\n            'novalidate',\n            'rel',\n            'submit',\n            'reset',\n          ]\n          if (reservedNames.includes(name.toLowerCase())) {\n            return 'This name is reserved for HTML form attributes. Please choose a different name.'\n          }\n\n          return true\n        }),\n    }),\n    defineField({\n      name: 'required',\n      title: 'Required',\n      type: 'boolean',\n      initialValue: false,\n    }),\n    defineField({\n      name: 'validation',\n      title: 'Validation Rules',\n      type: 'array',\n      hidden: ({parent}) => {\n        if (!parent?.type) return true\n        const validationTypes = validationTypesByFieldType[parent.type]\n        return !validationTypes || validationTypes.length === 0\n      },\n      of: [\n        {\n          type: 'object',\n          fields: [\n            defineField({\n              name: 'type',\n              title: 'Validation Type',\n              type: 'string',\n              options: {\n                // TODO: I think this needs to be a custom input component?\n                // list: ({parent}) => (parent?.type ? validationTypesByFieldType[parent.type] : []),\n                list: [],\n              },\n              components: {\n                input: ValidationType,\n              },\n            }),\n            defineField({\n              name: 'value',\n              title: 'Value',\n              type: 'string',\n            }),\n            defineField({\n              name: 'message',\n              title: 'Error Message',\n              type: 'string',\n            }),\n          ],\n          preview: {\n            select: {\n              title: 'type',\n              subtitle: 'value',\n            },\n          },\n        },\n      ],\n    }),\n    defineField({\n      name: 'choices',\n      title: 'Choices',\n      type: 'array',\n      hidden: ({parent}) => {\n        return !['select', 'radio', 'checkbox'].includes(parent?.type)\n      },\n      of: [\n        {\n          type: 'object',\n          fields: [\n            defineField({\n              name: 'label',\n              title: 'Label',\n              type: 'string',\n            }),\n            defineField({\n              name: 'value',\n              title: 'Value',\n              type: 'string',\n            }),\n          ],\n        },\n      ],\n    }),\n    defineField({\n      name: 'options',\n      title: 'Field Options',\n      type: 'object',\n      hidden: ({parent}) => {\n        return ['select', 'radio', 'checkbox', 'file'].includes(parent?.type)\n      },\n      fields: [\n        defineField({\n          name: 'placeholder',\n          title: 'Placeholder',\n          type: 'string',\n        }),\n        defineField({\n          name: 'defaultValue',\n          title: 'Default Value',\n          type: 'string',\n        }),\n      ],\n    }),\n  ],\n  preview: {\n    select: {\n      label: 'label',\n      name: 'name',\n      type: 'type',\n    },\n    prepare({label, name, type}) {\n      return {\n        title: label || name,\n        subtitle: type,\n      }\n    },\n  },\n})\n","import type {SchemaTypeDefinition} from 'sanity'\n\nimport type {FieldsOption} from '..'\nimport {formType} from './form'\nimport {formFieldType} from './form-field'\n\nexport const schema = (fields: FieldsOption): {types: SchemaTypeDefinition[]} => {\n  return {types: [formType(fields), formFieldType]}\n}\n","import {definePlugin, type FieldDefinition} from 'sanity'\n\n// import {structureTool} from 'sanity/structure'\n// import {FormRenderer} from './components/form-renderer'\nimport {schema} from './schema-types'\n// import {defaultDocumentNode} from './structure'\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {formSchema} from '@sanity/form-toolkit'\n *\n * export default defineConfig({\n *   // ...\n *   plugins: [formSchema()],\n * })\n * ```\n */\nexport type FieldsOption = Array<FieldDefinition>\ninterface FormSchemaPluginOptions {\n  /**\n   * Array of field definitions to be used in the form schema.\n   */\n  fields?: FieldsOption\n}\n\nexport const formSchema = definePlugin<FormSchemaPluginOptions | void>((options) => {\n  return {\n    name: 'form-toolkit_form-schema',\n    schema: schema(options?.fields ?? []),\n    // plugins: [structureTool({defaultDocumentNode})],\n  }\n})\n"],"mappings":"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"}
\ No newline at end of file
Index: package/dist/hubspot/index.d.ts
===================================================================
--- package/dist/hubspot/index.d.ts
+++ package/dist/hubspot/index.d.ts
@@ -1,30 +1,22 @@
-declare const hubSpotHandler: ({
-  token
-}: {
+declare const hubSpotHandler: ({ token }: {
   token: string;
 }) => import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<unknown>> | ((req: import("http").IncomingMessage, res: import("http").ServerResponse) => Promise<void>) | {
-  GET: ({
-    request
-  }: {
+  GET: ({ request }: {
     request: Request;
   }) => Promise<Response>;
   loader?: undefined;
   get?: undefined;
 } | {
   GET?: undefined;
-  loader: ({
-    request
-  }: {
+  loader: ({ request }: {
     request: Request;
   }) => Promise<Response>;
   get?: undefined;
 } | {
   GET?: undefined;
   loader?: undefined;
-  get: ({
-    request
-  }: {
+  get: ({ request }: {
     request: Request;
   }) => Promise<{
     body: string;
     headers: {
@@ -39,11 +31,9 @@
 };
 type MappedResult = HubSpotForm & {
   value: string;
 };
-declare function fetchHubSpotData({
-  token
-}: {
+declare function fetchHubSpotData({ token }: {
   token: string;
 }): Promise<MappedResult[] | null>;
 interface HubSpotInputConfig {
   url: string | URL;
Index: package/dist/mailchimp/index.d.ts
===================================================================
--- package/dist/mailchimp/index.d.ts
+++ package/dist/mailchimp/index.d.ts
@@ -1,36 +1,27 @@
-declare function fetchMailchimpData({
-  key,
-  server
-}: {
+declare function fetchMailchimpData({ key, server }: {
   key: string;
   server: string;
 }): Promise<unknown>;
 declare const mailchimpHandler: (keys: {
   key: string;
   server: string;
 }) => import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<unknown>> | ((req: import("http").IncomingMessage, res: import("http").ServerResponse) => Promise<void>) | {
-  GET: ({
-    request
-  }: {
+  GET: ({ request }: {
     request: Request;
   }) => Promise<Response>;
   loader?: undefined;
   get?: undefined;
 } | {
   GET?: undefined;
-  loader: ({
-    request
-  }: {
+  loader: ({ request }: {
     request: Request;
   }) => Promise<Response>;
   get?: undefined;
 } | {
   GET?: undefined;
   loader?: undefined;
-  get: ({
-    request
-  }: {
+  get: ({ request }: {
     request: Request;
   }) => Promise<{
     body: string;
     headers: {
@@ -40,20 +31,7 @@
 };
 interface MailchimpInputConfig {
   url: string | URL;
 }
-/**
- * Usage in `sanity.config.ts` (or .js)
- *
- * ```ts
- * import {defineConfig} from 'sanity'
- * import {mailchimpInput} from '@sanity/form-toolkit/mailchimp'
- *
- * export default defineConfig({
- *   // ...
- *   plugins: [mailchimpInput()],
- * })
- * ```
- */
 declare const mailchimpInput: import("sanity").Plugin<MailchimpInputConfig>;
 export { fetchMailchimpData, mailchimpHandler, mailchimpInput };
 //# sourceMappingURL=index.d.ts.map
\ No newline at end of file