New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@modular-forms/solid

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@modular-forms/solid - npm Package Compare versions

Comparing version

to
0.7.0

511

dist/index.cjs.jsx

@@ -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",