@_linked/shape-ui 2.0.0 → 2.3.0

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 (207) hide show
  1. package/lib/esm/columns.d.ts +58 -0
  2. package/lib/esm/columns.js +173 -0
  3. package/lib/esm/columns.js.map +1 -0
  4. package/lib/esm/components/AddInstanceForms.d.ts +38 -0
  5. package/lib/esm/components/AddInstanceForms.js +143 -0
  6. package/lib/esm/components/AddInstanceForms.js.map +1 -0
  7. package/lib/esm/components/AddInstanceForms.module.css +12 -0
  8. package/lib/esm/components/BatchEditDrawer.d.ts +13 -0
  9. package/lib/esm/components/BatchEditDrawer.js +122 -0
  10. package/lib/esm/components/BatchEditDrawer.js.map +1 -0
  11. package/lib/esm/components/BatchEditDrawer.module.css +193 -0
  12. package/lib/esm/components/CustomMultiSelect.d.ts +26 -0
  13. package/lib/esm/components/CustomMultiSelect.js +344 -0
  14. package/lib/esm/components/CustomMultiSelect.js.map +1 -0
  15. package/lib/esm/components/CustomMultiSelect.module.css +291 -0
  16. package/lib/esm/components/DynamicFormField.d.ts +21 -0
  17. package/lib/esm/components/DynamicFormField.js +149 -0
  18. package/lib/esm/components/DynamicFormField.js.map +1 -0
  19. package/lib/esm/components/DynamicFormField.module.css +169 -0
  20. package/lib/esm/components/EditInstanceForms.d.ts +15 -0
  21. package/lib/esm/components/EditInstanceForms.js +118 -0
  22. package/lib/esm/components/EditInstanceForms.js.map +1 -0
  23. package/lib/esm/components/FilterBadge.d.ts +20 -0
  24. package/lib/esm/components/FilterBadge.js +26 -0
  25. package/lib/esm/components/FilterBadge.js.map +1 -0
  26. package/lib/esm/components/FilterBadge.module.css +25 -0
  27. package/lib/esm/components/FormField.d.ts +18 -0
  28. package/lib/esm/components/FormField.js +9 -0
  29. package/lib/esm/components/FormField.js.map +1 -0
  30. package/lib/esm/components/FormField.module.css +57 -0
  31. package/lib/esm/components/InstanceDeletionDialog.d.ts +17 -0
  32. package/lib/esm/components/InstanceDeletionDialog.js +83 -0
  33. package/lib/esm/components/InstanceDeletionDialog.js.map +1 -0
  34. package/lib/esm/components/InstanceDeletionDialog.module.css +59 -0
  35. package/lib/esm/components/InstanceOverview.d.ts +43 -0
  36. package/lib/esm/components/InstanceOverview.js +236 -0
  37. package/lib/esm/components/InstanceOverview.js.map +1 -0
  38. package/lib/esm/components/InstanceOverview.module.css +35 -0
  39. package/lib/esm/components/InstanceView.d.ts +29 -0
  40. package/lib/esm/components/InstanceView.js +97 -0
  41. package/lib/esm/components/InstanceView.js.map +1 -0
  42. package/lib/esm/components/InstanceView.module.css +157 -0
  43. package/lib/esm/components/NodeBadge.d.ts +25 -0
  44. package/lib/esm/components/NodeBadge.js +29 -0
  45. package/lib/esm/components/NodeBadge.js.map +1 -0
  46. package/lib/esm/components/NodeValuesEditor.d.ts +15 -0
  47. package/lib/esm/components/NodeValuesEditor.js +29 -0
  48. package/lib/esm/components/NodeValuesEditor.js.map +1 -0
  49. package/lib/esm/components/NodeValuesEditor.module.css +4 -0
  50. package/lib/esm/components/ReactTable.d.ts +59 -0
  51. package/lib/esm/components/ReactTable.js +378 -0
  52. package/lib/esm/components/ReactTable.js.map +1 -0
  53. package/lib/esm/components/ReactTable.module.css +950 -0
  54. package/lib/esm/components/TextfieldEditor.d.ts +1 -2
  55. package/lib/esm/components/TextfieldEditor.js +2 -2
  56. package/lib/esm/components/TextfieldEditor.js.map +1 -1
  57. package/lib/esm/components/forms.module.css +96 -0
  58. package/lib/esm/host.d.ts +196 -0
  59. package/lib/esm/host.js +25 -0
  60. package/lib/esm/host.js.map +1 -0
  61. package/lib/esm/hostContext.d.ts +34 -0
  62. package/lib/esm/hostContext.js +95 -0
  63. package/lib/esm/hostContext.js.map +1 -0
  64. package/lib/esm/index.d.ts +60 -10
  65. package/lib/esm/index.js +60 -14
  66. package/lib/esm/index.js.map +1 -1
  67. package/lib/esm/read.d.ts +48 -0
  68. package/lib/esm/read.js +96 -0
  69. package/lib/esm/read.js.map +1 -0
  70. package/lib/esm/search.d.ts +32 -0
  71. package/lib/esm/search.js +87 -0
  72. package/lib/esm/search.js.map +1 -0
  73. package/lib/esm/shape/contracts.d.ts +58 -0
  74. package/lib/esm/shape/contracts.js +15 -0
  75. package/lib/esm/shape/contracts.js.map +1 -0
  76. package/lib/esm/shape/naming.d.ts +30 -0
  77. package/lib/esm/shape/naming.js +52 -0
  78. package/lib/esm/shape/naming.js.map +1 -0
  79. package/lib/esm/shape/nodeDisplay.d.ts +36 -0
  80. package/lib/esm/shape/nodeDisplay.js +117 -0
  81. package/lib/esm/shape/nodeDisplay.js.map +1 -0
  82. package/lib/esm/shape/propertyTypes.d.ts +12 -0
  83. package/lib/esm/shape/propertyTypes.js +60 -0
  84. package/lib/esm/shape/propertyTypes.js.map +1 -0
  85. package/lib/esm/shape/propertyVisibility.d.ts +56 -0
  86. package/lib/esm/shape/propertyVisibility.js +112 -0
  87. package/lib/esm/shape/propertyVisibility.js.map +1 -0
  88. package/lib/esm/shape/shapeDependencies.d.ts +41 -0
  89. package/lib/esm/shape/shapeDependencies.js +141 -0
  90. package/lib/esm/shape/shapeDependencies.js.map +1 -0
  91. package/lib/esm/shape/tableFilters.d.ts +35 -0
  92. package/lib/esm/shape/tableFilters.js +171 -0
  93. package/lib/esm/shape/tableFilters.js.map +1 -0
  94. package/lib/esm/shape/useFormDependencies.d.ts +38 -0
  95. package/lib/esm/shape/useFormDependencies.js +178 -0
  96. package/lib/esm/shape/useFormDependencies.js.map +1 -0
  97. package/lib/esm/shape/validation.d.ts +15 -0
  98. package/lib/esm/shape/validation.js +106 -0
  99. package/lib/esm/shape/validation.js.map +1 -0
  100. package/lib/esm/tokens.css +25 -0
  101. package/lib/esm/types.d.ts +22 -0
  102. package/lib/esm/types.js +1 -0
  103. package/lib/esm/types.js.map +1 -0
  104. package/lib/esm/write.d.ts +51 -0
  105. package/lib/esm/write.js +99 -0
  106. package/lib/esm/write.js.map +1 -0
  107. package/package.json +44 -18
  108. package/src/backend.ts +1 -0
  109. package/src/columns.regression.test.ts +143 -0
  110. package/src/columns.test.ts +200 -0
  111. package/src/columns.ts +228 -0
  112. package/src/components/AddInstanceForms.module.css +12 -0
  113. package/src/components/AddInstanceForms.tsx +321 -0
  114. package/src/components/AvatarEditor.tsx +34 -0
  115. package/src/components/BatchEditDrawer.module.css +193 -0
  116. package/src/components/BatchEditDrawer.tsx +295 -0
  117. package/src/components/CheckboxEditor.module.css +6 -0
  118. package/src/components/CheckboxEditor.tsx +86 -0
  119. package/src/components/CustomMultiSelect.module.css +291 -0
  120. package/src/components/CustomMultiSelect.tsx +527 -0
  121. package/src/components/DateEditor.tsx +50 -0
  122. package/src/components/DynamicFormField.module.css +169 -0
  123. package/src/components/DynamicFormField.tsx +357 -0
  124. package/src/components/EditInstanceForms.tsx +260 -0
  125. package/src/components/FilterBadge.module.css +25 -0
  126. package/src/components/FilterBadge.tsx +70 -0
  127. package/src/components/FormField.module.css +57 -0
  128. package/src/components/FormField.tsx +59 -0
  129. package/src/components/ImageValueEditor.module.css +3 -0
  130. package/src/components/ImageValueEditor.tsx +82 -0
  131. package/src/components/InstanceDeletionDialog.module.css +59 -0
  132. package/src/components/InstanceDeletionDialog.tsx +175 -0
  133. package/src/components/InstanceOverview.module.css +35 -0
  134. package/src/components/InstanceOverview.tsx +385 -0
  135. package/src/components/InstanceView.module.css +157 -0
  136. package/src/components/InstanceView.tsx +212 -0
  137. package/src/components/NodeBadge.tsx +60 -0
  138. package/src/components/NodeValuesEditor.module.css +4 -0
  139. package/src/components/NodeValuesEditor.tsx +64 -0
  140. package/src/components/RadioButtonEditor.module.css +22 -0
  141. package/src/components/RadioButtonEditor.tsx +96 -0
  142. package/src/components/ReactTable.module.css +950 -0
  143. package/src/components/ReactTable.tsx +1013 -0
  144. package/src/components/SelectEditor.tsx +85 -0
  145. package/src/components/ShapeTable.module.css +394 -0
  146. package/src/components/SwitchEditor.tsx +60 -0
  147. package/src/components/TextareaEditor.tsx +55 -0
  148. package/src/components/TextfieldEditor.tsx +67 -0
  149. package/src/components/ToggleEditor.tsx +63 -0
  150. package/src/components/forms.module.css +96 -0
  151. package/src/host.ts +226 -0
  152. package/src/hostContext.tsx +114 -0
  153. package/src/index.ts +93 -0
  154. package/src/package.ts +21 -0
  155. package/src/read.ts +148 -0
  156. package/src/search.test.ts +174 -0
  157. package/src/search.ts +108 -0
  158. package/src/shape/contracts.ts +66 -0
  159. package/src/shape/naming.ts +52 -0
  160. package/src/shape/nodeDisplay.ts +114 -0
  161. package/src/shape/propertyTypes.ts +86 -0
  162. package/src/shape/propertyVisibility.ts +180 -0
  163. package/src/shape/shapeDependencies.ts +183 -0
  164. package/src/shape/tableFilters.ts +223 -0
  165. package/src/shape/types.ts +1158 -0
  166. package/src/shape/useFormDependencies.ts +257 -0
  167. package/src/shape/validation.ts +121 -0
  168. package/src/tokens.css +25 -0
  169. package/src/types.ts +20 -0
  170. package/src/utils/helper.ts +35 -0
  171. package/src/write.test.ts +174 -0
  172. package/src/write.ts +114 -0
  173. package/.changeset/README.md +0 -20
  174. package/.changeset/config.json +0 -14
  175. package/.github/workflows/changeset-check.yml +0 -44
  176. package/.github/workflows/ci.yml +0 -43
  177. package/.github/workflows/publish.yml +0 -158
  178. package/CHANGELOG.md +0 -30
  179. package/lib/esm/components/AvatarEditor.d.ts +0 -20
  180. package/lib/esm/components/AvatarEditor.js +0 -7
  181. package/lib/esm/components/AvatarEditor.js.map +0 -1
  182. package/lib/esm/components/CheckboxEditor.d.ts +0 -21
  183. package/lib/esm/components/CheckboxEditor.js +0 -44
  184. package/lib/esm/components/CheckboxEditor.js.map +0 -1
  185. package/lib/esm/components/DateEditor.d.ts +0 -20
  186. package/lib/esm/components/DateEditor.js +0 -22
  187. package/lib/esm/components/DateEditor.js.map +0 -1
  188. package/lib/esm/components/RadioButtonEditor.d.ts +0 -23
  189. package/lib/esm/components/RadioButtonEditor.js +0 -41
  190. package/lib/esm/components/RadioButtonEditor.js.map +0 -1
  191. package/lib/esm/components/SelectEditor.d.ts +0 -21
  192. package/lib/esm/components/SelectEditor.js +0 -30
  193. package/lib/esm/components/SelectEditor.js.map +0 -1
  194. package/lib/esm/components/SwitchEditor.d.ts +0 -21
  195. package/lib/esm/components/SwitchEditor.js +0 -23
  196. package/lib/esm/components/SwitchEditor.js.map +0 -1
  197. package/lib/esm/components/TextareaEditor.d.ts +0 -23
  198. package/lib/esm/components/TextareaEditor.js +0 -15
  199. package/lib/esm/components/TextareaEditor.js.map +0 -1
  200. package/lib/esm/components/ToggleEditor.d.ts +0 -22
  201. package/lib/esm/components/ToggleEditor.js +0 -23
  202. package/lib/esm/components/ToggleEditor.js.map +0 -1
  203. package/lib/esm/ontologies/lincd-ui.d.ts +0 -6
  204. package/lib/esm/ontologies/lincd-ui.js +0 -18
  205. package/lib/esm/ontologies/lincd-ui.js.map +0 -1
  206. package/tsconfig-cjs.json +0 -8
  207. package/tsconfig-esm.json +0 -9
