{"version":3,"names":["DEFAULT_VALIDITY_STATE","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valid","valueMissing","DEFAULT_FIELD_STATE_ATTRIBUTES","touched","dirty","filled","focused","DEFAULT_FIELD_ROOT_STATE","disabled","fieldValidityMapping","value","getCombinedFieldValidityData","validityData","invalid","state","createDefaultValidityData","initialValue","errors","error"],"sources":["field-constants.ts"],"sourcesContent":["/**\n * Shared constants and pure helpers for `<Field.Root>` / `<Form>` validity.\n *\n * Mirrors Base UI React's\n * `packages/react/src/internals/field-constants/constants.ts` and\n * `packages/react/src/field/utils/getCombinedFieldValidityData.ts`, kept in\n * one module so the solid port can import everything from a single path.\n */\n\n/**\n * Validity snapshot for a field. Mirrors the HTML `ValidityState` surface,\n * plus Base UI's `valid` overall flag (tri-state: `true`/`false`/`null`\n * meaning \"not yet validated\").\n */\nexport interface FieldValidityState {\n\tbadInput: boolean;\n\tcustomError: boolean;\n\tpatternMismatch: boolean;\n\trangeOverflow: boolean;\n\trangeUnderflow: boolean;\n\tstepMismatch: boolean;\n\ttooLong: boolean;\n\ttooShort: boolean;\n\ttypeMismatch: boolean;\n\tvalid: boolean | null;\n\tvalueMissing: boolean;\n}\n\nexport const DEFAULT_VALIDITY_STATE: FieldValidityState = {\n\tbadInput: false,\n\tcustomError: false,\n\tpatternMismatch: false,\n\trangeOverflow: false,\n\trangeUnderflow: false,\n\tstepMismatch: false,\n\ttooLong: false,\n\ttooShort: false,\n\ttypeMismatch: false,\n\tvalid: null,\n\tvalueMissing: false,\n};\n\n/**\n * Entire payload we keep per-field: the last-seen value, the initial value,\n * the computed validity state and the flat error list (both the canonical\n * first error and the full array of errors emitted by `validate`).\n */\nexport interface FieldValidityData {\n\tstate: FieldValidityState;\n\terrors: string[];\n\terror: string;\n\tvalue: unknown;\n\tinitialValue: unknown;\n}\n\nexport const DEFAULT_FIELD_STATE_ATTRIBUTES = {\n\tvalid: null as boolean | null,\n\ttouched: false,\n\tdirty: false,\n\tfilled: false,\n\tfocused: false,\n} as const;\n\nexport interface FieldRootState {\n\tdisabled: boolean;\n\tvalid: boolean | null;\n\ttouched: boolean;\n\tdirty: boolean;\n\tfilled: boolean;\n\tfocused: boolean;\n}\n\nexport const DEFAULT_FIELD_ROOT_STATE: FieldRootState = {\n\tdisabled: false,\n\t...DEFAULT_FIELD_STATE_ATTRIBUTES,\n};\n\nexport type FieldValidationMode = \"onBlur\" | \"onChange\" | \"onSubmit\";\n\n/**\n * `data-*` projection for the validity portion of the field state. The\n * `valid` slot is tri-state (`true`/`false`/`null`): the `null` case means\n * \"not yet validated\" and MUST not emit any attribute, so nothing can lean\n * on `data-valid=\"\"` until a commit has landed.\n */\nexport const fieldValidityMapping = {\n\tvalid(value: boolean | null): Record<string, string> | null {\n\t\tif (value === null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (value) {\n\t\t\treturn { \"data-valid\": \"\" };\n\t\t}\n\t\treturn { \"data-invalid\": \"\" };\n\t},\n} as const;\n\n/**\n * Merge a field's internally-tracked validity with the externally-supplied\n * `invalid` prop. A field is considered valid only if both agree — external\n * `invalid=true` forces an invalid state regardless of the client-side check.\n */\nexport function getCombinedFieldValidityData(\n\tvalidityData: FieldValidityData,\n\tinvalid: boolean | undefined,\n): FieldValidityData {\n\treturn {\n\t\t...validityData,\n\t\tstate: {\n\t\t\t...validityData.state,\n\t\t\tvalid: !invalid && validityData.state.valid,\n\t\t},\n\t};\n}\n\n/**\n * Pure factory for a blank `FieldValidityData`. Mirrors the constant object\n * React uses as the context default, but fresh each call so mutable code\n * paths can't alias the shared instance.\n */\nexport function createDefaultValidityData(\n\tinitialValue: unknown = null,\n): FieldValidityData {\n\treturn {\n\t\tstate: { ...DEFAULT_VALIDITY_STATE },\n\t\terrors: [],\n\t\terror: \"\",\n\t\tvalue: \"\",\n\t\tinitialValue,\n\t};\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAeA,OAAO,MAAMA,sBAA0C,GAAG;EACzDC,QAAQ,EAAE,KAAK;EACfC,WAAW,EAAE,KAAK;EAClBC,eAAe,EAAE,KAAK;EACtBC,aAAa,EAAE,KAAK;EACpBC,cAAc,EAAE,KAAK;EACrBC,YAAY,EAAE,KAAK;EACnBC,OAAO,EAAE,KAAK;EACdC,QAAQ,EAAE,KAAK;EACfC,YAAY,EAAE,KAAK;EACnBC,KAAK,EAAE,IAAI;EACXC,YAAY,EAAE;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;;AASA,OAAO,MAAMC,8BAA8B,GAAG;EAC7CF,KAAK,EAAE,IAAsB;EAC7BG,OAAO,EAAE,KAAK;EACdC,KAAK,EAAE,KAAK;EACZC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAE;AACV,CAAU;AAWV,OAAO,MAAMC,wBAAwC,GAAG;EACvDC,QAAQ,EAAE,KAAK;EACf,GAAGN;AACJ,CAAC;AAID;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,oBAAoB,GAAG;EACnCT,KAAKA,CAACU,KAAqB,EAAiC;IAC3D,IAAIA,KAAK,KAAK,IAAI,EAAE;MACnB,OAAO,IAAI;IACZ;IACA,IAAIA,KAAK,EAAE;MACV,OAAO;QAAE,YAAY,EAAE;MAAG,CAAC;IAC5B;IACA,OAAO;MAAE,cAAc,EAAE;IAAG,CAAC;EAC9B;AACD,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,4BAA4BA,CAC3CC,YAA+B,EAC/BC,OAA4B,EACR;EACpB,OAAO;IACN,GAAGD,YAAY;IACfE,KAAK,EAAE;MACN,GAAGF,YAAY,CAACE,KAAK;MACrBd,KAAK,EAAE,CAACa,OAAO,IAAID,YAAY,CAACE,KAAK,CAACd;IACvC;EACD,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASe,yBAAyBA,CACxCC,YAAqB,GAAG,IAAI,EACR;EACpB,OAAO;IACNF,KAAK,EAAE;MAAE,GAAGxB;IAAuB,CAAC;IACpC2B,MAAM,EAAE,EAAE;IACVC,KAAK,EAAE,EAAE;IACTR,KAAK,EAAE,EAAE;IACTM;EACD,CAAC;AACF","ignoreList":[]}