alizarin 0.2.1-alpha.83

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 (57) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +160 -0
  3. package/dist/_wasm.d.ts +23 -0
  4. package/dist/alizarin.full.js +799 -0
  5. package/dist/alizarin.full.js.map +1 -0
  6. package/dist/alizarin.inline-full.js +4 -0
  7. package/dist/alizarin.inline.js +4 -0
  8. package/dist/alizarin.js +47 -0
  9. package/dist/alizarin.js.map +1 -0
  10. package/dist/alizarin_bg.wasm +0 -0
  11. package/dist/backend.d.ts +74 -0
  12. package/dist/cards.d.ts +21 -0
  13. package/dist/client.d.ts +86 -0
  14. package/dist/collectionMutator.d.ts +155 -0
  15. package/dist/csvModelLoader.d.ts +59 -0
  16. package/dist/full.d.ts +3 -0
  17. package/dist/graphManager.d.ts +259 -0
  18. package/dist/interfaces.d.ts +145 -0
  19. package/dist/main-r-MmUiQf.js +12355 -0
  20. package/dist/main-r-MmUiQf.js.map +1 -0
  21. package/dist/main.d.ts +28 -0
  22. package/dist/nodeConfig.d.ts +61 -0
  23. package/dist/pseudos.d.ts +118 -0
  24. package/dist/rdm.d.ts +68 -0
  25. package/dist/renderers.d.ts +65 -0
  26. package/dist/semantic.d.ts +35 -0
  27. package/dist/static-types.d.ts +172 -0
  28. package/dist/staticStore.d.ts +60 -0
  29. package/dist/tracing/index.d.ts +172 -0
  30. package/dist/utils.d.ts +43 -0
  31. package/dist/validation/index.d.ts +734 -0
  32. package/dist/validation/index.js +1194 -0
  33. package/dist/validation/index.js.map +1 -0
  34. package/dist/validation/validators/graphLoading.d.ts +69 -0
  35. package/dist/validation/validators/index.d.ts +1 -0
  36. package/dist/viewModels/BooleanViewModel.d.ts +17 -0
  37. package/dist/viewModels/ConceptListViewModel.d.ts +15 -0
  38. package/dist/viewModels/ConceptValueViewModel.d.ts +28 -0
  39. package/dist/viewModels/DateViewModel.d.ts +16 -0
  40. package/dist/viewModels/DomainValueListViewModel.d.ts +15 -0
  41. package/dist/viewModels/DomainValueViewModel.d.ts +17 -0
  42. package/dist/viewModels/EDTFViewModel.d.ts +13 -0
  43. package/dist/viewModels/GeoJSONViewModel.d.ts +26 -0
  44. package/dist/viewModels/NodeViewModel.d.ts +15 -0
  45. package/dist/viewModels/NonLocalizedStringViewModel.d.ts +13 -0
  46. package/dist/viewModels/NumberViewModel.d.ts +14 -0
  47. package/dist/viewModels/ResourceInstanceListViewModel.d.ts +25 -0
  48. package/dist/viewModels/ResourceInstanceViewModel.d.ts +62 -0
  49. package/dist/viewModels/StringViewModel.d.ts +17 -0
  50. package/dist/viewModels/UrlViewModel.d.ts +22 -0
  51. package/dist/viewModels/cacheEntries.d.ts +73 -0
  52. package/dist/viewModels/getViewModel.d.ts +4 -0
  53. package/dist/viewModels/index.d.ts +20 -0
  54. package/dist/viewModels/types.d.ts +15 -0
  55. package/dist/viewModels.d.ts +1 -0
  56. package/dist/wasmTiming.d.ts +11 -0
  57. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alizarin.full.js","sources":["../ext/js/@alizarin/filelist/src/main.ts","../ext/js/@alizarin/clm/src/main.ts"],"sourcesContent":["import { utils, viewModels, registerExtensionHandler, wasmReady } from \"alizarin\";\nimport type { interfaces, staticTypes } from \"alizarin\";\ntype IPseudo = interfaces.IPseudo;\ntype IViewModel = interfaces.IViewModel;\ntype StaticTile = staticTypes.StaticTile;\ntype StaticNode = staticTypes.StaticNode;\n\n// WASM initialization is deferred - registrations that need it use wasmReady.then()\n\n// =============================================================================\n// Localized String Types\n// =============================================================================\n\ninterface LocalizedStringValue {\n direction: string;\n value: string;\n}\n\ntype LocalizedString = { [lang: string]: LocalizedStringValue };\n\n// =============================================================================\n// FileListItem Type\n// =============================================================================\n\ninterface FileListItemData {\n accepted?: boolean;\n alt_text?: LocalizedString;\n attribution?: LocalizedString;\n content?: string;\n description?: LocalizedString;\n file_id?: string;\n index?: number;\n last_modified?: number;\n name: string;\n path?: string;\n selected?: boolean;\n size?: number;\n status?: string;\n title?: LocalizedString;\n type?: string;\n url?: string;\n renderer?: string;\n}\n\nclass FileListItem {\n accepted: boolean;\n alt_text?: LocalizedString;\n attribution?: LocalizedString;\n content?: string;\n description?: LocalizedString;\n file_id?: string;\n index?: number;\n last_modified?: number;\n name: string;\n path?: string;\n selected: boolean;\n size?: number;\n status?: string;\n title?: LocalizedString;\n type?: string;\n url?: string;\n renderer?: string;\n\n constructor(data: FileListItemData) {\n this.accepted = data.accepted ?? false;\n this.alt_text = data.alt_text;\n this.attribution = data.attribution;\n this.content = data.content;\n this.description = data.description;\n this.file_id = data.file_id;\n this.index = data.index;\n this.last_modified = data.last_modified;\n this.name = data.name || \"\";\n this.path = data.path;\n this.selected = data.selected ?? false;\n this.size = data.size;\n this.status = data.status;\n this.title = data.title;\n this.type = data.type;\n this.url = data.url;\n this.renderer = data.renderer;\n }\n\n /**\n * Get the display string for this file.\n * Uses title if available (in specified language), otherwise falls back to filename.\n */\n toDisplayString(lang?: string): string {\n const targetLang = lang || utils.getCurrentLanguage() || \"en\";\n\n // Try title first\n if (this.title) {\n if (this.title[targetLang]?.value) {\n return this.title[targetLang].value;\n }\n // Try any language\n for (const localized of Object.values(this.title)) {\n if (localized.value) {\n return localized.value;\n }\n }\n }\n\n // Fall back to filename\n if (this.name) {\n return this.name;\n }\n\n // Last resort\n return this.file_id || \"(unnamed file)\";\n }\n\n /**\n * Get the alt text in a specific language.\n */\n getAltText(lang?: string): string | null {\n const targetLang = lang || utils.getCurrentLanguage() || \"en\";\n\n if (this.alt_text) {\n if (this.alt_text[targetLang]?.value) {\n return this.alt_text[targetLang].value;\n }\n }\n return null;\n }\n\n /**\n * Check if this is an image file based on MIME type.\n */\n isImage(): boolean {\n return this.type?.startsWith(\"image/\") ?? false;\n }\n\n /**\n * Convert to plain object for JSON serialization.\n */\n toJson(): FileListItemData {\n const result: FileListItemData = {\n name: this.name,\n accepted: this.accepted,\n selected: this.selected,\n };\n\n if (this.alt_text) result.alt_text = this.alt_text;\n if (this.attribution) result.attribution = this.attribution;\n if (this.content) result.content = this.content;\n if (this.description) result.description = this.description;\n if (this.file_id) result.file_id = this.file_id;\n if (this.index !== undefined) result.index = this.index;\n if (this.last_modified) result.last_modified = this.last_modified;\n if (this.path) result.path = this.path;\n if (this.size !== undefined) result.size = this.size;\n if (this.status) result.status = this.status;\n if (this.title) result.title = this.title;\n if (this.type) result.type = this.type;\n if (this.url) result.url = this.url;\n if (this.renderer) result.renderer = this.renderer;\n\n return result;\n }\n}\n\n// =============================================================================\n// Display Serializers\n// =============================================================================\n\n// Register the file-list extension handler (after WASM is ready)\nwasmReady.then(() => {\n registerExtensionHandler('file-list', {\n renderDisplay: (tileData: unknown, language: string) => {\n if (!tileData) return null;\n\n if (Array.isArray(tileData)) {\n if (tileData.length === 0) return null;\n\n const displayStrings = tileData.map((item: unknown) => {\n if (!item || typeof item !== 'object') return null;\n const file = new FileListItem(item as FileListItemData);\n return file.toDisplayString(language);\n }).filter((s): s is string => s !== null);\n\n return displayStrings.join(', ');\n }\n\n if (typeof tileData === 'object' && tileData !== null) {\n const file = new FileListItem(tileData as FileListItemData);\n return file.toDisplayString(language);\n }\n\n return null;\n },\n });\n});\n\n// =============================================================================\n// View Models\n// =============================================================================\n\nclass FileItemViewModel extends String implements IViewModel {\n _: IViewModel | Promise<IViewModel> | undefined = undefined;\n __parentPseudo: IPseudo | undefined;\n\n describeField = () => (this.__parentPseudo ? this.__parentPseudo.describeField() : null)\n describeFieldGroup = () => (this.__parentPseudo ? this.__parentPseudo.describeFieldGroup() : null)\n\n _file: FileListItem;\n\n constructor(file: FileListItem) {\n super(file.toDisplayString());\n this._file = file;\n }\n\n async forJson(): Promise<FileListItemData> {\n return this._file.toJson();\n }\n\n getValue(): FileListItem {\n return this._file;\n }\n\n get name(): string {\n return this._file.name;\n }\n\n get url(): string | undefined {\n return this._file.url;\n }\n\n get file_id(): string | undefined {\n return this._file.file_id;\n }\n\n get fileType(): string | undefined {\n return this._file.type;\n }\n\n get size(): number | undefined {\n return this._file.size;\n }\n\n isImage(): boolean {\n return this._file.isImage();\n }\n\n getAltText(lang?: string): string | null {\n return this._file.getAltText(lang);\n }\n\n async __asTileData(): Promise<FileListItemData | null> {\n return this._file ? this._file.toJson() : null;\n }\n}\n\nclass FileListViewModel extends Array<FileItemViewModel | Promise<FileItemViewModel | null> | null> implements IViewModel {\n _: IViewModel | Promise<IViewModel> | undefined = undefined;\n __parentPseudo: IPseudo | undefined;\n\n describeField = () => (this.__parentPseudo ? this.__parentPseudo.describeField() : null)\n describeFieldGroup = () => (this.__parentPseudo ? this.__parentPseudo.describeFieldGroup() : null)\n _value: Promise<(FileItemViewModel | null)[]> | null = null;\n\n async forJson(): Promise<(FileListItemData | null)[] | null> {\n const value = await this._value;\n if (!value) return null;\n return Promise.all(value.map(async (v) => (v ? v.forJson() : null)));\n }\n\n /**\n * Get only image files from the list.\n */\n async getImages(): Promise<FileItemViewModel[]> {\n const items = Array.from(this);\n const resolved = await Promise.all(items);\n return resolved.filter((item): item is FileItemViewModel =>\n item !== null && item.isImage()\n );\n }\n\n /**\n * Find a file by name.\n */\n async getByName(name: string): Promise<FileItemViewModel | null> {\n const items = Array.from(this);\n const resolved = await Promise.all(items);\n return resolved.find((item): item is FileItemViewModel =>\n item !== null && item.name === name\n ) ?? null;\n }\n\n /**\n * Find a file by ID.\n */\n async getById(fileId: string): Promise<FileItemViewModel | null> {\n const items = Array.from(this);\n const resolved = await Promise.all(items);\n return resolved.find((item): item is FileItemViewModel =>\n item !== null && item.file_id === fileId\n ) ?? null;\n }\n\n static async __create(\n tile: StaticTile,\n node: StaticNode,\n value: unknown,\n _cacheEntry: object | null = null\n ): Promise<FileListViewModel> {\n const nodeid = node.nodeid;\n let val: (FileItemViewModel | Promise<FileItemViewModel | null> | null)[] = [];\n\n if (!tile.data.has(nodeid)) {\n tile.data.set(nodeid, null);\n }\n\n if (value !== null && value !== undefined) {\n tile.data.set(nodeid, []);\n\n // Handle awaitable value\n if (value instanceof Promise) {\n const resolved = await value;\n return FileListViewModel.__create(tile, node, resolved, _cacheEntry);\n }\n\n // Ensure we have an array\n let items: unknown[];\n if (Array.isArray(value)) {\n items = value;\n } else if (typeof value === 'object') {\n // Single file object - wrap in array\n items = [value];\n } else {\n throw new Error(\n `Cannot set file-list value on node ${nodeid} except via array or object: ${JSON.stringify(value)}`\n );\n }\n\n // Create FileItemViewModel for each item\n val = items.map((item, idx) => {\n if (item instanceof FileItemViewModel) {\n return item;\n }\n if (typeof item === 'object' && item !== null) {\n const fileData = item as FileListItemData;\n if (fileData.index === undefined) {\n fileData.index = idx;\n }\n const file = new FileListItem(fileData);\n return new FileItemViewModel(file);\n }\n return null;\n });\n\n // Update tile data with resolved values\n Promise.all(val).then((vals) => {\n const tileData = vals\n .filter((v): v is FileItemViewModel => v !== null)\n .map((v) => v.getValue().toJson());\n tile.data.set(nodeid, tileData);\n });\n } else {\n val = [];\n }\n\n const viewModel = new FileListViewModel(...val);\n viewModel._value = Promise.all(val) as Promise<(FileItemViewModel | null)[]>;\n return viewModel;\n }\n\n async __asTileData(): Promise<(FileListItemData | null)[] | null> {\n return this.forJson();\n }\n}\n\n// =============================================================================\n// Factory / DataType Registration\n// =============================================================================\n\nclass FileListDataType {\n static async __create(\n tile: StaticTile,\n node: StaticNode,\n value: unknown,\n _cacheEntry: object\n ): Promise<FileListViewModel> {\n return FileListViewModel.__create(tile, node, value, _cacheEntry);\n }\n}\n\n// Register with alizarin's custom datatypes\nviewModels.CUSTOM_DATATYPES.set(\"file-list\", FileListDataType);\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport {\n FileListItem,\n FileItemViewModel,\n FileListViewModel,\n FileListDataType,\n};\n\nexport type {\n LocalizedStringValue,\n LocalizedString,\n FileListItemData,\n};\n","import { RDM, nodeConfig, utils, viewModels, registerExtensionHandler, registerResolvableDatatype, wasmReady } from \"alizarin\";\nimport type { interfaces, staticTypes } from \"alizarin\";\ntype IPseudo = interfaces.IPseudo;\ntype IViewModel = interfaces.IViewModel;\ntype StaticTile = staticTypes.StaticTile;\ntype StaticNode = staticTypes.StaticNode;\n\n// =============================================================================\n// CLM Reference Helpers\n// =============================================================================\n// These functions convert SKOS concepts to CLM StaticReference format.\n// They work with StaticCollection without modifying the core type.\n\ninterface StaticReferenceData {\n labels: Array<{\n id: string;\n language_id: string;\n list_item_id: string;\n value: string;\n valuetype_id: string;\n }>;\n list_id: string;\n uri: string;\n id: string;\n}\n\n/**\n * Get a CLM-compatible reference value by concept ID from a collection.\n */\nfunction getReferenceValueFromCollection(collection: any, conceptId: string): StaticReferenceData | null {\n const concept = collection.__allConcepts?.[conceptId];\n if (!concept) {\n return null;\n }\n\n // Convert SKOS concept to CLM StaticReference format\n const labels = [];\n for (const [langId, prefLabel] of Object.entries(concept.prefLabels || {})) {\n const pLabel = prefLabel as any;\n labels.push({\n id: pLabel.id,\n language_id: langId,\n list_item_id: concept.id,\n value: pLabel.value,\n valuetype_id: 'prefLabel'\n });\n }\n\n return {\n labels,\n list_id: collection.id,\n uri: concept.source || `http://localhost:8000/plugins/controlled-list-manager/item/${concept.id}`,\n id: concept.id\n };\n}\n\n/**\n * Get a CLM-compatible reference value by label string from a collection.\n * Performs case-insensitive label matching with whitespace trimming.\n */\nfunction getReferenceValueByLabelFromCollection(collection: any, label: string): StaticReferenceData | null {\n // Find concept by matching any prefLabel value (case-insensitive, trimmed)\n const trimmedLabel = label.trim().toLowerCase();\n const values = collection.__values || {};\n const matchingValue = Object.values(values).find(\n (value: any) => value.value?.trim().toLowerCase() === trimmedLabel\n ) as any;\n\n if (!matchingValue || !matchingValue.__concept) {\n return null;\n }\n\n return getReferenceValueFromCollection(collection, matchingValue.__concept.id);\n}\n\n// =============================================================================\n\n// WASM initialization is deferred - registrations that need it use wasmReady.then()\n\n// Helper to flatten nested arrays/view models into a list of reference objects.\n// Handles ReferenceValueViewModels (with _ref), arrays, raw reference objects,\n// __needs_rdm_label_lookup markers, and JSON-string-encoded refs.\nfunction flattenToReferences(value: any): any[] {\n const items: any[] = [];\n const visit = (val: any) => {\n if (!val) return;\n if (val._ref) {\n const ref = val._ref;\n const refObj = typeof ref.toJSON === 'function' ? ref.toJSON() : ref;\n if (refObj && (refObj.labels || refObj.__needs_rdm_label_lookup)) {\n items.push(refObj);\n }\n return;\n }\n if (Array.isArray(val)) {\n val.forEach(visit);\n return;\n }\n if (val.__needs_rdm_label_lookup && val.label) {\n items.push(val);\n return;\n }\n if (val.labels) {\n items.push(val);\n return;\n }\n if (typeof val === 'string') {\n try { visit(JSON.parse(val)); } catch { /* not JSON */ }\n }\n };\n visit(value);\n return items;\n}\n\n// Helper to render display string from a single reference object\nfunction renderReferenceDisplay(data: any, language: string): string | null {\n if (!data) return null;\n\n // Handle __needs_rdm_label_lookup format (unresolved marker with label property)\n if (data.__needs_rdm_label_lookup && data.label) {\n return data.label;\n }\n\n // Extract display string from StaticReference format\n if (data.labels && data.labels.length > 0) {\n const langPrefLabel = data.labels.find(\n (l: any) => l.language_id === language && l.valuetype_id === 'prefLabel'\n );\n if (langPrefLabel) return langPrefLabel.value;\n\n const langLabel = data.labels.find((l: any) => l.language_id === language);\n if (langLabel) return langLabel.value;\n\n const prefLabel = data.labels.find((l: any) => l.valuetype_id === 'prefLabel');\n if (prefLabel) return prefLabel.value;\n\n return data.labels[0].value;\n }\n\n return null;\n}\n\n// Register extension handlers after WASM is ready\nwasmReady.then(() => {\n // The 'reference' datatype handles both single and multi-value references\n // (the latter is configured via the node's `multiValue` config flag).\n // There is no separate 'reference-list' datatype in Arches.\n registerExtensionHandler('reference', {\n renderDisplay: (tileData: any, language: string) => {\n if (!tileData) return null;\n\n const items = flattenToReferences(tileData);\n if (items.length === 0) return null;\n\n const displayStrings = items\n .map((ref: any) => renderReferenceDisplay(ref, language))\n .filter((s): s is string => s !== null);\n\n return displayStrings.join(', ');\n },\n });\n});\n\nclass StaticReferenceLabel {\n id: string\n language_id: string\n list_item_id: string\n value: string\n valuetype_id: string\n\n constructor(label: StaticReferenceLabel) {\n this.id = label.id;\n this.language_id = label.language_id;\n this.list_item_id = label.list_item_id;\n this.value = label.value;\n this.valuetype_id = label.valuetype_id;\n }\n\n toJSON() {\n return {\n id: this.id,\n language_id: this.language_id,\n list_item_id: this.list_item_id,\n value: this.value,\n valuetype_id: this.valuetype_id\n };\n }\n};\n\nclass StaticReference {\n labels: StaticReferenceLabel[]\n list_id: string\n uri: string\n\n constructor(reference: StaticReference) {\n this.list_id = reference.list_id;\n this.uri = reference.uri;\n this.labels = [];\n for (const label of reference.labels) {\n if (label instanceof StaticReferenceLabel) {\n this.labels.push(label);\n } else {\n this.labels.push(new StaticReferenceLabel(label));\n }\n }\n }\n\n toJSON() {\n return {\n labels: this.labels.map(l => l.toJSON()),\n list_id: this.list_id,\n uri: this.uri\n };\n }\n};\n\nfunction referenceToString(reference: StaticReference): string {\n if (reference.labels.length == 1) {\n return reference.labels[0].value;\n }\n let prefLabel: string | undefined;\n const lang = utils.getCurrentLanguage();\n for (const label of reference.labels) {\n if (label.valuetype_id === \"prefLabel\") {\n prefLabel = label.value;\n if (label.language_id === lang) {\n return prefLabel;\n }\n }\n }\n return prefLabel || \"(undefined)\";\n}\n\n// Types for pending lookups (lazy loading)\ninterface PendingUuidLookup {\n type: 'uuid';\n uuid: string;\n collectionId: string;\n}\n\ninterface PendingLabelLookup {\n type: 'label';\n label: string;\n collectionId: string;\n}\n\ntype PendingLookup = PendingUuidLookup | PendingLabelLookup;\n\nclass ReferenceValueViewModel extends String implements IViewModel {\n _: IViewModel | Promise<IViewModel> | undefined = undefined;\n __parentPseudo: IPseudo | undefined;\n\n describeField = () => (this.__parentPseudo ? this.__parentPseudo.describeField() : null)\n describeFieldGroup = () => (this.__parentPseudo ? this.__parentPseudo.describeFieldGroup() : null)\n\n _ref: StaticReference | null;\n _pendingLookup: PendingLookup | null = null;\n _resolvedRef: StaticReference | null = null;\n _resolutionPromise: Promise<StaticReference | null> | null = null;\n _tile: StaticTile | null = null;\n _nodeid: string | null = null;\n _collectionId: string | null = null;\n\n get [Symbol.toStringTag]() {\n return 'ReferenceValue';\n }\n\n constructor(reference: StaticReference | null, pendingLookup?: PendingLookup, tile?: StaticTile, nodeid?: string, collectionId?: string) {\n // If we have a resolved reference, use its display string; otherwise use placeholder\n super(reference ? referenceToString(reference) : (pendingLookup?.type === 'label' ? pendingLookup.label : '(pending)'));\n this._ref = reference;\n this._pendingLookup = pendingLookup || null;\n this._tile = tile || null;\n this._nodeid = nodeid || null;\n this._collectionId = collectionId ?? (pendingLookup?.collectionId ?? null);\n }\n\n async getParent(): Promise<ReferenceValueViewModel | null> {\n const ref = await this._resolvePending();\n if (!ref || !this._collectionId) {\n return null;\n }\n\n // Get the concept ID from one of the labels\n const conceptId = ref.labels[0]?.list_item_id;\n if (!conceptId) {\n return null;\n }\n\n const collection = await RDM.retrieveCollection(this._collectionId);\n if (!collection.getParentId) {\n throw new Error(\n `Collection ${this._collectionId} does not support hierarchy lookups. ` +\n 'Ensure WASM is initialized and the collection is a StaticCollection.'\n );\n }\n\n const parentId = collection.getParentId(conceptId);\n if (!parentId) {\n return null; // Top-level concept\n }\n\n const parentRef = getReferenceValueFromCollection(collection, parentId);\n if (!parentRef) {\n return null;\n }\n\n return new ReferenceValueViewModel(new StaticReference(parentRef as any), undefined, undefined, undefined, this._collectionId);\n }\n\n /**\n * Get the parent reference value, if this reference has a parent in the hierarchy.\n * @returns A new ReferenceValueViewModel for the parent, or null if no parent\n * @throws Error if the collection doesn't support hierarchy lookups\n */\n get parent(): Promise<ReferenceValueViewModel | null> {\n return this.getParent();\n }\n\n /**\n * Get all ancestor reference values, from immediate parent to root.\n * @returns Array of ReferenceValueViewModels for ancestors\n */\n async getAncestors(): Promise<ReferenceValueViewModel[]> {\n const result: ReferenceValueViewModel[] = [];\n let current: ReferenceValueViewModel | null = this;\n\n while ((current = await current.parent) !== null) {\n result.push(current);\n }\n\n return result;\n }\n\n /**\n * Get all ancestor reference values, from immediate parent to root.\n * @returns Array of ReferenceValueViewModels for ancestors\n */\n get ancestors(): Promise<ReferenceValueViewModel[]> {\n return this.getAncestors();\n }\n\n /**\n * Resolve any pending lookup. Called lazily when the resolved value is needed.\n */\n private async _resolvePending(): Promise<StaticReference | null> {\n // Already resolved\n if (this._resolvedRef) {\n return this._resolvedRef;\n }\n\n // Already have a reference (no pending lookup)\n if (this._ref) {\n this._resolvedRef = this._ref;\n return this._ref;\n }\n\n // No pending lookup\n if (!this._pendingLookup) {\n return null;\n }\n\n // Avoid duplicate resolution\n if (this._resolutionPromise) {\n return this._resolutionPromise;\n }\n\n this._resolutionPromise = (async () => {\n const lookup = this._pendingLookup!;\n const collection = await RDM.retrieveCollection(lookup.collectionId);\n\n let val: StaticReferenceData | null = null;\n if (lookup.type === 'uuid') {\n val = getReferenceValueFromCollection(collection, lookup.uuid);\n if (!val) {\n console.error(\"Could not find reference for UUID\", lookup.uuid, \"in collection\", lookup.collectionId);\n }\n } else if (lookup.type === 'label') {\n val = getReferenceValueByLabelFromCollection(collection, lookup.label);\n if (!val) {\n console.error(\"Could not find reference for label\", lookup.label, \"in collection\", lookup.collectionId);\n }\n }\n\n if (val) {\n this._resolvedRef = new StaticReference(val as any);\n // Update tile data if we have tile reference\n if (this._tile && this._nodeid) {\n const currentData = this._tile.data.get(this._nodeid);\n if (!Array.isArray(currentData)) {\n this._tile.data.set(this._nodeid, this._resolvedRef.toJSON());\n }\n }\n }\n\n return this._resolvedRef;\n })();\n\n return this._resolutionPromise;\n }\n\n async forJson(): Promise<any> {\n const ref = await this._resolvePending();\n // Return plain object for WASM compatibility\n return ref && typeof ref.toJSON === 'function' ? ref.toJSON() : ref;\n }\n\n async getValue(): Promise<StaticReference | null> {\n return this._resolvePending();\n }\n\n /**\n * Get the display string, resolving lazily if needed.\n * For sync contexts, returns the placeholder until resolved.\n */\n async getDisplay(): Promise<string> {\n const ref = await this._resolvePending();\n return ref ? referenceToString(ref) : '(unresolved)';\n }\n\n // For JSON serialization, return the plain reference object (sync version)\n // IMPORTANT: This must return the reference object, NOT the string value,\n // even though ReferenceValueViewModel extends String.\n toJSON(): any {\n // If we have a resolved ref, use it\n if (this._resolvedRef) {\n return this._resolvedRef.toJSON();\n }\n // If we have an original ref, use it\n if (this._ref) {\n return this._ref.toJSON();\n }\n // If pending lookup, return the marker so it can be resolved later\n if (this._pendingLookup) {\n if (this._pendingLookup.type === 'uuid') {\n return { __needs_rdm_lookup: true, uuid: this._pendingLookup.uuid };\n } else {\n return { __needs_rdm_label_lookup: true, label: this._pendingLookup.label, controlledList: this._pendingLookup.collectionId };\n }\n }\n return null;\n }\n\n // Convert to plain object for WASM tile data serialization\n async __asTileData(): Promise<any> {\n const ref = await this._resolvePending();\n return ref && typeof ref.toJSON === 'function' ? ref.toJSON() : ref;\n }\n\n static async __create(\n tile: StaticTile,\n node: StaticNode,\n value: any,\n _cacheEntry: object\n ): Promise<ReferenceValueViewModel | null> {\n const nodeid = node.nodeid;\n const collectionId = node.config?.controlledList || node.config?.rdmCollection;\n if (!collectionId) {\n throw Error(`Node ${node.alias} (${node.nodeid}) missing controlledList or rdmCollection in config`);\n }\n if (tile) {\n if (!tile.data.has(nodeid)) {\n tile.data.set(nodeid, null);\n }\n if (value !== null) {\n if (value instanceof Promise) {\n return value.then((value) => {\n return ReferenceValueViewModel.__create(tile, node, value, _cacheEntry);\n });\n } else if (typeof value == \"string\") {\n if (\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.exec(\n value,\n )\n ) {\n // UUID string - create lazy lookup (no fetch yet)\n const pendingLookup: PendingUuidLookup = { type: 'uuid', uuid: value, collectionId };\n // Store the marker in tile data for now\n tile.data.set(nodeid, { __needs_rdm_lookup: true, uuid: value });\n return new ReferenceValueViewModel(null, pendingLookup, tile, nodeid, collectionId);\n } else {\n throw Error(\n `Set references using values from collections, not strings: ${value}`,\n );\n }\n } else if (typeof value === \"object\" && value !== null && value.__needs_rdm_lookup && value.uuid) {\n // UUID marked for RDM lookup by the coercion layer - create lazy lookup (no fetch yet)\n const pendingLookup: PendingUuidLookup = { type: 'uuid', uuid: value.uuid, collectionId };\n // Keep the marker in tile data\n tile.data.set(nodeid, value);\n return new ReferenceValueViewModel(null, pendingLookup, tile, nodeid, collectionId);\n } else if (typeof value === \"object\" && value !== null && value.__needs_rdm_label_lookup && value.label) {\n // Label string marked for RDM lookup - create lazy lookup (no fetch yet)\n const lookupCollectionId = value.controlledList || collectionId;\n const pendingLookup: PendingLabelLookup = { type: 'label', label: value.label, collectionId: lookupCollectionId };\n // Keep the marker in tile data\n tile.data.set(nodeid, value);\n return new ReferenceValueViewModel(null, pendingLookup, tile, nodeid, lookupCollectionId);\n } else if (Array.isArray(value) && value.length > 0 && \"labels\" in value[0]) {\n // Handle array of pre-formatted reference values from business data\n // For now, just use the first value\n const ref = new StaticReference(value[0]);\n tile.data.set(nodeid, ref.toJSON());\n return new ReferenceValueViewModel(ref, undefined, undefined, undefined, collectionId);\n } else if (typeof value === \"object\" && value !== null && \"labels\" in value) {\n // Handle single pre-formatted reference value from business data\n const ref = new StaticReference(value);\n tile.data.set(nodeid, ref.toJSON());\n return new ReferenceValueViewModel(ref, undefined, undefined, undefined, collectionId);\n } else {\n throw Error(\"Could not set reference from this data: \" + JSON.stringify(value));\n }\n }\n }\n\n if (!tile || !value) {\n return null;\n }\n const str = new ReferenceValueViewModel(value, undefined, undefined, undefined, collectionId);\n return str;\n }\n}\n\nclass ReferenceListViewModel extends Array<ReferenceValueViewModel> implements IViewModel {\n _: IViewModel | Promise<IViewModel> | undefined = undefined;\n __parentPseudo: IPseudo | undefined;\n\n describeField = () => (this.__parentPseudo ? this.__parentPseudo.describeField() : null)\n describeFieldGroup = () => (this.__parentPseudo ? this.__parentPseudo.describeFieldGroup() : null)\n _value: Promise<(ReferenceValueViewModel | null)[]> | null = null;\n\n get [Symbol.toStringTag]() {\n return 'ReferenceList';\n }\n\n // Return comma-separated labels for string coercion (template rendering)\n toString(): string {\n return this.map(v => v?.toString() ?? '').filter(s => s).join(', ');\n }\n\n // Allow string comparison to reference type\n includes(value: ReferenceValueViewModel | string): boolean {\n return this.some(item => item == value);\n }\n\n // For JSON serialization, return the array of plain reference objects\n toJSON(): any[] {\n // Use Array.from to ensure we iterate properly over this Array subclass\n const result: any[] = [];\n for (let i = 0; i < this.length; i++) {\n const v = this[i] as ReferenceValueViewModel;\n if (v && v._ref) {\n // Access _ref directly - it's a StaticReference with toJSON method\n const ref = v._ref;\n if (typeof (ref as any).toJSON === 'function') {\n result.push((ref as any).toJSON());\n } else {\n result.push(ref);\n }\n } else if (v) {\n // Fallback: if it's a ReferenceValueViewModel (extends String),\n // avoid returning the string primitive\n result.push(null);\n }\n }\n return result;\n }\n\n async forJson(): Promise<any[] | null> {\n const value = await this._value;\n if (!value) return null;\n // Await each forJson call since they're async\n const results = await Promise.all(value.map((v) => (v ? v.forJson() : null)));\n // Filter out nulls and return flat array of reference objects\n return results.filter(r => r !== null);\n }\n\n static async __create(\n tile: StaticTile,\n node: StaticNode,\n value: any,\n _cacheEntry: object | null = null\n ): Promise<ReferenceListViewModel> {\n const nodeid = node.nodeid;\n if (!tile.data.has(nodeid)) {\n tile.data.set(nodeid, null);\n }\n\n if (value === null) {\n const str = new ReferenceListViewModel();\n str._value = Promise.resolve([]);\n return str;\n }\n\n if (!Array.isArray(value)) {\n throw Error(\n `Cannot set an (entire) reference list value on node ${nodeid} except via an array: ${JSON.stringify(value)}`,\n );\n }\n\n // Create all view models (may be promises)\n const viewModelPromises = value.map((c, _i) => {\n if (c instanceof ReferenceValueViewModel) {\n return Promise.resolve(c);\n }\n return ReferenceValueViewModel.__create(tile, node, c, {});\n });\n\n // Await all view models to resolve\n const resolvedViewModels = await Promise.all(viewModelPromises);\n const validViewModels = resolvedViewModels.filter((v): v is ReferenceValueViewModel => v !== null);\n\n // Convert to plain objects for tile data\n const tileDataRefs = await Promise.all(\n validViewModels.map(async (vm) => {\n const ref = await vm.getValue();\n return ref && typeof ref.toJSON === 'function' ? ref.toJSON() : ref;\n })\n );\n\n // Set tile data with resolved plain objects\n tile.data.set(nodeid, tileDataRefs);\n\n // Create the list view model with resolved values\n const str = new ReferenceListViewModel();\n str.push(...validViewModels);\n str._value = Promise.resolve(validViewModels);\n return str;\n }\n\n async __asTileData() {\n if (!this._value) return null;\n const values = await this._value;\n // Convert each ReferenceValueViewModel to plain object for WASM compatibility\n return Promise.all(values.map(async (v) => {\n if (!v) return null;\n return v.__asTileData ? await v.__asTileData() : v;\n }));\n }\n}\n\nclass ReferenceMergedDataType {\n static async __create(\n tile: StaticTile,\n node: StaticNode,\n value: any,\n _cacheEntry: object\n ): Promise<ReferenceValueViewModel | ReferenceListViewModel | null> {\n const config = nodeConfig.nodeConfigManager.retrieve(node);\n if (config && config.multiValue) {\n return ReferenceListViewModel.__create(tile, node, value, _cacheEntry);\n }\n return ReferenceValueViewModel.__create(tile, node, value, _cacheEntry);\n }\n}\n\nviewModels.CUSTOM_DATATYPES.set(\"reference\", ReferenceMergedDataType);\n// Register \"reference\" as a resolvable datatype for label resolution.\n// This tells the core that reference nodes should be included in\n// alias-to-collection mapping, so resolveLabels resolves reference labels.\nregisterResolvableDatatype(\"reference\");\n"],"names":["utils.getCurrentLanguage","viewModels.CUSTOM_DATATYPES","value","str","nodeConfig.nodeConfigManager"],"mappings":"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"}