@_linked/shape-ui 2.4.0 → 2.5.1

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 (44) hide show
  1. package/lib/esm/backend.js.map +1 -1
  2. package/lib/esm/columns.js.map +1 -1
  3. package/lib/esm/components/AddInstanceForms.js.map +1 -1
  4. package/lib/esm/components/AvatarEditor.js.map +1 -1
  5. package/lib/esm/components/BatchEditDrawer.js.map +1 -1
  6. package/lib/esm/components/CheckboxEditor.js.map +1 -1
  7. package/lib/esm/components/CustomMultiSelect.js.map +1 -1
  8. package/lib/esm/components/DateEditor.js.map +1 -1
  9. package/lib/esm/components/DynamicFormField.js.map +1 -1
  10. package/lib/esm/components/EditInstanceForms.js.map +1 -1
  11. package/lib/esm/components/FilterBadge.js.map +1 -1
  12. package/lib/esm/components/FormField.js.map +1 -1
  13. package/lib/esm/components/InstanceDeletionDialog.js.map +1 -1
  14. package/lib/esm/components/InstanceOverview.js.map +1 -1
  15. package/lib/esm/components/InstanceView.js.map +1 -1
  16. package/lib/esm/components/NodeBadge.js.map +1 -1
  17. package/lib/esm/components/NodeValuesEditor.js.map +1 -1
  18. package/lib/esm/components/RadioButtonEditor.js.map +1 -1
  19. package/lib/esm/components/ReactTable.js.map +1 -1
  20. package/lib/esm/components/SelectEditor.js.map +1 -1
  21. package/lib/esm/components/SwitchEditor.js.map +1 -1
  22. package/lib/esm/components/TextareaEditor.js.map +1 -1
  23. package/lib/esm/components/TextfieldEditor.js.map +1 -1
  24. package/lib/esm/components/ToggleEditor.js.map +1 -1
  25. package/lib/esm/host.js.map +1 -1
  26. package/lib/esm/hostContext.js.map +1 -1
  27. package/lib/esm/index.js.map +1 -1
  28. package/lib/esm/package.js.map +1 -1
  29. package/lib/esm/read.js.map +1 -1
  30. package/lib/esm/search.js.map +1 -1
  31. package/lib/esm/shape/contracts.js.map +1 -1
  32. package/lib/esm/shape/naming.js.map +1 -1
  33. package/lib/esm/shape/nodeDisplay.js.map +1 -1
  34. package/lib/esm/shape/propertyTypes.js.map +1 -1
  35. package/lib/esm/shape/propertyVisibility.js.map +1 -1
  36. package/lib/esm/shape/shapeDependencies.js.map +1 -1
  37. package/lib/esm/shape/tableFilters.js.map +1 -1
  38. package/lib/esm/shape/types.js.map +1 -1
  39. package/lib/esm/shape/useFormDependencies.js.map +1 -1
  40. package/lib/esm/shape/validation.js.map +1 -1
  41. package/lib/esm/types.js.map +1 -1
  42. package/lib/esm/utils/helper.js.map +1 -1
  43. package/lib/esm/write.js.map +1 -1
  44. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/read.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Reading instances of a shape, through the Linked Query DSL.\n *\n * The counterpart of `write.ts`, and the piece a consumer previously had to write themselves:\n * the components took `instances` as a prop, and the only exported read helper was\n * picker-shaped (label only). So a host got the rendering for free and reimplemented the\n * reading — which is how two ideas of \"what a row is\" appear in one codebase.\n *\n * Names no project. `SelectBuilder.from(shapeIri)` is routed by `LinkedStorage` exactly as the\n * write is: `AppDataRouter` inside a studio, the app's own default dataset in a standalone or\n * Capacitor build. Read and write route as a pair, or a table ends up looking at a different\n * dataset than the form saves into.\n *\n * The projection comes from `columnsFor`, the same rule the table's columns use, so a row can\n * never carry a property the table does not show or miss one it does.\n */\n\nimport {SelectBuilder} from '@_linked/core/queries/QueryBuilder';\nimport type {\n NodeShapeWire,\n PropertyShapeWire,\n} from '@_linked/core/shapes/nodeShapeWire';\nimport {columnsFor, type DisplayContext} from './columns.js';\n\n/**\n * Key each row by the property LABEL, whatever the query returned.\n *\n * The projection asks for `instance[property.label]`, but results come back keyed by the\n * property-shape IRI's local part. For the framework's own IRI scheme —\n * `.../shape/{pkg}/{Shape}/{prop}` — those are the same string, so the mismatch is invisible.\n * For a shape authored in a hash namespace they are not: `…/vocab#Contact/name` has the local\n * part `Contact/name`, and every value lands under a key no caller looks up. The table then\n * renders empty columns with no error, which is the worst way for this to fail.\n *\n * Matching on the last path segment is what makes both schemes agree. Anything already keyed\n * by its label is left alone, so this costs nothing in the common case.\n */\nfunction keyByLabel(\n rows: Record<string, unknown>[],\n properties: PropertyShapeWire[],\n): Record<string, unknown>[] {\n const labels = properties.map((p) => p.label).filter(Boolean) as string[];\n if (labels.length === 0) return rows;\n\n const lastSegment = (key: string) => key.split(/[#/]/).pop() ?? key;\n\n return rows.map((row) => {\n const out: Record<string, unknown> = {};\n // `id` is not a property; it names the row.\n if ('id' in row) out.id = row.id;\n for (const label of labels) {\n if (label in row) {\n out[label] = row[label];\n continue;\n }\n const match = Object.keys(row).find(\n (key) => key !== 'id' && lastSegment(key) === label,\n );\n if (match) out[label] = row[match];\n }\n return out;\n });\n}\n\nexport interface InstanceQuery {\n /** Which properties to read. Defaults to the columns for `context`. */\n properties?: PropertyShapeWire[];\n context?: DisplayContext;\n limit?: number;\n offset?: number;\n}\n\nexport interface InstanceRows {\n rows: Record<string, unknown>[];\n /** The properties actually read, in the order they were asked for. */\n properties: PropertyShapeWire[];\n}\n\n/**\n * Instances of one shape.\n *\n * The shape must already be registered — call `loadShapeCatalog` first. That is deliberate\n * rather than convenient: registering inside the query would hide a catalog read behind\n * every table refresh.\n */\nexport async function selectInstances(\n shape: NodeShapeWire,\n query: InstanceQuery = {},\n): Promise<InstanceRows> {\n const properties =\n query.properties ??\n columnsFor(shape, query.context ?? 'table').map((column) => column.property);\n\n if (properties.length === 0) {\n // Nothing showable. An empty result is the honest answer; a query with no projection\n // would either error or return bare subjects the caller cannot render.\n return {rows: [], properties};\n }\n\n // `any` on the proxy parameter is the established form for a runtime shape: the shape\n // is not a compiled class, so there is no generated type for the builder to infer from.\n // The property labels are the contract, and they come from the shape itself.\n let builder = SelectBuilder.from(shape.id).select((instance: any) =>\n properties.map((property) => instance[property.label]),\n ) as unknown as {\n limit(n: number): unknown;\n offset(n: number): unknown;\n exec(): Promise<Record<string, unknown>[]>;\n };\n\n if (query.limit != null) builder = builder.limit(query.limit) as typeof builder;\n if (query.offset != null) builder = builder.offset(query.offset) as typeof builder;\n\n const rows = await builder.exec();\n return {rows: keyByLabel(rows ?? [], properties), properties};\n}\n\n/**\n * One instance by id.\n *\n * Same query as {@link selectInstances}, narrowed to a subject — so a detail view and a\n * table cannot disagree about what a property means or how it is read.\n */\nexport async function selectInstance(\n shape: NodeShapeWire,\n instanceId: string,\n query: InstanceQuery = {},\n): Promise<{row: Record<string, unknown> | null; properties: PropertyShapeWire[]}> {\n const properties =\n query.properties ??\n (shape.propertyShapes ?? []).filter((p) => p.displayHidden !== true && !!p.label);\n\n if (properties.length === 0) return {row: null, properties};\n\n const rows = (await (\n SelectBuilder.from(shape.id).select((instance: any) =>\n properties.map((property) => instance[property.label]),\n ) as unknown as {\n where(fn: (i: any) => unknown): {\n exec(): Promise<Record<string, unknown>[]>;\n };\n }\n )\n .where((instance: any) => instance.equals({id: instanceId}))\n .exec()) as Record<string, unknown>[];\n\n return {row: keyByLabel(rows ?? [], properties)[0] ?? null, properties};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Searching for instances of a shape, through the Linked Query DSL.\n *\n * This is the **default** implementation the host gets for free. Without it,\n * `searchInstances` was an optional host method, so a relation field rendered an empty\n * picker until someone wrote a search by hand — which made \"works in a standalone app\"\n * true of the table and false of every relation field.\n *\n * It names no project. `SelectBuilder.from(shapeIri)` is routed by `LinkedStorage` exactly\n * like the table read: `AppDataRouter` inside Create Now, the app's own default dataset in\n * a standalone build.\n *\n * The label comes from `labelProperty()` — the same rule the table uses for its label\n * column, so a row and a picker chip cannot disagree about what identifies an instance.\n * Create Now's `Project.searchInstances` RPC computed a label server-side with its own\n * rule; two mechanisms for one question is how the `getShapeInstances` divergence started.\n */\n\nimport {SelectBuilder} from '@_linked/core/queries/QueryBuilder';\nimport type {NodeShapeWire} from '@_linked/core/shapes/nodeShapeWire';\nimport {labelProperty} from './columns.js';\nimport type {InstanceSuggestion, SearchInstancesOptions} from './host.js';\n\n/** Case-insensitive \"contains\" over the label, or all instances when the query is empty. */\nexport async function searchInstancesWithDsl(\n shape: NodeShapeWire,\n options: SearchInstancesOptions = {},\n): Promise<{results: InstanceSuggestion[]; hasMore: boolean}> {\n const label = labelProperty(shape);\n const limit = options.limit ?? 20;\n const offset = options.offset ?? 0;\n\n // Ask for one more than the caller wants. That is how `hasMore` is answered without a\n // second COUNT query — cheaper, and it cannot disagree with the page it describes.\n const probe = limit + 1;\n\n let builder = SelectBuilder.from(shape.id).select((instance: any) =>\n label ? [instance[label.label]] : [],\n ) as unknown as {\n where(fn: (i: any) => unknown): unknown;\n limit(n: number): unknown;\n offset(n: number): unknown;\n exec(): Promise<Record<string, unknown>[]>;\n };\n\n const query = options.query?.trim();\n if (query && label) {\n // No label means nothing to match on, so a text query would filter everything out —\n // better to return the unfiltered page than an empty one.\n builder = builder.where((instance: any) =>\n instance[label.label].contains(query),\n ) as typeof builder;\n }\n\n builder = builder.limit(probe) as typeof builder;\n if (offset) builder = builder.offset(offset) as typeof builder;\n\n const rows = (await builder.exec()) ?? [];\n const hasMore = rows.length > limit;\n const page = hasMore ? rows.slice(0, limit) : rows;\n\n return {\n results: page.map((row) => toSuggestion(row, label?.label)),\n hasMore,\n };\n}\n\n/**\n * Narrow a result set to specific ids.\n *\n * Applied after the query rather than inside it: `narrowedIds` comes from another field's\n * value and is usually a handful of ids, so filtering in memory avoids building a VALUES\n * clause for a case that rarely has many members. Revisit if that assumption breaks.\n */\nexport function narrowSuggestions(\n suggestions: InstanceSuggestion[],\n narrowedIds?: string[] | null,\n): InstanceSuggestion[] {\n if (!narrowedIds?.length) return suggestions;\n const allowed = new Set(narrowedIds);\n return suggestions.filter((s) => allowed.has(s.id));\n}\n\nfunction toSuggestion(\n row: Record<string, unknown>,\n labelKey?: string,\n): InstanceSuggestion {\n const id = String(row.id ?? '');\n const raw = labelKey ? row[labelKey] : undefined;\n return {\n id,\n // Fall back to the IRI rather than an empty chip. A shape with no showable label is a\n // modelling gap, and showing the id at least lets someone recognise the row.\n label: displayValue(raw) ?? id,\n };\n}\n\nfunction displayValue(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === 'string') return value || undefined;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return displayValue(value[0]);\n if (typeof value === 'object') {\n const candidate = value as {label?: unknown; id?: unknown};\n return displayValue(candidate.label) ?? displayValue(candidate.id);\n }\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/shape/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/shape/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG","sourcesContent":["/**\n * The wire shapes these components speak.\n *\n * Declared here rather than imported from a host application's client package. They were\n * imported from `create-now-js`, and because a `.d.ts` keeps its type imports, the emitted\n * types carried that dependency forward — so anyone installing this package needed one\n * product's client just to typecheck a table. That is precisely the coupling the package\n * exists to avoid, and it survived the move because type-only imports are invisible at\n * runtime and nothing complained.\n *\n * TypeScript is structural, so a host that already has its own version of these — under any\n * name — passes them straight in with no adapter and no cast.\n */\n\nimport type {PaginationState} from '@tanstack/react-table';\n\n/** Which page of a shape's instances to read, in what order, filtered how. */\nexport interface ShapeInstancesQueryConfig extends PaginationState {\n orderBy?: unknown;\n filters: unknown[];\n}\n\n/** One instance marked for deletion. */\nexport interface InstanceDeletionTarget {\n instanceId: string;\n shapeIri: string;\n}\n\n/** Something pointing AT an instance that is about to be deleted. */\nexport interface InstanceDeletionInboundReference {\n subjectId: string;\n propertyIri: string;\n}\n\n/**\n * What deleting would actually do.\n *\n * `impactHash` is the point of the two-step flow: the host re-checks it before deleting, so a\n * preview the viewer read and a graph that changed underneath cannot be confirmed by mistake.\n */\nexport interface InstanceDeletionPreview {\n impactHash: string;\n targets: Array<\n InstanceDeletionTarget & {\n inboundReferences: InstanceDeletionInboundReference[];\n sourceDocuments: string[];\n pendingRecreation: boolean;\n }\n >;\n}\n\nexport interface InstanceDeletionPreviewInput {\n projectId: string;\n targets: InstanceDeletionTarget[];\n}\n\nexport interface InstanceDeletionExecuteInput extends InstanceDeletionPreviewInput {\n expectedImpactHash: string;\n}\n\nexport interface InstanceDeletionResult {\n deleted: InstanceDeletionTarget[];\n /** Not deleted, because a source document would recreate them on the next ingestion. */\n suppressed: Array<InstanceDeletionTarget & {sourceDocumentIds: string[]}>;\n activityEventId?: string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/shape/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACrC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACrE,IAAI,WAAW;QAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACzE,IAAI,WAAW;QAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,GAAW;;IAChD,MAAM,QAAQ,GAAG,MAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,mCAAI,GAAG,CAAC;IAC7C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/shape/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,OAAO,GAAG;SACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACrC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACrE,IAAI,WAAW;QAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACzE,IAAI,WAAW;QAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,GAAW;;IAChD,MAAM,QAAQ,GAAG,MAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,mCAAI,GAAG,CAAC;IAC7C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC","sourcesContent":["/**\n * Turning a shape IRI or a label into something a person can read.\n *\n * Pure string work over the Linked shape-IRI scheme (arch-02), with no knowledge of any\n * application: the same IRI produces the same short form wherever it is rendered. These live\n * here because a table header, a form label and a breadcrumb must not each have their own idea\n * of how `ActionPlan` is written out.\n */\n\n/**\n * Format a shape or property label for display.\n *\n * `actionPlan` → `Action Plan`, and `HTMLParser` → `HTML Parser` — the second rule exists\n * because the naive lowercase-to-uppercase split turns an acronym into `H T M L Parser`.\n * Already-spaced and lowercase-only strings pass through unharmed.\n */\nexport function formatShapeLabel(str: string): string {\n if (!str) return str;\n return str\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/^./, (c) => c.toUpperCase())\n .trim();\n}\n\n/**\n * The short form of a shape IRI: `{packageSlug}:{ShapeName}`.\n *\n * Current scheme (arch-02): `https://linked.cm/shape/{slug}/{ShapeName}`.\n * Legacy scheme: `https://data.lincd.org/module/{slug}/shape/{name}` — still read, because\n * shapes materialized under the old scheme are still in stores.\n *\n * Falls back to the last two path segments rather than throwing. A shape from neither scheme\n * still needs *a* short form, and a wrong-looking label is far better than a page that fails\n * to render because one IRI was unusual.\n */\nexport function getShapeParamsFromUri(nodeShapeURI: string): string {\n const linkedMatch = nodeShapeURI.match(/\\/shape\\/([^/]+)\\/([^/]+)$/);\n if (linkedMatch) return `${linkedMatch[1]}:${linkedMatch[2]}`;\n\n const legacyMatch = nodeShapeURI.match(/module\\/(.*?)\\/shape\\/([^/]+)$/);\n if (legacyMatch) return `${legacyMatch[1]}:${legacyMatch[2]}`;\n\n const parts = nodeShapeURI.split('/');\n return `${parts[parts.length - 2]}:${parts[parts.length - 1]}`;\n}\n\n/** The display name from a short form: `irl:ActionPlan` → `Action Plan`. */\nexport function getShapeNameFromParams(str: string): string {\n const lastWord = str.split(':').pop() ?? str;\n return formatShapeLabel(lastWord.charAt(0).toUpperCase() + lastWord.slice(1));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeDisplay.js","sourceRoot":"","sources":["../../../src/shape/nodeDisplay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodeDisplay.js","sourceRoot":"","sources":["../../../src/shape/nodeDisplay.ts"],"names":[],"mappings":"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","sourcesContent":["import { Prefix } from '@_linked/core/utils/Prefix';\n\n/**\n * Centralized label resolution for any node/value in the CMS.\n * Handles NamedNode objects, Literal values, and plain strings consistently.\n * Never returns [object Object].\n */\nexport function getNodeDisplay(value: any): string {\n if (value == null) return '';\n\n // Primitives: string, number, boolean\n if (typeof value === 'string') return value;\n if (typeof value === 'number') return String(value);\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n\n // Object with label/name/identifier fields (Shape, QResult, etc.)\n if (typeof value === 'object') {\n if (value.label) return String(value.label);\n if (value.name) return String(value.name);\n if (value.identifier) return String(value.identifier);\n\n // NamedNode with URI — try prefixed form, else last URI segment\n const uri = value.uri || value.id;\n if (typeof uri === 'string' && uri.length > 0) {\n return toPrefixedOrSegment(uri);\n }\n\n // Literal with .value\n if (value.value != null) return String(value.value);\n }\n\n // Final fallback — never [object Object]\n return String(value);\n}\n\n/**\n * Convert a raw enum value label into a human-readable string.\n * - camelCase → \"Camel Case\" (e.g., \"inPerson\" → \"In Person\")\n * - already spaced/titled → unchanged\n * - short lowercase → capitalized (e.g., \"home\" → \"Home\")\n */\nexport function humanizeEnumLabel(raw: string): string {\n if (!raw) return '';\n // If it already contains spaces, just ensure first letter is capitalized\n if (raw.includes(' ')) {\n return raw.charAt(0).toUpperCase() + raw.slice(1);\n }\n // Split on camelCase boundaries: \"inPerson\" → [\"in\", \"Person\"]\n const parts = raw.replace(/([a-z])([A-Z])/g, '$1 $2').split(' ');\n return parts\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1))\n .join(' ');\n}\n\n/**\n * Try to get a prefixed URI (e.g., \"irlcg:Team\"), else extract the last path segment.\n */\nfunction toPrefixedOrSegment(uri: string): string {\n try {\n const prefixed = Prefix.toPrefixedIfPossible(uri);\n if (prefixed !== uri) return prefixed;\n } catch {\n // Prefix resolution not available\n }\n // Extract last path segment or fragment\n const hashIdx = uri.lastIndexOf('#');\n if (hashIdx >= 0) return uri.slice(hashIdx + 1);\n const slashIdx = uri.lastIndexOf('/');\n if (slashIdx >= 0) return uri.slice(slashIdx + 1);\n return uri;\n}\n\n/** The part of an IRI a person reads: everything after the last `#` or `/`. */\nfunction localPart(iri: string): string {\n const hash = iri.lastIndexOf('#');\n if (hash >= 0) return iri.slice(hash + 1);\n const slash = iri.lastIndexOf('/');\n return slash >= 0 ? iri.slice(slash + 1) : iri;\n}\n\n/**\n * The choices for an enumerated property, as `{id, label}` pairs.\n *\n * `sh:in` holds its members as the metamodel does — an IRI stays a reference, a literal stays\n * a literal — and carries **no label**. The DTO this package used to take carried `inValues`\n * with a label attached, but that label was never in the graph: it was the IRI's local part,\n * derived at projection time. Deriving it here instead is the same answer from one place, and\n * it is what lets the components drop the DTO.\n *\n * Three call sites needed it — the filter drawer, the form field, and validation — and each\n * had its own idea of how to unwrap a member. One rule now.\n */\nexport function enumOptions(property: {\n in?: unknown[];\n /** The DTO's spelling, still accepted so a host holding one is not turned away. */\n inValues?: {id: string; label?: string}[];\n}): {id: string; label: string}[] {\n const members = property.in ?? property.inValues;\n if (!Array.isArray(members) || members.length === 0) return [];\n return members.map((member) => {\n if (member !== null && typeof member === 'object') {\n const {id, label} = member as {id?: unknown; label?: unknown};\n const value = String(id ?? '');\n return {\n id: value,\n label: typeof label === 'string' ? label : humanizeEnumLabel(localPart(value)),\n };\n }\n // A literal enumeration — `sh:in (\"red\" \"green\")`. Its own value is its identity, and\n // there is no IRI to take a local part of.\n const value = String(member);\n return {id: value, label: humanizeEnumLabel(value)};\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"propertyTypes.js","sourceRoot":"","sources":["../../../src/shape/propertyTypes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAmBnD,MAAM,UAAU,iBAAiB,CAAC,QAA2B;;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,mCAAmC;IACnC,EAAE;IACF,sFAAsF;IACtF,oEAAoE;IACpE,6FAA6F;IAC7F,sFAAsF;IACtF,qFAAqF;IACrF,4EAA4E;IAC5E,MAAM,UAAU,GACd,MAAA,CAAE,QAAmC,CAAC,QAAQ,CAAC,mCAC/C,CAAE,QAAwC,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,cAAc,CAAC;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0BAA0B;IAC1B,IACE,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;QAC5B,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE;QAClC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,cAAc,CAAC,EAAE,EACvC,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9D,CAAC;IAED,4CAA4C;IAC5C,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAA,QAAQ,CAAC,QAAQ,0CAAE,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAEvB,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAE5C,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAEtC,IAAI,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;QAE9C,IACE,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;YACrB,EAAE,MAAK,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA;YACnB,EAAE,MAAK,MAAA,GAAG,CAAC,OAAO,0CAAE,EAAE,CAAA;YACtB,EAAE,MAAK,MAAA,GAAG,CAAC,KAAK,0CAAE,EAAE,CAAA;YACpB,EAAE,MAAK,MAAA,GAAG,CAAC,MAAM,0CAAE,EAAE,CAAA,EACrB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,EAAE,KAAK,yCAAyC;YAAE,OAAO,KAAK,CAAC;QAEnE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAA2B;;IACvD,MAAM,EAAE,GAAG,MAAA,QAAQ,CAAC,QAAQ,0CAAE,EAAE,CAAC;IACjC,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAK,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"propertyTypes.js","sourceRoot":"","sources":["../../../src/shape/propertyTypes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAmBnD,MAAM,UAAU,iBAAiB,CAAC,QAA2B;;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,mCAAmC;IACnC,EAAE;IACF,sFAAsF;IACtF,oEAAoE;IACpE,6FAA6F;IAC7F,sFAAsF;IACtF,qFAAqF;IACrF,4EAA4E;IAC5E,MAAM,UAAU,GACd,MAAA,CAAE,QAAmC,CAAC,QAAQ,CAAC,mCAC/C,CAAE,QAAwC,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,cAAc,CAAC;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0BAA0B;IAC1B,IACE,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE;QAC5B,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE;QAClC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,cAAc,CAAC,EAAE,EACvC,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9D,CAAC;IAED,4CAA4C;IAC5C,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAA,QAAQ,CAAC,QAAQ,0CAAE,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAEvB,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAE5C,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAEtC,IAAI,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;QAE9C,IACE,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;YACrB,EAAE,MAAK,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA;YACnB,EAAE,MAAK,MAAA,GAAG,CAAC,OAAO,0CAAE,EAAE,CAAA;YACtB,EAAE,MAAK,MAAA,GAAG,CAAC,KAAK,0CAAE,EAAE,CAAA;YACpB,EAAE,MAAK,MAAA,GAAG,CAAC,MAAM,0CAAE,EAAE,CAAA,EACrB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,EAAE,KAAK,yCAAyC;YAAE,OAAO,KAAK,CAAC;QAEnE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAA2B;;IACvD,MAAM,EAAE,GAAG,MAAA,QAAQ,CAAC,QAAQ,0CAAE,EAAE,CAAC;IACjC,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAK,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA,CAAC;AACtD,CAAC","sourcesContent":["import type { PropertyShapeWire } from '@_linked/core/shapes/nodeShapeWire';\nimport { shacl } from '@_linked/core/ontologies/shacl';\nimport { xsd } from '@_linked/core/ontologies/xsd';\n\n/**\n * Classifies a SHACL property shape into a UI-level type.\n * Used by form fields (DynamicFormField) and table filter widgets\n * to determine the appropriate input control and filter operators.\n */\nexport type PropertyUiType =\n | 'text'\n | 'number'\n | 'date'\n | 'datetime'\n | 'boolean'\n | 'url'\n | 'iri-single'\n | 'iri-multi'\n | 'enum-literal'\n | 'enum-iri';\n\nexport function getPropertyUiType(property: PropertyShapeWire): PropertyUiType | null {\n const nodeKind = property.nodeKind;\n if (!nodeKind) return null;\n\n // Enum: sh:in with values present.\n //\n // `sh:in`, the metamodel spelling. The DTO's `inValues` is still read for a host that\n // hands one over, but nothing in this package produces it any more.\n // (was: accepts BOTH forms. The DTO calls it `inValues` — `{id, label}` pairs with a derived\n // display label); the metamodel calls it `in` and keeps members as members. The table\n // now receives the metamodel form, and keying only on `inValues` silently downgraded\n // every enum column to a free-text filter and a free-text batch-edit input.\n const enumValues =\n ((property as {inValues?: unknown[]}).inValues) ??\n ((property as unknown as {in?: unknown[]}).in);\n if (enumValues && enumValues.length > 0) {\n if (nodeKind.id === shacl.Literal.id) return 'enum-literal';\n return 'enum-iri';\n }\n\n // Object / IRI properties\n if (\n nodeKind.id === shacl.IRI.id ||\n nodeKind.id === shacl.BlankNode.id ||\n nodeKind.id === shacl.BlankNodeOrIRI.id\n ) {\n return property.maxCount === 1 ? 'iri-single' : 'iri-multi';\n }\n\n // Literal properties — classify by datatype\n if (nodeKind.id === shacl.Literal.id) {\n const dt = property.datatype?.id;\n if (!dt) return 'text';\n\n if (dt === xsd.boolean.id) return 'boolean';\n\n if (dt === xsd.date.id) return 'date';\n\n if (dt === xsd.dateTime.id) return 'datetime';\n\n if (\n dt === xsd.integer.id ||\n dt === xsd.long?.id ||\n dt === xsd.decimal?.id ||\n dt === xsd.float?.id ||\n dt === xsd.double?.id\n ) {\n return 'number';\n }\n\n if (dt === 'http://www.w3.org/2001/XMLSchema#anyURI') return 'url';\n\n return 'text';\n }\n\n return 'text';\n}\n\n/**\n * Returns whether a property UI type represents an integer (vs floating point).\n */\nexport function isIntegerType(property: PropertyShapeWire): boolean {\n const dt = property.datatype?.id;\n return dt === xsd.integer.id || dt === xsd.long?.id;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"propertyVisibility.js","sourceRoot":"","sources":["../../../src/shape/propertyVisibility.ts"],"names":[],"mappings":"AA2CA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA+B,EAC/B,SAAmD,EACnD,OAGC;;IAED,MAAM,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,mCAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,IAAI,CAAC;IAE7C,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,kFAAkF;QAClF,8EAA8E;QAC9E,MAAM,OAAO,GAAG,IAGf,CAAC;QAEF,IAAI,UAA8B,CAAC;QAEnC,gFAAgF;QAChF,kFAAkF;QAClF,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACnC,UAAU,GAAG,QAAQ,CAAC;QACxB,CAAC;QACD,mDAAmD;aAC9C,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3B,UAAU,GAAG,UAAU,CAAC;QAC1B,CAAC;QACD,iFAAiF;QACjF,wEAAwE;aACnE,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YACrC,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;QACD,2DAA2D;aACtD,IACH,IAAI;YACJ,CAAC,IAAI,CAAC,cAAc,KAAK,WAAW,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,EACzE,CAAC;YACD,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;QACD,+DAA+D;aAC1D,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC;YAChD,UAAU,GAAG,MAAM,CAAC;QACtB,CAAC;QACD,8EAA8E;aACzE,CAAC;YACJ,UAAU,GAAG,UAAU,CAAC;QAC1B,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC;AAID;;;GAGG;AACH,SAAS,QAAQ,CAAC,GAAQ;IACxB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,KAAK,EAAE,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,qBAAqB;IAC/D,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAgC,EAChC,IAAoB,EACpB,YAAkC;IAElC,sFAAsF;IACtF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;IAEpE,IAAI,MAA4B,CAAC;IAEjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QAEjB,KAAK,MAAM;YACT,MAAM,GAAG,OAAO,CAAC,MAAM,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAC9D,CAAC;YACF,MAAM;QAER,KAAK,UAAU;YACb,MAAM,GAAG,OAAO,CAAC,MAAM,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAC9D,CAAC;YACF,MAAM;QAER,KAAK,WAAW;YACd,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5B,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU;oBAAE,OAAO,IAAI,CAAC;gBAC7C,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACzC,IAAI,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1D,OAAO,IAAI,CAAC;gBACd,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QAER;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,sFAAsF;IACtF,qFAAqF;IACrF,sDAAsD;IACtD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"propertyVisibility.js","sourceRoot":"","sources":["../../../src/shape/propertyVisibility.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyShapeWire } from '@_linked/core/shapes/nodeShapeWire';\n\n/**\n * `hidden` is a REMOVAL, not the weakest shown category.\n *\n * `optional` is still displayed — it fills the \"add another field\" picker and is rendered\n * in `full` and in `form-edit` whenever the instance has a value. So mapping\n * `linked_core:displayHidden` onto `optional` did nothing at all. Hidden needs its own\n * value that every mode filters, including the \"nothing qualified, show everything\"\n * fallback.\n */\nexport type PropertyVisibility = 'required' | 'used' | 'optional' | 'hidden';\n\nexport interface PropertyUsageData {\n count: number;\n total: number;\n percentage: number;\n}\n\n/** Code analysis classification from analyze-shape-usage.ts */\nexport type CodeClassification =\n | 'essential'\n | 'common'\n | 'contextual'\n | 'display'\n | 'unused';\n\nexport interface CodeUsageData {\n classification: CodeClassification;\n writeRefs: number;\n readRefs: number;\n}\n\n/** Per-shape code usage manifest (keyed by shape class name → property label) */\nexport type CodeUsageManifest = Record<string, Record<string, CodeUsageData>>;\n\nexport interface ClassifiedProperty {\n property: PropertyShapeWire;\n visibility: PropertyVisibility;\n usage?: PropertyUsageData;\n codeUsage?: CodeUsageData;\n}\n\n/**\n * Classify properties using three signals (in priority order):\n *\n * 1. Shape constraints (SHACL): minCount > 0 → required\n * 2. Code analysis: essential/common → used; contextual/display/unused → optional\n * 3. Data usage (SPARQL): percentage >= threshold → used\n *\n * The code analysis signal is the primary differentiator for non-required\n * properties — it reflects how the shape is actually used when submitting\n * data in the project's code.\n */\nexport function classifyProperties(\n properties: PropertyShapeWire[],\n usageData: Record<string, PropertyUsageData> | null,\n options?: {\n usageThreshold?: number;\n codeUsage?: Record<string, CodeUsageData> | null;\n }\n): ClassifiedProperty[] {\n const threshold = options?.usageThreshold ?? 1;\n const codeUsage = options?.codeUsage ?? null;\n\n return properties.map((prop) => {\n const usage = usageData?.[prop.label];\n const code = codeUsage?.[prop.label];\n // Display metadata the shape itself declares. Read structurally so this works for\n // both the metamodel and the derived DTO, which has no home for these fields.\n const display = prop as unknown as {\n displayHidden?: boolean;\n displayRank?: number;\n };\n\n let visibility: PropertyVisibility;\n\n // 0. The shape says not to render it. This outranks everything below, including\n // minCount: a required property can still be one a person should not be shown.\n if (display.displayHidden === true) {\n visibility = 'hidden';\n }\n // 1. SHACL constraint: minCount > 0 means required\n else if (prop.minCount > 0) {\n visibility = 'required';\n }\n // 1b. A declared display rank is the shape stating the property matters. It is a\n // first-party statement, so it outranks the inferred signals below.\n else if (display.displayRank != null) {\n visibility = 'used';\n }\n // 2. Code analysis: essential/common properties are \"used\"\n else if (\n code &&\n (code.classification === 'essential' || code.classification === 'common')\n ) {\n visibility = 'used';\n }\n // 3. Data usage: >= threshold% of instances have this property\n else if (usage && usage.percentage >= threshold) {\n visibility = 'used';\n }\n // 4. Code analysis: display properties are optional but may be shown in views\n else {\n visibility = 'optional';\n }\n\n return { property: prop, visibility, usage, codeUsage: code };\n });\n}\n\nexport type VisibilityMode = 'auto' | 'full' | 'form-add' | 'form-edit';\n\n/**\n * Returns true if a property value is considered \"populated\" (has meaningful data).\n * Handles all data types: primitives, objects ({id, label}), arrays, numbers.\n */\nfunction hasValue(val: any): boolean {\n if (val === undefined || val === null) return false;\n if (typeof val === 'string') return val !== '';\n if (typeof val === 'number') return true; // 0 is a valid value\n if (typeof val === 'boolean') return true;\n if (Array.isArray(val)) return val.length > 0;\n if (typeof val === 'object') return Object.keys(val).length > 0;\n return true;\n}\n\n/**\n * Filter properties to only those that should be visible in a given context.\n *\n * - auto: required + used (for tables); falls back to all if nothing qualifies\n * - full: all properties\n * - form-add: required + used (essential/common from code); falls back to all\n * - form-edit: required + used + properties with data on this instance; falls back to all\n */\nexport function getVisibleProperties(\n classified: ClassifiedProperty[],\n mode: VisibilityMode,\n instanceData?: Record<string, any>\n): ClassifiedProperty[] {\n // Removed before any mode gets a say, and before the fallback below can reinstate it.\n const visible = classified.filter((c) => c.visibility !== 'hidden');\n\n let result: ClassifiedProperty[];\n\n switch (mode) {\n case 'full':\n return visible;\n\n case 'auto':\n result = visible.filter(\n (c) => c.visibility === 'required' || c.visibility === 'used'\n );\n break;\n\n case 'form-add':\n result = visible.filter(\n (c) => c.visibility === 'required' || c.visibility === 'used'\n );\n break;\n\n case 'form-edit':\n result = visible.filter((c) => {\n if (c.visibility === 'required') return true;\n if (c.visibility === 'used') return true;\n if (instanceData && hasValue(instanceData[c.property.label]))\n return true;\n return false;\n });\n break;\n\n default:\n return visible;\n }\n\n // Fallback: if filtering yields nothing, show all NON-HIDDEN properties. This handles\n // shapes that haven't declared any minCount/required yet — but it must not be a back\n // door that reinstates what the shape explicitly hid.\n return result.length > 0 ? result : visible;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shapeDependencies.js","sourceRoot":"","sources":["../../../src/shape/shapeDependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shapeDependencies.js","sourceRoot":"","sources":["../../../src/shape/shapeDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeShapeWire } from '@_linked/core/shapes/nodeShapeWire';\nimport { shacl } from '@_linked/core/ontologies/shacl';\n\n/**\n * A dependency link: a child property depends on a parent property.\n * When the parent's value changes, the child should be narrowed or reset.\n */\nexport interface PropertyDependency {\n /** The parent property label (e.g., \"agent\") */\n parentLabel: string;\n /** The dependent property label (e.g., \"team\") */\n childLabel: string;\n /** The shape URI of the parent's valueShape (e.g., Player shape URI) */\n parentValueShapeId: string;\n /** The label of the property on the parent's valueShape that links to the child's valueShape\n * (e.g., \"currentTeam\" on the Player shape) */\n linkingPropertyLabel: string;\n /** The full predicate URI of the linking property — needed for SPARQL queries */\n linkingPropertyPath: string;\n /** The shape URI of the child's valueShape (e.g., Team shape URI) */\n childValueShapeId: string;\n}\n\nconst IRI_NODE_KINDS = new Set([\n shacl.IRI.id,\n shacl.BlankNode.id,\n shacl.BlankNodeOrIRI.id,\n]);\n\nfunction isIriProperty(p: NodeShapeWire['propertyShapes'][number]): boolean {\n return !!p.nodeKind && IRI_NODE_KINDS.has(p.nodeKind.id) && !!p.valueShape?.id;\n}\n\n/**\n * Compute dependency relationships between IRI properties on a shape.\n *\n * Algorithm: For each pair of IRI properties (A, B) on the same shape,\n * check if A's valueShape has a property whose valueShape matches B's valueShape.\n * If so, B depends on A via that linking property.\n *\n * Only looks 1 level deep and breaks cycles: if A→B and B→A are both found,\n * only the first-discovered direction is kept.\n */\nexport function computeDependencies(\n shape: NodeShapeWire,\n allShapes: Record<string, NodeShapeWire>\n): PropertyDependency[] {\n const candidates: PropertyDependency[] = [];\n\n const iriProperties = (shape.propertyShapes || []).filter(isIriProperty);\n\n for (const propA of iriProperties) {\n // Look up the full shape definition for A's valueShape\n const aValueShape = allShapes[propA.valueShape!.id];\n if (!aValueShape?.propertyShapes) continue;\n\n for (const propB of iriProperties) {\n if (propA.label === propB.label) continue;\n if (!propB.valueShape?.id) continue;\n\n // Check if A's valueShape has a property pointing to B's valueShape\n for (const linkProp of aValueShape.propertyShapes) {\n if (linkProp.valueShape?.id === propB.valueShape!.id) {\n const pathObj = Array.isArray(linkProp.path)\n ? linkProp.path[0]\n : linkProp.path;\n candidates.push({\n parentLabel: propA.label,\n childLabel: propB.label,\n parentValueShapeId: propA.valueShape!.id,\n linkingPropertyLabel: linkProp.label,\n linkingPropertyPath: pathObj?.id || '',\n childValueShapeId: propB.valueShape!.id,\n });\n break; // Only one linking path per A→B pair\n }\n }\n }\n }\n\n // Break cycles: if A→B and B→A both exist, keep only the first one found.\n // Also ensure no field ends up as a child of ALL other fields (deadlock).\n return removeCycles(candidates);\n}\n\n/**\n * Remove circular dependencies from the candidate list.\n * When A→B and B→A both exist, keep only the first direction found.\n * Then ensure no field is blocked by all other fields (prune so at least\n * one field per connected component has no parents).\n */\nfunction removeCycles(deps: PropertyDependency[]): PropertyDependency[] {\n const kept: PropertyDependency[] = [];\n const edges = new Set<string>(); // \"parent->child\" strings\n\n for (const dep of deps) {\n const forward = `${dep.parentLabel}->${dep.childLabel}`;\n const reverse = `${dep.childLabel}->${dep.parentLabel}`;\n\n // If the reverse direction is already kept, skip this one\n if (edges.has(reverse)) continue;\n\n edges.add(forward);\n kept.push(dep);\n }\n\n // Ensure at least one root (a field with no parents) exists.\n // If every field is someone's child, remove the dependency that has the\n // most children as parent (it's the most \"primary\" field).\n const allChildren = new Set(kept.map((d) => d.childLabel));\n const allParents = new Set(kept.map((d) => d.parentLabel));\n const roots = [...allParents].filter((p) => !allChildren.has(p));\n\n if (roots.length === 0 && kept.length > 0) {\n // No root — every field is a child. Break the cycle by finding the\n // field that is a child the fewest times and removing its parent deps.\n const childCount = new Map<string, number>();\n for (const d of kept) {\n childCount.set(d.childLabel, (childCount.get(d.childLabel) || 0) + 1);\n }\n // Pick the field that appears as parent most often to be the root\n const parentCount = new Map<string, number>();\n for (const d of kept) {\n parentCount.set(d.parentLabel, (parentCount.get(d.parentLabel) || 0) + 1);\n }\n let bestRoot = '';\n let bestCount = -1;\n for (const [label, count] of parentCount) {\n if (count > bestCount) {\n bestCount = count;\n bestRoot = label;\n }\n }\n // Remove all deps where bestRoot is a child\n return kept.filter((d) => d.childLabel !== bestRoot);\n }\n\n return kept;\n}\n\n/**\n * Build a lookup map: childLabel → PropertyDependency[]\n * A child can depend on multiple parents (rare but possible).\n */\nexport function buildDependencyMap(\n deps: PropertyDependency[]\n): Map<string, PropertyDependency[]> {\n const map = new Map<string, PropertyDependency[]>();\n for (const dep of deps) {\n const existing = map.get(dep.childLabel) || [];\n existing.push(dep);\n map.set(dep.childLabel, existing);\n }\n return map;\n}\n\n/**\n * Extract the IDs that a child field should be narrowed to,\n * based on the parent instance data and the linking property.\n */\nexport function extractNarrowingIds(\n instanceData: Record<string, any>,\n linkingPropertyLabel: string\n): string[] {\n const linkedValue = instanceData[linkingPropertyLabel];\n if (!linkedValue) return [];\n\n if (Array.isArray(linkedValue)) {\n return linkedValue\n .map((v) => (typeof v === 'object' ? v.id : v))\n .filter(Boolean);\n }\n\n if (typeof linkedValue === 'object' && linkedValue.id) {\n return [linkedValue.id];\n }\n\n if (typeof linkedValue === 'string') {\n return [linkedValue];\n }\n\n return [];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tableFilters.js","sourceRoot":"","sources":["../../../src/shape/tableFilters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tableFilters.js","sourceRoot":"","sources":["../../../src/shape/tableFilters.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyShapeWire } from '@_linked/core/shapes/nodeShapeWire';\nimport { humanizeEnumLabel } from './nodeDisplay.js';\nimport { getPropertyUiType, type PropertyUiType } from './propertyTypes.js';\n\n// ─── Filter operators ────────────────────────────────────────────────\nexport type FilterOperator =\n | 'contains'\n | 'equals'\n | 'startsWith'\n | 'endsWith'\n | 'gt'\n | 'lt'\n | 'gte'\n | 'lte'\n | 'before'\n | 'after'\n | 'is'\n | 'isNot'\n | 'in'; // multi-select enum\n\nexport interface FilterOperatorOption {\n value: FilterOperator;\n label: string;\n}\n\n// ─── Internal filter model (decoupled from TanStack) ─────────────────\nexport interface TableFilter {\n id: string; // unique filter ID\n columnId: string;\n columnLabel: string;\n operator: FilterOperator;\n /** Single value or array of values for multi-select (enum OR) */\n value: string | string[];\n isActive: boolean;\n}\n\n// ─── Operator sets by UI type ────────────────────────────────────────\nconst STRING_OPERATORS: FilterOperatorOption[] = [\n { value: 'contains', label: 'contains' },\n { value: 'equals', label: 'equals' },\n { value: 'startsWith', label: 'starts with' },\n { value: 'endsWith', label: 'ends with' },\n];\n\nconst NUMBER_OPERATORS: FilterOperatorOption[] = [\n { value: 'equals', label: '=' },\n { value: 'gt', label: '>' },\n { value: 'lt', label: '<' },\n { value: 'gte', label: '>=' },\n { value: 'lte', label: '<=' },\n];\n\nconst DATE_OPERATORS: FilterOperatorOption[] = [\n { value: 'equals', label: 'equals' },\n { value: 'before', label: 'before' },\n { value: 'after', label: 'after' },\n];\n\nconst BOOLEAN_OPERATORS: FilterOperatorOption[] = [\n { value: 'is', label: 'is' },\n { value: 'isNot', label: 'is not' },\n];\n\nconst IRI_OPERATORS: FilterOperatorOption[] = [\n { value: 'contains', label: 'contains' },\n { value: 'equals', label: 'equals' },\n];\n\nconst ENUM_OPERATORS: FilterOperatorOption[] = [\n { value: 'in', label: 'is one of' },\n { value: 'equals', label: 'equals' },\n];\n\n/**\n * Returns the available filter operators for a property based on its SHACL type.\n */\nexport function getOperatorsForProperty(property: PropertyShapeWire): FilterOperatorOption[] {\n const uiType = getPropertyUiType(property);\n return getOperatorsForUiType(uiType);\n}\n\nexport function getOperatorsForUiType(uiType: PropertyUiType | null): FilterOperatorOption[] {\n switch (uiType) {\n case 'number':\n return NUMBER_OPERATORS;\n case 'date':\n case 'datetime':\n return DATE_OPERATORS;\n case 'boolean':\n return BOOLEAN_OPERATORS;\n case 'iri-single':\n case 'iri-multi':\n return IRI_OPERATORS;\n case 'enum-literal':\n case 'enum-iri':\n return ENUM_OPERATORS;\n case 'text':\n case 'url':\n default:\n return STRING_OPERATORS;\n }\n}\n\n/**\n * Apply a filter to a cell value. Returns true if the row should be included.\n */\nexport function applyFilter(cellValue: any, filter: TableFilter): boolean {\n if (!filter.isActive) return true;\n\n const { operator, value } = filter;\n\n // Multi-select enum: \"in\" operator\n if (operator === 'in' && Array.isArray(value)) {\n if (value.length === 0) return true;\n const cellStr = extractStringValue(cellValue);\n return value.some((v) => cellStr.toLowerCase() === v.toLowerCase());\n }\n\n const filterVal = typeof value === 'string' ? value : String(value);\n if (!filterVal) return true;\n\n const cellStr = extractStringValue(cellValue);\n\n switch (operator) {\n case 'contains':\n return cellStr.toLowerCase().includes(filterVal.toLowerCase());\n case 'equals':\n return cellStr.toLowerCase() === filterVal.toLowerCase();\n case 'startsWith':\n return cellStr.toLowerCase().startsWith(filterVal.toLowerCase());\n case 'endsWith':\n return cellStr.toLowerCase().endsWith(filterVal.toLowerCase());\n\n case 'gt':\n return toNumber(cellStr) > toNumber(filterVal);\n case 'lt':\n return toNumber(cellStr) < toNumber(filterVal);\n case 'gte':\n return toNumber(cellStr) >= toNumber(filterVal);\n case 'lte':\n return toNumber(cellStr) <= toNumber(filterVal);\n\n case 'before':\n return new Date(cellStr) < new Date(filterVal);\n case 'after':\n return new Date(cellStr) > new Date(filterVal);\n\n case 'is':\n return cellStr.toLowerCase() === filterVal.toLowerCase();\n case 'isNot':\n return cellStr.toLowerCase() !== filterVal.toLowerCase();\n\n default:\n return true;\n }\n}\n\n/**\n * Apply all active filters to a row. Returns true if the row passes all filters (AND logic).\n * Same-column filters with 'in' operator use OR within the column.\n */\nexport function applyAllFilters(\n row: Record<string, any>,\n filters: TableFilter[]\n): boolean {\n const activeFilters = filters.filter((f) => f.isActive);\n if (activeFilters.length === 0) return true;\n\n // Group filters by column for same-column OR handling\n const byColumn = new Map<string, TableFilter[]>();\n for (const f of activeFilters) {\n const group = byColumn.get(f.columnId) || [];\n group.push(f);\n byColumn.set(f.columnId, group);\n }\n\n // Each column group must pass (AND across columns)\n for (const [columnId, columnFilters] of byColumn) {\n const cellValue = row[columnId];\n // Within a column, ANY filter passing counts (OR within column)\n const columnPasses = columnFilters.some((f) => applyFilter(cellValue, f));\n if (!columnPasses) return false;\n }\n\n return true;\n}\n\n/**\n * Generate a unique filter ID.\n */\nlet filterCounter = 0;\nexport function generateFilterId(): string {\n return `filter-${++filterCounter}-${Date.now()}`;\n}\n\n/**\n * Format a filter for display as a badge label.\n */\nexport function formatFilterLabel(filter: TableFilter): string {\n const { columnLabel, operator, value } = filter;\n if (operator === 'in' && Array.isArray(value)) {\n return `${columnLabel}: ${value.map(humanizeEnumLabel).join(', ')}`;\n }\n const opLabel = [...STRING_OPERATORS, ...NUMBER_OPERATORS, ...DATE_OPERATORS, ...BOOLEAN_OPERATORS, ...ENUM_OPERATORS]\n .find((o) => o.value === operator)?.label || operator;\n return `${columnLabel} ${opLabel} ${value}`;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────\nfunction extractStringValue(val: any): string {\n if (val == null) return '';\n if (typeof val === 'string') return val;\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n if (typeof val === 'object') {\n return val.label || val.name || val.id || String(val);\n }\n return String(val);\n}\n\nfunction toNumber(val: string): number {\n const n = parseFloat(val);\n return isNaN(n) ? 0 : n;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shape/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shape/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgDH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAkC;IACzD,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,gBAAgB;IAC5B,IAAI,EAAE,UAAU;CACjB,CAAC;AA4jBF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AA+B7C,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA2B;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,KAAK,UAAU,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC9D,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;IAC1C,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAkC;;IAC3D,OAAO,CAAC,MAAA,WAAW,CAAC,QAAQ,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAkC;IAC9D,OAAO,WAAW,CAAC,QAAQ,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IACzD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,IAAI,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CACvE,QAAQ,CACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,CAAC,YAAY,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC;AAgGD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAA2B;;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;QACtB,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QACpE,CAAC,CAAC,gBAAgB,CAAC,oCAAoC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAExE,kDAAkD;IAClD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrD,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,UAAU,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrD,CAAC;IAED,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI;QACJ,KAAK,EAAE,MAAA,MAAM,CAAC,KAAK,mCAAI,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE;YACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B;QACD,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3E,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrC,QAAQ,EAAE,MAAM,CAAC,QAAyB;YAC1C,iBAAiB,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxG,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC,CAAC,SAAS;YACb,kBAAkB,EAAE,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;gBACvE,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5F,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC,CAAC,SAAS;SACd,CAAC,CAAC,CAAC,SAAS;QACb,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAA0B;;IAClE,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAChB,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YAC9D,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa;SAC5C,CAAC,CAAC,CAAC,SAAS;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,MAAA,IAAI,CAAC,WAAW,0CAAE,QAAQ;QACpC,QAAQ,EAAE,MAAA,IAAI,CAAC,WAAW,0CAAE,QAAQ;QACpC,QAAQ,EAAE,MAAA,IAAI,CAAC,mBAAmB,0CAAE,QAAQ;QAC5C,QAAQ,EAAE,MAAA,IAAI,CAAC,iBAAiB,0CAAE,KAAK;QACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,iBAAiB,0CAAE,SAAS;QACjE,SAAS,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,iBAAiB,0CAAE,SAAS;QACjE,OAAO,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,iBAAiB,0CAAE,OAAO;QAC7D,KAAK,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,iBAAiB,0CAAE,KAAK;QACzD,YAAY,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,kBAAkB,0CAAE,YAAY;QACxE,YAAY,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,kBAAkB,0CAAE,YAAY;QACxE,YAAY,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,kBAAkB,0CAAE,YAAY;QACxE,YAAY,EAAE,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,kBAAkB,0CAAE,YAAY;QACxE,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,YAAqB,EACrB,eAAsC,UAAU,EAChD,aAAsB,EACtB,aAAsB;IAEtB,MAAM,IAAI,GAAG,YAAY,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC;IAC5E,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,IAAI;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,IAAI;SACpB;QACD,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,IAAI,WAAW,GAAG;QAC9B,aAAa,EAAE;YACb,GAAG,EAAE,WAAW;YAChB,IAAI;YACJ,YAAY;YACZ,aAAa;YACb,aAAa;SACd;KACF,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Shape Builder Types for Create Now\n *\n * Type definitions for SHACL shapes used in the Shape Builder.\n * Shapes define validation constraints and form generation rules for ontology classes.\n *\n * Key concepts:\n * - NodeShape: Top-level shape targeting a class (sh:targetClass)\n * - PropertyShape: Constraints for a property path within a NodeShape\n * - PropertyGroup: UI organization for form generation (sh:group)\n * - PropertyPath: Simple or complex property paths (sh:path)\n */\n\n// ============================================================================\n// Target Types\n// ============================================================================\n\n/**\n * Target type for a NodeShape - determines what the shape validates\n */\nexport type ShapeTargetType =\n | 'targetClass' // sh:targetClass - instances of a class (most common)\n | 'targetNode' // sh:targetNode - specific URIs\n | 'targetSubjectsOf' // sh:targetSubjectsOf - subjects of property\n | 'targetObjectsOf'; // sh:targetObjectsOf - objects of property\n\n// ============================================================================\n// Node Kind & Datatype Types\n// ============================================================================\n\n/**\n * Node kind constraint (sh:nodeKind)\n */\nexport type NodeKind =\n | 'IRI' // sh:IRI - must be a URI\n | 'Literal' // sh:Literal - must be a literal value\n | 'BlankNode' // sh:BlankNode - must be a blank node\n | 'BlankNodeOrIRI' // sh:BlankNodeOrIRI\n | 'BlankNodeOrLiteral' // sh:BlankNodeOrLiteral\n | 'IRIOrLiteral'; // sh:IRIOrLiteral\n\n/**\n * XSD datatypes for literal constraints (sh:datatype)\n */\nexport type ShaclDatatype =\n | 'xsd:string'\n | 'xsd:integer'\n | 'xsd:decimal'\n | 'xsd:float'\n | 'xsd:double'\n | 'xsd:boolean'\n | 'xsd:date'\n | 'xsd:dateTime'\n | 'xsd:time'\n | 'xsd:anyURI'\n | 'xsd:language'\n | 'rdf:langString' // String with language tag\n | 'rdf:HTML'; // HTML content\n\n/**\n * Mapping from user-friendly types to XSD datatypes\n */\nexport const DATATYPE_MAP: Record<string, ShaclDatatype> = {\n text: 'xsd:string',\n string: 'xsd:string',\n integer: 'xsd:integer',\n number: 'xsd:decimal',\n decimal: 'xsd:decimal',\n float: 'xsd:float',\n double: 'xsd:double',\n boolean: 'xsd:boolean',\n date: 'xsd:date',\n datetime: 'xsd:dateTime',\n time: 'xsd:time',\n uri: 'xsd:anyURI',\n url: 'xsd:anyURI',\n language: 'xsd:language',\n langString: 'rdf:langString',\n html: 'rdf:HTML',\n};\n\n// ============================================================================\n// Property Path Types\n// ============================================================================\n\n/**\n * Property path types (SPARQL property paths)\n */\nexport type PropertyPathType =\n | 'predicate' // Simple: ex:name\n | 'sequence' // A/B: ex:knows/ex:name\n | 'alternative' // A|B: ex:father|ex:mother\n | 'inverse' // ^A: ^ex:parent\n | 'zeroOrMore' // A*: ex:knows*\n | 'oneOrMore' // A+: ex:knows+\n | 'zeroOrOne'; // A?: ex:middleName?\n\n/**\n * A segment in a property path\n */\nexport interface PropertyPathSegment {\n /** The type of this segment */\n type: PropertyPathType;\n\n /** For predicate: the property URI */\n predicateUri?: string;\n\n /** For predicate: human-readable name */\n predicateName?: string;\n\n /** For predicate: namespace prefix (e.g., \"schema\", \"adms\") */\n predicatePrefix?: string;\n\n /** For sequence/alternative: nested segments */\n segments?: PropertyPathSegment[];\n\n /** For inverse: the inverted path */\n inversePath?: PropertyPathSegment;\n}\n\n/**\n * Complete property path definition\n */\nexport interface PropertyPath {\n /** Unique ID for this path */\n id: string;\n\n /** Human-readable name (e.g., \"Friend's Email\") */\n name: string;\n\n /** The root segment of the path */\n root: PropertyPathSegment;\n\n /** Serialized SPARQL path (e.g., \"ex:knows/ex:email\") */\n sparqlPath: string;\n\n /** Serialized Turtle path for SHACL */\n turtlePath: string;\n\n /** The final property in the path (determines constraints) */\n finalProperty: {\n uri: string;\n name: string;\n propertyType: 'object' | 'datatype';\n rangeClassUri?: string; // For object properties\n rangeDatatype?: string; // For datatype properties\n };\n}\n\n// ============================================================================\n// Property Group Types\n// ============================================================================\n\n/**\n * Property Group for organizing properties in forms (sh:PropertyGroup)\n */\nexport interface BuilderPropertyGroup {\n /** Unique ID */\n id: string;\n\n /** Group name (e.g., \"Personal Information\") */\n name: string;\n\n /** Optional description */\n description?: string;\n\n /** Display order (0-based) */\n order: number;\n\n /** Is this the default group? */\n isDefault?: boolean;\n}\n\n// ============================================================================\n// Constraint Types\n// ============================================================================\n\n/**\n * Cardinality constraints (sh:minCount, sh:maxCount)\n */\nexport interface CardinalityConstraint {\n /** Minimum count (0 = optional) */\n minCount?: number;\n\n /** Maximum count (undefined = unlimited) */\n maxCount?: number;\n}\n\n/**\n * String-based constraints (for xsd:string, rdf:langString)\n */\nexport interface StringConstraints {\n /** Minimum string length (sh:minLength) */\n minLength?: number;\n\n /** Maximum string length (sh:maxLength) */\n maxLength?: number;\n\n /** Regex pattern the value must match (sh:pattern) */\n pattern?: string;\n\n /** Regex flags for pattern (sh:flags, e.g., \"i\" for case-insensitive) */\n flags?: string;\n\n /** Allowed languages (sh:languageIn, e.g., ['en', 'nl']) */\n languageIn?: string[];\n\n /** Each language can appear only once (sh:uniqueLang) */\n uniqueLang?: boolean;\n}\n\n/**\n * Numeric constraints (for xsd:integer, xsd:decimal, etc.)\n */\nexport interface NumericConstraints {\n /** Value must be > this (sh:minExclusive) */\n minExclusive?: number;\n\n /** Value must be >= this (sh:minInclusive) */\n minInclusive?: number;\n\n /** Value must be < this (sh:maxExclusive) */\n maxExclusive?: number;\n\n /** Value must be <= this (sh:maxInclusive) */\n maxInclusive?: number;\n}\n\n/**\n * A value that can be a node or literal with datatype/language\n */\nexport interface PropertyValue {\n /** The actual value (URI string or literal value) */\n value: string;\n\n /** Is this an IRI/URI reference? */\n isUri?: boolean;\n\n /** For literals: the XSD datatype */\n datatype?: string;\n\n /** For literals: the language tag */\n language?: string;\n}\n\n/**\n * Value constraints (sh:in, sh:hasValue, etc.)\n */\nexport interface ValueConstraints {\n /** Value must be one of these (sh:in) */\n inValues?: PropertyValue[];\n\n /** Must have exactly this value (sh:hasValue) */\n hasValue?: PropertyValue;\n\n /** Must equal value of another property (sh:equals) */\n equals?: string; // Property path\n\n /** Must not equal value of another property (sh:disjoint) */\n disjoint?: string; // Property path\n\n /** Must be less than value of another property (sh:lessThan) */\n lessThan?: string; // Property path\n\n /** Must be <= value of another property (sh:lessThanOrEquals) */\n lessThanOrEquals?: string; // Property path\n}\n\n/**\n * Qualified Value Shape constraint (sh:qualifiedValueShape)\n * Allows: \"At least N values must conform to shape X\"\n */\nexport interface QualifiedValueConstraint {\n /** Reference to a shape that values must conform to */\n qualifiedValueShape: string; // Shape URI\n\n /** Minimum count of values that must conform (sh:qualifiedMinCount) */\n qualifiedMinCount?: number;\n\n /** Maximum count of values that may conform (sh:qualifiedMaxCount) */\n qualifiedMaxCount?: number;\n\n /** If true, sibling shapes are considered disjoint (sh:qualifiedValueShapesDisjoint) */\n qualifiedValueShapesDisjoint?: boolean;\n}\n\n// ============================================================================\n// Validation Types\n// ============================================================================\n\n/**\n * Severity levels for validation results (sh:severity)\n */\nexport type ShapeSeverity = 'Violation' | 'Warning' | 'Info';\n\n/**\n * Localized message for validation results (sh:message)\n */\nexport interface LocalizedMessage {\n /** The message text */\n text: string;\n\n /** Language tag (e.g., \"en\", \"de\", \"nl\") */\n lang?: string;\n}\n\n// ============================================================================\n// Property Shape Types\n// ============================================================================\n\n/**\n * Constraints for object properties (owl:ObjectProperty)\n */\nexport interface ObjectPropertyConstraints {\n /** Required rdf:type of the value (sh:class) */\n class?: string; // URI\n\n /** Reference to a NodeShape for nested validation (sh:node) */\n nodeShape?: string; // Shape URI\n}\n\n/**\n * Constraints for datatype properties (owl:DatatypeProperty)\n */\nexport interface DatatypePropertyConstraints {\n /** Required XSD datatype (sh:datatype) */\n datatype: ShaclDatatype;\n\n /** String-specific constraints */\n stringConstraints?: StringConstraints;\n\n /** Numeric-specific constraints */\n numericConstraints?: NumericConstraints;\n}\n\n/**\n * PropertyShape - defines constraints for a single property path\n */\nexport interface BuilderPropertyShape {\n /** Unique ID */\n id: string;\n\n /** Human-readable name (required because path might be complex) */\n name: string;\n\n /** Description of what this property represents */\n description?: string;\n\n /** The property path this shape constrains */\n path: PropertyPath;\n\n /** Display order within group (sh:order) */\n order: number;\n\n /** Group this property belongs to (sh:group) */\n groupId: string;\n\n // === Type-specific constraints ===\n\n /**\n * For Object Properties (final property is owl:ObjectProperty):\n * - sh:class - the rdf:type required for the value\n * - OR sh:node - reference to another NodeShape\n */\n objectConstraints?: ObjectPropertyConstraints;\n\n /**\n * For Datatype Properties (final property is owl:DatatypeProperty):\n */\n datatypeConstraints?: DatatypePropertyConstraints;\n\n /** Node kind constraint (sh:nodeKind, usually inferred from property type) */\n nodeKind?: NodeKind;\n\n /** Cardinality (sh:minCount, sh:maxCount) */\n cardinality: CardinalityConstraint;\n\n /** Value constraints (sh:in, sh:hasValue, sh:equals, etc.) */\n valueConstraints?: ValueConstraints;\n\n /** Qualified value shape constraint (sh:qualifiedValueShape) */\n qualifiedValue?: QualifiedValueConstraint;\n\n /** Is this property deactivated? (sh:deactivated) */\n deactivated?: boolean;\n\n /** Severity level for violations (sh:severity, default: Violation) */\n severity?: ShapeSeverity;\n\n /** Custom validation messages (sh:message) */\n messages?: LocalizedMessage[];\n\n /** Default value for form generation (sh:defaultValue) */\n defaultValue?: PropertyValue;\n\n /**\n * Nested property shapes (sh:property on a PropertyShape)\n * Used when the values of this property must have their own property constraints.\n * E.g., an \"address\" property where the address value must have city, postalCode, etc.\n * Note: This is different from sh:node which references an external shape.\n */\n nestedPropertyShapes?: BuilderPropertyShape[];\n\n // === UI/Display Properties (Create Now extensions) ===\n\n /** Is this a unique identifier property? */\n isUniqueIdentifier?: boolean;\n\n /** Is this the primary display property? */\n isPrimaryDisplay?: boolean;\n\n /** Display priority for compact views (lower = more important) */\n displayPriority?: number;\n\n /** Visual position in visual builder */\n visualPosition?: { x: number; y: number };\n}\n\n// ============================================================================\n// Logical Constraint Types\n// ============================================================================\n\n/**\n * Boolean logic for combining property shapes\n */\nexport interface LogicalConstraint {\n /** Type of logical operation */\n type: 'and' | 'or' | 'not' | 'xone';\n\n /** Property shapes or nested shapes involved */\n shapes: string[]; // PropertyShape IDs or NodeShape URIs\n}\n\n// ============================================================================\n// Display Ordering Types\n// ============================================================================\n\n/**\n * Display context types for property ordering\n *\n * - single: Show 1 most identifying property (e.g., name badge)\n * - small: Show up to 3 key properties (e.g., compact list item)\n * - card: Show up to 6 summary properties (e.g., card view)\n * - table: Show properties suitable for table columns (unlimited)\n */\nexport type DisplayContext = 'single' | 'small' | 'card' | 'table';\n\n/**\n * Property display order for a specific context\n */\nexport interface PropertyDisplayOrder {\n /** Property IDs in display order */\n propertyIds: string[];\n /** Whether this uses auto-generated defaults (false = user customized) */\n isAutoGenerated: boolean;\n}\n\n/**\n * Context-specific property orderings for a shape\n *\n * Each shape can have different property orders for different display contexts.\n * If a context order is not specified or isAutoGenerated is true, the system\n * will compute a sensible default based on property metadata.\n *\n * Auto-generation rules:\n * - single: First required property, or first with highest importance\n * - small: First 2-3 properties by required status, then importance\n * - card: First 4-5 properties for summary display\n * - form: All properties in their default order\n * - table: All non-multiline properties suitable for columns\n */\nexport interface ShapeDisplayOrderings {\n /** Single property display (most identifying property) */\n single?: PropertyDisplayOrder;\n /** Small display (2-3 key properties) */\n small?: PropertyDisplayOrder;\n /** Card display (summary view, 4-5 properties) */\n card?: PropertyDisplayOrder;\n /** Form display (all editable properties) */\n form?: PropertyDisplayOrder;\n /** Table display (column order) */\n table?: PropertyDisplayOrder;\n}\n\n// ============================================================================\n// Node Shape Types\n// ============================================================================\n\n/**\n * NodeShape - the top-level shape definition (sh:NodeShape)\n */\nexport interface BuilderNodeShape {\n /** Unique ID (local to builder) */\n id: string;\n\n /** Full URI of this shape */\n uri: string;\n\n /** Human-readable name (sh:name or rdfs:label) */\n name: string;\n\n /** Description (rdfs:comment or sh:description) */\n description?: string;\n\n // === Versioning ===\n\n /** Current version string (e.g., \"1.2.3\" or \"1.2.3-draft\") */\n version: string;\n\n /** Version status */\n versionStatus: 'draft' | 'published' | 'deprecated' | 'archived';\n\n /** For deprecated versions: recommended replacement URI */\n supersededBy?: string;\n\n /** URI this was forked from (if any) */\n forkedFrom?: string;\n\n // === Targeting ===\n\n /** How this shape targets nodes (sh:targetClass, sh:targetNode, etc.) */\n targetType: ShapeTargetType;\n\n /** For targetClass: the class URI from ontology (sh:targetClass) */\n targetClass?: string;\n\n /** For targetNode: specific URIs (sh:targetNode) */\n targetNodes?: string[];\n\n /** For targetSubjectsOf/targetObjectsOf: the property URI */\n targetProperty?: string;\n\n // === Structure ===\n\n /** Property groups (ordered, for form organization) */\n groups: BuilderPropertyGroup[];\n\n /** Property shapes (ordered within groups) */\n propertyShapes: BuilderPropertyShape[];\n\n /** Logical constraints combining properties (sh:and, sh:or, sh:not, sh:xone) */\n logicalConstraints?: LogicalConstraint[];\n\n // === Validation Behavior ===\n\n /** If true, only declared properties are allowed (sh:closed) */\n closed?: boolean;\n\n /** Properties to ignore when closed (sh:ignoredProperties) */\n ignoredProperties?: string[];\n\n /** Is this shape deactivated? (sh:deactivated) */\n deactivated?: boolean;\n\n // === Inheritance ===\n\n /** Parent shape URIs this shape extends (conceptual, not SHACL standard) */\n extendsShapes?: string[];\n\n // === Metadata ===\n\n /** Ontology this shape belongs to */\n ontologyUri: string;\n\n /** Ontology prefix for generated URIs */\n ontologyPrefix?: string;\n\n /** Package name for linked.cm URI generation (derived from project name) */\n packageName?: string;\n\n /** Owner project ID(s) */\n ownerProjectIds?: string[];\n\n /** Visibility (private/public) */\n visibility?: 'local' | 'shared' | 'public';\n\n /** License URI (required for public shapes) */\n license?: string;\n\n /** Created timestamp */\n createdAt: string;\n\n /** Updated timestamp */\n updatedAt: string;\n\n /** Visual position in visual builder */\n visualPosition?: { x: number; y: number };\n\n // === UI/Display Properties (Create Now extensions) ===\n\n /** Icon identifier for the shape */\n icon?: string;\n\n /** Icon color (hex or named) */\n iconColor?: string;\n\n /** Feature tier (essential or complete) */\n featureTier?: 'essential' | 'complete';\n\n // === Discovery & Catalog ===\n\n /** Search tags/keywords for catalog discovery */\n tags?: string[];\n\n /** Featured flag for highlighting in catalog */\n featured?: boolean;\n\n /** Category for catalog organization */\n category?: string;\n\n // === Display Orderings ===\n\n /**\n * Context-specific property orderings for different display scenarios.\n * If not specified or isAutoGenerated is true, defaults are computed.\n */\n displayOrderings?: ShapeDisplayOrderings;\n}\n\n// ============================================================================\n// Draft Types\n// ============================================================================\n\n/**\n * Shape Builder Draft - complete builder state\n * Mirrors OntologyDraft pattern from ontology builder\n */\nexport interface ShapeBuilderDraft {\n /** Unique draft ID */\n id: string;\n\n /** Associated ontology URI */\n ontologyUri: string;\n\n /** Associated ontology prefix */\n ontologyPrefix: string;\n\n /** All node shapes in this draft */\n nodeShapes: BuilderNodeShape[];\n\n /** Currently selected shape ID (for UI) */\n selectedShapeId?: string;\n\n /** Draft version for migrations */\n version: number;\n\n /** Timestamps */\n createdAt: string;\n updatedAt: string;\n}\n\n/** Current draft version for migrations */\nexport const CURRENT_SHAPE_DRAFT_VERSION = 1;\n\n// ============================================================================\n// Validation Result Types\n// ============================================================================\n\nexport type ShapeValidationSeverity = 'error' | 'warning' | 'info';\n\nexport interface ShapeValidationIssue {\n severity: ShapeValidationSeverity;\n message: string;\n element?: {\n type: 'nodeShape' | 'propertyShape' | 'group';\n id?: string;\n name?: string;\n };\n field?: string;\n rule: string;\n suggestion?: string;\n autoFixable?: boolean;\n}\n\nexport interface ShapeValidationResult {\n valid: boolean;\n publishable: boolean;\n errorCount: number;\n warningCount: number;\n issues: ShapeValidationIssue[];\n validatedAt: string;\n}\n\n// ============================================================================\n// Type Guards & Helpers\n// ============================================================================\n\n/**\n * Check if a property shape targets an object property\n */\nexport function isObjectPropertyShape(shape: BuilderPropertyShape): boolean {\n return shape.path.finalProperty.propertyType === 'object';\n}\n\n/**\n * Check if a property shape targets a datatype property\n */\nexport function isDatatypePropertyShape(shape: BuilderPropertyShape): boolean {\n return shape.path.finalProperty.propertyType === 'datatype';\n}\n\n/**\n * Get the effective nodeKind for a property shape\n */\nexport function getEffectiveNodeKind(shape: BuilderPropertyShape): NodeKind {\n if (shape.nodeKind) return shape.nodeKind;\n return isObjectPropertyShape(shape) ? 'IRI' : 'Literal';\n}\n\n/**\n * Check if cardinality means \"required\"\n */\nexport function isRequired(cardinality: CardinalityConstraint): boolean {\n return (cardinality.minCount ?? 0) >= 1;\n}\n\n/**\n * Check if cardinality means \"single value\"\n */\nexport function isSingleValue(cardinality: CardinalityConstraint): boolean {\n return cardinality.maxCount === 1;\n}\n\n/**\n * Serialize a PropertyValue to Turtle syntax\n */\nexport function serializePropertyValue(value: PropertyValue): string {\n if (value.isUri) {\n return `<${value.value}>`;\n }\n if (value.language) {\n return `\"${value.value}\"@${value.language}`;\n }\n if (value.datatype) {\n return `\"${value.value}\"^^${value.datatype}`;\n }\n return `\"${value.value}\"`;\n}\n\n/**\n * Check if datatype is numeric\n */\nexport function isNumericDatatype(datatype?: ShaclDatatype): boolean {\n if (!datatype) return false;\n return ['xsd:integer', 'xsd:decimal', 'xsd:float', 'xsd:double'].includes(\n datatype\n );\n}\n\n/**\n * Check if datatype is string-based\n */\nexport function isStringDatatype(datatype?: ShaclDatatype): boolean {\n if (!datatype) return false;\n return ['xsd:string', 'rdf:langString', 'rdf:HTML'].includes(datatype);\n}\n\n// ============================================================================\n// Simple Builder Input Types (for easier hook/form usage)\n// ============================================================================\n\n/**\n * Simple property path for builder inputs (just the predicate URI)\n * Used for basic cases where we just need a single predicate\n */\nexport interface SimplePropertyPath {\n type: 'predicate';\n predicate: string; // The property URI\n predicateName?: string; // Display name\n}\n\n/**\n * Simplified property shape for builder forms\n * Flat structure that's easier to work with in forms/hooks\n */\nexport interface SimplePropertyShape {\n id: string;\n uri?: string;\n name: string;\n description?: string;\n\n /** Simple path (just the predicate URI) */\n path?: SimplePropertyPath;\n\n /** Display order */\n order?: number;\n\n /** Group ID */\n groupId?: string;\n\n // Cardinality (flat)\n minCount?: number;\n maxCount?: number;\n\n // Value type\n datatype?: string; // XSD datatype URI\n classUri?: string; // For object properties\n nodeKind?: NodeKind;\n\n // String constraints (flat)\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n flags?: string;\n\n // Numeric constraints (flat)\n minInclusive?: number;\n maxInclusive?: number;\n minExclusive?: number;\n maxExclusive?: number;\n\n // Display properties\n displayPriority?: number;\n isPrimaryDisplay?: boolean;\n isUniqueIdentifier?: boolean;\n}\n\n/**\n * Simplified node shape for builder forms\n */\nexport interface SimpleNodeShape {\n id: string;\n uri?: string;\n name: string;\n description?: string;\n\n version: string;\n versionStatus: 'draft' | 'published' | 'deprecated';\n\n targetType: ShapeTargetType;\n targetClass?: string;\n\n groups: BuilderPropertyGroup[];\n propertyShapes: SimplePropertyShape[];\n\n closed?: boolean;\n\n ontologyUri: string;\n ontologyPrefix?: string;\n ownerProjectIds?: string[];\n visibility?: 'local' | 'shared' | 'public';\n\n icon?: string;\n iconColor?: string;\n visualPosition?: { x: number; y: number };\n\n createdAt?: string;\n updatedAt?: string;\n featureTier?: 'essential' | 'complete';\n}\n\n/**\n * Convert a SimplePropertyShape to a full BuilderPropertyShape\n */\nexport function simpleToFullPropertyShape(simple: SimplePropertyShape): BuilderPropertyShape {\n const path = simple.path\n ? createSimplePath(simple.path.predicate, simple.path.predicateName)\n : createSimplePath('http://example.org/unknownProperty', simple.name);\n\n // Update final property type based on constraints\n if (simple.classUri) {\n path.finalProperty.propertyType = 'object';\n path.finalProperty.rangeClassUri = simple.classUri;\n } else if (simple.datatype) {\n path.finalProperty.propertyType = 'datatype';\n path.finalProperty.rangeDatatype = simple.datatype;\n }\n\n return {\n id: simple.id,\n name: simple.name,\n description: simple.description,\n path,\n order: simple.order ?? 0,\n groupId: simple.groupId || '',\n nodeKind: simple.nodeKind,\n cardinality: {\n minCount: simple.minCount,\n maxCount: simple.maxCount,\n },\n objectConstraints: simple.classUri ? { class: simple.classUri } : undefined,\n datatypeConstraints: simple.datatype ? {\n datatype: simple.datatype as ShaclDatatype,\n stringConstraints: (simple.minLength !== undefined || simple.maxLength !== undefined || simple.pattern) ? {\n minLength: simple.minLength,\n maxLength: simple.maxLength,\n pattern: simple.pattern,\n flags: simple.flags,\n } : undefined,\n numericConstraints: (simple.minInclusive !== undefined || simple.maxInclusive !== undefined ||\n simple.minExclusive !== undefined || simple.maxExclusive !== undefined) ? {\n minInclusive: simple.minInclusive,\n maxInclusive: simple.maxInclusive,\n minExclusive: simple.minExclusive,\n maxExclusive: simple.maxExclusive,\n } : undefined,\n } : undefined,\n displayPriority: simple.displayPriority,\n isPrimaryDisplay: simple.isPrimaryDisplay,\n isUniqueIdentifier: simple.isUniqueIdentifier,\n };\n}\n\n/**\n * Convert a full BuilderPropertyShape to a SimplePropertyShape\n */\nexport function fullToSimplePropertyShape(full: BuilderPropertyShape): SimplePropertyShape {\n return {\n id: full.id,\n name: full.name,\n description: full.description,\n path: full.path ? {\n type: 'predicate',\n predicate: full.path.root.predicateUri || full.path.sparqlPath,\n predicateName: full.path.root.predicateName,\n } : undefined,\n order: full.order,\n groupId: full.groupId,\n minCount: full.cardinality?.minCount,\n maxCount: full.cardinality?.maxCount,\n datatype: full.datatypeConstraints?.datatype,\n classUri: full.objectConstraints?.class,\n nodeKind: full.nodeKind,\n minLength: full.datatypeConstraints?.stringConstraints?.minLength,\n maxLength: full.datatypeConstraints?.stringConstraints?.maxLength,\n pattern: full.datatypeConstraints?.stringConstraints?.pattern,\n flags: full.datatypeConstraints?.stringConstraints?.flags,\n minInclusive: full.datatypeConstraints?.numericConstraints?.minInclusive,\n maxInclusive: full.datatypeConstraints?.numericConstraints?.maxInclusive,\n minExclusive: full.datatypeConstraints?.numericConstraints?.minExclusive,\n maxExclusive: full.datatypeConstraints?.numericConstraints?.maxExclusive,\n displayPriority: full.displayPriority,\n isPrimaryDisplay: full.isPrimaryDisplay,\n isUniqueIdentifier: full.isUniqueIdentifier,\n };\n}\n\n/**\n * Generate a simple predicate path from a property URI\n */\nexport function createSimplePath(\n propertyUri: string,\n propertyName?: string,\n propertyType: 'object' | 'datatype' = 'datatype',\n rangeClassUri?: string,\n rangeDatatype?: string\n): PropertyPath {\n const name = propertyName || propertyUri.split(/[#/]/).pop() || propertyUri;\n return {\n id: crypto.randomUUID(),\n name,\n root: {\n type: 'predicate',\n predicateUri: propertyUri,\n predicateName: name,\n },\n sparqlPath: propertyUri,\n turtlePath: `<${propertyUri}>`,\n finalProperty: {\n uri: propertyUri,\n name,\n propertyType,\n rangeClassUri,\n rangeDatatype,\n },\n };\n}\n\n// ============================================================================\n// Shape Registry Types (for Catalog)\n// ============================================================================\n\n/**\n * Shape status in the registry\n */\nexport type ShapeStatus = 'active' | 'deprecated' | 'draft' | 'archived';\n\n/**\n * Verification level for shapes\n */\nexport type ShapeVerificationLevel = 'verified' | 'community' | 'unverified';\n\n/**\n * Shape visibility (openness level)\n * - 'local': Level 1 — lives in app's repo\n * - 'shared': Level 2 — optionally published to npm\n * - 'public': Level 3 — source in Linked org public repo\n */\nexport type ShapeVisibility = 'local' | 'shared' | 'public';\n\n/**\n * Shape version information\n *\n * URI Strategy:\n * - Base URI: /shapes/{shapeName}Shape (holds metadata + latest release copy)\n * - Version URI: /shapes/{shapeName}Shape/{version} (e.g., /shapes/PersonShape/1.0.0)\n *\n * The base shape always contains:\n * - Metadata (name, description, owner, etc.)\n * - A copy of the latest published version's constraints\n * - Reference to all versions via cnSh:hasVersion\n */\nexport interface ShapeVersion {\n /** SemVer version string (e.g., \"1.0.0\", \"1.2.3-beta\") */\n version: string;\n\n /** Full URI for this version */\n versionUri: string;\n\n /** Status of this version */\n status: 'draft' | 'published' | 'deprecated' | 'archived';\n\n /** Release notes for this version */\n releaseNotes?: string;\n\n /** When this version was published */\n publishedAt?: string;\n\n /** Who published this version */\n publishedBy?: string;\n\n /** Is this the latest stable release? */\n isLatest?: boolean;\n}\n\n/**\n * Shape registry entry for catalog display\n *\n * Represents a shape in the catalog with metadata for discovery.\n * The base URI always holds the latest version's data.\n */\nexport interface ShapeRegistryEntry {\n /** Base URI for the shape (without version) */\n uri: string;\n\n /** Human-readable name */\n name: string;\n\n /** Description of what this shape validates */\n description?: string;\n\n /** Target class this shape validates (sh:targetClass) */\n targetClass?: string;\n\n /** Prefix of the target ontology */\n ontologyPrefix?: string;\n\n /** URI of the source ontology */\n ontologyUri?: string;\n\n /** Keywords/tags for discovery */\n keywords: string[];\n\n /** Domain categories */\n domain: string[];\n\n /** Current version (latest published, or draft if none published) */\n version: string;\n\n /** All available versions */\n versions?: ShapeVersion[];\n\n /** Maintainer information */\n maintainer: {\n name: string;\n type: 'organization' | 'community' | 'individual' | 'local';\n url?: string;\n };\n\n /** Current status */\n status: ShapeStatus;\n\n /** Last updated timestamp */\n lastUpdated: string;\n\n /** Created timestamp */\n createdAt?: string;\n\n /** Verification info */\n verification: {\n level: ShapeVerificationLevel;\n verifiedBy?: string[];\n };\n\n /** Owner project IDs (who can edit) */\n ownerProjectIds?: string[];\n\n /** Whether this shape is in use in current project */\n inUse?: boolean;\n\n /** Whether this is a local/project shape */\n isLocal?: boolean;\n\n /** Whether this shape is owned by current project */\n isOwned?: boolean;\n\n /** Icon name for UI */\n icon?: string;\n\n /** Icon color for UI */\n iconColor?: string;\n\n /** Visibility setting */\n visibility?: ShapeVisibility;\n\n /** License (required for public shapes) */\n license?: string;\n\n /** Whether this shape is featured in catalog */\n featured?: boolean;\n\n /** Tags for filtering */\n tags?: string[];\n\n /** Stats for discovery */\n stats: {\n /** Number of property shapes defined */\n propertyCount: number;\n\n /** Number of projects using this shape */\n usageCount: number;\n\n /** User rating (0-5) */\n rating?: number;\n\n /** Number of downloads/imports */\n downloadCount?: number;\n\n /** Number of forks */\n forkCount?: number;\n };\n}\n\n/**\n * Filter state for shape catalog\n */\nexport interface ShapeFilterState {\n /** Filter by domain/category */\n domains: string[];\n\n /** Filter by status */\n status: string[];\n\n /** Filter by ontology */\n ontology: string[];\n\n /** Filter by visibility */\n visibility: string[];\n\n /** Search query */\n searchQuery?: string;\n\n /** Only show featured shapes */\n featuredOnly?: boolean;\n\n /** Only show shapes owned by current project */\n ownedOnly?: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useFormDependencies.js","sourceRoot":"","sources":["../../../src/shape/useFormDependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFormDependencies.js","sourceRoot":"","sources":["../../../src/shape/useFormDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeShapeWire } from '@_linked/core/shapes/nodeShapeWire';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n type PropertyDependency,\n buildDependencyMap,\n computeDependencies,\n extractNarrowingIds,\n} from './shapeDependencies.js';\nimport { getShapeParamsFromUri } from './naming.js';\n\n/**\n * Dependency state for a single child field.\n * Passed down to DynamicFormField via props.\n */\nexport interface FieldDependencyState {\n /** IDs the child should be narrowed to (null = show all, [] = show none) */\n narrowedIds: string[] | null;\n /** Whether the parent field has a value selected */\n parentHasValue: boolean;\n /** Human-readable parent labels (for \"Select X first\" hint) */\n parentLabels: string[];\n /** Whether narrowing data is currently being fetched */\n loading: boolean;\n}\n\n/**\n * Hook that computes and manages field dependencies for a form.\n * Infers dependency relationships from the shape graph, tracks parent\n * field changes, and fetches narrowing data.\n */\n/** Read one instance's data. Injected so this hook holds no control-plane dependency. */\nexport type ReadInstance = (\n shapeIri: string,\n instanceId: string,\n) => Promise<{rows: Record<string, unknown>[]}>;\n\nexport function useFormDependencies(\n shape: NodeShapeWire | null,\n allShapes: Record<string, NodeShapeWire> | null,\n projectId: string | null,\n readInstance?: ReadInstance,\n) {\n // Compute static dependency graph (only changes when shape changes)\n const dependencies = useMemo(() => {\n if (!shape || !allShapes) return [];\n return computeDependencies(shape, allShapes);\n }, [shape?.id, allShapes]);\n\n const depMap = useMemo(() => buildDependencyMap(dependencies), [dependencies]);\n\n // State for narrowing results\n const [narrowedIds, setNarrowedIds] = useState<Map<string, string[] | null>>(\n new Map()\n );\n const [parentHasValue, setParentHasValue] = useState<Map<string, boolean>>(\n new Map()\n );\n const [loading, setLoading] = useState<Map<string, boolean>>(new Map());\n\n // Abort controllers for in-flight fetches\n const fetchControllers = useRef<Map<string, AbortController>>(new Map());\n\n /**\n * Called when a parent field value changes.\n * Fetches the parent instance data and extracts narrowing IDs for dependent fields.\n */\n const onParentValueChange = useCallback(\n async (parentLabel: string, parentValue: any) => {\n // Find all dependencies where this property is the parent\n const childDeps = dependencies.filter((d) => d.parentLabel === parentLabel);\n if (childDeps.length === 0) return;\n\n // Extract parent instance ID\n const parentId = parentValue\n ? typeof parentValue === 'object'\n ? parentValue.id\n : typeof parentValue === 'string'\n ? parentValue\n : null\n : null;\n\n // Update parentHasValue for all children of this parent\n setParentHasValue((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n next.set(dep.childLabel, !!parentId);\n }\n return next;\n });\n\n if (!parentId || !projectId) {\n // Parent cleared — remove narrowing for all children\n setNarrowedIds((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n next.set(dep.childLabel, null);\n }\n return next;\n });\n return;\n }\n\n // Cancel any in-flight fetch for this parent\n const existing = fetchControllers.current.get(parentLabel);\n if (existing) existing.abort();\n const controller = new AbortController();\n fetchControllers.current.set(parentLabel, controller);\n\n // Set loading state\n setLoading((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n next.set(dep.childLabel, true);\n }\n return next;\n });\n\n try {\n // Convert parent valueShape URI to package:label format for getInstanceData\n const parentShapeParam = getShapeParamsFromUri(\n childDeps[0].parentValueShapeId\n );\n if (!readInstance) return;\n const result = await readInstance(parentShapeParam, parentId);\n\n if (controller.signal.aborted) return;\n\n const instanceData = Array.isArray(result?.rows)\n ? result.rows[0]\n : result?.rows;\n\n if (!instanceData) {\n // Could not fetch parent data — allow all options\n setNarrowedIds((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n next.set(dep.childLabel, null);\n }\n return next;\n });\n return;\n }\n\n // Extract narrowing IDs for each child\n setNarrowedIds((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n const ids = extractNarrowingIds(\n instanceData,\n dep.linkingPropertyLabel\n );\n next.set(dep.childLabel, ids.length > 0 ? ids : null);\n }\n return next;\n });\n } catch (err) {\n if (!controller.signal.aborted) {\n console.warn(\n 'Failed to fetch parent instance for narrowing:',\n err\n );\n // On error, don't narrow (show all options)\n setNarrowedIds((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n next.set(dep.childLabel, null);\n }\n return next;\n });\n }\n } finally {\n if (!controller.signal.aborted) {\n setLoading((prev) => {\n const next = new Map(prev);\n for (const dep of childDeps) {\n next.set(dep.childLabel, false);\n }\n return next;\n });\n }\n }\n },\n [dependencies, projectId]\n );\n\n /**\n * Initialize dependency state from existing form data (draft restore / edit mode).\n * Call this after loading initial data to set parentHasValue for pre-filled fields.\n */\n const initFromData = useCallback(\n (data: Record<string, any>) => {\n if (!data) return;\n // Find all parent labels and trigger onParentValueChange for each that has a value\n const parentLabels = new Set(dependencies.map((d) => d.parentLabel));\n for (const label of parentLabels) {\n if (data[label] !== undefined && data[label] !== null) {\n onParentValueChange(label, data[label]);\n }\n }\n },\n [dependencies, onParentValueChange]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n fetchControllers.current.forEach((c) => c.abort());\n };\n }, []);\n\n /** Check if a property has any parent dependencies */\n const hasDependency = useCallback(\n (label: string) => depMap.has(label),\n [depMap]\n );\n\n /** Check if a property is a parent (has children that depend on it) */\n const isParent = useCallback(\n (label: string) => dependencies.some((d) => d.parentLabel === label),\n [dependencies]\n );\n\n /** Get the parent labels for a given child */\n const getParentLabels = useCallback(\n (childLabel: string) =>\n (depMap.get(childLabel) || []).map((d) => d.parentLabel),\n [depMap]\n );\n\n /** Build FieldDependencyState for a given property label */\n const getDependencyState = useCallback(\n (label: string): FieldDependencyState | undefined => {\n if (!depMap.has(label)) return undefined;\n return {\n narrowedIds: narrowedIds.get(label) ?? null,\n parentHasValue: parentHasValue.get(label) ?? true,\n parentLabels: getParentLabels(label),\n loading: loading.get(label) ?? false,\n };\n },\n [depMap, narrowedIds, parentHasValue, loading, getParentLabels]\n );\n\n return {\n dependencies,\n depMap,\n narrowedIds,\n parentHasValue,\n loading,\n onParentValueChange,\n initFromData,\n hasDependency,\n isParent,\n getParentLabels,\n getDependencyState,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/shape/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/shape/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import {enumOptions} from './nodeDisplay.js';\nimport type { PropertyShapeWire } from '@_linked/core/shapes/nodeShapeWire';\nimport { shacl } from '@_linked/core/ontologies/shacl';\n\nexport interface FieldError {\n propertyLabel: string;\n message: string;\n}\n\n/**\n * Validate a single field value against its PropertyShape constraints.\n * Returns an error message string, or empty string if valid.\n */\nexport function validateField(\n property: PropertyShapeWire,\n value: any,\n): string {\n const nodeKind = property.nodeKind?.id;\n const isIRI =\n nodeKind === shacl.IRI.id ||\n nodeKind === shacl.BlankNode.id ||\n nodeKind === shacl.BlankNodeOrIRI.id;\n\n // Required check (minCount > 0)\n if (property.minCount > 0) {\n if (isIRI) {\n // For IRI properties, value is an object or array of objects\n const isEmpty =\n value === undefined ||\n value === null ||\n (Array.isArray(value) && value.length === 0);\n if (isEmpty) return 'At least one selection is required';\n } else {\n if (value === undefined || value === null || value === '') {\n return 'This field is required';\n }\n }\n }\n\n // Skip further validation if value is empty (optional fields)\n if (value === undefined || value === null || value === '') return '';\n\n // sh:in — value must be in the allowed set\n const choices = enumOptions(property);\n if (choices.length > 0) {\n if (isIRI) {\n const selected = Array.isArray(value) ? value : [value];\n const allowedIds = new Set(choices.map((v) => v.id));\n const invalid = selected.find((s) => !allowedIds.has(s.id));\n if (invalid) return 'Must be one of the allowed values';\n } else {\n const allowedIds = new Set(choices.map((v) => v.id));\n if (!allowedIds.has(String(value))) {\n return 'Must be one of the allowed values';\n }\n }\n }\n\n // Literal-only constraints\n if (nodeKind === shacl.Literal.id) {\n const strVal = typeof value === 'string' ? value : String(value);\n\n // sh:pattern\n if (property.pattern) {\n try {\n const re = new RegExp(property.pattern);\n if (!re.test(strVal)) return 'Value must match the required format';\n } catch {\n // Invalid regex in shape definition — skip\n }\n }\n\n // sh:minLength\n if (property.minLength != null && strVal.length < property.minLength) {\n return `Must be at least ${property.minLength} characters`;\n }\n\n // sh:maxLength\n if (property.maxLength != null && strVal.length > property.maxLength) {\n return `Must be at most ${property.maxLength} characters`;\n }\n\n // Numeric range constraints\n const numVal = typeof value === 'number' ? value : parseFloat(strVal);\n if (!isNaN(numVal)) {\n if (property.minInclusive != null && numVal < Number(property.minInclusive)) {\n return `Must be at least ${property.minInclusive}`;\n }\n if (property.maxInclusive != null && numVal > Number(property.maxInclusive)) {\n return `Must be at most ${property.maxInclusive}`;\n }\n if (property.minExclusive != null && numVal <= Number(property.minExclusive)) {\n return `Must be greater than ${property.minExclusive}`;\n }\n if (property.maxExclusive != null && numVal >= Number(property.maxExclusive)) {\n return `Must be less than ${property.maxExclusive}`;\n }\n }\n }\n\n return '';\n}\n\n/**\n * Validate all fields at once (for submit-time gate).\n * Returns an array of errors; empty array means all valid.\n */\nexport function validateAllFields(\n properties: PropertyShapeWire[],\n data: Record<string, any>,\n): FieldError[] {\n const errors: FieldError[] = [];\n for (const prop of properties) {\n if (!prop.nodeKind) continue; // skip incomplete shapes\n const msg = validateField(prop, data[prop.label]);\n if (msg) {\n errors.push({ propertyLabel: prop.label, message: msg });\n }\n }\n return errors;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * CSS modules, for the compiler.\n *\n * `tsc` only COPIES these into `lib` (see `copy-to-lib`); the class-name hashing and scoping is\n * the consuming bundler's job, as in `@_linked/primitives`. A consumer therefore needs a\n * bundler that understands CSS modules — which any app rendering these components already has.\n *\n * The binding is called `styles`, not `classes`, on purpose. `@_linked/primitives` declares the\n * same ambient module, and inside this workspace its *source* is symlinked, so both\n * declarations are visible and `const classes` in each is a duplicate identifier. Ambient\n * module declarations merge; the names inside them must not collide. Renaming is the whole fix.\n *\n * The declaration cannot simply be dropped either: primitives' version reaches us only through\n * the workspace symlink, so a clean `npm ci` in CI has no declaration at all and every\n * `import style from './X.module.css'` fails.\n */\ndeclare module '*.module.css' {\n const styles: {readonly [key: string]: string};\n export default styles;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/utils/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,6BAA6B;AAC7B,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;IAEzF,OAAO,MAAM;QACX,CAAC,CAAC,GAAG,SAAS,IAAI,YAAY,IAAI,MAAM,EAAE;QAC1C,CAAC,CAAC,GAAG,SAAS,IAAI,YAAY,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,YAAoB;IAC/D,IAAI,QAAQ,GAAG,YAAY,CAAC;IAC5B,IACE,QAAQ;QACR,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,EACrC,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,0BAA0B,EAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,CACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/utils/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,6BAA6B;AAC7B,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;IAEzF,OAAO,MAAM;QACX,CAAC,CAAC,GAAG,SAAS,IAAI,YAAY,IAAI,MAAM,EAAE;QAC1C,CAAC,CAAC,GAAG,SAAS,IAAI,YAAY,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,YAAoB;IAC/D,IAAI,QAAQ,GAAG,YAAY,CAAC;IAC5B,IACE,QAAQ;QACR,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,SAAS,CAAC,WAAW,EAAE,KAAK,SAAS,EACrC,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,0BAA0B,EAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,CACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\n// currently use for generate\nexport function generateRandomName(format: string) {\n const timestamp = new Date().getTime();\n const randomString = Math.random().toString(15).substring(7); // Generate a random string\n\n return format\n ? `${timestamp}_${randomString}.${format}`\n : `${timestamp}_${randomString}`;\n}\n\n/**\n * Fixes the image path for Android devices during development.\n * Replaces 'localhost' with the appropriate site root URL.\n * @param croppedImage\n * @returns\n */\nexport function replaceLocalhostWithSiteRoot(croppedImage: string): string {\n let imageSrc = croppedImage;\n if (\n imageSrc &&\n process.env.NODE_ENV !== 'production' &&\n Capacitor.getPlatform() === 'android'\n ) {\n if (imageSrc.includes('localhost')) {\n imageSrc = imageSrc.replace(\n /http\\:\\/\\/localhost\\:\\d+/,\n process.env.SITE_ROOT\n );\n }\n }\n\n return imageSrc;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/write.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Creating and updating instances, through the Linked Query DSL.\n *\n * The counterpart of `search.ts`, and the last piece of the read/write pair that still\n * went through a control-plane RPC. `Project.createShapeInstance(projectId, …)` needed a\n * project id for three things, none of which require one on the client:\n *\n * - finding the shape → the host already resolved the catalog\n * - minting the new IRI → `host.dataRoot`, a plain value the host supplies\n * - recording a projection edit → a Create Now studio concern, not a write concern\n *\n * So the write names no project either, and `LinkedStorage` routes it exactly as it routes\n * the read: `AppDataRouter` inside Create Now, the app's own dataset in a standalone or\n * Capacitor build. That matters beyond tidiness — a read that routes one way and a write\n * that routes another is how a form silently saves into the wrong dataset.\n */\n\nimport {CreateBuilder} from '@_linked/core/queries/CreateBuilder';\nimport {UpdateBuilder} from '@_linked/core/queries/UpdateBuilder';\nimport type {NodeShapeWire} from '@_linked/core/shapes/nodeShapeWire';\n\n/** A form's values, keyed by property label. */\nexport type InstanceValues = Record<string, unknown>;\n\n/**\n * Strip a value down to what the graph should hold.\n *\n * A relation field carries `{id, label}` — the label is there so a draft can show a name\n * without re-reading the instance. It is display state, not a fact about the node, and\n * writing it would put a second, immediately stale copy of the label in the graph.\n */\nfunction toGraphValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(toGraphValue);\n if (value && typeof value === 'object' && 'id' in (value as Record<string, unknown>)) {\n return {id: (value as {id: unknown}).id};\n }\n return value;\n}\n\n/** Labels the shape actually declares. Anything else is a stale form field. */\nfunction knownLabels(shape: NodeShapeWire): Set<string> {\n return new Set(\n (shape.propertyShapes ?? []).map((p) => p.label).filter(Boolean) as string[],\n );\n}\n\n/**\n * Mint an IRI for a new instance.\n *\n * `dataRoot` is the one value in this path the host has to supply: Create Now takes it\n * from the project's config, a standalone app knows its own domain. Without it there is\n * no namespace to mint into, so this throws rather than inventing one — a node created\n * under a guessed IRI is worse than a failed create.\n */\nexport function mintInstanceIri(shape: NodeShapeWire, dataRoot?: string): string {\n if (!dataRoot) {\n throw new Error(\n 'Cannot create an instance without `dataRoot`: there is no namespace to mint the ' +\n 'IRI into. Supply it from the host.',\n );\n }\n const segment = (shape.label || 'instance').toLowerCase();\n const base = dataRoot.replace(/\\/+$/, '');\n return `${base}/${segment}/${crypto.randomUUID()}`;\n}\n\n/**\n * Create one instance and return its IRI.\n *\n * Empty values are dropped rather than written: on a create there is nothing to clear, and\n * an empty literal is a real triple with an empty string in it.\n */\nexport async function createInstanceWithDsl(\n shape: NodeShapeWire,\n values: InstanceValues,\n options: {dataRoot?: string; id?: string} = {},\n): Promise<{id: string}> {\n const known = knownLabels(shape);\n const data: Record<string, unknown> = {};\n for (const [label, value] of Object.entries(values)) {\n if (value === undefined || value === null || value === '') continue;\n if (!known.has(label)) continue;\n data[label] = toGraphValue(value);\n }\n\n const id = options.id ?? mintInstanceIri(shape, options.dataRoot);\n await (CreateBuilder.from(shape.id) as any).withId(id).set(data).exec();\n return {id};\n}\n\n/**\n * Update one instance.\n *\n * Empty becomes `null`, which is how the DSL clears a property — the opposite of create,\n * where the same value is dropped. Both are right: clearing a field the viewer emptied is\n * the whole point of an edit form, and there is nothing to clear on a node that does not\n * exist yet.\n *\n * A payload with nothing recognisable in it is a no-op rather than an empty mutation.\n */\nexport async function updateInstanceWithDsl(\n shape: NodeShapeWire,\n instanceId: string,\n values: InstanceValues,\n): Promise<void> {\n const known = knownLabels(shape);\n const data: Record<string, unknown> = {};\n for (const [label, value] of Object.entries(values)) {\n if (!known.has(label)) continue;\n data[label] = value === '' || value === undefined ? null : toGraphValue(value);\n }\n if (Object.keys(data).length === 0) return;\n await (UpdateBuilder.from(shape.id) as any).for(instanceId).set(data).exec();\n}\n"]}
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "type": "git",
11
11
  "url": "git+https://github.com/linked-fw/shape-ui.git"
12
12
  },
13
- "version": "2.4.0",
13
+ "version": "2.5.1",
14
14
  "packageManager": "npm@11.19.1",
15
15
  "type": "module",
16
16
  "linkedPackage": true,
@@ -32,7 +32,7 @@
32
32
  ],
33
33
  "dependencies": {
34
34
  "@_linked/core": "^2.22.8",
35
- "@_linked/react": "^1.4",
35
+ "@_linked/react": "^1.5.3",
36
36
  "@_linked/schema": "^1.0",
37
37
  "@tanstack/react-table": "^8.20.5"
38
38
  },