@conform-to/dom 1.8.1 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/dom.d.ts +1 -0
- package/dist/dom.js +20 -0
- package/dist/dom.mjs +20 -1
- package/dist/form.js +14 -8
- package/dist/form.mjs +15 -9
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
╚══════╝ ╚═════╝ ╚═╝ ╚══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
Version 1.8.
|
|
10
|
+
Version 1.8.2 / License MIT / Copyright (c) 2024 Edmund Hung
|
|
11
11
|
|
|
12
12
|
A type-safe form validation library utilizing web fundamentals to progressively enhance HTML Forms with full support for server frameworks like Remix and Next.js.
|
|
13
13
|
|
package/dist/dom.d.ts
CHANGED
|
@@ -63,5 +63,6 @@ export declare function updateField(element: HTMLInputElement | HTMLSelectElemen
|
|
|
63
63
|
value?: unknown;
|
|
64
64
|
defaultValue?: unknown;
|
|
65
65
|
}): void;
|
|
66
|
+
export declare function isDirtyInput(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean;
|
|
66
67
|
export {};
|
|
67
68
|
//# sourceMappingURL=dom.d.ts.map
|
package/dist/dom.js
CHANGED
|
@@ -463,6 +463,25 @@ function updateField(element, options) {
|
|
|
463
463
|
element.defaultValue = (_defaultValue$ = defaultValue[0]) !== null && _defaultValue$ !== void 0 ? _defaultValue$ : '';
|
|
464
464
|
}
|
|
465
465
|
}
|
|
466
|
+
function isDirtyInput(element) {
|
|
467
|
+
var _element$files$length, _element$files;
|
|
468
|
+
if (isInputElement(element)) {
|
|
469
|
+
switch (element.type) {
|
|
470
|
+
case 'checkbox':
|
|
471
|
+
case 'radio':
|
|
472
|
+
return element.checked !== element.defaultChecked;
|
|
473
|
+
case 'file':
|
|
474
|
+
return ((_element$files$length = (_element$files = element.files) === null || _element$files === void 0 ? void 0 : _element$files.length) !== null && _element$files$length !== void 0 ? _element$files$length : 0) > 0;
|
|
475
|
+
default:
|
|
476
|
+
return element.value !== element.defaultValue;
|
|
477
|
+
}
|
|
478
|
+
} else if (isSelectElement(element)) {
|
|
479
|
+
return Array.from(element.options).some(option => option.selected !== option.defaultSelected);
|
|
480
|
+
} else if (isTextAreaElement(element)) {
|
|
481
|
+
return element.value !== element.defaultValue;
|
|
482
|
+
}
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
466
485
|
|
|
467
486
|
exports.blur = blur;
|
|
468
487
|
exports.change = change;
|
|
@@ -472,6 +491,7 @@ exports.focus = focus;
|
|
|
472
491
|
exports.getFormAction = getFormAction;
|
|
473
492
|
exports.getFormEncType = getFormEncType;
|
|
474
493
|
exports.getFormMethod = getFormMethod;
|
|
494
|
+
exports.isDirtyInput = isDirtyInput;
|
|
475
495
|
exports.isFieldElement = isFieldElement;
|
|
476
496
|
exports.isInputElement = isInputElement;
|
|
477
497
|
exports.isSelectElement = isSelectElement;
|
package/dist/dom.mjs
CHANGED
|
@@ -459,5 +459,24 @@ function updateField(element, options) {
|
|
|
459
459
|
element.defaultValue = (_defaultValue$ = defaultValue[0]) !== null && _defaultValue$ !== void 0 ? _defaultValue$ : '';
|
|
460
460
|
}
|
|
461
461
|
}
|
|
462
|
+
function isDirtyInput(element) {
|
|
463
|
+
var _element$files$length, _element$files;
|
|
464
|
+
if (isInputElement(element)) {
|
|
465
|
+
switch (element.type) {
|
|
466
|
+
case 'checkbox':
|
|
467
|
+
case 'radio':
|
|
468
|
+
return element.checked !== element.defaultChecked;
|
|
469
|
+
case 'file':
|
|
470
|
+
return ((_element$files$length = (_element$files = element.files) === null || _element$files === void 0 ? void 0 : _element$files.length) !== null && _element$files$length !== void 0 ? _element$files$length : 0) > 0;
|
|
471
|
+
default:
|
|
472
|
+
return element.value !== element.defaultValue;
|
|
473
|
+
}
|
|
474
|
+
} else if (isSelectElement(element)) {
|
|
475
|
+
return Array.from(element.options).some(option => option.selected !== option.defaultSelected);
|
|
476
|
+
} else if (isTextAreaElement(element)) {
|
|
477
|
+
return element.value !== element.defaultValue;
|
|
478
|
+
}
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
462
481
|
|
|
463
|
-
export { blur, change, createFileList, createGlobalFormsObserver, focus, getFormAction, getFormEncType, getFormMethod, isFieldElement, isInputElement, isSelectElement, isTextAreaElement, normalizeFileValues, normalizeStringValues, requestSubmit, updateField };
|
|
482
|
+
export { blur, change, createFileList, createGlobalFormsObserver, focus, getFormAction, getFormEncType, getFormMethod, isDirtyInput, isFieldElement, isInputElement, isSelectElement, isTextAreaElement, normalizeFileValues, normalizeStringValues, requestSubmit, updateField };
|
package/dist/form.js
CHANGED
|
@@ -582,12 +582,15 @@ function createFormContext(options) {
|
|
|
582
582
|
var paths = formdata.getChildPaths(parentPaths, element.name);
|
|
583
583
|
if (paths) {
|
|
584
584
|
var value = formdata.getValue(intent.payload.value, formdata.formatPaths(paths));
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
585
|
+
var inputValue = typeof value === 'string' || Array.isArray(value) && value.every(item => typeof item === 'string') ? value : undefined;
|
|
586
|
+
if (typeof inputValue !== 'undefined' || _name5 === '' && paths.length > 1) {
|
|
587
|
+
dom.updateField(element, {
|
|
588
|
+
value: inputValue !== null && inputValue !== void 0 ? inputValue : null
|
|
589
|
+
});
|
|
588
590
|
|
|
589
|
-
|
|
590
|
-
|
|
591
|
+
// Update the element attribute to notify useControl / useInputControl hook
|
|
592
|
+
element.dataset.conform = util.generateId();
|
|
593
|
+
}
|
|
591
594
|
}
|
|
592
595
|
}
|
|
593
596
|
}
|
|
@@ -599,10 +602,13 @@ function createFormContext(options) {
|
|
|
599
602
|
for (var _element of formElement.elements) {
|
|
600
603
|
if (dom.isFieldElement(_element) && _element.name && formdata.isPrefix(_element.name, prefix)) {
|
|
601
604
|
var _value2 = formdata.getValue(meta.defaultValue, _element.name);
|
|
602
|
-
var defaultValue = typeof _value2 === 'string' || Array.isArray(_value2) && _value2.every(item => typeof item === 'string') ? _value2 :
|
|
605
|
+
var defaultValue = typeof _value2 === 'string' || Array.isArray(_value2) && _value2.every(item => typeof item === 'string') ? _value2 : undefined;
|
|
606
|
+
if (typeof defaultValue === 'undefined' && !_element.dataset.conform && 'defaultValue' in _element && !dom.isDirtyInput(_element)) {
|
|
607
|
+
continue;
|
|
608
|
+
}
|
|
603
609
|
dom.updateField(_element, {
|
|
604
|
-
defaultValue,
|
|
605
|
-
value: defaultValue
|
|
610
|
+
defaultValue: defaultValue,
|
|
611
|
+
value: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null
|
|
606
612
|
});
|
|
607
613
|
|
|
608
614
|
// Update the element attribute to notify useControl / useInputControl hook
|
package/dist/form.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { objectSpread2 as _objectSpread2 } from './_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
2
|
import { flatten, formatName, getValue, isPlainObject, isPrefix, setValue, normalize, getFormData, getPaths, getChildPaths, formatPaths } from './formdata.mjs';
|
|
3
|
-
import { getFormAction, getFormEncType, getFormMethod, isFieldElement, requestSubmit, updateField } from './dom.mjs';
|
|
3
|
+
import { getFormAction, getFormEncType, getFormMethod, isFieldElement, requestSubmit, isDirtyInput, updateField } from './dom.mjs';
|
|
4
4
|
import { generateId, clone, invariant } from './util.mjs';
|
|
5
5
|
import { serialize, setListState, setListValue, setState, INTENT, serializeIntent, root, getSubmissionContext } from './submission.mjs';
|
|
6
6
|
|
|
@@ -578,12 +578,15 @@ function createFormContext(options) {
|
|
|
578
578
|
var paths = getChildPaths(parentPaths, element.name);
|
|
579
579
|
if (paths) {
|
|
580
580
|
var value = getValue(intent.payload.value, formatPaths(paths));
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
581
|
+
var inputValue = typeof value === 'string' || Array.isArray(value) && value.every(item => typeof item === 'string') ? value : undefined;
|
|
582
|
+
if (typeof inputValue !== 'undefined' || _name5 === '' && paths.length > 1) {
|
|
583
|
+
updateField(element, {
|
|
584
|
+
value: inputValue !== null && inputValue !== void 0 ? inputValue : null
|
|
585
|
+
});
|
|
584
586
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
+
// Update the element attribute to notify useControl / useInputControl hook
|
|
588
|
+
element.dataset.conform = generateId();
|
|
589
|
+
}
|
|
587
590
|
}
|
|
588
591
|
}
|
|
589
592
|
}
|
|
@@ -595,10 +598,13 @@ function createFormContext(options) {
|
|
|
595
598
|
for (var _element of formElement.elements) {
|
|
596
599
|
if (isFieldElement(_element) && _element.name && isPrefix(_element.name, prefix)) {
|
|
597
600
|
var _value2 = getValue(meta.defaultValue, _element.name);
|
|
598
|
-
var defaultValue = typeof _value2 === 'string' || Array.isArray(_value2) && _value2.every(item => typeof item === 'string') ? _value2 :
|
|
601
|
+
var defaultValue = typeof _value2 === 'string' || Array.isArray(_value2) && _value2.every(item => typeof item === 'string') ? _value2 : undefined;
|
|
602
|
+
if (typeof defaultValue === 'undefined' && !_element.dataset.conform && 'defaultValue' in _element && !isDirtyInput(_element)) {
|
|
603
|
+
continue;
|
|
604
|
+
}
|
|
599
605
|
updateField(_element, {
|
|
600
|
-
defaultValue,
|
|
601
|
-
value: defaultValue
|
|
606
|
+
defaultValue: defaultValue,
|
|
607
|
+
value: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null
|
|
602
608
|
});
|
|
603
609
|
|
|
604
610
|
// Update the element attribute to notify useControl / useInputControl hook
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "A set of opinionated helpers built on top of the Constraint Validation API",
|
|
4
4
|
"homepage": "https://conform.guide",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "1.8.
|
|
6
|
+
"version": "1.8.2",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"module": "./dist/index.mjs",
|
|
9
9
|
"types": "./dist/index.d.ts",
|