@seedprotocol/mapping 0.6.2 → 0.6.3

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.
Files changed (37) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +22 -3
  3. package/dist/applyMapping.d.ts +4 -2
  4. package/dist/applyMapping.d.ts.map +1 -1
  5. package/dist/autoMap-Dh9SiWhT.js +631 -0
  6. package/dist/autoMap-Dh9SiWhT.js.map +1 -0
  7. package/dist/edgeMapping.d.ts +21 -0
  8. package/dist/edgeMapping.d.ts.map +1 -0
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +34 -34
  12. package/dist/react/FieldMapper.d.ts +12 -2
  13. package/dist/react/FieldMapper.d.ts.map +1 -1
  14. package/dist/react/FieldMapperWires.d.ts.map +1 -1
  15. package/dist/react/PropertyRows.d.ts +4 -2
  16. package/dist/react/PropertyRows.d.ts.map +1 -1
  17. package/dist/react/SourceRows.d.ts +4 -2
  18. package/dist/react/SourceRows.d.ts.map +1 -1
  19. package/dist/react/fieldMapperCore.d.ts +3 -1
  20. package/dist/react/fieldMapperCore.d.ts.map +1 -1
  21. package/dist/react/fieldMapperSlots.d.ts +1 -1
  22. package/dist/react/fieldMapperSlots.d.ts.map +1 -1
  23. package/dist/react/fieldMapperTheme.d.ts +1 -1
  24. package/dist/react/fieldMapperTheme.d.ts.map +1 -1
  25. package/dist/react/fieldMapperTransforms.d.ts +7 -0
  26. package/dist/react/fieldMapperTransforms.d.ts.map +1 -0
  27. package/dist/react/fieldMapperTypes.d.ts +11 -1
  28. package/dist/react/fieldMapperTypes.d.ts.map +1 -1
  29. package/dist/react/useFieldMapper.d.ts.map +1 -1
  30. package/dist/react.d.ts +2 -1
  31. package/dist/react.d.ts.map +1 -1
  32. package/dist/react.js +741 -658
  33. package/dist/react.js.map +1 -1
  34. package/dist/resolvedSources.d.ts.map +1 -1
  35. package/dist/types.d.ts +20 -3
  36. package/dist/types.d.ts.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoMap-Dh9SiWhT.js","names":[],"sources":["../src/relationLookup.ts","../src/classifyUrl.ts","../src/resolvedSources.ts","../src/applyMapping.ts","../src/edgeMapping.ts","../src/autoMap.ts"],"sourcesContent":["import type {\n FieldMapping,\n LookupEntry,\n MappingLookups,\n SourceNode,\n TargetProperty,\n} from './types'\n\n/**\n * True when the target expects a Seed relation uid (or list of uids)\n * rather than a copied scalar string.\n */\nexport function isRelationLookupTarget(target: TargetProperty): boolean {\n if (target.dataType === 'Relation') return true\n if (target.dataType === 'List') {\n return target.refValueType === 'Relation' || Boolean(target.ref)\n }\n return false\n}\n\n/** Trim and collapse internal whitespace for lookup dictionary keys. */\nexport function normalizeLookupKey(raw: string): string {\n return raw.replace(/\\s+/g, ' ').trim()\n}\n\n/** Normalized sample string for a source node (value, then label). */\nexport function sampleValueFromSource(source: SourceNode | undefined): string {\n if (!source) return ''\n return normalizeLookupKey(source.value || source.label)\n}\n\n/**\n * Shape a looked-up uid value for the target dataType.\n * Relation → single string; List → string[].\n */\nexport function shapeLookupValue(\n mapped: string | string[],\n target: TargetProperty,\n): string | string[] {\n if (target.dataType === 'List') {\n if (Array.isArray(mapped)) {\n return mapped.map((u) => String(u).trim()).filter(Boolean)\n }\n const one = String(mapped).trim()\n return one ? [one] : []\n }\n // Relation (or any non-List lookup target): single uid\n if (Array.isArray(mapped)) {\n return String(mapped[0] ?? '').trim()\n }\n return String(mapped).trim()\n}\n\n/** Entries stored on a lookup edge. Missing `lookup` is an empty assignment. */\nexport function lookupEntriesFromMapping(\n mapping: FieldMapping | undefined,\n): LookupEntry[] {\n return mapping?.lookup?.entries ?? []\n}\n\n/**\n * First entry whose normalized `value` matches `rawValue`.\n * Empty / whitespace-only refs are ignored.\n */\nexport function lookupRefFromEntries(\n entries: LookupEntry[] | undefined,\n rawValue: string,\n): string | undefined {\n const key = normalizeLookupKey(rawValue)\n if (!key || !entries?.length) return undefined\n for (const entry of entries) {\n if (normalizeLookupKey(entry.value) !== key) continue\n const ref = String(entry.ref ?? '').trim()\n if (ref) return ref\n }\n return undefined\n}\n\n/**\n * @deprecated Document-level table. Prefer `lookupRefFromEntries`.\n */\nexport function lookupRefFromTable(\n lookups: MappingLookups | undefined,\n propertyName: string,\n rawKey: string,\n): string | string[] | undefined {\n if (!lookups) return undefined\n const table = lookups[propertyName]\n if (!table) return undefined\n if (Object.prototype.hasOwnProperty.call(table, rawKey)) {\n return table[rawKey]\n }\n return undefined\n}\n\n/**\n * Resolve a lookup ref: edge entries first, then deprecated document table.\n */\nexport function resolveLookupMapped(\n mapping: FieldMapping,\n rawValue: string,\n lookups?: MappingLookups,\n): string | string[] | undefined {\n const key = normalizeLookupKey(rawValue)\n const fromEntries = lookupRefFromEntries(mapping.lookup?.entries, key)\n if (fromEntries !== undefined) return fromEntries\n return lookupRefFromTable(lookups, mapping.propertyName, key)\n}\n\nexport function withLookupEntries(\n edge: FieldMapping,\n entries: LookupEntry[],\n): FieldMapping {\n if (entries.length === 0) {\n if (!edge.lookup) return edge\n const { lookup: _lookup, ...rest } = edge\n return rest\n }\n return { ...edge, lookup: { entries } }\n}\n\n/** Drop `lookup` when the edge is no longer a lookup job. */\nexport function stripLookup(edge: FieldMapping): FieldMapping {\n if (!edge.lookup) return edge\n const { lookup: _lookup, ...rest } = edge\n return rest\n}\n","import type { UrlMediaClass } from './types'\n\nexport type ClassifyUrlInput = {\n url: string\n contentType?: string | null\n}\n\nfunction normalizeMime(contentType: string): string {\n return contentType.split(';')[0]?.trim().toLowerCase() ?? ''\n}\n\nfunction classFromMime(mime: string): UrlMediaClass | null {\n if (!mime) return null\n if (mime.startsWith('image/')) return 'image'\n if (mime.startsWith('audio/')) return 'audio'\n if (mime.startsWith('video/')) return 'video'\n if (\n mime === 'text/html' ||\n mime === 'application/xhtml+xml' ||\n mime === 'application/xhtml'\n ) {\n return 'html'\n }\n return null\n}\n\nfunction pathFromUrl(url: string): string {\n const trimmed = url.trim()\n try {\n const u = new URL(trimmed)\n return u.pathname.toLowerCase()\n } catch {\n const noQuery = trimmed.split('?')[0]?.split('#')[0] ?? trimmed\n return noQuery.toLowerCase()\n }\n}\n\nfunction classFromPath(pathname: string): UrlMediaClass {\n if (/\\.(html?|xhtml|php|asp|aspx|jsp)$/i.test(pathname)) return 'html'\n if (/\\.(jpe?g|png|gif|webp|avif|svg|bmp|ico|tiff?)$/i.test(pathname)) {\n return 'image'\n }\n if (/\\.(mp3|m4a|aac|ogg|oga|opus|wav|flac|aiff?)$/i.test(pathname)) {\n return 'audio'\n }\n if (/\\.(mp4|m4v|webm|ogv|mov|avi|mkv)$/i.test(pathname)) return 'video'\n return 'unknown'\n}\n\n/**\n * Pure MIME / URL-shape classifier for import mapping.\n * Prefer `contentType` when present; fall back to path extension.\n * No I/O. Distinct from `@seedprotocol/sdk` `classifyMediaRef` (Seed ref identity).\n */\nexport function classifyUrl(input: ClassifyUrlInput): UrlMediaClass {\n const url = typeof input.url === 'string' ? input.url.trim() : ''\n if (!url) return 'unknown'\n\n if (input.contentType) {\n const fromMime = classFromMime(normalizeMime(String(input.contentType)))\n if (fromMime) return fromMime\n }\n\n return classFromPath(pathFromUrl(url))\n}\n\n/** True when the string looks like an absolute http(s) / blob / data URL. */\nexport function looksLikeUrl(value: string): boolean {\n const v = value.trim().toLowerCase()\n return (\n v.startsWith('http://') ||\n v.startsWith('https://') ||\n v.startsWith('blob:') ||\n v.startsWith('data:')\n )\n}\n","import { classifyUrl, looksLikeUrl } from './classifyUrl'\nimport type {\n FieldMapping,\n ResolveJob,\n SourceNode,\n UrlMediaClass,\n} from './types'\n\nexport const RESOLVE_EXTRACT_SUFFIX = '@extract'\nexport const RESOLVE_FILE_SUFFIX = '@file'\n\nfunction contentTypeFromMeta(meta?: Record<string, unknown>): string | undefined {\n if (!meta) return undefined\n const ct = meta.contentType ?? meta.type\n return typeof ct === 'string' && ct.trim() ? ct.trim() : undefined\n}\n\nfunction mediaClassFromSource(source: SourceNode): UrlMediaClass {\n const metaClass = source.meta?.class\n if (\n metaClass === 'html' ||\n metaClass === 'image' ||\n metaClass === 'audio' ||\n metaClass === 'video' ||\n metaClass === 'unknown'\n ) {\n return metaClass\n }\n const url =\n typeof source.meta?.url === 'string' && source.meta.url.trim()\n ? source.meta.url.trim()\n : source.value\n return classifyUrl({\n url,\n contentType: contentTypeFromMeta(source.meta),\n })\n}\n\nfunction isUrlCandidate(source: SourceNode): boolean {\n if (source.kind === 'resolved') return false\n if (source.kind === 'full' || source.kind === 'section') return false\n const url =\n typeof source.meta?.url === 'string' && source.meta.url.trim()\n ? source.meta.url.trim()\n : source.value\n return looksLikeUrl(url)\n}\n\n/**\n * Parse a package-owned derived source id (`origin@extract` / `origin@file`).\n */\nexport function parseResolvedSourceId(\n sourceId: string,\n): { originId: string; resolve: ResolveJob } | null {\n if (sourceId.endsWith(RESOLVE_EXTRACT_SUFFIX)) {\n return {\n originId: sourceId.slice(0, -RESOLVE_EXTRACT_SUFFIX.length),\n resolve: 'extract',\n }\n }\n if (sourceId.endsWith(RESOLVE_FILE_SUFFIX)) {\n return {\n originId: sourceId.slice(0, -RESOLVE_FILE_SUFFIX.length),\n resolve: 'file',\n }\n }\n return null\n}\n\n/**\n * Normalize a UI selection (possibly a derived `@extract` / `@file` node)\n * into a persistable FieldMapping with `resolve` on the origin source.\n */\nexport function normalizeMappingFromSourceId(\n sourceId: string,\n propertyName: string,\n): FieldMapping {\n const parsed = parseResolvedSourceId(sourceId)\n if (!parsed) {\n return { sourceId, propertyName }\n }\n return {\n sourceId: parsed.originId,\n propertyName,\n resolve: parsed.resolve,\n }\n}\n\n/**\n * Stable display id for a derived resolve candidate.\n */\nexport function resolvedSourceId(originId: string, job: ResolveJob): string {\n if (job === 'extract') return `${originId}${RESOLVE_EXTRACT_SUFFIX}`\n if (job === 'file') return `${originId}${RESOLVE_FILE_SUFFIX}`\n return originId\n}\n\n/**\n * Expand URL-classifiable sources with package-owned extract/file candidates\n * for FieldMapper / autoMap. Original nodes are preserved.\n *\n * Prefer mapping derived nodes in the UI; persist via\n * `normalizeMappingFromSourceId` so documents store origin + `resolve`.\n */\nexport function buildResolvedSourceNodes(sources: SourceNode[]): SourceNode[] {\n const out: SourceNode[] = [...sources]\n const existing = new Set(sources.map((s) => s.id))\n\n for (const source of sources) {\n if (!isUrlCandidate(source)) continue\n\n const url =\n typeof source.meta?.url === 'string' && source.meta.url.trim()\n ? source.meta.url.trim()\n : source.value.trim()\n const contentType = contentTypeFromMeta(source.meta)\n const mediaClass = mediaClassFromSource(source)\n\n const extractId = resolvedSourceId(source.id, 'extract')\n if (!existing.has(extractId)) {\n out.push({\n id: extractId,\n label: `${source.label} → extract HTML`,\n kind: 'resolved',\n value: url,\n meta: {\n originId: source.id,\n resolve: 'extract' satisfies ResolveJob,\n class: 'html' satisfies UrlMediaClass,\n contentType,\n url,\n },\n })\n existing.add(extractId)\n }\n\n const fileId = resolvedSourceId(source.id, 'file')\n if (!existing.has(fileId)) {\n out.push({\n id: fileId,\n label: `${source.label} → file`,\n kind: 'resolved',\n value: url,\n meta: {\n originId: source.id,\n resolve: 'file' satisfies ResolveJob,\n class: mediaClass,\n contentType,\n url,\n },\n })\n existing.add(fileId)\n }\n }\n\n return out\n}\n\n/**\n * Look up the origin source for a mapping (handles resolve edges).\n */\nexport function resolveMappingSource(\n sources: SourceNode[],\n mapping: FieldMapping,\n): SourceNode | undefined {\n const byId = new Map(sources.map((s) => [s.id, s]))\n if (!mapping.sourceId) return undefined\n const direct = byId.get(mapping.sourceId)\n if (direct) return direct\n if (mapping.resolve) {\n const derived = byId.get(resolvedSourceId(mapping.sourceId, mapping.resolve))\n if (derived) return derived\n }\n return undefined\n}\n","import {\n isRelationLookupTarget,\n normalizeLookupKey,\n resolveLookupMapped,\n shapeLookupValue,\n} from './relationLookup'\nimport { resolveMappingSource } from './resolvedSources'\nimport type {\n ApplyMappingAsyncResult,\n FieldMapping,\n MappingLookups,\n PropertyBag,\n ResolveCallback,\n ResolveContext,\n SourceNode,\n TargetProperty,\n UrlMediaClass,\n} from './types'\n\n/**\n * Coerce a raw string value to the Seed model property dataType.\n */\nexport function coerceValue(rawValue: string, dataType: string): unknown {\n if (dataType === 'Number') {\n return parseFloat(String(rawValue)) || 0\n }\n if (dataType === 'Boolean') {\n return (\n rawValue === 'true' ||\n rawValue === '1' ||\n String(rawValue).toLowerCase() === 'yes'\n )\n }\n if (dataType === 'Json') {\n try {\n return JSON.parse(rawValue)\n } catch {\n return rawValue\n }\n }\n if (dataType === 'Date') {\n const d = new Date(String(rawValue))\n return Number.isNaN(d.getTime()) ? rawValue : d.getTime()\n }\n return String(rawValue ?? '')\n}\n\nfunction coerceResolved(raw: unknown, dataType: string): unknown {\n if (typeof raw === 'string') {\n return coerceValue(raw, dataType)\n }\n if (raw == null) {\n return coerceValue('', dataType)\n }\n // Host may return seed refs, blobs, or already-shaped values for File/Image.\n if (\n dataType === 'Image' ||\n dataType === 'File' ||\n dataType === 'Relation' ||\n dataType === 'List' ||\n dataType === 'Json'\n ) {\n return raw\n }\n return coerceValue(String(raw), dataType)\n}\n\nfunction urlFromSource(source: SourceNode): string {\n if (typeof source.meta?.url === 'string' && source.meta.url.trim()) {\n return source.meta.url.trim()\n }\n return (source.value || source.label).trim()\n}\n\nfunction contentTypeFromSource(source: SourceNode): string | undefined {\n const ct = source.meta?.contentType ?? source.meta?.type\n return typeof ct === 'string' && ct.trim() ? ct.trim() : undefined\n}\n\nfunction classFromSource(source: SourceNode): UrlMediaClass | undefined {\n const c = source.meta?.class\n if (\n c === 'html' ||\n c === 'image' ||\n c === 'audio' ||\n c === 'video' ||\n c === 'unknown'\n ) {\n return c\n }\n return undefined\n}\n\nfunction applyLookupEdge(\n mapping: FieldMapping,\n source: SourceNode,\n target: TargetProperty,\n lookups: MappingLookups | undefined,\n): { value: string | string[] } | { unmatched: string } {\n const rawValue = normalizeLookupKey(source.value || source.label)\n const mapped = resolveLookupMapped(mapping, rawValue, lookups)\n if (mapped === undefined) {\n return { unmatched: rawValue }\n }\n return { value: shapeLookupValue(mapped, target) }\n}\n\n/**\n * Apply field mappings to produce a property bag for createItem / publish.\n * Missing sources or unknown target properties are skipped (no throw).\n * `resolve: 'extract' | 'file' | 'derive' | 'assemble'` edges are skipped.\n * Use `applyMappingAsync` for extract/file. Derive/assemble stay host-applied.\n * `resolve: 'lookup'` is applied from stored entries (or deprecated document lookups).\n */\nexport function applyMapping(\n sources: SourceNode[],\n mappings: FieldMapping[],\n targets: TargetProperty[],\n options?: { lookups?: MappingLookups },\n): PropertyBag {\n const byId = new Map(sources.map((s) => [s.id, s]))\n const byName = new Map(targets.map((t) => [t.name, t]))\n const properties: PropertyBag = {}\n\n for (const mapping of mappings) {\n if (mapping.resolve && mapping.resolve !== 'lookup') continue\n\n const source = mapping.sourceId ? byId.get(mapping.sourceId) : undefined\n const target = byName.get(mapping.propertyName)\n if (!source || !target) continue\n\n if (mapping.resolve === 'lookup') {\n const result = applyLookupEdge(mapping, source, target, options?.lookups)\n if ('value' in result) {\n properties[mapping.propertyName] = result.value\n }\n continue\n }\n\n // Never copy a raw string onto relation / list-of-relation targets.\n if (isRelationLookupTarget(target)) continue\n\n const raw = source.value || source.label\n properties[mapping.propertyName] = coerceValue(raw, target.dataType)\n }\n\n return properties\n}\n\nexport type ApplyMappingAsyncOptions = {\n /** Required for extract/file edges. Not called for lookup. */\n resolve?: ResolveCallback\n /**\n * String → seed uid dictionaries keyed by property name.\n * @deprecated Prefer `FieldMapping.lookup.entries`. Read as a fallback only.\n */\n lookups?: MappingLookups\n}\n\n/**\n * Async apply: copy+coerce plain edges; apply lookup entries; for extract/file\n * call the host callback then coerce. `derive` / `assemble` are skipped —\n * host apply stays host-owned. Partial success — failed resolve edges\n * are listed in `errors` and omitted from `properties`.\n */\nexport async function applyMappingAsync(\n sources: SourceNode[],\n mappings: FieldMapping[],\n targets: TargetProperty[],\n options: ApplyMappingAsyncOptions = {},\n): Promise<ApplyMappingAsyncResult> {\n const byName = new Map(targets.map((t) => [t.name, t]))\n const properties: PropertyBag = {}\n const errors: ApplyMappingAsyncResult['errors'] = []\n\n for (const mapping of mappings) {\n const target = byName.get(mapping.propertyName)\n if (!target) continue\n\n if (mapping.resolve === 'derive' || mapping.resolve === 'assemble') {\n continue\n }\n\n if (!mapping.resolve) {\n const source = mapping.sourceId\n ? sources.find((s) => s.id === mapping.sourceId)\n : undefined\n if (!source) continue\n if (isRelationLookupTarget(target)) continue\n const raw = source.value || source.label\n properties[mapping.propertyName] = coerceValue(raw, target.dataType)\n continue\n }\n\n if (mapping.resolve === 'lookup') {\n const source = mapping.sourceId\n ? sources.find((s) => s.id === mapping.sourceId)\n : undefined\n if (!source) {\n errors.push({\n sourceId: mapping.sourceId,\n propertyName: mapping.propertyName,\n resolve: 'lookup',\n message: `Source not found: ${mapping.sourceId}`,\n })\n continue\n }\n\n const result = applyLookupEdge(mapping, source, target, options.lookups)\n if ('value' in result) {\n properties[mapping.propertyName] = result.value\n } else {\n errors.push({\n sourceId: mapping.sourceId,\n propertyName: mapping.propertyName,\n resolve: 'lookup',\n message: `No lookup entry for \"${result.unmatched}\"`,\n })\n }\n continue\n }\n\n const source = resolveMappingSource(sources, mapping)\n if (!source) {\n errors.push({\n sourceId: mapping.sourceId,\n propertyName: mapping.propertyName,\n resolve: mapping.resolve,\n message: `Source not found: ${mapping.sourceId}`,\n })\n continue\n }\n\n if (!options.resolve) {\n errors.push({\n sourceId: mapping.sourceId,\n propertyName: mapping.propertyName,\n resolve: mapping.resolve,\n message: `No resolve callback for ${mapping.resolve}`,\n })\n continue\n }\n\n const ctx: ResolveContext = {\n job: mapping.resolve,\n url: urlFromSource(source),\n source,\n target,\n contentType: contentTypeFromSource(source),\n class: classFromSource(source),\n }\n\n try {\n const resolved = await options.resolve(ctx)\n properties[mapping.propertyName] = coerceResolved(resolved, target.dataType)\n } catch (err) {\n errors.push({\n sourceId: mapping.sourceId,\n propertyName: mapping.propertyName,\n resolve: mapping.resolve,\n message: err instanceof Error ? err.message : String(err),\n })\n }\n }\n\n return { properties, errors }\n}\n","import { stripLookup } from './relationLookup'\nimport type { AssembleSpec, DeriveSpec, FieldMapping, ResolveJob } from './types'\n\n/** True when the edge covers a property for coverage / row presence. */\nexport function isPresentEdge(mapping: FieldMapping): boolean {\n if (!mapping.propertyName) return false\n if (mapping.sourceId) return true\n return mapping.resolve === 'derive'\n}\n\n/** Drop empty `sourceId` so derive-only edges do not persist `''`. */\nexport function omitEmptySourceId(edge: FieldMapping): FieldMapping {\n if (edge.sourceId) return edge\n const { sourceId: _sourceId, ...rest } = edge\n return rest\n}\n\nexport function isDeriveKeepOnClear(prev: FieldMapping): boolean {\n return prev.resolve === 'derive' || Boolean(prev.derive)\n}\n\n/** Source-less derive edge after the origin is cleared. */\nexport function clearSourceKeepDerive(prev: FieldMapping): FieldMapping {\n return omitEmptySourceId({\n propertyName: prev.propertyName,\n resolve: 'derive',\n ...(prev.derive ? { derive: prev.derive } : {}),\n })\n}\n\nexport function withDeriveSpec(\n edge: FieldMapping,\n spec: DeriveSpec | null,\n): FieldMapping {\n if (!spec) {\n if (!edge.derive) return omitEmptySourceId(edge)\n const { derive: _derive, ...rest } = edge\n return omitEmptySourceId(rest)\n }\n return omitEmptySourceId({ ...edge, derive: spec })\n}\n\nexport function withAssembleBlocks(\n edge: FieldMapping,\n blocks: string[],\n): FieldMapping {\n return omitEmptySourceId({ ...edge, assemble: { blocks } })\n}\n\n/**\n * Next edge after a transform change.\n * Copy keeps `derive` (fallback). Assemble keeps `assemble`. Lookup keeps `lookup`.\n */\nexport function applyResolveToEdge(\n prev: FieldMapping,\n nextResolve: ResolveJob | null,\n): FieldMapping {\n const base: FieldMapping = {\n propertyName: prev.propertyName,\n ...(prev.sourceId ? { sourceId: prev.sourceId } : {}),\n }\n\n if (!nextResolve) {\n if (!prev.sourceId && isDeriveKeepOnClear(prev)) {\n return clearSourceKeepDerive(prev)\n }\n if (prev.derive) base.derive = prev.derive\n return omitEmptySourceId(base)\n }\n\n if (nextResolve === 'derive') {\n return omitEmptySourceId({\n ...base,\n resolve: 'derive',\n ...(prev.derive ? { derive: prev.derive } : {}),\n })\n }\n\n if (nextResolve === 'assemble') {\n return omitEmptySourceId({\n ...base,\n resolve: 'assemble',\n ...(prev.assemble ? { assemble: prev.assemble } : {}),\n })\n }\n\n if (nextResolve === 'lookup') {\n return omitEmptySourceId({\n ...base,\n resolve: 'lookup',\n ...(prev.lookup ? { lookup: prev.lookup } : {}),\n })\n }\n\n return omitEmptySourceId({ ...base, resolve: nextResolve })\n}\n\n/**\n * Copy prior `derive` / `assemble` onto a newly connected origin\n * when the next edge did not already set a conflicting job.\n */\nexport function withPreservedExtras(\n next: FieldMapping,\n prev: FieldMapping | undefined,\n): FieldMapping {\n if (!prev) return omitEmptySourceId(stripLookupUnlessLookup(next))\n let out: FieldMapping = { ...next }\n\n if (!out.resolve) {\n if (prev.resolve === 'assemble') {\n out = {\n ...out,\n resolve: 'assemble',\n ...(prev.assemble ? { assemble: prev.assemble } : {}),\n }\n } else if (prev.resolve === 'derive') {\n out = { ...out, resolve: 'derive' }\n }\n }\n\n if (prev.derive && (!out.resolve || out.resolve === 'derive')) {\n out = { ...out, derive: out.derive ?? prev.derive }\n }\n\n if (out.resolve === 'assemble' && prev.assemble && !out.assemble) {\n out = { ...out, assemble: prev.assemble }\n }\n\n return omitEmptySourceId(stripLookupUnlessLookup(out))\n}\n\nfunction stripLookupUnlessLookup(edge: FieldMapping): FieldMapping {\n return edge.resolve === 'lookup' ? edge : stripLookup(edge)\n}\n","import { classifyUrl, looksLikeUrl } from './classifyUrl'\nimport { isRelationLookupTarget } from './relationLookup'\nimport type { FieldMapping, SourceNode, TargetProperty, UrlMediaClass } from './types'\n\nconst FULL_DOC_PROP_NAMES = ['text', 'content', 'body', 'fulltext', 'markdown']\nconst HTML_PROP_NAMES = ['html', 'content', 'body', 'text']\nconst IMAGE_PROP_ALIASES = [\n 'featureimage',\n 'feature_image',\n 'image',\n 'cover',\n 'coverimage',\n]\nconst FILE_PROP_ALIASES = ['file', 'audio', 'video', 'enclosure', 'attachment', 'media']\nconst URL_PROP_ALIASES = ['importurl', 'canonicalurl', 'url', 'link', 'permalink']\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase().replace(/\\s+/g, '').replace(/[:_-]/g, '')\n}\n\nfunction namesMatch(a: string, b: string): boolean {\n const na = normalizeName(a)\n const nb = normalizeName(b)\n return na === nb || na.includes(nb) || nb.includes(na)\n}\n\n/**\n * Sources that fan out to every unused target matching any alias.\n * Keys are normalized source label/id fragments.\n */\nconst FAN_OUT_ALIASES: Record<string, string[]> = {\n link: URL_PROP_ALIASES,\n url: URL_PROP_ALIASES,\n}\n\nfunction fanOutAliasesForSource(source: SourceNode): string[] | undefined {\n if (source.kind === 'resolved') return undefined\n const labelKey = normalizeName(source.label)\n const idKey = normalizeName(source.id.replace(/^rss-/, '').replace(/^fm-/, ''))\n return FAN_OUT_ALIASES[labelKey] ?? FAN_OUT_ALIASES[idKey]\n}\n\nfunction contentTypeFromMeta(meta?: Record<string, unknown>): string | undefined {\n if (!meta) return undefined\n const ct = meta.contentType ?? meta.type\n return typeof ct === 'string' && ct.trim() ? ct.trim() : undefined\n}\n\nfunction mediaClassOf(source: SourceNode): UrlMediaClass {\n const metaClass = source.meta?.class\n if (\n metaClass === 'html' ||\n metaClass === 'image' ||\n metaClass === 'audio' ||\n metaClass === 'video' ||\n metaClass === 'unknown'\n ) {\n return metaClass\n }\n const url =\n typeof source.meta?.url === 'string' && source.meta.url.trim()\n ? source.meta.url.trim()\n : source.value\n return classifyUrl({\n url,\n contentType: contentTypeFromMeta(source.meta),\n })\n}\n\nfunction isRawUrlSource(source: SourceNode): boolean {\n if (source.kind === 'resolved') return false\n if (source.kind === 'full' || source.kind === 'section') return false\n // content:encoded / description HTML bodies are not \"raw URL\" sources\n const labelKey = normalizeName(source.label)\n if (\n labelKey === 'contentencoded' ||\n labelKey === 'content' ||\n labelKey === 'description' ||\n labelKey === 'summary' ||\n labelKey === 'title'\n ) {\n return false\n }\n const url =\n typeof source.meta?.url === 'string' && source.meta.url.trim()\n ? source.meta.url.trim()\n : source.value\n return looksLikeUrl(url) && !url.trim().includes('<')\n}\n\nfunction isHtmlLikeTarget(target: TargetProperty): boolean {\n const n = normalizeName(target.name)\n return (\n HTML_PROP_NAMES.some((p) => namesMatch(n, p)) ||\n target.dataType === 'Html' ||\n target.dataType === 'Text'\n )\n}\n\nfunction isRichMediaTarget(target: TargetProperty): boolean {\n const n = normalizeName(target.name)\n if (\n target.dataType === 'Image' ||\n target.dataType === 'File' ||\n target.dataType === 'Relation'\n ) {\n return (\n IMAGE_PROP_ALIASES.some((a) => namesMatch(n, a)) ||\n FILE_PROP_ALIASES.some((a) => namesMatch(n, a)) ||\n target.dataType === 'Image' ||\n target.dataType === 'File'\n )\n }\n return (\n IMAGE_PROP_ALIASES.some((a) => namesMatch(n, a)) ||\n FILE_PROP_ALIASES.some((a) => namesMatch(n, a))\n )\n}\n\nfunction isUrlOnlyTarget(target: TargetProperty): boolean {\n const n = normalizeName(target.name)\n return URL_PROP_ALIASES.some((a) => namesMatch(n, a))\n}\n\nfunction findImageTarget(\n targets: TargetProperty[],\n usedProps: Set<string>,\n): TargetProperty | undefined {\n return targets.find((p) => {\n if (usedProps.has(p.name)) return false\n const n = normalizeName(p.name)\n return (\n p.dataType === 'Image' ||\n IMAGE_PROP_ALIASES.some((a) => namesMatch(n, a))\n )\n })\n}\n\nfunction findFileTarget(\n targets: TargetProperty[],\n usedProps: Set<string>,\n mediaClass: UrlMediaClass,\n): TargetProperty | undefined {\n return targets.find((p) => {\n if (usedProps.has(p.name)) return false\n const n = normalizeName(p.name)\n if (mediaClass === 'audio' && namesMatch(n, 'audio')) return true\n if (mediaClass === 'video' && namesMatch(n, 'video')) return true\n return p.dataType === 'File' || FILE_PROP_ALIASES.some((a) => namesMatch(n, a))\n })\n}\n\nfunction findHtmlTarget(\n targets: TargetProperty[],\n usedProps: Set<string>,\n): TargetProperty | undefined {\n return targets.find((p) => {\n if (usedProps.has(p.name)) return false\n const n = normalizeName(p.name)\n return (\n p.dataType === 'Html' ||\n HTML_PROP_NAMES.some((alias) => namesMatch(n, alias))\n )\n })\n}\n\n/**\n * Heuristic auto-map: full-document / full-text first, then RSS aliases,\n * URL fan-out (copy only), media file/extract jobs, then fuzzy name match.\n * Never maps a raw URL onto html / Image / File without `resolve`.\n */\nexport function autoMap(\n sources: SourceNode[],\n targets: TargetProperty[],\n): FieldMapping[] {\n const mappings: FieldMapping[] = []\n const usedProps = new Set<string>()\n const usedSources = new Set<string>()\n\n // Skip derived resolve nodes in the main pass; we emit resolve jobs from origins.\n const baseSources = sources.filter((s) => s.kind !== 'resolved')\n\n const fullSource = baseSources.find((s) => s.kind === 'full')\n if (fullSource) {\n const fullDocMatch = targets.find((p) =>\n FULL_DOC_PROP_NAMES.includes(p.name.toLowerCase()),\n )\n if (fullDocMatch) {\n mappings.push({\n sourceId: fullSource.id,\n propertyName: fullDocMatch.name,\n })\n usedProps.add(fullDocMatch.name)\n usedSources.add(fullSource.id)\n }\n }\n\n const rssAliases: Record<string, string[]> = {\n title: ['title', 'name', 'headline'],\n 'content:encoded': ['html', 'content', 'body', 'text'],\n content: ['html', 'content', 'body', 'text'],\n description: ['summary', 'description', 'excerpt'],\n summary: ['summary', 'description', 'excerpt'],\n featureimage: ['featureimage', 'feature_image', 'image', 'cover'],\n feature_image: ['featureimage', 'feature_image', 'image', 'cover'],\n link: ['url', 'link', 'permalink'],\n creator: ['author', 'authors', 'creator', 'byline'],\n author: ['author', 'authors', 'creator', 'byline'],\n }\n\n // Prefer full-text RSS → html (copy) before URL extract\n for (const source of baseSources) {\n if (usedSources.has(source.id)) continue\n const labelKey = normalizeName(source.label)\n const idKey = source.id.replace(/^rss-/, '').replace(/^fm-/, '')\n if (\n labelKey === 'contentencoded' ||\n normalizeName(idKey) === 'contentencoded' ||\n (labelKey === 'content' && source.value.includes('<'))\n ) {\n const htmlTarget = findHtmlTarget(targets, usedProps)\n if (htmlTarget) {\n mappings.push({ sourceId: source.id, propertyName: htmlTarget.name })\n usedProps.add(htmlTarget.name)\n usedSources.add(source.id)\n }\n }\n }\n\n for (const source of baseSources) {\n if (usedSources.has(source.id)) continue\n\n const fanOutAliases = fanOutAliasesForSource(source)\n if (fanOutAliases) {\n for (const target of targets) {\n if (usedProps.has(target.name)) continue\n if (isRichMediaTarget(target) && !isUrlOnlyTarget(target)) continue\n if (isHtmlLikeTarget(target) && !isUrlOnlyTarget(target)) {\n // Do not fan raw link into html — handled later as extract if needed\n const n = normalizeName(target.name)\n if (n === 'html' || target.dataType === 'Html') continue\n }\n const matches = fanOutAliases.some((alias) =>\n namesMatch(target.name, alias),\n )\n if (matches) {\n mappings.push({ sourceId: source.id, propertyName: target.name })\n usedProps.add(target.name)\n }\n }\n continue\n }\n\n // Media URL sources → resolve:file onto Image/File targets\n if (isRawUrlSource(source)) {\n const mediaClass = mediaClassOf(source)\n if (mediaClass === 'image') {\n const imageTarget = findImageTarget(targets, usedProps)\n if (imageTarget) {\n mappings.push({\n sourceId: source.id,\n propertyName: imageTarget.name,\n resolve: 'file',\n })\n usedProps.add(imageTarget.name)\n usedSources.add(source.id)\n continue\n }\n }\n if (mediaClass === 'audio' || mediaClass === 'video') {\n const fileTarget = findFileTarget(targets, usedProps, mediaClass)\n if (fileTarget) {\n mappings.push({\n sourceId: source.id,\n propertyName: fileTarget.name,\n resolve: 'file',\n })\n usedProps.add(fileTarget.name)\n usedSources.add(source.id)\n continue\n }\n }\n // Unknown / html-class URLs: do not map onto rich media without resolve\n // (extract handled in a later pass for link-like sources)\n }\n\n const labelKey = normalizeName(source.label)\n const idKey = source.id.replace(/^rss-/, '').replace(/^fm-/, '')\n const aliasKeys = [\n ...(rssAliases[source.label] ?? []),\n ...(rssAliases[idKey] ?? []),\n ...(rssAliases[labelKey] ?? []),\n ]\n\n let match: TargetProperty | undefined\n\n for (const alias of aliasKeys) {\n match = targets.find(\n (p) => !usedProps.has(p.name) && namesMatch(p.name, alias),\n )\n if (match) break\n }\n\n if (!match) {\n match = targets.find(\n (p) =>\n !usedProps.has(p.name) &&\n (namesMatch(p.name, source.label) || namesMatch(p.name, idKey)),\n )\n }\n\n if (match) {\n // Block raw URL → html / image / file without resolve\n if (\n isRawUrlSource(source) &&\n (isHtmlLikeTarget(match) || isRichMediaTarget(match)) &&\n !isUrlOnlyTarget(match)\n ) {\n // skip — extract / file jobs handled separately\n } else if (\n isRawUrlSource(source) &&\n mediaClassOf(source) === 'image' &&\n isRichMediaTarget(match)\n ) {\n mappings.push({\n sourceId: source.id,\n propertyName: match.name,\n resolve: 'file',\n })\n usedProps.add(match.name)\n usedSources.add(source.id)\n } else if (isRelationLookupTarget(match)) {\n mappings.push({\n sourceId: source.id,\n propertyName: match.name,\n resolve: 'lookup',\n })\n usedProps.add(match.name)\n usedSources.add(source.id)\n } else {\n mappings.push({ sourceId: source.id, propertyName: match.name })\n usedProps.add(match.name)\n usedSources.add(source.id)\n }\n }\n }\n\n // If no HTML body filled, prefer extract from link/permalink\n const htmlStillFree = findHtmlTarget(targets, usedProps)\n if (htmlStillFree) {\n const linkSource = baseSources.find((s) => {\n if (usedSources.has(s.id) && !fanOutAliasesForSource(s)) return false\n const labelKey = normalizeName(s.label)\n const idKey = normalizeName(s.id.replace(/^rss-/, '').replace(/^fm-/, ''))\n return (\n (labelKey === 'link' ||\n labelKey === 'url' ||\n idKey === 'link' ||\n idKey === 'url' ||\n labelKey === 'permalink') &&\n looksLikeUrl(s.value)\n )\n })\n if (linkSource) {\n mappings.push({\n sourceId: linkSource.id,\n propertyName: htmlStillFree.name,\n resolve: 'extract',\n })\n usedProps.add(htmlStillFree.name)\n }\n }\n\n return mappings\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { DeriveSpec, FieldMapping, ResolveJob } from './types';
2
+ /** True when the edge covers a property for coverage / row presence. */
3
+ export declare function isPresentEdge(mapping: FieldMapping): boolean;
4
+ /** Drop empty `sourceId` so derive-only edges do not persist `''`. */
5
+ export declare function omitEmptySourceId(edge: FieldMapping): FieldMapping;
6
+ export declare function isDeriveKeepOnClear(prev: FieldMapping): boolean;
7
+ /** Source-less derive edge after the origin is cleared. */
8
+ export declare function clearSourceKeepDerive(prev: FieldMapping): FieldMapping;
9
+ export declare function withDeriveSpec(edge: FieldMapping, spec: DeriveSpec | null): FieldMapping;
10
+ export declare function withAssembleBlocks(edge: FieldMapping, blocks: string[]): FieldMapping;
11
+ /**
12
+ * Next edge after a transform change.
13
+ * Copy keeps `derive` (fallback). Assemble keeps `assemble`. Lookup keeps `lookup`.
14
+ */
15
+ export declare function applyResolveToEdge(prev: FieldMapping, nextResolve: ResolveJob | null): FieldMapping;
16
+ /**
17
+ * Copy prior `derive` / `assemble` onto a newly connected origin
18
+ * when the next edge did not already set a conflicting job.
19
+ */
20
+ export declare function withPreservedExtras(next: FieldMapping, prev: FieldMapping | undefined): FieldMapping;
21
+ //# sourceMappingURL=edgeMapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edgeMapping.d.ts","sourceRoot":"","sources":["../src/edgeMapping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEjF,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAI5D;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAIlE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAE/D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAMtE;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,UAAU,GAAG,IAAI,GACtB,YAAY,CAOd;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EAAE,GACf,YAAY,CAEd;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,YAAY,CAuCd;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,GAAG,SAAS,GAC7B,YAAY,CAyBd"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export type { SourceKind, SourceNode, TargetProperty, FieldMapping, LookupEntry, MappingDocument, MappingLookups, PropertyBag, ResolveJob, UrlMediaClass, ResolveContext, ResolveCallback, ApplyMappingError, ApplyMappingAsyncResult, } from './types';
1
+ export type { SourceKind, SourceNode, TargetProperty, FieldMapping, LookupEntry, MappingDocument, MappingLookups, PropertyBag, ResolveJob, DeriveSpec, AssembleSpec, UrlMediaClass, ResolveContext, ResolveCallback, ApplyMappingError, ApplyMappingAsyncResult, } from './types';
2
2
  export { applyMapping, applyMappingAsync, coerceValue } from './applyMapping';
3
+ export { isPresentEdge, omitEmptySourceId, applyResolveToEdge, withPreservedExtras, withDeriveSpec, withAssembleBlocks, clearSourceKeepDerive, isDeriveKeepOnClear, } from './edgeMapping';
3
4
  export type { ApplyMappingAsyncOptions } from './applyMapping';
4
5
  export { isRelationLookupTarget, normalizeLookupKey, sampleValueFromSource, lookupEntriesFromMapping, lookupRefFromEntries, resolveLookupMapped, shapeLookupValue, withLookupEntries, } from './relationLookup';
5
6
  export { autoMap } from './autoMap';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC7E,YAAY,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { S as e, _ as t, a as n, b as r, c as i, d as a, f as o, g as s, h as c, i as l, l as u, m as d, n as f, o as p, p as m, r as h, s as g, t as _, u as v, v as y, y as b } from "./autoMap-OMvtOG0S.js";
2
- import x from "rss-parser";
1
+ import { A as e, C as t, D as n, E as r, O as i, S as a, T as o, _ as s, a as c, b as l, c as u, d, f, g as p, h as m, i as h, l as g, m as _, n as v, o as y, p as b, r as x, s as S, t as C, u as w, v as T, w as E, x as D, y as O } from "./autoMap-Dh9SiWhT.js";
2
+ import k from "rss-parser";
3
3
  //#region src/adapters/markdown.ts
4
- var S = "section-full";
5
- function C(e) {
4
+ var A = "section-full";
5
+ function j(e) {
6
6
  try {
7
7
  let t = e.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
8
8
  if (!t) return {
@@ -45,7 +45,7 @@ function C(e) {
45
45
  };
46
46
  }
47
47
  }
48
- function w(e) {
48
+ function M(e) {
49
49
  let t = e.split("\n"), n = [], r = null;
50
50
  for (let e of t) {
51
51
  let t = e.match(/^## (.+)/), i = e.match(/^# (.+)/);
@@ -63,8 +63,8 @@ function w(e) {
63
63
  }
64
64
  return r && n.push(r), n;
65
65
  }
66
- function T(e) {
67
- let t = C(e), n = w(t.body), r = [];
66
+ function N(e) {
67
+ let t = j(e), n = M(t.body), r = [];
68
68
  for (let e of t.frontmatter) r.push({
69
69
  id: e.id,
70
70
  label: e.key,
@@ -73,7 +73,7 @@ function T(e) {
73
73
  meta: { valueType: e.valueType }
74
74
  });
75
75
  r.push({
76
- id: S,
76
+ id: A,
77
77
  label: "Full document",
78
78
  kind: "full",
79
79
  value: t.body
@@ -92,14 +92,14 @@ function T(e) {
92
92
  }
93
93
  //#endregion
94
94
  //#region src/adapters/rss.ts
95
- function E(e) {
95
+ function P(e) {
96
96
  try {
97
97
  return JSON.parse(JSON.stringify(e));
98
98
  } catch {
99
99
  return { ...e };
100
100
  }
101
101
  }
102
- var D = new x({ customFields: { item: [
102
+ var F = new k({ customFields: { item: [
103
103
  "featureImage",
104
104
  "feature_image",
105
105
  "content:encoded",
@@ -108,16 +108,16 @@ var D = new x({ customFields: { item: [
108
108
  ["media:content", "mediaContent"],
109
109
  ["media:thumbnail", "mediaThumbnail"]
110
110
  ] } });
111
- async function O(e) {
112
- let t = await D.parseString(e);
111
+ async function I(e) {
112
+ let t = await F.parseString(e);
113
113
  return {
114
114
  title: t.title,
115
115
  link: t.link,
116
116
  description: t.description,
117
- items: (t.items ?? []).map(E)
117
+ items: (t.items ?? []).map(P)
118
118
  };
119
119
  }
120
- function k(e) {
120
+ function L(e) {
121
121
  if (e == null) return null;
122
122
  if (typeof e == "string") {
123
123
  let t = e.trim();
@@ -141,7 +141,7 @@ function k(e) {
141
141
  }
142
142
  return null;
143
143
  }
144
- function A(e) {
144
+ function R(e) {
145
145
  if (e == null) return null;
146
146
  if (typeof e == "string") {
147
147
  let t = e.trim();
@@ -157,13 +157,13 @@ function A(e) {
157
157
  length: a ? String(a).trim() : void 0
158
158
  };
159
159
  }
160
- function j(e) {
160
+ function z(e) {
161
161
  if (e == null) return [];
162
- if (Array.isArray(e)) return e.map(A).filter((e) => e != null);
163
- let t = A(e);
162
+ if (Array.isArray(e)) return e.map(R).filter((e) => e != null);
163
+ let t = R(e);
164
164
  return t ? [t] : [];
165
165
  }
166
- var M = /* @__PURE__ */ new Set([
166
+ var B = /* @__PURE__ */ new Set([
167
167
  "enclosure",
168
168
  "enclosures",
169
169
  "media:content",
@@ -171,10 +171,10 @@ var M = /* @__PURE__ */ new Set([
171
171
  "media:thumbnail",
172
172
  "mediaThumbnail"
173
173
  ]);
174
- function N(e, t, n, r, i) {
174
+ function V(e, t, n, r, i) {
175
175
  if (t.has(n)) return;
176
176
  t.add(n);
177
- let a = o({
177
+ let a = l({
178
178
  url: i.url,
179
179
  contentType: i.contentType
180
180
  });
@@ -191,43 +191,43 @@ function N(e, t, n, r, i) {
191
191
  }
192
192
  });
193
193
  }
194
- function P(e) {
194
+ function H(e) {
195
195
  let t = [], n = /* @__PURE__ */ new Set(), r = 0;
196
196
  for (let [i, a] of Object.entries(e)) {
197
197
  if (i === "items" || i.startsWith("$")) continue;
198
- if (M.has(i)) {
199
- let e = j(a);
200
- for (let a of e) N(t, n, i === "enclosure" || i === "enclosures" ? `rss-enclosure-${r}` : `rss-${i}-${r}`, i === "enclosure" || i === "enclosures" ? `enclosure[${r}]` : `${i}[${r}]`, a), r += 1;
198
+ if (B.has(i)) {
199
+ let e = z(a);
200
+ for (let a of e) V(t, n, i === "enclosure" || i === "enclosures" ? `rss-enclosure-${r}` : `rss-${i}-${r}`, i === "enclosure" || i === "enclosures" ? `enclosure[${r}]` : `${i}[${r}]`, a), r += 1;
201
201
  continue;
202
202
  }
203
- let e = k(a);
203
+ let e = L(a);
204
204
  if (e == null || n.has(i)) continue;
205
205
  n.add(i);
206
- let s = {
206
+ let o = {
207
207
  id: `rss-${i}`,
208
208
  label: i,
209
209
  kind: "rssField",
210
210
  value: e
211
211
  };
212
- (i === "featureImage" || i === "feature_image") && /^https?:\/\//i.test(e) && (s.meta = {
212
+ (i === "featureImage" || i === "feature_image") && /^https?:\/\//i.test(e) && (o.meta = {
213
213
  url: e,
214
- class: o({ url: e })
215
- }), t.push(s);
214
+ class: l({ url: e })
215
+ }), t.push(o);
216
216
  }
217
217
  return t;
218
218
  }
219
- async function F(e) {
220
- let t = await O(e);
219
+ async function U(e) {
220
+ let t = await I(e);
221
221
  return {
222
222
  channel: {
223
223
  title: t.title,
224
224
  link: t.link,
225
225
  description: t.description
226
226
  },
227
- items: t.items.map((e) => P(e))
227
+ items: t.items.map((e) => H(e))
228
228
  };
229
229
  }
230
230
  //#endregion
231
- export { n as RESOLVE_EXTRACT_SUFFIX, p as RESOLVE_FILE_SUFFIX, S as SECTION_FULL_ID, f as applyMapping, h as applyMappingAsync, _ as autoMap, g as buildResolvedSourceNodes, o as classifyUrl, l as coerceValue, d as isRelationLookupTarget, m as looksLikeUrl, c as lookupEntriesFromMapping, s as lookupRefFromEntries, T as markdownToSources, t as normalizeLookupKey, i as normalizeMappingFromSourceId, w as parseMarkdownSections, C as parseMarkdownWithFrontmatter, u as parseResolvedSourceId, y as resolveLookupMapped, v as resolveMappingSource, a as resolvedSourceId, P as rssItemToSources, F as rssXmlToSources, b as sampleValueFromSource, r as shapeLookupValue, e as withLookupEntries };
231
+ export { b as RESOLVE_EXTRACT_SUFFIX, _ as RESOLVE_FILE_SUFFIX, A as SECTION_FULL_ID, w as applyMapping, d as applyMappingAsync, v as applyResolveToEdge, C as autoMap, m as buildResolvedSourceNodes, l as classifyUrl, x as clearSourceKeepDerive, f as coerceValue, h as isDeriveKeepOnClear, c as isPresentEdge, a as isRelationLookupTarget, D as looksLikeUrl, t as lookupEntriesFromMapping, E as lookupRefFromEntries, N as markdownToSources, o as normalizeLookupKey, p as normalizeMappingFromSourceId, y as omitEmptySourceId, M as parseMarkdownSections, j as parseMarkdownWithFrontmatter, s as parseResolvedSourceId, r as resolveLookupMapped, T as resolveMappingSource, O as resolvedSourceId, H as rssItemToSources, U as rssXmlToSources, n as sampleValueFromSource, i as shapeLookupValue, S as withAssembleBlocks, u as withDeriveSpec, e as withLookupEntries, g as withPreservedExtras };
232
232
 
233
233
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  import React, { type ReactNode } from 'react';
2
2
  import type { FieldMapping, MappingLookups, SourceNode, TargetProperty } from '../types';
3
3
  import type { FieldMapperComponents, FieldMapperSlot, FieldMapperSlots } from './fieldMapperSlots';
4
- import type { FieldMapperDefaultRows, FieldMapperLayout, FieldMapperLookupRow, FieldMapperRow, FieldMapperRowKey } from './fieldMapperTypes';
4
+ import type { FieldMapperDefaultRows, FieldMapperLayout, FieldMapperLookupRow, FieldMapperRow, FieldMapperRowKey, FieldMapperTransformOptions } from './fieldMapperTypes';
5
5
  import { type FieldMapperTheme } from './fieldMapperTheme';
6
6
  export { connectionStrokeForIndex, FIELD_MAPPER_PAIR_SLOTS, resolveTheme, ensureThemeInjected, buildThemeCss, wrapInThemeLayer, DEFAULT_THEME_CSS, STRUCTURAL_THEME_CSS, PAINT_THEME_CSS, THEME_STYLE_ID, resetThemeInjectionForTests, type FieldMapperTheme, type ResolvedFieldMapperTheme, } from './fieldMapperTheme';
7
7
  export { slotClass, resolveSlots, showRowPreview, showJsonPreview, SLOT_BASE_CLASS, type FieldMapperSlot, type FieldMapperSlots, type ResolvedFieldMapperSlots, type FieldMapperComponents, type ResolvedFieldMapperComponents, type FieldMapperSelectProps, type FieldMapperButtonProps, type FieldMapperPillProps, } from './fieldMapperSlots';
@@ -80,12 +80,22 @@ export type FieldMapperProps = {
80
80
  * When set, the package uid editor is not mounted. Return `null` when idle.
81
81
  */
82
82
  renderLookup?: (row: FieldMapperLookupRow) => ReactNode;
83
+ /**
84
+ * Host expansion under a row (e.g. assemble stack). Return `null` when idle.
85
+ * Independent of `renderLookup` / `renderRowAccessory`.
86
+ */
87
+ renderRowExpansion?: (row: FieldMapperRow) => ReactNode;
88
+ /**
89
+ * Override the per-row transform list. Defaults are copy / extract / file /
90
+ * lookup, plus assemble on Html targets, plus the current resolve if missing.
91
+ */
92
+ transformOptions?: FieldMapperTransformOptions;
83
93
  };
84
94
  /**
85
95
  * Generic field mapper. Props-driven; no Seed hooks or routing.
86
96
  * Default layout is rows; pass `layout="wires"` only if you still need the
87
97
  * two-pane connector UI (deprecated).
88
98
  */
89
- export declare function FieldMapper({ sources, targets, mappings, onChange, lookups, onLookupsChange, onAutoMap, className, theme, connectionColors, showPreview, layout, rowKey, defaultRows, classNames, components, slots, renderRowAccessory, renderLookup, }: FieldMapperProps): React.JSX.Element;
99
+ export declare function FieldMapper({ sources, targets, mappings, onChange, lookups, onLookupsChange, onAutoMap, className, theme, connectionColors, showPreview, layout, rowKey, defaultRows, classNames, components, slots, renderRowAccessory, renderLookup, renderRowExpansion, transformOptions, }: FieldMapperProps): React.JSX.Element;
90
100
  export default FieldMapper;
91
101
  //# sourceMappingURL=FieldMapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldMapper.d.ts","sourceRoot":"","sources":["../../src/react/FieldMapper.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FieldMapper.d.ts","sourceRoot":"","sources":["../../src/react/FieldMapper.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldMapperWires.d.ts","sourceRoot":"","sources":["../../src/react/FieldMapperWires.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAA;AAKd,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAiC3B,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,KAAK,CAAC,SAAS,CAAA;IAC7D,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,EAAE,wBAAwB,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD,EAAE,CAAC,EAAE,6BAA6B,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,KAAK,EACL,UAAU,EACV,EAIC,GACF,EAAE,qBAAqB,qBAwVvB"}
1
+ {"version":3,"file":"FieldMapperWires.d.ts","sourceRoot":"","sources":["../../src/react/FieldMapperWires.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAA;AAKd,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAkC3B,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,KAAK,CAAC,SAAS,CAAA;IAC7D,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,EAAE,wBAAwB,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD,EAAE,CAAC,EAAE,6BAA6B,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,KAAK,EACL,UAAU,EACV,EAIC,GACF,EAAE,qBAAqB,qBA0VvB"}
@@ -1,7 +1,7 @@
1
1
  import React, { type ReactNode } from 'react';
2
2
  import type { FieldMapping, MappingLookups, SourceNode, TargetProperty } from '../types';
3
3
  import type { FieldMapperSlot, ResolvedFieldMapperComponents, ResolvedFieldMapperSlots } from './fieldMapperSlots';
4
- import type { FieldMapperDefaultRows, FieldMapperLookupRow, FieldMapperRow, UseFieldMapperResult } from './fieldMapperTypes';
4
+ import type { FieldMapperDefaultRows, FieldMapperLookupRow, FieldMapperRow, FieldMapperTransformOptions, UseFieldMapperResult } from './fieldMapperTypes';
5
5
  export type PropertyRowsProps = {
6
6
  sources: SourceNode[];
7
7
  targets: TargetProperty[];
@@ -15,6 +15,8 @@ export type PropertyRowsProps = {
15
15
  ui?: ResolvedFieldMapperComponents;
16
16
  renderRowAccessory?: (row: FieldMapperRow) => ReactNode;
17
17
  renderLookup?: (row: FieldMapperLookupRow) => ReactNode;
18
+ renderRowExpansion?: (row: FieldMapperRow) => ReactNode;
19
+ transformOptions?: FieldMapperTransformOptions;
18
20
  };
19
- export declare function PropertyRows({ sources, targets, mappings, mapper, defaultRows, onLookupsChange, slots, classNames, ui, renderRowAccessory, renderLookup, }: PropertyRowsProps): React.JSX.Element;
21
+ export declare function PropertyRows({ sources, targets, mappings, mapper, defaultRows, onLookupsChange, slots, classNames, ui, renderRowAccessory, renderLookup, renderRowExpansion, transformOptions, }: PropertyRowsProps): React.JSX.Element;
20
22
  //# sourceMappingURL=PropertyRows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyRows.d.ts","sourceRoot":"","sources":["../../src/react/PropertyRows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAiB3B,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAU3B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,WAAW,CAAC,EAAE,sBAAsB,CAAA;IACpC,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,KAAK,EAAE,wBAAwB,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD,EAAE,CAAC,EAAE,6BAA6B,CAAA;IAClC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAA;IACvD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,SAAS,CAAA;CACxD,CAAA;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,WAAiC,EACjC,eAAe,EACf,KAAK,EACL,UAAU,EACV,EAIC,EACD,kBAAkB,EAClB,YAAY,GACb,EAAE,iBAAiB,qBAoUnB"}
1
+ {"version":3,"file":"PropertyRows.d.ts","sourceRoot":"","sources":["../../src/react/PropertyRows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAiB3B,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,2BAA2B,EAC3B,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAQ3B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,WAAW,CAAC,EAAE,sBAAsB,CAAA;IACpC,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,KAAK,EAAE,wBAAwB,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD,EAAE,CAAC,EAAE,6BAA6B,CAAA;IAClC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAA;IACvD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,SAAS,CAAA;IACvD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAA;IACvD,gBAAgB,CAAC,EAAE,2BAA2B,CAAA;CAC/C,CAAA;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,WAAiC,EACjC,eAAe,EACf,KAAK,EACL,UAAU,EACV,EAIC,EACD,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,EAAE,iBAAiB,qBAyVnB"}
@@ -1,7 +1,7 @@
1
1
  import React, { type ReactNode } from 'react';
2
2
  import type { FieldMapping, MappingLookups, SourceNode, TargetProperty } from '../types';
3
3
  import type { FieldMapperSlot, ResolvedFieldMapperComponents, ResolvedFieldMapperSlots } from './fieldMapperSlots';
4
- import type { FieldMapperLookupRow, FieldMapperRow, UseFieldMapperResult } from './fieldMapperTypes';
4
+ import type { FieldMapperLookupRow, FieldMapperRow, FieldMapperTransformOptions, UseFieldMapperResult } from './fieldMapperTypes';
5
5
  export type SourceRowsProps = {
6
6
  sources: SourceNode[];
7
7
  targets: TargetProperty[];
@@ -14,6 +14,8 @@ export type SourceRowsProps = {
14
14
  ui?: ResolvedFieldMapperComponents;
15
15
  renderRowAccessory?: (row: FieldMapperRow) => ReactNode;
16
16
  renderLookup?: (row: FieldMapperLookupRow) => ReactNode;
17
+ renderRowExpansion?: (row: FieldMapperRow) => ReactNode;
18
+ transformOptions?: FieldMapperTransformOptions;
17
19
  };
18
- export declare function SourceRows({ sources, targets, mappings, mapper, onLookupsChange, slots, classNames, ui, renderRowAccessory, renderLookup, }: SourceRowsProps): React.JSX.Element;
20
+ export declare function SourceRows({ sources, targets, mappings, mapper, onLookupsChange, slots, classNames, ui, renderRowAccessory, renderLookup, renderRowExpansion, transformOptions, }: SourceRowsProps): React.JSX.Element;
19
21
  //# sourceMappingURL=SourceRows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SourceRows.d.ts","sourceRoot":"","sources":["../../src/react/SourceRows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAY3B,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAU3B,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,KAAK,EAAE,wBAAwB,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD,EAAE,CAAC,EAAE,6BAA6B,CAAA;IAClC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAA;IACvD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,SAAS,CAAA;CACxD,CAAA;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,EAIC,EACD,kBAAkB,EAClB,YAAY,GACb,EAAE,eAAe,qBA4OjB"}
1
+ {"version":3,"file":"SourceRows.d.ts","sourceRoot":"","sources":["../../src/react/SourceRows.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EAEd,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,eAAe,EACf,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAY3B,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,2BAA2B,EAC3B,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAQ3B,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IACnD,KAAK,EAAE,wBAAwB,CAAA;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAA;IACrD,EAAE,CAAC,EAAE,6BAA6B,CAAA;IAClC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAA;IACvD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,SAAS,CAAA;IACvD,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,SAAS,CAAA;IACvD,gBAAgB,CAAC,EAAE,2BAA2B,CAAA;CAC/C,CAAA;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,EAIC,EACD,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,EAAE,eAAe,qBAsPjB"}
@@ -1,4 +1,4 @@
1
- import type { FieldMapping, LookupEntry, MappingLookups, ResolveJob, SourceNode, TargetProperty } from '../types';
1
+ import type { DeriveSpec, FieldMapping, LookupEntry, MappingLookups, ResolveJob, SourceNode, TargetProperty } from '../types';
2
2
  import type { FieldMapperCoverage, FieldMapperOption, FieldMapperRow, FieldMapperRowState } from './fieldMapperTypes';
3
3
  export declare function truncateSample(s: string, n?: number): string;
4
4
  export declare function formatSourceOptionLabel(source: SourceNode): string;
@@ -41,6 +41,8 @@ export declare function findConflicts(rows: {
41
41
  propertyName?: string;
42
42
  }[]): Set<string>;
43
43
  export declare function attachLookupIfNeeded(edge: FieldMapping, target: TargetProperty | undefined): FieldMapping;
44
+ export declare function applyAssembleBlocksToMappings(mappings: FieldMapping[], rowKey: 'property' | 'source', rowId: string, edgeIds: string[], blocks: string[]): FieldMapping[] | null;
45
+ export declare function applyDeriveToMappings(mappings: FieldMapping[], rowKey: 'property' | 'source', rowId: string, edgeIds: string[], spec: DeriveSpec | null): FieldMapping[] | null;
44
46
  export declare function applyLookupEntriesToMappings(mappings: FieldMapping[], rowKey: 'property' | 'source', rowId: string, edgeIds: string[], entries: LookupEntry[]): FieldMapping[] | null;
45
47
  export declare function upsertPropertyMapping(mappings: FieldMapping[], edge: FieldMapping): FieldMapping[];
46
48
  export declare function clearLookupsForProperties(lookups: MappingLookups, propertyNames: string[]): MappingLookups | null;
@@ -1 +1 @@
1
- {"version":3,"file":"fieldMapperCore.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fieldMapperCore.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperCore.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,cAAc,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAE3B,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAK,GAAG,MAAM,CAIxD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAOlE;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAO7E;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EAAE,GACxB,iBAAiB,EAAE,CAMrB;AAYD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,UAAU,GAAG,IAAI,CAQnB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE,UAAU,GAAG,SAAS,EAC/B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,MAAM,CAsDR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAC7B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,eAAe,EAAE,UAAU,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB,GAAG,mBAAmB,CAmBtB;AAGD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,YAAY,EAAE,GACvB,mBAAmB,CAYrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAexF;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,YAAY,CAQd;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,UAAU,GAAG,QAAQ,EAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,YAAY,EAAE,GAAG,IAAI,CAWvB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,UAAU,GAAG,QAAQ,EAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,UAAU,GAAG,IAAI,GACtB,YAAY,EAAE,GAAG,IAAI,CAsBvB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,EAAE,UAAU,GAAG,QAAQ,EAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,WAAW,EAAE,GACrB,YAAY,EAAE,GAAG,IAAI,CAiBvB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,YAAY,GACjB,YAAY,EAAE,CAIhB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,MAAM,EAAE,GACtB,cAAc,GAAG,IAAI,CAWvB;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB5D;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE,MAAM,GACf;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAoB5D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;CAC1C,GAAG,cAAc,EAAE,CAsCnB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB,GAAG;IAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CA8FrD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAQV;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,mBAAmB,GAAG,QAAQ,GAAG,KAAK,EAC5C,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GACjB,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CASpB"}
@@ -1,6 +1,6 @@
1
1
  import type { ComponentType, MouseEvent, ReactNode } from 'react';
2
2
  import type { FieldMapperLayout } from './fieldMapperTypes';
3
- export type FieldMapperSlot = 'root' | 'toolbar' | 'filter' | 'coverage' | 'autoMapButton' | 'rowList' | 'row' | 'propertyLabel' | 'dataType' | 'sourceSelect' | 'transformSelect' | 'rowAccessory' | 'preview' | 'validation' | 'removeButton' | 'addButton' | 'inspector' | 'lookupEditor' | 'jsonPreview';
3
+ export type FieldMapperSlot = 'root' | 'toolbar' | 'filter' | 'coverage' | 'autoMapButton' | 'rowList' | 'row' | 'propertyLabel' | 'dataType' | 'sourceSelect' | 'transformSelect' | 'rowAccessory' | 'preview' | 'validation' | 'removeButton' | 'addButton' | 'inspector' | 'lookupEditor' | 'rowExpansion' | 'jsonPreview';
4
4
  export type FieldMapperSlots = {
5
5
  autoMap?: boolean;
6
6
  filter?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"fieldMapperSlots.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperSlots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fieldMapperSlots.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperSlots.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export { pairSlot };
14
14
  /** Map public theme prop (including deprecated `unstyled`) to a resolved mode. */
15
15
  export declare function resolveTheme(theme?: FieldMapperTheme): ResolvedFieldMapperTheme;
16
16
  /** Layout / spacing / display rules — no color paint. */
17
- export declare const STRUCTURAL_THEME_CSS = "\n.seed-field-mapper {\n\n --sfm-space-1: 4px;\n --sfm-space-2: 8px;\n --sfm-space-3: 12px;\n --sfm-space-4: 16px;\n --sfm-radius-sm: 4px;\n --sfm-radius-md: 8px;\n --sfm-radius-lg: 12px;\n --sfm-font-family: inherit;\n --sfm-font-mono: ui-monospace, monospace;\n --sfm-font-size-sm: 11px;\n --sfm-font-size-md: 13px;\n --sfm-control-height: 32px;\n --sfm-row-gap: var(--sfm-space-2);\n\n font-family: var(--sfm-font-family);\n border-radius: var(--sfm-radius-lg);\n padding: var(--sfm-space-4);\n}\n.seed-field-mapper * { box-sizing: border-box; }\n.seed-field-mapper .fm-toolbar {\n display: flex;\n gap: var(--sfm-space-2);\n align-items: center;\n margin-bottom: var(--sfm-space-3);\n flex-wrap: wrap;\n}\n.seed-field-mapper .fm-btn {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 6px var(--sfm-space-3);\n cursor: pointer;\n font-size: var(--sfm-font-size-md);\n min-height: var(--sfm-control-height);\n}\n.seed-field-mapper .fm-meta {\n font-size: 12px;\n margin-left: auto;\n}\n.seed-field-mapper .fm-banner {\n font-size: 12px;\n padding: var(--sfm-space-2) 10px;\n border-radius: var(--sfm-radius-md);\n margin-bottom: 10px;\n border: 1px solid;\n}\n.seed-field-mapper .fm-grid {\n position: relative;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 48px;\n min-height: 240px;\n}\n.seed-field-mapper .fm-col-title {\n font-size: var(--sfm-font-size-sm);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-card {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 10px var(--sfm-space-3);\n margin-bottom: var(--sfm-space-2);\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.seed-field-mapper .fm-label {\n font-weight: 600;\n font-size: var(--sfm-font-size-md);\n margin-bottom: var(--sfm-space-1);\n}\n.seed-field-mapper .fm-value {\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.seed-field-mapper .fm-kind {\n font-size: 10px;\n margin-left: 6px;\n}\n.seed-field-mapper .fm-prop-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-dtype {\n font-size: 10px;\n padding: 2px 6px;\n border-radius: var(--sfm-radius-sm);\n border: 1px solid;\n}\n.seed-field-mapper .fm-remove {\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 14px;\n padding: 0 var(--sfm-space-1);\n}\n.seed-field-mapper .fm-svg {\n position: absolute;\n inset: 0;\n pointer-events: none;\n overflow: visible;\n}\n.seed-field-mapper .fm-preview {\n margin-top: var(--sfm-space-3);\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: var(--sfm-space-3);\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n white-space: pre-wrap;\n max-height: 200px;\n overflow: auto;\n}\n.seed-field-mapper details.fm-preview {\n font-family: var(--sfm-font-family);\n white-space: normal;\n max-height: none;\n overflow: visible;\n padding: var(--sfm-space-2) var(--sfm-space-3);\n}\n.seed-field-mapper details.fm-preview > summary {\n cursor: pointer;\n font-size: var(--sfm-font-size-sm);\n list-style: disclosure-closed;\n}\n.seed-field-mapper details.fm-preview[open] > summary {\n list-style: disclosure-open;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-preview-body {\n margin: 0;\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n white-space: pre-wrap;\n max-height: 200px;\n overflow: auto;\n}\n.seed-field-mapper .fm-lookups {\n margin-top: var(--sfm-space-4);\n border-top: 1px solid;\n padding-top: var(--sfm-space-3);\n}\n.seed-field-mapper .fm-row .fm-lookups,\n.seed-field-mapper .fm-lookups--row {\n margin-top: var(--sfm-space-2);\n border-top: none;\n padding-top: 0;\n}\n.seed-field-mapper .fm-row .fm-lookup-block {\n margin-bottom: 0;\n padding: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookups-title {\n font-size: var(--sfm-font-size-sm);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-block {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 10px var(--sfm-space-3);\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-block h4 {\n margin: 0 0 var(--sfm-space-2);\n font-size: var(--sfm-font-size-md);\n font-weight: 600;\n}\n.seed-field-mapper .fm-lookup-hint {\n font-size: var(--sfm-font-size-sm);\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-row {\n display: grid;\n grid-template-columns: 1fr 1.4fr;\n gap: var(--sfm-space-2);\n align-items: center;\n margin-bottom: 6px;\n}\n.seed-field-mapper .fm-lookup-key {\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.seed-field-mapper .fm-lookup-input {\n width: 100%;\n border: 1px solid;\n border-radius: 6px;\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n padding: 6px var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-input:focus {\n outline: none;\n}\n.seed-field-mapper .fm-row-list {\n display: flex;\n flex-direction: column;\n gap: var(--sfm-row-gap);\n}\n.seed-field-mapper .fm-row {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 10px var(--sfm-space-3);\n}\n.seed-field-mapper .fm-row-main {\n display: grid;\n grid-template-columns: minmax(100px, 140px) 1fr auto auto auto;\n gap: var(--sfm-space-2);\n align-items: center;\n}\n.seed-field-mapper .fm-row-main-source {\n grid-template-columns: 1fr auto auto 1fr auto auto;\n}\n.seed-field-mapper .fm-row-accessory {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.seed-field-mapper .fm-row-accessory:empty {\n display: none;\n}\n.seed-field-mapper .fm-row-prop {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n.seed-field-mapper .fm-row-prop-name {\n font-weight: 600;\n font-size: var(--sfm-font-size-md);\n}\n.seed-field-mapper .fm-row-preview {\n margin-top: 6px;\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n}\n.seed-field-mapper .fm-row-flag {\n font-size: var(--sfm-font-size-sm);\n margin-top: var(--sfm-space-1);\n}\n.seed-field-mapper .fm-select {\n width: 100%;\n border: 1px solid;\n border-radius: 6px;\n font-size: 12px;\n padding: 6px var(--sfm-space-2);\n min-width: 0;\n min-height: var(--sfm-control-height);\n}\n.seed-field-mapper .fm-select:focus {\n outline: none;\n}\n.seed-field-mapper .fm-filter {\n display: flex;\n gap: 6px;\n margin-bottom: 10px;\n flex-wrap: wrap;\n}\n.seed-field-mapper .fm-inspector {\n margin-top: var(--sfm-space-3);\n border-top: 1px solid;\n padding-top: 10px;\n}\n.seed-field-mapper .fm-inspector summary {\n cursor: pointer;\n font-size: 12px;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-inspector-row {\n display: grid;\n grid-template-columns: 1fr 1.5fr auto;\n gap: var(--sfm-space-2);\n align-items: center;\n padding: 6px 0;\n border-bottom: 1px solid;\n font-size: 12px;\n}\n.seed-field-mapper .fm-into {\n font-size: var(--sfm-font-size-sm);\n}\n";
17
+ export declare const STRUCTURAL_THEME_CSS = "\n.seed-field-mapper {\n\n --sfm-space-1: 4px;\n --sfm-space-2: 8px;\n --sfm-space-3: 12px;\n --sfm-space-4: 16px;\n --sfm-radius-sm: 4px;\n --sfm-radius-md: 8px;\n --sfm-radius-lg: 12px;\n --sfm-font-family: inherit;\n --sfm-font-mono: ui-monospace, monospace;\n --sfm-font-size-sm: 11px;\n --sfm-font-size-md: 13px;\n --sfm-control-height: 32px;\n --sfm-row-gap: var(--sfm-space-2);\n\n font-family: var(--sfm-font-family);\n border-radius: var(--sfm-radius-lg);\n padding: var(--sfm-space-4);\n}\n.seed-field-mapper * { box-sizing: border-box; }\n.seed-field-mapper .fm-toolbar {\n display: flex;\n gap: var(--sfm-space-2);\n align-items: center;\n margin-bottom: var(--sfm-space-3);\n flex-wrap: wrap;\n}\n.seed-field-mapper .fm-btn {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 6px var(--sfm-space-3);\n cursor: pointer;\n font-size: var(--sfm-font-size-md);\n min-height: var(--sfm-control-height);\n}\n.seed-field-mapper .fm-meta {\n font-size: 12px;\n margin-left: auto;\n}\n.seed-field-mapper .fm-banner {\n font-size: 12px;\n padding: var(--sfm-space-2) 10px;\n border-radius: var(--sfm-radius-md);\n margin-bottom: 10px;\n border: 1px solid;\n}\n.seed-field-mapper .fm-grid {\n position: relative;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 48px;\n min-height: 240px;\n}\n.seed-field-mapper .fm-col-title {\n font-size: var(--sfm-font-size-sm);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-card {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 10px var(--sfm-space-3);\n margin-bottom: var(--sfm-space-2);\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.seed-field-mapper .fm-label {\n font-weight: 600;\n font-size: var(--sfm-font-size-md);\n margin-bottom: var(--sfm-space-1);\n}\n.seed-field-mapper .fm-value {\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.seed-field-mapper .fm-kind {\n font-size: 10px;\n margin-left: 6px;\n}\n.seed-field-mapper .fm-prop-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-dtype {\n font-size: 10px;\n padding: 2px 6px;\n border-radius: var(--sfm-radius-sm);\n border: 1px solid;\n}\n.seed-field-mapper .fm-remove {\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 14px;\n padding: 0 var(--sfm-space-1);\n}\n.seed-field-mapper .fm-svg {\n position: absolute;\n inset: 0;\n pointer-events: none;\n overflow: visible;\n}\n.seed-field-mapper .fm-preview {\n margin-top: var(--sfm-space-3);\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: var(--sfm-space-3);\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n white-space: pre-wrap;\n max-height: 200px;\n overflow: auto;\n}\n.seed-field-mapper details.fm-preview {\n font-family: var(--sfm-font-family);\n white-space: normal;\n max-height: none;\n overflow: visible;\n padding: var(--sfm-space-2) var(--sfm-space-3);\n}\n.seed-field-mapper details.fm-preview > summary {\n cursor: pointer;\n font-size: var(--sfm-font-size-sm);\n list-style: disclosure-closed;\n}\n.seed-field-mapper details.fm-preview[open] > summary {\n list-style: disclosure-open;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-preview-body {\n margin: 0;\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n white-space: pre-wrap;\n max-height: 200px;\n overflow: auto;\n}\n.seed-field-mapper .fm-lookups {\n margin-top: var(--sfm-space-4);\n border-top: 1px solid;\n padding-top: var(--sfm-space-3);\n}\n.seed-field-mapper .fm-row .fm-lookups,\n.seed-field-mapper .fm-lookups--row {\n margin-top: var(--sfm-space-2);\n border-top: none;\n padding-top: 0;\n}\n.seed-field-mapper .fm-row .fm-lookup-block {\n margin-bottom: 0;\n padding: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookups-title {\n font-size: var(--sfm-font-size-sm);\n text-transform: uppercase;\n letter-spacing: 0.06em;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-block {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 10px var(--sfm-space-3);\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-block h4 {\n margin: 0 0 var(--sfm-space-2);\n font-size: var(--sfm-font-size-md);\n font-weight: 600;\n}\n.seed-field-mapper .fm-lookup-hint {\n font-size: var(--sfm-font-size-sm);\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-row {\n display: grid;\n grid-template-columns: 1fr 1.4fr;\n gap: var(--sfm-space-2);\n align-items: center;\n margin-bottom: 6px;\n}\n.seed-field-mapper .fm-lookup-key {\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.seed-field-mapper .fm-lookup-input {\n width: 100%;\n border: 1px solid;\n border-radius: 6px;\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n padding: 6px var(--sfm-space-2);\n}\n.seed-field-mapper .fm-lookup-input:focus {\n outline: none;\n}\n.seed-field-mapper .fm-row-list {\n display: flex;\n flex-direction: column;\n gap: var(--sfm-row-gap);\n}\n.seed-field-mapper .fm-row {\n border: 1px solid;\n border-radius: var(--sfm-radius-md);\n padding: 10px var(--sfm-space-3);\n}\n.seed-field-mapper .fm-row-main {\n display: grid;\n grid-template-columns: minmax(100px, 140px) 1fr auto auto auto;\n gap: var(--sfm-space-2);\n align-items: center;\n}\n.seed-field-mapper .fm-row-main-source {\n grid-template-columns: 1fr auto auto 1fr auto auto;\n}\n.seed-field-mapper .fm-row-accessory {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.seed-field-mapper .fm-row-accessory:empty {\n display: none;\n}\n.seed-field-mapper .fm-row-prop {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n.seed-field-mapper .fm-row-prop-name {\n font-weight: 600;\n font-size: var(--sfm-font-size-md);\n}\n.seed-field-mapper .fm-row-preview {\n margin-top: 6px;\n font-family: var(--sfm-font-mono);\n font-size: var(--sfm-font-size-sm);\n}\n.seed-field-mapper .fm-row-expansion {\n margin-top: 8px;\n}\n.seed-field-mapper .fm-row-expansion:empty {\n display: none;\n}\n.seed-field-mapper .fm-row-flag {\n font-size: var(--sfm-font-size-sm);\n margin-top: var(--sfm-space-1);\n}\n.seed-field-mapper .fm-select {\n width: 100%;\n border: 1px solid;\n border-radius: 6px;\n font-size: 12px;\n padding: 6px var(--sfm-space-2);\n min-width: 0;\n min-height: var(--sfm-control-height);\n}\n.seed-field-mapper .fm-select:focus {\n outline: none;\n}\n.seed-field-mapper .fm-filter {\n display: flex;\n gap: 6px;\n margin-bottom: 10px;\n flex-wrap: wrap;\n}\n.seed-field-mapper .fm-inspector {\n margin-top: var(--sfm-space-3);\n border-top: 1px solid;\n padding-top: 10px;\n}\n.seed-field-mapper .fm-inspector summary {\n cursor: pointer;\n font-size: 12px;\n margin-bottom: var(--sfm-space-2);\n}\n.seed-field-mapper .fm-inspector-row {\n display: grid;\n grid-template-columns: 1fr 1.5fr auto;\n gap: var(--sfm-space-2);\n align-items: center;\n padding: 6px 0;\n border-bottom: 1px solid;\n font-size: 12px;\n}\n.seed-field-mapper .fm-into {\n font-size: var(--sfm-font-size-sm);\n}\n";
18
18
  /** Color / background / border-color paint on top of structural layout. */
19
19
  export declare const PAINT_THEME_CSS = "\n.seed-field-mapper {\n\n --sfm-color-ground: #0f172a;\n --sfm-color-ink: #e2e8f0;\n --sfm-color-well: #1e293b;\n --sfm-color-line: #334155;\n --sfm-color-muted: #94a3b8;\n --sfm-color-faint: #64748b;\n --sfm-color-selection: #3b82f6;\n --sfm-color-warning: #fbbf24;\n --sfm-color-danger: #f87171;\n --sfm-color-highlight: #f59e0b;\n --sfm-map-1: #3b82f6;\n --sfm-map-2: #8b5cf6;\n --sfm-map-3: #ec4899;\n --sfm-map-4: #f59e0b;\n --sfm-map-5: #10b981;\n --sfm-map-6: #06b6d4;\n --sfm-map-7: #f97316;\n --sfm-map-8: #14b8a6;\n --fm-ground: var(--sfm-color-ground);\n --fm-ink: var(--sfm-color-ink);\n --fm-well: var(--sfm-color-well);\n --fm-line: var(--sfm-color-line);\n --fm-muted: var(--sfm-color-muted);\n --fm-faint: var(--sfm-color-faint);\n --fm-selection: var(--sfm-color-selection);\n --fm-highlight: var(--sfm-color-highlight);\n --fm-danger: var(--sfm-color-danger);\n --fm-warning: var(--sfm-color-warning);\n --fm-map-1: var(--sfm-map-1);\n --fm-map-2: var(--sfm-map-2);\n --fm-map-3: var(--sfm-map-3);\n --fm-map-4: var(--sfm-map-4);\n --fm-map-5: var(--sfm-map-5);\n --fm-map-6: var(--sfm-map-6);\n --fm-map-7: var(--sfm-map-7);\n --fm-map-8: var(--sfm-map-8);\n\n color: var(--sfm-color-ink);\n background: var(--sfm-color-ground);\n}\n.seed-field-mapper .fm-btn {\n background: var(--sfm-color-well);\n border-color: var(--sfm-color-line);\n color: var(--sfm-color-ink);\n}\n.seed-field-mapper .fm-btn:hover { border-color: var(--sfm-color-faint); }\n.seed-field-mapper .fm-btn-primary {\n background: var(--sfm-color-selection);\n border-color: var(--sfm-color-selection);\n}\n.seed-field-mapper .fm-meta {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-banner {\n border-color: var(--sfm-color-line);\n background: var(--sfm-color-well);\n}\n.seed-field-mapper .fm-banner-warn {\n border-color: var(--sfm-color-warning);\n color: var(--sfm-color-warning);\n}\n.seed-field-mapper .fm-banner-danger {\n border-color: var(--sfm-color-danger);\n color: var(--sfm-color-danger);\n}\n.seed-field-mapper .fm-col-title {\n color: var(--sfm-color-faint);\n}\n.seed-field-mapper .fm-card {\n border-color: var(--sfm-color-line);\n background: var(--sfm-color-well);\n}\n.seed-field-mapper .fm-card.active,\n.seed-field-mapper .fm-card.pending {\n border-color: var(--sfm-color-selection);\n box-shadow: 0 0 0 1px var(--sfm-color-selection);\n}\n.seed-field-mapper .fm-card.mapped {\n border-color: var(--sfm-color-faint);\n}\n.seed-field-mapper .fm-card.highlight {\n border-color: var(--sfm-color-highlight);\n}\n.seed-field-mapper .fm-value {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-kind {\n color: var(--sfm-color-faint);\n}\n.seed-field-mapper .fm-dtype {\n border-color: var(--sfm-color-line);\n color: var(--sfm-color-muted);\n background: transparent;\n}\n.seed-field-mapper .fm-remove {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-remove:hover { color: var(--sfm-color-danger); }\n.seed-field-mapper .fm-preview {\n background: color-mix(in srgb, var(--sfm-color-ground) 80%, black);\n border-color: var(--sfm-color-line);\n color: var(--sfm-color-ink);\n}\n.seed-field-mapper details.fm-preview > summary {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-lookups {\n border-color: var(--sfm-color-line);\n}\n.seed-field-mapper .fm-lookups-title {\n color: var(--sfm-color-faint);\n}\n.seed-field-mapper .fm-lookup-block {\n border-color: var(--sfm-color-line);\n background: var(--sfm-color-well);\n}\n.seed-field-mapper .fm-lookup-hint {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-lookup-key {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-lookup-input {\n background: var(--sfm-color-ground);\n border-color: var(--sfm-color-line);\n color: var(--sfm-color-ink);\n}\n.seed-field-mapper .fm-lookup-input:focus {\n border-color: var(--sfm-color-selection);\n}\n.seed-field-mapper .fm-row {\n border-color: var(--sfm-color-line);\n background: var(--sfm-color-well);\n}\n.seed-field-mapper .fm-row[data-state=\"needsResolve\"] {\n border-color: var(--sfm-color-warning);\n}\n.seed-field-mapper .fm-row[data-state=\"conflict\"] {\n border-color: var(--sfm-color-danger);\n}\n.seed-field-mapper .fm-row-preview {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-row-flag {\n color: var(--sfm-color-warning);\n}\n.seed-field-mapper .fm-select {\n background: var(--sfm-color-ground);\n border-color: var(--sfm-color-line);\n color: var(--sfm-color-ink);\n}\n.seed-field-mapper .fm-select:focus {\n border-color: var(--sfm-color-selection);\n}\n.seed-field-mapper .fm-filter .fm-btn[aria-pressed=\"true\"] {\n border-color: var(--sfm-color-selection);\n color: var(--sfm-color-ink);\n}\n.seed-field-mapper .fm-inspector {\n border-color: var(--sfm-color-line);\n}\n.seed-field-mapper .fm-inspector summary {\n color: var(--sfm-color-muted);\n}\n.seed-field-mapper .fm-inspector-row {\n border-color: var(--sfm-color-line);\n}\n.seed-field-mapper .fm-into {\n color: var(--sfm-color-faint);\n}\n";
20
20
  /** Wrap CSS in the package cascade layer so host rules win without specificity fights. */
@@ -1 +1 @@
1
- {"version":3,"file":"fieldMapperTheme.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperTheme.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7E,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAA;AAExE,eAAO,MAAM,cAAc,4BAA4B,CAAA;AAEvD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAC1B,MAAM,CAMR;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,KAAK,GAAE,gBAA4B,GAClC,wBAAwB,CAG1B;AAyDD,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,0xOAsRhC,CAAA;AAED,2EAA2E;AAC3E,eAAO,MAAM,eAAe,q/JAwI3B,CAAA;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAMrE;AAED,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,QAA2B,CAAA;AAIzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAsBzE;AAED,8DAA8D;AAC9D,wBAAgB,2BAA2B,IAAI,IAAI,CAUlD"}
1
+ {"version":3,"file":"fieldMapperTheme.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperTheme.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,CAAA;AAE7E,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAA;AAExE,eAAO,MAAM,cAAc,4BAA4B,CAAA;AAEvD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAC1B,MAAM,CAMR;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA;AAEnB,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,KAAK,GAAE,gBAA4B,GAClC,wBAAwB,CAG1B;AAyDD,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,45OA4RhC,CAAA;AAED,2EAA2E;AAC3E,eAAO,MAAM,eAAe,q/JAwI3B,CAAA;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAMrE;AAED,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,QAA2B,CAAA;AAIzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAsBzE;AAED,8DAA8D;AAC9D,wBAAgB,2BAA2B,IAAI,IAAI,CAUlD"}
@@ -0,0 +1,7 @@
1
+ import type { FieldMapperRow, FieldMapperTransformOption } from './fieldMapperTypes';
2
+ export declare function defaultTransformOptions(row: FieldMapperRow): FieldMapperTransformOption[];
3
+ export declare function resolveTransformOptions(row: FieldMapperRow, host?: (row: FieldMapperRow, defaults: FieldMapperTransformOption[]) => FieldMapperTransformOption[]): FieldMapperTransformOption[];
4
+ /** Show the transform select for a mapped origin, source-less derive, or host derive option. */
5
+ export declare function showTransformSelect(row: FieldMapperRow, options: FieldMapperTransformOption[]): boolean;
6
+ export declare function isTransformSelectDisabled(row: FieldMapperRow): boolean;
7
+ //# sourceMappingURL=fieldMapperTransforms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldMapperTransforms.d.ts","sourceRoot":"","sources":["../../src/react/fieldMapperTransforms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAEpF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,cAAc,GAClB,0BAA0B,EAAE,CAe9B;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,cAAc,EACnB,IAAI,CAAC,EAAE,CACL,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,0BAA0B,EAAE,KACnC,0BAA0B,EAAE,GAChC,0BAA0B,EAAE,CAG9B;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,0BAA0B,EAAE,GACpC,OAAO,CAIT;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEtE"}