@finos/legend-application-studio 23.1.3 → 23.1.5

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 (36) hide show
  1. package/lib/components/editor/edit-panel/FunctionEditor.d.ts.map +1 -1
  2. package/lib/components/editor/edit-panel/FunctionEditor.js +6 -4
  3. package/lib/components/editor/edit-panel/FunctionEditor.js.map +1 -1
  4. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.d.ts.map +1 -1
  5. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.js +4 -4
  6. package/lib/components/editor/edit-panel/GenerationSpecificationEditor.js.map +1 -1
  7. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.d.ts.map +1 -1
  8. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js +34 -26
  9. package/lib/components/editor/edit-panel/uml-editor/ClassEditor.js.map +1 -1
  10. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.d.ts.map +1 -1
  11. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.js +5 -3
  12. package/lib/components/editor/edit-panel/uml-editor/EnumerationEditor.js.map +1 -1
  13. package/lib/components/editor/edit-panel/uml-editor/ProfileEditor.d.ts.map +1 -1
  14. package/lib/components/editor/edit-panel/uml-editor/ProfileEditor.js +10 -6
  15. package/lib/components/editor/edit-panel/uml-editor/ProfileEditor.js.map +1 -1
  16. package/lib/components/editor/edit-panel/uml-editor/StereotypeSelector.d.ts.map +1 -1
  17. package/lib/components/editor/edit-panel/uml-editor/StereotypeSelector.js +5 -3
  18. package/lib/components/editor/edit-panel/uml-editor/StereotypeSelector.js.map +1 -1
  19. package/lib/components/editor/edit-panel/uml-editor/TaggedValueEditor.d.ts.map +1 -1
  20. package/lib/components/editor/edit-panel/uml-editor/TaggedValueEditor.js +6 -4
  21. package/lib/components/editor/edit-panel/uml-editor/TaggedValueEditor.js.map +1 -1
  22. package/lib/index.css +2 -2
  23. package/lib/index.css.map +1 -1
  24. package/lib/package.json +3 -3
  25. package/lib/stores/project-view/ProjectViewerStore.d.ts.map +1 -1
  26. package/lib/stores/project-view/ProjectViewerStore.js +2 -2
  27. package/lib/stores/project-view/ProjectViewerStore.js.map +1 -1
  28. package/package.json +12 -12
  29. package/src/components/editor/edit-panel/FunctionEditor.tsx +132 -125
  30. package/src/components/editor/edit-panel/GenerationSpecificationEditor.tsx +43 -44
  31. package/src/components/editor/edit-panel/uml-editor/ClassEditor.tsx +156 -116
  32. package/src/components/editor/edit-panel/uml-editor/EnumerationEditor.tsx +46 -36
  33. package/src/components/editor/edit-panel/uml-editor/ProfileEditor.tsx +80 -62
  34. package/src/components/editor/edit-panel/uml-editor/StereotypeSelector.tsx +62 -54
  35. package/src/components/editor/edit-panel/uml-editor/TaggedValueEditor.tsx +98 -92
  36. package/src/stores/project-view/ProjectViewerStore.ts +1 -1
@@ -26,12 +26,12 @@ import {
26
26
  PlusIcon,
27
27
  TimesIcon,
28
28
  LockIcon,
29
- PanelEntryDragHandle,
30
- PanelEntryDropZonePlaceholder,
29
+ PanelDnDEntryDragHandle,
31
30
  DragPreviewLayer,
32
31
  useDragPreviewLayer,
33
32
  Panel,
34
33
  PanelContent,
34
+ PanelDnDEntry,
35
35
  } from '@finos/legend-art';
36
36
  import { LEGEND_STUDIO_TEST_ID } from '../../../../application/LegendStudioTesting.js';
37
37
  import { useEditorStore } from '../../EditorStoreProvider.js';
@@ -70,6 +70,8 @@ const TagBasicEditor = observer(
70
70
  isReadOnly: boolean;
71
71
  }) => {
72
72
  const ref = useRef<HTMLDivElement>(null);
73
+ const handleRef = useRef<HTMLDivElement>(null);
74
+
73
75
  const { tag, _profile, deleteValue, isReadOnly } = props;
74
76
  const changeValue: React.ChangeEventHandler<HTMLInputElement> = (event) => {
75
77
  tagStereotype_setValue(tag, event.target.value);
@@ -112,39 +114,46 @@ const TagBasicEditor = observer(
112
114
  }),
113
115
  [tag],
114
116
  );
