@cratis/scene.engine 4.2.1 → 4.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 (205) hide show
  1. package/dist/cjs/editing/DescriptorCatalog.js +42 -0
  2. package/dist/cjs/editing/DescriptorCatalog.js.map +1 -0
  3. package/dist/cjs/editing/EditSession.js +44 -0
  4. package/dist/cjs/editing/EditSession.js.map +1 -0
  5. package/dist/cjs/editing/applyEdit.js +83 -0
  6. package/dist/cjs/editing/applyEdit.js.map +1 -0
  7. package/dist/cjs/editing/applyEffectiveConfiguration.js +62 -0
  8. package/dist/cjs/editing/applyEffectiveConfiguration.js.map +1 -0
  9. package/dist/cjs/editing/collectComponents.js +34 -0
  10. package/dist/cjs/editing/collectComponents.js.map +1 -0
  11. package/dist/cjs/editing/describeNode.js +63 -0
  12. package/dist/cjs/editing/describeNode.js.map +1 -0
  13. package/dist/cjs/editing/diagnostics.js +36 -0
  14. package/dist/cjs/editing/diagnostics.js.map +1 -0
  15. package/dist/cjs/editing/documentPaths.js +45 -0
  16. package/dist/cjs/editing/documentPaths.js.map +1 -0
  17. package/dist/cjs/editing/exposureEdits.js +106 -0
  18. package/dist/cjs/editing/exposureEdits.js.map +1 -0
  19. package/dist/cjs/editing/exposureGrants.js +115 -0
  20. package/dist/cjs/editing/exposureGrants.js.map +1 -0
  21. package/dist/cjs/editing/indexDocument.js +400 -0
  22. package/dist/cjs/editing/indexDocument.js.map +1 -0
  23. package/dist/cjs/editing/inspect.js +127 -0
  24. package/dist/cjs/editing/inspect.js.map +1 -0
  25. package/dist/cjs/editing/instanceEdits.js +255 -0
  26. package/dist/cjs/editing/instanceEdits.js.map +1 -0
  27. package/dist/cjs/editing/layoutTypeDescriptors.js +425 -0
  28. package/dist/cjs/editing/layoutTypeDescriptors.js.map +1 -0
  29. package/dist/cjs/editing/layoutTypeEdits.js +141 -0
  30. package/dist/cjs/editing/layoutTypeEdits.js.map +1 -0
  31. package/dist/cjs/editing/nodeIds.js +115 -0
  32. package/dist/cjs/editing/nodeIds.js.map +1 -0
  33. package/dist/cjs/editing/pathAccess.js +53 -0
  34. package/dist/cjs/editing/pathAccess.js.map +1 -0
  35. package/dist/cjs/editing/propertyEdits.js +118 -0
  36. package/dist/cjs/editing/propertyEdits.js.map +1 -0
  37. package/dist/cjs/editing/resolveEffectiveConfiguration.js +200 -0
  38. package/dist/cjs/editing/resolveEffectiveConfiguration.js.map +1 -0
  39. package/dist/cjs/editing/resolveTemplateChain.js +100 -0
  40. package/dist/cjs/editing/resolveTemplateChain.js.map +1 -0
  41. package/dist/cjs/editing/structureEdits.js +231 -0
  42. package/dist/cjs/editing/structureEdits.js.map +1 -0
  43. package/dist/cjs/editing/validateBinding.js +111 -0
  44. package/dist/cjs/editing/validateBinding.js.map +1 -0
  45. package/dist/cjs/editing/validateValue.js +114 -0
  46. package/dist/cjs/editing/validateValue.js.map +1 -0
  47. package/dist/cjs/index.js +51 -0
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/esm/editing/DescriptorCatalog.d.ts +9 -0
  50. package/dist/esm/editing/DescriptorCatalog.d.ts.map +1 -0
  51. package/dist/esm/editing/DescriptorCatalog.js +38 -0
  52. package/dist/esm/editing/DescriptorCatalog.js.map +1 -0
  53. package/dist/esm/editing/DocumentIndex.d.ts +31 -0
  54. package/dist/esm/editing/DocumentIndex.d.ts.map +1 -0
  55. package/dist/esm/editing/DocumentIndex.js +2 -0
  56. package/dist/esm/editing/DocumentIndex.js.map +1 -0
  57. package/dist/esm/editing/EditOutcome.d.ts +7 -0
  58. package/dist/esm/editing/EditOutcome.d.ts.map +1 -0
  59. package/dist/esm/editing/EditOutcome.js +2 -0
  60. package/dist/esm/editing/EditOutcome.js.map +1 -0
  61. package/dist/esm/editing/EditSession.d.ts +20 -0
  62. package/dist/esm/editing/EditSession.d.ts.map +1 -0
  63. package/dist/esm/editing/EditSession.js +42 -0
  64. package/dist/esm/editing/EditSession.js.map +1 -0
  65. package/dist/esm/editing/EditingContext.d.ts +8 -0
  66. package/dist/esm/editing/EditingContext.d.ts.map +1 -0
  67. package/dist/esm/editing/EditingContext.js +2 -0
  68. package/dist/esm/editing/EditingContext.js.map +1 -0
  69. package/dist/esm/editing/TemplateChain.d.ts +13 -0
  70. package/dist/esm/editing/TemplateChain.d.ts.map +1 -0
  71. package/dist/esm/editing/TemplateChain.js +2 -0
  72. package/dist/esm/editing/TemplateChain.js.map +1 -0
  73. package/dist/esm/editing/applyEdit.d.ts +5 -0
  74. package/dist/esm/editing/applyEdit.d.ts.map +1 -0
  75. package/dist/esm/editing/applyEdit.js +81 -0
  76. package/dist/esm/editing/applyEdit.js.map +1 -0
  77. package/dist/esm/editing/applyEffectiveConfiguration.d.ts +3 -0
  78. package/dist/esm/editing/applyEffectiveConfiguration.d.ts.map +1 -0
  79. package/dist/esm/editing/applyEffectiveConfiguration.js +60 -0
  80. package/dist/esm/editing/applyEffectiveConfiguration.js.map +1 -0
  81. package/dist/esm/editing/collectComponents.d.ts +3 -0
  82. package/dist/esm/editing/collectComponents.d.ts.map +1 -0
  83. package/dist/esm/editing/collectComponents.js +32 -0
  84. package/dist/esm/editing/collectComponents.js.map +1 -0
  85. package/dist/esm/editing/describeNode.d.ts +11 -0
  86. package/dist/esm/editing/describeNode.d.ts.map +1 -0
  87. package/dist/esm/editing/describeNode.js +60 -0
  88. package/dist/esm/editing/describeNode.js.map +1 -0
  89. package/dist/esm/editing/diagnostics.d.ts +6 -0
  90. package/dist/esm/editing/diagnostics.d.ts.map +1 -0
  91. package/dist/esm/editing/diagnostics.js +32 -0
  92. package/dist/esm/editing/diagnostics.js.map +1 -0
  93. package/dist/esm/editing/documentPaths.d.ts +8 -0
  94. package/dist/esm/editing/documentPaths.d.ts.map +1 -0
  95. package/dist/esm/editing/documentPaths.js +41 -0
  96. package/dist/esm/editing/documentPaths.js.map +1 -0
  97. package/dist/esm/editing/exposureEdits.d.ts +5 -0
  98. package/dist/esm/editing/exposureEdits.d.ts.map +1 -0
  99. package/dist/esm/editing/exposureEdits.js +103 -0
  100. package/dist/esm/editing/exposureEdits.js.map +1 -0
  101. package/dist/esm/editing/exposureGrants.d.ts +21 -0
  102. package/dist/esm/editing/exposureGrants.d.ts.map +1 -0
  103. package/dist/esm/editing/exposureGrants.js +112 -0
  104. package/dist/esm/editing/exposureGrants.js.map +1 -0
  105. package/dist/esm/editing/given/a_layout_document.d.ts +14 -0
  106. package/dist/esm/editing/given/a_layout_document.d.ts.map +1 -0
  107. package/dist/esm/editing/given/a_layout_document.js +67 -0
  108. package/dist/esm/editing/given/a_layout_document.js.map +1 -0
  109. package/dist/esm/editing/given/a_scene_document.d.ts +20 -0
  110. package/dist/esm/editing/given/a_scene_document.d.ts.map +1 -0
  111. package/dist/esm/editing/given/a_scene_document.js +110 -0
  112. package/dist/esm/editing/given/a_scene_document.js.map +1 -0
  113. package/dist/esm/editing/index.d.ts +19 -0
  114. package/dist/esm/editing/index.d.ts.map +1 -0
  115. package/dist/esm/editing/index.js +19 -0
  116. package/dist/esm/editing/index.js.map +1 -0
  117. package/dist/esm/editing/indexDocument.d.ts +6 -0
  118. package/dist/esm/editing/indexDocument.d.ts.map +1 -0
  119. package/dist/esm/editing/indexDocument.js +396 -0
  120. package/dist/esm/editing/indexDocument.js.map +1 -0
  121. package/dist/esm/editing/inspect.d.ts +8 -0
  122. package/dist/esm/editing/inspect.d.ts.map +1 -0
  123. package/dist/esm/editing/inspect.js +124 -0
  124. package/dist/esm/editing/inspect.js.map +1 -0
  125. package/dist/esm/editing/instanceEdits.d.ts +9 -0
  126. package/dist/esm/editing/instanceEdits.d.ts.map +1 -0
  127. package/dist/esm/editing/instanceEdits.js +248 -0
  128. package/dist/esm/editing/instanceEdits.js.map +1 -0
  129. package/dist/esm/editing/layoutTypeDescriptors.d.ts +5 -0
  130. package/dist/esm/editing/layoutTypeDescriptors.d.ts.map +1 -0
  131. package/dist/esm/editing/layoutTypeDescriptors.js +421 -0
  132. package/dist/esm/editing/layoutTypeDescriptors.js.map +1 -0
  133. package/dist/esm/editing/layoutTypeEdits.d.ts +4 -0
  134. package/dist/esm/editing/layoutTypeEdits.d.ts.map +1 -0
  135. package/dist/esm/editing/layoutTypeEdits.js +139 -0
  136. package/dist/esm/editing/layoutTypeEdits.js.map +1 -0
  137. package/dist/esm/editing/nodeIds.d.ts +14 -0
  138. package/dist/esm/editing/nodeIds.d.ts.map +1 -0
  139. package/dist/esm/editing/nodeIds.js +102 -0
  140. package/dist/esm/editing/nodeIds.js.map +1 -0
  141. package/dist/esm/editing/pathAccess.d.ts +7 -0
  142. package/dist/esm/editing/pathAccess.d.ts.map +1 -0
  143. package/dist/esm/editing/pathAccess.js +48 -0
  144. package/dist/esm/editing/pathAccess.js.map +1 -0
  145. package/dist/esm/editing/propertyEdits.d.ts +15 -0
  146. package/dist/esm/editing/propertyEdits.d.ts.map +1 -0
  147. package/dist/esm/editing/propertyEdits.js +113 -0
  148. package/dist/esm/editing/propertyEdits.js.map +1 -0
  149. package/dist/esm/editing/resolveEffectiveConfiguration.d.ts +5 -0
  150. package/dist/esm/editing/resolveEffectiveConfiguration.d.ts.map +1 -0
  151. package/dist/esm/editing/resolveEffectiveConfiguration.js +198 -0
  152. package/dist/esm/editing/resolveEffectiveConfiguration.js.map +1 -0
  153. package/dist/esm/editing/resolveTemplateChain.d.ts +4 -0
  154. package/dist/esm/editing/resolveTemplateChain.d.ts.map +1 -0
  155. package/dist/esm/editing/resolveTemplateChain.js +98 -0
  156. package/dist/esm/editing/resolveTemplateChain.js.map +1 -0
  157. package/dist/esm/editing/structureEdits.d.ts +6 -0
  158. package/dist/esm/editing/structureEdits.d.ts.map +1 -0
  159. package/dist/esm/editing/structureEdits.js +227 -0
  160. package/dist/esm/editing/structureEdits.js.map +1 -0
  161. package/dist/esm/editing/validateBinding.d.ts +7 -0
  162. package/dist/esm/editing/validateBinding.d.ts.map +1 -0
  163. package/dist/esm/editing/validateBinding.js +108 -0
  164. package/dist/esm/editing/validateBinding.js.map +1 -0
  165. package/dist/esm/editing/validateValue.d.ts +8 -0
  166. package/dist/esm/editing/validateValue.d.ts.map +1 -0
  167. package/dist/esm/editing/validateValue.js +111 -0
  168. package/dist/esm/editing/validateValue.js.map +1 -0
  169. package/dist/esm/index.d.ts +1 -0
  170. package/dist/esm/index.d.ts.map +1 -1
  171. package/dist/esm/index.js +14 -0
  172. package/dist/esm/index.js.map +1 -1
  173. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  174. package/editing/DescriptorCatalog.ts +51 -0
  175. package/editing/DocumentIndex.ts +73 -0
  176. package/editing/EditOutcome.ts +21 -0
  177. package/editing/EditSession.ts +50 -0
  178. package/editing/EditingContext.ts +23 -0
  179. package/editing/TemplateChain.ts +36 -0
  180. package/editing/applyEdit.ts +69 -0
  181. package/editing/applyEffectiveConfiguration.ts +53 -0
  182. package/editing/collectComponents.ts +36 -0
  183. package/editing/describeNode.ts +61 -0
  184. package/editing/diagnostics.ts +30 -0
  185. package/editing/documentPaths.ts +40 -0
  186. package/editing/exposureEdits.ts +119 -0
  187. package/editing/exposureGrants.ts +159 -0
  188. package/editing/given/a_layout_document.ts +88 -0
  189. package/editing/given/a_scene_document.ts +135 -0
  190. package/editing/index.ts +21 -0
  191. package/editing/indexDocument.ts +237 -0
  192. package/editing/inspect.ts +142 -0
  193. package/editing/instanceEdits.ts +243 -0
  194. package/editing/layoutTypeDescriptors.ts +191 -0
  195. package/editing/layoutTypeEdits.ts +135 -0
  196. package/editing/nodeIds.ts +111 -0
  197. package/editing/pathAccess.ts +81 -0
  198. package/editing/propertyEdits.ts +119 -0
  199. package/editing/resolveEffectiveConfiguration.ts +202 -0
  200. package/editing/resolveTemplateChain.ts +109 -0
  201. package/editing/structureEdits.ts +234 -0
  202. package/editing/validateBinding.ts +103 -0
  203. package/editing/validateValue.ts +130 -0
  204. package/index.ts +1 -0
  205. package/package.json +3 -3
