@metadev/daga 1.4.1 → 1.4.3

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/Changelog.md +31 -1
  2. package/assets/icon/property/add.svg +23 -3
  3. package/assets/icon/property/gear.svg +3 -0
  4. package/assets/icon/property/move.svg +35 -0
  5. package/assets/styles/_property-editor.scss +285 -157
  6. package/assets/styles/daga.scss +149 -156
  7. package/fesm2022/metadev-daga.mjs +2563 -993
  8. package/fesm2022/metadev-daga.mjs.map +1 -1
  9. package/index.d.ts +8 -6
  10. package/lib/daga.module.d.ts +4 -5
  11. package/lib/diagram-editor/diagram/collab/collab-action.d.ts +212 -0
  12. package/lib/diagram-editor/diagram/collab/collab-client.d.ts +57 -0
  13. package/lib/diagram-editor/diagram/collab/collab-engine.d.ts +46 -0
  14. package/lib/diagram-editor/diagram/collab/message-types.d.ts +97 -0
  15. package/lib/diagram-editor/diagram/collab/primitives.d.ts +22 -0
  16. package/lib/diagram-editor/diagram/converters/daga-exporter.d.ts +1 -1
  17. package/lib/diagram-editor/diagram/converters/daga-model.d.ts +57 -0
  18. package/lib/diagram-editor/diagram/diagram-action.d.ts +46 -66
  19. package/lib/diagram-editor/diagram/diagram-canvas.d.ts +3 -1
  20. package/lib/diagram-editor/diagram/diagram-connection.d.ts +53 -4
  21. package/lib/diagram-editor/diagram/diagram-element.d.ts +29 -2
  22. package/lib/diagram-editor/diagram/diagram-field.d.ts +22 -4
  23. package/lib/diagram-editor/diagram/diagram-model.d.ts +6 -0
  24. package/lib/diagram-editor/diagram/diagram-node.d.ts +88 -5
  25. package/lib/diagram-editor/diagram/diagram-port.d.ts +31 -4
  26. package/lib/diagram-editor/diagram/diagram-property.d.ts +192 -19
  27. package/lib/diagram-editor/diagram/diagram-section.d.ts +57 -4
  28. package/lib/interfaces/canvas.d.ts +7 -0
  29. package/lib/property-editor/autocomplete/autocomplete.component.d.ts +39 -0
  30. package/lib/{object-editor → property-editor/object-editor}/object-editor.component.d.ts +7 -9
  31. package/lib/property-editor/option-list-editor/option-list-editor.component.d.ts +33 -0
  32. package/lib/property-editor/property-editor.component.d.ts +2 -0
  33. package/lib/property-editor/property-settings/property-settings.component.d.ts +35 -0
  34. package/lib/{text-list-editor → property-editor/text-list-editor}/text-list-editor.component.d.ts +5 -3
  35. package/lib/{text-map-editor → property-editor/text-map-editor}/text-map-editor.component.d.ts +2 -2
  36. package/package.json +4 -4
package/Changelog.md CHANGED
@@ -6,13 +6,43 @@ List of releases and changes.
6
6
 
7
7
  ## Next release Colada
8
8
 
