@pixldocs/canvas-renderer 0.5.86 → 0.5.87

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/dist/index.cjs CHANGED
@@ -10694,6 +10694,7 @@ function flattenSectionStateToFormData(sectionState, sections) {
10694
10694
  flat[`${sectionPrefix}_${oneBased}_sectionLabel`] = sectionLabel;
10695
10695
  flat[`${sectionPrefix}_${oneBased}_label`] = sectionLabel;
10696
10696
  for (const f of section.entryFields) {
10697
+ if (f.key === "__entryId" || f.key === "__entryName") continue;
10697
10698
  const v = entry[f.key];
10698
10699
  if (f.templateKey) {
10699
10700
  if (f.type === "list" && Array.isArray(v)) {
@@ -10742,12 +10743,25 @@ function baseId(id) {
10742
10743
  const REPEATABLE_KEY_REGEX = /^field_(.+)_(\d+)_(.+)$/;
10743
10744
  const NESTED_REPEATABLE_KEY_REGEX = /^field_(.+)_(\d+)_field_(.+)_(\d+)_(.+)$/;
10744
10745
  const FORMDEF_CANONICAL_KEY_REGEX = /^field_.+_N_.+$/;
10745
- function parseEntryRange(range, max) {
10746
+ function parseEntryRange(range, max, entryMeta) {
10746
10747
  if (!range || !range.trim()) return null;
10747
10748
  const out = /* @__PURE__ */ new Set();
10748
10749
  for (const partRaw of range.split(",")) {
10749
10750
  const part = partRaw.trim();
10750
10751
  if (!part) continue;
10752
+ if (part.startsWith("#")) {
10753
+ const token = part.slice(1).trim().toLowerCase();
10754
+ if (!token || !(entryMeta == null ? void 0 : entryMeta.length)) continue;
10755
+ for (let i = 0; i < entryMeta.length; i++) {
10756
+ const m2 = entryMeta[i];
10757
+ if (!m2) continue;
10758
+ if (m2.id && m2.id.toLowerCase() === token || m2.name && m2.name.toLowerCase() === token) {
10759
+ const idx = i + 1;
10760
+ if (idx >= 1 && idx <= max) out.add(idx);
10761
+ }
10762
+ }
10763
+ continue;
10764
+ }
10751
10765
  if (/^\d+$/.test(part)) {
10752
10766
  const n = parseInt(part, 10);
10753
10767
  if (n >= 1 && n <= max) out.add(n);
@@ -11162,6 +11176,10 @@ function applyFormDataToConfig(config, mappings, formValues, repeatableSectionsF
11162
11176
  const filter = item == null ? void 0 : item.entryFilter;
11163
11177
  return (filter == null ? void 0 : filter.mode) === "range" && ((_a2 = filter.range) == null ? void 0 : _a2.trim()) ? filter : void 0;
11164
11178
  };
11179
+ const entryMetaFromList = (baseNodeId) => {
11180
+ const item = repeatableList.find((r) => baseId(r.nodeId) === baseNodeId || r.nodeId === baseNodeId);
11181
+ return item == null ? void 0 : item.entryMeta;
11182
+ };
11165
11183
  const resolvedIdMap = /* @__PURE__ */ new Map();
11166
11184
  const addResolved = (key, id) => {
11167
11185
  const arr = resolvedIdMap.get(key);
@@ -11248,7 +11266,7 @@ function applyFormDataToConfig(config, mappings, formValues, repeatableSectionsF
11248
11266
  const entryFilter = ((_b = node.repeatableSection) == null ? void 0 : _b.entryFilter) ?? entryFilterFromList(baseNodeId);
11249
11267
  let entryIndices;
11250
11268
  if (entryFilter && entryFilter.mode === "range" && entryFilter.range) {
11251
- const parsed = parseEntryRange(entryFilter.range, N);
11269
+ const parsed = parseEntryRange(entryFilter.range, N, entryMetaFromList(baseNodeId));
11252
11270
  entryIndices = parsed && parsed.length ? parsed : Array.from({ length: N }, (_, k) => k + 1);
11253
11271
  } else {
11254
11272
  entryIndices = Array.from({ length: N }, (_, k) => k + 1);
@@ -11293,7 +11311,7 @@ function applyFormDataToConfig(config, mappings, formValues, repeatableSectionsF
11293
11311
  const nestedEntryFilter = ((_a2 = node.repeatableSection) == null ? void 0 : _a2.entryFilter) ?? entryFilterFromList(baseNodeId);
11294
11312
  let nestedEntryIndices;
11295
11313
  if (nestedEntryFilter && nestedEntryFilter.mode === "range" && nestedEntryFilter.range) {
11296
- const parsed = parseEntryRange(nestedEntryFilter.range, N);
11314
+ const parsed = parseEntryRange(nestedEntryFilter.range, N, entryMetaFromList(baseNodeId));
11297
11315
  nestedEntryIndices = parsed && parsed.length ? parsed : Array.from({ length: N }, (_, k) => k + 1);
11298
11316
  } else {
11299
11317
  nestedEntryIndices = Array.from({ length: N }, (_, k) => k + 1);
@@ -12476,12 +12494,28 @@ async function resolveFromForm(options) {
12476
12494
  const entries = mergedSectionState[s.id] ?? [];
12477
12495
  const nodeId = s.treeNodeId ?? s.id;
12478
12496
  const schemaRepeatable = repeatableFromSchemaByBase.get(baseId(nodeId));
12479
- return { nodeId, label: s.label, entryCount: Math.max(1, entries.length), entryFilter: schemaRepeatable == null ? void 0 : schemaRepeatable.entryFilter };
12497
+ const entryMeta = entries.map((e) => ({
12498
+ id: typeof (e == null ? void 0 : e.__entryId) === "string" ? e.__entryId : void 0,
12499
+ name: typeof (e == null ? void 0 : e.__entryName) === "string" ? e.__entryName : void 0
12500
+ }));
12501
+ return { nodeId, label: s.label, entryCount: Math.max(1, entries.length), entryFilter: schemaRepeatable == null ? void 0 : schemaRepeatable.entryFilter, entryMeta };
12480
12502
  });
12481
12503
  const nestedRepeatables = inferredSections.filter((s) => s.type === "repeatable" && s.parentId != null).map((s) => {
12482
12504
  const nodeId = s.treeNodeId ?? s.id;
12483
12505
  const schemaRepeatable = repeatableFromSchemaByBase.get(baseId(nodeId));
12484
- return { nodeId, label: s.label, entryFilter: schemaRepeatable == null ? void 0 : schemaRepeatable.entryFilter };
12506
+ const parentId = s.parentId;
12507
+ const parentEntries = mergedSectionState[parentId] ?? [];
12508
+ const merged = [];
12509
+ for (let pi = 0; pi < parentEntries.length; pi++) {
12510
+ const childEntries = mergedSectionState[`${parentId}_${pi}_${s.id}`] ?? [];
12511
+ for (const e of childEntries) {
12512
+ merged.push({
12513
+ id: typeof (e == null ? void 0 : e.__entryId) === "string" ? e.__entryId : void 0,
12514
+ name: typeof (e == null ? void 0 : e.__entryName) === "string" ? e.__entryName : void 0
12515
+ });
12516
+ }
12517
+ }
12518
+ return { nodeId, label: s.label, entryFilter: schemaRepeatable == null ? void 0 : schemaRepeatable.entryFilter, entryMeta: merged };
12485
12519
  });
12486
12520
  const inferredRepeatableList = [...topLevelRepeatables, ...nestedRepeatables];
12487
12521
  const entryCountForLabel = (label) => {