@@ -0,0 +1,421 @@
1
+ import { PropertyValueType, Visibility, LayoutChildPlacement, LayoutType, HorizontalAlignment, VerticalAlignment, Orientation } from '@cratis/scene.model';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ function choices(enumObject) {
6
+ return Object.values(enumObject).map((value)=>({
7
+ value,
8
+ label: value
9
+ }));
10
+ }
11
+ const spacing = (path, label, group)=>({
12
+ path,
13
+ label,
14
+ group,
15
+ valueType: PropertyValueType.Number,
16
+ default: 0,
17
+ constraints: {
18
+ minimum: 0
19
+ }
20
+ });
21
+ const flowNodeProperties = [
22
+ {
23
+ path: 'grow',
24
+ label: 'Grow',
25
+ group: 'Layout',
26
+ valueType: PropertyValueType.Number,
27
+ description: 'How much of the free space in its container this node takes, relative to its siblings.',
28
+ constraints: {
29
+ minimum: 0
30
+ }
31
+ },
32
+ {
33
+ path: 'span',
34
+ label: 'Span',
35
+ group: 'Layout',
36
+ valueType: PropertyValueType.Number,
37
+ description: 'How many grid columns this node spans. Only meaningful inside a grid.',
38
+ constraints: {
39
+ minimum: 1,
40
+ integer: true
41
+ }
42
+ }
43
+ ];
44
+ const flowContainerProperties = [
45
+ spacing('gap', 'Gap', 'Layout'),
46
+ ...flowNodeProperties
47
+ ];
48
+ const panelProperties = [
49
+ {
50
+ path: 'name',
51
+ label: 'Name',
52
+ group: 'General',
53
+ valueType: PropertyValueType.String
54
+ },
55
+ {
56
+ path: 'visibility',
57
+ label: 'Visibility',
58
+ group: 'General',
59
+ valueType: PropertyValueType.Enum,
60
+ choices: choices(Visibility),
61
+ default: Visibility.Visible
62
+ },
63
+ {
64
+ path: 'isEnabled',
65
+ label: 'Enabled',
66
+ group: 'General',
67
+ valueType: PropertyValueType.Boolean,
68
+ default: true
69
+ },
70
+ {
71
+ path: 'opacity',
72
+ label: 'Opacity',
73
+ group: 'General',
74
+ valueType: PropertyValueType.Number,
75
+ default: 1,
76
+ constraints: {
77
+ minimum: 0,
78
+ maximum: 1
79
+ }
80
+ },
81
+ {
82
+ path: 'horizontalAlignment',
83
+ label: 'Horizontal alignment',
84
+ group: 'Layout',
85
+ valueType: PropertyValueType.Enum,
86
+ choices: choices(HorizontalAlignment)
87
+ },
88
+ {
89
+ path: 'verticalAlignment',
90
+ label: 'Vertical alignment',
91
+ group: 'Layout',
92
+ valueType: PropertyValueType.Enum,
93
+ choices: choices(VerticalAlignment)
94
+ },
95
+ {
96
+ path: 'zIndex',
97
+ label: 'Stacking order',
98
+ group: 'Layout',
99
+ valueType: PropertyValueType.Number,
100
+ default: 0,
101
+ constraints: {
102
+ integer: true
103
+ }
104
+ }
105
+ ];
106
+ const orientation = {
107
+ path: 'orientation',
108
+ label: 'Orientation',
109
+ group: 'Layout',
110
+ valueType: PropertyValueType.Enum,
111
+ choices: choices(Orientation)
112
+ };
113
+ const panelChildren = {
114
+ acceptsChildren: true,
115
+ childPlacement: LayoutChildPlacement.Ordered,
116
+ supportsSizeClassVariants: false
117
+ };
118
+ /**
119
+ * The layout type -> capability matrix, as data. Every {@link LayoutType} has exactly one entry; the
120
+ * documentation's matrix is this table.
121
+ */ const layoutTypeDescriptors = [
122
+ {
123
+ type: LayoutType.FlowRow,
124
+ label: 'Row',
125
+ description: 'Reflows its children horizontally.',
126
+ capabilities: {
127
+ acceptsChildren: true,
128
+ childPlacement: LayoutChildPlacement.Ordered,
129
+ supportsGridSpan: false,
130
+ supportsSizeClassVariants: true,
131
+ convertibleTo: [
132
+ LayoutType.FlowColumn,
133
+ LayoutType.FlowGrid
134
+ ]
135
+ },
136
+ properties: flowContainerProperties
137
+ },
138
+ {
139
+ type: LayoutType.FlowColumn,
140
+ label: 'Column',
141
+ description: 'Reflows its children vertically.',
142
+ capabilities: {
143
+ acceptsChildren: true,
144
+ childPlacement: LayoutChildPlacement.Ordered,
145
+ supportsGridSpan: false,
146
+ supportsSizeClassVariants: true,
147
+ convertibleTo: [
148
+ LayoutType.FlowRow,
149
+ LayoutType.FlowGrid
150
+ ]
151
+ },
152
+ properties: flowContainerProperties
153
+ },
154
+ {
155
+ type: LayoutType.FlowGrid,
156
+ label: 'Grid',
157
+ description: 'Arranges its children in a grid; children can span columns.',
158
+ capabilities: {
159
+ acceptsChildren: true,
160
+ childPlacement: LayoutChildPlacement.Ordered,
161
+ supportsGridSpan: true,
162
+ supportsSizeClassVariants: true,
163
+ convertibleTo: [
164
+ LayoutType.FlowRow,
165
+ LayoutType.FlowColumn
166
+ ]
167
+ },
168
+ properties: [
169
+ ...flowContainerProperties,
170
+ {
171
+ path: 'columns',
172
+ label: 'Columns',
173
+ group: 'Layout',
174
+ valueType: PropertyValueType.Number,
175
+ constraints: {
176
+ minimum: 1,
177
+ integer: true
178
+ }
179
+ },
180
+ {
181
+ path: 'rows',
182
+ label: 'Rows',
183
+ group: 'Layout',
184
+ valueType: PropertyValueType.Number,
185
+ constraints: {
186
+ minimum: 1,
187
+ integer: true
188
+ }
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ type: LayoutType.FlowLeaf,
194
+ label: 'Content',
195
+ description: 'Positions one element within a flow.',
196
+ capabilities: {
197
+ acceptsChildren: false,
198
+ maximumChildren: 1,
199
+ childPlacement: LayoutChildPlacement.None,
200
+ supportsGridSpan: true,
201
+ supportsSizeClassVariants: false,
202
+ convertibleTo: []
203
+ },
204
+ properties: flowNodeProperties
205
+ },
206
+ {
207
+ type: LayoutType.FlowSlotLeaf,
208
+ label: 'Slot',
209
+ description: 'Positions one of the layout\'s own named slots within its arrangement.',
210
+ capabilities: {
211
+ acceptsChildren: false,
212
+ childPlacement: LayoutChildPlacement.None,
213
+ supportsGridSpan: true,
214
+ supportsSizeClassVariants: false,
215
+ convertibleTo: []
216
+ },
217
+ properties: [
218
+ {
219
+ path: 'slotName',
220
+ label: 'Slot',
221
+ group: 'Layout',
222
+ valueType: PropertyValueType.String,
223
+ constraints: {
224
+ required: true
225
+ }
226
+ },
227
+ ...flowNodeProperties
228
+ ]
229
+ },
230
+ {
231
+ type: LayoutType.Freeform,
232
+ label: 'Freeform',
233
+ description: 'Places each child at its own position and size, one variant per size class.',
234
+ capabilities: {
235
+ acceptsChildren: true,
236
+ childPlacement: LayoutChildPlacement.Positioned,
237
+ supportsGridSpan: false,
238
+ supportsSizeClassVariants: true,
239
+ convertibleTo: []
240
+ },
241
+ properties: []
242
+ },
243
+ {
244
+ type: LayoutType.StackPanel,
245
+ label: 'Stack panel',
246
+ description: 'Stacks its children in one direction with a fixed spacing.',
247
+ capabilities: {
248
+ ...panelChildren,
249
+ supportsGridSpan: false,
250
+ convertibleTo: [
251
+ LayoutType.WrapPanel,
252
+ LayoutType.DockPanel
253
+ ]
254
+ },
255
+ properties: [
256
+ ...panelProperties,
257
+ orientation,
258
+ spacing('spacing', 'Spacing', 'Layout')
259
+ ]
260
+ },
261
+ {
262
+ type: LayoutType.WrapPanel,
263
+ label: 'Wrap panel',
264
+ description: 'Lays children out along a line and wraps to the next when it is full.',
265
+ capabilities: {
266
+ ...panelChildren,
267
+ supportsGridSpan: false,
268
+ convertibleTo: [
269
+ LayoutType.StackPanel,
270
+ LayoutType.DockPanel
271
+ ]
272
+ },
273
+ properties: [
274
+ ...panelProperties,
275
+ orientation,
276
+ {
277
+ path: 'itemWidth',
278
+ label: 'Item width',
279
+ group: 'Layout',
280
+ valueType: PropertyValueType.Number,
281
+ constraints: {
282
+ minimum: 0
283
+ }
284
+ },
285
+ {
286
+ path: 'itemHeight',
287
+ label: 'Item height',
288
+ group: 'Layout',
289
+ valueType: PropertyValueType.Number,
290
+ constraints: {
291
+ minimum: 0
292
+ }
293
+ }
294
+ ]
295
+ },
296
+ {
297
+ type: LayoutType.DockPanel,
298
+ label: 'Dock panel',
299
+ description: 'Docks each child against an edge; the last child can fill what remains.',
300
+ capabilities: {
301
+ ...panelChildren,
302
+ supportsGridSpan: false,
303
+ convertibleTo: [
304
+ LayoutType.StackPanel,
305
+ LayoutType.WrapPanel
306
+ ]
307
+ },
308
+ properties: [
309
+ ...panelProperties,
310
+ {
311
+ path: 'lastChildFill',
312
+ label: 'Last child fills',
313
+ group: 'Layout',
314
+ valueType: PropertyValueType.Boolean,
315
+ default: true
316
+ }
317
+ ]
318
+ },
319
+ {
320
+ type: LayoutType.GridPanel,
321
+ label: 'Grid panel',
322
+ description: 'Positions children in rows and columns defined by the panel.',
323
+ capabilities: {
324
+ ...panelChildren,
325
+ supportsGridSpan: true,
326
+ convertibleTo: []
327
+ },
328
+ properties: [
329
+ ...panelProperties,
330
+ {
331
+ path: 'rows',
332
+ label: 'Rows',
333
+ group: 'Layout',
334
+ valueType: PropertyValueType.Object,
335
+ editorKind: 'gridDefinitions'
336
+ },
337
+ {
338
+ path: 'columns',
339
+ label: 'Columns',
340
+ group: 'Layout',
341
+ valueType: PropertyValueType.Object,
342
+ editorKind: 'gridDefinitions'
343
+ }
344
+ ]
345
+ },
346
+ {
347
+ type: LayoutType.Canvas,
348
+ label: 'Canvas',
349
+ description: 'Places each child at an absolute position.',
350
+ capabilities: {
351
+ acceptsChildren: true,
352
+ childPlacement: LayoutChildPlacement.Positioned,
353
+ supportsGridSpan: false,
354
+ supportsSizeClassVariants: false,
355
+ convertibleTo: []
356
+ },
357
+ properties: [
358
+ ...panelProperties,
359
+ {
360
+ path: 'extent',
361
+ label: 'Extent',
362
+ group: 'Layout',
363
+ valueType: PropertyValueType.Object,
364
+ editorKind: 'size'
365
+ }
366
+ ]
367
+ }
368
+ ];
369
+ /**
370
+ * The editable properties of a placement within a freeform variant - an element's or a slot's position and size.
371
+ */ const placementProperties = [
372
+ {
373
+ path: 'x',
374
+ label: 'Left',
375
+ group: 'Placement',
376
+ valueType: PropertyValueType.Number
377
+ },
378
+ {
379
+ path: 'y',
380
+ label: 'Top',
381
+ group: 'Placement',
382
+ valueType: PropertyValueType.Number
383
+ },
384
+ {
385
+ path: 'width',
386
+ label: 'Width',
387
+ group: 'Placement',
388
+ valueType: PropertyValueType.Number,
389
+ constraints: {
390
+ minimum: 0
391
+ }
392
+ },
393
+ {
394
+ path: 'height',
395
+ label: 'Height',
396
+ group: 'Placement',
397
+ valueType: PropertyValueType.Number,
398
+ constraints: {
399
+ minimum: 0
400
+ }
401
+ }
402
+ ];
403
+ /**
404
+ * The editable properties of a screen template or dialog template itself.
405
+ */ const templateProperties = [
406
+ {
407
+ path: 'displayName',
408
+ label: 'Display name',
409
+ group: 'General',
410
+ valueType: PropertyValueType.String
411
+ },
412
+ {
413
+ path: 'description',
414
+ label: 'Description',
415
+ group: 'General',
416
+ valueType: PropertyValueType.String
417
+ }
418
+ ];
419
+
420
+ export { layoutTypeDescriptors, placementProperties, templateProperties };
421
+ //# sourceMappingURL=layoutTypeDescriptors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutTypeDescriptors.js","sources":["../../../editing/layoutTypeDescriptors.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport {\n HorizontalAlignment, LayoutChildPlacement, LayoutType, LayoutTypeDescriptor, Orientation, PropertyChoice,\n PropertyDescriptor, PropertyValueType, VerticalAlignment, Visibility,\n} from '@cratis/scene.model';\n\nfunction choices(enumObject: Record<string, string>): PropertyChoice[] {\n return Object.values(enumObject).map(value => ({ value, label: value }));\n}\n\nconst spacing = (path: string, label: string, group: string): PropertyDescriptor => ({\n path, label, group, valueType: PropertyValueType.Number, default: 0, constraints: { minimum: 0 },\n});\n\nconst flowNodeProperties: PropertyDescriptor[] = [\n {\n path: 'grow', label: 'Grow', group: 'Layout', valueType: PropertyValueType.Number,\n description: 'How much of the free space in its container this node takes, relative to its siblings.',\n constraints: { minimum: 0 },\n },\n {\n path: 'span', label: 'Span', group: 'Layout', valueType: PropertyValueType.Number,\n description: 'How many grid columns this node spans. Only meaningful inside a grid.',\n constraints: { minimum: 1, integer: true },\n },\n];\n\nconst flowContainerProperties: PropertyDescriptor[] = [spacing('gap', 'Gap', 'Layout'), ...flowNodeProperties];\n\nconst panelProperties: PropertyDescriptor[] = [\n { path: 'name', label: 'Name', group: 'General', valueType: PropertyValueType.String },\n { path: 'visibility', label: 'Visibility', group: 'General', valueType: PropertyValueType.Enum, choices: choices(Visibility), default: Visibility.Visible },\n { path: 'isEnabled', label: 'Enabled', group: 'General', valueType: PropertyValueType.Boolean, default: true },\n { path: 'opacity', label: 'Opacity', group: 'General', valueType: PropertyValueType.Number, default: 1, constraints: { minimum: 0, maximum: 1 } },\n { path: 'horizontalAlignment', label: 'Horizontal alignment', group: 'Layout', valueType: PropertyValueType.Enum, choices: choices(HorizontalAlignment) },\n { path: 'verticalAlignment', label: 'Vertical alignment', group: 'Layout', valueType: PropertyValueType.Enum, choices: choices(VerticalAlignment) },\n { path: 'zIndex', label: 'Stacking order', group: 'Layout', valueType: PropertyValueType.Number, default: 0, constraints: { integer: true } },\n];\n\nconst orientation: PropertyDescriptor = {\n path: 'orientation', label: 'Orientation', group: 'Layout', valueType: PropertyValueType.Enum, choices: choices(Orientation),\n};\n\nconst panelChildren = { acceptsChildren: true, childPlacement: LayoutChildPlacement.Ordered, supportsSizeClassVariants: false };\n\n/**\n * The layout type -> capability matrix, as data. Every {@link LayoutType} has exactly one entry; the\n * documentation's matrix is this table.\n */\nexport const layoutTypeDescriptors: LayoutTypeDescriptor[] = [\n {\n type: LayoutType.FlowRow,\n label: 'Row',\n description: 'Reflows its children horizontally.',\n capabilities: {\n acceptsChildren: true, childPlacement: LayoutChildPlacement.Ordered, supportsGridSpan: false,\n supportsSizeClassVariants: true, convertibleTo: [LayoutType.FlowColumn, LayoutType.FlowGrid],\n },\n properties: flowContainerProperties,\n },\n {\n type: LayoutType.FlowColumn,\n label: 'Column',\n description: 'Reflows its children vertically.',\n capabilities: {\n acceptsChildren: true, childPlacement: LayoutChildPlacement.Ordered, supportsGridSpan: false,\n supportsSizeClassVariants: true, convertibleTo: [LayoutType.FlowRow, LayoutType.FlowGrid],\n },\n properties: flowContainerProperties,\n },\n {\n type: LayoutType.FlowGrid,\n label: 'Grid',\n description: 'Arranges its children in a grid; children can span columns.',\n capabilities: {\n acceptsChildren: true, childPlacement: LayoutChildPlacement.Ordered, supportsGridSpan: true,\n supportsSizeClassVariants: true, convertibleTo: [LayoutType.FlowRow, LayoutType.FlowColumn],\n },\n properties: [\n ...flowContainerProperties,\n { path: 'columns', label: 'Columns', group: 'Layout', valueType: PropertyValueType.Number, constraints: { minimum: 1, integer: true } },\n { path: 'rows', label: 'Rows', group: 'Layout', valueType: PropertyValueType.Number, constraints: { minimum: 1, integer: true } },\n ],\n },\n {\n type: LayoutType.FlowLeaf,\n label: 'Content',\n description: 'Positions one element within a flow.',\n capabilities: {\n acceptsChildren: false, maximumChildren: 1, childPlacement: LayoutChildPlacement.None, supportsGridSpan: true,\n supportsSizeClassVariants: false, convertibleTo: [],\n },\n properties: flowNodeProperties,\n },\n {\n type: LayoutType.FlowSlotLeaf,\n label: 'Slot',\n description: 'Positions one of the layout\\'s own named slots within its arrangement.',\n capabilities: {\n acceptsChildren: false, childPlacement: LayoutChildPlacement.None, supportsGridSpan: true,\n supportsSizeClassVariants: false, convertibleTo: [],\n },\n properties: [\n { path: 'slotName', label: 'Slot', group: 'Layout', valueType: PropertyValueType.String, constraints: { required: true } },\n ...flowNodeProperties,\n ],\n },\n {\n type: LayoutType.Freeform,\n label: 'Freeform',\n description: 'Places each child at its own position and size, one variant per size class.',\n capabilities: {\n acceptsChildren: true, childPlacement: LayoutChildPlacement.Positioned, supportsGridSpan: false,\n supportsSizeClassVariants: true, convertibleTo: [],\n },\n properties: [],\n },\n {\n type: LayoutType.StackPanel,\n label: 'Stack panel',\n description: 'Stacks its children in one direction with a fixed spacing.',\n capabilities: { ...panelChildren, supportsGridSpan: false, convertibleTo: [LayoutType.WrapPanel, LayoutType.DockPanel] },\n properties: [...panelProperties, orientation, spacing('spacing', 'Spacing', 'Layout')],\n },\n {\n type: LayoutType.WrapPanel,\n label: 'Wrap panel',\n description: 'Lays children out along a line and wraps to the next when it is full.',\n capabilities: { ...panelChildren, supportsGridSpan: false, convertibleTo: [LayoutType.StackPanel, LayoutType.DockPanel] },\n properties: [\n ...panelProperties,\n orientation,\n { path: 'itemWidth', label: 'Item width', group: 'Layout', valueType: PropertyValueType.Number, constraints: { minimum: 0 } },\n { path: 'itemHeight', label: 'Item height', group: 'Layout', valueType: PropertyValueType.Number, constraints: { minimum: 0 } },\n ],\n },\n {\n type: LayoutType.DockPanel,\n label: 'Dock panel',\n description: 'Docks each child against an edge; the last child can fill what remains.',\n capabilities: { ...panelChildren, supportsGridSpan: false, convertibleTo: [LayoutType.StackPanel, LayoutType.WrapPanel] },\n properties: [\n ...panelProperties,\n { path: 'lastChildFill', label: 'Last child fills', group: 'Layout', valueType: PropertyValueType.Boolean, default: true },\n ],\n },\n {\n type: LayoutType.GridPanel,\n label: 'Grid panel',\n description: 'Positions children in rows and columns defined by the panel.',\n capabilities: { ...panelChildren, supportsGridSpan: true, convertibleTo: [] },\n properties: [\n ...panelProperties,\n { path: 'rows', label: 'Rows', group: 'Layout', valueType: PropertyValueType.Object, editorKind: 'gridDefinitions' },\n { path: 'columns', label: 'Columns', group: 'Layout', valueType: PropertyValueType.Object, editorKind: 'gridDefinitions' },\n ],\n },\n {\n type: LayoutType.Canvas,\n label: 'Canvas',\n description: 'Places each child at an absolute position.',\n capabilities: {\n acceptsChildren: true, childPlacement: LayoutChildPlacement.Positioned, supportsGridSpan: false,\n supportsSizeClassVariants: false, convertibleTo: [],\n },\n properties: [\n ...panelProperties,\n { path: 'extent', label: 'Extent', group: 'Layout', valueType: PropertyValueType.Object, editorKind: 'size' },\n ],\n },\n];\n\n/**\n * The editable properties of a placement within a freeform variant - an element's or a slot's position and size.\n */\nexport const placementProperties: PropertyDescriptor[] = [\n { path: 'x', label: 'Left', group: 'Placement', valueType: PropertyValueType.Number },\n { path: 'y', label: 'Top', group: 'Placement', valueType: PropertyValueType.Number },\n { path: 'width', label: 'Width', group: 'Placement', valueType: PropertyValueType.Number, constraints: { minimum: 0 } },\n { path: 'height', label: 'Height', group: 'Placement', valueType: PropertyValueType.Number, constraints: { minimum: 0 } },\n];\n\n/**\n * The editable properties of a screen template or dialog template itself.\n */\nexport const templateProperties: PropertyDescriptor[] = [\n { path: 'displayName', label: 'Display name', group: 'General', valueType: PropertyValueType.String },\n { path: 'description', label: 'Description', group: 'General', valueType: PropertyValueType.String },\n];\n"],"names":["choices","enumObject","Object","values","map","value","label","spacing","path","group","valueType","PropertyValueType","Number","default","constraints","minimum","flowNodeProperties","description","integer","flowContainerProperties","panelProperties","String","Enum","Visibility","Visible","Boolean","maximum","HorizontalAlignment","VerticalAlignment","orientation","Orientation","panelChildren","acceptsChildren","childPlacement","LayoutChildPlacement","Ordered","supportsSizeClassVariants","layoutTypeDescriptors","type","LayoutType","FlowRow","capabilities","supportsGridSpan","convertibleTo","FlowColumn","FlowGrid","properties","FlowLeaf","maximumChildren","None","FlowSlotLeaf","required","Freeform","Positioned","StackPanel","WrapPanel","DockPanel","GridPanel","editorKind","Canvas","placementProperties","templateProperties"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ChangeLayoutTypeEdit, SceneDiagnostic, SceneDocument } from '@cratis/scene.model';
2
+ import { EditSession } from './EditSession';
3
+ export declare function applyChangeLayoutType(session: EditSession, edit: ChangeLayoutTypeEdit, clone: SceneDocument, diagnostics: SceneDiagnostic[]): void;
4
+ //# sourceMappingURL=layoutTypeEdits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutTypeEdits.d.ts","sourceRoot":"","sources":["../../../editing/layoutTypeEdits.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,oBAAoB,EAA8D,eAAe,EAAE,aAAa,EAEnH,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA4E5C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,IAAI,CAgDlJ"}
@@ -0,0 +1,139 @@
1
+ import { LayoutType, FlowContainerKind, DiagnosticCode, SceneNodeKind, Orientation } from '@cratis/scene.model';
2
+ import { errorDiagnostic, warningDiagnostic } from './diagnostics.js';
3
+ import { findLayoutTypeDescriptor } from './DescriptorCatalog.js';
4
+ import { mirroredPaths, getAtPath } from './documentPaths.js';
5
+ import { cloneData } from './pathAccess.js';
6
+
7
+ // Copyright (c) Cratis. All rights reserved.
8
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
9
+ const flowKinds = {
10
+ [LayoutType.FlowRow]: FlowContainerKind.Row,
11
+ [LayoutType.FlowColumn]: FlowContainerKind.Column,
12
+ [LayoutType.FlowGrid]: FlowContainerKind.Grid
13
+ };
14
+ const panelOwnProperties = {
15
+ [LayoutType.StackPanel]: [
16
+ 'orientation',
17
+ 'spacing'
18
+ ],
19
+ [LayoutType.WrapPanel]: [
20
+ 'orientation',
21
+ 'itemWidth',
22
+ 'itemHeight'
23
+ ],
24
+ [LayoutType.DockPanel]: [
25
+ 'lastChildFill'
26
+ ]
27
+ };
28
+ const allPanelOwn = [
29
+ 'orientation',
30
+ 'spacing',
31
+ 'itemWidth',
32
+ 'itemHeight',
33
+ 'lastChildFill'
34
+ ];
35
+ function isSet(node, property) {
36
+ return node[property] !== undefined && !(property === 'spacing' && node[property] === 0);
37
+ }
38
+ function convertFlow(source, to) {
39
+ const result = cloneData(source);
40
+ const lost = [];
41
+ const target = flowKinds[to];
42
+ if (source.kind === FlowContainerKind.Grid && target !== FlowContainerKind.Grid) {
43
+ for (const property of [
44
+ 'columns',
45
+ 'rows'
46
+ ]){
47
+ if (source[property] !== undefined) lost.push(property);
48
+ delete result[property];
49
+ }
50
+ const spans = result.children.filter((child)=>child.span !== undefined);
51
+ if (spans.length > 0) lost.push('span (on children)');
52
+ for (const child of spans)delete child.span;
53
+ }
54
+ result.kind = target;
55
+ return {
56
+ result,
57
+ lost
58
+ };
59
+ }
60
+ function convertPanel(source, to) {
61
+ const result = cloneData(source);
62
+ const keep = panelOwnProperties[to] ?? [];
63
+ const lost = allPanelOwn.filter((property)=>!keep.includes(property) && isSet(source, property));
64
+ for (const property of allPanelOwn.filter((candidate)=>!keep.includes(candidate)))delete result[property];
65
+ if (to === LayoutType.StackPanel) {
66
+ result.orientation ??= Orientation.Vertical;
67
+ result.spacing ??= 0;
68
+ } else if (to === LayoutType.WrapPanel) {
69
+ result.orientation ??= Orientation.Horizontal;
70
+ } else {
71
+ result.lastChildFill ??= true;
72
+ }
73
+ return {
74
+ result,
75
+ lost
76
+ };
77
+ }
78
+ /**
79
+ * Applies a layout type change to a copy of the document.
80
+ *
81
+ * A change must be one the layout type allows. Changes that keep everything - row to column, a dock panel to a
82
+ * stack panel - go ahead. Changes that would drop real values, such as a grid's columns and spans when it becomes a
83
+ * row, are refused with the list of what would be lost unless the edit accepts the loss, and then go ahead with a
84
+ * warning that lists the same.
85
+ */ function applyChangeLayoutType(session, edit, clone, diagnostics) {
86
+ const record = session.index.nodes.get(edit.nodeId);
87
+ if (!record) {
88
+ diagnostics.push(errorDiagnostic(DiagnosticCode.UnknownNode, `There is no node '${edit.nodeId}'.`, {
89
+ nodeId: edit.nodeId
90
+ }));
91
+ return;
92
+ }
93
+ if (record.kind !== SceneNodeKind.FlowNode && record.kind !== SceneNodeKind.Element) {
94
+ diagnostics.push(errorDiagnostic(DiagnosticCode.NotALayoutNode, `'${record.label}' is not a layout node.`, {
95
+ nodeId: edit.nodeId
96
+ }));
97
+ return;
98
+ }
99
+ if (!session.isLocal(record)) {
100
+ diagnostics.push(errorDiagnostic(DiagnosticCode.NodeNotEditable, `'${edit.nodeId}' is inherited from '${session.sourceOf(record)}' and cannot be changed here.`, {
101
+ nodeId: edit.nodeId
102
+ }));
103
+ return;
104
+ }
105
+ const descriptor = findLayoutTypeDescriptor(session.context.catalog, record.typeId);
106
+ if (!descriptor) {
107
+ diagnostics.push(errorDiagnostic(DiagnosticCode.NotALayoutNode, `'${record.label}' is not a layout node.`, {
108
+ nodeId: edit.nodeId
109
+ }));
110
+ return;
111
+ }
112
+ if (!descriptor.capabilities.convertibleTo.includes(edit.to)) {
113
+ diagnostics.push(errorDiagnostic(DiagnosticCode.LayoutTypeNotConvertible, `A ${descriptor.label.toLowerCase()} cannot be changed into '${edit.to}'.`, {
114
+ nodeId: edit.nodeId
115
+ }));
116
+ return;
117
+ }
118
+ const isFlow = record.kind === SceneNodeKind.FlowNode;
119
+ const conversion = isFlow ? convertFlow(record.value, edit.to) : convertPanel(record.value, edit.to);
120
+ if (conversion.lost.length > 0) {
121
+ const lost = conversion.lost.join(', ');
122
+ if (!edit.acceptLoss) {
123
+ diagnostics.push(errorDiagnostic(DiagnosticCode.LossyConversionNotAccepted, `Changing to '${edit.to}' would drop ${lost}. Accept the loss to go ahead.`, {
124
+ nodeId: edit.nodeId
125
+ }));
126
+ return;
127
+ }
128
+ diagnostics.push(warningDiagnostic(DiagnosticCode.LossyConversion, `Changed to '${edit.to}'; dropped ${lost}.`, {
129
+ nodeId: edit.nodeId
130
+ }));
131
+ }
132
+ for (const path of mirroredPaths(record.mirror, record.path)){
133
+ const holder = getAtPath(clone, path.slice(0, -1));
134
+ holder[path[path.length - 1]] = cloneData(conversion.result);
135
+ }
136
+ }
137
+
138
+ export { applyChangeLayoutType };
139
+ //# sourceMappingURL=layoutTypeEdits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutTypeEdits.js","sources":["../../../editing/layoutTypeEdits.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport {\n ChangeLayoutTypeEdit, DiagnosticCode, FlowContainerKind, LayoutType, Orientation, SceneDiagnostic, SceneDocument,\n SceneNodeKind,\n} from '@cratis/scene.model';\nimport { errorDiagnostic, warningDiagnostic } from './diagnostics';\nimport { findLayoutTypeDescriptor } from './DescriptorCatalog';\nimport { getAtPath, mirroredPaths } from './documentPaths';\nimport { EditSession } from './EditSession';\nimport { cloneData } from './pathAccess';\n\ntype Node = Record<string, unknown>;\n\ninterface Conversion {\n result: Node;\n\n /** Properties that held a real value and are gone after the conversion. */\n lost: string[];\n}\n\nconst flowKinds: Partial<Record<LayoutType, FlowContainerKind>> = {\n [LayoutType.FlowRow]: FlowContainerKind.Row,\n [LayoutType.FlowColumn]: FlowContainerKind.Column,\n [LayoutType.FlowGrid]: FlowContainerKind.Grid,\n};\n\nconst panelOwnProperties: Partial<Record<LayoutType, string[]>> = {\n [LayoutType.StackPanel]: ['orientation', 'spacing'],\n [LayoutType.WrapPanel]: ['orientation', 'itemWidth', 'itemHeight'],\n [LayoutType.DockPanel]: ['lastChildFill'],\n};\n\nconst allPanelOwn = ['orientation', 'spacing', 'itemWidth', 'itemHeight', 'lastChildFill'];\n\nfunction isSet(node: Node, property: string): boolean {\n return node[property] !== undefined && !(property === 'spacing' && node[property] === 0);\n}\n\nfunction convertFlow(source: Node, to: LayoutType): Conversion {\n const result = cloneData(source);\n const lost: string[] = [];\n const target = flowKinds[to]!;\n\n if (source.kind === FlowContainerKind.Grid && target !== FlowContainerKind.Grid) {\n for (const property of ['columns', 'rows']) {\n if (source[property] !== undefined) lost.push(property);\n delete result[property];\n }\n\n const spans = (result.children as Node[]).filter(child => child.span !== undefined);\n if (spans.length > 0) lost.push('span (on children)');\n for (const child of spans) delete child.span;\n }\n\n result.kind = target;\n return { result, lost };\n}\n\nfunction convertPanel(source: Node, to: LayoutType): Conversion {\n const result = cloneData(source);\n const keep = panelOwnProperties[to] ?? [];\n const lost = allPanelOwn.filter(property => !keep.includes(property) && isSet(source, property));\n for (const property of allPanelOwn.filter(candidate => !keep.includes(candidate))) delete result[property];\n\n if (to === LayoutType.StackPanel) {\n result.orientation ??= Orientation.Vertical;\n result.spacing ??= 0;\n } else if (to === LayoutType.WrapPanel) {\n result.orientation ??= Orientation.Horizontal;\n } else {\n result.lastChildFill ??= true;\n }\n\n return { result, lost };\n}\n\n/**\n * Applies a layout type change to a copy of the document.\n *\n * A change must be one the layout type allows. Changes that keep everything - row to column, a dock panel to a\n * stack panel - go ahead. Changes that would drop real values, such as a grid's columns and spans when it becomes a\n * row, are refused with the list of what would be lost unless the edit accepts the loss, and then go ahead with a\n * warning that lists the same.\n */\nexport function applyChangeLayoutType(session: EditSession, edit: ChangeLayoutTypeEdit, clone: SceneDocument, diagnostics: SceneDiagnostic[]): void {\n const record = session.index.nodes.get(edit.nodeId);\n if (!record) {\n diagnostics.push(errorDiagnostic(DiagnosticCode.UnknownNode, `There is no node '${edit.nodeId}'.`, { nodeId: edit.nodeId }));\n return;\n }\n\n if (record.kind !== SceneNodeKind.FlowNode && record.kind !== SceneNodeKind.Element) {\n diagnostics.push(errorDiagnostic(DiagnosticCode.NotALayoutNode, `'${record.label}' is not a layout node.`, { nodeId: edit.nodeId }));\n return;\n }\n\n if (!session.isLocal(record)) {\n diagnostics.push(errorDiagnostic(DiagnosticCode.NodeNotEditable, `'${edit.nodeId}' is inherited from '${session.sourceOf(record)}' and cannot be changed here.`, { nodeId: edit.nodeId }));\n return;\n }\n\n const descriptor = findLayoutTypeDescriptor(session.context.catalog, record.typeId);\n if (!descriptor) {\n diagnostics.push(errorDiagnostic(DiagnosticCode.NotALayoutNode, `'${record.label}' is not a layout node.`, { nodeId: edit.nodeId }));\n return;\n }\n\n if (!descriptor.capabilities.convertibleTo.includes(edit.to as LayoutType)) {\n diagnostics.push(errorDiagnostic(DiagnosticCode.LayoutTypeNotConvertible, `A ${descriptor.label.toLowerCase()} cannot be changed into '${edit.to}'.`, { nodeId: edit.nodeId }));\n return;\n }\n\n const isFlow = record.kind === SceneNodeKind.FlowNode;\n const conversion = isFlow ? convertFlow(record.value as Node, edit.to as LayoutType) : convertPanel(record.value as Node, edit.to as LayoutType);\n\n if (conversion.lost.length > 0) {\n const lost = conversion.lost.join(', ');\n if (!edit.acceptLoss) {\n diagnostics.push(errorDiagnostic(\n DiagnosticCode.LossyConversionNotAccepted,\n `Changing to '${edit.to}' would drop ${lost}. Accept the loss to go ahead.`,\n { nodeId: edit.nodeId }));\n return;\n }\n\n diagnostics.push(warningDiagnostic(DiagnosticCode.LossyConversion, `Changed to '${edit.to}'; dropped ${lost}.`, { nodeId: edit.nodeId }));\n }\n\n for (const path of mirroredPaths(record.mirror, record.path)) {\n const holder = getAtPath(clone, path.slice(0, -1)) as Record<string | number, unknown>;\n holder[path[path.length - 1]] = cloneData(conversion.result);\n }\n}\n"],"names":["flowKinds","LayoutType","FlowRow","FlowContainerKind","Row","FlowColumn","Column","FlowGrid","Grid","panelOwnProperties","StackPanel","WrapPanel","DockPanel","allPanelOwn","isSet","node","property","undefined","convertFlow","source","to","result","cloneData","lost","target","kind","push","spans","children","filter","child","span","length","convertPanel","keep","includes","candidate","orientation","Orientation","Vertical","spacing","Horizontal","lastChildFill","applyChangeLayoutType","session","edit","clone","diagnostics","record","index","nodes","get","nodeId","errorDiagnostic","DiagnosticCode","UnknownNode","SceneNodeKind","FlowNode","Element","NotALayoutNode","label","isLocal","NodeNotEditable","sourceOf","descriptor","findLayoutTypeDescriptor","context","catalog","typeId","capabilities","convertibleTo","LayoutTypeNotConvertible","toLowerCase","isFlow","conversion","value","join","acceptLoss","LossyConversionNotAccepted","warningDiagnostic","LossyConversion","path","mirroredPaths","mirror","holder","getAtPath","slice"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { EditingScope } from '@cratis/scene.model';
2
+ export declare function layoutNodeId(name: string): string;
3
+ export declare function screenTemplateNodeId(name: string): string;
4
+ export declare function dialogTemplateNodeId(name: string): string;
5
+ export declare function screenNodeId(name: string): string;
6
+ export declare function slotNodeId(ownerNodeId: string, slotName: string): string;
7
+ export declare function elementNodeId(elementId: string): string;
8
+ export declare function ownerArrangementId(ownerNodeId: string): string;
9
+ export declare function flowNodeId(holderId: string, variant: string, indexPath: number[]): string;
10
+ export declare function freeformNodeId(holderId: string): string;
11
+ export declare function placementNodeId(holderId: string, variantIndex: number, key: string): string;
12
+ export declare function scopeNodeId(scope: EditingScope): string;
13
+ export declare function scopeInstanceId(scope: EditingScope): string;
14
+ //# sourceMappingURL=nodeIds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeIds.d.ts","sourceRoot":"","sources":["../../../editing/nodeIds.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAWrE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAKD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAKD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAKD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAKD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAMD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAKD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAUD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzF;AAKD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAKD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3F;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAOvD;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAO3D"}