@conform-to/dom 1.0.5 → 1.0.6

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 CHANGED
@@ -8,7 +8,7 @@
8
8
  ╚══════╝ ╚═════╝ ╚═╝ ╚══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
9
9
 
10
10
 
11
- Version 1.0.4 / License MIT / Copyright (c) 2024 Edmund Hung
11
+ Version 1.0.6 / License MIT / Copyright (c) 2024 Edmund Hung
12
12
 
13
13
  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.
14
14
 
package/form.js CHANGED
@@ -117,11 +117,13 @@ function handleIntent(meta, intent, fields, initialized) {
117
117
  if (initialized) {
118
118
  meta.initialValue = util.clone(meta.initialValue);
119
119
  meta.key = util.clone(meta.key);
120
- submission.setListState(meta.key, intent, (defaultValue, name) => {
120
+ submission.setListState(meta.key, intent, defaultValue => {
121
121
  if (!Array.isArray(defaultValue) && !formdata.isPlainObject(defaultValue)) {
122
122
  return util.generateId();
123
123
  }
124
- return getDefaultKey(defaultValue, name);
124
+ return Object.assign(getDefaultKey(defaultValue), {
125
+ [submission.root]: util.generateId()
126
+ });
125
127
  });
126
128
  submission.setListValue(meta.initialValue, intent);
127
129
  }
@@ -365,7 +367,7 @@ function createFormContext(options) {
365
367
  function resolveTarget(event) {
366
368
  var form = getFormElement();
367
369
  var element = event.target;
368
- if (!form || !dom.isFieldElement(element) || element.form !== form || element.name === '') {
370
+ if (!form || !dom.isFieldElement(element) || element.form !== form || !element.form.isConnected || element.name === '') {
369
371
  return null;
370
372
  }
371
373
  return element;
package/form.mjs CHANGED
@@ -2,7 +2,7 @@ import { objectSpread2 as _objectSpread2 } from './_virtual/_rollupPluginBabelHe
2
2
  import { flatten, formatPaths, getPaths, getValue, isPlainObject, setValue, normalize, getFormData, isPrefix } from './formdata.mjs';
3
3
  import { getFormAction, getFormEncType, getFormMethod, isFieldElement, requestSubmit } from './dom.mjs';
4
4
  import { generateId, clone, invariant } from './util.mjs';
5
- import { serialize, setListState, setListValue, setState, getSubmissionContext, INTENT, serializeIntent } from './submission.mjs';
5
+ import { serialize, setListState, setListValue, setState, getSubmissionContext, INTENT, serializeIntent, root } from './submission.mjs';
6
6
 
7
7
  function createFormMeta(options, initialized) {
8
8
  var _lastResult$initialVa, _options$constraint, _lastResult$state$val, _lastResult$state, _ref;
@@ -113,11 +113,13 @@ function handleIntent(meta, intent, fields, initialized) {
113
113
  if (initialized) {
114
114
  meta.initialValue = clone(meta.initialValue);
115
115
  meta.key = clone(meta.key);
116
- setListState(meta.key, intent, (defaultValue, name) => {
116
+ setListState(meta.key, intent, defaultValue => {
117
117
  if (!Array.isArray(defaultValue) && !isPlainObject(defaultValue)) {
118
118
  return generateId();
119
119
  }
120
- return getDefaultKey(defaultValue, name);
120
+ return Object.assign(getDefaultKey(defaultValue), {
121
+ [root]: generateId()
122
+ });
121
123
  });
122
124
  setListValue(meta.initialValue, intent);
123
125
  }
@@ -361,7 +363,7 @@ function createFormContext(options) {
361
363
  function resolveTarget(event) {
362
364
  var form = getFormElement();
363
365
  var element = event.target;
364
- if (!form || !isFieldElement(element) || element.form !== form || element.name === '') {
366
+ if (!form || !isFieldElement(element) || element.form !== form || !element.form.isConnected || element.name === '') {
365
367
  return null;
366
368
  }
367
369
  return element;
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.0.5",
6
+ "version": "1.0.6",
7
7
  "main": "index.js",
8
8
  "module": "index.mjs",
9
9
  "types": "index.d.ts",
package/submission.d.ts CHANGED
@@ -116,6 +116,10 @@ export declare function getIntent(serializedIntent: string | null | undefined):
116
116
  export declare function serializeIntent<Schema>(intent: Intent<Schema>): string;
117
117
  export declare function updateList(list: unknown, intent: InsertIntent | RemoveIntent | ReorderIntent): void;
118
118
  export declare function setListValue(data: Record<string, unknown>, intent: InsertIntent | RemoveIntent | ReorderIntent): void;
119
+ /**
120
+ * A placeholder symbol for the root value of a nested object
121
+ */
122
+ export declare const root: unique symbol;
119
123
  export declare function setState(state: Record<string, unknown>, name: string, valueFn: (value: unknown) => unknown): void;
120
- export declare function setListState(state: Record<string, unknown>, intent: InsertIntent | RemoveIntent | ReorderIntent, getDefaultValue?: (defaultValue: any, prefix?: string) => any): void;
124
+ export declare function setListState(state: Record<string, unknown>, intent: InsertIntent | RemoveIntent | ReorderIntent, getDefaultValue?: (defaultValue: any) => any): void;
121
125
  export declare function serialize<Schema>(defaultValue: DefaultValue<Schema>): FormValue<Schema>;
package/submission.js CHANGED
@@ -81,6 +81,15 @@ function parse(payload, options) {
81
81
  break;
82
82
  }
83
83
  case 'insert':
84
+ {
85
+ setListValue(context.payload, {
86
+ type: intent.type,
87
+ payload: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, intent.payload), {}, {
88
+ defaultValue: serialize(intent.payload.defaultValue)
89
+ })
90
+ });
91
+ break;
92
+ }
84
93
  case 'remove':
85
94
  case 'reorder':
86
95
  {
@@ -168,7 +177,7 @@ function updateList(list, intent) {
168
177
  util.invariant(Array.isArray(list), "Failed to update list. The value is not an array.");
169
178
  switch (intent.type) {
170
179
  case 'insert':
171
- list.splice((_intent$payload$index = intent.payload.index) !== null && _intent$payload$index !== void 0 ? _intent$payload$index : list.length, 0, serialize(intent.payload.defaultValue));
180
+ list.splice((_intent$payload$index = intent.payload.index) !== null && _intent$payload$index !== void 0 ? _intent$payload$index : list.length, 0, intent.payload.defaultValue);
172
181
  break;
173
182
  case 'remove':
174
183
  list.splice(intent.payload.index, 1);
@@ -187,9 +196,12 @@ function setListValue(data, intent) {
187
196
  return list;
188
197
  });
189
198
  }
190
- function setState(state, name, valueFn) {
191
- var root = Symbol.for('root');
192
199
 
200
+ /**
201
+ * A placeholder symbol for the root value of a nested object
202
+ */
203
+ var root = Symbol.for('root');
204
+ function setState(state, name, valueFn) {
193
205
  // The keys are sorted in desc so that the root value is handled last
194
206
  var keys = Object.keys(state).sort((prev, next) => next.localeCompare(prev));
195
207
  var target = {};
@@ -239,7 +251,7 @@ function setListState(state, intent, getDefaultValue) {
239
251
  updateList(list, {
240
252
  type: intent.type,
241
253
  payload: _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, intent.payload), {}, {
242
- defaultValue: getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue(intent.payload.defaultValue, intent.payload.name)
254
+ defaultValue: getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue(intent.payload.defaultValue)
243
255
  })
244
256
  });
245
257
  break;
@@ -286,6 +298,7 @@ exports.getIntent = getIntent;
286
298
  exports.getSubmissionContext = getSubmissionContext;
287
299
  exports.parse = parse;
288
300
  exports.replySubmission = replySubmission;
301
+ exports.root = root;
289
302
  exports.serialize = serialize;
290
303
  exports.serializeIntent = serializeIntent;
291
304
  exports.setListState = setListState;
package/submission.mjs CHANGED
@@ -77,6 +77,15 @@ function parse(payload, options) {
77
77
  break;
78
78
  }
79
79
  case 'insert':
80
+ {
81
+ setListValue(context.payload, {
82
+ type: intent.type,
83
+ payload: _objectSpread2(_objectSpread2({}, intent.payload), {}, {
84
+ defaultValue: serialize(intent.payload.defaultValue)
85
+ })
86
+ });
87
+ break;
88
+ }
80
89
  case 'remove':
81
90
  case 'reorder':
82
91
  {
@@ -164,7 +173,7 @@ function updateList(list, intent) {
164
173
  invariant(Array.isArray(list), "Failed to update list. The value is not an array.");
165
174
  switch (intent.type) {
166
175
  case 'insert':
167
- list.splice((_intent$payload$index = intent.payload.index) !== null && _intent$payload$index !== void 0 ? _intent$payload$index : list.length, 0, serialize(intent.payload.defaultValue));
176
+ list.splice((_intent$payload$index = intent.payload.index) !== null && _intent$payload$index !== void 0 ? _intent$payload$index : list.length, 0, intent.payload.defaultValue);
168
177
  break;
169
178
  case 'remove':
170
179
  list.splice(intent.payload.index, 1);
@@ -183,9 +192,12 @@ function setListValue(data, intent) {
183
192
  return list;
184
193
  });
185
194
  }
186
- function setState(state, name, valueFn) {
187
- var root = Symbol.for('root');
188
195
 
196
+ /**
197
+ * A placeholder symbol for the root value of a nested object
198
+ */
199
+ var root = Symbol.for('root');
200
+ function setState(state, name, valueFn) {
189
201
  // The keys are sorted in desc so that the root value is handled last
190
202
  var keys = Object.keys(state).sort((prev, next) => next.localeCompare(prev));
191
203
  var target = {};
@@ -235,7 +247,7 @@ function setListState(state, intent, getDefaultValue) {
235
247
  updateList(list, {
236
248
  type: intent.type,
237
249
  payload: _objectSpread2(_objectSpread2({}, intent.payload), {}, {
238
- defaultValue: getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue(intent.payload.defaultValue, intent.payload.name)
250
+ defaultValue: getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue(intent.payload.defaultValue)
239
251
  })
240
252
  });
241
253
  break;
@@ -275,4 +287,4 @@ function serialize(defaultValue) {
275
287
  }
276
288
  }
277
289
 
278
- export { INTENT, STATE, createSubmission, getIntent, getSubmissionContext, parse, replySubmission, serialize, serializeIntent, setListState, setListValue, setState, updateList };
290
+ export { INTENT, STATE, createSubmission, getIntent, getSubmissionContext, parse, replySubmission, root, serialize, serializeIntent, setListState, setListValue, setState, updateList };