@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,425 @@
1
+ 'use strict';
2
+
3
+ var scene_model = require('@cratis/scene.model');
4
+
5
+ // Copyright (c) Cratis. All rights reserved.
6
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
7
+ function choices(enumObject) {
8
+ return Object.values(enumObject).map((value)=>({
9
+ value,
10
+ label: value
11
+ }));
12
+ }
13
+ const spacing = (path, label, group)=>({
14
+ path,
15
+ label,
16
+ group,
17
+ valueType: scene_model.PropertyValueType.Number,
18
+ default: 0,
19
+ constraints: {
20
+ minimum: 0
21
+ }
22
+ });
23
+ const flowNodeProperties = [
24
+ {
25
+ path: 'grow',
26
+ label: 'Grow',
27
+ group: 'Layout',
28
+ valueType: scene_model.PropertyValueType.Number,
29
+ description: 'How much of the free space in its container this node takes, relative to its siblings.',
30
+ constraints: {
31
+ minimum: 0
32
+ }
33
+ },
34
+ {
35
+ path: 'span',
36
+ label: 'Span',
37
+ group: 'Layout',
38
+ valueType: scene_model.PropertyValueType.Number,
39
+ description: 'How many grid columns this node spans. Only meaningful inside a grid.',
40
+ constraints: {
41
+ minimum: 1,
42
+ integer: true
43
+ }
44
+ }
45
+ ];
46
+ const flowContainerProperties = [
47
+ spacing('gap', 'Gap', 'Layout'),
48
+ ...flowNodeProperties
49
+ ];
50
+ const panelProperties = [
51
+ {
52
+ path: 'name',
53
+ label: 'Name',
54
+ group: 'General',
55
+ valueType: scene_model.PropertyValueType.String
56
+ },
57
+ {
58
+ path: 'visibility',
59
+ label: 'Visibility',
60
+ group: 'General',
61
+ valueType: scene_model.PropertyValueType.Enum,
62
+ choices: choices(scene_model.Visibility),
63
+ default: scene_model.Visibility.Visible
64
+ },
65
+ {
66
+ path: 'isEnabled',
67
+ label: 'Enabled',
68
+ group: 'General',
69
+ valueType: scene_model.PropertyValueType.Boolean,
70
+ default: true
71
+ },
72
+ {
73
+ path: 'opacity',
74
+ label: 'Opacity',
75
+ group: 'General',
76
+ valueType: scene_model.PropertyValueType.Number,
77
+ default: 1,
78
+ constraints: {
79
+ minimum: 0,
80
+ maximum: 1
81
+ }
82
+ },
83
+ {
84
+ path: 'horizontalAlignment',
85
+ label: 'Horizontal alignment',
86
+ group: 'Layout',
87
+ valueType: scene_model.PropertyValueType.Enum,
88
+ choices: choices(scene_model.HorizontalAlignment)
89
+ },
90
+ {
91
+ path: 'verticalAlignment',
92
+ label: 'Vertical alignment',
93
+ group: 'Layout',
94
+ valueType: scene_model.PropertyValueType.Enum,
95
+ choices: choices(scene_model.VerticalAlignment)
96
+ },
97
+ {
98
+ path: 'zIndex',
99
+ label: 'Stacking order',
100
+ group: 'Layout',
101
+ valueType: scene_model.PropertyValueType.Number,
102
+ default: 0,
103
+ constraints: {
104
+ integer: true
105
+ }
106
+ }
107
+ ];
108
+ const orientation = {
109
+ path: 'orientation',
110
+ label: 'Orientation',
111
+ group: 'Layout',
112
+ valueType: scene_model.PropertyValueType.Enum,
113
+ choices: choices(scene_model.Orientation)
114
+ };
115
+ const panelChildren = {
116
+ acceptsChildren: true,
117
+ childPlacement: scene_model.LayoutChildPlacement.Ordered,
118
+ supportsSizeClassVariants: false
119
+ };
120
+ /**
121
+ * The layout type -> capability matrix, as data. Every {@link LayoutType} has exactly one entry; the
122
+ * documentation's matrix is this table.
123
+ */ const layoutTypeDescriptors = [
124
+ {
125
+ type: scene_model.LayoutType.FlowRow,
126
+ label: 'Row',
127
+ description: 'Reflows its children horizontally.',
128
+ capabilities: {
129
+ acceptsChildren: true,
130
+ childPlacement: scene_model.LayoutChildPlacement.Ordered,
131
+ supportsGridSpan: false,
132
+ supportsSizeClassVariants: true,
133
+ convertibleTo: [
134
+ scene_model.LayoutType.FlowColumn,
135
+ scene_model.LayoutType.FlowGrid
136
+ ]
137
+ },
138
+ properties: flowContainerProperties
139
+ },
140
+ {
141
+ type: scene_model.LayoutType.FlowColumn,
142
+ label: 'Column',
143
+ description: 'Reflows its children vertically.',
144
+ capabilities: {
145
+ acceptsChildren: true,
146
+ childPlacement: scene_model.LayoutChildPlacement.Ordered,
147
+ supportsGridSpan: false,
148
+ supportsSizeClassVariants: true,
149
+ convertibleTo: [
150
+ scene_model.LayoutType.FlowRow,
151
+ scene_model.LayoutType.FlowGrid
152
+ ]
153
+ },
154
+ properties: flowContainerProperties
155
+ },
156
+ {
157
+ type: scene_model.LayoutType.FlowGrid,
158
+ label: 'Grid',
159
+ description: 'Arranges its children in a grid; children can span columns.',
160
+ capabilities: {
161
+ acceptsChildren: true,
162
+ childPlacement: scene_model.LayoutChildPlacement.Ordered,
163
+ supportsGridSpan: true,
164
+ supportsSizeClassVariants: true,
165
+ convertibleTo: [
166
+ scene_model.LayoutType.FlowRow,
167
+ scene_model.LayoutType.FlowColumn
168
+ ]
169
+ },
170
+ properties: [
171
+ ...flowContainerProperties,
172
+ {
173
+ path: 'columns',
174
+ label: 'Columns',
175
+ group: 'Layout',
176
+ valueType: scene_model.PropertyValueType.Number,
177
+ constraints: {
178
+ minimum: 1,
179
+ integer: true
180
+ }
181
+ },
182
+ {
183
+ path: 'rows',
184
+ label: 'Rows',
185
+ group: 'Layout',
186
+ valueType: scene_model.PropertyValueType.Number,
187
+ constraints: {
188
+ minimum: 1,
189
+ integer: true
190
+ }
191
+ }
192
+ ]
193
+ },
194
+ {
195
+ type: scene_model.LayoutType.FlowLeaf,
196
+ label: 'Content',
197
+ description: 'Positions one element within a flow.',
198
+ capabilities: {
199
+ acceptsChildren: false,
200
+ maximumChildren: 1,
201
+ childPlacement: scene_model.LayoutChildPlacement.None,
202
+ supportsGridSpan: true,
203
+ supportsSizeClassVariants: false,
204
+ convertibleTo: []
205
+ },
206
+ properties: flowNodeProperties
207
+ },
208
+ {
209
+ type: scene_model.LayoutType.FlowSlotLeaf,
210
+ label: 'Slot',
211
+ description: 'Positions one of the layout\'s own named slots within its arrangement.',
212
+ capabilities: {
213
+ acceptsChildren: false,
214
+ childPlacement: scene_model.LayoutChildPlacement.None,
215
+ supportsGridSpan: true,
216
+ supportsSizeClassVariants: false,
217
+ convertibleTo: []
218
+ },
219
+ properties: [
220
+ {
221
+ path: 'slotName',
222
+ label: 'Slot',
223
+ group: 'Layout',
224
+ valueType: scene_model.PropertyValueType.String,
225
+ constraints: {
226
+ required: true
227
+ }
228
+ },
229
+ ...flowNodeProperties
230
+ ]
231
+ },
232
+ {
233
+ type: scene_model.LayoutType.Freeform,
234
+ label: 'Freeform',
235
+ description: 'Places each child at its own position and size, one variant per size class.',
236
+ capabilities: {
237
+ acceptsChildren: true,
238
+ childPlacement: scene_model.LayoutChildPlacement.Positioned,
239
+ supportsGridSpan: false,
240
+ supportsSizeClassVariants: true,
241
+ convertibleTo: []
242
+ },
243
+ properties: []
244
+ },
245
+ {
246
+ type: scene_model.LayoutType.StackPanel,
247
+ label: 'Stack panel',
248
+ description: 'Stacks its children in one direction with a fixed spacing.',
249
+ capabilities: {
250
+ ...panelChildren,
251
+ supportsGridSpan: false,
252
+ convertibleTo: [
253
+ scene_model.LayoutType.WrapPanel,
254
+ scene_model.LayoutType.DockPanel
255
+ ]
256
+ },
257
+ properties: [
258
+ ...panelProperties,
259
+ orientation,
260
+ spacing('spacing', 'Spacing', 'Layout')
261
+ ]
262
+ },
263
+ {
264
+ type: scene_model.LayoutType.WrapPanel,
265
+ label: 'Wrap panel',
266
+ description: 'Lays children out along a line and wraps to the next when it is full.',
267
+ capabilities: {
268
+ ...panelChildren,
269
+ supportsGridSpan: false,
270
+ convertibleTo: [
271
+ scene_model.LayoutType.StackPanel,
272
+ scene_model.LayoutType.DockPanel
273
+ ]
274
+ },
275
+ properties: [
276
+ ...panelProperties,
277
+ orientation,
278
+ {
279
+ path: 'itemWidth',
280
+ label: 'Item width',
281
+ group: 'Layout',
282
+ valueType: scene_model.PropertyValueType.Number,
283
+ constraints: {
284
+ minimum: 0
285
+ }
286
+ },
287
+ {
288
+ path: 'itemHeight',
289
+ label: 'Item height',
290
+ group: 'Layout',
291
+ valueType: scene_model.PropertyValueType.Number,
292
+ constraints: {
293
+ minimum: 0
294
+ }
295
+ }
296
+ ]
297
+ },
298
+ {
299
+ type: scene_model.LayoutType.DockPanel,
300
+ label: 'Dock panel',
301
+ description: 'Docks each child against an edge; the last child can fill what remains.',
302
+ capabilities: {
303
+ ...panelChildren,
304
+ supportsGridSpan: false,
305
+ convertibleTo: [
306
+ scene_model.LayoutType.StackPanel,
307
+ scene_model.LayoutType.WrapPanel
308
+ ]
309
+ },
310
+ properties: [
311
+ ...panelProperties,
312
+ {
313
+ path: 'lastChildFill',
314
+ label: 'Last child fills',
315
+ group: 'Layout',
316
+ valueType: scene_model.PropertyValueType.Boolean,
317
+ default: true
318
+ }
319
+ ]
320
+ },
321
+ {
322
+ type: scene_model.LayoutType.GridPanel,
323
+ label: 'Grid panel',
324
+ description: 'Positions children in rows and columns defined by the panel.',
325
+ capabilities: {
326
+ ...panelChildren,
327
+ supportsGridSpan: true,
328
+ convertibleTo: []
329
+ },
330
+ properties: [
331
+ ...panelProperties,
332
+ {
333
+ path: 'rows',
334
+ label: 'Rows',
335
+ group: 'Layout',
336
+ valueType: scene_model.PropertyValueType.Object,
337
+ editorKind: 'gridDefinitions'
338
+ },
339
+ {
340
+ path: 'columns',
341
+ label: 'Columns',
342
+ group: 'Layout',
343
+ valueType: scene_model.PropertyValueType.Object,
344
+ editorKind: 'gridDefinitions'
345
+ }
346
+ ]
347
+ },
348
+ {
349
+ type: scene_model.LayoutType.Canvas,
350
+ label: 'Canvas',
351
+ description: 'Places each child at an absolute position.',
352
+ capabilities: {
353
+ acceptsChildren: true,
354
+ childPlacement: scene_model.LayoutChildPlacement.Positioned,
355
+ supportsGridSpan: false,
356
+ supportsSizeClassVariants: false,
357
+ convertibleTo: []
358
+ },
359
+ properties: [
360
+ ...panelProperties,
361
+ {
362
+ path: 'extent',
363
+ label: 'Extent',
364
+ group: 'Layout',
365
+ valueType: scene_model.PropertyValueType.Object,
366
+ editorKind: 'size'
367
+ }
368
+ ]
369
+ }
370
+ ];
371
+ /**
372
+ * The editable properties of a placement within a freeform variant - an element's or a slot's position and size.
373
+ */ const placementProperties = [
374
+ {
375
+ path: 'x',
376
+ label: 'Left',
377
+ group: 'Placement',
378
+ valueType: scene_model.PropertyValueType.Number
379
+ },
380
+ {
381
+ path: 'y',
382
+ label: 'Top',
383
+ group: 'Placement',
384
+ valueType: scene_model.PropertyValueType.Number
385
+ },
386
+ {
387
+ path: 'width',
388
+ label: 'Width',
389
+ group: 'Placement',
390
+ valueType: scene_model.PropertyValueType.Number,
391
+ constraints: {
392
+ minimum: 0
393
+ }
394
+ },
395
+ {
396
+ path: 'height',
397
+ label: 'Height',
398
+ group: 'Placement',
399
+ valueType: scene_model.PropertyValueType.Number,
400
+ constraints: {
401
+ minimum: 0
402
+ }
403
+ }
404
+ ];
405
+ /**
406
+ * The editable properties of a screen template or dialog template itself.
407
+ */ const templateProperties = [
408
+ {
409
+ path: 'displayName',
410
+ label: 'Display name',
411
+ group: 'General',
412
+ valueType: scene_model.PropertyValueType.String
413
+ },
414
+ {
415
+ path: 'description',
416
+ label: 'Description',
417
+ group: 'General',
418
+ valueType: scene_model.PropertyValueType.String
419
+ }
420
+ ];
421
+
422
+ exports.layoutTypeDescriptors = layoutTypeDescriptors;
423
+ exports.placementProperties = placementProperties;
424
+ exports.templateProperties = templateProperties;
425
+ //# 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":";;;;AAAA;AACA;AAOA,SAASA,QAAQC,UAAkC,EAAA;IAC/C,OAAOC,MAAAA,CAAOC,MAAM,CAACF,UAAAA,CAAAA,CAAYG,GAAG,CAACC,CAAAA,SAAU;AAAEA,YAAAA,KAAAA;YAAOC,KAAAA,EAAOD;SAAM,CAAA,CAAA;AACzE;AAEA,MAAME,OAAAA,GAAU,CAACC,IAAAA,EAAcF,KAAAA,EAAeG,SAAuC;AACjFD,QAAAA,IAAAA;AAAMF,QAAAA,KAAAA;AAAOG,QAAAA,KAAAA;AAAOC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QAAEC,OAAAA,EAAS,CAAA;QAAGC,WAAAA,EAAa;YAAEC,OAAAA,EAAS;AAAE;KACnG,CAAA;AAEA,MAAMC,kBAAAA,GAA2C;AAC7C,IAAA;QACIR,IAAAA,EAAM,MAAA;QAAQF,KAAAA,EAAO,MAAA;QAAQG,KAAAA,EAAO,QAAA;AAAUC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QACjFK,WAAAA,EAAa,wFAAA;QACbH,WAAAA,EAAa;YAAEC,OAAAA,EAAS;AAAE;AAC9B,KAAA;AACA,IAAA;QACIP,IAAAA,EAAM,MAAA;QAAQF,KAAAA,EAAO,MAAA;QAAQG,KAAAA,EAAO,QAAA;AAAUC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QACjFK,WAAAA,EAAa,uEAAA;QACbH,WAAAA,EAAa;YAAEC,OAAAA,EAAS,CAAA;YAAGG,OAAAA,EAAS;AAAK;AAC7C;AACH,CAAA;AAED,MAAMC,uBAAAA,GAAgD;AAACZ,IAAAA,OAAAA,CAAQ,OAAO,KAAA,EAAO,QAAA,CAAA;AAAcS,IAAAA,GAAAA;AAAmB,CAAA;AAE9G,MAAMI,eAAAA,GAAwC;AAC1C,IAAA;QAAEZ,IAAAA,EAAM,MAAA;QAAQF,KAAAA,EAAO,MAAA;QAAQG,KAAAA,EAAO,SAAA;AAAWC,QAAAA,SAAAA,EAAWC,8BAAkBU;AAAO,KAAA;AACrF,IAAA;QAAEb,IAAAA,EAAM,YAAA;QAAcF,KAAAA,EAAO,YAAA;QAAcG,KAAAA,EAAO,SAAA;AAAWC,QAAAA,SAAAA,EAAWC,8BAAkBW,IAAI;AAAEtB,QAAAA,OAAAA,EAASA,OAAAA,CAAQuB,sBAAAA,CAAAA;AAAaV,QAAAA,OAAAA,EAASU,uBAAWC;AAAQ,KAAA;AAC1J,IAAA;QAAEhB,IAAAA,EAAM,WAAA;QAAaF,KAAAA,EAAO,SAAA;QAAWG,KAAAA,EAAO,SAAA;AAAWC,QAAAA,SAAAA,EAAWC,8BAAkBc,OAAO;QAAEZ,OAAAA,EAAS;AAAK,KAAA;AAC7G,IAAA;QAAEL,IAAAA,EAAM,SAAA;QAAWF,KAAAA,EAAO,SAAA;QAAWG,KAAAA,EAAO,SAAA;AAAWC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QAAEC,OAAAA,EAAS,CAAA;QAAGC,WAAAA,EAAa;YAAEC,OAAAA,EAAS,CAAA;YAAGW,OAAAA,EAAS;AAAE;AAAE,KAAA;AAChJ,IAAA;QAAElB,IAAAA,EAAM,qBAAA;QAAuBF,KAAAA,EAAO,sBAAA;QAAwBG,KAAAA,EAAO,QAAA;AAAUC,QAAAA,SAAAA,EAAWC,8BAAkBW,IAAI;AAAEtB,QAAAA,OAAAA,EAASA,OAAAA,CAAQ2B,+BAAAA;AAAqB,KAAA;AACxJ,IAAA;QAAEnB,IAAAA,EAAM,mBAAA;QAAqBF,KAAAA,EAAO,oBAAA;QAAsBG,KAAAA,EAAO,QAAA;AAAUC,QAAAA,SAAAA,EAAWC,8BAAkBW,IAAI;AAAEtB,QAAAA,OAAAA,EAASA,OAAAA,CAAQ4B,6BAAAA;AAAmB,KAAA;AAClJ,IAAA;QAAEpB,IAAAA,EAAM,QAAA;QAAUF,KAAAA,EAAO,gBAAA;QAAkBG,KAAAA,EAAO,QAAA;AAAUC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QAAEC,OAAAA,EAAS,CAAA;QAAGC,WAAAA,EAAa;YAAEI,OAAAA,EAAS;AAAK;AAAE;AAC/I,CAAA;AAED,MAAMW,WAAAA,GAAkC;IACpCrB,IAAAA,EAAM,aAAA;IAAeF,KAAAA,EAAO,aAAA;IAAeG,KAAAA,EAAO,QAAA;AAAUC,IAAAA,SAAAA,EAAWC,8BAAkBW,IAAI;AAAEtB,IAAAA,OAAAA,EAASA,OAAAA,CAAQ8B,uBAAAA;AACpH,CAAA;AAEA,MAAMC,aAAAA,GAAgB;IAAEC,eAAAA,EAAiB,IAAA;AAAMC,IAAAA,cAAAA,EAAgBC,iCAAqBC,OAAO;IAAEC,yBAAAA,EAA2B;AAAM,CAAA;AAE9H;;;UAIaC,qBAAAA,GAAgD;AACzD,IAAA;AACIC,QAAAA,IAAAA,EAAMC,uBAAWC,OAAO;QACxBlC,KAAAA,EAAO,KAAA;QACPW,WAAAA,EAAa,oCAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,IAAA;AAAMC,YAAAA,cAAAA,EAAgBC,iCAAqBC,OAAO;YAAEO,gBAAAA,EAAkB,KAAA;YACvFN,yBAAAA,EAA2B,IAAA;YAAMO,aAAAA,EAAe;AAACJ,gBAAAA,sBAAAA,CAAWK,UAAU;AAAEL,gBAAAA,sBAAAA,CAAWM;AAAS;AAChG,SAAA;QACAC,UAAAA,EAAY3B;AAChB,KAAA;AACA,IAAA;AACImB,QAAAA,IAAAA,EAAMC,uBAAWK,UAAU;QAC3BtC,KAAAA,EAAO,QAAA;QACPW,WAAAA,EAAa,kCAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,IAAA;AAAMC,YAAAA,cAAAA,EAAgBC,iCAAqBC,OAAO;YAAEO,gBAAAA,EAAkB,KAAA;YACvFN,yBAAAA,EAA2B,IAAA;YAAMO,aAAAA,EAAe;AAACJ,gBAAAA,sBAAAA,CAAWC,OAAO;AAAED,gBAAAA,sBAAAA,CAAWM;AAAS;AAC7F,SAAA;QACAC,UAAAA,EAAY3B;AAChB,KAAA;AACA,IAAA;AACImB,QAAAA,IAAAA,EAAMC,uBAAWM,QAAQ;QACzBvC,KAAAA,EAAO,MAAA;QACPW,WAAAA,EAAa,6DAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,IAAA;AAAMC,YAAAA,cAAAA,EAAgBC,iCAAqBC,OAAO;YAAEO,gBAAAA,EAAkB,IAAA;YACvFN,yBAAAA,EAA2B,IAAA;YAAMO,aAAAA,EAAe;AAACJ,gBAAAA,sBAAAA,CAAWC,OAAO;AAAED,gBAAAA,sBAAAA,CAAWK;AAAW;AAC/F,SAAA;QACAE,UAAAA,EAAY;AACL3B,YAAAA,GAAAA,uBAAAA;AACH,YAAA;gBAAEX,IAAAA,EAAM,SAAA;gBAAWF,KAAAA,EAAO,SAAA;gBAAWG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;gBAAEE,WAAAA,EAAa;oBAAEC,OAAAA,EAAS,CAAA;oBAAGG,OAAAA,EAAS;AAAK;AAAE,aAAA;AACtI,YAAA;gBAAEV,IAAAA,EAAM,MAAA;gBAAQF,KAAAA,EAAO,MAAA;gBAAQG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;gBAAEE,WAAAA,EAAa;oBAAEC,OAAAA,EAAS,CAAA;oBAAGG,OAAAA,EAAS;AAAK;AAAE;AACnI;AACL,KAAA;AACA,IAAA;AACIoB,QAAAA,IAAAA,EAAMC,uBAAWQ,QAAQ;QACzBzC,KAAAA,EAAO,SAAA;QACPW,WAAAA,EAAa,sCAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,KAAA;YAAOgB,eAAAA,EAAiB,CAAA;AAAGf,YAAAA,cAAAA,EAAgBC,iCAAqBe,IAAI;YAAEP,gBAAAA,EAAkB,IAAA;YACzGN,yBAAAA,EAA2B,KAAA;AAAOO,YAAAA,aAAAA,EAAe;AACrD,SAAA;QACAG,UAAAA,EAAY9B;AAChB,KAAA;AACA,IAAA;AACIsB,QAAAA,IAAAA,EAAMC,uBAAWW,YAAY;QAC7B5C,KAAAA,EAAO,MAAA;QACPW,WAAAA,EAAa,wEAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,KAAA;AAAOC,YAAAA,cAAAA,EAAgBC,iCAAqBe,IAAI;YAAEP,gBAAAA,EAAkB,IAAA;YACrFN,yBAAAA,EAA2B,KAAA;AAAOO,YAAAA,aAAAA,EAAe;AACrD,SAAA;QACAG,UAAAA,EAAY;AACR,YAAA;gBAAEtC,IAAAA,EAAM,UAAA;gBAAYF,KAAAA,EAAO,MAAA;gBAAQG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBU,MAAM;gBAAEP,WAAAA,EAAa;oBAAEqC,QAAAA,EAAU;AAAK;AAAE,aAAA;AACtHnC,YAAAA,GAAAA;AACN;AACL,KAAA;AACA,IAAA;AACIsB,QAAAA,IAAAA,EAAMC,uBAAWa,QAAQ;QACzB9C,KAAAA,EAAO,UAAA;QACPW,WAAAA,EAAa,6EAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,IAAA;AAAMC,YAAAA,cAAAA,EAAgBC,iCAAqBmB,UAAU;YAAEX,gBAAAA,EAAkB,KAAA;YAC1FN,yBAAAA,EAA2B,IAAA;AAAMO,YAAAA,aAAAA,EAAe;AACpD,SAAA;AACAG,QAAAA,UAAAA,EAAY;AAChB,KAAA;AACA,IAAA;AACIR,QAAAA,IAAAA,EAAMC,uBAAWe,UAAU;QAC3BhD,KAAAA,EAAO,aAAA;QACPW,WAAAA,EAAa,4DAAA;QACbwB,YAAAA,EAAc;AAAE,YAAA,GAAGV,aAAa;YAAEW,gBAAAA,EAAkB,KAAA;YAAOC,aAAAA,EAAe;AAACJ,gBAAAA,sBAAAA,CAAWgB,SAAS;AAAEhB,gBAAAA,sBAAAA,CAAWiB;AAAU;AAAC,SAAA;QACvHV,UAAAA,EAAY;AAAI1B,YAAAA,GAAAA,eAAAA;AAAiBS,YAAAA,WAAAA;AAAatB,YAAAA,OAAAA,CAAQ,WAAW,SAAA,EAAW,QAAA;AAAU;AAC1F,KAAA;AACA,IAAA;AACI+B,QAAAA,IAAAA,EAAMC,uBAAWgB,SAAS;QAC1BjD,KAAAA,EAAO,YAAA;QACPW,WAAAA,EAAa,uEAAA;QACbwB,YAAAA,EAAc;AAAE,YAAA,GAAGV,aAAa;YAAEW,gBAAAA,EAAkB,KAAA;YAAOC,aAAAA,EAAe;AAACJ,gBAAAA,sBAAAA,CAAWe,UAAU;AAAEf,gBAAAA,sBAAAA,CAAWiB;AAAU;AAAC,SAAA;QACxHV,UAAAA,EAAY;AACL1B,YAAAA,GAAAA,eAAAA;AACHS,YAAAA,WAAAA;AACA,YAAA;gBAAErB,IAAAA,EAAM,WAAA;gBAAaF,KAAAA,EAAO,YAAA;gBAAcG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;gBAAEE,WAAAA,EAAa;oBAAEC,OAAAA,EAAS;AAAE;AAAE,aAAA;AAC5H,YAAA;gBAAEP,IAAAA,EAAM,YAAA;gBAAcF,KAAAA,EAAO,aAAA;gBAAeG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;gBAAEE,WAAAA,EAAa;oBAAEC,OAAAA,EAAS;AAAE;AAAE;AACjI;AACL,KAAA;AACA,IAAA;AACIuB,QAAAA,IAAAA,EAAMC,uBAAWiB,SAAS;QAC1BlD,KAAAA,EAAO,YAAA;QACPW,WAAAA,EAAa,yEAAA;QACbwB,YAAAA,EAAc;AAAE,YAAA,GAAGV,aAAa;YAAEW,gBAAAA,EAAkB,KAAA;YAAOC,aAAAA,EAAe;AAACJ,gBAAAA,sBAAAA,CAAWe,UAAU;AAAEf,gBAAAA,sBAAAA,CAAWgB;AAAU;AAAC,SAAA;QACxHT,UAAAA,EAAY;AACL1B,YAAAA,GAAAA,eAAAA;AACH,YAAA;gBAAEZ,IAAAA,EAAM,eAAA;gBAAiBF,KAAAA,EAAO,kBAAA;gBAAoBG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBc,OAAO;gBAAEZ,OAAAA,EAAS;AAAK;AAC5H;AACL,KAAA;AACA,IAAA;AACIyB,QAAAA,IAAAA,EAAMC,uBAAWkB,SAAS;QAC1BnD,KAAAA,EAAO,YAAA;QACPW,WAAAA,EAAa,8DAAA;QACbwB,YAAAA,EAAc;AAAE,YAAA,GAAGV,aAAa;YAAEW,gBAAAA,EAAkB,IAAA;AAAMC,YAAAA,aAAAA,EAAe;AAAG,SAAA;QAC5EG,UAAAA,EAAY;AACL1B,YAAAA,GAAAA,eAAAA;AACH,YAAA;gBAAEZ,IAAAA,EAAM,MAAA;gBAAQF,KAAAA,EAAO,MAAA;gBAAQG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBT,MAAM;gBAAEwD,UAAAA,EAAY;AAAkB,aAAA;AACnH,YAAA;gBAAElD,IAAAA,EAAM,SAAA;gBAAWF,KAAAA,EAAO,SAAA;gBAAWG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBT,MAAM;gBAAEwD,UAAAA,EAAY;AAAkB;AAC5H;AACL,KAAA;AACA,IAAA;AACIpB,QAAAA,IAAAA,EAAMC,uBAAWoB,MAAM;QACvBrD,KAAAA,EAAO,QAAA;QACPW,WAAAA,EAAa,4CAAA;QACbwB,YAAAA,EAAc;YACVT,eAAAA,EAAiB,IAAA;AAAMC,YAAAA,cAAAA,EAAgBC,iCAAqBmB,UAAU;YAAEX,gBAAAA,EAAkB,KAAA;YAC1FN,yBAAAA,EAA2B,KAAA;AAAOO,YAAAA,aAAAA,EAAe;AACrD,SAAA;QACAG,UAAAA,EAAY;AACL1B,YAAAA,GAAAA,eAAAA;AACH,YAAA;gBAAEZ,IAAAA,EAAM,QAAA;gBAAUF,KAAAA,EAAO,QAAA;gBAAUG,KAAAA,EAAO,QAAA;AAAUC,gBAAAA,SAAAA,EAAWC,8BAAkBT,MAAM;gBAAEwD,UAAAA,EAAY;AAAO;AAC/G;AACL;;AAGJ;;UAGaE,mBAAAA,GAA4C;AACrD,IAAA;QAAEpD,IAAAA,EAAM,GAAA;QAAKF,KAAAA,EAAO,MAAA;QAAQG,KAAAA,EAAO,WAAA;AAAaC,QAAAA,SAAAA,EAAWC,8BAAkBC;AAAO,KAAA;AACpF,IAAA;QAAEJ,IAAAA,EAAM,GAAA;QAAKF,KAAAA,EAAO,KAAA;QAAOG,KAAAA,EAAO,WAAA;AAAaC,QAAAA,SAAAA,EAAWC,8BAAkBC;AAAO,KAAA;AACnF,IAAA;QAAEJ,IAAAA,EAAM,OAAA;QAASF,KAAAA,EAAO,OAAA;QAASG,KAAAA,EAAO,WAAA;AAAaC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QAAEE,WAAAA,EAAa;YAAEC,OAAAA,EAAS;AAAE;AAAE,KAAA;AACtH,IAAA;QAAEP,IAAAA,EAAM,QAAA;QAAUF,KAAAA,EAAO,QAAA;QAAUG,KAAAA,EAAO,WAAA;AAAaC,QAAAA,SAAAA,EAAWC,8BAAkBC,MAAM;QAAEE,WAAAA,EAAa;YAAEC,OAAAA,EAAS;AAAE;AAAE;;AAG5H;;UAGa8C,kBAAAA,GAA2C;AACpD,IAAA;QAAErD,IAAAA,EAAM,aAAA;QAAeF,KAAAA,EAAO,cAAA;QAAgBG,KAAAA,EAAO,SAAA;AAAWC,QAAAA,SAAAA,EAAWC,8BAAkBU;AAAO,KAAA;AACpG,IAAA;QAAEb,IAAAA,EAAM,aAAA;QAAeF,KAAAA,EAAO,aAAA;QAAeG,KAAAA,EAAO,SAAA;AAAWC,QAAAA,SAAAA,EAAWC,8BAAkBU;AAAO;;;;;"}
@@ -0,0 +1,141 @@
1
+ 'use strict';
2
+
3
+ var scene_model = require('@cratis/scene.model');
4
+ var diagnostics = require('./diagnostics.js');
5
+ var DescriptorCatalog = require('./DescriptorCatalog.js');
6
+ var documentPaths = require('./documentPaths.js');
7
+ var pathAccess = require('./pathAccess.js');
8
+
9
+ // Copyright (c) Cratis. All rights reserved.
10
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
11
+ const flowKinds = {
12
+ [scene_model.LayoutType.FlowRow]: scene_model.FlowContainerKind.Row,
13
+ [scene_model.LayoutType.FlowColumn]: scene_model.FlowContainerKind.Column,
14
+ [scene_model.LayoutType.FlowGrid]: scene_model.FlowContainerKind.Grid
15
+ };
16
+ const panelOwnProperties = {
17
+ [scene_model.LayoutType.StackPanel]: [
18
+ 'orientation',
19
+ 'spacing'
20
+ ],
21
+ [scene_model.LayoutType.WrapPanel]: [
22
+ 'orientation',
23
+ 'itemWidth',
24
+ 'itemHeight'
25
+ ],
26
+ [scene_model.LayoutType.DockPanel]: [
27
+ 'lastChildFill'
28
+ ]
29
+ };
30
+ const allPanelOwn = [
31
+ 'orientation',
32
+ 'spacing',
33
+ 'itemWidth',
34
+ 'itemHeight',
35
+ 'lastChildFill'
36
+ ];
37
+ function isSet(node, property) {
38
+ return node[property] !== undefined && !(property === 'spacing' && node[property] === 0);
39
+ }
40
+ function convertFlow(source, to) {
41
+ const result = pathAccess.cloneData(source);
42
+ const lost = [];
43
+ const target = flowKinds[to];
44
+ if (source.kind === scene_model.FlowContainerKind.Grid && target !== scene_model.FlowContainerKind.Grid) {
45
+ for (const property of [
46
+ 'columns',
47
+ 'rows'
48
+ ]){
49
+ if (source[property] !== undefined) lost.push(property);
50
+ delete result[property];
51
+ }
52
+ const spans = result.children.filter((child)=>child.span !== undefined);
53
+ if (spans.length > 0) lost.push('span (on children)');
54
+ for (const child of spans)delete child.span;
55
+ }
56
+ result.kind = target;
57
+ return {
58
+ result,
59
+ lost
60
+ };
61
+ }
62
+ function convertPanel(source, to) {
63
+ const result = pathAccess.cloneData(source);
64
+ const keep = panelOwnProperties[to] ?? [];
65
+ const lost = allPanelOwn.filter((property)=>!keep.includes(property) && isSet(source, property));
66
+ for (const property of allPanelOwn.filter((candidate)=>!keep.includes(candidate)))delete result[property];
67
+ if (to === scene_model.LayoutType.StackPanel) {
68
+ result.orientation ??= scene_model.Orientation.Vertical;
69
+ result.spacing ??= 0;
70
+ } else if (to === scene_model.LayoutType.WrapPanel) {
71
+ result.orientation ??= scene_model.Orientation.Horizontal;
72
+ } else {
73
+ result.lastChildFill ??= true;
74
+ }
75
+ return {
76
+ result,
77
+ lost
78
+ };
79
+ }
80
+ /**
81
+ * Applies a layout type change to a copy of the document.
82
+ *
83
+ * A change must be one the layout type allows. Changes that keep everything - row to column, a dock panel to a
84
+ * stack panel - go ahead. Changes that would drop real values, such as a grid's columns and spans when it becomes a
85
+ * row, are refused with the list of what would be lost unless the edit accepts the loss, and then go ahead with a
86
+ * warning that lists the same.
87
+ */ function applyChangeLayoutType(session, edit, clone, diagnostics$1) {
88
+ const record = session.index.nodes.get(edit.nodeId);
89
+ if (!record) {
90
+ diagnostics$1.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.UnknownNode, `There is no node '${edit.nodeId}'.`, {
91
+ nodeId: edit.nodeId
92
+ }));
93
+ return;
94
+ }
95
+ if (record.kind !== scene_model.SceneNodeKind.FlowNode && record.kind !== scene_model.SceneNodeKind.Element) {
96
+ diagnostics$1.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.NotALayoutNode, `'${record.label}' is not a layout node.`, {
97
+ nodeId: edit.nodeId
98
+ }));
99
+ return;
100
+ }
101
+ if (!session.isLocal(record)) {
102
+ diagnostics$1.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.NodeNotEditable, `'${edit.nodeId}' is inherited from '${session.sourceOf(record)}' and cannot be changed here.`, {
103
+ nodeId: edit.nodeId
104
+ }));
105
+ return;
106
+ }
107
+ const descriptor = DescriptorCatalog.findLayoutTypeDescriptor(session.context.catalog, record.typeId);
108
+ if (!descriptor) {
109
+ diagnostics$1.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.NotALayoutNode, `'${record.label}' is not a layout node.`, {
110
+ nodeId: edit.nodeId
111
+ }));
112
+ return;
113
+ }
114
+ if (!descriptor.capabilities.convertibleTo.includes(edit.to)) {
115
+ diagnostics$1.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.LayoutTypeNotConvertible, `A ${descriptor.label.toLowerCase()} cannot be changed into '${edit.to}'.`, {
116
+ nodeId: edit.nodeId
117
+ }));
118
+ return;
119
+ }
120
+ const isFlow = record.kind === scene_model.SceneNodeKind.FlowNode;
121
+ const conversion = isFlow ? convertFlow(record.value, edit.to) : convertPanel(record.value, edit.to);
122
+ if (conversion.lost.length > 0) {
123
+ const lost = conversion.lost.join(', ');
124
+ if (!edit.acceptLoss) {
125
+ diagnostics$1.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.LossyConversionNotAccepted, `Changing to '${edit.to}' would drop ${lost}. Accept the loss to go ahead.`, {
126
+ nodeId: edit.nodeId
127
+ }));
128
+ return;
129
+ }
130
+ diagnostics$1.push(diagnostics.warningDiagnostic(scene_model.DiagnosticCode.LossyConversion, `Changed to '${edit.to}'; dropped ${lost}.`, {
131
+ nodeId: edit.nodeId
132
+ }));
133
+ }
134
+ for (const path of documentPaths.mirroredPaths(record.mirror, record.path)){
135
+ const holder = documentPaths.getAtPath(clone, path.slice(0, -1));
136
+ holder[path[path.length - 1]] = pathAccess.cloneData(conversion.result);
137
+ }
138
+ }
139
+
140
+ exports.applyChangeLayoutType = applyChangeLayoutType;
141
+ //# 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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"}