{"version":3,"sources":["../src/checks/check-basics.ts","../src/checks/check-options.ts","../src/const.ts","../src/methods/merge-options.ts","../src/checks/is-key-in-fields.ts","../src/checks/is-field-incomplete.ts","../src/processors/checkbox.ts","../src/methods/get-file-string.ts","../src/processors/file.ts","../src/processors/number.ts","../src/processors/select.ts","../src/processors/index.ts","../src/interactions/on-value-process.ts","../src/interactions/on-value.ts","../src/methods/get-form-values.ts","../src/methods/merge-conditions.ts","../src/plugins/form-actions.ts","../src/plugins/form-button.ts","../src/interactions/on-blur.ts","../src/interactions/on-focus.ts","../src/elements/element-base.ts","../src/elements/element-input.ts","../src/elements/element-select.ts","../src/preparations/field-element.ts","../src/preparations/field-store.ts","../src/preparations/field-atom.ts","../src/preparations/form-atoms.ts","../src/preparations/field.ts","../src/preparations/field-condition.ts","../src/preparations/form-fields.ts","../src/preparations/form-store.ts","../src/creators/form.ts"],"names":["value","key","props","hooksInUse","form","map","deriveAddon","updateAddon","onMount","task","isServerSide","ureturns","onSet"],"mappings":"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","file":"index.cjs","sourcesContent":["export default function checkBasics(basics: any) {\n\tconst err = new Error(\"form: fields is not in proper format\");\n\tif (basics == null) {\n\t\tthrow err;\n\t}\n\tif (typeof basics !== \"object\") {\n\t\tthrow err;\n\t}\n\tif (Object.keys(basics).length <= 0) {\n\t\tthrow err;\n\t}\n}\n","import type { Fields, Options } from \"../_model\";\n\nexport default function checkOptions<F extends Fields, O extends Options<F>>(options?: O) {\n\tconst result = { ...options };\n\tresult.vmcm = result.vmcm ?? \"normal\";\n\tresult.preventErroredValues = result.preventErroredValues ?? false;\n\tresult.allFieldsRequired = result.allFieldsRequired ?? true;\n\tresult.allFieldsDisabled = result.allFieldsDisabled ?? false;\n\tresult.preprocessValues = result.preprocessValues ?? true;\n\tresult.onUpdateKeyNotFound = result.onUpdateKeyNotFound ?? \"silent\";\n\t// result.incompleteBehavior =\n\t// \tresult.incompleteBehavior === true\n\t// \t\t? [\"onblur\", \"onsubmit\"]\n\t// \t\t: (result.incompleteBehavior ?? [\"onblur\", \"onsubmit\"]);\n\tresult.incompleteListCount = result.incompleteListCount ?? false;\n\t// result.incompleteAffectsCondition = result.incompleteAffectsCondition ?? false;\n\tresult.validateOn = result.validateOn ?? \"input\";\n\tresult.processElementOrder = result.processElementOrder ?? \"after\";\n\tresult.flatObjectKeysChar = \".\";\n\tresult.flatLabelJoinChar = result.flatLabelJoinChar ?? \" \";\n\treturn result;\n}\n","export const PLACEHOLDERS = {\n\tget select() {\n\t\treturn {\n\t\t\tvalue: \"\",\n\t\t\tdisabled: true,\n\t\t\tselected: true,\n\t\t};\n\t},\n\tget selectButton() {\n\t\treturn {\n\t\t\tvalue: \"$$button$$\",\n\t\t\t// selected: true,\n\t\t};\n\t},\n};\n","// @ts-ignore\nimport type { OptionsMerged, Options } from \"../_model\";\n\nexport default function mergeSetupOptions<G extends Options<any>>(_base?: G) {\n\tconst base = Object.assign({}, _base ?? {}) as G;\n\t// console.log(\"onmount copied is :: \", onMount);\n\treturn <D extends Options<any>>(target?: D): OptionsMerged<G, D> => {\n\t\tif (target == null) {\n\t\t\tif (base == null) {\n\t\t\t\treturn null as any;\n\t\t\t}\n\t\t\treturn base as any;\n\t\t}\n\t\tconst merged = { ...base, ...target };\n\n\t\t// special handling\n\t\tif (base?.hooks) {\n\t\t\tmerged.hooks = { ...base.hooks, ...target.hooks };\n\t\t}\n\n\t\tif (base?.onMount != null || target?.onMount != null) {\n\t\t\tmerged.onMount = async (props) => {\n\t\t\t\tconst breturns = (await base?.onMount?.(props)) ?? undefined;\n\t\t\t\tconst ureturns = (await target?.onMount?.(props)) ?? undefined;\n\t\t\t\t// // priority to children\n\t\t\t\tif (ureturns) {\n\t\t\t\t\treturn ureturns;\n\t\t\t\t}\n\t\t\t\treturn breturns;\n\t\t\t};\n\t\t}\n\n\t\tif (base?.onChange != null || target?.onChange != null) {\n\t\t\tmerged.onChange = (props) => {\n\t\t\t\tbase?.onChange?.(props);\n\t\t\t\ttarget?.onChange?.(props);\n\t\t\t};\n\t\t}\n\n\t\treturn merged as any;\n\t};\n}\n","import type { Fields, Options } from \"../_model\";\n\nexport default function isKeyInFields<F extends Fields, O extends Options<F>>(\n\tfields: F,\n\tkey: string | keyof F,\n\toptions: O,\n) {\n\tif (!(key in fields)) {\n\t\tif (options.onUpdateKeyNotFound === \"warn\") {\n\t\t\tconsole.warn(\"form: key \", key, \" was not found in form keys!\");\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n","import type { Field, FieldCondition, FieldType } from \"../_model\";\n\ninterface Props<T extends FieldType, F extends Field<T>> {\n\tfield: F;\n\tvalue: any;\n\tcondition: FieldCondition;\n\t// options?: Pick<Options<any>, \"incompleteAffectsCondition\" | \"incompleteBehavior\">;\n}\nexport default function isFieldIncomplete<T extends FieldType, F extends Field<T>>(\n\tprops: Props<T, F>,\n) {\n\tconst { value, condition, field } = props;\n\tlet result = false;\n\t// because no point otherwise, and ofcourse we don't calculate when disabled\n\tif (!condition.hidden && !condition.element.disabled && condition.element.required) {\n\t\tif (\n\t\t\t//\n\t\t\t// (field.type === \"checkbox\" && value === \"\") ||\n\t\t\tvalue === \"\" ||\n\t\t\t(!field.valueNullable && (typeof value === \"undefined\" || value == null)) ||\n\t\t\t(field.mandatory && (value == null || !value)) // for mandatory checkboxes\n\t\t) {\n\t\t\tresult = true;\n\t\t}\n\t}\n\treturn result;\n}\n","import type { ProcessorProps, Field, Options } from \"../_model\";\n\nexport default function createCheckboxProcessor<F extends Field, O extends Options<any>>(\n\t_props: ProcessorProps<F, O>,\n) {\n\t// const { field } = props;\n\treturn (checked: any, value: any) => {\n\t\tlet result = value;\n\t\ttry {\n\t\t\tconst c = Boolean(checked);\n\t\t\tif (value == null || value === \"on\") {\n\t\t\t\tresult = c;\n\t\t\t} else {\n\t\t\t\tif (c) {\n\t\t\t\t\tresult = value ?? c;\n\t\t\t\t} else {\n\t\t\t\t\tresult = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tresult = null;\n\t\t}\n\t\treturn result;\n\t};\n}\n","export function getFileString(\n\tfile: File,\n\tonReady: (file: string | ArrayBuffer | null | undefined) => void,\n) {\n\tconst reader = new FileReader();\n\n\treader.onload = (e) => {\n\t\tonReady(e.target?.result);\n\t};\n\treader.readAsDataURL(file);\n}\n","import type { ProcessorProps, Field, FieldExtras, Options } from \"../_model\";\nimport { getFileString } from \"../methods/get-file-string\";\n\nexport default function createFileProcessor<F extends Field, O extends Options<any>>(\n\tprops: ProcessorProps<F, O>,\n) {\n\tconst { key, $form } = props;\n\treturn (value: any) => {\n\t\tlet in_progress_files = 0;\n\t\tlet ready_files = 0;\n\t\tconst all_extras = [] as FieldExtras<\"file\">;\n\t\tfor (const file of value) {\n\t\t\t// if ($state == null) {\n\t\t\t// \tconsole.error(\"form(internal): state wasn't passed down, aborting file extras!\");\n\t\t\t// \tbreak;\n\t\t\t// }\n\n\t\t\tin_progress_files++;\n\t\t\tif (!(file instanceof File)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tgetFileString(file, (buffer) => {\n\t\t\t\tconst extras = {\n\t\t\t\t\tbuffer,\n\t\t\t\t\tplaceholder: typeof buffer === \"string\" ? buffer : (buffer as any)[0],\n\t\t\t\t\tfile,\n\t\t\t\t\tname: file.name,\n\t\t\t\t};\n\t\t\t\tall_extras.push(extras);\n\t\t\t\tready_files++;\n\n\t\t\t\tif (ready_files === in_progress_files) {\n\t\t\t\t\t$form.extras[key] = all_extras;\n\t\t\t\t\t// state.update((next) => {\n\t\t\t\t\t// \tnext.extras[key] = all_extras;\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn value;\n\t};\n}\n","import type { ProcessorProps, Field, Options } from \"../_model\";\n\nexport default function createNumberProcessor<F extends Field, O extends Options<any>>(\n\t_props: ProcessorProps<F, O>,\n) {\n\t// const { field } = _props;\n\treturn (value: any) => {\n\t\tlet result = null as number | null;\n\t\ttry {\n\t\t\tresult = Number(value);\n\t\t\tif (Number.isNaN(result)) {\n\t\t\t\tresult = value;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tresult = value;\n\t\t}\n\t\treturn result;\n\t};\n}\n","// https://dev.to/milliemolotov/how-to-retrieve-values-from-all-types-of-html-inputs-in-javascript-3143\nimport type { ProcessorProps, Field, Options } from \"../_model\";\nimport { PLACEHOLDERS } from \"../const\";\n\nexport default function createSelectProcessor<F extends Field, O extends Options<any>>(\n\tprops: ProcessorProps<F, O>,\n) {\n\tconst { event, field } = props;\n\treturn (value: any) => {\n\t\tconst el = event as any;\n\t\tconst multiple = field.multiple ?? false;\n\t\tlet result: any = null;\n\t\tif (!multiple) {\n\t\t\t// const prev_value = next.values[key] as string;\n\t\t\tif (value !== PLACEHOLDERS.selectButton.value && value !== PLACEHOLDERS.select.value) {\n\t\t\t\tresult = value;\n\t\t\t}\n\t\t} else {\n\t\t\t// const prev_value = next.values[key] as string[];\n\t\t\tresult = [];\n\t\t\tconst options = el != null && el?.target?.options;\n\t\t\tfor (let i = 0, iLen = options.length; i < iLen; i++) {\n\t\t\t\tconst opt = options[i];\n\n\t\t\t\tif (opt.selected) {\n\t\t\t\t\tlet value = opt.value;\n\t\t\t\t\tif (value !== PLACEHOLDERS.selectButton.value && value !== PLACEHOLDERS.select.value) {\n\t\t\t\t\t\tvalue = opt.text;\n\t\t\t\t\t\tresult.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n}\n","import type { ProcessorProps, Field, Options } from \"../_model\";\nimport { default as checkbox } from \"./checkbox\";\nimport { default as file } from \"./file\";\nimport { default as number } from \"./number\";\nimport { default as select } from \"./select\";\n\nexport default function createProcessors<F extends Field, O extends Options<any>>(\n\tprops: ProcessorProps<F, O>,\n) {\n\treturn {\n\t\tget checkbox() {\n\t\t\treturn checkbox(props);\n\t\t},\n\t\tget file() {\n\t\t\treturn file(props);\n\t\t},\n\t\tget select() {\n\t\t\treturn select(props);\n\t\t},\n\t\tget number() {\n\t\t\treturn number(props);\n\t\t},\n\t};\n}\n","// https://dev.to/milliemolotov/how-to-retrieve-values-from-all-types-of-html-inputs-in-javascript-3143\nimport type { Field, InteractionProps, Options } from \"../_model\";\nimport createProcessors from \"../processors\";\n\ntype Props<S extends Field, O extends Options<any>> = InteractionProps<S, O>;\nexport default function onValueProcessInteraction<F extends Field, O extends Options<any>>(\n\tprops: Props<F, O>,\n) {\n\tconst { key, $form, event, field } = props;\n\tlet { value } = props;\n\tconst el = event?.target as any;\n\tconst manual_update = event == null;\n\tconst preprocessValue = props.preprocessValue ?? field.preprocessValue;\n\tconst processorProps = {\n\t\tkey,\n\t\tevent,\n\t\tvalue,\n\t\tfield,\n\t\tmanualUpdate: manual_update,\n\t\tgetValueOf: (key: string) => $form.values[key],\n\t\tgetConditionOf: (key: string) => $form.conditions[key],\n\t};\n\tconst processors = createProcessors({ ...processorProps, $form });\n\tif (field.type === \"select\") {\n\t\tvalue = !manual_update ? el?.value : value;\n\t\tif (preprocessValue) {\n\t\t\tvalue = processors.select(value);\n\t\t}\n\t} else if (field.type === \"checkbox\") {\n\t\tconst checked = !manual_update ? el?.checked : true;\n\t\tvalue = !manual_update ? el?.value : value;\n\n\t\tif (preprocessValue) {\n\t\t\tvalue = processors.checkbox(checked, value);\n\t\t}\n\t} else if (field.type === \"file\") {\n\t\tvalue = !manual_update ? (el?.files as FileList) : value;\n\t\tif (preprocessValue) {\n\t\t\tvalue = processors.file(value);\n\t\t}\n\t} else if (field.type === \"number\" || field.type === \"tel\") {\n\t\tvalue = !manual_update ? el?.value : value;\n\t\tif (preprocessValue) {\n\t\t\tvalue = processors.number(value);\n\t\t}\n\t} else {\n\t\tvalue = !manual_update ? el?.value : value;\n\t\t// console.log(\"wow :: \", value);\n\t}\n\n\t// check empty strings\n\tif (value === \"\") {\n\t\tif (field.type !== \"checkbox\") {\n\t\t\tvalue = null;\n\t\t}\n\t}\n\n\t////// try to keep this as the only place to processValues from user\n\tif (field.processValue != null) {\n\t\tconst funcs =\n\t\t\ttypeof field.processValue === \"function\" ? [field.processValue] : field.processValue;\n\t\tfor (const pro of funcs) {\n\t\t\tvalue = pro({\n\t\t\t\t...processorProps,\n\t\t\t\tvalue,\n\t\t\t\t$condition: $form.conditions[key],\n\t\t\t\tprocessors,\n\t\t\t});\n\t\t}\n\t}\n\treturn value;\n}\n","import type { Field, FieldVMCM, InteractionProps, Options } from \"../_model\";\nimport isFieldIncomplete from \"../checks/is-field-incomplete\";\nimport processValue from \"./on-value-process\";\n\ntype Props<S extends Field, O extends Options<any>> = InteractionProps<S, O>;\nexport default function onValueInteraction<S extends Field, O extends Options<any>>(\n\tprops: Props<S, O>,\n) {\n\tconst { key, field, options, $form, event } = props;\n\tconst manual_update = event == null;\n\tconst vmcm: FieldVMCM = manual_update ? (options.vmcm ?? field.vmcm ?? \"normal\") : \"normal\";\n\tconst condition = $form.conditions[key];\n\tconst value = processValue(props);\n\t// start by notifying modified\n\t$form.conditions[key].value.updated = true;\n\t$form.conditions[key].value.lastUpdate = manual_update ? \"manual\" : \"user\";\n\n\t// start by validating values.\n\tlet validation_errors = null as string[] | null;\n\tif (field.validate != null) {\n\t\tif (!manual_update || (manual_update && vmcm === \"normal\")) {\n\t\t\tvalidation_errors = [];\n\t\t\tconst validations = Array.isArray(field.validate) ? field.validate : [field.validate];\n\t\t\tfor (const validation of validations) {\n\t\t\t\tconst err = validation(value, { $values: $form.values });\n\t\t\t\tif (Array.isArray(err)) {\n\t\t\t\t\tif (err.length < 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const error of err) {\n\t\t\t\t\t\tif (error != null) {\n\t\t\t\t\t\t\tvalidation_errors.push(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (err != null) {\n\t\t\t\t\t\tvalidation_errors.push(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (validation_errors.length <= 0) {\n\t\t\t\tvalidation_errors = null;\n\t\t\t}\n\t\t}\n\t}\n\t/////         KEEP ORDER            \\\\\\\\\\\n\tif (validation_errors != null) {\n\t\t$form.errors = { ...$form.errors, [key]: validation_errors };\n\t} else {\n\t\tif ($form.errors != null && key in $form.errors) {\n\t\t\t// check if key exist before\n\t\t\tdelete $form.errors[key];\n\t\t}\n\t}\n\t// process value condition\n\tif (validation_errors != null) {\n\t\tif (condition.element.required) {\n\t\t\tcondition.value.error = \"validation\";\n\t\t} else {\n\t\t\tcondition.value.error = \"optional\";\n\t\t}\n\t} else {\n\t\tif (condition.element.disabled) {\n\t\t\tcondition.value.error = false;\n\t\t} else if (condition.element.required) {\n\t\t\t// check required status\n\t\t\tif (vmcm === \"force-valid\") {\n\t\t\t\tcondition.value.error = false;\n\t\t\t} else {\n\t\t\t\tconst incomplete = isFieldIncomplete({ value, condition, field });\n\t\t\t\tcondition.value.error = incomplete ? \"incomplete\" : false;\n\t\t\t}\n\t\t} else {\n\t\t\tcondition.value.error = false;\n\t\t}\n\t}\n\t//\n\tif (options.preventErroredValues) {\n\t\tif (validation_errors == null) {\n\t\t\t$form.values[key] = value;\n\t\t}\n\t} else {\n\t\t$form.values[key] = value;\n\t}\n}\n","import type { Fields, FormStore, Options, PluginProps } from \"../_model\";\nimport { PLACEHOLDERS } from \"../const\";\n\n// basics\nexport type CamelToSnakeCase<\n\tS extends string,\n\tSep extends string = \"_\",\n\tUppercaseIsNewWord extends boolean = false,\n\tStart extends boolean = true,\n\tPreviousLetterIsCapital = false,\n> = S extends `${infer T}${infer U}`\n\t? `${T extends Capitalize<T>\n\t\t\t? Start extends false\n\t\t\t\t? UppercaseIsNewWord extends true\n\t\t\t\t\t? Sep\n\t\t\t\t\t: PreviousLetterIsCapital extends false\n\t\t\t\t\t\t? Sep\n\t\t\t\t\t\t: \"\"\n\t\t\t\t: \"\"\n\t\t\t: \"\"}${Lowercase<T>}${T extends Capitalize<T>\n\t\t\t? CamelToSnakeCase<U, Sep, UppercaseIsNewWord, false, true>\n\t\t\t: CamelToSnakeCase<U, Sep, UppercaseIsNewWord, false, false>}`\n\t: S;\n// type ControlGroup = Fields; //{ [K: string]: ICollection<any, any> };\ntype FieldsKeysCaseMap<T extends Fields> = {\n\t[K in keyof T]?: FieldKeyCase;\n};\ntype FieldKeyCase =\n\t| \"same\"\n\t| \"snake\"\n\t| \"snake_aggressive\"\n\t| \"kebab\"\n\t| \"kebab_aggressive\"\n\t| \"lowercase\"\n\t| \"uppercase\";\n//\n\n// type ControlGroupOnChange<V extends ValueKeyCase, T extends ControlGroup = ControlGroup> = (\n// \tactions: Pick<\n// \t\tReturnType<typeof createFormActions<V, T>>,\n// \t\t| \"getValues\"\n// \t\t| \"getValuesSnakecase\"\n// \t\t| \"getValuesKebabcase\"\n// \t\t| \"getValuesSnakecaseAggressive\"\n// \t\t| \"getValuesUppercase\"\n// \t\t| \"getValuesKebabcaseAggressive\"\n// \t\t| \"getValuesLowercase\"\n// \t>,\n// ) => void;\ntype IsValueKeyOfCase<\n\tT extends FieldKeyCase,\n\tV extends FieldKeyCase | undefined,\n> = unknown extends V ? false : V extends T ? true : false;\ntype ValueKeyCaseType<K, V extends FieldKeyCase | undefined> = IsValueKeyOfCase<\n\t\"snake\",\n\tV\n> extends true\n\t? CamelToSnakeCase<string & K>\n\t: IsValueKeyOfCase<\"snake_aggressive\", V> extends true\n\t\t? CamelToSnakeCase<string & K, \"_\", true>\n\t\t: IsValueKeyOfCase<\"kebab_aggressive\", V> extends true\n\t\t\t? CamelToSnakeCase<string & K, \"-\", true>\n\t\t\t: IsValueKeyOfCase<\"kebab\", V> extends true\n\t\t\t\t? CamelToSnakeCase<string & K, \"-\">\n\t\t\t\t: IsValueKeyOfCase<\"lowercase\", V> extends true\n\t\t\t\t\t? Lowercase<string & K>\n\t\t\t\t\t: IsValueKeyOfCase<\"uppercase\", V> extends true\n\t\t\t\t\t\t? Uppercase<string & K>\n\t\t\t\t\t\t: // : IsValueKeyOfCase<\"same\", V> extends true\n\t\t\t\t\t\t\tK;\n// : never;\n\ntype GetValueKeyCase<\n\tV extends FieldKeyCase | undefined,\n\tDefault extends FieldKeyCase,\n> = unknown extends V ? Default : FieldKeyCase extends V ? Default : V;\ntype FieldsValues<T extends Fields, V extends FieldKeyCase, O extends FieldsKeysCaseMap<T>> = {\n\t[K in keyof T as ValueKeyCaseType<K, GetValueKeyCase<O[K], V>>]: T[K][\"value\"];\n};\n\nfunction camelToSnakeCase(str: string, joiner = \"_\", uppercaseIsNewWord = false): string {\n\tconst regex = !uppercaseIsNewWord ? /[A-Z]+/g : /[A-Z]/g;\n\treturn str.replace(regex, (match, index) => {\n\t\t// console.log(\"match :: \", match, \"index :: \", index);\n\t\treturn index === 0 ? match.toLowerCase() : `${joiner}${match.toLowerCase()}`;\n\t});\n}\n\nfunction getValueCase(key: string, convertCase: FieldKeyCase = \"same\") {\n\tif (convertCase === \"snake\") {\n\t\treturn camelToSnakeCase(key, \"_\");\n\t}\n\tif (convertCase === \"snake_aggressive\") {\n\t\treturn camelToSnakeCase(key, \"_\", true);\n\t}\n\tif (convertCase === \"kebab\") {\n\t\treturn camelToSnakeCase(key, \"-\");\n\t}\n\tif (convertCase === \"kebab_aggressive\") {\n\t\treturn camelToSnakeCase(key, \"-\", true);\n\t}\n\tif (convertCase === \"lowercase\") {\n\t\treturn key.toLowerCase();\n\t}\n\tif (convertCase === \"uppercase\") {\n\t\treturn key.toUpperCase();\n\t}\n\treturn key;\n}\n\nfunction _getValues<\n\tF extends Fields,\n\tL extends Options<F>,\n\tS extends FormStore<F, L>,\n\tD extends FieldKeyCase = FieldKeyCase,\n\tO extends FieldsKeysCaseMap<F> = FieldsKeysCaseMap<F>,\n>(props: { fields: F; $store: S; defaultCase: D; special?: O }) {\n\tconst result = {} as any;\n\tconst values = props.$store.get().values;\n\tfor (const key in props.fields) {\n\t\tconst field = props.fields[key];\n\t\tconst key_case = getValueCase(key, props.special?.[key] ?? props.defaultCase);\n\t\tlet value = values[key];\n\t\t// postprocess values\n\t\tif (field.type === \"select\") {\n\t\t\tif (value === PLACEHOLDERS.select.value) {\n\t\t\t\tvalue = null as any;\n\t\t\t}\n\t\t}\n\n\t\t// attach final value\n\t\tresult[key_case] = value;\n\t}\n\treturn result as FieldsValues<F, D, O>;\n}\n\nexport default function getFormValues<F extends Fields, L extends Options<F>>(\n\tprops: PluginProps<F, L>,\n) {\n\tconst { fields, $store } = props;\n\treturn {\n\t\tgetValues<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({ fields, $store, defaultCase: \"same\", special });\n\t\t},\n\t\tgetValuesLowercase<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({ fields, $store, defaultCase: \"lowercase\", special });\n\t\t},\n\t\tgetValuesUppercase<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({ fields, $store, defaultCase: \"uppercase\", special });\n\t\t},\n\t\tgetValuesSnakecase<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({ fields, $store, defaultCase: \"snake\", special });\n\t\t},\n\t\tgetValuesSnakecaseAggressive<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({\n\t\t\t\tfields,\n\t\t\t\t$store,\n\t\t\t\tdefaultCase: \"snake_aggressive\",\n\t\t\t\tspecial,\n\t\t\t});\n\t\t},\n\t\tgetValuesKebabcase<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({ fields, $store, defaultCase: \"kebab\", special });\n\t\t},\n\t\tgetValuesKebabcaseAggressive<O extends FieldsKeysCaseMap<F>>(special?: O) {\n\t\t\treturn _getValues<F, L, typeof $store>({\n\t\t\t\tfields,\n\t\t\t\t$store,\n\t\t\t\tdefaultCase: \"kebab_aggressive\",\n\t\t\t\tspecial,\n\t\t\t});\n\t\t},\n\t};\n}\n","import type { FieldCondition } from \"../_model\";\n\nexport default function mergeConditions(old: FieldCondition, next: Partial<FieldCondition>) {\n\treturn {\n\t\t...old,\n\t\t...next,\n\t\tvalue: {\n\t\t\t...old.value,\n\t\t\t...next.value,\n\t\t},\n\t\telement: {\n\t\t\t...old.element,\n\t\t\t...next.element,\n\t\t},\n\t} as FieldCondition;\n}\n","import type { Field, FieldCondition, FieldType, Fields, Options, PluginProps } from \"../_model\";\nimport isKeyInFields from \"../checks/is-key-in-fields\";\nimport onValue from \"../interactions/on-value\";\nimport getFormValues from \"../methods/get-form-values\";\nimport mergeConditions from \"../methods/merge-conditions\";\n\nfunction getDeepPath(obj: any, _path: string) {\n\tconst path = _path.split(\".\");\n\tconst len = path.length;\n\tfor (let i = 0; i < len; i++) {\n\t\t// @ts-ignore\n\t\tobj = obj[path[i]];\n\t}\n\treturn obj;\n}\n\nexport type FormActions<F extends Fields, O extends Options<F>> = ReturnType<\n\ttypeof formActions<F, O>\n>;\nexport default function formActions<F extends Fields, O extends Options<F>>(\n\tprops: PluginProps<F, O>,\n) {\n\tconst { fields, $store, options } = props;\n\tfunction canSubmit() {\n\t\tconst status = $store.get().status;\n\t\tif (status === \"submit\") {\n\t\t\treturn false;\n\t\t}\n\t\treturn status === \"valid\"; //|| status === \"submitting\";\n\t}\n\n\treturn {\n\t\t...getFormValues(props),\n\t\tcanSubmit,\n\t\tstartSubmitting: () => {\n\t\t\tif (!canSubmit()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t$store.update(({ $next }) => {\n\t\t\t\t$next.status = \"submit\";\n\t\t\t\treturn $next;\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tif ($store.get().status !== \"submit\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$store.update(({ $next }) => {\n\t\t\t\t\t$next.status = \"valid\";\n\t\t\t\t\treturn $next;\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t\tsubmit: async (props: {\n\t\t\trunner: () => Promise<void>;\n\t\t\t// submitOptions?: SubmitOptions;\n\t\t\tcannotSubmit?: <G>() => void;\n\t\t\terror?: <G>(e: G) => void;\n\t\t}) => {\n\t\t\tconst { runner, cannotSubmit, error } = props;\n\t\t\tif (!canSubmit()) {\n\t\t\t\t// console.log(\"form: cannot submit form!\");\n\t\t\t\tcannotSubmit?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t$store.update(({ $next }) => {\n\t\t\t\t\t$next.status = \"submit\";\n\t\t\t\t\treturn $next;\n\t\t\t\t});\n\t\t\t\tawait runner?.();\n\t\t\t} catch (e: any) {\n\t\t\t\terror?.(e);\n\t\t\t} finally {\n\t\t\t\t$store.update(({ $next }) => {\n\t\t\t\t\t$next.status = \"valid\";\n\t\t\t\t\treturn $next;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tupdateValues: <G extends Object>(\n\t\t\tvalues: G,\n\t\t\tpaths?: Record<string, string | { value: string; key?: string }>,\n\t\t) => {\n\t\t\tif (values == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$store.update(({ $next }) => {\n\t\t\t\tfor (const _key in values) {\n\t\t\t\t\tlet path = paths?.[_key];\n\t\t\t\t\tlet key = _key;\n\t\t\t\t\tif (path != null) {\n\t\t\t\t\t\tif (typeof path !== \"string\") {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tkey = (path.key ?? _key) as string;\n\t\t\t\t\t\t\tpath = path.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!isKeyInFields(fields, key, options)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst field = fields[key as keyof typeof fields] as Field<FieldType>;\n\t\t\t\t\tconst value = path == null ? values[key] : getDeepPath(values, path as string);\n\t\t\t\t\tonValue({\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t// $store,\n\t\t\t\t\t\t$form: $next,\n\t\t\t\t\t\tevent: null,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t});\n\t\t\t\t\t// TODO: check if vanilla elements are updating properly\n\t\t\t\t\t// if (typeof document !== \"undefined\") {\n\t\t\t\t\t// \tconst el = document.getElementsByName(key);\n\t\t\t\t\t// \tif (el != null) {\n\t\t\t\t\t// \t\t// el.value = next.values[key];\n\t\t\t\t\t// \t}\n\t\t\t\t\t// }\n\t\t\t\t}\n\t\t\t\treturn $next;\n\t\t\t});\n\t\t},\n\t\tupdateConditions: <G extends Record<keyof F, Partial<FieldCondition>>>(conditions: G) => {\n\t\t\tif (conditions == null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$store.update(({ $next }) => {\n\t\t\t\tfor (const key in conditions) {\n\t\t\t\t\tconst condition = conditions[key];\n\t\t\t\t\tif (!isKeyInFields(fields, key, options) || condition == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t$next.conditions[key] = mergeConditions($next.conditions[key], condition);\n\t\t\t\t}\n\t\t\t\treturn $next;\n\t\t\t});\n\t\t},\n\t};\n}\n","import type { Fields, FormStatus, Options, PluginProps } from \"../_model\";\nimport type { _QSTATE } from \"@qundus/qstate\";\n\nexport type FormButtonObject = {\n\tstatus: FormStatus;\n\tdisabled: boolean;\n\tcanSubmit: boolean;\n\tsubmitting: boolean;\n};\nexport type FormButtonStore<F extends Fields, O extends Options<F>> = _QSTATE.StoreDerived<\n\tFormButtonObject,\n\t{\n\t\thooks: O[\"hooks\"];\n\t}\n>;\nexport type FormButton<\n\tF extends Fields,\n\tO extends Options<F>,\n\tS extends FormButtonStore<F, O> = FormButtonStore<F, O>,\n> = {\n\t$store: S;\n\t// $hooks: S[\"hooks\"];\n\t// $listen: S[\"listen\"];\n\t// $subscribe: S[\"subscribe\"];\n};\nexport default function formButton<F extends Fields, O extends Options<F>>(\n\tprops: PluginProps<F, O>,\n): FormButton<F, O> {\n\tconst { $store } = props;\n\tconst derived = $store.derive((state) => {\n\t\tconst status = state.status;\n\t\treturn {\n\t\t\tstatus: status,\n\t\t\tdisabled: status !== \"valid\",\n\t\t\tcanSubmit: status === \"valid\",\n\t\t\tsubmitting: status === \"submit\",\n\t\t} as FormButtonObject;\n\t}) as FormButtonStore<F, O>;\n\n\treturn {\n\t\t$store: derived,\n\t\t// $hooks: derived.hooks,\n\t\t// $subscribe: derived.subscribe,\n\t\t// $listen: derived.listen,\n\t};\n}\n","import type { Field, InteractionProps, Options } from \"../_model\";\nimport isFieldIncomplete from \"../checks/is-field-incomplete\";\nimport createProcessors from \"../processors\";\n\ntype Props<S extends Field, O extends Options<any>> = InteractionProps<S, O>;\nexport default function onBlurInteraction<S extends Field, O extends Options<any>>(\n\tprops: Props<S, O>,\n) {\n\tconst { key, field, $form, event } = props;\n\t$form.conditions[key].element.state = \"blur\";\n\tconst value = $form.values[key];\n\tconst processorProps = {\n\t\tkey,\n\t\tfield,\n\t\tevent,\n\t\tvalue,\n\t\tmanualUpdate: false,\n\t\t$condition: $form.conditions[key],\n\t\tgetValueOf: (key: string) => $form.values[key],\n\t\tgetConditionOf: (key: string) => $form.conditions[key],\n\t};\n\tfield.processCondition?.({\n\t\t...processorProps,\n\t\tget processors() {\n\t\t\treturn createProcessors({ ...processorProps, $form });\n\t\t},\n\t});\n\n\t//\n\tif (field.incompleteStatus) {\n\t\tconst value = $form.values[key];\n\t\tconst incomplete = isFieldIncomplete({\n\t\t\tvalue,\n\t\t\tcondition: $form.conditions[key],\n\t\t\tfield,\n\t\t});\n\t\tif (incomplete) {\n\t\t\t$form.conditions[key].value.error = \"incomplete\";\n\t\t}\n\t}\n}\n","import type { Field, InteractionProps, Options } from \"../_model\";\nimport createProcessors from \"../processors\";\n\ntype Props<S extends Field, O extends Options<any>> = InteractionProps<S, O>;\nexport default function onFocusInteraction<S extends Field, O extends Options<any>>(\n\tprops: Props<S, O>,\n) {\n\tconst { key, field, $form, event } = props;\n\t$form.conditions[key].element.state = \"focus\";\n\t$form.conditions[key].element.visited = true;\n\tconst value = $form.values[key];\n\tconst processorProps = {\n\t\tkey,\n\t\tfield,\n\t\tevent,\n\t\tvalue,\n\t\tmanualUpdate: false,\n\t\t$condition: $form.conditions[key],\n\t\tgetValueOf: (key: string) => $form.values[key],\n\t\tgetConditionOf: (key: string) => $form.conditions[key],\n\t};\n\tfield.processCondition?.({\n\t\t...processorProps,\n\t\tget processors() {\n\t\t\treturn createProcessors({ ...processorProps, $form });\n\t\t},\n\t});\n}\n","import type {\n\tElementDomType,\n\tElementKeysType,\n\tElementProps,\n\tElementReturns,\n\tField,\n\tFieldStoreObject,\n\tOptions,\n} from \"../_model\";\nimport onBlur from \"../interactions/on-blur\";\nimport onFocus from \"../interactions/on-focus\";\n\n//\ntype OnFocus = (event: FocusEvent) => void;\ntype OnBlur = (event: FocusEvent) => void;\nexport type Returns<T extends ElementDomType> = ElementReturns<\n\tT,\n\t{\n\t\trequired: boolean;\n\t\tdisabled: boolean;\n\t},\n\t{\n\t\tonfocus: OnFocus;\n\t\tonblur: OnBlur;\n\t\tautocomplete?: \"on\" | \"off\";\n\t},\n\t{\n\t\tonFocus: OnFocus;\n\t\tonBlur: OnBlur;\n\t\tautoComplete?: \"on\" | \"off\";\n\t}\n>;\nexport default function makeBaseElement<F extends Field, O extends Options<any>>(\n\tprops: ElementProps<F, O>,\n) {\n\tconst { key, $store, field, options } = props;\n\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\tdType: D,\n\t\t_kType: K,\n\t\treactive: FieldStoreObject<Field> | (() => FieldStoreObject<Field>),\n\t) => {\n\t\tconst data = typeof reactive === \"function\" ? reactive() : reactive;\n\t\treturn {\n\t\t\tid: field.label,\n\t\t\t[dType !== \"vdom\" ? \"autocomplete\" : \"autoComplete\"]: \"off\",\n\t\t\trequired: data?.condition.element.required,\n\t\t\tdisabled: data?.condition.element.disabled,\n\t\t\t[dType !== \"vdom\" ? \"onfocus\" : \"onFocus\"]: (event: FocusEvent) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t\tonFocus({ ...props, $form, event, value: null });\n\t\t\t\t\treturn $form;\n\t\t\t\t});\n\t\t\t},\n\t\t\t[dType !== \"vdom\" ? \"onblur\" : \"onBlur\"]: (event: Event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\t// if (field.validateOn === \"change\") {\n\t\t\t\t// \treturn;\n\t\t\t\t// }\n\t\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t\tonBlur({ ...props, $form, event, value: null });\n\t\t\t\t\treturn $form;\n\t\t\t\t});\n\t\t\t},\n\t\t} as Returns<D>;\n\t};\n}\n","import type {\n\tElementDomType,\n\tElementKeysType,\n\tElementProps,\n\tElementReturns,\n\tField,\n\tFieldStoreObject,\n\tOptions,\n} from \"../_model\";\n// import onBlur from \"../interactions/on-blur\";\nimport onValue from \"../interactions/on-value\";\nimport makeBaseElement, { type Returns as BaseReturns } from \"./element-base\";\n\n//\ntype OnInput = (event: Event) => void;\nexport type Returns<T extends ElementDomType> = ElementReturns<\n\tT,\n\t{\n\t\ttype: string;\n\t\tname: string;\n\t\tvalue: any;\n\t},\n\tBaseReturns<\"dom\"> & {\n\t\toninput: OnInput;\n\t},\n\tBaseReturns<\"vdom\"> & {\n\t\tonInput: OnInput;\n\t}\n>;\nexport default function makeInputElement<F extends Field, O extends Options<any>>(\n\tprops: ElementProps<F, O>,\n) {\n\tconst { key, field, $store, options } = props;\n\tconst key_str = String(key);\n\tconst baseEl = makeBaseElement(props);\n\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\tdType: D,\n\t\tkType: K,\n\t\treactive: FieldStoreObject<Field> | (() => FieldStoreObject<Field>),\n\t) => {\n\t\tconst data = typeof reactive === \"function\" ? reactive() : reactive;\n\t\tlet result = {} as any;\n\t\tif (kType !== \"special\") {\n\t\t\tresult = baseEl(dType, kType, data);\n\t\t}\n\t\tif (kType !== \"base\") {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\ttype: data.condition.hidden ? \"hidden\" : field.type,\n\t\t\t\tname: key_str,\n\t\t\t\tmultiple: field.multiple,\n\t\t\t};\n\t\t\tconst addValue = field.type !== \"checkbox\" && field.type !== \"radio\" && field.type !== \"file\";\n\t\t\tif (addValue) {\n\t\t\t\tresult.value = data?.value ?? \"\";\n\t\t\t}\n\t\t\tif (field.validateOn === \"input\") {\n\t\t\t\tconst id = dType !== \"vdom\" ? \"oninput\" : \"onInput\";\n\t\t\t\tresult[id] = (event: Event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t\t\tonValue({ ...props, $form, event, value: null });\n\t\t\t\t\t\treturn $form;\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (field.validateOn === \"change\") {\n\t\t\t\tconst id = dType !== \"vdom\" ? \"onchange\" : \"onChange\";\n\t\t\t\tresult[id] = (event: Event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t\t\tonValue({ ...props, $form, event, value: null });\n\t\t\t\t\t\treturn $form;\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// check user process\n\t\tconst processProps = { key, isVdom: dType === \"vdom\", kType, value: data, element: result };\n\t\tif (options.processElementOrder === \"before\") {\n\t\t\toptions?.processElement?.(processProps);\n\t\t}\n\t\tfield.processElement?.(processProps);\n\t\tif (options.processElementOrder === \"after\") {\n\t\t\toptions?.processElement?.(processProps);\n\t\t}\n\t\treturn result as Returns<D>;\n\t};\n}\n","import type {\n\tElementDomType,\n\tElementKeysType,\n\tElementProps,\n\tElementReturns,\n\tField,\n\tFieldStoreObject,\n\tOptions,\n} from \"../_model\";\nimport onValue from \"../interactions/on-value\";\nimport makeBaseElement, { type Returns as BaseReturns } from \"./element-base\";\n//\ntype OnInput = (event: Event) => void;\nexport type Returns<T extends ElementDomType> = ElementReturns<\n\tT,\n\t{\n\t\tname: string;\n\t\tvalue: any;\n\t},\n\tBaseReturns<\"dom\"> & {\n\t\toninput: OnInput;\n\t},\n\tBaseReturns<\"vdom\"> & {\n\t\tonInput: OnInput;\n\t}\n>;\nexport default function makeSelectElement<F extends Field, O extends Options<any>>(\n\tprops: ElementProps<F, O>,\n) {\n\tconst { key, field, $store, options } = props;\n\tconst key_str = String(key);\n\tconst baseEl = makeBaseElement(props);\n\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\tdType: D,\n\t\tkType: K,\n\t\treactive: FieldStoreObject<Field> | (() => FieldStoreObject<Field>),\n\t) => {\n\t\tconst data = typeof reactive === \"function\" ? reactive() : reactive;\n\t\tlet result = {} as any;\n\t\tif (kType !== \"special\") {\n\t\t\tresult = baseEl(dType, kType, data);\n\t\t}\n\t\tif (kType !== \"base\") {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\tname: key_str,\n\t\t\t\tvalue: data?.value,\n\t\t\t\tmultiple: field.multiple ?? false,\n\t\t\t};\n\t\t\tif (field.validateOn === \"input\") {\n\t\t\t\tconst id = dType ? \"oninput\" : \"onInput\";\n\t\t\t\tresult[id] = (event: Event) => {\n\t\t\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t\t\tonValue({ ...props, $form, event, value: null });\n\t\t\t\t\t\treturn $form;\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (field.validateOn === \"change\") {\n\t\t\t\tconst id = dType ? \"onchange\" : \"onChange\";\n\t\t\t\tresult[id] = (event: Event) => {\n\t\t\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t\t\tonValue({ ...props, $form, event, value: null });\n\t\t\t\t\t\treturn $form;\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// check user process\n\t\tconst processProps = { key, isVdom: dType === \"vdom\", kType, value: data, element: result };\n\t\tif (options.processElementOrder === \"before\") {\n\t\t\toptions?.processElement?.(processProps);\n\t\t}\n\t\tfield.processElement?.(processProps);\n\t\tif (options.processElementOrder === \"after\") {\n\t\t\toptions?.processElement?.(processProps);\n\t\t}\n\t\treturn result as Returns<D>;\n\t};\n}\n","import type {\n\tElementDomType,\n\tElementKeysType,\n\tElementProps,\n\tField,\n\tFieldStore,\n\tOptions,\n} from \"../_model\";\nimport makeInputElement from \"../elements/element-input\";\nimport makeSelectElement from \"../elements/element-select\";\nimport { hooksInUse } from \"@qundus/qstate/hooks\";\n\ntype ElementCustomProps<D extends ElementDomType, K extends ElementKeysType> = {\n\tdType?: D;\n\tkType?: K;\n};\ninterface Props<F extends Field, O extends Options<any>> {\n\tderived: FieldStore<F, O>;\n}\n\nexport type FieldElement<F extends Field, O extends Options<any>> = ReturnType<\n\ttypeof prepareFieldElement<F, O>\n>;\n\nfunction getElementCustomProps<D extends ElementDomType, K extends ElementKeysType>(\n\tdTypeFallback: ElementDomType,\n\tprops?: ElementCustomProps<D, K>,\n) {\n\treturn [props?.dType ?? dTypeFallback, props?.kType ?? \"all\"] as [\n\t\tElementDomType,\n\t\tElementKeysType,\n\t];\n}\nexport default function prepareFieldElement<F extends Field, O extends Options<any>>(\n\tprops: Props<F, O> & ElementProps<F, O>,\n) {\n\tconst { derived, key, field, $store, options } = props;\n\t// const baseEl = makeBaseElement({ field, key, $state, options });\n\tconst element =\n\t\t\"select\" === field.type\n\t\t\t? makeSelectElement<F, O>({ field, key, $store, options })\n\t\t\t: makeInputElement<F, O>({ field, key, $store, options });\n\t// determine used hooks\n\tconst { getHook, getHooks, hookNames } = hooksInUse(derived);\n\tconst preactHook = getHook(hookNames.preact);\n\tconst reactHook = getHook(hookNames.react);\n\tconst solidHooks = getHooks(\n\t\thookNames.solid,\n\t\thookNames.solid_unwrapped,\n\t\thookNames.solid_from,\n\t\thookNames.solid_from_unwrapped,\n\t);\n\tlet solidHook = false as false | string;\n\tif (solidHooks) {\n\t\tsolidHook = solidHooks[0];\n\t}\n\treturn {\n\t\tget dom() {\n\t\t\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\t\t\tprops?: ElementCustomProps<D, K>,\n\t\t\t) => {\n\t\t\t\tconst data = derived.get();\n\t\t\t\tconst [dType, kType] = getElementCustomProps(\"dom\", props);\n\t\t\t\treturn element(dType, kType, data);\n\t\t\t};\n\t\t},\n\t\t// preact\n\t\tget preact() {\n\t\t\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\t\t\tprops?: ElementCustomProps<D, K>,\n\t\t\t) => {\n\t\t\t\tif (!preactHook) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"qform: preact hook does not exist, please add it to options.hooks option!\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst data = derived.hooks[preactHook]();\n\t\t\t\tconst [dType, kType] = getElementCustomProps(\"vdom\", props);\n\t\t\t\treturn element(dType, kType, data);\n\t\t\t};\n\t\t},\n\t\t// react\n\t\tget react() {\n\t\t\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\t\t\tprops?: ElementCustomProps<D, K>,\n\t\t\t) => {\n\t\t\t\tif (!reactHook) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"qform: react hook does not exist, please add it to options.hooks option!\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst data = derived.hooks[reactHook]();\n\t\t\t\tconst [dType, kType] = getElementCustomProps(\"vdom\", props);\n\t\t\t\treturn element(dType, kType, data);\n\t\t\t};\n\t\t},\n\t\t// solidjs\n\t\tget solid() {\n\t\t\treturn <D extends ElementDomType, K extends ElementKeysType>(\n\t\t\t\tprops?: ElementCustomProps<D, K>,\n\t\t\t) => {\n\t\t\t\tif (!solidHook) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"qform: solid hook does not exist, please add it to options.hooks option!\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst data = derived.hooks[solidHook]();\n\t\t\t\tconst [dType, kType] = getElementCustomProps(\"dom\", props);\n\t\t\t\treturn element(dType, kType, data);\n\t\t\t};\n\t\t},\n\t\tget svelte() {\n\t\t\tconst data = derived.get();\n\t\t\tconst [dType, kType] = getElementCustomProps(\"dom\");\n\t\t\treturn element(dType, kType, data);\n\t\t},\n\t\tref: <K extends ElementKeysType>(ref: any, props?: ElementCustomProps<\"dom\", K>) => {\n\t\t\t// keep type as any to avoid unnecessary type issues\n\t\t\t// initialization only\n\t\t\tif (ref == null || ref.name === key) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// console.log(\"ref is initialized for :: \", key);\n\t\t\tconst data = derived.get();\n\t\t\tconst [dType, kType] = getElementCustomProps(\"dom\", props);\n\t\t\tconst el = element(dType, kType, data);\n\t\t\tfor (const k in el) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tref[k] = el[k];\n\t\t\t}\n\t\t},\n\t};\n}\n","import type { _QSTATE } from \"@qundus/qstate\";\nimport type { ElementProps, Field, FieldCondition, FieldExtras, Options } from \"../_model\";\n\n// TODO: atom store may become inconsistent with onchange function\n// find another way to do it!\nexport type FieldStoreObject<F extends Field> = {\n\tvalue: F[\"value\"] | undefined;\n\tcondition: FieldCondition;\n\terrors?: string[];\n\textras?: FieldExtras<F[\"type\"]>;\n};\nexport type FieldStore<F extends Field, O extends Options<any>> = _QSTATE.StoreDerived<\n\tFieldStoreObject<F>,\n\t{ hooks: O[\"hooks\"] }\n>;\nexport default function prepareFieldStore<F extends Field, O extends Options<any>>(\n\tprops: ElementProps<F, O>,\n) {\n\tconst { key, field, $store } = props;\n\tconst derived = $store.derive((form) => {\n\t\tconst value = {\n\t\t\tvalue: form.values?.[key],\n\t\t\tcondition: form.conditions?.[key],\n\t\t\terrors: form.errors?.[key],\n\t\t\textras: form.extras?.[key], //as FieldExtras<F[\"type\"]>,\n\t\t};\n\t\tif (field.onChange != null && typeof field.onChange === \"function\") {\n\t\t\tfield.onChange({\n\t\t\t\t$value: value,\n\t\t\t\tform,\n\t\t\t});\n\t\t\t// if (next != null && typeof next === \"object\") {\n\t\t\t// \t// @ts-ignore\n\t\t\t// \tvalue = next;\n\t\t\t// }\n\t\t}\n\t\t// console.log(\"form: condition of \", key, \" :: \", JSON.stringify(value.condition));\n\t\treturn value as FieldStoreObject<F>;\n\t});\n\n\treturn derived as FieldStore<F, O>; //as PrepareFieldState<F>;\n}\n","import type { ElementProps, Field, FieldCondition, FieldValidate, Options } from \"../_model\";\nimport { PLACEHOLDERS } from \"../const\";\nimport onValue from \"../interactions/on-value\";\nimport mergeConditions from \"../methods/merge-conditions\";\nimport prepareFieldElement, { type FieldElement } from \"../preparations/field-element\";\nimport prepareFieldStore, { type FieldStore } from \"../preparations/field-store\";\n\nexport type FieldAtom<F extends Field, O extends Options<any>> = F extends Field<\n\tinfer type,\n\tinfer value\n>\n\t? {\n\t\t\t$store: FieldStore<F, O>;\n\t\t\tkey: string;\n\t\t\ttype: type;\n\t\t\tlabel: string;\n\t\t\tgetOptions?: F[\"options\"];\n\t\t\tget element(): FieldElement<F, O>;\n\t\t\tplaceholders: typeof PLACEHOLDERS;\n\t\t\tget addValidation(): (func: FieldValidate) => (() => void) | null;\n\t\t\tupdateValue: (\n\t\t\t\tvalue: value | ((prev: value) => void),\n\t\t\t\tconfigs?: { preprocessValue?: boolean },\n\t\t\t) => void;\n\t\t\tclearValue: () => void;\n\t\t\tupdateCondition: (\n\t\t\t\tvalue:\n\t\t\t\t\t| Partial<FieldCondition>\n\t\t\t\t\t| ((prev: Partial<FieldCondition>) => Partial<FieldCondition>),\n\t\t\t) => void;\n\t\t}\n\t: unknown;\nexport default function prepareAtom<F extends Field, O extends Options<any>>(\n\tprops: ElementProps<F, O>,\n) {\n\tconst { key, field, $store } = props;\n\tconst derived = prepareFieldStore<F, O>(props);\n\treturn {\n\t\t// field,\n\t\tkey,\n\t\ttype: field.type,\n\t\tlabel: field.label ?? key,\n\t\t$store: derived,\n\t\t// $hooks: derived.hooks,\n\t\t// $subscribe: derived.subscribe,\n\t\t// $listen: derived.listen,\n\t\tget element() {\n\t\t\treturn prepareFieldElement<F, O>({ ...props, derived });\n\t\t},\n\t\tget placeholders() {\n\t\t\treturn PLACEHOLDERS;\n\t\t},\n\t\tgetOptions: field.options ?? null,\n\t\tget addValidation() {\n\t\t\treturn (func: FieldValidate) => {\n\t\t\t\tif (func == null || typeof func !== \"function\") {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tlet idx = null as number | null;\n\t\t\t\tif (field.validate == null) {\n\t\t\t\t\tfield.validate = func;\n\t\t\t\t} else if (Array.isArray(field.validate)) {\n\t\t\t\t\tidx = field.validate.push(func);\n\t\t\t\t\tidx--;\n\t\t\t\t} else {\n\t\t\t\t\tfield.validate = [field.validate, func];\n\t\t\t\t\tidx = 1;\n\t\t\t\t}\n\t\t\t\treturn () => {\n\t\t\t\t\tif (typeof field.validate === \"function\") {\n\t\t\t\t\t\tfield.validate = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (field.validate != null) {\n\t\t\t\t\t\t\tfield.validate = field.validate.filter((item, index) => index !== idx);\n\t\t\t\t\t\t\tif (field.validate.length <= 0) {\n\t\t\t\t\t\t\t\tfield.validate = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t},\n\t\tupdateValue: (value, configs) => {\n\t\t\tconst prev = $store.get().values[key];\n\t\t\tconst current = typeof value === \"function\" ? (value as any)(prev) : value;\n\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\tonValue({ ...props, $form, event: null, value: current, ...configs });\n\t\t\t\treturn $form;\n\t\t\t});\n\t\t},\n\t\tclearValue: () => {\n\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\tonValue({ ...props, $form, event: null, value: null, preprocessValue: false });\n\t\t\t\treturn $form;\n\t\t\t});\n\t\t},\n\t\tupdateCondition: (value) => {\n\t\t\tconst prev = $store.get().values[key];\n\t\t\tconst newCondition = typeof value === \"function\" ? (value as any)(prev) : value;\n\t\t\t$store.update(({ $next: $form }) => {\n\t\t\t\t$form.conditions[key] = mergeConditions($form.conditions[key], newCondition);\n\t\t\t\treturn $form;\n\t\t\t});\n\t\t},\n\t} as FieldAtom<F, O>;\n}\n","import type { Field, Fields, FormStore, Options } from \"../_model\";\nimport prepareAtom, { type FieldAtom } from \"../preparations/field-atom\";\n\nexport type Atoms<S extends Fields, O extends Options<S>> = {\n\t[K in keyof S]: FieldAtom<S[K], O>;\n};\nexport type AtomsPrepared<S extends Fields, O extends Options<S>> = ReturnType<\n\ttypeof prepareFormAtoms<S, O>\n>;\nexport default function prepareFormAtoms<F extends Fields, O extends Options<F>>(props: {\n\tfields: F;\n\toptions: O;\n\t$store: FormStore<F, O>;\n}) {\n\tconst { fields, $store, options } = props;\n\tconst atoms = {} as Atoms<F, O>;\n\tfunction getAtom<G extends keyof F>(key: G) {\n\t\tlet atom = atoms[key];\n\t\tif (atom == null) {\n\t\t\tconst field = fields[key];\n\t\t\tatom = prepareAtom({ key: key as string, field, options, $store: $store as any });\n\t\t\tatoms[key] = atom;\n\t\t}\n\t\treturn atom;\n\t}\n\treturn {\n\t\tget atoms() {\n\t\t\treturn <G extends keyof F>(key: G) => {\n\t\t\t\treturn getAtom(key);\n\t\t\t};\n\t\t},\n\t\tget elements() {\n\t\t\treturn <G extends keyof F>(key: G) => {\n\t\t\t\treturn getAtom(key).element;\n\t\t\t};\n\t\t},\n\t};\n}\n","import type { Basic, BasicToField, Field, Options } from \"../_model\";\nimport { PLACEHOLDERS } from \"../const\";\n\nexport default function prepareField<B extends Basic, O extends Options<any>>(props: {\n\tkey: string;\n\tbasic: B;\n\toptions: O;\n}) {\n\tconst { key, basic, options } = props;\n\tlet field = {} as Partial<BasicToField<B>>;\n\t// formulate the basic to setup object\n\tif (basic == null) {\n\t\t// default fallback input type\n\t\tfield = {\n\t\t\ttype: \"text\",\n\t\t\tvalue: null,\n\t\t} as any;\n\t} else if (typeof basic === \"string\") {\n\t\tfield = {\n\t\t\ttype: basic,\n\t\t} as any;\n\t} else {\n\t\tfield = basic as any;\n\t\tif (field.type == null) {\n\t\t\tfield.type = \"text\";\n\t\t}\n\t}\n\n\t// manage general and field specific options\n\tfield.required = field.required ?? options.allFieldsRequired;\n\tfield.disabled = field.disabled ?? options.allFieldsDisabled;\n\tfield.valueNullable = field.valueNullable ?? false;\n\tfield.preprocessValue = field.preprocessValue ?? options?.preprocessValues ?? true;\n\tfield.validateOn = field.validateOn ?? options.validateOn;\n\tfield.incompleteStatus = field.incompleteStatus ?? true;\n\tfield.multiple = field.multiple ?? false;\n\n\t// SPECIAL ASSIGNMENTS\n\t// label\n\tif (field.label == null) {\n\t\tconst char = options.flatObjectKeysChar;\n\t\tfield.label = key;\n\t\tif (char != null) {\n\t\t\tif (key.includes(char)) {\n\t\t\t\tconst replacement = options.flatLabelJoinChar;\n\t\t\t\tfield.label = key.split(char).join(replacement);\n\t\t\t}\n\t\t}\n\t}\n\n\t// SPECIAL TYPES\n\t// some specfic type settings\n\tif (field.type === \"select\") {\n\t\tif (!field.multiple) {\n\t\t\tfield.value = field.value ?? PLACEHOLDERS.select.value;\n\t\t} else {\n\t\t\tif (field.value != null) {\n\t\t\t\tif (!Array.isArray(field.value)) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tfield.value = [field.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// vital checks\n\tif (typeof field.preprocessValue !== \"boolean\") {\n\t\tthrow new Error(\"form: preprocessValue of \" + key + \" must be boolean!\");\n\t}\n\treturn field as Field;\n}\n","import type { Field, FieldCondition } from \"../_model\";\nimport isFieldIncomplete from \"../checks/is-field-incomplete\";\n\nexport default function prepareFieldCondition<F extends Field>(props: { key: string; field: F }) {\n\tconst { field } = props;\n\tconst condition = {\n\t\tvalid: true,\n\t\thidden: field.hidden === true,\n\t\tvalue: {\n\t\t\tupdated: false,\n\t\t\terror: false,\n\t\t\tlastUpdate: false,\n\t\t},\n\t\telement: {\n\t\t\tstate: false,\n\t\t\tvisited: false,\n\t\t\trequired: field?.required ?? true,\n\t\t\tdisabled: field?.disabled ?? false,\n\t\t},\n\t} as FieldCondition;\n\tif (!condition.hidden) {\n\t\tconst incomplete = isFieldIncomplete({ field, value: field.value, condition });\n\t\tif (incomplete) {\n\t\t\tcondition.valid = false;\n\t\t\t// console.log(\"cc :: \", key, \" :: \", JSON.stringify(condition));\n\t\t\t// condition.value.error = \"incomplete\"; // TODO: make this an config option\n\t\t}\n\t}\n\n\treturn condition;\n}\n","import type { Basics, Fields, FormObject, Options } from \"../_model\";\n\nimport prepareField from \"../preparations/field\";\nimport prepareFieldCondition from \"../preparations/field-condition\";\n\nexport default function prepareFormFields<\n\tB extends Basics,\n\tF extends Fields<B>,\n\tO extends Options<F>,\n>(props: { basics: B; options: O }) {\n\tconst { basics, options } = props;\n\tconst fields = {} as F;\n\tconst form_init = {\n\t\tvalues: {} as any,\n\t\tconditions: {} as any,\n\t\terrors: null as any,\n\t\textras: {} as any,\n\t\tincomplete: [],\n\t\t// focused: false,\n\t\tstatus: \"valid\",\n\t} as FormObject<F>;\n\tfor (const key in basics) {\n\t\tconst basic = basics[key];\n\t\tconst field = prepareField({ key, basic, options });\n\t\tconst condition = prepareFieldCondition({ key, field });\n\t\t// @ts-ignore\n\t\tfields[key] = field;\n\t\tform_init.values[key] = field.value as any;\n\t\tform_init.conditions[key] = condition;\n\t\t// if (!condition.element.disabled && condition.element.required) {}\n\t\tif (!condition.valid) {\n\t\t\tform_init.status = \"idle\";\n\t\t}\n\t}\n\n\treturn { fields, form_init };\n}\n","import { type _QSTATE, map, onMount, task, onSet } from \"@qundus/qstate\";\nimport { isServerSide } from \"@qundus/qstate/checks\";\nimport type { Field, Fields, FormObject, Options } from \"../_model\";\nimport isFieldIncomplete from \"../checks/is-field-incomplete\";\nimport isKeyInFields from \"../checks/is-key-in-fields\";\nimport onValue from \"../interactions/on-value\";\nimport { updateAddon, deriveAddon } from \"@qundus/qstate/addons\";\n\n// types\nexport type FormState<F extends Fields> = _QSTATE.NanoMap<FormObject<F>>;\n\n// store\nexport type FormStore<F extends Fields, O extends Options<any>> = _QSTATE.Store<\n\tFormState<F>,\n\t{\n\t\thooks: O[\"hooks\"];\n\t\taddons: {\n\t\t\tderive: typeof deriveAddon;\n\t\t\tupdate: typeof updateAddon;\n\t\t};\n\t}\n>;\nexport default function prepareFormStore<F extends Fields, O extends Options<F>>(props: {\n\tfields: F;\n\toptions: O;\n\tform_init: FormObject<F>;\n}) {\n\tconst { fields, form_init, options } = props;\n\tconst $store = map(form_init, {\n\t\thooks: options.hooks, //as O[\"hooks\"],\n\t\taddons: {\n\t\t\tderive: deriveAddon,\n\t\t\tupdate: updateAddon,\n\t\t},\n\t});\n\n\tonMount($store, () => {\n\t\tconst ureturns = task(async () => {\n\t\t\tconst serverSide = isServerSide();\n\t\t\tif (serverSide) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst ureturns =\n\t\t\t\t(await options?.onMount?.({\n\t\t\t\t\t...props,\n\t\t\t\t\tinit: form_init,\n\t\t\t\t\tupdate: (values) => {\n\t\t\t\t\t\t//\n\t\t\t\t\t\tif (typeof values === \"undefined\") {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst $form = { ...$store.get() };\n\t\t\t\t\t\tfor (const key in values) {\n\t\t\t\t\t\t\tconst value = values[key];\n\t\t\t\t\t\t\tconst field = fields[key as keyof typeof fields] as Field;\n\t\t\t\t\t\t\tif (!isKeyInFields(fields, key, options)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonValue({\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\t$form,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tevent: null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$store.set($form);\n\t\t\t\t\t},\n\t\t\t\t})) ?? null;\n\t\t\treturn ureturns;\n\t\t});\n\n\t\treturn () => {\n\t\t\tif (ureturns != null && typeof ureturns === \"function\") {\n\t\t\t\t// @ts-ignore\n\t\t\t\tureturns?.();\n\t\t\t}\n\t\t};\n\t});\n\n\tonSet($store, ($next) => {\n\t\toptions?.onChange?.($next);\n\t\tconst next = $next.newValue; //as typeof $store.value;\n\t\t// check form status\n\t\tif (next.status === \"submit\") {\n\t\t\treturn;\n\t\t}\n\t\tnext.status = \"valid\";\n\t\tnext.incomplete = [];\n\t\tlet errors = 0;\n\t\tlet incompletes = 0;\n\t\t// global incompletes do not affect individual's\n\t\tfor (const key in fields) {\n\t\t\tconst value = next.values[key];\n\t\t\tconst field = fields[key] as Fields[number];\n\t\t\tconst condition = next.conditions[key];\n\t\t\tconst error = next.errors?.[key];\n\t\t\tlet incomplete = false;\n\n\t\t\t// first check errors\n\t\t\tif (error != null) {\n\t\t\t\t// console.log(\"onchange error :: \", key, \" :: \", error);\n\t\t\t\tif (condition.hidden) {\n\t\t\t\t\tcondition.valid = true;\n\t\t\t\t} else if (condition.value.error === \"optional\") {\n\t\t\t\t\tcondition.valid = true;\n\t\t\t\t} else {\n\t\t\t\t\terrors++;\n\t\t\t\t\tcondition.valid = false;\n\t\t\t\t}\n\t\t\t\t// TODO: continue/break here maybe?!\n\t\t\t} else if (condition.value.error === \"incomplete\") {\n\t\t\t\tincomplete = true;\n\t\t\t} else {\n\t\t\t\tincomplete = field.incompleteStatus\n\t\t\t\t\t? isFieldIncomplete({ value, condition, field })\n\t\t\t\t\t: false;\n\t\t\t}\n\n\t\t\t// if any field triggers incomplete form status, update it\n\t\t\tif (incomplete) {\n\t\t\t\tincompletes++;\n\t\t\t\tcondition.valid = false;\n\t\t\t\tif (options.incompleteListCount) {\n\t\t\t\t\tif (typeof options.incompleteListCount === \"boolean\") {\n\t\t\t\t\t\tnext.incomplete.push(key);\n\t\t\t\t\t} else if (next.incomplete.length < options.incompleteListCount) {\n\t\t\t\t\t\tnext.incomplete.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcondition.valid = condition.value.error !== \"validation\";\n\t\t\t}\n\t\t}\n\n\t\t// finally check for the status and cleanup what's necessary\n\t\tif (incompletes > 0) {\n\t\t\t// prioritizing incomplete until there's errors\n\t\t\tnext.status = \"incomplete\";\n\t\t}\n\t\tif (errors <= 0) {\n\t\t\tnext.errors = null;\n\t\t} else {\n\t\t\tnext.status = \"error\"; // takes precedence over incomplete status\n\t\t}\n\t});\n\n\treturn $store as FormStore<F, O>;\n}\n","import type { _QSTATE } from \"@qundus/qstate\";\nimport type { Basics, Fields, FormObject, Options } from \"../_model\";\n// checks\nimport checkBasics from \"../checks/check-basics\";\nimport checkOptions from \"../checks/check-options\";\nimport { PLACEHOLDERS } from \"../const\";\nimport mergeOptions from \"../methods/merge-options\";\n// methods\nimport formActions, { type FormActions } from \"../plugins/form-actions\";\nimport formButton, { type FormButton } from \"../plugins/form-button\";\nimport prepareFormAtoms, { type AtomsPrepared } from \"../preparations/form-atoms\";\n// preparations\nimport prepareFormFields from \"../preparations/form-fields\";\nimport prepareFormStore from \"../preparations/form-store\";\n\nexport type Form<B extends Basics, F extends Fields<B>, O extends Options<F>> = AtomsPrepared<\n\tF,\n\tO\n> & {\n\tactions: FormActions<F, O>;\n\tbutton: FormButton<F, O>;\n\tplaceholders: typeof PLACEHOLDERS;\n\tget keys(): () => (keyof F)[];\n\t$store: _QSTATE.StoreDerived<FormObject<F>, { hooks: O[\"hooks\"] }>;\n\t// $store: Pick<FormStore<F, O>, \"get\" | \"derive\" | \"subscribe\" | \"listen\">;\n};\n\nexport function form<B extends Basics, F extends Fields<B>, O extends Options<F>>(\n\tbasics: B,\n\t_options?: O,\n): Form<B, F, O> {\n\tcheckBasics(basics);\n\tconst options = checkOptions<F, O>(_options) as O;\n\t// necessary preparations\n\tconst { fields, form_init } = prepareFormFields<B, F, O>({ basics, options });\n\tconst $store = prepareFormStore<F, O>({ fields, form_init, options });\n\tconst { atoms, elements } = prepareFormAtoms<F, O>({ fields, options, $store });\n\t// plugins\n\tconst actions = formActions<F, O>({ fields, options, $store });\n\tconst button = formButton<F, O>({ fields, options, $store });\n\n\t// TODO: find a better solution for this if it affects performance\n\tconst derived = $store.derive((value) => value);\n\n\t// other helpers\n\tlet keys = null as (keyof F)[] | null;\n\treturn {\n\t\t// fields, // for tests only, not recommended to export\n\t\t$store: derived as any,\n\t\tatoms,\n\t\telements,\n\t\tactions,\n\t\tbutton,\n\t\tplaceholders: PLACEHOLDERS,\n\t\tget keys() {\n\t\t\treturn () => {\n\t\t\t\tif (keys == null) {\n\t\t\t\t\tkeys = Object.keys(fields ?? {}) as unknown as typeof keys;\n\t\t\t\t}\n\t\t\t\treturn keys as (keyof F)[];\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function formSetup<G extends Options<any>>(base?: G) {\n\tconst optionsMerger = mergeOptions(base);\n\treturn <B extends Basics, F extends Fields<B>, D extends Options<F>>(basics: B, doptions?: D) => {\n\t\tconst options = optionsMerger<D>(doptions);\n\t\treturn form<B, F, typeof options>(basics, options);\n\t};\n}\n\n// test types\n// const form = createForm()\n\n// field(field: Keys) {\n// \tconst n = form.getFieldState(field);\n// \treturn state.atom({\n// \t\terror: n?.error,\n// \t\tvalue: n?.value,\n// \t\tactive: n?.active,\n// \t\tdirty: n?.dirty,\n// \t\tinvalid: n?.invalid,\n// \t\tmodified: n?.modified,\n// \t\tname: n?.name,\n// \t\ttouched: n?.touched,\n// \t\tvalid: n?.valid,\n// \t\tvalidating: n?.validating,\n// \t\tvisited: n?.visited,\n// \t});\n// },\n\n// const form = cf<FieldsWithInits<T>>({\n// \tinitialValues: inits,\n// \tvalidate(values) {\n// \t\t// return undefined;\n// \t\tconsole.log(\"validating values :: \", values);\n// \t\tlet errors = null as unknown as Record<string, string>;\n// \t\tfor (const key in fields) {\n// \t\t\tconst inits = fields[key];\n// \t\t\tif (inits == null || typeof inits !== \"object\") {\n// \t\t\t\tcontinue;\n// \t\t\t}\n// \t\t\tif (\"init\" in inits) {\n// \t\t\t\tconst settings = inits as any;\n// \t\t\t\tconst err = settings.validate?.(values[key]);\n// \t\t\t\tif (err != null) {\n// \t\t\t\t\tif (errors == null) errors = {};\n// \t\t\t\t\terrors[key] = err;\n// \t\t\t\t}\n// \t\t\t}\n// \t\t}\n// \t\tstate.set({ errors });\n// \t\treturn errors;\n// \t},\n// \tonSubmit(values, form, callback) {\n// \t\tconst state = form.getState();\n// \t\tif (state.dirty) {\n// \t\t\tconsole.log(\"dirty :: \", state);\n// \t\t\treturn;\n// \t\t}\n// \t\tconsole.log(\"submitted :: \", values);\n// \t\t// form.reset();\n// \t\t// form.restart();\n// \t},\n// \tvalidateOnBlur: true,\n// \t// mutators: {\n// \t// \temail: (value) => {\n// \t// \t\tconsole.log(\"mutate email :: \", value);\n// \t// \t\treturn value;\n// \t// \t},\n// \t// },\n// });\n// form.subscribe(\n// \t(fields) => {\n// \t\tform.resumeValidation();\n// \t},\n// \t{ values: true },\n// );\n\n// for (const key in fields) {\n// \tconst field = fields[key];\n// \tform.registerField(\n// \t\tkey,\n// \t\t(ff) => {\n// \t\t\t// console.log(\"value changed \", key, \" :: \", ff.value);\n// \t\t\tconst validator = (field as any)?.validate;\n// \t\t\tif (typeof validator === \"function\") {\n// \t\t\t\tconst errors = { ...state.get().errors };\n// \t\t\t\tconst error = validator(ff.value);\n// \t\t\t\tconsole.log(\"error occured :: \", error);\n// \t\t\t\tif (error) {\n// \t\t\t\t\t// const state = form.getState();\n// \t\t\t\t\t// ff.error = error;\n// \t\t\t\t\t// ff.invalid = true;\n// \t\t\t\t\t// ff.valid = false;\n// \t\t\t\t\terrors[key] = error;\n// \t\t\t\t\t// state.errors = errors;\n// \t\t\t\t} else if (key in errors) {\n// \t\t\t\t\t// ff.error = null;\n// \t\t\t\t\tdelete errors[key];\n// \t\t\t\t}\n// \t\t\t\tstate.set({ errors });\n// \t\t\t}\n// \t\t},\n// \t\t{\n// \t\t\tvalue: true,\n// \t\t\tactive: true,\n// \t\t\terror: true,\n// \t\t\tinvalid: true,\n// \t\t\ttouched: true,\n// \t\t\tvalid: true,\n// \t\t\tvisited: true,\n// \t\t\tdirty: true,\n// \t\t},\n// \t\t{},\n// \t);\n// }\n"]}