@@ -0,0 +1,236 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useDataManagerHost } from '../hostContext.js';
3
+ import { getNodeDisplay } from '../shape/nodeDisplay.js';
4
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
5
+ import ImageThumb from '@_linked/primitives/components/ImageThumb';
6
+ import { NodeBadge } from './NodeBadge.js';
7
+ import style from './InstanceOverview.module.css';
8
+ import ReactTable from './ReactTable.js';
9
+ function InstanceOverview({ customColumns, instances, totalCount, properties, shape, isLoading = false, config, setConfig, onSelectionChange, isPickMode = false, pickMaxCount, pickAlreadySelected, deletionProjectId, previewDeletion, executeDeletion, onInstancesDeleted, onBatchUpdate, tableMode, onTableModeChange, }) {
10
+ // Pick mode is a host flow: the host knows where the picker was opened from and what to
11
+ // do with the choice. This component only knows that a choice was made.
12
+ //
13
+ // There is no fallback. The fallback was CN's sessionStorage-plus-router round trip,
14
+ // which is exactly the app-specific knowledge that has no business in a component meant
15
+ // to run inside someone else's app — and holding on to it kept `routes.tsx` in the
16
+ // import graph, which drags in the whole application.
17
+ const host = useDataManagerHost();
18
+ const handlePickInstance = (instance) => { var _a; return (_a = host.picking) === null || _a === void 0 ? void 0 : _a.select([instance]); };
19
+ const handlePickInstances = (instances) => { var _a; return (_a = host.picking) === null || _a === void 0 ? void 0 : _a.select(instances); };
20
+ // URI-based selection — stable across sort/filter/pagination
21
+ const [selectedUris, setSelectedUris] = useState(new Set());
22
+ const toggleSelectAll = useCallback(() => {
23
+ setSelectedUris((prev) => {
24
+ if (prev.size > 0) {
25
+ // Deselect all
26
+ return new Set();
27
+ }
28
+ // Select all visible instances
29
+ const allUris = new Set();
30
+ instances.forEach((inst) => {
31
+ if (inst === null || inst === void 0 ? void 0 : inst.id)
32
+ allUris.add(inst.id);
33
+ });
34
+ return allUris;
35
+ });
36
+ }, [instances]);
37
+ const toggleRowSelection = useCallback((uri) => {
38
+ setSelectedUris((prev) => {
39
+ const next = new Set(prev);
40
+ if (next.has(uri)) {
41
+ next.delete(uri);
42
+ }
43
+ else {
44
+ next.add(uri);
45
+ }
46
+ return next;
47
+ });
48
+ }, []);
49
+ const isRowSelected = useCallback((uri) => selectedUris.has(uri), [selectedUris]);
50
+ const clearSelection = useCallback(() => {
51
+ setSelectedUris(new Set());
52
+ }, []);
53
+ // Remove succeeded URIs from selection after batch ops
54
+ const removeFromSelection = useCallback((uris) => {
55
+ setSelectedUris((prev) => {
56
+ const next = new Set(prev);
57
+ for (const uri of uris)
58
+ next.delete(uri);
59
+ return next;
60
+ });
61
+ }, []);
62
+ const hasSelection = selectedUris.size > 0;
63
+ // Pre-select rows matching pickAlreadySelected when data loads
64
+ const preSelectDone = useRef(false);
65
+ useEffect(() => {
66
+ if (preSelectDone.current || !isPickMode || !(pickAlreadySelected === null || pickAlreadySelected === void 0 ? void 0 : pickAlreadySelected.length) || !(instances === null || instances === void 0 ? void 0 : instances.length))
67
+ return;
68
+ preSelectDone.current = true;
69
+ const alreadyIds = new Set(pickAlreadySelected.map((a) => a.id));
70
+ const matching = new Set();
71
+ instances.forEach((inst) => {
72
+ if ((inst === null || inst === void 0 ? void 0 : inst.id) && alreadyIds.has(inst.id))
73
+ matching.add(inst.id);
74
+ });
75
+ if (matching.size > 0) {
76
+ setSelectedUris(matching);
77
+ }
78
+ }, [instances, isPickMode, pickAlreadySelected]);
79
+ const [_config, _setConfig] = useState(config || {
80
+ pageIndex: 0,
81
+ pageSize: 10,
82
+ filters: [],
83
+ });
84
+ // Config state can be handled by the parent or here. When the parent owns it, `config` is
85
+ // the live value and `_config` is only the initial snapshot — so the table must read
86
+ // `config` when present, or a parent-driven page change (server-side pagination) would
87
+ // never reach it.
88
+ const __setConfig = setConfig || _setConfig;
89
+ const handleNodeClick = (nodeValue, propertyName) => {
90
+ var _a;
91
+ // Get the property details to access valueShape
92
+ const property = properties[propertyName];
93
+ if (property && property.valueShape && nodeValue.id) {
94
+ // Navigate to the view page for this node
95
+ (_a = host.navigate) === null || _a === void 0 ? void 0 : _a.toInstance(property.valueShape.id, nodeValue.id);
96
+ }
97
+ };
98
+ // Notify parent when selection changes (chatbot integration)
99
+ useEffect(() => {
100
+ if (onSelectionChange) {
101
+ const selectedInstances = instances.filter((inst) => (inst === null || inst === void 0 ? void 0 : inst.id) && selectedUris.has(inst.id));
102
+ onSelectionChange(Array.from(selectedUris).map((uri) => instances.findIndex((inst) => (inst === null || inst === void 0 ? void 0 : inst.id) === uri)).filter((i) => i >= 0), selectedInstances);
103
+ }
104
+ }, [selectedUris]);
105
+ let initialColumns = [
106
+ {
107
+ id: 'selection',
108
+ cell: ({ row }) => {
109
+ var _a;
110
+ return (_jsx("input", { type: "hidden", onChange: () => { var _a; return toggleRowSelection((_a = row.original) === null || _a === void 0 ? void 0 : _a.id); }, checked: isRowSelected((_a = row.original) === null || _a === void 0 ? void 0 : _a.id) }));
111
+ },
112
+ },
113
+ ];
114
+ let columnConfig;
115
+ const cell = (info) => {
116
+ console.log('info cell', info);
117
+ return info.getValue();
118
+ };
119
+ if (customColumns) {
120
+ columnConfig = customColumns.map((config) => {
121
+ return {
122
+ id: config.label || config.property.label,
123
+ accessorKey: config.label || config.property.label,
124
+ cell: cell,
125
+ accessorFn: config.renderCell,
126
+ };
127
+ });
128
+ initialColumns.push(...columnConfig);
129
+ }
130
+ else {
131
+ //dynamically define the columns based on the properties of the shape
132
+ Object.entries(properties || {}).forEach(([propLabel, propShape]) => {
133
+ //skip rdf:type
134
+ if (propShape.id === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') {
135
+ return;
136
+ }
137
+ columnConfig = {
138
+ id: propShape.id,
139
+ // accessorFn, NOT accessorKey: TanStack reads a key as a deep PATH, so a property
140
+ // labelled "Avg. basket" was looked up as row["Avg"][" basket"] and rendered blank
141
+ // while every other column on the same row was fine. Labels are written by people and
142
+ // routinely contain a dot; reading the row directly removes the trap.
143
+ accessorFn: (row) => row === null || row === void 0 ? void 0 : row[propLabel],
144
+ cell: (info) => {
145
+ let value = info.getValue();
146
+ const parseLiteral = (value) => {
147
+ let literalText;
148
+ if (value instanceof Date) {
149
+ literalText = value.toLocaleString();
150
+ }
151
+ else if (typeof value === 'boolean') {
152
+ literalText = value ? 'Yes' : 'No';
153
+ }
154
+ else if (typeof value === 'number') {
155
+ literalText = value.toString();
156
+ }
157
+ else if (typeof value === 'string') {
158
+ literalText = value;
159
+ }
160
+ else {
161
+ literalText = value;
162
+ }
163
+ return _jsx("span", { className: style.literal, children: literalText });
164
+ };
165
+ const isNode = (value) => {
166
+ return value && typeof value === 'object' && value.id;
167
+ };
168
+ const parseValue = (value, forceLiteral = false) => {
169
+ // Handle ImageObject (has contentUrl)
170
+ if (value && typeof value === 'object' && value.contentUrl) {
171
+ return _jsx(ImageThumb, { src: value.contentUrl, size: 32, alt: value.label || propLabel, clickToEnlarge: true });
172
+ }
173
+ if (isNode(value)) {
174
+ const images = value.image;
175
+ const firstImage = Array.isArray(images) ? images[0] : images;
176
+ if (firstImage) {
177
+ const imgSrc = typeof firstImage === 'object' && firstImage.contentUrl
178
+ ? String(firstImage.contentUrl)
179
+ : String(firstImage);
180
+ return _jsx(ImageThumb, { src: imgSrc, size: 32, alt: value.label || propLabel, clickToEnlarge: true });
181
+ }
182
+ let identifier;
183
+ const otherProperties = Object.keys(value).filter(key => key !== 'id');
184
+ if (otherProperties.length > 0) {
185
+ for (const property of otherProperties) {
186
+ if (value[property]) {
187
+ identifier = value[property];
188
+ break;
189
+ }
190
+ }
191
+ }
192
+ if (!identifier) {
193
+ identifier = getNodeDisplay(value);
194
+ }
195
+ return forceLiteral ? (identifier) : (_jsx(NodeBadge, { text: identifier, onClick: () => handleNodeClick(value, propLabel), clickable: true }));
196
+ }
197
+ return parseLiteral(value);
198
+ };
199
+ if (Array.isArray(value)) {
200
+ const maxValues = 3;
201
+ const valuesToShow = value.slice(0, maxValues);
202
+ const leftOver = value.length - maxValues;
203
+ if (leftOver > 0) {
204
+ const title = `${leftOver} more values: ${value
205
+ .slice(maxValues)
206
+ .map((val) => parseValue(val, true))
207
+ .join(', ')}`;
208
+ valuesToShow.push(_jsx(NodeBadge, { text: `(${leftOver}...)`, title: title, clickable: false }));
209
+ }
210
+ return valuesToShow.map((val, index) => {
211
+ const parsed = parseValue(val);
212
+ const isCurrentLiteral = !isNode(val) && !React.isValidElement(val);
213
+ const nextVal = valuesToShow[index + 1];
214
+ const isNextLiteral = nextVal && !isNode(nextVal) && !React.isValidElement(nextVal);
215
+ const needsComma = isCurrentLiteral && isNextLiteral;
216
+ return (_jsxs(React.Fragment, { children: [parsed, needsComma ? ', ' : ' '] }, index));
217
+ });
218
+ }
219
+ else {
220
+ return parseValue(value);
221
+ }
222
+ },
223
+ header: propLabel
224
+ .replace(/([A-Z])/g, ' $1')
225
+ .replace(/_/g, ' ')
226
+ .replace(/^./, (char) => char.toUpperCase()),
227
+ footer: (props) => props.column.id,
228
+ };
229
+ initialColumns.push(columnConfig);
230
+ });
231
+ }
232
+ const columns = React.useMemo(() => initialColumns, [properties]);
233
+ return (_jsx(ReactTable, { data: instances, columns: columns, toggleSelectAll: toggleSelectAll, isRowSelected: isRowSelected, selectedUris: selectedUris, toggleRowSelection: toggleRowSelection, clearSelection: clearSelection, removeFromSelection: removeFromSelection, hasSelection: hasSelection, config: config || _config, setConfig: __setConfig, totalCount: totalCount, shape: shape, properties: properties, isLoading: isLoading, isPickMode: isPickMode, onPickInstance: handlePickInstance, onPickInstances: handlePickInstances, pickMaxCount: pickMaxCount, pickAlreadySelected: pickAlreadySelected, deletionProjectId: deletionProjectId, previewDeletion: previewDeletion, executeDeletion: executeDeletion, onInstancesDeleted: onInstancesDeleted, onBatchUpdate: onBatchUpdate, tableMode: tableMode, onTableModeChange: onTableModeChange }));
234
+ }
235
+ export default InstanceOverview;
236
+ //# sourceMappingURL=InstanceOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceOverview.js","sourceRoot":"","sources":["../../../src/components/InstanceOverview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /* ============================================================================
2
+ InstanceOverview.module.css
3
+
4
+ Instance data display styles for table cells.
5
+ Uses semantic tokens from theme.css.
6
+ ============================================================================ */
7
+
8
+ /* === Node Badge === */
9
+ .node {
10
+ display: inline-block;
11
+ background-color: var(--instance-overview-gray-100, var(--color-gray-100));
12
+ padding: 0.25rem 0.5rem;
13
+ border-radius: var(--radius-selector);
14
+ color: var(--table-cell-text);
15
+ font-size: var(--typography-small-size);
16
+ }
17
+
18
+ /* === Literal Value === */
19
+ .literal {
20
+ display: inline-block;
21
+ color: var(--table-cell-text);
22
+ }
23
+
24
+ /* ============================================================================
25
+ Dark Mode
26
+ ============================================================================ */
27
+
28
+ [data-theme='dark'] .node {
29
+ background-color: var(--instance-overview-gray-700, var(--color-gray-700));
30
+ color: var(--table-cell-text);
31
+ }
32
+
33
+ [data-theme='dark'] .literal {
34
+ color: var(--table-cell-text);
35
+ }
@@ -0,0 +1,29 @@
1
+ import type { PropertyShapeWire, NodeShapeWire } from '@_linked/core/shapes/nodeShapeWire';
2
+ /**
3
+ * Read-only rendering of one instance's values.
4
+ *
5
+ * Lifted out of `ViewInstance` (436 lines), which rendered all of this inline. That made the
6
+ * single-instance view the one CRUD surface with no organism at all — nothing to extract,
7
+ * nothing to test, and nothing that could move into the package. The page keeps what a page
8
+ * should: routing, breadcrumbs, layout chrome, actions, the deletion dialog.
9
+ *
10
+ * Navigation is a callback, not a router call. Clicking a related node means "show me that
11
+ * one", and where that goes is the host's business.
12
+ */
13
+ export interface InstanceViewProps {
14
+ shape?: NodeShapeWire;
15
+ /** Property metadata by label — used to resolve which shape a related node belongs to. */
16
+ properties: Record<string, PropertyShapeWire>;
17
+ /** The instance's values, keyed by property label. */
18
+ subject: Record<string, any> | null;
19
+ /**
20
+ * A related node was clicked. Given the node and the property it came from, so the caller
21
+ * can resolve the target shape from `properties[propertyName].valueShape`.
22
+ */
23
+ onNodeClick?: (node: {
24
+ id: string;
25
+ label?: string;
26
+ }, propertyName: string) => void;
27
+ }
28
+ export declare function InstanceView({ shape, properties, subject, onNodeClick, }: InstanceViewProps): import("react").JSX.Element;
29
+ export default InstanceView;
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { motion } from 'framer-motion';
4
+ import { cl } from '@_linked/react/utils/ClassNames';
5
+ import { NodeBadge } from './NodeBadge.js';
6
+ import ImageThumb from '@_linked/primitives/components/ImageThumb';
7
+ import { getNodeDisplay } from '../shape/nodeDisplay.js';
8
+ import { getTransition, staggerContainer, staggerItem, useReducedMotion, } from '@_linked/primitives/motion';
9
+ import style from './InstanceView.module.css';
10
+ /** Above this many values, the rest collapse behind a "(n…)" badge. */
11
+ const MAX_VALUES = 7;
12
+ export function InstanceView({ shape, properties, subject, onNodeClick, }) {
13
+ var _a;
14
+ const [expandedArrays, setExpandedArrays] = useState(new Set());
15
+ const reducedMotion = useReducedMotion();
16
+ const expand = (propertyName) => setExpandedArrays((prev) => new Set(prev).add(propertyName));
17
+ const handleNodeClick = (node, propertyName) => {
18
+ if (node === null || node === void 0 ? void 0 : node.id)
19
+ onNodeClick === null || onNodeClick === void 0 ? void 0 : onNodeClick(node, propertyName);
20
+ };
21
+ /** An image source, whether the value carries one directly or via a nested ImageObject. */
22
+ const imageSourceOf = (value) => {
23
+ const images = value === null || value === void 0 ? void 0 : value.image;
24
+ const first = Array.isArray(images) ? images[0] : images;
25
+ if (!first)
26
+ return undefined;
27
+ return typeof first === 'object' && first.contentUrl
28
+ ? String(first.contentUrl)
29
+ : String(first);
30
+ };
31
+ const renderArrayItem = (item, key, propertyName) => {
32
+ if (typeof item === 'object' && (item === null || item === void 0 ? void 0 : item.contentUrl)) {
33
+ return (_jsx("div", { children: _jsx(ImageThumb, { src: item.contentUrl, size: 40, alt: item.label || propertyName }) }, key));
34
+ }
35
+ if (typeof item === 'object' && (item === null || item === void 0 ? void 0 : item.id)) {
36
+ const imgSrc = imageSourceOf(item);
37
+ if (imgSrc) {
38
+ return (_jsx("div", { children: _jsx(ImageThumb, { src: imgSrc, size: 40, alt: item.label || propertyName }) }, key));
39
+ }
40
+ return (_jsx("div", { children: _jsx(NodeBadge, { text: item.label || item.id, onClick: () => handleNodeClick(item, propertyName), clickable: true }) }, key));
41
+ }
42
+ return (_jsx("div", { children: _jsx(NodeBadge, { text: String(item) }) }, key));
43
+ };
44
+ const renderValue = (value, propertyName) => {
45
+ if (value === null || value === undefined)
46
+ return _jsx("p", { children: "-" });
47
+ if (typeof value === 'boolean')
48
+ return _jsx("p", { children: value ? 'Yes' : 'No' });
49
+ // An ImageObject: the value IS the image.
50
+ if (typeof value === 'object' && value.contentUrl) {
51
+ return (_jsxs("div", { className: style.imageValue, children: [_jsx(ImageThumb, { src: value.contentUrl, size: 64, alt: propertyName }), _jsx("p", { className: style.imageLabel, children: value.label || value.contentUrl })] }));
52
+ }
53
+ // A related node: show its image if it has one, else a clickable badge.
54
+ if (typeof value === 'object' && value.id) {
55
+ const imgSrc = imageSourceOf(value);
56
+ if (imgSrc) {
57
+ return (_jsxs("div", { className: style.imageValue, children: [_jsx(ImageThumb, { src: imgSrc, size: 48, alt: value.label || propertyName }), value.label && _jsx("span", { className: style.imageLabel, children: value.label })] }));
58
+ }
59
+ return (_jsx(NodeBadge, { text: getNodeDisplay(value), onClick: () => handleNodeClick(value, propertyName), clickable: true }));
60
+ }
61
+ if (Array.isArray(value)) {
62
+ if (value.length === 0)
63
+ return _jsx("p", { children: "-" });
64
+ const isExpanded = expandedArrays.has(propertyName);
65
+ const visible = isExpanded ? value : value.slice(0, MAX_VALUES);
66
+ const leftOver = value.length - MAX_VALUES;
67
+ return (_jsxs("div", { className: style.badgeContainer, children: [visible.map((item, index) => renderArrayItem(item, index, propertyName)), !isExpanded && leftOver > 0 && (_jsx("div", { children: _jsx(NodeBadge, { text: `(${leftOver}...)`, onClick: () => expand(propertyName), clickable: true }) }))] }));
68
+ }
69
+ return _jsx("p", { children: String(value) });
70
+ };
71
+ if (!subject)
72
+ return null;
73
+ // Only properties that actually have a value, and never the identifier — it names the
74
+ // record rather than describing it.
75
+ const populated = ((_a = shape === null || shape === void 0 ? void 0 : shape.propertyShapes) !== null && _a !== void 0 ? _a : []).filter((prop) => {
76
+ if (prop.label === 'id')
77
+ return false;
78
+ const value = subject[prop.label];
79
+ return value !== undefined && value !== null && value !== '';
80
+ });
81
+ return (_jsx(motion.div, { className: style.rows, variants: staggerContainer, initial: "initial", animate: "animate", children: populated.map((prop) => {
82
+ const value = subject[prop.label];
83
+ const formattedLabel = prop.label.charAt(0).toUpperCase() + prop.label.slice(1);
84
+ const isStacked = shouldStack(value);
85
+ return (_jsxs(motion.div, { className: cl(style.form, isStacked && style.stacked), variants: staggerItem, transition: getTransition(reducedMotion), children: [_jsx("div", { className: style.label, children: _jsx("label", { children: formattedLabel }) }), _jsx("div", { className: style.value, children: renderValue(value, prop.label) })] }, prop.label));
86
+ }) }));
87
+ }
88
+ /** A value wide enough that label-beside-value stops reading well. */
89
+ function shouldStack(value) {
90
+ if (Array.isArray(value))
91
+ return value.length > 3;
92
+ if (typeof value === 'string')
93
+ return value.length > 120;
94
+ return false;
95
+ }
96
+ export default InstanceView;
97
+ //# sourceMappingURL=InstanceView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceView.js","sourceRoot":"","sources":["../../../src/components/InstanceView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /*
2
+ * Lifted from ViewInstance.module.css alongside the InstanceView organism.
3
+ *
4
+ * Only the rules that render an instance's VALUES. The page keeps its layout, header,
5
+ * actions and skeleton rules — those belong to the page, not to the value list.
6
+ */
7
+
8
+ .rows {
9
+ padding: var(--surface-gap) var(--space-2xl) var(--space-lg) var(--space-2xl);
10
+ }
11
+
12
+ .form {
13
+ display: flex;
14
+ min-height: 3.75rem;
15
+ align-items: center;
16
+ border-top: 1px solid var(--table-row-border);
17
+ justify-content: flex-start;
18
+ padding: var(--space-sm) 0;
19
+ }
20
+
21
+ .form:first-child {
22
+ border-top: none;
23
+ }
24
+
25
+ .form.stacked {
26
+ flex-direction: column;
27
+ align-items: flex-start;
28
+ gap: var(--space-sm);
29
+ }
30
+
31
+ .form.stacked .label {
32
+ width: 100%;
33
+ }
34
+
35
+ .form.stacked .value {
36
+ width: 100%;
37
+ }
38
+
39
+ .label {
40
+ display: flex;
41
+ flex-direction: column;
42
+ width: 30%;
43
+ min-width: 120px;
44
+ height: 100%;
45
+ justify-content: center;
46
+ padding-right: var(--space-md);
47
+ flex-shrink: 0;
48
+ }
49
+
50
+ .label label {
51
+ color: var(--instance-view-gray-500, var(--color-gray-500));
52
+ font-size: var(--typography-font-size);
53
+ }
54
+
55
+ .value {
56
+ display: flex;
57
+ flex-wrap: wrap;
58
+ gap: var(--space-sm-plus);
59
+ width: 70%;
60
+ max-height: 8.75rem;
61
+ overflow-y: auto;
62
+ }
63
+
64
+ .value p {
65
+ color: var(--text-primary);
66
+ font-size: var(--typography-font-size);
67
+ margin: 0;
68
+ }
69
+
70
+ .badgeContainer {
71
+ display: flex;
72
+ flex-wrap: wrap;
73
+ gap: var(--space-2xs) 0;
74
+ overflow-y: auto;
75
+ }
76
+
77
+ .expandedContainer {
78
+ display: flex;
79
+ flex-wrap: wrap;
80
+ gap: var(--space-sm);
81
+ overflow-y: auto;
82
+ margin-top: var(--space-sm);
83
+ padding: var(--space-sm);
84
+ border: 1px solid var(--surface-border);
85
+ border-radius: var(--radius-field);
86
+ background: var(--section-bg);
87
+ }
88
+
89
+ .imageValue {
90
+ display: inline-flex;
91
+ align-items: center;
92
+ gap: var(--space-sm);
93
+ }
94
+
95
+ .imageLabel {
96
+ color: var(--instance-view-gray-600, var(--color-gray-600));
97
+ font-size: var(--typography-small-size);
98
+ word-break: break-all;
99
+ }
100
+
101
+ [data-theme='dark'] .imageLabel {
102
+ color: var(--instance-view-gray-400, var(--color-gray-400));
103
+ }
104
+
105
+ [data-theme='dark'] .label label {
106
+ color: var(--instance-view-gray-400, var(--color-gray-400));
107
+ }
108
+
109
+ .rows {
110
+ padding: var(--space-sm) var(--space-md);
111
+ }
112
+
113
+ .form {
114
+ padding: var(--space-md) 0;
115
+ }
116
+
117
+ .label {
118
+ width: 35%;
119
+ min-width: 100px;
120
+ padding-right: var(--space-sm);
121
+ }
122
+
123
+ .value {
124
+ width: 65%;
125
+ }
126
+
127
+ .rows {
128
+ padding: var(--space-xs) var(--space-sm);
129
+ }
130
+
131
+ .form {
132
+ flex-direction: column;
133
+ align-items: flex-start;
134
+ gap: var(--space-2xs);
135
+ padding: var(--space-sm) 0;
136
+ }
137
+
138
+ .label {
139
+ width: 100%;
140
+ min-width: unset;
141
+ padding-right: 0;
142
+ margin-bottom: 0;
143
+ }
144
+
145
+ .label label {
146
+ font-size: var(--typography-small-size);
147
+ }
148
+
149
+ .value {
150
+ width: 100%;
151
+ max-height: none;
152
+ }
153
+
154
+ .value p {
155
+ font-size: var(--typography-small-size);
156
+ }
157
+
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ export interface NodeBadgeProps {
3
+ /** What identifies the node — a label where it has one, otherwise its IRI. */
4
+ text: string;
5
+ onClick?: () => void;
6
+ /** Whether the badge acts on a click. A read-only host may not navigate. */
7
+ clickable?: boolean;
8
+ title?: string;
9
+ className?: string;
10
+ }
11
+ /**
12
+ * A chip standing for one node.
13
+ *
14
+ * The only badge this package needs, and it is a thin composition over the presentational
15
+ * primitive. It exists as its own component rather than as a bare `<Badge>` for one reason:
16
+ * "a related instance" is a shape-domain concept, and a table cell, a form field and a
17
+ * read-only view must render it identically. A caller reaching for the primitive directly
18
+ * would have to remember which variant and colour meant "node", and eventually two of them
19
+ * would disagree.
20
+ *
21
+ * `clickable` is separate from `onClick` deliberately. A host that cannot navigate still
22
+ * passes a handler in some code paths, and a chip that looks interactive and does nothing is
23
+ * worse than one that looks inert.
24
+ */
25
+ export declare function NodeBadge({ text, onClick, clickable, title, className, }: NodeBadgeProps): React.JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Badge } from '@_linked/primitives/components/Badge';
3
+ /**
4
+ * A chip standing for one node.
5
+ *
6
+ * The only badge this package needs, and it is a thin composition over the presentational
7
+ * primitive. It exists as its own component rather than as a bare `<Badge>` for one reason:
8
+ * "a related instance" is a shape-domain concept, and a table cell, a form field and a
9
+ * read-only view must render it identically. A caller reaching for the primitive directly
10
+ * would have to remember which variant and colour meant "node", and eventually two of them
11
+ * would disagree.
12
+ *
13
+ * `clickable` is separate from `onClick` deliberately. A host that cannot navigate still
14
+ * passes a handler in some code paths, and a chip that looks interactive and does nothing is
15
+ * worse than one that looks inert.
16
+ */
17
+ export function NodeBadge({ text, onClick, clickable = false, title, className, }) {
18
+ const interactive = clickable && !!onClick;
19
+ if (!interactive) {
20
+ return (_jsx(Badge, { variant: "soft", color: "neutral", title: title, className: className, children: text }));
21
+ }
22
+ return (_jsx(Badge, { variant: "soft", color: "neutral", title: title, className: className, asChild: true, children: _jsx("button", { type: "button", onClick: (event) => {
23
+ // A node chip frequently sits inside a clickable row. Without this, choosing the
24
+ // chip also triggers the row.
25
+ event.stopPropagation();
26
+ onClick === null || onClick === void 0 ? void 0 : onClick();
27
+ }, children: text }) }));
28
+ }
29
+ //# sourceMappingURL=NodeBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeBadge.js","sourceRoot":"","sources":["../../../src/components/NodeBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,KAAK,EAAC,MAAM,sCAAsC,CAAC;AAY3D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,OAAO,EACP,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,SAAS,GACM;IACf,MAAM,WAAW,GAAG,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC;IAE3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,YACrE,IAAI,GACC,CACT,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,kBAC/E,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,iFAAiF;gBACjF,8BAA8B;gBAC9B,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,OAAO,aAAP,OAAO,uBAAP,OAAO,EAAI,CAAC;YACd,CAAC,YAEA,IAAI,GACE,GACH,CACT,CAAC;AACJ,CAAC"}