115
- dragConnector(dropConnector(ref));
117
+ dragConnector(handleRef);
118
+ dropConnector(ref);
116
119
  useDragPreviewLayer(dragPreviewConnector);
117
120
 
118
121
  return (
119
- <div ref={ref} className="tag-basic-editor__container">
120
- <PanelEntryDropZonePlaceholder showPlaceholder={isBeingDragged}>
121
- <div className="tag-basic-editor">
122
- <PanelEntryDragHandle />
123
- <InputWithInlineValidation
124
- className="tag-basic-editor__value input-group__input"
125
- spellCheck={false}
122
+ <PanelDnDEntry
123
+ ref={ref}
124
+ className="tag-basic-editor__container"
125
+ placeholder={<div className="dnd__placeholder--light"></div>}
126
+ showPlaceholder={isBeingDragged}
127
+ >
128
+ <PanelDnDEntryDragHandle
129
+ dropTargetConnector={handleRef}
130
+ isBeingDragged={isBeingDragged}
131
+ />
132
+ <div className="tag-basic-editor">
133
+ <InputWithInlineValidation
134
+ className="tag-basic-editor__value input-group__input"
135
+ spellCheck={false}
136
+ disabled={isReadOnly}
137
+ value={tag.value}
138
+ onChange={changeValue}
139
+ placeholder="Tag value"
140
+ validationErrorMessage={
141
+ isTagDuplicated(tag) ? 'Duplicated tag' : undefined
142
+ }
143
+ />
144
+ {!isReadOnly && (
145
+ <button
146
+ className="uml-element-editor__remove-btn"
126
147
  disabled={isReadOnly}
127
- value={tag.value}
128
- onChange={changeValue}
129
- placeholder="Tag value"
130
- validationErrorMessage={
131
- isTagDuplicated(tag) ? 'Duplicated tag' : undefined
132
- }
133
- />
134
- {!isReadOnly && (
135
- <button
136
- className="uml-element-editor__remove-btn"
137
- disabled={isReadOnly}
138
- onClick={deleteValue}
139
- tabIndex={-1}
140
- title="Remove"
141
- >
142
- <TimesIcon />
143
- </button>
144
- )}
145
- </div>
146
- </PanelEntryDropZonePlaceholder>
147
- </div>
148
+ onClick={deleteValue}
149
+ tabIndex={-1}
150
+ title="Remove"
151
+ >
152
+ <TimesIcon />
153
+ </button>
154
+ )}
155
+ </div>
156
+ </PanelDnDEntry>
148
157
  );
149
158
  },
150
159
  );
@@ -163,6 +172,8 @@ const StereotypeBasicEditor = observer(
163
172
  isReadOnly: boolean;
164
173
  }) => {
165
174
  const ref = useRef<HTMLDivElement>(null);
175
+ const handleRef = useRef<HTMLDivElement>(null);
176
+
166
177
  const { stereotype, _profile, deleteStereotype, isReadOnly } = props;
167
178
  const changeValue: React.ChangeEventHandler<HTMLInputElement> = (event) => {
168
179
  tagStereotype_setValue(stereotype, event.target.value);
@@ -208,41 +219,48 @@ const StereotypeBasicEditor = observer(
208
219
  }),
209
220
  [stereotype],
210
221
  );
211
- dragConnector(dropConnector(ref));
222
+ dragConnector(handleRef);
223
+ dropConnector(ref);
212
224
  useDragPreviewLayer(dragPreviewConnector);
213
225
 
