@_linked/shape-ui 2.0.0 → 2.2.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 (210) 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 +37 -0
  36. package/lib/esm/components/InstanceOverview.js +233 -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 +50 -0
  51. package/lib/esm/components/ReactTable.js +370 -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 +64 -10
  65. package/lib/esm/index.js +63 -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 +374 -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 +991 -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 +99 -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/lib/esm/package.d.ts +0 -3
  207. package/lib/esm/package.js +0 -4
  208. package/lib/esm/package.js.map +0 -1
  209. package/tsconfig-cjs.json +0 -8
  210. package/tsconfig-esm.json +0 -9
@@ -0,0 +1,193 @@
1
+ /* ============================================================================
2
+ BatchEditDrawer.module.css
3
+
4
+ Drawer for batch-editing multiple selected instances.
5
+ Uses same drawer pattern as filter drawer in ReactTable.
6
+ ============================================================================ */
7
+
8
+ .drawer {
9
+ position: fixed !important;
10
+ top: 0 !important;
11
+ right: 0 !important;
12
+ bottom: 0 !important;
13
+ left: auto !important;
14
+ height: 100vh !important;
15
+ max-height: 100vh !important;
16
+ width: 380px !important;
17
+ min-width: 380px !important;
18
+ background-color: var(--surface-bg) !important;
19
+ border-left: 1px solid var(--surface-border) !important;
20
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.15) !important;
21
+ border-radius: var(--radius-surface) 0 0 var(--radius-surface) !important;
22
+ }
23
+
24
+ .drawerContent {
25
+ display: flex;
26
+ flex-direction: column;
27
+ height: 100%;
28
+ }
29
+
30
+ .header {
31
+ padding: var(--space-lg) !important;
32
+ border-bottom: 1px solid var(--surface-border);
33
+ text-align: left !important;
34
+ }
35
+
36
+ .header h2,
37
+ .header [class*='Title'] {
38
+ color: var(--heading-color);
39
+ margin-bottom: var(--space-xs);
40
+ }
41
+
42
+ .header p,
43
+ .header [class*='Description'] {
44
+ color: var(--text-auxiliary);
45
+ font-size: var(--typography-small-size);
46
+ }
47
+
48
+ /* === Body === */
49
+ .body {
50
+ flex: 1;
51
+ padding: var(--space-lg);
52
+ overflow-y: auto;
53
+ }
54
+
55
+ /* === Field List (edit step) === */
56
+ .fieldList {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: var(--space-md);
60
+ }
61
+
62
+ .fieldRow {
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: var(--space-xs);
66
+ padding: var(--space-sm) 0;
67
+ border-bottom: 1px solid var(--table-row-border);
68
+ }
69
+
70
+ .fieldRow:last-child {
71
+ border-bottom: none;
72
+ }
73
+
74
+ .fieldToggle {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: var(--space-sm);
78
+ }
79
+
80
+ .fieldLabel {
81
+ font-size: var(--typography-font-size);
82
+ font-weight: 500;
83
+ color: var(--text-primary);
84
+ cursor: pointer;
85
+ user-select: none;
86
+ }
87
+
88
+ .fieldInput {
89
+ padding-left: calc(18px + var(--space-sm)); /* align with label after checkbox */
90
+ }
91
+
92
+ .fieldInputDisabled {
93
+ padding-left: calc(18px + var(--space-sm));
94
+ opacity: 0.4;
95
+ pointer-events: none;
96
+ }
97
+
98
+ .input {
99
+ width: 100%;
100
+ box-shadow: none;
101
+ border: 1px solid var(--field-border);
102
+ border-radius: var(--radius-field);
103
+ padding: var(--space-sm) var(--field-padding-x);
104
+ background-color: var(--field-bg);
105
+ color: var(--field-text);
106
+ font-size: var(--typography-small-size);
107
+ transition: all var(--transition-fast);
108
+ }
109
+
110
+ .input:focus {
111
+ outline: none;
112
+ border-color: var(--field-border-focus);
113
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--batch-edit-drawer-tertiary-500, var(--color-tertiary-500)) 15%, transparent);
114
+ }
115
+
116
+ .input:disabled {
117
+ background-color: var(--field-bg);
118
+ cursor: not-allowed;
119
+ }
120
+
121
+ .input::placeholder {
122
+ color: var(--field-text-placeholder);
123
+ }
124
+
125
+ .noFields {
126
+ color: var(--text-auxiliary);
127
+ font-size: var(--typography-small-size);
128
+ text-align: center;
129
+ padding: var(--space-xl) 0;
130
+ }
131
+
132
+ /* === Review Step === */
133
+ .reviewList {
134
+ display: flex;
135
+ flex-direction: column;
136
+ gap: var(--space-sm);
137
+ }
138
+
139
+ .reviewIntro {
140
+ color: var(--text-auxiliary);
141
+ font-size: var(--typography-small-size);
142
+ margin-bottom: var(--space-md);
143
+ }
144
+
145
+ .reviewItem {
146
+ display: flex;
147
+ align-items: center;
148
+ gap: var(--space-sm);
149
+ padding: var(--space-sm) var(--space-md);
150
+ background-color: var(--table-header-bg);
151
+ border-radius: var(--radius-field);
152
+ font-size: var(--typography-small-size);
153
+ }
154
+
155
+ .reviewField {
156
+ font-weight: 600;
157
+ color: var(--text-primary);
158
+ min-width: 0;
159
+ }
160
+
161
+ .reviewValue {
162
+ color: var(--batch-edit-drawer-tertiary-500, var(--color-tertiary-500));
163
+ font-weight: 500;
164
+ word-break: break-word;
165
+ }
166
+
167
+ /* === Footer === */
168
+ .footer {
169
+ padding: var(--space-lg);
170
+ border-top: 1px solid var(--surface-border);
171
+ display: flex;
172
+ gap: var(--space-sm);
173
+ justify-content: flex-end;
174
+ }
175
+
176
+ /* === Dark Mode === */
177
+ [data-theme='dark'] .drawer {
178
+ background-color: var(--surface-bg) !important;
179
+ border-left-color: var(--surface-border) !important;
180
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.4) !important;
181
+ }
182
+
183
+ [data-theme='dark'] .header {
184
+ border-bottom-color: var(--surface-border);
185
+ }
186
+
187
+ [data-theme='dark'] .footer {
188
+ border-top-color: var(--surface-border);
189
+ }
190
+
191
+ [data-theme='dark'] .reviewItem {
192
+ background-color: var(--table-header-bg);
193
+ }
@@ -0,0 +1,26 @@
1
+ import type { PropertyShapeWire, NodeShapeWire } from '@_linked/core/shapes/nodeShapeWire';
2
+ interface CustomMultiSelectProps {
3
+ values?: any;
4
+ property?: PropertyShapeWire;
5
+ /**
6
+ * The shape whose instance is being edited — the OWNER of `property`, not the shape being
7
+ * picked from. Needed for the pick-mode round-trip, which has to know where to return to.
8
+ *
9
+ * Supply these instead of letting the component read the route: it used to derive both
10
+ * from `useParams().shape_uri` plus CN's settings context, which assumed CN's URL layout
11
+ * for a value every caller already holds.
12
+ */
13
+ sourceShape?: NodeShapeWire;
14
+ sourceShapeUri?: string;
15
+ onShowAsTable?: () => void;
16
+ onChange?: (values: {
17
+ id: string;
18
+ label: string;
19
+ image?: string;
20
+ }[]) => void;
21
+ onBeforeNavigate?: () => Promise<string | void> | string | void;
22
+ narrowedIds?: string[] | null;
23
+ isNarrowing?: boolean;
24
+ }
25
+ declare const CustomMultiSelect: ({ values, property, sourceShape, sourceShapeUri, onShowAsTable, onChange, onBeforeNavigate, narrowedIds, isNarrowing, }: CustomMultiSelectProps) => import("react").JSX.Element;
26
+ export default CustomMultiSelect;
@@ -0,0 +1,344 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '@_linked/primitives/components/Button';
3
+ import { Command } from '@_linked/primitives/components/Command';
4
+ import { Dialog } from '@_linked/primitives/components/Dialog';
5
+ import { Popover } from '@_linked/primitives/components/Popover';
6
+ import { cl } from '@_linked/react/utils/ClassNames';
7
+ import { getNodeDisplay } from '../shape/nodeDisplay.js';
8
+ import { useCallback, useEffect, useRef, useState } from 'react';
9
+ import { useDataManagerHost } from '../hostContext.js';
10
+ import { formatShapeLabel } from '../shape/naming.js';
11
+ import { Icons } from '@_linked/icons';
12
+ import { InlineImageThumb } from '@_linked/primitives/components/ImageThumb';
13
+ import { Spinner } from '@_linked/primitives/components/Spinner';
14
+ import style from './CustomMultiSelect.module.css';
15
+ const CustomMultiSelect = ({ values, property, sourceShape, sourceShapeUri, onShowAsTable, onChange, onBeforeNavigate, narrowedIds, isNarrowing, }) => {
16
+ var _a, _b, _c, _d;
17
+ const [comboboxValues, setComboboxValues] = useState([]);
18
+ const [isComboboxExpanded, setIsComboboxExpanded] = useState(false);
19
+ const [isComboboxOpen, setIsComboboxOpen] = useState(false);
20
+ const [comboboxInputValue, setComboboxInputValue] = useState('');
21
+ const [createNewInstanceFor, setCreateNewInstanceFor] = useState(null);
22
+ const [maxVisibleOptions, setMaxVisibleOptions] = useState(5);
23
+ const [searchResults, setSearchResults] = useState([]);
24
+ const [isSearching, setIsSearching] = useState(false);
25
+ const [initialOptions, setInitialOptions] = useState([]);
26
+ const [isLoadingInitial, setIsLoadingInitial] = useState(false);
27
+ const [isLoadingMore, setIsLoadingMore] = useState(false);
28
+ const [hasMore, setHasMore] = useState(false);
29
+ const [browseOffset, setBrowseOffset] = useState(0);
30
+ const [searchOffset, setSearchOffset] = useState(0);
31
+ const [triggerWidth, setTriggerWidth] = useState(undefined);
32
+ const triggerRef = useRef(null);
33
+ const sentinelRef = useRef(null);
34
+ const debounceRef = useRef(null);
35
+ // The shape being edited arrives as a prop. It used to be read from the route
36
+ // (`useParams().shape_uri` + `getShapeFromParams(..., projectConfig)`), which assumed
37
+ // CN's URL layout AND CN's settings context — two couplings for one value every caller
38
+ // already has in hand.
39
+ const shape_uri = sourceShapeUri !== null && sourceShapeUri !== void 0 ? sourceShapeUri : sourceShape === null || sourceShape === void 0 ? void 0 : sourceShape.id;
40
+ // The host supplies searching, inline creation and navigation. The picker used to reach
41
+ // for `Project.searchInstances` + `useSettings` + the router directly, and to import
42
+ // `AddInstanceForms` — a molecule importing an organism, which is both a cycle and the
43
+ // one thing that made this component unextractable.
44
+ const host = useDataManagerHost();
45
+ const nodeShape = sourceShape;
46
+ const [isDialogOpen, setIsDialogOpen] = useState(false);
47
+ const valueArray = (Array.isArray(values) ? values : [values]).filter(Boolean);
48
+ const isInitialMount = useRef(true);
49
+ const renderText = (shape) => {
50
+ return getNodeDisplay(shape);
51
+ };
52
+ /** Extract an image URL from a shape value (for initial values from props) */
53
+ const getImageFromValue = (val) => {
54
+ if (!val)
55
+ return undefined;
56
+ // Direct contentUrl (ImageObject)
57
+ if (val.contentUrl)
58
+ return String(val.contentUrl);
59
+ // schema:image → contentUrl
60
+ const img = val.image;
61
+ if (img) {
62
+ if (typeof img === 'string')
63
+ return img;
64
+ if (Array.isArray(img)) {
65
+ const first = img[0];
66
+ return typeof first === 'string' ? first : (first === null || first === void 0 ? void 0 : first.contentUrl) ? String(first.contentUrl) : undefined;
67
+ }
68
+ if (img.contentUrl)
69
+ return String(img.contentUrl);
70
+ }
71
+ return undefined;
72
+ };
73
+ // Init selected values from props
74
+ useEffect(() => {
75
+ const alreadySelectedValues = valueArray.length > 0
76
+ ? valueArray.map((el) => ({
77
+ id: el.id,
78
+ label: renderText(el),
79
+ image: getImageFromValue(el),
80
+ }))
81
+ : [];
82
+ setComboboxValues(alreadySelectedValues);
83
+ }, []);
84
+ // The return leg of the pick round trip.
85
+ //
86
+ // This field sent the viewer away to choose and was unmounted while they did, so the
87
+ // answer cannot arrive through a callback — it has to be collected on the way back in.
88
+ // Where it was kept is the host's business; this used to read CN's sessionStorage
89
+ // directly, which is why the component only worked inside Create Now.
90
+ useEffect(() => {
91
+ var _a;
92
+ if (!(property === null || property === void 0 ? void 0 : property.label))
93
+ return;
94
+ const pickedItems = (_a = host.picking) === null || _a === void 0 ? void 0 : _a.takeResult({
95
+ propertyLabel: property.label,
96
+ sourceShapeIri: shape_uri,
97
+ });
98
+ if (!pickedItems || pickedItems.length === 0)
99
+ return;
100
+ setComboboxValues((prev) => {
101
+ let next = [...prev];
102
+ for (const picked of pickedItems) {
103
+ if (next.some((v) => v.id === picked.id))
104
+ continue;
105
+ if ((property === null || property === void 0 ? void 0 : property.maxCount) === 1)
106
+ return [picked];
107
+ if ((property === null || property === void 0 ? void 0 : property.maxCount) && next.length >= property.maxCount)
108
+ break;
109
+ next.push(picked);
110
+ }
111
+ return next;
112
+ });
113
+ }, []);
114
+ // Propagate comboboxValues changes to parent via onChange
115
+ useEffect(() => {
116
+ if (isInitialMount.current) {
117
+ isInitialMount.current = false;
118
+ return;
119
+ }
120
+ onChange === null || onChange === void 0 ? void 0 : onChange(comboboxValues);
121
+ }, [comboboxValues]);
122
+ // Debounced backend search — resets offset on new search text
123
+ useEffect(() => {
124
+ var _a;
125
+ if (debounceRef.current)
126
+ clearTimeout(debounceRef.current);
127
+ const valueShapeId = (_a = property === null || property === void 0 ? void 0 : property.valueShape) === null || _a === void 0 ? void 0 : _a.id;
128
+ if (!comboboxInputValue || !host.searchInstances || !valueShapeId) {
129
+ setSearchResults([]);
130
+ setSearchOffset(0);
131
+ setHasMore(false);
132
+ setIsSearching(false);
133
+ return;
134
+ }
135
+ setIsSearching(true);
136
+ setSearchOffset(0);
137
+ debounceRef.current = setTimeout(async () => {
138
+ var _a;
139
+ try {
140
+ const response = await host.searchInstances(valueShapeId, {
141
+ query: comboboxInputValue,
142
+ limit: 20,
143
+ offset: 0,
144
+ narrowedIds: narrowedIds || undefined,
145
+ });
146
+ setSearchResults((response === null || response === void 0 ? void 0 : response.results) || []);
147
+ setHasMore((_a = response === null || response === void 0 ? void 0 : response.hasMore) !== null && _a !== void 0 ? _a : false);
148
+ }
149
+ catch (_b) {
150
+ setSearchResults([]);
151
+ setHasMore(false);
152
+ }
153
+ finally {
154
+ setIsSearching(false);
155
+ }
156
+ }, 300);
157
+ return () => {
158
+ if (debounceRef.current)
159
+ clearTimeout(debounceRef.current);
160
+ };
161
+ }, [comboboxInputValue, host, (_a = property === null || property === void 0 ? void 0 : property.valueShape) === null || _a === void 0 ? void 0 : _a.id, narrowedIds]);
162
+ // Load initial options when popover opens or narrowing changes (browse mode)
163
+ useEffect(() => {
164
+ var _a;
165
+ if (!isComboboxOpen)
166
+ return;
167
+ // Capture trigger width for popover alignment
168
+ if (triggerRef.current) {
169
+ setTriggerWidth(triggerRef.current.getBoundingClientRect().width);
170
+ }
171
+ const valueShapeId = (_a = property === null || property === void 0 ? void 0 : property.valueShape) === null || _a === void 0 ? void 0 : _a.id;
172
+ if (!host.searchInstances || !valueShapeId)
173
+ return;
174
+ setIsLoadingInitial(true);
175
+ setBrowseOffset(0);
176
+ host
177
+ .searchInstances(valueShapeId, {
178
+ query: '',
179
+ limit: 20,
180
+ offset: 0,
181
+ narrowedIds: narrowedIds || undefined,
182
+ })
183
+ .then((response) => {
184
+ var _a;
185
+ setInitialOptions((response === null || response === void 0 ? void 0 : response.results) || []);
186
+ setHasMore((_a = response === null || response === void 0 ? void 0 : response.hasMore) !== null && _a !== void 0 ? _a : false);
187
+ })
188
+ .catch(() => {
189
+ setInitialOptions([]);
190
+ setHasMore(false);
191
+ })
192
+ .finally(() => setIsLoadingInitial(false));
193
+ }, [isComboboxOpen, narrowedIds]);
194
+ // Load more results (infinite scroll) for both browse and search modes
195
+ const loadMore = useCallback(async () => {
196
+ var _a, _b;
197
+ const valueShapeId = (_a = property === null || property === void 0 ? void 0 : property.valueShape) === null || _a === void 0 ? void 0 : _a.id;
198
+ if (!host.searchInstances || !valueShapeId || isLoadingMore || !hasMore)
199
+ return;
200
+ setIsLoadingMore(true);
201
+ const isSearchMode = !!comboboxInputValue;
202
+ const currentOffset = isSearchMode ? searchOffset : browseOffset;
203
+ const nextOffset = currentOffset + 20;
204
+ try {
205
+ const response = await host.searchInstances(valueShapeId, {
206
+ query: isSearchMode ? comboboxInputValue : '',
207
+ limit: 20,
208
+ offset: nextOffset,
209
+ narrowedIds: narrowedIds || undefined,
210
+ });
211
+ const newResults = (response === null || response === void 0 ? void 0 : response.results) || [];
212
+ setHasMore((_b = response === null || response === void 0 ? void 0 : response.hasMore) !== null && _b !== void 0 ? _b : false);
213
+ if (isSearchMode) {
214
+ setSearchResults((prev) => [...prev, ...newResults]);
215
+ setSearchOffset(nextOffset);
216
+ }
217
+ else {
218
+ setInitialOptions((prev) => [...prev, ...newResults]);
219
+ setBrowseOffset(nextOffset);
220
+ }
221
+ }
222
+ catch (_c) {
223
+ setHasMore(false);
224
+ }
225
+ finally {
226
+ setIsLoadingMore(false);
227
+ }
228
+ }, [host, (_b = property === null || property === void 0 ? void 0 : property.valueShape) === null || _b === void 0 ? void 0 : _b.id, comboboxInputValue, isLoadingMore, hasMore, searchOffset, browseOffset]);
229
+ // IntersectionObserver for infinite scroll sentinel
230
+ useEffect(() => {
231
+ const sentinel = sentinelRef.current;
232
+ if (!sentinel)
233
+ return;
234
+ const observer = new IntersectionObserver((entries) => {
235
+ var _a;
236
+ if (((_a = entries[0]) === null || _a === void 0 ? void 0 : _a.isIntersecting) && hasMore && !isLoadingMore) {
237
+ loadMore();
238
+ }
239
+ }, { threshold: 0.1 });
240
+ observer.observe(sentinel);
241
+ return () => observer.disconnect();
242
+ }, [hasMore, isLoadingMore, loadMore]);
243
+ // Responsive max visible chips
244
+ useEffect(() => {
245
+ const update = () => {
246
+ if (window.innerWidth < 768)
247
+ setMaxVisibleOptions(3);
248
+ else if (window.innerWidth < 1024)
249
+ setMaxVisibleOptions(4);
250
+ else
251
+ setMaxVisibleOptions(5);
252
+ };
253
+ update();
254
+ window.addEventListener('resize', update);
255
+ return () => window.removeEventListener('resize', update);
256
+ }, []);
257
+ const multiselect = property.maxCount > 1;
258
+ const onUpdateCombobox = (item) => {
259
+ if (multiselect) {
260
+ if (comboboxValues === null || comboboxValues === void 0 ? void 0 : comboboxValues.some((v) => v.id === item.id)) {
261
+ setComboboxValues((prev) => prev.filter((e) => e.id !== item.id));
262
+ }
263
+ else {
264
+ // Enforce maxCount limit
265
+ if ((property === null || property === void 0 ? void 0 : property.maxCount) && comboboxValues.length >= property.maxCount)
266
+ return;
267
+ setComboboxValues((prev) => [...prev, item]);
268
+ }
269
+ }
270
+ else {
271
+ // Single select: toggle — if already selected, deselect; otherwise select
272
+ if (comboboxValues === null || comboboxValues === void 0 ? void 0 : comboboxValues.some((v) => v.id === item.id)) {
273
+ setComboboxValues([]);
274
+ }
275
+ else {
276
+ setComboboxValues([item]);
277
+ }
278
+ }
279
+ };
280
+ /** Dedicated removal handler for the X button on chips — always removes regardless of multiselect */
281
+ const onRemoveValue = (e, item) => {
282
+ e.stopPropagation();
283
+ e.preventDefault();
284
+ setComboboxValues((prev) => prev.filter((v) => v.id !== item.id));
285
+ };
286
+ const onClickTable = async () => {
287
+ var _a, _b;
288
+ if (onShowAsTable) {
289
+ onShowAsTable();
290
+ }
291
+ else if ((_a = property === null || property === void 0 ? void 0 : property.valueShape) === null || _a === void 0 ? void 0 : _a.id) {
292
+ // Flush draft to server before navigating away — returns the draftId
293
+ const flushedDraftId = await (onBeforeNavigate === null || onBeforeNavigate === void 0 ? void 0 : onBeforeNavigate());
294
+ // How "browse all of these" is presented is the host's decision — Create Now
295
+ // navigates to the overview in pick mode; another host might open a sheet. The
296
+ // flushed draft id rides along as the resume token so the half-filled form survives
297
+ // whatever round trip the host chooses.
298
+ (_b = host.picking) === null || _b === void 0 ? void 0 : _b.open({
299
+ shapeIri: property.valueShape.id,
300
+ propertyLabel: property.label,
301
+ sourceShapeIri: shape_uri,
302
+ maxCount: property.maxCount,
303
+ minCount: property.minCount,
304
+ alreadySelected: comboboxValues,
305
+ resumeToken: flushedDraftId || undefined,
306
+ });
307
+ }
308
+ };
309
+ const dropdownOptions = comboboxInputValue
310
+ ? searchResults
311
+ : initialOptions.length > 0
312
+ ? initialOptions
313
+ : valueArray.map((el) => ({ id: el.id, label: renderText(el), image: getImageFromValue(el) }));
314
+ const openCreateNew = () => {
315
+ setCreateNewInstanceFor(nodeShape);
316
+ setIsComboboxOpen(false); // close popover first — avoids z-index overlap
317
+ setIsDialogOpen(true);
318
+ };
319
+ return (_jsxs("div", { className: style.Root, children: [_jsxs(Popover.Root, { open: isComboboxOpen, onOpenChange: setIsComboboxOpen, children: [_jsx(Popover.Trigger, { asChild: true, children: _jsxs("div", { ref: triggerRef, className: style.selectedOptionsAndChevronIconContainer, children: [_jsx("div", { className: cl(style.selectedOptionsContainer, isComboboxExpanded ? style.expanded : ''), children: _jsxs("div", { className: cl(style.noBorderContainer, isComboboxExpanded ? style.expanded : ''), children: [comboboxValues.length > 0 ? (comboboxValues.slice(0, maxVisibleOptions).map((val, i) => (_jsxs(Button, { size: "small", className: style.optionButton, children: [val.image && _jsx(InlineImageThumb, { src: val.image }), val.label, _jsx(Icons.Cross2, { onPointerDown: (e) => { e.stopPropagation(); e.preventDefault(); }, onClick: (e) => onRemoveValue(e, val) })] }, i)))) : (_jsx("p", { className: style.selectorButton, children: "Select value" })), comboboxValues.length > maxVisibleOptions &&
320
+ (isComboboxExpanded ? (comboboxValues
321
+ .slice(maxVisibleOptions)
322
+ .map((val, i) => (_jsxs(Button, { size: "small", className: style.optionButton, children: [val.image && _jsx(InlineImageThumb, { src: val.image }), val.label, _jsx(Icons.Cross2, { onPointerDown: (e) => { e.stopPropagation(); e.preventDefault(); }, onClick: (e) => onRemoveValue(e, val) })] }, i)))) : (_jsxs(Button, { size: "small", className: style.optionButton, onClick: () => setIsComboboxExpanded(true), children: ["... ", comboboxValues.slice(maxVisibleOptions).length, " more"] })))] }) }), _jsx(Icons.ChevronDown, { className: cl(style.chevronDownIcon, isComboboxOpen ? style.open : '') }), isComboboxExpanded && (_jsx("p", { className: style.viewLessText, onClick: () => setIsComboboxExpanded(false), children: "View Less" }))] }) }), _jsxs(Popover.Content, { className: style.options, style: triggerWidth ? { width: triggerWidth } : undefined, align: "start", children: [_jsxs(Command.Root, { shouldFilter: false, children: [_jsxs("div", { className: style.searchWrapper, children: [_jsx(Command.Input, { value: comboboxInputValue, onValueChange: setComboboxInputValue, placeholder: "Search..." }), comboboxInputValue && (_jsx(Icons.Cross2, { className: style.resetSearchInputIcon, onClick: () => setComboboxInputValue('') }))] }), _jsxs(Command.List, { className: style.commandRoot, children: [_jsx(Command.Empty, { className: style.emptyResult, children: isLoadingInitial || isSearching
323
+ ? _jsx(Spinner, { size: "small" })
324
+ : comboboxInputValue
325
+ ? `No results for "${comboboxInputValue}"`
326
+ : 'No options available' }), _jsx(Command.Group, { className: style.commandGroup, children: dropdownOptions.map((option) => {
327
+ const selected = comboboxValues.some((v) => v.id === option.id);
328
+ return (_jsxs(Command.Item, { value: option.id, onSelect: (currentValue) => {
329
+ const item = dropdownOptions.find(o => o.id === currentValue);
330
+ if (item)
331
+ onUpdateCombobox(item);
332
+ }, className: cl(style.option, selected ? style.optionSelected : ''), children: [option.image && _jsx(InlineImageThumb, { src: option.image }), _jsx("span", { className: style.optionLabel, children: option.label }), selected && _jsx(Icons.Check, { width: "16", height: "16", className: style.optionCheck })] }, option.id));
333
+ }) }), hasMore && (_jsx("div", { ref: sentinelRef, className: style.loadMoreSentinel, children: _jsx(Spinner, { active: isLoadingMore, size: "small" }) }))] })] }), _jsx("div", { className: style.createNewContainer, children: _jsxs("button", { type: "button", className: style.modalButton, onClick: openCreateNew, children: [_jsx(Icons.Plus, { width: "14", height: "14" }), _jsx("span", { children: "Create New" })] }) })] })] }), _jsx(Dialog.Root, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: _jsxs(Dialog.Content, { className: style.dialogRoot, children: [_jsxs(Dialog.Header, { className: style.dialogHeader, children: [_jsxs(Dialog.Title, { children: ["Create New ", (nodeShape === null || nodeShape === void 0 ? void 0 : nodeShape.label) ? formatShapeLabel(nodeShape.label) : ''] }), _jsxs(Dialog.Description, { children: ["Fill the form to create a new ", (nodeShape === null || nodeShape === void 0 ? void 0 : nodeShape.label) ? formatShapeLabel(nodeShape.label) : ''] })] }), _jsx("div", { className: style.dialogContent, children: (_c = host.inlineCreate) === null || _c === void 0 ? void 0 : _c.call(host, {
334
+ shapeIri: (_d = (createNewInstanceFor || nodeShape)) === null || _d === void 0 ? void 0 : _d.id,
335
+ onCreated: (created) => {
336
+ setIsDialogOpen(false);
337
+ if (created === null || created === void 0 ? void 0 : created.id)
338
+ onUpdateCombobox(created);
339
+ },
340
+ onCancel: () => setIsDialogOpen(false),
341
+ }) })] }) }), _jsx("div", { onClick: onClickTable, className: style.tableIcon, children: _jsx(Icons.Table, { width: "25", height: "25" }) })] }));
342
+ };
343
+ export default CustomMultiSelect;
344
+ //# sourceMappingURL=CustomMultiSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomMultiSelect.js","sourceRoot":"","sources":["../../../src/components/CustomMultiSelect.tsx"],"names":[],"mappings":"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"}