@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/hooks.mjs CHANGED
@@ -1,8 +1,10 @@
1
- import { objectSpread2 as _objectSpread2 } from './_virtual/_rollupPluginBabelHelpers.mjs';
2
- import { createFormContext } from '@conform-to/dom';
3
- import { useState, useRef, useEffect, useLayoutEffect, useId } from 'react';
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 formId = useFormId(options.id);
30
- var [context] = useState(() => createFormContext(_objectSpread2(_objectSpread2({}, options), {}, {
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.input);
36
- document.addEventListener('focusout', context.blur);
37
- document.addEventListener('reset', context.reset);
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.input);
40
- document.removeEventListener('focusout', context.blur);
41
- document.removeEventListener('reset', context.reset);
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
- if (options.lastResult === optionsRef.current.lastResult) {
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 FormControl, type FormId, type FieldName, requestSubmit, isFieldElement, control, } from '@conform-to/dom';
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, 'control', {
13
+ Object.defineProperty(exports, 'parse', {
15
14
  enumerable: true,
16
- get: function () { return dom.control; }
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 { control, isFieldElement, requestSubmit } from '@conform-to/dom';
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(options: {
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: string | undefined;
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(options) {
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(options.key);
42
- var [value, setValue] = react.useState(() => options.initialValue);
43
- if (key !== options.key) {
44
- setValue(options.initialValue);
45
- setKey(options.key);
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(options.formId, options.name, element => element === event.target);
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
- }, [options.formId, options.name]);
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(options.formId, options.name);
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(options.formId, options.name);
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(options.formId, options.name);
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
- }, [options.formId, options.name]);
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(options) {
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(options.key);
38
- var [value, setValue] = useState(() => options.initialValue);
39
- if (key !== options.key) {
40
- setValue(options.initialValue);
41
- setKey(options.key);
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(options.formId, options.name, element => element === event.target);
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
- }, [options.formId, options.name]);
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(options.formId, options.name);
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(options.formId, options.name);
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(options.formId, options.name);
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
- }, [options.formId, options.name]);
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.5",
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.5"
33
+ "@conform-to/dom": "1.0.0-pre.7"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/react": "^18.2.43",