@modular-forms/solid
Advanced tools
Comparing version
@@ -72,3 +72,3 @@ "use strict"; | ||
// src/components/Field.tsx | ||
var import_solid_js28 = require("solid-js"); | ||
var import_solid_js30 = require("solid-js"); | ||
@@ -149,3 +149,3 @@ // src/primitives/createForm.ts | ||
// src/methods/setError.ts | ||
var import_solid_js13 = require("solid-js"); | ||
var import_solid_js15 = require("solid-js"); | ||
@@ -166,3 +166,3 @@ // src/utils/getElementInput.ts | ||
function getPathValue(path, object) { | ||
return path.split(".").reduce((value2, key) => value2 == null ? void 0 : value2[key], object); | ||
return path && object ? path.split(".").reduce((value2, key) => value2 == null ? void 0 : value2[key], object) : object; | ||
} | ||
@@ -275,11 +275,18 @@ | ||
// src/utils/getFieldIndex.ts | ||
function getFieldIndex(pr\u00E4fix, name) { | ||
return +name.replace(`${pr\u00E4fix}.`, "").split(".")[0]; | ||
// src/utils/getFieldArrayState.ts | ||
var import_solid_js5 = require("solid-js"); | ||
function getFieldArrayState(field) { | ||
return (0, import_solid_js5.untrack)(() => ({ | ||
initialItems: field.getInitialItems(), | ||
items: field.getItems(), | ||
error: field.getError(), | ||
touched: field.getTouched(), | ||
dirty: field.getDirty() | ||
})); | ||
} | ||
// src/utils/getFieldState.ts | ||
var import_solid_js5 = require("solid-js"); | ||
var import_solid_js6 = require("solid-js"); | ||
function getFieldState(field) { | ||
return (0, import_solid_js5.untrack)(() => ({ | ||
return (0, import_solid_js6.untrack)(() => ({ | ||
elements: field.getElements(), | ||
@@ -319,6 +326,6 @@ initialInput: field.getInitialInput(), | ||
// src/utils/getFilteredNames.ts | ||
var import_solid_js6 = require("solid-js"); | ||
var import_solid_js7 = require("solid-js"); | ||
function getFilteredNames(form, arg2) { | ||
const allFieldNames = (0, import_solid_js6.untrack)(form.internal.getFieldNames); | ||
const allFieldArrayNames = (0, import_solid_js6.untrack)( | ||
const allFieldNames = (0, import_solid_js7.untrack)(form.internal.getFieldNames); | ||
const allFieldArrayNames = (0, import_solid_js7.untrack)( | ||
form.internal.getFieldArrayNames | ||
@@ -357,2 +364,7 @@ ); | ||
// src/utils/getPathIndex.ts | ||
function getPathIndex(name, path) { | ||
return +path.replace(`${name}.`, "").split(".")[0]; | ||
} | ||
// src/utils/getValidateList.ts | ||
@@ -380,2 +392,11 @@ function getValidateList(validate2) { | ||
// src/utils/setFieldArrayState.ts | ||
function setFieldArrayState(fieldArray, state) { | ||
fieldArray.setInitialItems(state.initialItems); | ||
fieldArray.setItems(state.items); | ||
fieldArray.setError(state.error); | ||
fieldArray.setTouched(state.touched); | ||
fieldArray.setDirty(state.dirty); | ||
} | ||
// src/utils/setFieldState.ts | ||
@@ -404,5 +425,5 @@ function setFieldState(field, state) { | ||
// src/utils/updateDirty.ts | ||
var import_solid_js7 = require("solid-js"); | ||
var import_solid_js8 = require("solid-js"); | ||
function updateDirty(form, dirty) { | ||
(0, import_solid_js7.untrack)(() => { | ||
(0, import_solid_js8.untrack)(() => { | ||
form.internal.setDirty( | ||
@@ -417,9 +438,9 @@ dirty || [...form.internal.fields, ...form.internal.fieldArrays].some( | ||
// src/utils/updateFieldDirty.ts | ||
var import_solid_js8 = require("solid-js"); | ||
var import_solid_js9 = require("solid-js"); | ||
function updateFieldDirty(form, field) { | ||
(0, import_solid_js8.untrack)(() => { | ||
(0, import_solid_js9.untrack)(() => { | ||
const initialInput = field.getInitialInput(); | ||
const input = field.getInput(); | ||
const dirty = Array.isArray(initialInput) && Array.isArray(input) ? initialInput.join() !== input.join() : typeof initialInput === "number" && typeof input === "number" && isNaN(initialInput) && isNaN(input) ? false : initialInput !== input; | ||
(0, import_solid_js8.batch)(() => { | ||
(0, import_solid_js9.batch)(() => { | ||
field.setDirty(dirty); | ||
@@ -432,5 +453,18 @@ updateDirty(form, dirty); | ||
// src/utils/updateFieldInput.ts | ||
var import_solid_js9 = require("solid-js"); | ||
var import_solid_js11 = require("solid-js"); | ||
// src/utils/validateIfNecessary.ts | ||
var import_solid_js10 = require("solid-js"); | ||
function validateIfNecessary(form, name, options) { | ||
(0, import_solid_js10.untrack)(() => { | ||
const { on: mode, shouldFocus = false } = options; | ||
if (!form.submitted && form.internal.validateOn === mode || form.submitted && form.internal.revalidateOn === mode) { | ||
validate(form, name, { shouldFocus }); | ||
} | ||
}); | ||
} | ||
// src/utils/updateFieldInput.ts | ||
function updateFieldInput(form, field, name, input) { | ||
(0, import_solid_js9.batch)(() => { | ||
(0, import_solid_js11.batch)(() => { | ||
field.setInput(() => input); | ||
@@ -440,5 +474,3 @@ field.setTouched(true); | ||
updateFieldDirty(form, field); | ||
if (!form.submitted && form.internal.validateOn === "input" || form.submitted && form.internal.revalidateOn === "input") { | ||
validate(form, name); | ||
} | ||
validateIfNecessary(form, name, { on: "input" }); | ||
}); | ||
@@ -448,7 +480,7 @@ } | ||
// src/utils/updateFieldArrayDirty.ts | ||
var import_solid_js10 = require("solid-js"); | ||
var import_solid_js12 = require("solid-js"); | ||
function updateFieldArrayDirty(form, fieldArray) { | ||
(0, import_solid_js10.untrack)(() => { | ||
(0, import_solid_js12.untrack)(() => { | ||
const dirty = fieldArray.getInitialItems().join() !== fieldArray.getItems().join(); | ||
(0, import_solid_js10.batch)(() => { | ||
(0, import_solid_js12.batch)(() => { | ||
fieldArray.setDirty(dirty); | ||
@@ -461,6 +493,6 @@ updateDirty(form, dirty); | ||
// src/utils/updateState.ts | ||
var import_solid_js11 = require("solid-js"); | ||
var import_solid_js13 = require("solid-js"); | ||
function updateState(form) { | ||
let touched = false, dirty = false, invalid = false; | ||
(0, import_solid_js11.untrack)(() => { | ||
(0, import_solid_js13.untrack)(() => { | ||
for (const [, fieldOrFieldArray] of [ | ||
@@ -486,3 +518,3 @@ ...form.internal.fields, | ||
}); | ||
(0, import_solid_js11.batch)(() => { | ||
(0, import_solid_js13.batch)(() => { | ||
form.internal.setTouched(touched); | ||
@@ -495,5 +527,5 @@ form.internal.setDirty(dirty); | ||
// src/methods/focus.ts | ||
var import_solid_js12 = require("solid-js"); | ||
var import_solid_js14 = require("solid-js"); | ||
function focus(form, name) { | ||
(0, import_solid_js12.untrack)(() => { | ||
(0, import_solid_js14.untrack)(() => { | ||
var _a, _b; | ||
@@ -509,4 +541,4 @@ return (_b = (_a = form.internal.fields.get(name)) == null ? void 0 : _a.getElements()[0]) == null ? void 0 : _b.focus(); | ||
const fieldOrFieldArray = isFieldArray ? getFieldArray(form, name) : getField(form, name); | ||
(0, import_solid_js13.batch)(() => { | ||
(0, import_solid_js13.untrack)(() => { | ||
(0, import_solid_js15.batch)(() => { | ||
(0, import_solid_js15.untrack)(() => { | ||
fieldOrFieldArray.setError(error); | ||
@@ -536,3 +568,3 @@ form.internal.setInvalid( | ||
// src/methods/getArrayValues.ts | ||
var import_solid_js14 = require("solid-js"); | ||
var import_solid_js16 = require("solid-js"); | ||
function getArrayValues(form, name, options = {}) { | ||
@@ -546,3 +578,3 @@ const { | ||
getFieldArray(form, name).getItems(); | ||
const fieldNames = (0, import_solid_js14.untrack)(form.internal.getFieldNames).filter( | ||
const fieldNames = (0, import_solid_js16.untrack)(form.internal.getFieldNames).filter( | ||
(fieldName) => fieldName.startsWith(name) | ||
@@ -611,6 +643,6 @@ ); | ||
// src/methods/handleSubmit.ts | ||
var import_solid_js16 = require("solid-js"); | ||
var import_solid_js18 = require("solid-js"); | ||
// src/methods/validate.ts | ||
var import_solid_js15 = require("solid-js"); | ||
var import_solid_js17 = require("solid-js"); | ||
async function validate(form, arg2, arg3) { | ||
@@ -623,4 +655,4 @@ const [fieldNames, fieldArrayNames] = getFilteredNames(form, arg2); | ||
let valid = true; | ||
await (0, import_solid_js15.batch)(async () => { | ||
await (0, import_solid_js15.untrack)(async () => { | ||
await (0, import_solid_js17.batch)(async () => { | ||
await (0, import_solid_js17.untrack)(async () => { | ||
await Promise.all( | ||
@@ -688,3 +720,3 @@ fieldNames.map(async (name) => { | ||
} = options; | ||
(0, import_solid_js16.batch)(() => { | ||
(0, import_solid_js18.batch)(() => { | ||
if (!keepResponse) { | ||
@@ -720,3 +752,3 @@ form.internal.setResponse({}); | ||
// src/methods/hasField.ts | ||
var import_solid_js17 = require("solid-js"); | ||
var import_solid_js19 = require("solid-js"); | ||
function hasField(form, name, options = {}) { | ||
@@ -729,3 +761,3 @@ const { | ||
} = options; | ||
return (0, import_solid_js17.createMemo)(() => { | ||
return (0, import_solid_js19.createMemo)(() => { | ||
if (form.internal.fields.has(name)) { | ||
@@ -741,3 +773,3 @@ const field = getField(form, name); | ||
// src/methods/hasFieldArray.ts | ||
var import_solid_js18 = require("solid-js"); | ||
var import_solid_js20 = require("solid-js"); | ||
function hasFieldArray(form, name, options = {}) { | ||
@@ -750,3 +782,3 @@ const { | ||
} = options; | ||
return (0, import_solid_js18.createMemo)(() => { | ||
return (0, import_solid_js20.createMemo)(() => { | ||
if (form.internal.fieldArrays.has(name)) { | ||
@@ -762,6 +794,6 @@ const fieldArray = getFieldArray(form, name); | ||
// src/methods/insert.ts | ||
var import_solid_js19 = require("solid-js"); | ||
var import_solid_js21 = require("solid-js"); | ||
function insert(form, name, options = {}) { | ||
(0, import_solid_js19.batch)(() => { | ||
(0, import_solid_js19.untrack)(() => { | ||
(0, import_solid_js21.batch)(() => { | ||
(0, import_solid_js21.untrack)(() => { | ||
const fieldArray = getFieldArray(form, name); | ||
@@ -778,3 +810,3 @@ const arrayLength = fieldArray.getItems().length; | ||
form, | ||
`${name}.${index}${path && `.${path}`}` | ||
`${name}.${index}${path ? `.${path}` : ""}` | ||
), | ||
@@ -793,6 +825,6 @@ { | ||
} else { | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(name) && getFieldIndex(name, fieldName) >= index | ||
).reverse().forEach((fieldName) => { | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const filterName = (value3) => value3.startsWith(`${name}.`) && getPathIndex(name, value3) >= index; | ||
form.internal.getFieldNames().filter(filterName).sort().reverse().forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
const fieldIndex = getPathIndex(name, fieldName); | ||
setFieldState( | ||
@@ -806,10 +838,13 @@ getField( | ||
), | ||
getFieldState(getField(form, fieldName)) | ||
getFieldState(field) | ||
); | ||
if (fieldIndex === index) { | ||
const initialInput = getPathValue( | ||
fieldName.replace(`${name}.${fieldIndex}.`, ""), | ||
fieldName.replace( | ||
new RegExp(`${name}.${fieldIndex}.?`), | ||
"" | ||
), | ||
value2 | ||
); | ||
setFieldState(getField(form, fieldName), { | ||
setFieldState(field, { | ||
elements: [], | ||
@@ -824,2 +859,32 @@ initialInput, | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).sort().reverse().forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
const fieldArrayIndex = getPathIndex(name, fieldArrayName); | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fieldArrayIndex}`, | ||
`${name}.${fieldArrayIndex + 1}` | ||
) | ||
), | ||
getFieldArrayState(fieldArray2) | ||
); | ||
if (fieldArrayIndex === index) { | ||
const initialItems = (getPathValue( | ||
fieldArrayName.replace( | ||
new RegExp(`${name}.${fieldArrayIndex}.?`), | ||
"" | ||
), | ||
value2 | ||
) || []).map(() => getUniqueId()); | ||
setFieldArrayState(fieldArray2, { | ||
initialItems, | ||
items: initialItems, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
} | ||
}); | ||
} | ||
@@ -835,2 +900,3 @@ fieldArray.setItems((prevItems) => { | ||
form.internal.setDirty(true); | ||
validateIfNecessary(form, name, { on: "input" }); | ||
} | ||
@@ -842,6 +908,6 @@ }); | ||
// src/methods/move.ts | ||
var import_solid_js20 = require("solid-js"); | ||
var import_solid_js22 = require("solid-js"); | ||
function move(form, name, options) { | ||
(0, import_solid_js20.batch)(() => { | ||
(0, import_solid_js20.untrack)(() => { | ||
(0, import_solid_js22.batch)(() => { | ||
(0, import_solid_js22.untrack)(() => { | ||
const { from: fromIndex, to: toIndex } = options; | ||
@@ -851,40 +917,94 @@ const fieldArray = getFieldArray(form, name); | ||
if (fromIndex >= 0 && fromIndex <= lastIndex && toIndex >= 0 && toIndex <= lastIndex && fromIndex !== toIndex) { | ||
const fieldNames = form.internal.getFieldNames().filter((fieldName) => { | ||
if (fieldName.startsWith(name)) { | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const filterName = (value2) => { | ||
if (value2.startsWith(name)) { | ||
const fieldIndex = getPathIndex(name, value2); | ||
return fieldIndex >= fromIndex && fieldIndex <= toIndex || fieldIndex <= fromIndex && fieldIndex >= toIndex; | ||
} | ||
}); | ||
}; | ||
const fieldNames = form.internal.getFieldNames().filter(filterName).sort(); | ||
const fieldArrayNames = form.internal.getFieldArrayNames().filter(filterName).sort(); | ||
if (fromIndex > toIndex) { | ||
fieldNames.reverse(); | ||
fieldArrayNames.reverse(); | ||
} | ||
const fieldStateMap = /* @__PURE__ */ new Map(); | ||
const fieldArrayStateMap = /* @__PURE__ */ new Map(); | ||
fieldNames.forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const fieldIndex = getPathIndex(name, fieldName); | ||
if (fieldIndex === fromIndex) { | ||
fieldStateMap.set(fieldName, getFieldState(field)); | ||
} else { | ||
setFieldState( | ||
getField( | ||
form, | ||
fieldName.replace( | ||
`${name}.${fieldIndex}`, | ||
fromIndex < toIndex ? `${name}.${fieldIndex - 1}` : `${name}.${fieldIndex + 1}` | ||
) | ||
), | ||
getFieldState(field) | ||
); | ||
} | ||
if (fieldIndex === toIndex) { | ||
setFieldState( | ||
field, | ||
fieldStateMap.get( | ||
fieldName.replace(`${name}.${toIndex}`, `${name}.${fromIndex}`) | ||
setFieldState(field, { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldStateMap.forEach((fieldState, fieldName) => { | ||
setFieldState( | ||
getField( | ||
form, | ||
fieldName.replace( | ||
`${name}.${fromIndex}`, | ||
`${name}.${toIndex}` | ||
) | ||
), | ||
fieldState | ||
); | ||
}); | ||
fieldArrayNames.forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
const fieldArrayIndex = getPathIndex(name, fieldArrayName); | ||
if (fieldArrayIndex === fromIndex) { | ||
fieldArrayStateMap.set( | ||
fieldArrayName, | ||
getFieldArrayState(fieldArray2) | ||
); | ||
} else { | ||
setFieldState( | ||
field, | ||
getFieldState( | ||
getField( | ||
form, | ||
fieldName.replace( | ||
`${name}.${fieldIndex}`, | ||
fromIndex < toIndex ? `${name}.${fieldIndex + 1}` : `${name}.${fieldIndex - 1}` | ||
) | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fieldArrayIndex}`, | ||
fromIndex < toIndex ? `${name}.${fieldArrayIndex - 1}` : `${name}.${fieldArrayIndex + 1}` | ||
) | ||
) | ||
), | ||
getFieldArrayState(fieldArray2) | ||
); | ||
} | ||
setFieldArrayState(fieldArray2, { | ||
initialItems: [], | ||
items: [], | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldArrayStateMap.forEach((fieldArrayState, fieldArrayName) => { | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fromIndex}`, | ||
`${name}.${toIndex}` | ||
) | ||
), | ||
fieldArrayState | ||
); | ||
}); | ||
fieldArray.setItems((prevItems) => { | ||
@@ -904,14 +1024,14 @@ const nextItems = [...prevItems]; | ||
// src/methods/remove.ts | ||
var import_solid_js21 = require("solid-js"); | ||
var import_solid_js23 = require("solid-js"); | ||
function remove(form, name, options) { | ||
const { at: index } = options; | ||
(0, import_solid_js21.batch)(() => { | ||
(0, import_solid_js21.untrack)(() => { | ||
(0, import_solid_js23.batch)(() => { | ||
(0, import_solid_js23.untrack)(() => { | ||
const fieldArray = getFieldArray(form, name); | ||
const lastIndex = fieldArray.getItems().length - 1; | ||
if (index >= 0 && index <= lastIndex) { | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(name) && getFieldIndex(name, fieldName) >= index | ||
).forEach((fieldName) => { | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const filterName = (value2) => value2.startsWith(`${name}.`) && getPathIndex(name, value2) >= index; | ||
form.internal.getFieldNames().filter(filterName).sort().forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
const fieldIndex = getPathIndex(name, fieldName); | ||
if (fieldIndex > index) { | ||
@@ -926,15 +1046,36 @@ setFieldState( | ||
), | ||
getFieldState(getField(form, fieldName)) | ||
getFieldState(field) | ||
); | ||
} | ||
if (fieldIndex === lastIndex) { | ||
setFieldState(getField(form, fieldName), { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
setFieldState(field, { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).sort().forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
const fieldArrayIndex = getPathIndex(name, fieldArrayName); | ||
if (fieldArrayIndex > index) { | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fieldArrayIndex}`, | ||
`${name}.${fieldArrayIndex - 1}` | ||
) | ||
), | ||
getFieldArrayState(fieldArray2) | ||
); | ||
} | ||
setFieldArrayState(fieldArray2, { | ||
initialItems: [], | ||
items: [], | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
@@ -949,2 +1090,3 @@ fieldArray.setItems((prevItems) => { | ||
updateFieldArrayDirty(form, fieldArray); | ||
validateIfNecessary(form, name, { on: "input" }); | ||
} | ||
@@ -956,6 +1098,6 @@ }); | ||
// src/methods/replace.ts | ||
var import_solid_js22 = require("solid-js"); | ||
var import_solid_js24 = require("solid-js"); | ||
function replace(form, name, options) { | ||
(0, import_solid_js22.batch)(() => { | ||
(0, import_solid_js22.untrack)(() => { | ||
(0, import_solid_js24.batch)(() => { | ||
(0, import_solid_js24.untrack)(() => { | ||
const { at: index, value: value2 } = options; | ||
@@ -965,8 +1107,7 @@ const fieldArray = getFieldArray(form, name); | ||
if (index >= 0 && index <= lastIndex) { | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(name) && getFieldIndex(name, fieldName) === index | ||
).forEach((fieldName) => { | ||
const filterName = (value3) => value3.startsWith(`${name}.`) && getPathIndex(name, value3) === index; | ||
form.internal.getFieldNames().filter(filterName).forEach((fieldName) => { | ||
const initialInput = getPathValue( | ||
fieldName.replace( | ||
`${name}.${getFieldIndex(name, fieldName)}.`, | ||
new RegExp(`${name}.${getPathIndex(name, fieldName)}.?`), | ||
"" | ||
@@ -985,2 +1126,20 @@ ), | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).forEach((fieldArrayName) => { | ||
const initialItems = (getPathValue( | ||
fieldArrayName.replace( | ||
new RegExp( | ||
`${name}.${getPathIndex(name, fieldArrayName)}.?` | ||
), | ||
"" | ||
), | ||
value2 | ||
) || []).map(() => getUniqueId()); | ||
setFieldArrayState(getFieldArray(form, fieldArrayName), { | ||
initialItems, | ||
items: initialItems, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldArray.setItems((prevItems) => { | ||
@@ -1001,3 +1160,3 @@ const nextItems = [...prevItems]; | ||
// src/methods/reset.ts | ||
var import_solid_js23 = require("solid-js"); | ||
var import_solid_js25 = require("solid-js"); | ||
function reset(form, arg2, arg3) { | ||
@@ -1035,3 +1194,3 @@ let [fieldNames, fieldArrayNames] = getFilteredNames(form, arg2); | ||
} | ||
(0, import_solid_js23.batch)(() => { | ||
(0, import_solid_js25.batch)(() => { | ||
var _a; | ||
@@ -1106,3 +1265,3 @@ fieldNames.forEach((name) => { | ||
// src/methods/setValue.ts | ||
var import_solid_js24 = require("solid-js"); | ||
var import_solid_js26 = require("solid-js"); | ||
function setValue(form, name, value2, options = {}) { | ||
@@ -1114,5 +1273,5 @@ const { | ||
} = options; | ||
(0, import_solid_js24.untrack)(() => { | ||
(0, import_solid_js26.untrack)(() => { | ||
const field = getField(form, name); | ||
(0, import_solid_js24.batch)(() => { | ||
(0, import_solid_js26.batch)(() => { | ||
field.setInput(() => value2); | ||
@@ -1126,4 +1285,7 @@ if (shouldTouched) { | ||
} | ||
if (shouldValidate && (!form.submitted && form.internal.validateOn === "input" || form.submitted && form.internal.revalidateOn === "input")) { | ||
validate(form, name); | ||
if (shouldValidate) { | ||
validateIfNecessary(form, name, { | ||
on: "input", | ||
shouldFocus: true | ||
}); | ||
} | ||
@@ -1135,6 +1297,6 @@ }); | ||
// src/methods/swap.ts | ||
var import_solid_js25 = require("solid-js"); | ||
var import_solid_js27 = require("solid-js"); | ||
function swap(form, name, options) { | ||
(0, import_solid_js25.batch)(() => { | ||
(0, import_solid_js25.untrack)(() => { | ||
(0, import_solid_js27.batch)(() => { | ||
(0, import_solid_js27.untrack)(() => { | ||
const { at: index1, and: index2 } = options; | ||
@@ -1144,16 +1306,46 @@ const fieldArray = getFieldArray(form, name); | ||
if (index1 >= 0 && index1 <= lastIndex && index2 >= 0 && index2 <= lastIndex && index1 !== index2) { | ||
const index1Prefix = `${name}.${index1}.`; | ||
const index2Prefix = `${name}.${index2}.`; | ||
const index1Prefix = `${name}.${index1}`; | ||
const index2Prefix = `${name}.${index2}`; | ||
const fieldStateMap = /* @__PURE__ */ new Map(); | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(index1Prefix) || fieldName.startsWith(index2Prefix) | ||
).forEach((fieldName) => { | ||
const fieldArrayStateMap = /* @__PURE__ */ new Map(); | ||
const filterName = (value2) => value2.startsWith(`${name}.`) && [index1, index2].includes(getPathIndex(name, value2)); | ||
const swapIndex = (value2) => value2.startsWith(index1Prefix) ? value2.replace(index1Prefix, index2Prefix) : value2.replace(index2Prefix, index1Prefix); | ||
form.internal.getFieldNames().filter(filterName).forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
fieldStateMap.set(fieldName, getFieldState(field)); | ||
const swapFieldName = fieldName.startsWith(index1Prefix) ? fieldName.replace(index1Prefix, index2Prefix) : fieldName.replace(index2Prefix, index1Prefix); | ||
setFieldState(field, { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldStateMap.forEach((fieldState, fieldName) => { | ||
setFieldState( | ||
field, | ||
fieldStateMap.get(swapFieldName) || getFieldState(getField(form, swapFieldName)) | ||
getField(form, swapIndex(fieldName)), | ||
fieldState | ||
); | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
fieldArrayStateMap.set( | ||
fieldArrayName, | ||
getFieldArrayState(fieldArray2) | ||
); | ||
setFieldArrayState(fieldArray2, { | ||
initialItems: [], | ||
items: [], | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldArrayStateMap.forEach((fieldArrayState, fieldArrayName) => { | ||
setFieldArrayState( | ||
getFieldArray(form, swapIndex(fieldArrayName)), | ||
fieldArrayState | ||
); | ||
}); | ||
fieldArray.setItems((prevItems) => { | ||
@@ -1174,3 +1366,3 @@ const nextItems = [...prevItems]; | ||
// src/primitives/useField.ts | ||
var import_solid_js26 = require("solid-js"); | ||
var import_solid_js28 = require("solid-js"); | ||
function useField(form, name, options = {}) { | ||
@@ -1181,3 +1373,3 @@ const { initialValue, keepActive = false, keepState = true } = options; | ||
const consumer = getUniqueId(); | ||
(0, import_solid_js26.batch)(() => { | ||
(0, import_solid_js28.batch)(() => { | ||
field = getField(form, name, { initialValue, validate: validate2 }); | ||
@@ -1190,11 +1382,12 @@ field.consumers.add(consumer); | ||
} | ||
if (!(0, import_solid_js26.untrack)(field.getActive)) { | ||
if (!(0, import_solid_js28.untrack)(field.getActive)) { | ||
field.setActive(true); | ||
validateIfNecessary(form, name, { on: "input" }); | ||
updateState(form); | ||
} | ||
}); | ||
(0, import_solid_js26.onCleanup)(() => { | ||
(0, import_solid_js28.onCleanup)(() => { | ||
field.consumers.delete(consumer); | ||
if (!keepActive && !field.consumers.size) { | ||
(0, import_solid_js26.batch)(() => { | ||
(0, import_solid_js28.batch)(() => { | ||
field.setActive(false); | ||
@@ -1218,6 +1411,6 @@ if (!keepState) { | ||
ref(element) { | ||
(0, import_solid_js26.batch)(() => { | ||
(0, import_solid_js28.batch)(() => { | ||
field.setElements((elements) => [...elements, element]); | ||
(0, import_solid_js26.createEffect)(() => { | ||
if (field.getInitialInput() === void 0 && (0, import_solid_js26.untrack)(field.getInput) === void 0) { | ||
(0, import_solid_js28.createEffect)(() => { | ||
if (field.getInitialInput() === void 0 && (0, import_solid_js28.untrack)(field.getInput) === void 0) { | ||
const input = getElementInput(element, field); | ||
@@ -1239,5 +1432,3 @@ field.setInitialInput(() => input); | ||
onChange() { | ||
if (!form.submitted && form.internal.validateOn === "change" || form.submitted && form.internal.revalidateOn === "change") { | ||
validate(form, name); | ||
} | ||
validateIfNecessary(form, name, { on: "change" }); | ||
}, | ||
@@ -1254,3 +1445,3 @@ onBlur(event) { | ||
} else { | ||
(0, import_solid_js26.batch)(() => { | ||
(0, import_solid_js28.batch)(() => { | ||
field.setTouched(true); | ||
@@ -1282,3 +1473,3 @@ form.internal.setTouched(true); | ||
// src/primitives/useFieldArray.ts | ||
var import_solid_js27 = require("solid-js"); | ||
var import_solid_js29 = require("solid-js"); | ||
function useFieldArray(form, name, options = {}) { | ||
@@ -1291,6 +1482,6 @@ const { keepActive = false, keepState = true } = options; | ||
fieldArray.setActive(true); | ||
(0, import_solid_js27.onCleanup)(() => { | ||
(0, import_solid_js29.onCleanup)(() => { | ||
fieldArray.consumers.delete(consumer); | ||
if (!keepActive && !fieldArray.consumers.size) { | ||
(0, import_solid_js27.batch)(() => { | ||
(0, import_solid_js29.batch)(() => { | ||
fieldArray.setActive(false); | ||
@@ -1328,3 +1519,3 @@ if (!keepState) { | ||
function Field(props) { | ||
const [local, options] = (0, import_solid_js28.splitProps)(props, ["of", "name", "children"]); | ||
const [local, options] = (0, import_solid_js30.splitProps)(props, ["of", "name", "children"]); | ||
return <>{local.children(useField(local.of, local.name, options))}</>; | ||
@@ -1334,5 +1525,5 @@ } | ||
// src/components/FieldArray.tsx | ||
var import_solid_js29 = require("solid-js"); | ||
var import_solid_js31 = require("solid-js"); | ||
function FieldArray(props) { | ||
const [local, options] = (0, import_solid_js29.splitProps)(props, ["of", "name", "children"]); | ||
const [local, options] = (0, import_solid_js31.splitProps)(props, ["of", "name", "children"]); | ||
return <>{local.children(useFieldArray(local.of, local.name, options))}</>; | ||
@@ -1342,5 +1533,5 @@ } | ||
// src/components/Form.tsx | ||
var import_solid_js30 = require("solid-js"); | ||
var import_solid_js32 = require("solid-js"); | ||
function Form(props) { | ||
const [local, options, others] = (0, import_solid_js30.splitProps)( | ||
const [local, options, others] = (0, import_solid_js32.splitProps)( | ||
props, | ||
@@ -1361,4 +1552,4 @@ ["of", "onSubmit", "children"], | ||
function custom(requirement, error) { | ||
return async (fieldValue) => { | ||
const result = await requirement(fieldValue); | ||
return async (value2) => { | ||
const result = await requirement(value2); | ||
return !result ? error : ""; | ||
@@ -1370,4 +1561,4 @@ }; | ||
function email(error) { | ||
return (fieldValue) => !/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test( | ||
fieldValue || "" | ||
return (value2) => !/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test( | ||
value2 || "" | ||
) ? error : ""; | ||
@@ -1378,3 +1569,3 @@ } | ||
function maxFiles(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) > requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) > requirement ? error : ""; | ||
} | ||
@@ -1384,3 +1575,3 @@ | ||
function maxLength(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) > requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) > requirement ? error : ""; | ||
} | ||
@@ -1390,3 +1581,3 @@ | ||
function maxNumber(requirement, error) { | ||
return (fieldValue) => (fieldValue || 0) > requirement ? error : ""; | ||
return (value2) => (value2 || 0) > requirement ? error : ""; | ||
} | ||
@@ -1396,3 +1587,3 @@ | ||
function maxRange(requirement, error) { | ||
return (fieldValue) => fieldValue || "" > requirement ? error : ""; | ||
return (value2) => value2 || "" > requirement ? error : ""; | ||
} | ||
@@ -1402,3 +1593,3 @@ | ||
function maxSize(requirement, error) { | ||
return (fieldValue) => !!fieldValue && (fieldValue instanceof FileList ? [...fieldValue].some((file) => file.size > requirement) : fieldValue.size > requirement) ? error : ""; | ||
return (value2) => !!value2 && (value2 instanceof FileList ? [...value2].some((file) => file.size > requirement) : value2.size > requirement) ? error : ""; | ||
} | ||
@@ -1408,3 +1599,3 @@ | ||
function maxTotalSize(requirement, error) { | ||
return (fieldValue) => [...fieldValue || []].reduce((size, file) => size + file.size, 0) > requirement ? error : ""; | ||
return (value2) => [...value2 || []].reduce((size, file) => size + file.size, 0) > requirement ? error : ""; | ||
} | ||
@@ -1415,3 +1606,3 @@ | ||
const mimeTypes = typeof requirement === "string" ? [requirement] : requirement; | ||
return (fieldValue) => !!fieldValue && (fieldValue instanceof FileList ? [...fieldValue].some((file) => !mimeTypes.includes(file.type)) : !mimeTypes.includes(fieldValue.type)) ? error : ""; | ||
return (value2) => !!value2 && (value2 instanceof FileList ? [...value2].some((file) => !mimeTypes.includes(file.type)) : !mimeTypes.includes(value2.type)) ? error : ""; | ||
} | ||
@@ -1421,3 +1612,3 @@ | ||
function minFiles(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) < requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) < requirement ? error : ""; | ||
} | ||
@@ -1427,3 +1618,3 @@ | ||
function minLength(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) < requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) < requirement ? error : ""; | ||
} | ||
@@ -1433,3 +1624,3 @@ | ||
function minNumber(requirement, error) { | ||
return (fieldValue) => (fieldValue || 0) < requirement ? error : ""; | ||
return (value2) => (value2 || 0) < requirement ? error : ""; | ||
} | ||
@@ -1439,3 +1630,3 @@ | ||
function minRange(requirement, error) { | ||
return (fieldValue) => fieldValue || "" < requirement ? error : ""; | ||
return (value2) => value2 || "" < requirement ? error : ""; | ||
} | ||
@@ -1445,3 +1636,3 @@ | ||
function minSize(requirement, error) { | ||
return (fieldValue) => !!fieldValue && (fieldValue instanceof FileList ? [...fieldValue].some((file) => file.size < requirement) : fieldValue.size < requirement) ? error : ""; | ||
return (value2) => !!value2 && (value2 instanceof FileList ? [...value2].some((file) => file.size < requirement) : value2.size < requirement) ? error : ""; | ||
} | ||
@@ -1451,3 +1642,3 @@ | ||
function minTotalSize(requirement, error) { | ||
return (fieldValue) => [...fieldValue || []].reduce((size, file) => size + file.size, 0) < requirement ? error : ""; | ||
return (value2) => [...value2 || []].reduce((size, file) => size + file.size, 0) < requirement ? error : ""; | ||
} | ||
@@ -1457,3 +1648,3 @@ | ||
function pattern(requirement, error) { | ||
return (fieldValue) => !requirement.test(fieldValue || "") ? error : ""; | ||
return (value2) => !requirement.test(value2 || "") ? error : ""; | ||
} | ||
@@ -1463,3 +1654,3 @@ | ||
function required(error) { | ||
return (fieldValue) => fieldValue instanceof FileList && !fieldValue.length || !fieldValue ? error : ""; | ||
return (value2) => !value2 || (value2 instanceof FileList || Array.isArray(value2)) && !value2.length ? error : ""; | ||
} | ||
@@ -1469,5 +1660,5 @@ | ||
function url(error) { | ||
return (fieldValue) => { | ||
return (value2) => { | ||
try { | ||
new URL(fieldValue || ""); | ||
new URL(value2 || ""); | ||
return ""; | ||
@@ -1482,3 +1673,3 @@ } catch (_) { | ||
function value(requirement, error) { | ||
return (fieldValue) => fieldValue !== requirement ? error : ""; | ||
return (value2) => value2 !== requirement ? error : ""; | ||
} | ||
@@ -1485,0 +1676,0 @@ // Annotate the CommonJS export names for ESM import in node: |
@@ -53,3 +53,3 @@ import { Accessor, Setter, JSX } from 'solid-js'; | ||
*/ | ||
declare type ArrayPath<K extends string | number, V> = V extends string[] ? `${K}` : V extends FieldValue ? never : V extends FieldValue[] | FieldValues[] ? `${K}` : `${K}.${ArrayPaths<V>}`; | ||
declare type ArrayPath<K extends string | number, V> = V extends Array<any> ? `${K}` | `${K}.${ArrayPaths<V>}` : V extends FieldValues ? `${K}.${ArrayPaths<V>}` : never; | ||
/** | ||
@@ -176,2 +176,12 @@ * Returns all paths of a type that lead to a field array. | ||
}; | ||
/** | ||
* Value type of the internal raw field array state. | ||
*/ | ||
declare type RawFieldArrayState = { | ||
initialItems: number[]; | ||
items: number[]; | ||
error: string; | ||
touched: boolean; | ||
dirty: boolean; | ||
}; | ||
@@ -616,3 +626,3 @@ /** | ||
*/ | ||
declare function custom<TFieldValue extends FieldValue>(requirement: (value: TFieldValue | undefined) => boolean | Promise<boolean>, error: string): (fieldValue: TFieldValue) => Promise<string>; | ||
declare function custom<TFieldValue extends FieldValue>(requirement: (value: TFieldValue | undefined) => boolean | Promise<boolean>, error: string): (value: TFieldValue) => Promise<string>; | ||
@@ -626,3 +636,3 @@ /** | ||
*/ | ||
declare function email(error: string): (fieldValue: string | null | undefined) => string; | ||
declare function email(error: string): (value: string | null | undefined) => string; | ||
@@ -637,3 +647,3 @@ /** | ||
*/ | ||
declare function maxFiles(requirement: number, error: string): (fieldValue: FileList | null | undefined) => string; | ||
declare function maxFiles(requirement: number, error: string): (value: FileList | null | undefined) => string; | ||
@@ -648,3 +658,3 @@ /** | ||
*/ | ||
declare function maxLength(requirement: number, error: string): (fieldValue: string | string[] | number[] | null | undefined) => string; | ||
declare function maxLength(requirement: number, error: string): (value: string | string[] | number[] | null | undefined) => string; | ||
@@ -659,3 +669,3 @@ /** | ||
*/ | ||
declare function maxNumber(requirement: number, error: string): (fieldValue: number | null | undefined) => string; | ||
declare function maxNumber(requirement: number, error: string): (value: number | null | undefined) => string; | ||
@@ -670,3 +680,3 @@ /** | ||
*/ | ||
declare function maxRange(requirement: string, error: string): (fieldValue: string | null | undefined) => string; | ||
declare function maxRange(requirement: string, error: string): (value: string | null | undefined) => string; | ||
@@ -681,3 +691,3 @@ /** | ||
*/ | ||
declare function maxSize(requirement: number, error: string): (fieldValue: File | FileList | null | undefined) => string; | ||
declare function maxSize(requirement: number, error: string): (value: File | FileList | null | undefined) => string; | ||
@@ -692,3 +702,3 @@ /** | ||
*/ | ||
declare function maxTotalSize(requirement: number, error: string): (fieldValue: FileList | null | undefined) => string; | ||
declare function maxTotalSize(requirement: number, error: string): (value: FileList | null | undefined) => string; | ||
@@ -703,3 +713,3 @@ /** | ||
*/ | ||
declare function mimeType(requirement: string | string[], error: string): (fieldValue: File | FileList | null | undefined) => string; | ||
declare function mimeType(requirement: string | string[], error: string): (value: File | FileList | null | undefined) => string; | ||
@@ -714,3 +724,3 @@ /** | ||
*/ | ||
declare function minFiles(requirement: number, error: string): (fieldValue: FileList | null | undefined) => string; | ||
declare function minFiles(requirement: number, error: string): (value: FileList | null | undefined) => string; | ||
@@ -725,3 +735,3 @@ /** | ||
*/ | ||
declare function minLength(requirement: number, error: string): (fieldValue: string | string[] | number[] | null | undefined) => string; | ||
declare function minLength(requirement: number, error: string): (value: string | string[] | number[] | null | undefined) => string; | ||
@@ -736,3 +746,3 @@ /** | ||
*/ | ||
declare function minNumber(requirement: number, error: string): (fieldValue: number | null | undefined) => string; | ||
declare function minNumber(requirement: number, error: string): (value: number | null | undefined) => string; | ||
@@ -747,3 +757,3 @@ /** | ||
*/ | ||
declare function minRange(requirement: string, error: string): (fieldValue: string | null | undefined) => string; | ||
declare function minRange(requirement: string, error: string): (value: string | null | undefined) => string; | ||
@@ -758,3 +768,3 @@ /** | ||
*/ | ||
declare function minSize(requirement: number, error: string): (fieldValue: File | FileList | null | undefined) => string; | ||
declare function minSize(requirement: number, error: string): (value: File | FileList | null | undefined) => string; | ||
@@ -769,3 +779,3 @@ /** | ||
*/ | ||
declare function minTotalSize(requirement: number, error: string): (fieldValue: FileList | null | undefined) => string; | ||
declare function minTotalSize(requirement: number, error: string): (value: FileList | null | undefined) => string; | ||
@@ -780,3 +790,3 @@ /** | ||
*/ | ||
declare function pattern(requirement: RegExp, error: string): (fieldValue: string | null | undefined) => string; | ||
declare function pattern(requirement: RegExp, error: string): (value: string | null | undefined) => string; | ||
@@ -790,3 +800,3 @@ /** | ||
*/ | ||
declare function required<TFieldValue extends FieldValue>(error: string): (fieldValue: TFieldValue) => string; | ||
declare function required<TFieldValue extends FieldValue>(error: string): (value: TFieldValue | number[]) => string; | ||
@@ -800,3 +810,3 @@ /** | ||
*/ | ||
declare function url(error: string): (fieldValue: string | null | undefined) => string; | ||
declare function url(error: string): (value: string | null | undefined) => string; | ||
@@ -811,4 +821,4 @@ /** | ||
*/ | ||
declare function value<TFieldValue extends FieldValue>(requirement: FieldValue, error: string): (fieldValue: TFieldValue) => string; | ||
declare function value<TFieldValue extends FieldValue>(requirement: FieldValue, error: string): (value: TFieldValue) => string; | ||
export { ArrayKey, DeepPartial, Field, FieldArray, FieldArrayPath, FieldArrayPathValue, FieldArrayState, FieldArrayStore, FieldElement, FieldPath, FieldPathValue, FieldState, FieldStore, FieldValue, FieldValues, Form, FormState, IsTuple, Maybe, RawFieldState, Response, TupleKeys, ValidateField, ValidateFieldArray, ValidationMode, clearError, clearResponse, createForm, custom, email, focus, getArrayValues, getError, getValue, getValues, handleSubmit, hasField, hasFieldArray, insert, maxFiles, maxLength, maxNumber, maxRange, maxSize, maxTotalSize, mimeType, minFiles, minLength, minNumber, minRange, minSize, minTotalSize, move, pattern, remove, replace, required, reset, setError, setResponse, setValue, swap, url, useField, useFieldArray, validate, value }; | ||
export { ArrayKey, DeepPartial, Field, FieldArray, FieldArrayPath, FieldArrayPathValue, FieldArrayState, FieldArrayStore, FieldElement, FieldPath, FieldPathValue, FieldState, FieldStore, FieldValue, FieldValues, Form, FormState, IsTuple, Maybe, RawFieldArrayState, RawFieldState, Response, TupleKeys, ValidateField, ValidateFieldArray, ValidationMode, clearError, clearResponse, createForm, custom, email, focus, getArrayValues, getError, getValue, getValues, handleSubmit, hasField, hasFieldArray, insert, maxFiles, maxLength, maxNumber, maxRange, maxSize, maxTotalSize, mimeType, minFiles, minLength, minNumber, minRange, minSize, minTotalSize, move, pattern, remove, replace, required, reset, setError, setResponse, setValue, swap, url, useField, useFieldArray, validate, value }; |
@@ -78,3 +78,3 @@ // src/components/Field.tsx | ||
// src/methods/setError.ts | ||
import { batch as batch5, untrack as untrack9 } from "solid-js"; | ||
import { batch as batch5, untrack as untrack11 } from "solid-js"; | ||
@@ -95,3 +95,3 @@ // src/utils/getElementInput.ts | ||
function getPathValue(path, object) { | ||
return path.split(".").reduce((value2, key) => value2 == null ? void 0 : value2[key], object); | ||
return path && object ? path.split(".").reduce((value2, key) => value2 == null ? void 0 : value2[key], object) : object; | ||
} | ||
@@ -204,11 +204,18 @@ | ||
// src/utils/getFieldIndex.ts | ||
function getFieldIndex(pr\u00E4fix, name) { | ||
return +name.replace(`${pr\u00E4fix}.`, "").split(".")[0]; | ||
// src/utils/getFieldArrayState.ts | ||
import { untrack as untrack2 } from "solid-js"; | ||
function getFieldArrayState(field) { | ||
return untrack2(() => ({ | ||
initialItems: field.getInitialItems(), | ||
items: field.getItems(), | ||
error: field.getError(), | ||
touched: field.getTouched(), | ||
dirty: field.getDirty() | ||
})); | ||
} | ||
// src/utils/getFieldState.ts | ||
import { untrack as untrack2 } from "solid-js"; | ||
import { untrack as untrack3 } from "solid-js"; | ||
function getFieldState(field) { | ||
return untrack2(() => ({ | ||
return untrack3(() => ({ | ||
elements: field.getElements(), | ||
@@ -248,6 +255,6 @@ initialInput: field.getInitialInput(), | ||
// src/utils/getFilteredNames.ts | ||
import { untrack as untrack3 } from "solid-js"; | ||
import { untrack as untrack4 } from "solid-js"; | ||
function getFilteredNames(form, arg2) { | ||
const allFieldNames = untrack3(form.internal.getFieldNames); | ||
const allFieldArrayNames = untrack3( | ||
const allFieldNames = untrack4(form.internal.getFieldNames); | ||
const allFieldArrayNames = untrack4( | ||
form.internal.getFieldArrayNames | ||
@@ -286,2 +293,7 @@ ); | ||
// src/utils/getPathIndex.ts | ||
function getPathIndex(name, path) { | ||
return +path.replace(`${name}.`, "").split(".")[0]; | ||
} | ||
// src/utils/getValidateList.ts | ||
@@ -309,2 +321,11 @@ function getValidateList(validate2) { | ||
// src/utils/setFieldArrayState.ts | ||
function setFieldArrayState(fieldArray, state) { | ||
fieldArray.setInitialItems(state.initialItems); | ||
fieldArray.setItems(state.items); | ||
fieldArray.setError(state.error); | ||
fieldArray.setTouched(state.touched); | ||
fieldArray.setDirty(state.dirty); | ||
} | ||
// src/utils/setFieldState.ts | ||
@@ -333,5 +354,5 @@ function setFieldState(field, state) { | ||
// src/utils/updateDirty.ts | ||
import { untrack as untrack4 } from "solid-js"; | ||
import { untrack as untrack5 } from "solid-js"; | ||
function updateDirty(form, dirty) { | ||
untrack4(() => { | ||
untrack5(() => { | ||
form.internal.setDirty( | ||
@@ -346,5 +367,5 @@ dirty || [...form.internal.fields, ...form.internal.fieldArrays].some( | ||
// src/utils/updateFieldDirty.ts | ||
import { batch, untrack as untrack5 } from "solid-js"; | ||
import { batch, untrack as untrack6 } from "solid-js"; | ||
function updateFieldDirty(form, field) { | ||
untrack5(() => { | ||
untrack6(() => { | ||
const initialInput = field.getInitialInput(); | ||
@@ -362,2 +383,15 @@ const input = field.getInput(); | ||
import { batch as batch2 } from "solid-js"; | ||
// src/utils/validateIfNecessary.ts | ||
import { untrack as untrack7 } from "solid-js"; | ||
function validateIfNecessary(form, name, options) { | ||
untrack7(() => { | ||
const { on: mode, shouldFocus = false } = options; | ||
if (!form.submitted && form.internal.validateOn === mode || form.submitted && form.internal.revalidateOn === mode) { | ||
validate(form, name, { shouldFocus }); | ||
} | ||
}); | ||
} | ||
// src/utils/updateFieldInput.ts | ||
function updateFieldInput(form, field, name, input) { | ||
@@ -369,5 +403,3 @@ batch2(() => { | ||
updateFieldDirty(form, field); | ||
if (!form.submitted && form.internal.validateOn === "input" || form.submitted && form.internal.revalidateOn === "input") { | ||
validate(form, name); | ||
} | ||
validateIfNecessary(form, name, { on: "input" }); | ||
}); | ||
@@ -377,5 +409,5 @@ } | ||
// src/utils/updateFieldArrayDirty.ts | ||
import { batch as batch3, untrack as untrack6 } from "solid-js"; | ||
import { batch as batch3, untrack as untrack8 } from "solid-js"; | ||
function updateFieldArrayDirty(form, fieldArray) { | ||
untrack6(() => { | ||
untrack8(() => { | ||
const dirty = fieldArray.getInitialItems().join() !== fieldArray.getItems().join(); | ||
@@ -390,6 +422,6 @@ batch3(() => { | ||
// src/utils/updateState.ts | ||
import { batch as batch4, untrack as untrack7 } from "solid-js"; | ||
import { batch as batch4, untrack as untrack9 } from "solid-js"; | ||
function updateState(form) { | ||
let touched = false, dirty = false, invalid = false; | ||
untrack7(() => { | ||
untrack9(() => { | ||
for (const [, fieldOrFieldArray] of [ | ||
@@ -423,5 +455,5 @@ ...form.internal.fields, | ||
// src/methods/focus.ts | ||
import { untrack as untrack8 } from "solid-js"; | ||
import { untrack as untrack10 } from "solid-js"; | ||
function focus(form, name) { | ||
untrack8(() => { | ||
untrack10(() => { | ||
var _a, _b; | ||
@@ -438,3 +470,3 @@ return (_b = (_a = form.internal.fields.get(name)) == null ? void 0 : _a.getElements()[0]) == null ? void 0 : _b.focus(); | ||
batch5(() => { | ||
untrack9(() => { | ||
untrack11(() => { | ||
fieldOrFieldArray.setError(error); | ||
@@ -464,3 +496,3 @@ form.internal.setInvalid( | ||
// src/methods/getArrayValues.ts | ||
import { untrack as untrack10 } from "solid-js"; | ||
import { untrack as untrack12 } from "solid-js"; | ||
function getArrayValues(form, name, options = {}) { | ||
@@ -474,3 +506,3 @@ const { | ||
getFieldArray(form, name).getItems(); | ||
const fieldNames = untrack10(form.internal.getFieldNames).filter( | ||
const fieldNames = untrack12(form.internal.getFieldNames).filter( | ||
(fieldName) => fieldName.startsWith(name) | ||
@@ -542,3 +574,3 @@ ); | ||
// src/methods/validate.ts | ||
import { batch as batch6, untrack as untrack11 } from "solid-js"; | ||
import { batch as batch6, untrack as untrack13 } from "solid-js"; | ||
async function validate(form, arg2, arg3) { | ||
@@ -552,3 +584,3 @@ const [fieldNames, fieldArrayNames] = getFilteredNames(form, arg2); | ||
await batch6(async () => { | ||
await untrack11(async () => { | ||
await untrack13(async () => { | ||
await Promise.all( | ||
@@ -685,6 +717,6 @@ fieldNames.map(async (name) => { | ||
// src/methods/insert.ts | ||
import { batch as batch8, untrack as untrack12 } from "solid-js"; | ||
import { batch as batch8, untrack as untrack14 } from "solid-js"; | ||
function insert(form, name, options = {}) { | ||
batch8(() => { | ||
untrack12(() => { | ||
untrack14(() => { | ||
const fieldArray = getFieldArray(form, name); | ||
@@ -701,3 +733,3 @@ const arrayLength = fieldArray.getItems().length; | ||
form, | ||
`${name}.${index}${path && `.${path}`}` | ||
`${name}.${index}${path ? `.${path}` : ""}` | ||
), | ||
@@ -716,6 +748,6 @@ { | ||
} else { | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(name) && getFieldIndex(name, fieldName) >= index | ||
).reverse().forEach((fieldName) => { | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const filterName = (value3) => value3.startsWith(`${name}.`) && getPathIndex(name, value3) >= index; | ||
form.internal.getFieldNames().filter(filterName).sort().reverse().forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
const fieldIndex = getPathIndex(name, fieldName); | ||
setFieldState( | ||
@@ -729,10 +761,13 @@ getField( | ||
), | ||
getFieldState(getField(form, fieldName)) | ||
getFieldState(field) | ||
); | ||
if (fieldIndex === index) { | ||
const initialInput = getPathValue( | ||
fieldName.replace(`${name}.${fieldIndex}.`, ""), | ||
fieldName.replace( | ||
new RegExp(`${name}.${fieldIndex}.?`), | ||
"" | ||
), | ||
value2 | ||
); | ||
setFieldState(getField(form, fieldName), { | ||
setFieldState(field, { | ||
elements: [], | ||
@@ -747,2 +782,32 @@ initialInput, | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).sort().reverse().forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
const fieldArrayIndex = getPathIndex(name, fieldArrayName); | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fieldArrayIndex}`, | ||
`${name}.${fieldArrayIndex + 1}` | ||
) | ||
), | ||
getFieldArrayState(fieldArray2) | ||
); | ||
if (fieldArrayIndex === index) { | ||
const initialItems = (getPathValue( | ||
fieldArrayName.replace( | ||
new RegExp(`${name}.${fieldArrayIndex}.?`), | ||
"" | ||
), | ||
value2 | ||
) || []).map(() => getUniqueId()); | ||
setFieldArrayState(fieldArray2, { | ||
initialItems, | ||
items: initialItems, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
} | ||
}); | ||
} | ||
@@ -758,2 +823,3 @@ fieldArray.setItems((prevItems) => { | ||
form.internal.setDirty(true); | ||
validateIfNecessary(form, name, { on: "input" }); | ||
} | ||
@@ -765,6 +831,6 @@ }); | ||
// src/methods/move.ts | ||
import { batch as batch9, untrack as untrack13 } from "solid-js"; | ||
import { batch as batch9, untrack as untrack15 } from "solid-js"; | ||
function move(form, name, options) { | ||
batch9(() => { | ||
untrack13(() => { | ||
untrack15(() => { | ||
const { from: fromIndex, to: toIndex } = options; | ||
@@ -774,40 +840,94 @@ const fieldArray = getFieldArray(form, name); | ||
if (fromIndex >= 0 && fromIndex <= lastIndex && toIndex >= 0 && toIndex <= lastIndex && fromIndex !== toIndex) { | ||
const fieldNames = form.internal.getFieldNames().filter((fieldName) => { | ||
if (fieldName.startsWith(name)) { | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const filterName = (value2) => { | ||
if (value2.startsWith(name)) { | ||
const fieldIndex = getPathIndex(name, value2); | ||
return fieldIndex >= fromIndex && fieldIndex <= toIndex || fieldIndex <= fromIndex && fieldIndex >= toIndex; | ||
} | ||
}); | ||
}; | ||
const fieldNames = form.internal.getFieldNames().filter(filterName).sort(); | ||
const fieldArrayNames = form.internal.getFieldArrayNames().filter(filterName).sort(); | ||
if (fromIndex > toIndex) { | ||
fieldNames.reverse(); | ||
fieldArrayNames.reverse(); | ||
} | ||
const fieldStateMap = /* @__PURE__ */ new Map(); | ||
const fieldArrayStateMap = /* @__PURE__ */ new Map(); | ||
fieldNames.forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const fieldIndex = getPathIndex(name, fieldName); | ||
if (fieldIndex === fromIndex) { | ||
fieldStateMap.set(fieldName, getFieldState(field)); | ||
} else { | ||
setFieldState( | ||
getField( | ||
form, | ||
fieldName.replace( | ||
`${name}.${fieldIndex}`, | ||
fromIndex < toIndex ? `${name}.${fieldIndex - 1}` : `${name}.${fieldIndex + 1}` | ||
) | ||
), | ||
getFieldState(field) | ||
); | ||
} | ||
if (fieldIndex === toIndex) { | ||
setFieldState( | ||
field, | ||
fieldStateMap.get( | ||
fieldName.replace(`${name}.${toIndex}`, `${name}.${fromIndex}`) | ||
setFieldState(field, { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldStateMap.forEach((fieldState, fieldName) => { | ||
setFieldState( | ||
getField( | ||
form, | ||
fieldName.replace( | ||
`${name}.${fromIndex}`, | ||
`${name}.${toIndex}` | ||
) | ||
), | ||
fieldState | ||
); | ||
}); | ||
fieldArrayNames.forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
const fieldArrayIndex = getPathIndex(name, fieldArrayName); | ||
if (fieldArrayIndex === fromIndex) { | ||
fieldArrayStateMap.set( | ||
fieldArrayName, | ||
getFieldArrayState(fieldArray2) | ||
); | ||
} else { | ||
setFieldState( | ||
field, | ||
getFieldState( | ||
getField( | ||
form, | ||
fieldName.replace( | ||
`${name}.${fieldIndex}`, | ||
fromIndex < toIndex ? `${name}.${fieldIndex + 1}` : `${name}.${fieldIndex - 1}` | ||
) | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fieldArrayIndex}`, | ||
fromIndex < toIndex ? `${name}.${fieldArrayIndex - 1}` : `${name}.${fieldArrayIndex + 1}` | ||
) | ||
) | ||
), | ||
getFieldArrayState(fieldArray2) | ||
); | ||
} | ||
setFieldArrayState(fieldArray2, { | ||
initialItems: [], | ||
items: [], | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldArrayStateMap.forEach((fieldArrayState, fieldArrayName) => { | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fromIndex}`, | ||
`${name}.${toIndex}` | ||
) | ||
), | ||
fieldArrayState | ||
); | ||
}); | ||
fieldArray.setItems((prevItems) => { | ||
@@ -827,14 +947,14 @@ const nextItems = [...prevItems]; | ||
// src/methods/remove.ts | ||
import { batch as batch10, untrack as untrack14 } from "solid-js"; | ||
import { batch as batch10, untrack as untrack16 } from "solid-js"; | ||
function remove(form, name, options) { | ||
const { at: index } = options; | ||
batch10(() => { | ||
untrack14(() => { | ||
untrack16(() => { | ||
const fieldArray = getFieldArray(form, name); | ||
const lastIndex = fieldArray.getItems().length - 1; | ||
if (index >= 0 && index <= lastIndex) { | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(name) && getFieldIndex(name, fieldName) >= index | ||
).forEach((fieldName) => { | ||
const fieldIndex = getFieldIndex(name, fieldName); | ||
const filterName = (value2) => value2.startsWith(`${name}.`) && getPathIndex(name, value2) >= index; | ||
form.internal.getFieldNames().filter(filterName).sort().forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
const fieldIndex = getPathIndex(name, fieldName); | ||
if (fieldIndex > index) { | ||
@@ -849,15 +969,36 @@ setFieldState( | ||
), | ||
getFieldState(getField(form, fieldName)) | ||
getFieldState(field) | ||
); | ||
} | ||
if (fieldIndex === lastIndex) { | ||
setFieldState(getField(form, fieldName), { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
setFieldState(field, { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).sort().forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
const fieldArrayIndex = getPathIndex(name, fieldArrayName); | ||
if (fieldArrayIndex > index) { | ||
setFieldArrayState( | ||
getFieldArray( | ||
form, | ||
fieldArrayName.replace( | ||
`${name}.${fieldArrayIndex}`, | ||
`${name}.${fieldArrayIndex - 1}` | ||
) | ||
), | ||
getFieldArrayState(fieldArray2) | ||
); | ||
} | ||
setFieldArrayState(fieldArray2, { | ||
initialItems: [], | ||
items: [], | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
@@ -872,2 +1013,3 @@ fieldArray.setItems((prevItems) => { | ||
updateFieldArrayDirty(form, fieldArray); | ||
validateIfNecessary(form, name, { on: "input" }); | ||
} | ||
@@ -879,6 +1021,6 @@ }); | ||
// src/methods/replace.ts | ||
import { batch as batch11, untrack as untrack15 } from "solid-js"; | ||
import { batch as batch11, untrack as untrack17 } from "solid-js"; | ||
function replace(form, name, options) { | ||
batch11(() => { | ||
untrack15(() => { | ||
untrack17(() => { | ||
const { at: index, value: value2 } = options; | ||
@@ -888,8 +1030,7 @@ const fieldArray = getFieldArray(form, name); | ||
if (index >= 0 && index <= lastIndex) { | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(name) && getFieldIndex(name, fieldName) === index | ||
).forEach((fieldName) => { | ||
const filterName = (value3) => value3.startsWith(`${name}.`) && getPathIndex(name, value3) === index; | ||
form.internal.getFieldNames().filter(filterName).forEach((fieldName) => { | ||
const initialInput = getPathValue( | ||
fieldName.replace( | ||
`${name}.${getFieldIndex(name, fieldName)}.`, | ||
new RegExp(`${name}.${getPathIndex(name, fieldName)}.?`), | ||
"" | ||
@@ -908,2 +1049,20 @@ ), | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).forEach((fieldArrayName) => { | ||
const initialItems = (getPathValue( | ||
fieldArrayName.replace( | ||
new RegExp( | ||
`${name}.${getPathIndex(name, fieldArrayName)}.?` | ||
), | ||
"" | ||
), | ||
value2 | ||
) || []).map(() => getUniqueId()); | ||
setFieldArrayState(getFieldArray(form, fieldArrayName), { | ||
initialItems, | ||
items: initialItems, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldArray.setItems((prevItems) => { | ||
@@ -1027,3 +1186,3 @@ const nextItems = [...prevItems]; | ||
// src/methods/setValue.ts | ||
import { batch as batch13, untrack as untrack16 } from "solid-js"; | ||
import { batch as batch13, untrack as untrack18 } from "solid-js"; | ||
function setValue(form, name, value2, options = {}) { | ||
@@ -1035,3 +1194,3 @@ const { | ||
} = options; | ||
untrack16(() => { | ||
untrack18(() => { | ||
const field = getField(form, name); | ||
@@ -1047,4 +1206,7 @@ batch13(() => { | ||
} | ||
if (shouldValidate && (!form.submitted && form.internal.validateOn === "input" || form.submitted && form.internal.revalidateOn === "input")) { | ||
validate(form, name); | ||
if (shouldValidate) { | ||
validateIfNecessary(form, name, { | ||
on: "input", | ||
shouldFocus: true | ||
}); | ||
} | ||
@@ -1056,6 +1218,6 @@ }); | ||
// src/methods/swap.ts | ||
import { batch as batch14, untrack as untrack17 } from "solid-js"; | ||
import { batch as batch14, untrack as untrack19 } from "solid-js"; | ||
function swap(form, name, options) { | ||
batch14(() => { | ||
untrack17(() => { | ||
untrack19(() => { | ||
const { at: index1, and: index2 } = options; | ||
@@ -1065,16 +1227,46 @@ const fieldArray = getFieldArray(form, name); | ||
if (index1 >= 0 && index1 <= lastIndex && index2 >= 0 && index2 <= lastIndex && index1 !== index2) { | ||
const index1Prefix = `${name}.${index1}.`; | ||
const index2Prefix = `${name}.${index2}.`; | ||
const index1Prefix = `${name}.${index1}`; | ||
const index2Prefix = `${name}.${index2}`; | ||
const fieldStateMap = /* @__PURE__ */ new Map(); | ||
form.internal.getFieldNames().filter( | ||
(fieldName) => fieldName.startsWith(index1Prefix) || fieldName.startsWith(index2Prefix) | ||
).forEach((fieldName) => { | ||
const fieldArrayStateMap = /* @__PURE__ */ new Map(); | ||
const filterName = (value2) => value2.startsWith(`${name}.`) && [index1, index2].includes(getPathIndex(name, value2)); | ||
const swapIndex = (value2) => value2.startsWith(index1Prefix) ? value2.replace(index1Prefix, index2Prefix) : value2.replace(index2Prefix, index1Prefix); | ||
form.internal.getFieldNames().filter(filterName).forEach((fieldName) => { | ||
const field = getField(form, fieldName); | ||
fieldStateMap.set(fieldName, getFieldState(field)); | ||
const swapFieldName = fieldName.startsWith(index1Prefix) ? fieldName.replace(index1Prefix, index2Prefix) : fieldName.replace(index2Prefix, index1Prefix); | ||
setFieldState(field, { | ||
elements: [], | ||
initialInput: void 0, | ||
input: void 0, | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldStateMap.forEach((fieldState, fieldName) => { | ||
setFieldState( | ||
field, | ||
fieldStateMap.get(swapFieldName) || getFieldState(getField(form, swapFieldName)) | ||
getField(form, swapIndex(fieldName)), | ||
fieldState | ||
); | ||
}); | ||
form.internal.getFieldArrayNames().filter(filterName).forEach((fieldArrayName) => { | ||
const fieldArray2 = getFieldArray(form, fieldArrayName); | ||
fieldArrayStateMap.set( | ||
fieldArrayName, | ||
getFieldArrayState(fieldArray2) | ||
); | ||
setFieldArrayState(fieldArray2, { | ||
initialItems: [], | ||
items: [], | ||
error: "", | ||
dirty: false, | ||
touched: false | ||
}); | ||
}); | ||
fieldArrayStateMap.forEach((fieldArrayState, fieldArrayName) => { | ||
setFieldArrayState( | ||
getFieldArray(form, swapIndex(fieldArrayName)), | ||
fieldArrayState | ||
); | ||
}); | ||
fieldArray.setItems((prevItems) => { | ||
@@ -1095,3 +1287,3 @@ const nextItems = [...prevItems]; | ||
// src/primitives/useField.ts | ||
import { batch as batch15, createEffect, onCleanup, untrack as untrack18 } from "solid-js"; | ||
import { batch as batch15, createEffect, onCleanup, untrack as untrack20 } from "solid-js"; | ||
function useField(form, name, options = {}) { | ||
@@ -1110,4 +1302,5 @@ const { initialValue, keepActive = false, keepState = true } = options; | ||
} | ||
if (!untrack18(field.getActive)) { | ||
if (!untrack20(field.getActive)) { | ||
field.setActive(true); | ||
validateIfNecessary(form, name, { on: "input" }); | ||
updateState(form); | ||
@@ -1141,3 +1334,3 @@ } | ||
createEffect(() => { | ||
if (field.getInitialInput() === void 0 && untrack18(field.getInput) === void 0) { | ||
if (field.getInitialInput() === void 0 && untrack20(field.getInput) === void 0) { | ||
const input = getElementInput(element, field); | ||
@@ -1159,5 +1352,3 @@ field.setInitialInput(() => input); | ||
onChange() { | ||
if (!form.submitted && form.internal.validateOn === "change" || form.submitted && form.internal.revalidateOn === "change") { | ||
validate(form, name); | ||
} | ||
validateIfNecessary(form, name, { on: "change" }); | ||
}, | ||
@@ -1275,4 +1466,4 @@ onBlur(event) { | ||
function custom(requirement, error) { | ||
return async (fieldValue) => { | ||
const result = await requirement(fieldValue); | ||
return async (value2) => { | ||
const result = await requirement(value2); | ||
return !result ? error : ""; | ||
@@ -1284,4 +1475,4 @@ }; | ||
function email(error) { | ||
return (fieldValue) => !/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test( | ||
fieldValue || "" | ||
return (value2) => !/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test( | ||
value2 || "" | ||
) ? error : ""; | ||
@@ -1292,3 +1483,3 @@ } | ||
function maxFiles(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) > requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) > requirement ? error : ""; | ||
} | ||
@@ -1298,3 +1489,3 @@ | ||
function maxLength(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) > requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) > requirement ? error : ""; | ||
} | ||
@@ -1304,3 +1495,3 @@ | ||
function maxNumber(requirement, error) { | ||
return (fieldValue) => (fieldValue || 0) > requirement ? error : ""; | ||
return (value2) => (value2 || 0) > requirement ? error : ""; | ||
} | ||
@@ -1310,3 +1501,3 @@ | ||
function maxRange(requirement, error) { | ||
return (fieldValue) => fieldValue || "" > requirement ? error : ""; | ||
return (value2) => value2 || "" > requirement ? error : ""; | ||
} | ||
@@ -1316,3 +1507,3 @@ | ||
function maxSize(requirement, error) { | ||
return (fieldValue) => !!fieldValue && (fieldValue instanceof FileList ? [...fieldValue].some((file) => file.size > requirement) : fieldValue.size > requirement) ? error : ""; | ||
return (value2) => !!value2 && (value2 instanceof FileList ? [...value2].some((file) => file.size > requirement) : value2.size > requirement) ? error : ""; | ||
} | ||
@@ -1322,3 +1513,3 @@ | ||
function maxTotalSize(requirement, error) { | ||
return (fieldValue) => [...fieldValue || []].reduce((size, file) => size + file.size, 0) > requirement ? error : ""; | ||
return (value2) => [...value2 || []].reduce((size, file) => size + file.size, 0) > requirement ? error : ""; | ||
} | ||
@@ -1329,3 +1520,3 @@ | ||
const mimeTypes = typeof requirement === "string" ? [requirement] : requirement; | ||
return (fieldValue) => !!fieldValue && (fieldValue instanceof FileList ? [...fieldValue].some((file) => !mimeTypes.includes(file.type)) : !mimeTypes.includes(fieldValue.type)) ? error : ""; | ||
return (value2) => !!value2 && (value2 instanceof FileList ? [...value2].some((file) => !mimeTypes.includes(file.type)) : !mimeTypes.includes(value2.type)) ? error : ""; | ||
} | ||
@@ -1335,3 +1526,3 @@ | ||
function minFiles(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) < requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) < requirement ? error : ""; | ||
} | ||
@@ -1341,3 +1532,3 @@ | ||
function minLength(requirement, error) { | ||
return (fieldValue) => ((fieldValue == null ? void 0 : fieldValue.length) || 0) < requirement ? error : ""; | ||
return (value2) => ((value2 == null ? void 0 : value2.length) || 0) < requirement ? error : ""; | ||
} | ||
@@ -1347,3 +1538,3 @@ | ||
function minNumber(requirement, error) { | ||
return (fieldValue) => (fieldValue || 0) < requirement ? error : ""; | ||
return (value2) => (value2 || 0) < requirement ? error : ""; | ||
} | ||
@@ -1353,3 +1544,3 @@ | ||
function minRange(requirement, error) { | ||
return (fieldValue) => fieldValue || "" < requirement ? error : ""; | ||
return (value2) => value2 || "" < requirement ? error : ""; | ||
} | ||
@@ -1359,3 +1550,3 @@ | ||
function minSize(requirement, error) { | ||
return (fieldValue) => !!fieldValue && (fieldValue instanceof FileList ? [...fieldValue].some((file) => file.size < requirement) : fieldValue.size < requirement) ? error : ""; | ||
return (value2) => !!value2 && (value2 instanceof FileList ? [...value2].some((file) => file.size < requirement) : value2.size < requirement) ? error : ""; | ||
} | ||
@@ -1365,3 +1556,3 @@ | ||
function minTotalSize(requirement, error) { | ||
return (fieldValue) => [...fieldValue || []].reduce((size, file) => size + file.size, 0) < requirement ? error : ""; | ||
return (value2) => [...value2 || []].reduce((size, file) => size + file.size, 0) < requirement ? error : ""; | ||
} | ||
@@ -1371,3 +1562,3 @@ | ||
function pattern(requirement, error) { | ||
return (fieldValue) => !requirement.test(fieldValue || "") ? error : ""; | ||
return (value2) => !requirement.test(value2 || "") ? error : ""; | ||
} | ||
@@ -1377,3 +1568,3 @@ | ||
function required(error) { | ||
return (fieldValue) => fieldValue instanceof FileList && !fieldValue.length || !fieldValue ? error : ""; | ||
return (value2) => !value2 || (value2 instanceof FileList || Array.isArray(value2)) && !value2.length ? error : ""; | ||
} | ||
@@ -1383,5 +1574,5 @@ | ||
function url(error) { | ||
return (fieldValue) => { | ||
return (value2) => { | ||
try { | ||
new URL(fieldValue || ""); | ||
new URL(value2 || ""); | ||
return ""; | ||
@@ -1396,3 +1587,3 @@ } catch (_) { | ||
function value(requirement, error) { | ||
return (fieldValue) => fieldValue !== requirement ? error : ""; | ||
return (value2) => value2 !== requirement ? error : ""; | ||
} | ||
@@ -1399,0 +1590,0 @@ export { |
{ | ||
"name": "@modular-forms/solid", | ||
"description": "The modular form library for SolidJS", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"license": "MIT", | ||
@@ -6,0 +6,0 @@ "author": "Fabian Hiller", |
135797
10.2%3837
11.12%