214
226
  return (
215
- <div ref={ref} className="stereotype-basic-editor__container">
216
- <PanelEntryDropZonePlaceholder showPlaceholder={isBeingDragged}>
217
- <div className="stereotype-basic-editor">
218
- <PanelEntryDragHandle />
219
- <InputWithInlineValidation
220
- className="stereotype-basic-editor__value input-group__input"
221
- spellCheck={false}
227
+ <PanelDnDEntry
228
+ ref={ref}
229
+ placeholder={<div className="dnd__placeholder--light"></div>}
230
+ className="stereotype-basic-editor__container"
231
+ showPlaceholder={isBeingDragged}
232
+ >
233
+ <PanelDnDEntryDragHandle
234
+ dropTargetConnector={handleRef}
235
+ isBeingDragged={isBeingDragged}
236
+ />
237
+ <div className="stereotype-basic-editor">
238
+ <InputWithInlineValidation
239
+ className="stereotype-basic-editor__value input-group__input"
240
+ spellCheck={false}
241
+ disabled={isReadOnly}
242
+ value={stereotype.value}
243
+ onChange={changeValue}
244
+ placeholder="Stereotype value"
245
+ validationErrorMessage={
246
+ isStereotypeDuplicated(stereotype)
247
+ ? 'Duplicated stereotype'
248
+ : undefined
249
+ }
250
+ />
251
+ {!isReadOnly && (
252
+ <button
253
+ className="uml-element-editor__remove-btn"
222
254
  disabled={isReadOnly}
223
- value={stereotype.value}
224
- onChange={changeValue}
225
- placeholder="Stereotype value"
226
- validationErrorMessage={
227
- isStereotypeDuplicated(stereotype)
228
- ? 'Duplicated stereotype'
229
- : undefined
230
- }
231
- />
232
- {!isReadOnly && (
233
- <button
234
- className="uml-element-editor__remove-btn"
235
- disabled={isReadOnly}
236
- onClick={deleteStereotype}
237
- tabIndex={-1}
238
- title="Remove"
239
- >
240
- <TimesIcon />
241
- </button>
242
- )}
243
- </div>
244
- </PanelEntryDropZonePlaceholder>
245
- </div>
255
+ onClick={deleteStereotype}
256
+ tabIndex={-1}
257
+ title="Remove"
258
+ >
259
+ <TimesIcon />
260
+ </button>
261
+ )}
262
+ </div>
263
+ </PanelDnDEntry>
246
264
  );
247
265
  },
248
266
  );
@@ -21,8 +21,8 @@ import {
21
21
  createFilter,
22
22
  TimesIcon,
23
23
  ArrowCircleRightIcon,
24
- PanelEntryDragHandle,
25
- PanelEntryDropZonePlaceholder,
24
+ PanelDnDEntryDragHandle,
25
+ PanelDnDEntry,
26
26
  DragPreviewLayer,
27
27
  useDragPreviewLayer,
28
28
  } from '@finos/legend-art';
@@ -74,6 +74,7 @@ export const StereotypeSelector = observer(
74
74
  darkTheme?: boolean;
75
75
  }) => {
76
76
  const ref = useRef<HTMLDivElement>(null);
77
+ const handleRef = useRef<HTMLDivElement>(null);
77
78
  const {
78
79
  annotatedElement,
79
80
  stereotype,
@@ -166,65 +167,72 @@ export const StereotypeSelector = observer(
166
167
  }),
167
168
  [stereotype],
168
169
  );
169
- dragConnector(dropConnector(ref));
170
+ dragConnector(handleRef);
171
+ dropConnector(ref);
170
172
  useDragPreviewLayer(dragPreviewConnector);
171
173
 
