@conform-to/react 1.0.0-pre.5 → 1.0.0-pre.7
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 +32 -0
- package/_virtual/_rollupPluginBabelHelpers.js +29 -0
- package/_virtual/_rollupPluginBabelHelpers.mjs +28 -1
- package/context.d.ts +22 -20
- package/context.js +24 -25
- package/context.mjs +24 -26
- package/helpers.d.ts +9 -13
- package/helpers.js +5 -8
- package/helpers.mjs +5 -8
- package/hooks.d.ts +4 -4
- package/hooks.js +15 -20
- package/hooks.mjs +18 -23
- package/index.d.ts +1 -2
- package/index.js +2 -12
- package/index.mjs +1 -2
- package/integrations.d.ts +3 -3
- package/integrations.js +12 -12
- package/integrations.mjs +12 -12
- package/package.json +2 -2
- package/README.md +0 -606
- package/validitystate.d.ts +0 -12
- package/validitystate.js +0 -38
- package/validitystate.mjs +0 -34
package/hooks.mjs
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { objectSpread2 as _objectSpread2 } from './_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
-
import {
|
|
3
|
-
import { useState,
|
|
1
|
+
import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2 } from './_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
+
import { unstable_createFormContext } from '@conform-to/dom';
|
|
3
|
+
import { useState, useEffect, useLayoutEffect, useId } from 'react';
|
|
4
4
|
import { useSubjectRef, useFormState, getFormMetadata, useFormContext, getFieldMetadata } from './context.mjs';
|
|
5
5
|
|
|
6
|
+
var _excluded = ["id"];
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* useLayoutEffect is client-only.
|
|
8
10
|
* This basically makes it a no-op on server
|
|
@@ -26,33 +28,26 @@ function useNoValidate() {
|
|
|
26
28
|
return noValidate;
|
|
27
29
|
}
|
|
28
30
|
function useForm(options) {
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
+
var {
|
|
32
|
+
id
|
|
33
|
+
} = options,
|
|
34
|
+
formConfig = _objectWithoutProperties(options, _excluded);
|
|
35
|
+
var formId = useFormId(id);
|
|
36
|
+
var [context] = useState(() => unstable_createFormContext(_objectSpread2(_objectSpread2({}, formConfig), {}, {
|
|
31
37
|
formId
|
|
32
38
|
})));
|
|
33
|
-
var optionsRef = useRef(options);
|
|
34
39
|
useSafeLayoutEffect(() => {
|
|
35
|
-
document.addEventListener('input', context.
|
|
36
|
-
document.addEventListener('focusout', context.
|
|
37
|
-
document.addEventListener('reset', context.
|
|
40
|
+
document.addEventListener('input', context.onInput);
|
|
41
|
+
document.addEventListener('focusout', context.onBlur);
|
|
42
|
+
document.addEventListener('reset', context.onReset);
|
|
38
43
|
return () => {
|
|
39
|
-
document.removeEventListener('input', context.
|
|
40
|
-
document.removeEventListener('focusout', context.
|
|
41
|
-
document.removeEventListener('reset', context.
|
|
44
|
+
document.removeEventListener('input', context.onInput);
|
|
45
|
+
document.removeEventListener('focusout', context.onBlur);
|
|
46
|
+
document.removeEventListener('reset', context.onReset);
|
|
42
47
|
};
|
|
43
48
|
}, [context]);
|
|
44
49
|
useSafeLayoutEffect(() => {
|
|
45
|
-
|
|
46
|
-
// If there is no change, do nothing
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (options.lastResult) {
|
|
50
|
-
context.report(options.lastResult);
|
|
51
|
-
}
|
|
52
|
-
}, [context, options.lastResult]);
|
|
53
|
-
useSafeLayoutEffect(() => {
|
|
54
|
-
optionsRef.current = options;
|
|
55
|
-
context.update(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
50
|
+
context.onUpdate(_objectSpread2(_objectSpread2({}, formConfig), {}, {
|
|
56
51
|
formId
|
|
57
52
|
}));
|
|
58
53
|
});
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export { type Submission, type SubmissionResult, type
|
|
1
|
+
export { type Submission, type SubmissionResult, type DefaultValue, type Intent, type FormId, type FieldName, parse, } from '@conform-to/dom';
|
|
2
2
|
export { type FieldMetadata, type FormMetadata, FormProvider, FormStateInput, } from './context';
|
|
3
3
|
export { useForm, useFormMetadata, useField } from './hooks';
|
|
4
4
|
export { useInputControl } from './integrations';
|
|
5
|
-
export { validateConstraint } from './validitystate';
|
|
6
5
|
export { getFormProps, getFieldsetProps, getInputProps, getSelectProps, getTextareaProps, getCollectionProps, } from './helpers';
|
package/index.js
CHANGED
|
@@ -6,22 +6,13 @@ var dom = require('@conform-to/dom');
|
|
|
6
6
|
var context = require('./context.js');
|
|
7
7
|
var hooks = require('./hooks.js');
|
|
8
8
|
var integrations = require('./integrations.js');
|
|
9
|
-
var validitystate = require('./validitystate.js');
|
|
10
9
|
var helpers = require('./helpers.js');
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
Object.defineProperty(exports, '
|
|
13
|
+
Object.defineProperty(exports, 'parse', {
|
|
15
14
|
enumerable: true,
|
|
16
|
-
get: function () { return dom.
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, 'isFieldElement', {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () { return dom.isFieldElement; }
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(exports, 'requestSubmit', {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
get: function () { return dom.requestSubmit; }
|
|
15
|
+
get: function () { return dom.parse; }
|
|
25
16
|
});
|
|
26
17
|
exports.FormProvider = context.FormProvider;
|
|
27
18
|
exports.FormStateInput = context.FormStateInput;
|
|
@@ -29,7 +20,6 @@ exports.useField = hooks.useField;
|
|
|
29
20
|
exports.useForm = hooks.useForm;
|
|
30
21
|
exports.useFormMetadata = hooks.useFormMetadata;
|
|
31
22
|
exports.useInputControl = integrations.useInputControl;
|
|
32
|
-
exports.validateConstraint = validitystate.validateConstraint;
|
|
33
23
|
exports.getCollectionProps = helpers.getCollectionProps;
|
|
34
24
|
exports.getFieldsetProps = helpers.getFieldsetProps;
|
|
35
25
|
exports.getFormProps = helpers.getFormProps;
|
package/index.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { parse } from '@conform-to/dom';
|
|
2
2
|
export { FormProvider, FormStateInput } from './context.mjs';
|
|
3
3
|
export { useField, useForm, useFormMetadata } from './hooks.mjs';
|
|
4
4
|
export { useInputControl } from './integrations.mjs';
|
|
5
|
-
export { validateConstraint } from './validitystate.mjs';
|
|
6
5
|
export { getCollectionProps, getFieldsetProps, getFormProps, getInputProps, getSelectProps, getTextareaProps } from './helpers.mjs';
|
package/integrations.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ export type InputControl = {
|
|
|
7
7
|
};
|
|
8
8
|
export declare function getFieldElement(formId: string, name: string, match?: (element: FieldElement) => boolean): FieldElement | null;
|
|
9
9
|
export declare function getEventTarget(formId: string, name: string): FieldElement;
|
|
10
|
-
export declare function useInputControl(
|
|
11
|
-
key?: string | undefined;
|
|
10
|
+
export declare function useInputControl(meta: {
|
|
11
|
+
key?: string | null | undefined;
|
|
12
12
|
name: string;
|
|
13
13
|
formId: string;
|
|
14
|
-
initialValue
|
|
14
|
+
initialValue?: string | undefined;
|
|
15
15
|
}): InputControl;
|
package/integrations.js
CHANGED
|
@@ -32,22 +32,22 @@ function getEventTarget(formId, name) {
|
|
|
32
32
|
form === null || form === void 0 || form.appendChild(input);
|
|
33
33
|
return input;
|
|
34
34
|
}
|
|
35
|
-
function useInputControl(
|
|
35
|
+
function useInputControl(meta) {
|
|
36
36
|
var eventDispatched = react.useRef({
|
|
37
37
|
change: false,
|
|
38
38
|
focus: false,
|
|
39
39
|
blur: false
|
|
40
40
|
});
|
|
41
|
-
var [key, setKey] = react.useState(
|
|
42
|
-
var [value, setValue] = react.useState(() =>
|
|
43
|
-
if (key !==
|
|
44
|
-
setValue(
|
|
45
|
-
setKey(
|
|
41
|
+
var [key, setKey] = react.useState(meta.key);
|
|
42
|
+
var [value, setValue] = react.useState(() => meta.initialValue);
|
|
43
|
+
if (key !== meta.key) {
|
|
44
|
+
setValue(meta.initialValue);
|
|
45
|
+
setKey(meta.key);
|
|
46
46
|
}
|
|
47
47
|
react.useEffect(() => {
|
|
48
48
|
var createEventListener = listener => {
|
|
49
49
|
return event => {
|
|
50
|
-
var element = getFieldElement(
|
|
50
|
+
var element = getFieldElement(meta.formId, meta.name, element => element === event.target);
|
|
51
51
|
if (element) {
|
|
52
52
|
eventDispatched.current[listener] = true;
|
|
53
53
|
}
|
|
@@ -64,12 +64,12 @@ function useInputControl(options) {
|
|
|
64
64
|
document.removeEventListener('focusin', focusHandler, true);
|
|
65
65
|
document.removeEventListener('focusout', blurHandler, true);
|
|
66
66
|
};
|
|
67
|
-
}, [
|
|
67
|
+
}, [meta.formId, meta.name]);
|
|
68
68
|
var handlers = react.useMemo(() => {
|
|
69
69
|
return {
|
|
70
70
|
change(value) {
|
|
71
71
|
if (!eventDispatched.current.change) {
|
|
72
|
-
var _element = getEventTarget(
|
|
72
|
+
var _element = getEventTarget(meta.formId, meta.name);
|
|
73
73
|
eventDispatched.current.change = true;
|
|
74
74
|
if (_element instanceof HTMLInputElement && (_element.type === 'checkbox' || _element.type === 'radio')) {
|
|
75
75
|
_element.checked = _element.value === value;
|
|
@@ -114,7 +114,7 @@ function useInputControl(options) {
|
|
|
114
114
|
},
|
|
115
115
|
focus() {
|
|
116
116
|
if (!eventDispatched.current.focus) {
|
|
117
|
-
var _element2 = getEventTarget(
|
|
117
|
+
var _element2 = getEventTarget(meta.formId, meta.name);
|
|
118
118
|
eventDispatched.current.focus = true;
|
|
119
119
|
_element2.dispatchEvent(new FocusEvent('focusin', {
|
|
120
120
|
bubbles: true
|
|
@@ -125,7 +125,7 @@ function useInputControl(options) {
|
|
|
125
125
|
},
|
|
126
126
|
blur() {
|
|
127
127
|
if (!eventDispatched.current.blur) {
|
|
128
|
-
var _element3 = getEventTarget(
|
|
128
|
+
var _element3 = getEventTarget(meta.formId, meta.name);
|
|
129
129
|
eventDispatched.current.blur = true;
|
|
130
130
|
_element3.dispatchEvent(new FocusEvent('focusout', {
|
|
131
131
|
bubbles: true
|
|
@@ -135,7 +135,7 @@ function useInputControl(options) {
|
|
|
135
135
|
eventDispatched.current.blur = false;
|
|
136
136
|
}
|
|
137
137
|
};
|
|
138
|
-
}, [
|
|
138
|
+
}, [meta.formId, meta.name]);
|
|
139
139
|
return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, handlers), {}, {
|
|
140
140
|
value
|
|
141
141
|
});
|
package/integrations.mjs
CHANGED
|
@@ -28,22 +28,22 @@ function getEventTarget(formId, name) {
|
|
|
28
28
|
form === null || form === void 0 || form.appendChild(input);
|
|
29
29
|
return input;
|
|
30
30
|
}
|
|
31
|
-
function useInputControl(
|
|
31
|
+
function useInputControl(meta) {
|
|
32
32
|
var eventDispatched = useRef({
|
|
33
33
|
change: false,
|
|
34
34
|
focus: false,
|
|
35
35
|
blur: false
|
|
36
36
|
});
|
|
37
|
-
var [key, setKey] = useState(
|
|
38
|
-
var [value, setValue] = useState(() =>
|
|
39
|
-
if (key !==
|
|
40
|
-
setValue(
|
|
41
|
-
setKey(
|
|
37
|
+
var [key, setKey] = useState(meta.key);
|
|
38
|
+
var [value, setValue] = useState(() => meta.initialValue);
|
|
39
|
+
if (key !== meta.key) {
|
|
40
|
+
setValue(meta.initialValue);
|
|
41
|
+
setKey(meta.key);
|
|
42
42
|
}
|
|
43
43
|
useEffect(() => {
|
|
44
44
|
var createEventListener = listener => {
|
|
45
45
|
return event => {
|
|
46
|
-
var element = getFieldElement(
|
|
46
|
+
var element = getFieldElement(meta.formId, meta.name, element => element === event.target);
|
|
47
47
|
if (element) {
|
|
48
48
|
eventDispatched.current[listener] = true;
|
|
49
49
|
}
|
|
@@ -60,12 +60,12 @@ function useInputControl(options) {
|
|
|
60
60
|
document.removeEventListener('focusin', focusHandler, true);
|
|
61
61
|
document.removeEventListener('focusout', blurHandler, true);
|
|
62
62
|
};
|
|
63
|
-
}, [
|
|
63
|
+
}, [meta.formId, meta.name]);
|
|
64
64
|
var handlers = useMemo(() => {
|
|
65
65
|
return {
|
|
66
66
|
change(value) {
|
|
67
67
|
if (!eventDispatched.current.change) {
|
|
68
|
-
var _element = getEventTarget(
|
|
68
|
+
var _element = getEventTarget(meta.formId, meta.name);
|
|
69
69
|
eventDispatched.current.change = true;
|
|
70
70
|
if (_element instanceof HTMLInputElement && (_element.type === 'checkbox' || _element.type === 'radio')) {
|
|
71
71
|
_element.checked = _element.value === value;
|
|
@@ -110,7 +110,7 @@ function useInputControl(options) {
|
|
|
110
110
|
},
|
|
111
111
|
focus() {
|
|
112
112
|
if (!eventDispatched.current.focus) {
|
|
113
|
-
var _element2 = getEventTarget(
|
|
113
|
+
var _element2 = getEventTarget(meta.formId, meta.name);
|
|
114
114
|
eventDispatched.current.focus = true;
|
|
115
115
|
_element2.dispatchEvent(new FocusEvent('focusin', {
|
|
116
116
|
bubbles: true
|
|
@@ -121,7 +121,7 @@ function useInputControl(options) {
|
|
|
121
121
|
},
|
|
122
122
|
blur() {
|
|
123
123
|
if (!eventDispatched.current.blur) {
|
|
124
|
-
var _element3 = getEventTarget(
|
|
124
|
+
var _element3 = getEventTarget(meta.formId, meta.name);
|
|
125
125
|
eventDispatched.current.blur = true;
|
|
126
126
|
_element3.dispatchEvent(new FocusEvent('focusout', {
|
|
127
127
|
bubbles: true
|
|
@@ -131,7 +131,7 @@ function useInputControl(options) {
|
|
|
131
131
|
eventDispatched.current.blur = false;
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
|
-
}, [
|
|
134
|
+
}, [meta.formId, meta.name]);
|
|
135
135
|
return _objectSpread2(_objectSpread2({}, handlers), {}, {
|
|
136
136
|
value
|
|
137
137
|
});
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Conform view adapter for react",
|
|
4
4
|
"homepage": "https://conform.guide",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "1.0.0-pre.
|
|
6
|
+
"version": "1.0.0-pre.7",
|
|
7
7
|
"main": "index.js",
|
|
8
8
|
"module": "index.mjs",
|
|
9
9
|
"types": "index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"url": "https://github.com/edmundhung/conform/issues"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@conform-to/dom": "1.0.0-pre.
|
|
33
|
+
"@conform-to/dom": "1.0.0-pre.7"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/react": "^18.2.43",
|