9
+ ## v. 1.4.3
10
+
11
+ - Add property editor settings page [#113](https://github.com/metadevpro/daga/issues/113) [#119](https://github.com/metadevpro/daga/pull/119) [#120](https://github.com/metadevpro/daga/pull/120)
12
+ - Add `TextSet` and `OptionSet` property types [#121](https://github.com/metadevpro/daga/pull/121)
13
+ - Don't allow adding empty values in `TextList`, `TextSet` and `TextMap` property types [#121](https://github.com/metadevpro/daga/pull/121)
14
+ - Prevent overlapping connections [#122](https://github.com/metadevpro/daga/pull/122)
15
+ - Highlight a port when the pointer is close to the port while drawing a connection [#138](https://github.com/metadevpro/daga/pull/138)
16
+ - Adding support for collaborative actions.
17
+
18
+ ## v. 1.4.2
19
+
20
+ Date: _2024-04-11_
21
+
22
+ - Allow instancing nodes and connections referencing their type by its identifier rather than having to get the type from the set of types [#94](https://github.com/metadevpro/daga/pull/94)
23
+ - Use logical removal of diagram elements via the `removed` flag instead of removing them from the model [#96](https://github.com/metadevpro/daga/pull/96)
24
+ - Add `do()` method to `DiagramAction` [#96](https://github.com/metadevpro/daga/pull/96)
25
+ - Only register changed values in `UpdateValuesAction` to reduce chances of overwriting when different users edit the same `ValueSet` simultaneously [#106](https://github.com/metadevpro/daga/pull/106)
26
+ - Define and document the behavior of `ValueSet` [#106](https://github.com/metadevpro/daga/pull/106)
27
+ - When creating a new `DiagramElement` with a `ValueSet`, set the `DiagramElement`'s attributes to the `ValueSet`'s values if any of the values has an associated attribute [#106](https://github.com/metadevpro/daga/pull/106)
28
+ - Move the components of property editor to within property editor folder for better code organization [#106](https://github.com/metadevpro/daga/pull/106)
29
+ - Remove Lux dependence [#106](https://github.com/metadevpro/daga/pull/106)
30
+ - Make the `rootAttribute` of `Property` optional to make diagram configurations simpler [#106](https://github.com/metadevpro/daga/pull/106)
31
+ - Improve behavior of nested `ValueSet`s [#106](https://github.com/metadevpro/daga/pull/106)
32
+ - Fix bug with the list of options in properties of `Option` type appearing misplaced in scrolled property editors [#116](https://github.com/metadevpro/daga/pull/116)
33
+ - Make property editor not appear when collapsed [#118](https://github.com/metadevpro/daga/pull/118)
34
+
9
35
  ## v. 1.4.1
10
36
 
37
+ Date: _2024-03-08_
38
+
11
39
  - Fix bug with diagram changes not triggering validation [#91](https://github.com/metadevpro/daga/pull/91)
12
40
  - Compensate for scroll when getting cursor position relative to screen [#92](https://github.com/metadevpro/daga/pull/92)
13
41
 
14
42
  ## v. 1.4.0 Tizona
15
43
 
44
+ Date: _2024-03-08_
45
+
16
46
  - Enable configuring which components are present in a diagram [#66](https://github.com/metadevpro/daga/pull/66)
17
47
  - Add `zoom` configurable user action and enable configuring whether zooming and panning is enabled [#66](https://github.com/metadevpro/daga/pull/66)
18
48
  - Rename `color` configuration property of diagram to `backgroundColor` and `color` configuration property of node to `fillColor` [#65](https://github.com/metadevpro/daga/issues/65) [#69](https://github.com/metadevpro/daga/pull/69)
@@ -39,7 +69,7 @@ List of releases and changes.
39
69
 
40
70
  Date: _2024.02.13_
41
71
 
42
- - Add link to documentation and tutorials: https://daga.metadev.pro/
72
+ - Add link to documentation and tutorials: <https://daga.metadev.pro/>
43
73
 
44
74
  ## v. 1.3.0
45
75
 
@@ -1,3 +1,23 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path fill-rule="evenodd" clip-rule="evenodd" d="M12.99 11.0101L20.9096 11.0101V12.9899L12.99 12.9899L12.99 20.9095L11.0101 20.9095V12.9899L3.09053 12.9899L3.09053 11.0101L11.0101 11.0101L11.0101 3.09045L12.99 3.09045V11.0101Z" fill="#233154"/>
3
- </svg>
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path
3
+ fill-rule="evenodd"
4
+ clip-rule="evenodd"
5
+ fill="#233154"
6
+ d="
7
+ M 13 11
8
+ L 21 11
9
+ V 13
10
+ L 13 13
11
+ L 13 21
12
+ L 11 21
13
+ V 13
14
+ L 3 13
15
+ L 3 11
16
+ L 11 11
17
+ L 11 3
18
+ L 13 3
19
+ V 11
20
+ Z
21
+ "
22
+ />
23
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M6.49998 0H9.49998L10.0939 2.37548C10.7276 2.6115 11.3107 2.95155 11.8223 3.37488L14.1782 2.70096L15.6782 5.29904L13.9173 7.00166C13.9717 7.32634 14 7.65987 14 8C14 8.34013 13.9717 8.67366 13.9173 8.99834L15.6782 10.701L14.1782 13.299L11.8223 12.6251C11.3107 13.0484 10.7276 13.3885 10.0939 13.6245L9.49998 16H6.49998L5.90611 13.6245C5.27238 13.3885 4.68931 13.0484 4.17765 12.6251L1.82178 13.299L0.321777 10.701L2.08266 8.99834C2.02828 8.67366 1.99998 8.34013 1.99998 8C1.99998 7.65987 2.02828 7.32634 2.08266 7.00166L0.321777 5.29904L1.82178 2.70096L4.17764 3.37488C4.68931 2.95155 5.27238 2.6115 5.90611 2.37548L6.49998 0ZM7.99998 10C9.10455 10 9.99998 9.10457 9.99998 8C9.99998 6.89543 9.10455 6 7.99998 6C6.89541 6 5.99998 6.89543 5.99998 8C5.99998 9.10457 6.89541 10 7.99998 10Z" fill="#5F789E"/>
3
+ </svg>
@@ -0,0 +1,35 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path
3
+ fill-rule="evenodd"
4
+ clip-rule="evenodd"
5
+ fill="#233154"
6
+ d="
7
+ M 11 11
8
+ V 6
9
+ H 8
10
+ L 12 2
11
+ L 16 6
12
+ H 13
13
+ V 11
14
+ H 18
15
+ V 8
16
+ L 22 12
17
+ L 18 16
18
+ V 13
19
+ H 13
20
+ V 18
21
+ H 16
22
+ L 12 22
23
+ L 8 18
24
+ H 11
25
+ V 13
26
+ H 6
27
+ V 16
28
+ L 2 12
29
+ L 6 8
30
+ V 11
31
+ L 11
32
+ Z
33
+ "
34
+ />
35
+ </svg>
@@ -1,157 +1,285 @@
1
- daga-property-editor {
2
- .title {
3
- margin: 0;
4
- width: 100%;
5
- font-size: 1rem;
6
- font-weight: 500;
7
- }
8
- .panel-content {
9
- padding: 1rem;
10
- }
11
- .property {
12
- color: var(--daga-font-color);
13
- :disabled,
14
- .disabled {
15
- color: var(--daga-font-color-disabled);
16
- }
17
- input,
18
- select,
19
- textarea,
20
- button,
21
- .radio-item {
22
- background-color: var(--daga-property-background-color);
23
- border: 1px solid var(--daga-property-border-color);
24
- font-weight: 500;
25
- font-size: 0.8rem;
26
- }
27
- input,
28
- select,
29
- textarea {
30
- border-radius: var(--lux-border-radius);
31
- box-sizing: border-box;
32
- font-family: var(--daga-monospace-font-family);
33
- width: 100%;
34
- }
35
- input,
36
- select {
37
- height: 1.5rem;
38
- }
39
- select {
40
- padding: 0 0.5rem;
41
- }
42
- textarea {
43
- height: 5rem;
44
- padding: var(--lux-input-padding, 0rem 0.5rem);
45
- resize: none;
46
- }
47
- .radio-item {
48
- width: 50%;
49
- }
50
- .radio-item.radio-start {
51
- border-bottom-left-radius: var(--lux-border-radius);
52
- border-top-left-radius: var(--lux-border-radius);
53
- }
54
- .radio-item.radio-end {
55
- border-bottom-right-radius: var(--lux-border-radius);
56
- border-top-right-radius: var(--lux-border-radius);
57
- }
58
- }
59
- }
60
-
61
- daga-object-editor,
62
- daga-text-list-editor,
63
- daga-text-map-editor {
64
- .property {
65
- padding-top: 0.5rem;
66
- padding-bottom: 0.5rem;
67
- .property-name {
68
- display: flex;
69
- justify-content: space-between;
70
- align-items: center;
71
- height: 1.5rem;
72
- padding-bottom: 0.5rem;
73
- margin: 0;
74
- width: 100%;
75
- font-size: 0.75rem;
76
- font-weight: 500;
77
- text-transform: uppercase;
78
- }
79
- }
80
-
81
- .value-item-input {
82
- display: flex;
83
- align-items: stretch;
84
- flex-direction: row;
85
- height: 1.5rem;
86
- gap: 0.5rem;
87
- }
88
- .value-item-element {
89
- @extend .value-item-input;
90
- margin-bottom: 0.5rem;
91
- }
92
- .left-bar {
93
- padding-left: 1rem;
94
- border-left: 0.25rem solid var(--daga-property-background-color);
95
- }
96
-
97
- lux-input {
98
- height: 1.5rem;
99
- flex-grow: 1;
100
- flex-basis: 0;
101
- }
102
- p.value-item {
103
- @extend lux-input;
104
- margin: 0;
105
- overflow: hidden;
106
- text-overflow: ellipsis;
107
- }
108
- .relatively-positioned {
109
- @extend lux-input;
110
- position: relative;
111
- }
112
- button.property-button {
113
- .icon {
114
- background-size: contain;
115
- margin: 0.25rem;
116
- width: 1rem;
117
- height: 1rem;
118
- }
119
- .hide-icon {
120
- background-image: url(../icon/property/hide.svg);
121
- }
122
- .close-icon {
123
- background-image: url(../icon/property/close.svg);
124
- }
125
- .add-icon {
126
- background-image: url(../icon/property/add.svg);
127
- }
128
- min-width: 1.5rem;
129
- min-height: 1.5rem;
130
- width: 1.5rem;
131
- height: 1.5rem;
132
- padding: 0;
133
- border-radius: 0.25rem;
134
- border: none;
135
- background-color: transparent;
136
- font-size: 1rem;
137
- }
138
- button.property-button:hover {
139
- background-color: var(--daga-property-background-color);
140
- }
141
- button.clear {
142
- position: absolute;
143
- top: 0;
144
- right: 0;
145
- min-width: 1.5rem;
146
- min-height: 1.5rem;
147
- width: 1.5rem;
148
- height: 1.5rem;
149
- padding: 0;
150
- border-radius: 0.25rem;
151
- border: none;
152
- background-color: transparent;
153
- background: var(--lux-autocomplete-icon-clear);
154
- background-size: 0.5rem 0.5rem;
155
- z-index: 1;
156
- }
157
- }
1
+ daga-property-editor {
2
+ .title {
3
+ display: flex;
4
+ justify-content: space-between;
5
+ align-items: center;
6
+ margin: 0;
7
+ width: 100%;
8
+ font-size: 1rem;
9
+ font-weight: 500;
10
+ }
11
+ .panel-content {
12
+ padding: 1rem;
13
+ }
14
+ .property {
15
+ color: var(--daga-font-color);
16
+ background-color: var(--daga-panel-background-color);
17
+ padding-top: 0.5rem;
18
+ padding-bottom: 0.5rem;
19
+ box-sizing: border-box;
20
+ .property-name {
21
+ button {
22
+ margin-left: 0.25rem;
23
+ }
24
+ display: flex;
25
+ justify-content: space-between;
26
+ align-items: center;
27
+ height: 1.5rem;
28
+ padding-bottom: 0.5rem;
29
+ margin: 0;
30
+ width: 100%;
31
+ font-size: 0.75rem;
32
+ font-weight: 500;
33
+ }
34
+ :disabled,
35
+ .disabled {
36
+ color: var(--daga-font-color-disabled);
37
+ }
38
+ .input,
39
+ input,
40
+ select {
41
+ height: 1.5rem;
42
+ flex-grow: 1;
43
+ flex-basis: 0;
44
+ }
45
+ .property-value,
46
+ input,
47
+ select {
48
+ padding: var(--daga-property-input-padding);
49
+ }
50
+ .property-value,
51
+ input,
52
+ select,
53
+ textarea {
54
+ border-radius: var(--daga-property-border-radius);
55
+ box-sizing: border-box;
56
+ font-family: var(--daga-monospace-font-family);
57
+ width: 100%;
58
+ }
59
+ textarea {
60
+ height: 5rem;
61
+ padding: var(--daga-property-input-padding);
62
+ resize: none;
63
+ }
64
+ .property-value,
65
+ input,
66
+ select,
67
+ textarea,
68
+ button,
69
+ .radio-item {
70
+ background-color: var(--daga-property-background-color);
71
+ border: 1px solid var(--daga-property-border-color);
72
+ font-weight: 500;
73
+ font-size: 0.8rem;
74
+ }
75
+ .radio {
76
+ @extend .input;
77
+ display: flex;
78
+ flex-direction: row;
79
+ input {
80
+ margin: 0;
81
+ height: 100%;
82
+ }
83
+ .radio-item {
84
+ text-align: center;
85
+ padding: 0.2rem;
86
+ width: 50%;
87
+ cursor: pointer;
88
+ input {
89
+ display: none;
90
+ }
91
+ }
92
+ .radio-item:has(:checked) {
93
+ color: var(--daga-property-selected-color);
94
+ background-color: var(--daga-property-selected-background-color);
95
+ }
96
+ .radio-item.radio-start {
97
+ border-bottom-left-radius: var(--daga-property-border-radius);
98
+ border-top-left-radius: var(--daga-property-border-radius);
99
+ }
100
+ .radio-item.radio-end {
101
+ border-bottom-right-radius: var(--daga-property-border-radius);
102
+ border-top-right-radius: var(--daga-property-border-radius);
103
+ }
104
+ }
105
+ p.value-item {
106
+ @extend .input;
107
+ margin: 0;
108
+ overflow: hidden;
109
+ text-overflow: ellipsis;
110
+ }
111
+ .value-item-input {
112
+ display: flex;
113
+ align-items: stretch;
114
+ flex-direction: row;
115
+ height: 1.5rem;
116
+ gap: 0.5rem;
117
+ }
118
+ .value-item-element {
119
+ @extend .value-item-input;
120
+ margin-bottom: 0.5rem;
121
+ }
122
+ }
123
+
124
+ .autocomplete {
125
+ .autocomplete-input {
126
+ position: relative;
127
+ }
128
+ .autocomplete-options {
129
+ visibility: hidden;
130
+ .autocomplete-option-list {
131
+ position: absolute;
132
+ width: 100%;
133
+ z-index: 2;
134
+ background-color: #ffffff;
135
+ border: 1px solid var(--daga-property-border-color);
136
+ border-radius: 0 0 var(--daga-property-border-radius)
137
+ var(--daga-property-border-radius);
138
+ max-height: 10rem;
139
+ box-sizing: border-box;
140
+ overflow: auto;
141
+ list-style-type: none;
142
+ padding: 0;
143
+ margin: 0;
144
+ .autocomplete-option {
145
+ .match {
146
+ font-weight: bold;
147
+ }
148
+ padding: var(--daga-property-input-padding);
149
+ cursor: pointer;
150
+ }
151
+ .autocomplete-option.focused {
152
+ background-color: var(--daga-property-background-color);
153
+ }
154
+ .autocomplete-option.no-options {
155
+ font-style: italic;
156
+ color: var(--daga-font-color-disabled);
157
+ cursor: default;
158
+ }
159
+ }
160
+ }
161
+ }
162
+ .autocomplete.showing-options {
163
+ input {
164
+ border-radius: var(--daga-property-border-radius)
165
+ var(--daga-property-border-radius) 0 0;
166
+ }
167
+ .autocomplete-options {
168
+ visibility: visible;
169
+ }
170
+ }
171
+
172
+ .left-bar {
173
+ padding-left: 1rem;
174
+ border-left: 0.25rem solid var(--daga-property-background-color);
175
+ }
176
+
177
+ .property-value {
178
+ height: 1.5rem;
179
+ overflow: hidden;
180
+ text-overflow: ellipsis;
181
+ white-space: nowrap;
182
+ cursor: default;
183
+ user-select: none;
184
+ }
185
+
186
+ button.property-button {
187
+ .icon {
188
+ background-size: contain;
189
+ margin: 0.25rem;
190
+ width: 1rem;
191
+ height: 1rem;
192
+ }
193
+ .move-icon {
194
+ background-image: url(../icon/property/move.svg);
195
+ }
196
+ .hide-icon {
197
+ background-image: url(../icon/property/hide.svg);
198
+ }
199
+ .close-icon {
200
+ background-image: url(../icon/property/close.svg);
201
+ }
202
+ .add-icon {
203
+ background-image: url(../icon/property/add.svg);
204
+ }
205
+ .settings-icon {
206
+ background-image: url(../icon/property/gear.svg);
207
+ }
208
+ min-width: 1.5rem;
209
+ min-height: 1.5rem;
210
+ width: 1.5rem;
211
+ height: 1.5rem;
212
+ padding: 0;
213
+ border-radius: 0.25rem;
214
+ border: none;
215
+ background-color: transparent;
216
+ font-size: 1rem;
217
+ }
218
+ button.property-button:hover {
219
+ background-color: var(--daga-property-background-color);
220
+ }
221
+ button.clear {
222
+ position: absolute;
223
+ top: 0;
224
+ right: 0;
225
+ min-width: 1.5rem;
226
+ min-height: 1.5rem;
227
+ width: 1.5rem;
228
+ height: 1.5rem;
229
+ padding: 0;
230
+ border-radius: 0.25rem;
231
+ border: none;
232
+ background-color: transparent;
233
+ background: url(../icon/action/filter-clear.png) no-repeat;
234
+ background-size: 0.5rem 0.5rem;
235
+ background-position: 0.5rem 0.5rem;
236
+ z-index: 1;
237
+ }
238
+
239
+ .relatively-positioned {
240
+ position: relative;
241
+ }
242
+
243
+ .rotate {
244
+ transform: rotate(0deg);
245
+ animation-name: rotate-animation;
246
+ animation-duration: 0.5s;
247
+ }
248
+ .unrotate {
249
+ transform: rotate(30deg);
250
+ animation-name: unrotate-animation;
251
+ animation-duration: 0.5s;
252
+ }
253
+ @keyframes rotate-animation {
254
+ from {
255
+ transform: rotate(30deg);
256
+ }
257
+ to {
258
+ transform: rotate(0deg);
259
+ }
260
+ }
261
+ @keyframes unrotate-animation {
262
+ from {
263
+ transform: rotate(0deg);
264
+ }
265
+ to {
266
+ transform: rotate(30deg);
267
+ }
268
+ }
269
+ }
270
+
271
+ daga-property-settings {
272
+ .property {
273
+ padding: 0.5rem;
274
+ margin: 0.5rem 0;
275
+ border-radius: 0.5rem;
276
+ border: 1px solid var(--daga-property-border-color);
277
+ }
278
+ .dropbar {
279
+ visibility: collapse;
280
+ width: 100%;
281
+ border-radius: 0.125rem;
282
+ background-color: var(--daga-property-border-color);
283
+ margin: 0.5rem 0;
284
+ }
285
+ }