172
174
  return (
173
- <div ref={ref} className="stereotype-selector__container">
174
- <PanelEntryDropZonePlaceholder showPlaceholder={isBeingDragged}>
175
- <div className="stereotype-selector">
176
- <PanelEntryDragHandle />
177
- <div
178
- className={`stereotype-selector__profile ${
179
- darkTheme ? 'stereotype-selector-dark-theme' : ''
180
- } stereotype-selector__profile`}
181
- >
182
- <CustomSelectorInput
183
- className="stereotype-selector__profile__selector"
184
- disabled={isReadOnly}
185
- options={profileOptions}
186
- onChange={changeProfile}
187
- value={selectedProfile}
188
- placeholder="Choose a profile"
189
- filterOption={filterOption}
190
- darkMode={Boolean(darkTheme)}
191
- />
192
- <button
193
- className={`stereotype-selector__profile__visit-btn ${
194
- darkTheme ? 'stereotype-selector-dark-theme' : ''
195
- }`}
196
- disabled={isStubbed_PackageableElement(stereotype.value._OWNER)}
197
- onClick={visitProfile}
198
- tabIndex={-1}
199
- title="Visit profile"
200
- >
201
- <ArrowCircleRightIcon />
202
- </button>
203
- </div>
175
+ <PanelDnDEntry
176
+ ref={ref}
177
+ className="stereotype-selector__container"
178
+ placeholder={<div className="dnd__placeholder--light"></div>}
179
+ showPlaceholder={isBeingDragged}
180
+ >
181
+ <PanelDnDEntryDragHandle
182
+ dropTargetConnector={handleRef}
183
+ isBeingDragged={isBeingDragged}
184
+ />
185
+ <div className="stereotype-selector">
186
+ <div
187
+ className={`stereotype-selector__profile ${
188
+ darkTheme ? 'stereotype-selector-dark-theme' : ''
189
+ } stereotype-selector__profile`}
190
+ >
204
191
  <CustomSelectorInput
205
- className="stereotype-selector__stereotype"
192
+ className="stereotype-selector__profile__selector"
206
193
  disabled={isReadOnly}
207
- options={stereotypeOptions}
208
- onChange={updateStereotype}
209
- value={selectedStereotype}
210
- placeholder="Choose a stereotype"
211
- filterOption={stereotypeFilterOption}
212
- darkMode={darkTheme ?? false}
194
+ options={profileOptions}
195
+ onChange={changeProfile}
196
+ value={selectedProfile}
197
+ placeholder="Choose a profile"
198
+ filterOption={filterOption}
199
+ darkMode={Boolean(darkTheme)}
213
200
  />
214
- {!isReadOnly && (
215
- <button
216
- className="uml-element-editor__remove-btn"
217
- disabled={isReadOnly}
218
- onClick={deleteStereotype}
219
- tabIndex={-1}
220
- title="Remove"
221
- >
222
- <TimesIcon />
223
- </button>
224
- )}
201
+ <button
202
+ className={`stereotype-selector__profile__visit-btn ${
203
+ darkTheme ? 'stereotype-selector-dark-theme' : ''
204
+ }`}
205
+ disabled={isStubbed_PackageableElement(stereotype.value._OWNER)}
206
+ onClick={visitProfile}
207
+ tabIndex={-1}
208
+ title="Visit profile"
209
+ >
210
+ <ArrowCircleRightIcon />
211
+ </button>
225
212
  </div>
226
- </PanelEntryDropZonePlaceholder>
227
- </div>
213
+ <CustomSelectorInput
214
+ className="stereotype-selector__stereotype"
215
+ disabled={isReadOnly}
216
+ options={stereotypeOptions}
217
+ onChange={updateStereotype}
218
+ value={selectedStereotype}
219
+ placeholder="Choose a stereotype"
220
+ filterOption={stereotypeFilterOption}
221
+ darkMode={darkTheme ?? false}
222
+ />
223
+ {!isReadOnly && (
224
+ <button
225
+ className="uml-element-editor__remove-btn"
226
+ disabled={isReadOnly}
227
+ onClick={deleteStereotype}
228
+ tabIndex={-1}
229
+ title="Remove"
230
+ >
231
+ <TimesIcon />
232
+ </button>
233
+ )}
234
+ </div>
235
+ </PanelDnDEntry>
228
236
  );
229
237
  },
230
238
  );
@@ -24,8 +24,8 @@ import {
24
24
  TimesIcon,
25
25
  ArrowCircleRightIcon,
26
26
  LongArrowAltUpIcon,
27
- PanelEntryDragHandle,
28
- PanelEntryDropZonePlaceholder,
27
+ PanelDnDEntryDragHandle,
28
+ PanelDnDEntry,
29
29
  DragPreviewLayer,
30
30
  useDragPreviewLayer,
31
31
  } from '@finos/legend-art';
@@ -78,6 +78,8 @@ export const TaggedValueEditor = observer(
78
78
  darkTheme?: boolean;
79
79
  }) => {
80
80
  const ref = useRef<HTMLDivElement>(null);
81
+ const handleRef = useRef<HTMLDivElement>(null);
82
+
81
83
  const {
82
84
  annotatedElement,
83
85
  taggedValue,
@@ -176,110 +178,114 @@ export const TaggedValueEditor = observer(
176
178
  }),
177
179
  [taggedValue],
178
180
  );
179
- dragConnector(dropConnector(ref));
181
+ dragConnector(handleRef);
182
+ dropConnector(ref);
180
183
  useDragPreviewLayer(dragPreviewConnector);
181
184
 
182
185
  return (
183
- <div ref={ref} className="tagged-value-editor__container">
184
- <PanelEntryDropZonePlaceholder
185
- showPlaceholder={isBeingDragged}
186
- className="tagged-value-editor__dnd__placeholder"
187
- >
188
- <div className="tagged-value-editor">
189
- <PanelEntryDragHandle />
190
- <div
191
- className={`tagged-value-editor__profile ${
186
+ <PanelDnDEntry
187
+ ref={ref}
188
+ className="tagged-value-editor__container"
189
+ showPlaceholder={isBeingDragged}
190
+ placeholder={<div className="dnd__placeholder--light"></div>}
191
+ >
192
+ <PanelDnDEntryDragHandle
193
+ dropTargetConnector={handleRef}
194
+ isBeingDragged={isBeingDragged}
195
+ />
196
+ <div className="tagged-value-editor">
197
+ <div
198
+ className={`tagged-value-editor__profile ${
199
+ darkTheme ? 'tagged-value-editor-dark-theme' : ''
200
+ }`}
201
+ >
202
+ <CustomSelectorInput
203
+ className="tagged-value-editor__profile__selector"
204
+ disabled={isReadOnly}
205
+ options={profileOptions}
206
+ onChange={changeProfile}
207
+ value={selectedProfile}
208
+ placeholder="Choose a profile"
209
+ filterOption={profileFilterOption}
210
+ darkMode={darkTheme ?? false}
211
+ />
212
+ <button
213
+ className={`tagged-value-editor__profile__visit-btn ${
192
214
  darkTheme ? 'tagged-value-editor-dark-theme' : ''
193
215
  }`}
216
+ disabled={isStubbed_PackageableElement(
217
+ taggedValue.tag.value._OWNER,
218
+ )}
219
+ onClick={visitProfile}
220
+ tabIndex={-1}
221
+ title="Visit profile"
194
222
  >
195
- <CustomSelectorInput
196
- className="tagged-value-editor__profile__selector"
223
+ <ArrowCircleRightIcon />
224
+ </button>
225
+ </div>
226
+ <CustomSelectorInput
227
+ className="tagged-value-editor__tag"
228
+ disabled={isReadOnly}
229
+ options={tagOptions}
230
+ onChange={changeTag}
231
+ value={selectedTag}
232
+ placeholder="Choose a tag"
233
+ filterOption={tagFilterOption}
234
+ darkMode={Boolean(darkTheme)}
235
+ />
236
+ {!isReadOnly && (
237
+ <button
238
+ className="uml-element-editor__remove-btn"
239
+ disabled={isReadOnly}
240
+ onClick={deleteValue}
241
+ tabIndex={-1}
242
+ title="Remove"
243
+ >
244
+ <TimesIcon />
245
+ </button>
246
+ )}
247
+ <div
248
+ className={clsx('tagged-value-editor__value', {
249
+ 'tagged-value-editor__value__expanded': isExpanded,
250
+ })}
251
+ >
252
+ {isExpanded && (
253
+ <textarea
254
+ className={`tagged-value-editor__value__input ${
255
+ darkTheme ? 'tagged-value-editor-dark-theme' : ''
256
+ }`}
257
+ spellCheck={false}
197
258
  disabled={isReadOnly}
198
- options={profileOptions}
199
- onChange={changeProfile}
200
- value={selectedProfile}
201
- placeholder="Choose a profile"
202
- filterOption={profileFilterOption}
203
- darkMode={darkTheme ?? false}
259
+ value={taggedValue.value}
260
+ onChange={changeValue}
261
+ placeholder="Value"
204
262
  />
205
- <button
206
- className={`tagged-value-editor__profile__visit-btn ${
263
+ )}
264
+ {!isExpanded && (
265
+ <input
266
+ className={`tagged-value-editor__value__input ${
207
267
  darkTheme ? 'tagged-value-editor-dark-theme' : ''
208
268
  }`}
209
- disabled={isStubbed_PackageableElement(
210
- taggedValue.tag.value._OWNER,
211
- )}
212
- onClick={visitProfile}
213
- tabIndex={-1}
214
- title="Visit profile"
215
- >
216
- <ArrowCircleRightIcon />
217
- </button>
218
- </div>
219
- <CustomSelectorInput
220
- className="tagged-value-editor__tag"
221
- disabled={isReadOnly}
222
- options={tagOptions}
223
- onChange={changeTag}
224
- value={selectedTag}
225
- placeholder="Choose a tag"
226
- filterOption={tagFilterOption}
227
- darkMode={Boolean(darkTheme)}
228
- />
229
- {!isReadOnly && (
230
- <button
231
- className="uml-element-editor__remove-btn"
269
+ spellCheck={false}
232
270
  disabled={isReadOnly}
233
- onClick={deleteValue}
234
- tabIndex={-1}
235
- title="Remove"
236
- >
237
- <TimesIcon />
238
- </button>
271
+ value={taggedValue.value}
272
+ onChange={changeValue}
273
+ placeholder="Value"
274
+ />
239
275
  )}
240
- <div
241
- className={clsx('tagged-value-editor__value', {
242
- 'tagged-value-editor__value__expanded': isExpanded,
243
- })}
276
+ <button
277
+ className={`tagged-value-editor__value__expand-btn ${
278
+ darkTheme ? 'tagged-value-editor-dark-theme' : ''
279
+ }`}
280
+ onClick={toggleExpandedMode}
281
+ tabIndex={-1}
282
+ title="Expand/Collapse"
244
283
  >
245
- {isExpanded && (
246
- <textarea
247
- className={`tagged-value-editor__value__input ${
248
- darkTheme ? 'tagged-value-editor-dark-theme' : ''
249
- }`}
250
- spellCheck={false}
251
- disabled={isReadOnly}
252
- value={taggedValue.value}
253
- onChange={changeValue}
254
- placeholder="Value"
255
- />
256
- )}
257
- {!isExpanded && (
258
- <input
259
- className={`tagged-value-editor__value__input ${
260
- darkTheme ? 'tagged-value-editor-dark-theme' : ''
261
- }`}
262
- spellCheck={false}
263
- disabled={isReadOnly}
264
- value={taggedValue.value}
265
- onChange={changeValue}
266
- placeholder="Value"
267
- />
268
- )}
269
- <button
270
- className={`tagged-value-editor__value__expand-btn ${
271
- darkTheme ? 'tagged-value-editor-dark-theme' : ''
272
- }`}
273
- onClick={toggleExpandedMode}
274
- tabIndex={-1}
275
- title="Expand/Collapse"
276
- >
277
- {isExpanded ? <LongArrowAltUpIcon /> : <MoreVerticalIcon />}
278
- </button>
279
- </div>
284
+ {isExpanded ? <LongArrowAltUpIcon /> : <MoreVerticalIcon />}
285
+ </button>
280
286
  </div>
281
- </PanelEntryDropZonePlaceholder>
282
- </div>
287
+ </div>
288
+ </PanelDnDEntry>
283
289
  );
284
290
  },
285
291
  );
@@ -37,7 +37,6 @@ import {
37
37
  type ProjectGAVCoordinates,
38
38
  type EntitiesWithOrigin,
39
39
  parseGAVCoordinates,
40
- LegendSDLC,
41
40
  } from '@finos/legend-storage';
42
41
  import {
43
42
  ProjectConfiguration,
@@ -63,6 +62,7 @@ import {
63
62
  GraphDataDeserializationError,
64
63
  GraphBuilderError,
65
64
  createGraphBuilderReport,
65
+ LegendSDLC,
66
66
  } from '@finos/legend-graph';
67
67
  import { GRAPH_EDITOR_MODE } from '../editor/EditorConfig.js';
68
68