@cratis/scene.engine 4.2.1 → 4.4.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 (311) 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/collectIconUsages.js +86 -0
  12. package/dist/cjs/editing/collectIconUsages.js.map +1 -0
  13. package/dist/cjs/editing/describeNode.js +63 -0
  14. package/dist/cjs/editing/describeNode.js.map +1 -0
  15. package/dist/cjs/editing/diagnoseIcons.js +67 -0
  16. package/dist/cjs/editing/diagnoseIcons.js.map +1 -0
  17. package/dist/cjs/editing/diagnostics.js +36 -0
  18. package/dist/cjs/editing/diagnostics.js.map +1 -0
  19. package/dist/cjs/editing/documentPaths.js +45 -0
  20. package/dist/cjs/editing/documentPaths.js.map +1 -0
  21. package/dist/cjs/editing/exposureEdits.js +106 -0
  22. package/dist/cjs/editing/exposureEdits.js.map +1 -0
  23. package/dist/cjs/editing/exposureGrants.js +115 -0
  24. package/dist/cjs/editing/exposureGrants.js.map +1 -0
  25. package/dist/cjs/editing/iconDiagnostics.js +103 -0
  26. package/dist/cjs/editing/iconDiagnostics.js.map +1 -0
  27. package/dist/cjs/editing/indexDocument.js +400 -0
  28. package/dist/cjs/editing/indexDocument.js.map +1 -0
  29. package/dist/cjs/editing/inspect.js +154 -0
  30. package/dist/cjs/editing/inspect.js.map +1 -0
  31. package/dist/cjs/editing/instanceEdits.js +267 -0
  32. package/dist/cjs/editing/instanceEdits.js.map +1 -0
  33. package/dist/cjs/editing/layoutTypeDescriptors.js +425 -0
  34. package/dist/cjs/editing/layoutTypeDescriptors.js.map +1 -0
  35. package/dist/cjs/editing/layoutTypeEdits.js +141 -0
  36. package/dist/cjs/editing/layoutTypeEdits.js.map +1 -0
  37. package/dist/cjs/editing/nodeIds.js +115 -0
  38. package/dist/cjs/editing/nodeIds.js.map +1 -0
  39. package/dist/cjs/editing/pathAccess.js +53 -0
  40. package/dist/cjs/editing/pathAccess.js.map +1 -0
  41. package/dist/cjs/editing/propertyEdits.js +125 -0
  42. package/dist/cjs/editing/propertyEdits.js.map +1 -0
  43. package/dist/cjs/editing/resolveEffectiveConfiguration.js +200 -0
  44. package/dist/cjs/editing/resolveEffectiveConfiguration.js.map +1 -0
  45. package/dist/cjs/editing/resolveTemplateChain.js +100 -0
  46. package/dist/cjs/editing/resolveTemplateChain.js.map +1 -0
  47. package/dist/cjs/editing/structureEdits.js +231 -0
  48. package/dist/cjs/editing/structureEdits.js.map +1 -0
  49. package/dist/cjs/editing/validateBinding.js +111 -0
  50. package/dist/cjs/editing/validateBinding.js.map +1 -0
  51. package/dist/cjs/editing/validateValue.js +114 -0
  52. package/dist/cjs/editing/validateValue.js.map +1 -0
  53. package/dist/cjs/icons/EffectiveIconCatalog.js +212 -0
  54. package/dist/cjs/icons/EffectiveIconCatalog.js.map +1 -0
  55. package/dist/cjs/icons/EffectiveIconEntry.js +22 -0
  56. package/dist/cjs/icons/EffectiveIconEntry.js.map +1 -0
  57. package/dist/cjs/icons/analyzeIconImpact.js +48 -0
  58. package/dist/cjs/icons/analyzeIconImpact.js.map +1 -0
  59. package/dist/cjs/icons/matchesIconQuery.js +22 -0
  60. package/dist/cjs/icons/matchesIconQuery.js.map +1 -0
  61. package/dist/cjs/icons/resolveIconLibraries.js +45 -0
  62. package/dist/cjs/icons/resolveIconLibraries.js.map +1 -0
  63. package/dist/cjs/index.js +67 -0
  64. package/dist/cjs/index.js.map +1 -1
  65. package/dist/esm/editing/DescriptorCatalog.d.ts +9 -0
  66. package/dist/esm/editing/DescriptorCatalog.d.ts.map +1 -0
  67. package/dist/esm/editing/DescriptorCatalog.js +38 -0
  68. package/dist/esm/editing/DescriptorCatalog.js.map +1 -0
  69. package/dist/esm/editing/DocumentIndex.d.ts +31 -0
  70. package/dist/esm/editing/DocumentIndex.d.ts.map +1 -0
  71. package/dist/esm/editing/DocumentIndex.js +2 -0
  72. package/dist/esm/editing/DocumentIndex.js.map +1 -0
  73. package/dist/esm/editing/EditOutcome.d.ts +7 -0
  74. package/dist/esm/editing/EditOutcome.d.ts.map +1 -0
  75. package/dist/esm/editing/EditOutcome.js +2 -0
  76. package/dist/esm/editing/EditOutcome.js.map +1 -0
  77. package/dist/esm/editing/EditSession.d.ts +20 -0
  78. package/dist/esm/editing/EditSession.d.ts.map +1 -0
  79. package/dist/esm/editing/EditSession.js +42 -0
  80. package/dist/esm/editing/EditSession.js.map +1 -0
  81. package/dist/esm/editing/EditingContext.d.ts +10 -0
  82. package/dist/esm/editing/EditingContext.d.ts.map +1 -0
  83. package/dist/esm/editing/EditingContext.js +2 -0
  84. package/dist/esm/editing/EditingContext.js.map +1 -0
  85. package/dist/esm/editing/TemplateChain.d.ts +13 -0
  86. package/dist/esm/editing/TemplateChain.d.ts.map +1 -0
  87. package/dist/esm/editing/TemplateChain.js +2 -0
  88. package/dist/esm/editing/TemplateChain.js.map +1 -0
  89. package/dist/esm/editing/applyEdit.d.ts +5 -0
  90. package/dist/esm/editing/applyEdit.d.ts.map +1 -0
  91. package/dist/esm/editing/applyEdit.js +81 -0
  92. package/dist/esm/editing/applyEdit.js.map +1 -0
  93. package/dist/esm/editing/applyEffectiveConfiguration.d.ts +3 -0
  94. package/dist/esm/editing/applyEffectiveConfiguration.d.ts.map +1 -0
  95. package/dist/esm/editing/applyEffectiveConfiguration.js +60 -0
  96. package/dist/esm/editing/applyEffectiveConfiguration.js.map +1 -0
  97. package/dist/esm/editing/collectComponents.d.ts +3 -0
  98. package/dist/esm/editing/collectComponents.d.ts.map +1 -0
  99. package/dist/esm/editing/collectComponents.js +32 -0
  100. package/dist/esm/editing/collectComponents.js.map +1 -0
  101. package/dist/esm/editing/collectIconUsages.d.ts +5 -0
  102. package/dist/esm/editing/collectIconUsages.d.ts.map +1 -0
  103. package/dist/esm/editing/collectIconUsages.js +84 -0
  104. package/dist/esm/editing/collectIconUsages.js.map +1 -0
  105. package/dist/esm/editing/describeNode.d.ts +11 -0
  106. package/dist/esm/editing/describeNode.d.ts.map +1 -0
  107. package/dist/esm/editing/describeNode.js +60 -0
  108. package/dist/esm/editing/describeNode.js.map +1 -0
  109. package/dist/esm/editing/diagnoseIcons.d.ts +4 -0
  110. package/dist/esm/editing/diagnoseIcons.d.ts.map +1 -0
  111. package/dist/esm/editing/diagnoseIcons.js +65 -0
  112. package/dist/esm/editing/diagnoseIcons.js.map +1 -0
  113. package/dist/esm/editing/diagnostics.d.ts +6 -0
  114. package/dist/esm/editing/diagnostics.d.ts.map +1 -0
  115. package/dist/esm/editing/diagnostics.js +32 -0
  116. package/dist/esm/editing/diagnostics.js.map +1 -0
  117. package/dist/esm/editing/documentPaths.d.ts +8 -0
  118. package/dist/esm/editing/documentPaths.d.ts.map +1 -0
  119. package/dist/esm/editing/documentPaths.js +41 -0
  120. package/dist/esm/editing/documentPaths.js.map +1 -0
  121. package/dist/esm/editing/exposureEdits.d.ts +5 -0
  122. package/dist/esm/editing/exposureEdits.d.ts.map +1 -0
  123. package/dist/esm/editing/exposureEdits.js +103 -0
  124. package/dist/esm/editing/exposureEdits.js.map +1 -0
  125. package/dist/esm/editing/exposureGrants.d.ts +21 -0
  126. package/dist/esm/editing/exposureGrants.d.ts.map +1 -0
  127. package/dist/esm/editing/exposureGrants.js +112 -0
  128. package/dist/esm/editing/exposureGrants.js.map +1 -0
  129. package/dist/esm/editing/given/a_layout_document.d.ts +14 -0
  130. package/dist/esm/editing/given/a_layout_document.d.ts.map +1 -0
  131. package/dist/esm/editing/given/a_layout_document.js +67 -0
  132. package/dist/esm/editing/given/a_layout_document.js.map +1 -0
  133. package/dist/esm/editing/given/a_scene_document.d.ts +20 -0
  134. package/dist/esm/editing/given/a_scene_document.d.ts.map +1 -0
  135. package/dist/esm/editing/given/a_scene_document.js +110 -0
  136. package/dist/esm/editing/given/a_scene_document.js.map +1 -0
  137. package/dist/esm/editing/iconDiagnostics.d.ts +11 -0
  138. package/dist/esm/editing/iconDiagnostics.d.ts.map +1 -0
  139. package/dist/esm/editing/iconDiagnostics.js +99 -0
  140. package/dist/esm/editing/iconDiagnostics.js.map +1 -0
  141. package/dist/esm/editing/index.d.ts +22 -0
  142. package/dist/esm/editing/index.d.ts.map +1 -0
  143. package/dist/esm/editing/index.js +22 -0
  144. package/dist/esm/editing/index.js.map +1 -0
  145. package/dist/esm/editing/indexDocument.d.ts +6 -0
  146. package/dist/esm/editing/indexDocument.d.ts.map +1 -0
  147. package/dist/esm/editing/indexDocument.js +396 -0
  148. package/dist/esm/editing/indexDocument.js.map +1 -0
  149. package/dist/esm/editing/inspect.d.ts +8 -0
  150. package/dist/esm/editing/inspect.d.ts.map +1 -0
  151. package/dist/esm/editing/inspect.js +151 -0
  152. package/dist/esm/editing/inspect.js.map +1 -0
  153. package/dist/esm/editing/instanceEdits.d.ts +9 -0
  154. package/dist/esm/editing/instanceEdits.d.ts.map +1 -0
  155. package/dist/esm/editing/instanceEdits.js +260 -0
  156. package/dist/esm/editing/instanceEdits.js.map +1 -0
  157. package/dist/esm/editing/layoutTypeDescriptors.d.ts +5 -0
  158. package/dist/esm/editing/layoutTypeDescriptors.d.ts.map +1 -0
  159. package/dist/esm/editing/layoutTypeDescriptors.js +421 -0
  160. package/dist/esm/editing/layoutTypeDescriptors.js.map +1 -0
  161. package/dist/esm/editing/layoutTypeEdits.d.ts +4 -0
  162. package/dist/esm/editing/layoutTypeEdits.d.ts.map +1 -0
  163. package/dist/esm/editing/layoutTypeEdits.js +139 -0
  164. package/dist/esm/editing/layoutTypeEdits.js.map +1 -0
  165. package/dist/esm/editing/nodeIds.d.ts +14 -0
  166. package/dist/esm/editing/nodeIds.d.ts.map +1 -0
  167. package/dist/esm/editing/nodeIds.js +102 -0
  168. package/dist/esm/editing/nodeIds.js.map +1 -0
  169. package/dist/esm/editing/pathAccess.d.ts +7 -0
  170. package/dist/esm/editing/pathAccess.d.ts.map +1 -0
  171. package/dist/esm/editing/pathAccess.js +48 -0
  172. package/dist/esm/editing/pathAccess.js.map +1 -0
  173. package/dist/esm/editing/propertyEdits.d.ts +15 -0
  174. package/dist/esm/editing/propertyEdits.d.ts.map +1 -0
  175. package/dist/esm/editing/propertyEdits.js +120 -0
  176. package/dist/esm/editing/propertyEdits.js.map +1 -0
  177. package/dist/esm/editing/resolveEffectiveConfiguration.d.ts +5 -0
  178. package/dist/esm/editing/resolveEffectiveConfiguration.d.ts.map +1 -0
  179. package/dist/esm/editing/resolveEffectiveConfiguration.js +198 -0
  180. package/dist/esm/editing/resolveEffectiveConfiguration.js.map +1 -0
  181. package/dist/esm/editing/resolveTemplateChain.d.ts +4 -0
  182. package/dist/esm/editing/resolveTemplateChain.d.ts.map +1 -0
  183. package/dist/esm/editing/resolveTemplateChain.js +98 -0
  184. package/dist/esm/editing/resolveTemplateChain.js.map +1 -0
  185. package/dist/esm/editing/structureEdits.d.ts +6 -0
  186. package/dist/esm/editing/structureEdits.d.ts.map +1 -0
  187. package/dist/esm/editing/structureEdits.js +227 -0
  188. package/dist/esm/editing/structureEdits.js.map +1 -0
  189. package/dist/esm/editing/validateBinding.d.ts +7 -0
  190. package/dist/esm/editing/validateBinding.d.ts.map +1 -0
  191. package/dist/esm/editing/validateBinding.js +108 -0
  192. package/dist/esm/editing/validateBinding.js.map +1 -0
  193. package/dist/esm/editing/validateValue.d.ts +8 -0
  194. package/dist/esm/editing/validateValue.d.ts.map +1 -0
  195. package/dist/esm/editing/validateValue.js +111 -0
  196. package/dist/esm/editing/validateValue.js.map +1 -0
  197. package/dist/esm/icons/EffectiveIconCatalog.d.ts +25 -0
  198. package/dist/esm/icons/EffectiveIconCatalog.d.ts.map +1 -0
  199. package/dist/esm/icons/EffectiveIconCatalog.js +210 -0
  200. package/dist/esm/icons/EffectiveIconCatalog.js.map +1 -0
  201. package/dist/esm/icons/EffectiveIconEntry.d.ts +9 -0
  202. package/dist/esm/icons/EffectiveIconEntry.d.ts.map +1 -0
  203. package/dist/esm/icons/EffectiveIconEntry.js +20 -0
  204. package/dist/esm/icons/EffectiveIconEntry.js.map +1 -0
  205. package/dist/esm/icons/IconCatalogSource.d.ts +6 -0
  206. package/dist/esm/icons/IconCatalogSource.d.ts.map +1 -0
  207. package/dist/esm/icons/IconCatalogSource.js +2 -0
  208. package/dist/esm/icons/IconCatalogSource.js.map +1 -0
  209. package/dist/esm/icons/IconDiagnostic.d.ts +9 -0
  210. package/dist/esm/icons/IconDiagnostic.d.ts.map +1 -0
  211. package/dist/esm/icons/IconDiagnostic.js +2 -0
  212. package/dist/esm/icons/IconDiagnostic.js.map +1 -0
  213. package/dist/esm/icons/IconImpactReport.d.ts +18 -0
  214. package/dist/esm/icons/IconImpactReport.d.ts.map +1 -0
  215. package/dist/esm/icons/IconImpactReport.js +2 -0
  216. package/dist/esm/icons/IconImpactReport.js.map +1 -0
  217. package/dist/esm/icons/IconLibraryResolution.d.ts +7 -0
  218. package/dist/esm/icons/IconLibraryResolution.d.ts.map +1 -0
  219. package/dist/esm/icons/IconLibraryResolution.js +2 -0
  220. package/dist/esm/icons/IconLibraryResolution.js.map +1 -0
  221. package/dist/esm/icons/IconQuery.d.ts +7 -0
  222. package/dist/esm/icons/IconQuery.d.ts.map +1 -0
  223. package/dist/esm/icons/IconQuery.js +2 -0
  224. package/dist/esm/icons/IconQuery.js.map +1 -0
  225. package/dist/esm/icons/IconResolution.d.ts +14 -0
  226. package/dist/esm/icons/IconResolution.d.ts.map +1 -0
  227. package/dist/esm/icons/IconResolution.js +2 -0
  228. package/dist/esm/icons/IconResolution.js.map +1 -0
  229. package/dist/esm/icons/IconSearchResult.d.ts +7 -0
  230. package/dist/esm/icons/IconSearchResult.d.ts.map +1 -0
  231. package/dist/esm/icons/IconSearchResult.js +2 -0
  232. package/dist/esm/icons/IconSearchResult.js.map +1 -0
  233. package/dist/esm/icons/IconUsage.d.ts +6 -0
  234. package/dist/esm/icons/IconUsage.d.ts.map +1 -0
  235. package/dist/esm/icons/IconUsage.js +2 -0
  236. package/dist/esm/icons/IconUsage.js.map +1 -0
  237. package/dist/esm/icons/ResolvedIconLibrary.d.ts +8 -0
  238. package/dist/esm/icons/ResolvedIconLibrary.d.ts.map +1 -0
  239. package/dist/esm/icons/ResolvedIconLibrary.js +2 -0
  240. package/dist/esm/icons/ResolvedIconLibrary.js.map +1 -0
  241. package/dist/esm/icons/analyzeIconImpact.d.ts +5 -0
  242. package/dist/esm/icons/analyzeIconImpact.d.ts.map +1 -0
  243. package/dist/esm/icons/analyzeIconImpact.js +46 -0
  244. package/dist/esm/icons/analyzeIconImpact.js.map +1 -0
  245. package/dist/esm/icons/index.d.ts +14 -0
  246. package/dist/esm/icons/index.d.ts.map +1 -0
  247. package/dist/esm/icons/index.js +14 -0
  248. package/dist/esm/icons/index.js.map +1 -0
  249. package/dist/esm/icons/matchesIconQuery.d.ts +4 -0
  250. package/dist/esm/icons/matchesIconQuery.d.ts.map +1 -0
  251. package/dist/esm/icons/matchesIconQuery.js +20 -0
  252. package/dist/esm/icons/matchesIconQuery.js.map +1 -0
  253. package/dist/esm/icons/resolveIconLibraries.d.ts +4 -0
  254. package/dist/esm/icons/resolveIconLibraries.d.ts.map +1 -0
  255. package/dist/esm/icons/resolveIconLibraries.js +43 -0
  256. package/dist/esm/icons/resolveIconLibraries.js.map +1 -0
  257. package/dist/esm/index.d.ts +2 -0
  258. package/dist/esm/index.d.ts.map +1 -1
  259. package/dist/esm/index.js +21 -0
  260. package/dist/esm/index.js.map +1 -1
  261. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  262. package/editing/DescriptorCatalog.ts +51 -0
  263. package/editing/DocumentIndex.ts +73 -0
  264. package/editing/EditOutcome.ts +21 -0
  265. package/editing/EditSession.ts +50 -0
  266. package/editing/EditingContext.ts +34 -0
  267. package/editing/TemplateChain.ts +36 -0
  268. package/editing/applyEdit.ts +69 -0
  269. package/editing/applyEffectiveConfiguration.ts +53 -0
  270. package/editing/collectComponents.ts +36 -0
  271. package/editing/collectIconUsages.ts +78 -0
  272. package/editing/describeNode.ts +61 -0
  273. package/editing/diagnoseIcons.ts +60 -0
  274. package/editing/diagnostics.ts +30 -0
  275. package/editing/documentPaths.ts +40 -0
  276. package/editing/exposureEdits.ts +119 -0
  277. package/editing/exposureGrants.ts +159 -0
  278. package/editing/given/a_layout_document.ts +88 -0
  279. package/editing/given/a_scene_document.ts +135 -0
  280. package/editing/iconDiagnostics.ts +90 -0
  281. package/editing/index.ts +24 -0
  282. package/editing/indexDocument.ts +237 -0
  283. package/editing/inspect.ts +165 -0
  284. package/editing/instanceEdits.ts +251 -0
  285. package/editing/layoutTypeDescriptors.ts +191 -0
  286. package/editing/layoutTypeEdits.ts +135 -0
  287. package/editing/nodeIds.ts +111 -0
  288. package/editing/pathAccess.ts +81 -0
  289. package/editing/propertyEdits.ts +127 -0
  290. package/editing/resolveEffectiveConfiguration.ts +202 -0
  291. package/editing/resolveTemplateChain.ts +109 -0
  292. package/editing/structureEdits.ts +234 -0
  293. package/editing/validateBinding.ts +103 -0
  294. package/editing/validateValue.ts +130 -0
  295. package/icons/EffectiveIconCatalog.ts +199 -0
  296. package/icons/EffectiveIconEntry.ts +36 -0
  297. package/icons/IconCatalogSource.ts +23 -0
  298. package/icons/IconDiagnostic.ts +45 -0
  299. package/icons/IconImpactReport.ts +63 -0
  300. package/icons/IconLibraryResolution.ts +22 -0
  301. package/icons/IconQuery.ts +27 -0
  302. package/icons/IconResolution.ts +25 -0
  303. package/icons/IconSearchResult.ts +21 -0
  304. package/icons/IconUsage.ts +21 -0
  305. package/icons/ResolvedIconLibrary.ts +32 -0
  306. package/icons/analyzeIconImpact.ts +41 -0
  307. package/icons/index.ts +16 -0
  308. package/icons/matchesIconQuery.ts +19 -0
  309. package/icons/resolveIconLibraries.ts +47 -0
  310. package/index.ts +2 -0
  311. package/package.json +3 -3
@@ -0,0 +1,400 @@
1
+ 'use strict';
2
+
3
+ var scene_model = require('@cratis/scene.model');
4
+ var elementKind = require('../elementKind.js');
5
+ var flowNodeKind = require('../flowNodeKind.js');
6
+ var panelKind = require('../panelKind.js');
7
+ var diagnostics = require('./diagnostics.js');
8
+ var nodeIds = require('./nodeIds.js');
9
+
10
+ // Copyright (c) Cratis. All rights reserved.
11
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
12
+ /**
13
+ * The layout type a panel element is, by its shape.
14
+ */ function panelLayoutType(element) {
15
+ if (!elementKind.isPanel(element)) return undefined;
16
+ if (panelKind.isGrid(element)) return scene_model.LayoutType.GridPanel;
17
+ if (panelKind.isCanvas(element)) return scene_model.LayoutType.Canvas;
18
+ if (panelKind.isDockPanel(element)) return scene_model.LayoutType.DockPanel;
19
+ if (panelKind.isStackPanel(element)) return scene_model.LayoutType.StackPanel;
20
+ if (panelKind.isWrapPanel(element)) return scene_model.LayoutType.WrapPanel;
21
+ return undefined;
22
+ }
23
+ /**
24
+ * The layout type a flow node is.
25
+ */ function flowLayoutType(node) {
26
+ if (flowNodeKind.isFlowContainer(node)) {
27
+ switch(node.kind){
28
+ case scene_model.FlowContainerKind.Row:
29
+ return scene_model.LayoutType.FlowRow;
30
+ case scene_model.FlowContainerKind.Column:
31
+ return scene_model.LayoutType.FlowColumn;
32
+ default:
33
+ return scene_model.LayoutType.FlowGrid;
34
+ }
35
+ }
36
+ return flowNodeKind.isFlowSlotLeaf(node) ? scene_model.LayoutType.FlowSlotLeaf : scene_model.LayoutType.FlowLeaf;
37
+ }
38
+ class Indexer {
39
+ document;
40
+ index = {
41
+ nodes: new Map(),
42
+ diagnostics: []
43
+ };
44
+ constructor(document){
45
+ this.document = document;
46
+ }
47
+ run() {
48
+ this.document.layouts.forEach((layout, position)=>this.owner(layout, [
49
+ 'layouts',
50
+ position
51
+ ], {
52
+ owner: layout.name,
53
+ ownerKind: scene_model.SceneNodeKind.Layout,
54
+ ownerId: nodeIds.layoutNodeId(layout.name)
55
+ }, undefined));
56
+ this.document.screenTemplates.forEach((template, position)=>this.owner(template, [
57
+ 'screenTemplates',
58
+ position
59
+ ], {
60
+ owner: template.name,
61
+ ownerKind: scene_model.SceneNodeKind.ScreenTemplate,
62
+ ownerId: nodeIds.screenTemplateNodeId(template.name)
63
+ }, 'content'));
64
+ this.document.dialogTemplates.forEach((dialog, position)=>this.owner(dialog, [
65
+ 'dialogTemplates',
66
+ position
67
+ ], {
68
+ owner: dialog.name,
69
+ ownerKind: scene_model.SceneNodeKind.DialogTemplate,
70
+ ownerId: nodeIds.dialogTemplateNodeId(dialog.name)
71
+ }, 'content'));
72
+ this.document.screens.forEach((screen, position)=>this.owner(screen, [
73
+ 'screens',
74
+ position
75
+ ], {
76
+ owner: screen.name,
77
+ ownerKind: scene_model.SceneNodeKind.Screen,
78
+ ownerId: nodeIds.screenNodeId(screen.name)
79
+ }, 'slotContent'));
80
+ return this.index;
81
+ }
82
+ add(record) {
83
+ if (this.index.nodes.has(record.id)) return false;
84
+ this.index.nodes.set(record.id, record);
85
+ return true;
86
+ }
87
+ owner(owner, path, context, contentKey) {
88
+ this.add({
89
+ id: context.ownerId,
90
+ kind: context.ownerKind,
91
+ typeId: context.ownerKind,
92
+ label: owner.name,
93
+ path,
94
+ value: owner,
95
+ owner: context.owner,
96
+ ownerKind: context.ownerKind
97
+ });
98
+ const content = contentKey === undefined ? undefined : owner[contentKey];
99
+ const ownsSlots = 'slots' in owner;
100
+ const declared = ownsSlots ? owner.slots : this.slotsAvailableTo(owner);
101
+ const slotNames = new Set([
102
+ ...declared.map((slot)=>slot.name),
103
+ ...Object.keys(content ?? {})
104
+ ]);
105
+ for (const name of slotNames){
106
+ const slotId = nodeIds.slotNodeId(context.ownerId, name);
107
+ const declaration = ownsSlots ? declared.findIndex((slot)=>slot.name === name) : -1;
108
+ const contentPath = contentKey === undefined ? undefined : [
109
+ ...path,
110
+ contentKey,
111
+ name
112
+ ];
113
+ this.add({
114
+ id: slotId,
115
+ kind: scene_model.SceneNodeKind.Slot,
116
+ typeId: 'slot',
117
+ label: name,
118
+ path: declaration >= 0 ? [
119
+ ...path,
120
+ 'slots',
121
+ declaration
122
+ ] : contentPath,
123
+ value: declaration >= 0 ? declared[declaration] : content?.[name],
124
+ parentId: context.ownerId,
125
+ owner: context.owner,
126
+ ownerKind: context.ownerKind,
127
+ slotName: name,
128
+ contentPath
129
+ });
130
+ if (declaration >= 0 && declared[declaration].arrangement) {
131
+ this.arrangement(declared[declaration].arrangement, [
132
+ ...path,
133
+ 'slots',
134
+ declaration,
135
+ 'arrangement'
136
+ ], slotId, context);
137
+ }
138
+ (content?.[name] ?? []).forEach((element, position)=>this.element(element, [
139
+ ...contentPath,
140
+ position
141
+ ], context, {
142
+ parentId: slotId,
143
+ list: {
144
+ path: contentPath,
145
+ index: position
146
+ }
147
+ }));
148
+ }
149
+ if ('arrangement' in owner && owner.arrangement) {
150
+ this.arrangement(owner.arrangement, [
151
+ ...path,
152
+ 'arrangement'
153
+ ], nodeIds.ownerArrangementId(context.ownerId), context, context.ownerId);
154
+ }
155
+ if ('contributions' in owner) {
156
+ owner.contributions.forEach((contribution, position)=>this.element(contribution.content, [
157
+ ...path,
158
+ 'contributions',
159
+ position,
160
+ 'content'
161
+ ], context, {
162
+ parentId: context.ownerId
163
+ }));
164
+ }
165
+ }
166
+ slotsAvailableTo(screen) {
167
+ const template = screen.screenTemplate === undefined ? undefined : this.document.screenTemplates.find((candidate)=>candidate.name === screen.screenTemplate);
168
+ if (template) return template.slots;
169
+ return this.document.layouts.find((candidate)=>candidate.name === screen.layout)?.slots ?? [];
170
+ }
171
+ element(element, path, context, placement) {
172
+ const id = nodeIds.elementNodeId(element.id);
173
+ const panelType = panelLayoutType(element);
174
+ const typeId = elementKind.isExternalComponent(element) ? element.componentName : panelType ?? (elementKind.isContentControl(element) ? 'contentControl' : elementKind.isItemsControl(element) ? 'itemsControl' : 'element');
175
+ const properties = element.properties;
176
+ const label = typeof properties?.label === 'string' && properties.label || elementKind.isPanel(element) && element.name || elementKind.isExternalComponent(element) && element.name || typeId;
177
+ if (!this.add({
178
+ id,
179
+ kind: scene_model.SceneNodeKind.Element,
180
+ typeId,
181
+ label,
182
+ path,
183
+ value: element,
184
+ owner: context.owner,
185
+ ownerKind: context.ownerKind,
186
+ ...placement
187
+ })) {
188
+ this.index.diagnostics.push(diagnostics.errorDiagnostic(scene_model.DiagnosticCode.DuplicateElementId, `The element id '${element.id}' is used more than once.`, {
189
+ nodeId: id
190
+ }));
191
+ return false;
192
+ }
193
+ if (elementKind.isExternalComponent(element)) {
194
+ for (const [name, children] of Object.entries(element.slots)){
195
+ children.forEach((child, position)=>this.element(child, [
196
+ ...path,
197
+ 'slots',
198
+ name,
199
+ position
200
+ ], context, {
201
+ parentId: id,
202
+ list: {
203
+ path: [
204
+ ...path,
205
+ 'slots',
206
+ name
207
+ ],
208
+ index: position
209
+ },
210
+ mirror: placement.mirror
211
+ }));
212
+ }
213
+ } else if (elementKind.isContentControl(element)) {
214
+ this.element(element.content, [
215
+ ...path,
216
+ 'content'
217
+ ], context, {
218
+ parentId: id,
219
+ mirror: placement.mirror
220
+ });
221
+ } else if (elementKind.isItemsControl(element)) {
222
+ this.element(element.itemTemplate, [
223
+ ...path,
224
+ 'itemTemplate'
225
+ ], context, {
226
+ parentId: id,
227
+ mirror: placement.mirror
228
+ });
229
+ } else if (elementKind.isPanel(element)) {
230
+ element.children.forEach((child, position)=>this.element(child, [
231
+ ...path,
232
+ 'children',
233
+ position
234
+ ], context, {
235
+ parentId: id,
236
+ list: {
237
+ path: [
238
+ ...path,
239
+ 'children'
240
+ ],
241
+ index: position
242
+ },
243
+ mirror: placement.mirror
244
+ }));
245
+ }
246
+ return true;
247
+ }
248
+ arrangement(arrangement, path, holderId, context, parentId = holderId) {
249
+ if (arrangement.root !== undefined) {
250
+ const flow = arrangement;
251
+ this.flowNode(flow.root, [
252
+ ...path,
253
+ 'root'
254
+ ], holderId, 'root', [], context, {
255
+ parentId
256
+ });
257
+ flow.overrides?.forEach((override, position)=>this.flowNode(override.root, [
258
+ ...path,
259
+ 'overrides',
260
+ position,
261
+ 'root'
262
+ ], holderId, `override${position}`, [], context, {
263
+ parentId
264
+ }));
265
+ return;
266
+ }
267
+ const variants = arrangement.variants;
268
+ if (!Array.isArray(variants)) return;
269
+ const freeformId = nodeIds.freeformNodeId(holderId);
270
+ this.add({
271
+ id: freeformId,
272
+ kind: scene_model.SceneNodeKind.Freeform,
273
+ typeId: scene_model.LayoutType.Freeform,
274
+ label: 'Freeform',
275
+ path,
276
+ value: arrangement,
277
+ parentId,
278
+ owner: context.owner,
279
+ ownerKind: context.ownerKind
280
+ });
281
+ const firstCopy = new Map();
282
+ variants.forEach((variant, variantIndex)=>{
283
+ variant.placements.forEach((placement, placementIndex)=>{
284
+ const placementPath = [
285
+ ...path,
286
+ 'variants',
287
+ variantIndex,
288
+ 'placements',
289
+ placementIndex
290
+ ];
291
+ const key = placement.element?.id ?? placement.slotName ?? String(placementIndex);
292
+ const placementId = nodeIds.placementNodeId(holderId, variantIndex, key);
293
+ this.add({
294
+ id: placementId,
295
+ kind: scene_model.SceneNodeKind.Placement,
296
+ typeId: 'placement',
297
+ label: key,
298
+ path: placementPath,
299
+ value: placement,
300
+ parentId: freeformId,
301
+ owner: context.owner,
302
+ ownerKind: context.ownerKind,
303
+ list: {
304
+ path: [
305
+ ...path,
306
+ 'variants',
307
+ variantIndex,
308
+ 'placements'
309
+ ],
310
+ index: placementIndex
311
+ }
312
+ });
313
+ if (!placement.element) return;
314
+ const elementPath = [
315
+ ...placementPath,
316
+ 'element'
317
+ ];
318
+ const known = this.index.nodes.get(nodeIds.elementNodeId(placement.element.id));
319
+ const original = firstCopy.get(placement.element.id);
320
+ if (known && original) {
321
+ known.placementIds.push(placementId);
322
+ known.mirror.others.push(elementPath);
323
+ return;
324
+ }
325
+ firstCopy.set(placement.element.id, elementPath);
326
+ const mirror = {
327
+ prefix: elementPath,
328
+ others: []
329
+ };
330
+ if (this.element(placement.element, elementPath, context, {
331
+ parentId: placementId,
332
+ mirror
333
+ })) {
334
+ this.index.nodes.get(nodeIds.elementNodeId(placement.element.id)).placementIds = [
335
+ placementId
336
+ ];
337
+ }
338
+ });
339
+ });
340
+ // Descendants of a freeform element carry the same mirror object, so a copy found later is seen by all of them.
341
+ }
342
+ flowNode(node, path, holderId, variant, indexPath, context, placement) {
343
+ const id = nodeIds.flowNodeId(holderId, variant, indexPath);
344
+ const type = flowLayoutType(node);
345
+ this.add({
346
+ id,
347
+ kind: scene_model.SceneNodeKind.FlowNode,
348
+ typeId: type,
349
+ label: type,
350
+ path,
351
+ value: node,
352
+ owner: context.owner,
353
+ ownerKind: context.ownerKind,
354
+ ...placement
355
+ });
356
+ if (flowNodeKind.isFlowContainer(node)) {
357
+ node.children.forEach((child, position)=>this.flowNode(child, [
358
+ ...path,
359
+ 'children',
360
+ position
361
+ ], holderId, variant, [
362
+ ...indexPath,
363
+ position
364
+ ], context, {
365
+ parentId: id,
366
+ list: {
367
+ path: [
368
+ ...path,
369
+ 'children'
370
+ ],
371
+ index: position
372
+ }
373
+ }));
374
+ } else if (flowNodeKind.isFlowLeaf(node)) {
375
+ this.element(node.content, [
376
+ ...path,
377
+ 'content'
378
+ ], context, {
379
+ parentId: id,
380
+ leafId: id
381
+ });
382
+ }
383
+ }
384
+ }
385
+ /**
386
+ * Indexes every addressable node of a document: layouts, templates, dialog templates, screens, their slots, the
387
+ * elements in them, and the flow and freeform arrangements that position them.
388
+ *
389
+ * The index is what inspection and editing look nodes up in. Duplicate element ids are reported, and the second
390
+ * occurrence is left out of the index.
391
+ *
392
+ * @param document The document to index.
393
+ */ function indexDocument(document) {
394
+ return new Indexer(document).run();
395
+ }
396
+
397
+ exports.flowLayoutType = flowLayoutType;
398
+ exports.indexDocument = indexDocument;
399
+ exports.panelLayoutType = panelLayoutType;
400
+ //# sourceMappingURL=indexDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexDocument.js","sources":["../../../editing/indexDocument.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 DiagnosticCode, DialogTemplate, ExternalComponent, FlowArrangement, FlowContainer, FlowLeaf, FlowNode,\n FreeformArrangement, FreeformSlotArrangement, Layout, LayoutType, SceneDocument, SceneElement, SceneNodeKind, Screen,\n ScreenTemplate, Slot, FlowContainerKind,\n} from '@cratis/scene.model';\nimport { isContentControl, isExternalComponent, isItemsControl, isPanel } from '../elementKind';\nimport { isFlowContainer, isFlowLeaf, isFlowSlotLeaf } from '../flowNodeKind';\nimport { isCanvas, isDockPanel, isGrid, isStackPanel, isWrapPanel } from '../panelKind';\nimport { errorDiagnostic } from './diagnostics';\nimport { DocumentIndex, DocumentPath, ListLocation, NodeRecord } from './DocumentIndex';\nimport {\n dialogTemplateNodeId, elementNodeId, flowNodeId, freeformNodeId, layoutNodeId, ownerArrangementId, placementNodeId,\n screenNodeId, screenTemplateNodeId, slotNodeId,\n} from './nodeIds';\n\ntype Owner = Layout | ScreenTemplate | DialogTemplate | Screen;\n\ninterface OwnerContext {\n owner: string;\n ownerKind: SceneNodeKind;\n ownerId: string;\n}\n\ninterface Placement {\n parentId?: string;\n list?: ListLocation;\n leafId?: string;\n mirror?: NodeRecord['mirror'];\n}\n\n/**\n * The layout type a panel element is, by its shape.\n */\nexport function panelLayoutType(element: SceneElement): LayoutType | undefined {\n if (!isPanel(element)) return undefined;\n if (isGrid(element)) return LayoutType.GridPanel;\n if (isCanvas(element)) return LayoutType.Canvas;\n if (isDockPanel(element)) return LayoutType.DockPanel;\n if (isStackPanel(element)) return LayoutType.StackPanel;\n if (isWrapPanel(element)) return LayoutType.WrapPanel;\n return undefined;\n}\n\n/**\n * The layout type a flow node is.\n */\nexport function flowLayoutType(node: FlowNode): LayoutType {\n if (isFlowContainer(node)) {\n switch (node.kind) {\n case FlowContainerKind.Row: return LayoutType.FlowRow;\n case FlowContainerKind.Column: return LayoutType.FlowColumn;\n default: return LayoutType.FlowGrid;\n }\n }\n\n return isFlowSlotLeaf(node) ? LayoutType.FlowSlotLeaf : LayoutType.FlowLeaf;\n}\n\nclass Indexer {\n readonly index: DocumentIndex = { nodes: new Map(), diagnostics: [] };\n\n constructor(private readonly document: SceneDocument) {}\n\n run(): DocumentIndex {\n this.document.layouts.forEach((layout, position) =>\n this.owner(layout, ['layouts', position], { owner: layout.name, ownerKind: SceneNodeKind.Layout, ownerId: layoutNodeId(layout.name) }, undefined));\n this.document.screenTemplates.forEach((template, position) =>\n this.owner(template, ['screenTemplates', position], { owner: template.name, ownerKind: SceneNodeKind.ScreenTemplate, ownerId: screenTemplateNodeId(template.name) }, 'content'));\n this.document.dialogTemplates.forEach((dialog, position) =>\n this.owner(dialog, ['dialogTemplates', position], { owner: dialog.name, ownerKind: SceneNodeKind.DialogTemplate, ownerId: dialogTemplateNodeId(dialog.name) }, 'content'));\n this.document.screens.forEach((screen, position) =>\n this.owner(screen, ['screens', position], { owner: screen.name, ownerKind: SceneNodeKind.Screen, ownerId: screenNodeId(screen.name) }, 'slotContent'));\n return this.index;\n }\n\n private add(record: NodeRecord): boolean {\n if (this.index.nodes.has(record.id)) return false;\n this.index.nodes.set(record.id, record);\n return true;\n }\n\n private owner(owner: Owner, path: DocumentPath, context: OwnerContext, contentKey: 'content' | 'slotContent' | undefined): void {\n this.add({ id: context.ownerId, kind: context.ownerKind, typeId: context.ownerKind, label: owner.name, path, value: owner, owner: context.owner, ownerKind: context.ownerKind });\n\n const content = contentKey === undefined ? undefined : (owner as unknown as Record<string, Record<string, SceneElement[]> | undefined>)[contentKey];\n const ownsSlots = 'slots' in owner;\n const declared: Slot[] = ownsSlots ? owner.slots : this.slotsAvailableTo(owner as Screen);\n const slotNames = new Set<string>([...declared.map(slot => slot.name), ...Object.keys(content ?? {})]);\n\n for (const name of slotNames) {\n const slotId = slotNodeId(context.ownerId, name);\n const declaration = ownsSlots ? declared.findIndex(slot => slot.name === name) : -1;\n const contentPath: DocumentPath | undefined = contentKey === undefined ? undefined : [...path, contentKey, name];\n this.add({\n id: slotId, kind: SceneNodeKind.Slot, typeId: 'slot', label: name, path: declaration >= 0 ? [...path, 'slots', declaration] : contentPath!,\n value: declaration >= 0 ? declared[declaration] : content?.[name], parentId: context.ownerId, owner: context.owner,\n ownerKind: context.ownerKind, slotName: name, contentPath,\n });\n\n if (declaration >= 0 && declared[declaration].arrangement) {\n this.arrangement(declared[declaration].arrangement!, [...path, 'slots', declaration, 'arrangement'], slotId, context);\n }\n\n (content?.[name] ?? []).forEach((element, position) =>\n this.element(element, [...contentPath!, position], context, { parentId: slotId, list: { path: contentPath!, index: position } }));\n }\n\n if ('arrangement' in owner && owner.arrangement) {\n this.arrangement(owner.arrangement, [...path, 'arrangement'], ownerArrangementId(context.ownerId), context, context.ownerId);\n }\n\n if ('contributions' in owner) {\n owner.contributions.forEach((contribution, position) =>\n this.element(contribution.content, [...path, 'contributions', position, 'content'], context, { parentId: context.ownerId }));\n }\n }\n\n private slotsAvailableTo(screen: Screen): Slot[] {\n const template = screen.screenTemplate === undefined ? undefined : this.document.screenTemplates.find(candidate => candidate.name === screen.screenTemplate);\n if (template) return template.slots;\n return this.document.layouts.find(candidate => candidate.name === screen.layout)?.slots ?? [];\n }\n\n private element(element: SceneElement, path: DocumentPath, context: OwnerContext, placement: Placement): boolean {\n const id = elementNodeId(element.id);\n const panelType = panelLayoutType(element);\n const typeId = isExternalComponent(element) ? element.componentName\n : (panelType ?? (isContentControl(element) ? 'contentControl' : (isItemsControl(element) ? 'itemsControl' : 'element')));\n const properties = (element as ExternalComponent).properties;\n const label = (typeof properties?.label === 'string' && properties.label)\n || (isPanel(element) && (element as { name?: string }).name)\n || (isExternalComponent(element) && element.name)\n || typeId;\n\n if (!this.add({\n id, kind: SceneNodeKind.Element, typeId, label, path, value: element, owner: context.owner, ownerKind: context.ownerKind, ...placement,\n })) {\n this.index.diagnostics.push(errorDiagnostic(DiagnosticCode.DuplicateElementId, `The element id '${element.id}' is used more than once.`, { nodeId: id }));\n return false;\n }\n\n if (isExternalComponent(element)) {\n for (const [name, children] of Object.entries(element.slots)) {\n children.forEach((child, position) =>\n this.element(child, [...path, 'slots', name, position], context, { parentId: id, list: { path: [...path, 'slots', name], index: position }, mirror: placement.mirror }));\n }\n } else if (isContentControl(element)) {\n this.element(element.content, [...path, 'content'], context, { parentId: id, mirror: placement.mirror });\n } else if (isItemsControl(element)) {\n this.element(element.itemTemplate, [...path, 'itemTemplate'], context, { parentId: id, mirror: placement.mirror });\n } else if (isPanel(element)) {\n element.children.forEach((child, position) =>\n this.element(child, [...path, 'children', position], context, { parentId: id, list: { path: [...path, 'children'], index: position }, mirror: placement.mirror }));\n }\n\n return true;\n }\n\n private arrangement(arrangement: unknown, path: DocumentPath, holderId: string, context: OwnerContext, parentId = holderId): void {\n if ((arrangement as FlowArrangement).root !== undefined) {\n const flow = arrangement as FlowArrangement;\n this.flowNode(flow.root, [...path, 'root'], holderId, 'root', [], context, { parentId });\n flow.overrides?.forEach((override, position) =>\n this.flowNode(override.root, [...path, 'overrides', position, 'root'], holderId, `override${position}`, [], context, { parentId }));\n return;\n }\n\n const variants = (arrangement as FreeformArrangement | FreeformSlotArrangement).variants;\n if (!Array.isArray(variants)) return;\n\n const freeformId = freeformNodeId(holderId);\n this.add({ id: freeformId, kind: SceneNodeKind.Freeform, typeId: LayoutType.Freeform, label: 'Freeform', path, value: arrangement, parentId, owner: context.owner, ownerKind: context.ownerKind });\n\n const firstCopy = new Map<string, DocumentPath>();\n variants.forEach((variant, variantIndex) => {\n (variant.placements as { element?: SceneElement; slotName?: string }[]).forEach((placement, placementIndex) => {\n const placementPath = [...path, 'variants', variantIndex, 'placements', placementIndex];\n const key = placement.element?.id ?? placement.slotName ?? String(placementIndex);\n const placementId = placementNodeId(holderId, variantIndex, key);\n this.add({\n id: placementId, kind: SceneNodeKind.Placement, typeId: 'placement', label: key, path: placementPath, value: placement,\n parentId: freeformId, owner: context.owner, ownerKind: context.ownerKind,\n list: { path: [...path, 'variants', variantIndex, 'placements'], index: placementIndex },\n });\n\n if (!placement.element) return;\n const elementPath = [...placementPath, 'element'];\n const known = this.index.nodes.get(elementNodeId(placement.element.id));\n const original = firstCopy.get(placement.element.id);\n if (known && original) {\n known.placementIds!.push(placementId);\n known.mirror!.others.push(elementPath);\n return;\n }\n\n firstCopy.set(placement.element.id, elementPath);\n const mirror = { prefix: elementPath, others: [] as DocumentPath[] };\n if (this.element(placement.element, elementPath, context, { parentId: placementId, mirror })) {\n this.index.nodes.get(elementNodeId(placement.element.id))!.placementIds = [placementId];\n }\n });\n });\n\n // Descendants of a freeform element carry the same mirror object, so a copy found later is seen by all of them.\n }\n\n private flowNode(node: FlowNode, path: DocumentPath, holderId: string, variant: string, indexPath: number[], context: OwnerContext, placement: Placement): void {\n const id = flowNodeId(holderId, variant, indexPath);\n const type = flowLayoutType(node);\n this.add({ id, kind: SceneNodeKind.FlowNode, typeId: type, label: type, path, value: node, owner: context.owner, ownerKind: context.ownerKind, ...placement });\n\n if (isFlowContainer(node)) {\n (node as FlowContainer).children.forEach((child, position) =>\n this.flowNode(child, [...path, 'children', position], holderId, variant, [...indexPath, position], context,\n { parentId: id, list: { path: [...path, 'children'], index: position } }));\n } else if (isFlowLeaf(node)) {\n this.element((node as FlowLeaf).content, [...path, 'content'], context, { parentId: id, leafId: id });\n }\n\n }\n}\n\n/**\n * Indexes every addressable node of a document: layouts, templates, dialog templates, screens, their slots, the\n * elements in them, and the flow and freeform arrangements that position them.\n *\n * The index is what inspection and editing look nodes up in. Duplicate element ids are reported, and the second\n * occurrence is left out of the index.\n *\n * @param document The document to index.\n */\nexport function indexDocument(document: SceneDocument): DocumentIndex {\n return new Indexer(document).run();\n}\n"],"names":["panelLayoutType","element","isPanel","undefined","isGrid","LayoutType","GridPanel","isCanvas","Canvas","isDockPanel","DockPanel","isStackPanel","StackPanel","isWrapPanel","WrapPanel","flowLayoutType","node","isFlowContainer","kind","FlowContainerKind","Row","FlowRow","Column","FlowColumn","FlowGrid","isFlowSlotLeaf","FlowSlotLeaf","FlowLeaf","Indexer","index","nodes","Map","diagnostics","document","run","layouts","forEach","layout","position","owner","name","ownerKind","SceneNodeKind","Layout","ownerId","layoutNodeId","screenTemplates","template","ScreenTemplate","screenTemplateNodeId","dialogTemplates","dialog","DialogTemplate","dialogTemplateNodeId","screens","screen","Screen","screenNodeId","add","record","has","id","set","path","context","contentKey","typeId","label","value","content","ownsSlots","declared","slots","slotsAvailableTo","slotNames","Set","map","slot","Object","keys","slotId","slotNodeId","declaration","findIndex","contentPath","Slot","parentId","slotName","arrangement","list","ownerArrangementId","contributions","contribution","screenTemplate","find","candidate","placement","elementNodeId","panelType","isExternalComponent","componentName","isContentControl","isItemsControl","properties","Element","push","errorDiagnostic","DiagnosticCode","DuplicateElementId","nodeId","children","entries","child","mirror","itemTemplate","holderId","root","flow","flowNode","overrides","override","variants","Array","isArray","freeformId","freeformNodeId","Freeform","firstCopy","variant","variantIndex","placements","placementIndex","placementPath","key","String","placementId","placementNodeId","Placement","elementPath","known","get","original","placementIds","others","prefix","indexPath","flowNodeId","type","FlowNode","isFlowLeaf","leafId","indexDocument"],"mappings":";;;;;;;;;AAAA;AACA;AAgCA;;IAGO,SAASA,eAAAA,CAAgBC,OAAqB,EAAA;IACjD,IAAI,CAACC,mBAAAA,CAAQD,OAAAA,CAAAA,EAAU,OAAOE,SAAAA;AAC9B,IAAA,IAAIC,gBAAAA,CAAOH,OAAAA,CAAAA,EAAU,OAAOI,sBAAAA,CAAWC,SAAS;AAChD,IAAA,IAAIC,kBAAAA,CAASN,OAAAA,CAAAA,EAAU,OAAOI,sBAAAA,CAAWG,MAAM;AAC/C,IAAA,IAAIC,qBAAAA,CAAYR,OAAAA,CAAAA,EAAU,OAAOI,sBAAAA,CAAWK,SAAS;AACrD,IAAA,IAAIC,sBAAAA,CAAaV,OAAAA,CAAAA,EAAU,OAAOI,sBAAAA,CAAWO,UAAU;AACvD,IAAA,IAAIC,qBAAAA,CAAYZ,OAAAA,CAAAA,EAAU,OAAOI,sBAAAA,CAAWS,SAAS;IACrD,OAAOX,SAAAA;AACX;AAEA;;IAGO,SAASY,cAAAA,CAAeC,IAAc,EAAA;AACzC,IAAA,IAAIC,6BAAgBD,IAAAA,CAAAA,EAAO;AACvB,QAAA,OAAQA,KAAKE,IAAI;AACb,YAAA,KAAKC,8BAAkBC,GAAG;AAAE,gBAAA,OAAOf,uBAAWgB,OAAO;AACrD,YAAA,KAAKF,8BAAkBG,MAAM;AAAE,gBAAA,OAAOjB,uBAAWkB,UAAU;AAC3D,YAAA;AAAS,gBAAA,OAAOlB,uBAAWmB,QAAQ;AACvC;AACJ,IAAA;AAEA,IAAA,OAAOC,4BAAeT,IAAAA,CAAAA,GAAQX,sBAAAA,CAAWqB,YAAY,GAAGrB,uBAAWsB,QAAQ;AAC/E;AAEA,MAAMC,OAAAA,CAAAA;;IACOC,KAAAA,GAAuB;AAAEC,QAAAA,KAAAA,EAAO,IAAIC,GAAAA,EAAAA;AAAOC,QAAAA,WAAAA,EAAa;KAAG;IAEpE,WAAA,CAA6BC,QAAuB,CAAE;aAAzBA,QAAAA,GAAAA,QAAAA;AAA0B,IAAA;IAEvDC,GAAAA,GAAqB;AACjB,QAAA,IAAI,CAACD,QAAQ,CAACE,OAAO,CAACC,OAAO,CAAC,CAACC,MAAAA,EAAQC,QAAAA,GACnC,IAAI,CAACC,KAAK,CAACF,MAAAA,EAAQ;AAAC,gBAAA,SAAA;AAAWC,gBAAAA;aAAS,EAAE;AAAEC,gBAAAA,KAAAA,EAAOF,OAAOG,IAAI;AAAEC,gBAAAA,SAAAA,EAAWC,0BAAcC,MAAM;gBAAEC,OAAAA,EAASC,oBAAAA,CAAaR,OAAOG,IAAI;aAAE,EAAGrC,SAAAA,CAAAA,CAAAA;AAC3I,QAAA,IAAI,CAAC8B,QAAQ,CAACa,eAAe,CAACV,OAAO,CAAC,CAACW,QAAAA,EAAUT,QAAAA,GAC7C,IAAI,CAACC,KAAK,CAACQ,QAAAA,EAAU;AAAC,gBAAA,iBAAA;AAAmBT,gBAAAA;aAAS,EAAE;AAAEC,gBAAAA,KAAAA,EAAOQ,SAASP,IAAI;AAAEC,gBAAAA,SAAAA,EAAWC,0BAAcM,cAAc;gBAAEJ,OAAAA,EAASK,4BAAAA,CAAqBF,SAASP,IAAI;aAAE,EAAG,SAAA,CAAA,CAAA;AACzK,QAAA,IAAI,CAACP,QAAQ,CAACiB,eAAe,CAACd,OAAO,CAAC,CAACe,MAAAA,EAAQb,QAAAA,GAC3C,IAAI,CAACC,KAAK,CAACY,MAAAA,EAAQ;AAAC,gBAAA,iBAAA;AAAmBb,gBAAAA;aAAS,EAAE;AAAEC,gBAAAA,KAAAA,EAAOY,OAAOX,IAAI;AAAEC,gBAAAA,SAAAA,EAAWC,0BAAcU,cAAc;gBAAER,OAAAA,EAASS,4BAAAA,CAAqBF,OAAOX,IAAI;aAAE,EAAG,SAAA,CAAA,CAAA;AACnK,QAAA,IAAI,CAACP,QAAQ,CAACqB,OAAO,CAAClB,OAAO,CAAC,CAACmB,MAAAA,EAAQjB,QAAAA,GACnC,IAAI,CAACC,KAAK,CAACgB,MAAAA,EAAQ;AAAC,gBAAA,SAAA;AAAWjB,gBAAAA;aAAS,EAAE;AAAEC,gBAAAA,KAAAA,EAAOgB,OAAOf,IAAI;AAAEC,gBAAAA,SAAAA,EAAWC,0BAAcc,MAAM;gBAAEZ,OAAAA,EAASa,oBAAAA,CAAaF,OAAOf,IAAI;aAAE,EAAG,aAAA,CAAA,CAAA;QAC3I,OAAO,IAAI,CAACX,KAAK;AACrB,IAAA;AAEQ6B,IAAAA,GAAAA,CAAIC,MAAkB,EAAW;QACrC,IAAI,IAAI,CAAC9B,KAAK,CAACC,KAAK,CAAC8B,GAAG,CAACD,MAAAA,CAAOE,EAAE,CAAA,EAAG,OAAO,KAAA;QAC5C,IAAI,CAAChC,KAAK,CAACC,KAAK,CAACgC,GAAG,CAACH,MAAAA,CAAOE,EAAE,EAAEF,MAAAA,CAAAA;QAChC,OAAO,IAAA;AACX,IAAA;AAEQpB,IAAAA,KAAAA,CAAMA,KAAY,EAAEwB,IAAkB,EAAEC,OAAqB,EAAEC,UAAiD,EAAQ;QAC5H,IAAI,CAACP,GAAG,CAAC;AAAEG,YAAAA,EAAAA,EAAIG,QAAQpB,OAAO;AAAE1B,YAAAA,IAAAA,EAAM8C,QAAQvB,SAAS;AAAEyB,YAAAA,MAAAA,EAAQF,QAAQvB,SAAS;AAAE0B,YAAAA,KAAAA,EAAO5B,MAAMC,IAAI;AAAEuB,YAAAA,IAAAA;YAAMK,KAAAA,EAAO7B,KAAAA;AAAOA,YAAAA,KAAAA,EAAOyB,QAAQzB,KAAK;AAAEE,YAAAA,SAAAA,EAAWuB,QAAQvB;AAAU,SAAA,CAAA;AAE9K,QAAA,MAAM4B,UAAUJ,UAAAA,KAAe9D,SAAAA,GAAYA,YAAY,KAAgF,CAAC8D,UAAAA,CAAW;AACnJ,QAAA,MAAMK,YAAY,OAAA,IAAW/B,KAAAA;QAC7B,MAAMgC,QAAAA,GAAmBD,YAAY/B,KAAAA,CAAMiC,KAAK,GAAG,IAAI,CAACC,gBAAgB,CAAClC,KAAAA,CAAAA;QACzE,MAAMmC,SAAAA,GAAY,IAAIC,GAAAA,CAAY;AAAIJ,YAAAA,GAAAA,QAAAA,CAASK,GAAG,CAACC,CAAAA,IAAAA,GAAQA,KAAKrC,IAAI,CAAA;eAAMsC,MAAAA,CAAOC,IAAI,CAACV,OAAAA,IAAW,EAAC;AAAG,SAAA,CAAA;QAErG,KAAK,MAAM7B,QAAQkC,SAAAA,CAAW;AAC1B,YAAA,MAAMM,MAAAA,GAASC,kBAAAA,CAAWjB,OAAAA,CAAQpB,OAAO,EAAEJ,IAAAA,CAAAA;YAC3C,MAAM0C,WAAAA,GAAcZ,SAAAA,GAAYC,QAAAA,CAASY,SAAS,CAACN,CAAAA,IAAAA,GAAQA,IAAAA,CAAKrC,IAAI,KAAKA,IAAAA,CAAAA,GAAQ,EAAC;YAClF,MAAM4C,WAAAA,GAAwCnB,UAAAA,KAAe9D,SAAAA,GAAYA,SAAAA,GAAY;AAAI4D,gBAAAA,GAAAA,IAAAA;AAAME,gBAAAA,UAAAA;AAAYzB,gBAAAA;AAAK,aAAA;YAChH,IAAI,CAACkB,GAAG,CAAC;gBACLG,EAAAA,EAAImB,MAAAA;AAAQ9D,gBAAAA,IAAAA,EAAMwB,0BAAc2C,IAAI;gBAAEnB,MAAAA,EAAQ,MAAA;gBAAQC,KAAAA,EAAO3B,IAAAA;AAAMuB,gBAAAA,IAAAA,EAAMmB,eAAe,CAAA,GAAI;AAAInB,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,OAAA;AAASmB,oBAAAA;iBAAY,GAAGE,WAAAA;gBAC9HhB,KAAAA,EAAOc,WAAAA,IAAe,IAAIX,QAAQ,CAACW,YAAY,GAAGb,OAAAA,GAAU7B,IAAAA,CAAK;AAAE8C,gBAAAA,QAAAA,EAAUtB,QAAQpB,OAAO;AAAEL,gBAAAA,KAAAA,EAAOyB,QAAQzB,KAAK;AAClHE,gBAAAA,SAAAA,EAAWuB,QAAQvB,SAAS;gBAAE8C,QAAAA,EAAU/C,IAAAA;AAAM4C,gBAAAA;AAClD,aAAA,CAAA;AAEA,YAAA,IAAIF,eAAe,CAAA,IAAKX,QAAQ,CAACW,WAAAA,CAAY,CAACM,WAAW,EAAE;gBACvD,IAAI,CAACA,WAAW,CAACjB,QAAQ,CAACW,WAAAA,CAAY,CAACM,WAAW,EAAG;AAAIzB,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,OAAA;AAASmB,oBAAAA,WAAAA;AAAa,oBAAA;AAAc,iBAAA,EAAEF,MAAAA,EAAQhB,OAAAA,CAAAA;AACjH,YAAA;AAECK,YAAAA,CAAAA,UAAU7B,IAAAA,CAAK,IAAI,EAAE,EAAEJ,OAAO,CAAC,CAACnC,SAASqC,QAAAA,GACtC,IAAI,CAACrC,OAAO,CAACA,OAAAA,EAAS;AAAImF,oBAAAA,GAAAA,WAAAA;AAAc9C,oBAAAA;AAAS,iBAAA,EAAE0B,OAAAA,EAAS;oBAAEsB,QAAAA,EAAUN,MAAAA;oBAAQS,IAAAA,EAAM;wBAAE1B,IAAAA,EAAMqB,WAAAA;wBAAcvD,KAAAA,EAAOS;AAAS;AAAE,iBAAA,CAAA,CAAA;AACtI,QAAA;AAEA,QAAA,IAAI,aAAA,IAAiBC,KAAAA,IAASA,KAAAA,CAAMiD,WAAW,EAAE;AAC7C,YAAA,IAAI,CAACA,WAAW,CAACjD,KAAAA,CAAMiD,WAAW,EAAE;AAAIzB,gBAAAA,GAAAA,IAAAA;AAAM,gBAAA;AAAc,aAAA,EAAE2B,2BAAmB1B,OAAAA,CAAQpB,OAAO,CAAA,EAAGoB,OAAAA,EAASA,QAAQpB,OAAO,CAAA;AAC/H,QAAA;AAEA,QAAA,IAAI,mBAAmBL,KAAAA,EAAO;AAC1BA,YAAAA,KAAAA,CAAMoD,aAAa,CAACvD,OAAO,CAAC,CAACwD,YAAAA,EAActD,QAAAA,GACvC,IAAI,CAACrC,OAAO,CAAC2F,YAAAA,CAAavB,OAAO,EAAE;AAAIN,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,eAAA;AAAiBzB,oBAAAA,QAAAA;AAAU,oBAAA;AAAU,iBAAA,EAAE0B,OAAAA,EAAS;AAAEsB,oBAAAA,QAAAA,EAAUtB,QAAQpB;AAAQ,iBAAA,CAAA,CAAA;AACjI,QAAA;AACJ,IAAA;AAEQ6B,IAAAA,gBAAAA,CAAiBlB,MAAc,EAAU;QAC7C,MAAMR,QAAAA,GAAWQ,OAAOsC,cAAc,KAAK1F,YAAYA,SAAAA,GAAY,IAAI,CAAC8B,QAAQ,CAACa,eAAe,CAACgD,IAAI,CAACC,CAAAA,SAAAA,GAAaA,UAAUvD,IAAI,KAAKe,OAAOsC,cAAc,CAAA;QAC3J,IAAI9C,QAAAA,EAAU,OAAOA,QAAAA,CAASyB,KAAK;AACnC,QAAA,OAAO,IAAI,CAACvC,QAAQ,CAACE,OAAO,CAAC2D,IAAI,CAACC,CAAAA,SAAAA,GAAaA,UAAUvD,IAAI,KAAKe,OAAOlB,MAAM,CAAA,EAAGmC,SAAS,EAAE;AACjG,IAAA;AAEQvE,IAAAA,OAAAA,CAAQA,OAAqB,EAAE8D,IAAkB,EAAEC,OAAqB,EAAEgC,SAAoB,EAAW;QAC7G,MAAMnC,EAAAA,GAAKoC,qBAAAA,CAAchG,OAAAA,CAAQ4D,EAAE,CAAA;AACnC,QAAA,MAAMqC,YAAYlG,eAAAA,CAAgBC,OAAAA,CAAAA;AAClC,QAAA,MAAMiE,MAAAA,GAASiC,+BAAAA,CAAoBlG,OAAAA,CAAAA,GAAWA,OAAAA,CAAQmG,aAAa,GAC5DF,SAAAA,KAAcG,4BAAAA,CAAiBpG,OAAAA,CAAAA,GAAW,gBAAA,GAAoBqG,0BAAAA,CAAerG,OAAAA,CAAAA,GAAW,iBAAiB,SAAS,CAAA;QACzH,MAAMsG,UAAAA,GAAa,OAACtG,CAA8BsG,UAAU;AAC5D,QAAA,MAAMpC,QAAQ,OAAQoC,YAAYpC,KAAAA,KAAU,QAAA,IAAYoC,WAAWpC,KAAK,IAChEjE,oBAAQD,OAAAA,CAAAA,IAAaA,QAA8BuC,IAAI,IACvD2D,gCAAoBlG,OAAAA,CAAAA,IAAYA,OAAAA,CAAQuC,IAAI,IAC7C0B,MAAAA;AAEP,QAAA,IAAI,CAAC,IAAI,CAACR,GAAG,CAAC;AACVG,YAAAA,EAAAA;AAAI3C,YAAAA,IAAAA,EAAMwB,0BAAc8D,OAAO;AAAEtC,YAAAA,MAAAA;AAAQC,YAAAA,KAAAA;AAAOJ,YAAAA,IAAAA;YAAMK,KAAAA,EAAOnE,OAAAA;AAASsC,YAAAA,KAAAA,EAAOyB,QAAQzB,KAAK;AAAEE,YAAAA,SAAAA,EAAWuB,QAAQvB,SAAS;AAAE,YAAA,GAAGuD;SACjI,CAAA,EAAI;AACA,YAAA,IAAI,CAACnE,KAAK,CAACG,WAAW,CAACyE,IAAI,CAACC,2BAAAA,CAAgBC,0BAAAA,CAAeC,kBAAkB,EAAE,CAAC,gBAAgB,EAAE3G,OAAAA,CAAQ4D,EAAE,CAAC,yBAAyB,CAAC,EAAE;gBAAEgD,MAAAA,EAAQhD;AAAG,aAAA,CAAA,CAAA;YACtJ,OAAO,KAAA;AACX,QAAA;AAEA,QAAA,IAAIsC,gCAAoBlG,OAAAA,CAAAA,EAAU;YAC9B,KAAK,MAAM,CAACuC,IAAAA,EAAMsE,QAAAA,CAAS,IAAIhC,OAAOiC,OAAO,CAAC9G,OAAAA,CAAQuE,KAAK,CAAA,CAAG;gBAC1DsC,QAAAA,CAAS1E,OAAO,CAAC,CAAC4E,KAAAA,EAAO1E,WACrB,IAAI,CAACrC,OAAO,CAAC+G,KAAAA,EAAO;AAAIjD,wBAAAA,GAAAA,IAAAA;AAAM,wBAAA,OAAA;AAASvB,wBAAAA,IAAAA;AAAMF,wBAAAA;AAAS,qBAAA,EAAE0B,OAAAA,EAAS;wBAAEsB,QAAAA,EAAUzB,EAAAA;wBAAI4B,IAAAA,EAAM;4BAAE1B,IAAAA,EAAM;AAAIA,gCAAAA,GAAAA,IAAAA;AAAM,gCAAA,OAAA;AAASvB,gCAAAA;AAAK,6BAAA;4BAAEX,KAAAA,EAAOS;AAAS,yBAAA;AAAG2E,wBAAAA,MAAAA,EAAQjB,UAAUiB;AAAO,qBAAA,CAAA,CAAA;AAC7K,YAAA;QACJ,CAAA,MAAO,IAAIZ,6BAAiBpG,OAAAA,CAAAA,EAAU;AAClC,YAAA,IAAI,CAACA,OAAO,CAACA,OAAAA,CAAQoE,OAAO,EAAE;AAAIN,gBAAAA,GAAAA,IAAAA;AAAM,gBAAA;AAAU,aAAA,EAAEC,OAAAA,EAAS;gBAAEsB,QAAAA,EAAUzB,EAAAA;AAAIoD,gBAAAA,MAAAA,EAAQjB,UAAUiB;AAAO,aAAA,CAAA;QAC1G,CAAA,MAAO,IAAIX,2BAAerG,OAAAA,CAAAA,EAAU;AAChC,YAAA,IAAI,CAACA,OAAO,CAACA,OAAAA,CAAQiH,YAAY,EAAE;AAAInD,gBAAAA,GAAAA,IAAAA;AAAM,gBAAA;AAAe,aAAA,EAAEC,OAAAA,EAAS;gBAAEsB,QAAAA,EAAUzB,EAAAA;AAAIoD,gBAAAA,MAAAA,EAAQjB,UAAUiB;AAAO,aAAA,CAAA;QACpH,CAAA,MAAO,IAAI/G,oBAAQD,OAAAA,CAAAA,EAAU;YACzBA,OAAAA,CAAQ6G,QAAQ,CAAC1E,OAAO,CAAC,CAAC4E,KAAAA,EAAO1E,QAAAA,GAC7B,IAAI,CAACrC,OAAO,CAAC+G,KAAAA,EAAO;AAAIjD,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,UAAA;AAAYzB,oBAAAA;AAAS,iBAAA,EAAE0B,OAAAA,EAAS;oBAAEsB,QAAAA,EAAUzB,EAAAA;oBAAI4B,IAAAA,EAAM;wBAAE1B,IAAAA,EAAM;AAAIA,4BAAAA,GAAAA,IAAAA;AAAM,4BAAA;AAAW,yBAAA;wBAAElC,KAAAA,EAAOS;AAAS,qBAAA;AAAG2E,oBAAAA,MAAAA,EAAQjB,UAAUiB;AAAO,iBAAA,CAAA,CAAA;AACvK,QAAA;QAEA,OAAO,IAAA;AACX,IAAA;IAEQzB,WAAAA,CAAYA,WAAoB,EAAEzB,IAAkB,EAAEoD,QAAgB,EAAEnD,OAAqB,EAAEsB,QAAAA,GAAW6B,QAAQ,EAAQ;AAC9H,QAAA,IAAI,WAAC3B,CAAgC4B,IAAI,KAAKjH,SAAAA,EAAW;AACrD,YAAA,MAAMkH,IAAAA,GAAO7B,WAAAA;AACb,YAAA,IAAI,CAAC8B,QAAQ,CAACD,IAAAA,CAAKD,IAAI,EAAE;AAAIrD,gBAAAA,GAAAA,IAAAA;AAAM,gBAAA;AAAO,aAAA,EAAEoD,QAAAA,EAAU,MAAA,EAAQ,EAAE,EAAEnD,OAAAA,EAAS;AAAEsB,gBAAAA;AAAS,aAAA,CAAA;AACtF+B,YAAAA,IAAAA,CAAKE,SAAS,EAAEnF,OAAAA,CAAQ,CAACoF,QAAAA,EAAUlF,QAAAA,GAC/B,IAAI,CAACgF,QAAQ,CAACE,QAAAA,CAASJ,IAAI,EAAE;AAAIrD,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,WAAA;AAAazB,oBAAAA,QAAAA;AAAU,oBAAA;iBAAO,EAAE6E,QAAAA,EAAU,CAAC,QAAQ,EAAE7E,UAAU,EAAE,EAAE,EAAE0B,OAAAA,EAAS;AAAEsB,oBAAAA;AAAS,iBAAA,CAAA,CAAA;AACpI,YAAA;AACJ,QAAA;QAEA,MAAMmC,QAAAA,GAAW,WAACjC,CAA8DiC,QAAQ;AACxF,QAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACF,QAAAA,CAAAA,EAAW;AAE9B,QAAA,MAAMG,aAAaC,sBAAAA,CAAeV,QAAAA,CAAAA;QAClC,IAAI,CAACzD,GAAG,CAAC;YAAEG,EAAAA,EAAI+D,UAAAA;AAAY1G,YAAAA,IAAAA,EAAMwB,0BAAcoF,QAAQ;AAAE5D,YAAAA,MAAAA,EAAQ7D,uBAAWyH,QAAQ;YAAE3D,KAAAA,EAAO,UAAA;AAAYJ,YAAAA,IAAAA;YAAMK,KAAAA,EAAOoB,WAAAA;AAAaF,YAAAA,QAAAA;AAAU/C,YAAAA,KAAAA,EAAOyB,QAAQzB,KAAK;AAAEE,YAAAA,SAAAA,EAAWuB,QAAQvB;AAAU,SAAA,CAAA;AAEhM,QAAA,MAAMsF,YAAY,IAAIhG,GAAAA,EAAAA;QACtB0F,QAAAA,CAASrF,OAAO,CAAC,CAAC4F,OAAAA,EAASC,YAAAA,GAAAA;AACtBD,YAAAA,OAAAA,CAAQE,UAAU,CAAqD9F,OAAO,CAAC,CAAC4D,SAAAA,EAAWmC,cAAAA,GAAAA;AACxF,gBAAA,MAAMC,aAAAA,GAAgB;AAAIrE,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,UAAA;AAAYkE,oBAAAA,YAAAA;AAAc,oBAAA,YAAA;AAAcE,oBAAAA;AAAe,iBAAA;gBACvF,MAAME,GAAAA,GAAMrC,UAAU/F,OAAO,EAAE4D,MAAMmC,SAAAA,CAAUT,QAAQ,IAAI+C,MAAAA,CAAOH,cAAAA,CAAAA;gBAClE,MAAMI,WAAAA,GAAcC,uBAAAA,CAAgBrB,QAAAA,EAAUc,YAAAA,EAAcI,GAAAA,CAAAA;gBAC5D,IAAI,CAAC3E,GAAG,CAAC;oBACLG,EAAAA,EAAI0E,WAAAA;AAAarH,oBAAAA,IAAAA,EAAMwB,0BAAc+F,SAAS;oBAAEvE,MAAAA,EAAQ,WAAA;oBAAaC,KAAAA,EAAOkE,GAAAA;oBAAKtE,IAAAA,EAAMqE,aAAAA;oBAAehE,KAAAA,EAAO4B,SAAAA;oBAC7GV,QAAAA,EAAUsC,UAAAA;AAAYrF,oBAAAA,KAAAA,EAAOyB,QAAQzB,KAAK;AAAEE,oBAAAA,SAAAA,EAAWuB,QAAQvB,SAAS;oBACxEgD,IAAAA,EAAM;wBAAE1B,IAAAA,EAAM;AAAIA,4BAAAA,GAAAA,IAAAA;AAAM,4BAAA,UAAA;AAAYkE,4BAAAA,YAAAA;AAAc,4BAAA;AAAa,yBAAA;wBAAEpG,KAAAA,EAAOsG;AAAe;AAC3F,iBAAA,CAAA;gBAEA,IAAI,CAACnC,SAAAA,CAAU/F,OAAO,EAAE;AACxB,gBAAA,MAAMyI,WAAAA,GAAc;AAAIN,oBAAAA,GAAAA,aAAAA;AAAe,oBAAA;AAAU,iBAAA;AACjD,gBAAA,MAAMO,KAAAA,GAAQ,IAAI,CAAC9G,KAAK,CAACC,KAAK,CAAC8G,GAAG,CAAC3C,qBAAAA,CAAcD,SAAAA,CAAU/F,OAAO,CAAC4D,EAAE,CAAA,CAAA;AACrE,gBAAA,MAAMgF,WAAWd,SAAAA,CAAUa,GAAG,CAAC5C,SAAAA,CAAU/F,OAAO,CAAC4D,EAAE,CAAA;AACnD,gBAAA,IAAI8E,SAASE,QAAAA,EAAU;oBACnBF,KAAAA,CAAMG,YAAY,CAAErC,IAAI,CAAC8B,WAAAA,CAAAA;AACzBI,oBAAAA,KAAAA,CAAM1B,MAAM,CAAE8B,MAAM,CAACtC,IAAI,CAACiC,WAAAA,CAAAA;AAC1B,oBAAA;AACJ,gBAAA;AAEAX,gBAAAA,SAAAA,CAAUjE,GAAG,CAACkC,SAAAA,CAAU/F,OAAO,CAAC4D,EAAE,EAAE6E,WAAAA,CAAAA;AACpC,gBAAA,MAAMzB,MAAAA,GAAS;oBAAE+B,MAAAA,EAAQN,WAAAA;AAAaK,oBAAAA,MAAAA,EAAQ;AAAqB,iBAAA;gBACnE,IAAI,IAAI,CAAC9I,OAAO,CAAC+F,UAAU/F,OAAO,EAAEyI,aAAa1E,OAAAA,EAAS;oBAAEsB,QAAAA,EAAUiD,WAAAA;AAAatB,oBAAAA;iBAAO,CAAA,EAAI;AAC1F,oBAAA,IAAI,CAACpF,KAAK,CAACC,KAAK,CAAC8G,GAAG,CAAC3C,qBAAAA,CAAcD,SAAAA,CAAU/F,OAAO,CAAC4D,EAAE,CAAA,CAAA,CAAIiF,YAAY,GAAG;AAACP,wBAAAA;AAAY,qBAAA;AAC3F,gBAAA;AACJ,YAAA,CAAA,CAAA;AACJ,QAAA,CAAA,CAAA;;AAGJ,IAAA;AAEQjB,IAAAA,QAAAA,CAAStG,IAAc,EAAE+C,IAAkB,EAAEoD,QAAgB,EAAEa,OAAe,EAAEiB,SAAmB,EAAEjF,OAAqB,EAAEgC,SAAoB,EAAQ;QAC5J,MAAMnC,EAAAA,GAAKqF,kBAAAA,CAAW/B,QAAAA,EAAUa,OAAAA,EAASiB,SAAAA,CAAAA;AACzC,QAAA,MAAME,OAAOpI,cAAAA,CAAeC,IAAAA,CAAAA;QAC5B,IAAI,CAAC0C,GAAG,CAAC;AAAEG,YAAAA,EAAAA;AAAI3C,YAAAA,IAAAA,EAAMwB,0BAAc0G,QAAQ;YAAElF,MAAAA,EAAQiF,IAAAA;YAAMhF,KAAAA,EAAOgF,IAAAA;AAAMpF,YAAAA,IAAAA;YAAMK,KAAAA,EAAOpD,IAAAA;AAAMuB,YAAAA,KAAAA,EAAOyB,QAAQzB,KAAK;AAAEE,YAAAA,SAAAA,EAAWuB,QAAQvB,SAAS;AAAE,YAAA,GAAGuD;AAAU,SAAA,CAAA;AAE5J,QAAA,IAAI/E,6BAAgBD,IAAAA,CAAAA,EAAO;YACtBA,IAAAA,CAAuB8F,QAAQ,CAAC1E,OAAO,CAAC,CAAC4E,KAAAA,EAAO1E,QAAAA,GAC7C,IAAI,CAACgF,QAAQ,CAACN,KAAAA,EAAO;AAAIjD,oBAAAA,GAAAA,IAAAA;AAAM,oBAAA,UAAA;AAAYzB,oBAAAA;AAAS,iBAAA,EAAE6E,UAAUa,OAAAA,EAAS;AAAIiB,oBAAAA,GAAAA,SAAAA;AAAW3G,oBAAAA;AAAS,iBAAA,EAAE0B,OAAAA,EAC/F;oBAAEsB,QAAAA,EAAUzB,EAAAA;oBAAI4B,IAAAA,EAAM;wBAAE1B,IAAAA,EAAM;AAAIA,4BAAAA,GAAAA,IAAAA;AAAM,4BAAA;AAAW,yBAAA;wBAAElC,KAAAA,EAAOS;AAAS;AAAE,iBAAA,CAAA,CAAA;QACnF,CAAA,MAAO,IAAI+G,wBAAWrI,IAAAA,CAAAA,EAAO;AACzB,YAAA,IAAI,CAACf,OAAO,CAAC,IAACe,CAAkBqD,OAAO,EAAE;AAAIN,gBAAAA,GAAAA,IAAAA;AAAM,gBAAA;AAAU,aAAA,EAAEC,OAAAA,EAAS;gBAAEsB,QAAAA,EAAUzB,EAAAA;gBAAIyF,MAAAA,EAAQzF;AAAG,aAAA,CAAA;AACvG,QAAA;AAEJ,IAAA;AACJ;AAEA;;;;;;;;IASO,SAAS0F,aAAAA,CAActH,QAAuB,EAAA;IACjD,OAAO,IAAIL,OAAAA,CAAQK,QAAAA,CAAAA,CAAUC,GAAG,EAAA;AACpC;;;;"}
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ var scene_model = require('@cratis/scene.model');
4
+ var describeNode = require('./describeNode.js');
5
+ var exposureGrants = require('./exposureGrants.js');
6
+ var iconDiagnostics = require('./iconDiagnostics.js');
7
+ var indexDocument = require('./indexDocument.js');
8
+ var resolveEffectiveConfiguration = require('./resolveEffectiveConfiguration.js');
9
+ var resolveTemplateChain = require('./resolveTemplateChain.js');
10
+
11
+ // Copyright (c) Cratis. All rights reserved.
12
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
13
+ /**
14
+ * Works out whether a node is the editing scope's own, and when it is not, where it comes from and whether any of
15
+ * it is configurable here.
16
+ *
17
+ * @param record The node.
18
+ * @param chain The chain the scope sits in.
19
+ * @param scopeGrants What the scope's own instance may configure.
20
+ */ function provenanceOf(record, chain, scopeGrants) {
21
+ const scopeLevel = chain.levels.at(-1);
22
+ if (scopeLevel && record.owner === scopeLevel.owner && record.ownerKind === scopeLevel.kind) return {
23
+ kind: scene_model.ProvenanceKind.Local
24
+ };
25
+ const configurable = record.kind === scene_model.SceneNodeKind.Element && [
26
+ ...scopeGrants?.values() ?? []
27
+ ].some((grant)=>grant.component === record.value.id);
28
+ return {
29
+ kind: configurable ? scene_model.ProvenanceKind.ConfigurableInherited : scene_model.ProvenanceKind.Inherited,
30
+ source: record.owner
31
+ };
32
+ }
33
+ function isRemovable(record, provenance) {
34
+ return provenance.kind === scene_model.ProvenanceKind.Local && (record.list !== undefined || record.leafId !== undefined || record.placementIds !== undefined);
35
+ }
36
+ function toInspectedItems(raw, local) {
37
+ return (Array.isArray(raw) ? raw : []).map((item, position)=>{
38
+ const { id, ...values } = item;
39
+ return {
40
+ id: typeof id === 'string' ? id : `owner-${position}`,
41
+ values,
42
+ origin: 'owner',
43
+ editable: local
44
+ };
45
+ });
46
+ }
47
+ function inspectProperty(descriptor, record, provenance, scopeInstance, grants, configuredValues) {
48
+ const currentValue = describeNode.readNodeValue(record, descriptor.path);
49
+ const configured = configuredValues?.find((candidate)=>candidate.path === descriptor.path);
50
+ const local = provenance.kind === scene_model.ProvenanceKind.Local;
51
+ const isCollection = descriptor.valueType === scene_model.PropertyValueType.Collection;
52
+ const inspected = {
53
+ descriptor,
54
+ currentValue,
55
+ effectiveValue: configured ? configured.value : currentValue ?? descriptor.default,
56
+ source: configured?.source ?? (currentValue === undefined ? scene_model.ValueSource.Default : scene_model.ValueSource.Local),
57
+ editable: false
58
+ };
59
+ const grant = !local && record.kind === scene_model.SceneNodeKind.Element ? grants?.get(exposureGrants.grantKey(record.value.id, descriptor.path)) : undefined;
60
+ if (local) {
61
+ inspected.editable = descriptor.readOnly !== true;
62
+ if (inspected.editable) inspected.editTarget = scene_model.EditTarget.Node;
63
+ else inspected.reason = 'This property is read-only.';
64
+ } else if (grant) {
65
+ inspected.editable = true;
66
+ inspected.editTarget = scene_model.EditTarget.Instance;
67
+ if (isCollection) inspected.operations = grant.operations;
68
+ } else {
69
+ inspected.reason = `Inherited from '${provenance.source}', which does not expose it.`;
70
+ }
71
+ if (isCollection) {
72
+ const items = configured?.items ? configured.items.map((item)=>({
73
+ ...item,
74
+ editable: local || item.origin === scopeInstance && grant !== undefined && grant.operations.length > 0
75
+ })) : toInspectedItems(currentValue, local);
76
+ inspected.items = items;
77
+ }
78
+ return inspected;
79
+ }
80
+ /**
81
+ * Reports icons the profile cannot supply - on the node itself and in configuration contributed to it. The values
82
+ * stay where they are; these are warnings.
83
+ */ function iconDiagnosticsOf(properties, iconCatalog, nodeId) {
84
+ return properties.flatMap((property)=>{
85
+ const descriptor = property.descriptor;
86
+ if (descriptor.valueType !== scene_model.PropertyValueType.Collection) {
87
+ return iconDiagnostics.iconProblemsOfProperty(iconCatalog, descriptor, property.effectiveValue, scene_model.DiagnosticSeverity.Warning, {
88
+ nodeId
89
+ });
90
+ }
91
+ const items = (property.items ?? []).map((item)=>({
92
+ id: item.id,
93
+ values: item.values,
94
+ instance: item.origin === 'owner' ? undefined : item.origin
95
+ }));
96
+ return iconDiagnostics.iconProblemsOfItems(iconCatalog, descriptor.item, items, scene_model.DiagnosticSeverity.Warning, {
97
+ nodeId,
98
+ path: descriptor.path
99
+ });
100
+ });
101
+ }
102
+ /**
103
+ * Describes one node for an editor: what it is, where it comes from, what can be edited on it - with current and
104
+ * effective values and effective editability - and what can be done with it.
105
+ *
106
+ * A property of a node the scope owns is edited on the node. A property of an inherited node is editable only
107
+ * when its owner exposed it, and then the edit goes to an instance contribution, never into the inherited node.
108
+ * Nothing is mutated.
109
+ *
110
+ * @param document The document to read.
111
+ * @param nodeId The node to describe; see the node id functions.
112
+ * @param context The catalog and the editing scope.
113
+ * @returns The inspection, or `undefined` when the document has no such node.
114
+ */ function inspect(document, nodeId, context) {
115
+ const index = indexDocument.indexDocument(document);
116
+ const record = index.nodes.get(nodeId);
117
+ if (!record) return undefined;
118
+ const chain = resolveTemplateChain.resolveTemplateChain(document, context.scope);
119
+ const grants = exposureGrants.computeExposureGrants(chain, context.catalog);
120
+ const scopeInstance = chain.levels.at(-1)?.instance;
121
+ const scopeGrants = scopeInstance === undefined ? undefined : grants.byInstance.get(scopeInstance);
122
+ const configuration = resolveEffectiveConfiguration.resolveEffectiveConfiguration(chain, document.instanceContributions, context.catalog);
123
+ const provenance = provenanceOf(record, chain, scopeGrants);
124
+ const description = describeNode.describeNode(record, context.catalog);
125
+ const componentId = record.kind === scene_model.SceneNodeKind.Element ? record.value.id : undefined;
126
+ const configuredValues = configuration.components.find((candidate)=>candidate.component === componentId)?.values;
127
+ const diagnostics = [
128
+ ...description.diagnostics,
129
+ ...configuration.diagnostics.filter((diagnostic)=>diagnostic.component !== undefined && diagnostic.component === componentId)
130
+ ];
131
+ if (chain.levels.length === 0) {
132
+ diagnostics.push(...chain.diagnostics.filter((diagnostic)=>diagnostic.code === scene_model.DiagnosticCode.UnknownScope));
133
+ }
134
+ const properties = description.properties.map((descriptor)=>inspectProperty(descriptor, record, provenance, scopeInstance, scopeGrants, configuredValues));
135
+ if (context.iconCatalog) {
136
+ diagnostics.push(...iconDiagnosticsOf(properties, context.iconCatalog, nodeId));
137
+ }
138
+ return {
139
+ nodeId,
140
+ kind: record.kind,
141
+ typeId: record.typeId,
142
+ label: record.label,
143
+ parentId: record.parentId,
144
+ provenance,
145
+ properties,
146
+ capabilities: description.capabilities,
147
+ removable: isRemovable(record, provenance),
148
+ diagnostics
149
+ };
150
+ }
151
+
152
+ exports.inspect = inspect;
153
+ exports.provenanceOf = provenanceOf;
154
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sources":["../../../editing/inspect.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 DiagnosticCode, DiagnosticSeverity, EditTarget, InspectedCollectionItem, InspectedProperty, NodeInspection,\n NodeProvenance, ProvenanceKind, PropertyDescriptor, PropertyValueType, SceneDiagnostic, SceneDocument, SceneNodeKind, ValueSource,\n} from '@cratis/scene.model';\nimport { describeNode, readNodeValue } from './describeNode';\nimport { EffectiveIconCatalog } from '../icons/EffectiveIconCatalog';\nimport { EditingContext } from './EditingContext';\nimport { computeExposureGrants, ExposureGrant, grantKey } from './exposureGrants';\nimport { iconProblemsOfItems, iconProblemsOfProperty } from './iconDiagnostics';\nimport { indexDocument } from './indexDocument';\nimport { NodeRecord } from './DocumentIndex';\nimport { resolveEffectiveConfiguration } from './resolveEffectiveConfiguration';\nimport { resolveTemplateChain } from './resolveTemplateChain';\nimport { TemplateChain } from './TemplateChain';\n\n/**\n * Works out whether a node is the editing scope's own, and when it is not, where it comes from and whether any of\n * it is configurable here.\n *\n * @param record The node.\n * @param chain The chain the scope sits in.\n * @param scopeGrants What the scope's own instance may configure.\n */\nexport function provenanceOf(record: NodeRecord, chain: TemplateChain, scopeGrants: Map<string, ExposureGrant> | undefined): NodeProvenance {\n const scopeLevel = chain.levels.at(-1);\n if (scopeLevel && record.owner === scopeLevel.owner && record.ownerKind === scopeLevel.kind) return { kind: ProvenanceKind.Local };\n\n const configurable = record.kind === SceneNodeKind.Element\n && [...(scopeGrants?.values() ?? [])].some(grant => grant.component === (record.value as { id: string }).id);\n return { kind: configurable ? ProvenanceKind.ConfigurableInherited : ProvenanceKind.Inherited, source: record.owner };\n}\n\nfunction isRemovable(record: NodeRecord, provenance: NodeProvenance): boolean {\n return provenance.kind === ProvenanceKind.Local\n && (record.list !== undefined || record.leafId !== undefined || record.placementIds !== undefined);\n}\n\nfunction toInspectedItems(raw: unknown, local: boolean): InspectedCollectionItem[] {\n return (Array.isArray(raw) ? raw : []).map((item: Record<string, unknown>, position) => {\n const { id, ...values } = item;\n return { id: typeof id === 'string' ? id : `owner-${position}`, values, origin: 'owner', editable: local };\n });\n}\n\nfunction inspectProperty(\n descriptor: PropertyDescriptor,\n record: NodeRecord,\n provenance: NodeProvenance,\n scopeInstance: string | undefined,\n grants: Map<string, ExposureGrant> | undefined,\n configuredValues: { path: string; value: unknown; source: string; items?: { id: string; values: Record<string, unknown>; origin: string }[] }[] | undefined,\n): InspectedProperty {\n const currentValue = readNodeValue(record, descriptor.path);\n const configured = configuredValues?.find(candidate => candidate.path === descriptor.path);\n const local = provenance.kind === ProvenanceKind.Local;\n const isCollection = descriptor.valueType === PropertyValueType.Collection;\n\n const inspected: InspectedProperty = {\n descriptor,\n currentValue,\n effectiveValue: configured ? configured.value : (currentValue ?? descriptor.default),\n source: (configured?.source ?? (currentValue === undefined ? ValueSource.Default : ValueSource.Local)) as ValueSource,\n editable: false,\n };\n\n const grant = !local && record.kind === SceneNodeKind.Element\n ? grants?.get(grantKey((record.value as { id: string }).id, descriptor.path))\n : undefined;\n\n if (local) {\n inspected.editable = descriptor.readOnly !== true;\n if (inspected.editable) inspected.editTarget = EditTarget.Node;\n else inspected.reason = 'This property is read-only.';\n } else if (grant) {\n inspected.editable = true;\n inspected.editTarget = EditTarget.Instance;\n if (isCollection) inspected.operations = grant.operations;\n } else {\n inspected.reason = `Inherited from '${provenance.source}', which does not expose it.`;\n }\n\n if (isCollection) {\n const items = configured?.items\n ? configured.items.map(item => ({ ...item, editable: local || (item.origin === scopeInstance && grant !== undefined && grant.operations.length > 0) }))\n : toInspectedItems(currentValue, local);\n inspected.items = items;\n }\n\n return inspected;\n}\n\n/**\n * Reports icons the profile cannot supply - on the node itself and in configuration contributed to it. The values\n * stay where they are; these are warnings.\n */\nfunction iconDiagnosticsOf(properties: InspectedProperty[], iconCatalog: EffectiveIconCatalog, nodeId: string): SceneDiagnostic[] {\n return properties.flatMap(property => {\n const descriptor = property.descriptor;\n if (descriptor.valueType !== PropertyValueType.Collection) {\n return iconProblemsOfProperty(iconCatalog, descriptor, property.effectiveValue, DiagnosticSeverity.Warning, { nodeId });\n }\n\n const items = (property.items ?? []).map(item => ({ id: item.id, values: item.values, instance: item.origin === 'owner' ? undefined : item.origin }));\n return iconProblemsOfItems(iconCatalog, descriptor.item, items, DiagnosticSeverity.Warning, { nodeId, path: descriptor.path });\n });\n}\n\n/**\n * Describes one node for an editor: what it is, where it comes from, what can be edited on it - with current and\n * effective values and effective editability - and what can be done with it.\n *\n * A property of a node the scope owns is edited on the node. A property of an inherited node is editable only\n * when its owner exposed it, and then the edit goes to an instance contribution, never into the inherited node.\n * Nothing is mutated.\n *\n * @param document The document to read.\n * @param nodeId The node to describe; see the node id functions.\n * @param context The catalog and the editing scope.\n * @returns The inspection, or `undefined` when the document has no such node.\n */\nexport function inspect(document: SceneDocument, nodeId: string, context: EditingContext): NodeInspection | undefined {\n const index = indexDocument(document);\n const record = index.nodes.get(nodeId);\n if (!record) return undefined;\n\n const chain = resolveTemplateChain(document, context.scope);\n const grants = computeExposureGrants(chain, context.catalog);\n const scopeInstance = chain.levels.at(-1)?.instance;\n const scopeGrants = scopeInstance === undefined ? undefined : grants.byInstance.get(scopeInstance);\n const configuration = resolveEffectiveConfiguration(chain, document.instanceContributions, context.catalog);\n\n const provenance = provenanceOf(record, chain, scopeGrants);\n const description = describeNode(record, context.catalog);\n const componentId = record.kind === SceneNodeKind.Element ? (record.value as { id: string }).id : undefined;\n const configuredValues = configuration.components.find(candidate => candidate.component === componentId)?.values;\n\n const diagnostics: SceneDiagnostic[] = [\n ...description.diagnostics,\n ...configuration.diagnostics.filter(diagnostic => diagnostic.component !== undefined && diagnostic.component === componentId),\n ];\n if (chain.levels.length === 0) {\n diagnostics.push(...chain.diagnostics.filter(diagnostic => diagnostic.code === DiagnosticCode.UnknownScope));\n }\n\n const properties = description.properties.map(descriptor => inspectProperty(descriptor, record, provenance, scopeInstance, scopeGrants, configuredValues));\n if (context.iconCatalog) {\n diagnostics.push(...iconDiagnosticsOf(properties, context.iconCatalog, nodeId));\n }\n\n return {\n nodeId,\n kind: record.kind,\n typeId: record.typeId,\n label: record.label,\n parentId: record.parentId,\n provenance,\n properties,\n capabilities: description.capabilities,\n removable: isRemovable(record, provenance),\n diagnostics,\n };\n}\n"],"names":["provenanceOf","record","chain","scopeGrants","scopeLevel","levels","at","owner","ownerKind","kind","ProvenanceKind","Local","configurable","SceneNodeKind","Element","values","some","grant","component","value","id","ConfigurableInherited","Inherited","source","isRemovable","provenance","list","undefined","leafId","placementIds","toInspectedItems","raw","local","Array","isArray","map","item","position","origin","editable","inspectProperty","descriptor","scopeInstance","grants","configuredValues","currentValue","readNodeValue","path","configured","find","candidate","isCollection","valueType","PropertyValueType","Collection","inspected","effectiveValue","default","ValueSource","Default","get","grantKey","readOnly","editTarget","EditTarget","Node","reason","Instance","operations","items","length","iconDiagnosticsOf","properties","iconCatalog","nodeId","flatMap","property","iconProblemsOfProperty","DiagnosticSeverity","Warning","instance","iconProblemsOfItems","inspect","document","context","index","indexDocument","nodes","resolveTemplateChain","scope","computeExposureGrants","catalog","byInstance","configuration","resolveEffectiveConfiguration","instanceContributions","description","describeNode","componentId","components","diagnostics","filter","diagnostic","push","code","DiagnosticCode","UnknownScope","typeId","label","parentId","capabilities","removable"],"mappings":";;;;;;;;;;AAAA;AACA;AAiBA;;;;;;;AAOC,IACM,SAASA,YAAAA,CAAaC,MAAkB,EAAEC,KAAoB,EAAEC,WAAmD,EAAA;AACtH,IAAA,MAAMC,aAAaF,KAAAA,CAAMG,MAAM,CAACC,EAAE,CAAC,EAAC,CAAA;AACpC,IAAA,IAAIF,UAAAA,IAAcH,MAAAA,CAAOM,KAAK,KAAKH,UAAAA,CAAWG,KAAK,IAAIN,MAAAA,CAAOO,SAAS,KAAKJ,UAAAA,CAAWK,IAAI,EAAE,OAAO;AAAEA,QAAAA,IAAAA,EAAMC,2BAAeC;AAAM,KAAA;AAEjI,IAAA,MAAMC,eAAeX,MAAAA,CAAOQ,IAAI,KAAKI,yBAAAA,CAAcC,OAAO,IACnD;AAAKX,QAAAA,GAAAA,WAAAA,EAAaY,YAAY;KAAI,CAACC,IAAI,CAACC,CAAAA,KAAAA,GAASA,KAAAA,CAAMC,SAAS,KAAK,MAACjB,CAAOkB,KAAK,CAAoBC,EAAE,CAAA;IAC/G,OAAO;AAAEX,QAAAA,IAAAA,EAAMG,YAAAA,GAAeF,0BAAAA,CAAeW,qBAAqB,GAAGX,2BAAeY,SAAS;AAAEC,QAAAA,MAAAA,EAAQtB,OAAOM;AAAM,KAAA;AACxH;AAEA,SAASiB,WAAAA,CAAYvB,MAAkB,EAAEwB,UAA0B,EAAA;AAC/D,IAAA,OAAOA,WAAWhB,IAAI,KAAKC,2BAAeC,KAAK,KACvCV,MAAAA,CAAOyB,IAAI,KAAKC,SAAAA,IAAa1B,OAAO2B,MAAM,KAAKD,aAAa1B,MAAAA,CAAO4B,YAAY,KAAKF,SAAQ,CAAA;AACxG;AAEA,SAASG,gBAAAA,CAAiBC,GAAY,EAAEC,KAAc,EAAA;AAClD,IAAA,OAAO,CAACC,KAAAA,CAAMC,OAAO,CAACH,GAAAA,CAAAA,GAAOA,GAAAA,GAAM,EAAE,EAAEI,GAAG,CAAC,CAACC,IAAAA,EAA+BC,QAAAA,GAAAA;AACvE,QAAA,MAAM,EAAEjB,EAAE,EAAE,GAAGL,QAAQ,GAAGqB,IAAAA;QAC1B,OAAO;AAAEhB,YAAAA,EAAAA,EAAI,OAAOA,EAAAA,KAAO,QAAA,GAAWA,KAAK,CAAC,MAAM,EAAEiB,QAAAA,CAAAA,CAAU;AAAEtB,YAAAA,MAAAA;YAAQuB,MAAAA,EAAQ,OAAA;YAASC,QAAAA,EAAUP;AAAM,SAAA;AAC7G,IAAA,CAAA,CAAA;AACJ;AAEA,SAASQ,eAAAA,CACLC,UAA8B,EAC9BxC,MAAkB,EAClBwB,UAA0B,EAC1BiB,aAAiC,EACjCC,MAA8C,EAC9CC,gBAA2J,EAAA;AAE3J,IAAA,MAAMC,YAAAA,GAAeC,0BAAAA,CAAc7C,MAAAA,EAAQwC,UAAAA,CAAWM,IAAI,CAAA;IAC1D,MAAMC,UAAAA,GAAaJ,kBAAkBK,IAAAA,CAAKC,CAAAA,YAAaA,SAAAA,CAAUH,IAAI,KAAKN,UAAAA,CAAWM,IAAI,CAAA;AACzF,IAAA,MAAMf,KAAAA,GAAQP,UAAAA,CAAWhB,IAAI,KAAKC,2BAAeC,KAAK;AACtD,IAAA,MAAMwC,YAAAA,GAAeV,UAAAA,CAAWW,SAAS,KAAKC,8BAAkBC,UAAU;AAE1E,IAAA,MAAMC,SAAAA,GAA+B;AACjCd,QAAAA,UAAAA;AACAI,QAAAA,YAAAA;AACAW,QAAAA,cAAAA,EAAgBR,aAAaA,UAAAA,CAAW7B,KAAK,GAAI0B,YAAAA,IAAgBJ,WAAWgB,OAAO;QACnFlC,MAAAA,EAASyB,UAAAA,EAAYzB,MAAAA,KAAWsB,YAAAA,KAAiBlB,SAAAA,GAAY+B,wBAAYC,OAAO,GAAGD,uBAAAA,CAAY/C,KAAK,CAAD;QACnG4B,QAAAA,EAAU;AACd,KAAA;IAEA,MAAMtB,KAAAA,GAAQ,CAACe,KAAAA,IAAS/B,MAAAA,CAAOQ,IAAI,KAAKI,yBAAAA,CAAcC,OAAO,GACvD6B,MAAAA,EAAQiB,IAAIC,uBAAAA,CAAU5D,OAAOkB,KAAK,CAAoBC,EAAE,EAAEqB,UAAAA,CAAWM,IAAI,CAAA,CAAA,GACzEpB,SAAAA;AAEN,IAAA,IAAIK,KAAAA,EAAO;AACPuB,QAAAA,SAAAA,CAAUhB,QAAQ,GAAGE,UAAAA,CAAWqB,QAAQ,KAAK,IAAA;AAC7C,QAAA,IAAIP,UAAUhB,QAAQ,EAAEgB,UAAUQ,UAAU,GAAGC,uBAAWC,IAAI;AACzDV,aAAAA,SAAAA,CAAUW,MAAM,GAAG,6BAAA;AAC5B,IAAA,CAAA,MAAO,IAAIjD,KAAAA,EAAO;AACdsC,QAAAA,SAAAA,CAAUhB,QAAQ,GAAG,IAAA;QACrBgB,SAAAA,CAAUQ,UAAU,GAAGC,sBAAAA,CAAWG,QAAQ;AAC1C,QAAA,IAAIhB,YAAAA,EAAcI,SAAAA,CAAUa,UAAU,GAAGnD,MAAMmD,UAAU;IAC7D,CAAA,MAAO;QACHb,SAAAA,CAAUW,MAAM,GAAG,CAAC,gBAAgB,EAAEzC,UAAAA,CAAWF,MAAM,CAAC,4BAA4B,CAAC;AACzF,IAAA;AAEA,IAAA,IAAI4B,YAAAA,EAAc;QACd,MAAMkB,KAAAA,GAAQrB,UAAAA,EAAYqB,KAAAA,GACpBrB,UAAAA,CAAWqB,KAAK,CAAClC,GAAG,CAACC,CAAAA,IAAAA,IAAS;AAAE,gBAAA,GAAGA,IAAI;gBAAEG,QAAAA,EAAUP,KAAAA,IAAUI,IAAAA,CAAKE,MAAM,KAAKI,aAAAA,IAAiBzB,KAAAA,KAAUU,SAAAA,IAAaV,KAAAA,CAAMmD,UAAU,CAACE,MAAM,GAAG;aAAG,CAAA,CAAA,GAClJxC,iBAAiBe,YAAAA,EAAcb,KAAAA,CAAAA;AACrCuB,QAAAA,SAAAA,CAAUc,KAAK,GAAGA,KAAAA;AACtB,IAAA;IAEA,OAAOd,SAAAA;AACX;AAEA;;;AAGC,IACD,SAASgB,iBAAAA,CAAkBC,UAA+B,EAAEC,WAAiC,EAAEC,MAAc,EAAA;IACzG,OAAOF,UAAAA,CAAWG,OAAO,CAACC,CAAAA,QAAAA,GAAAA;QACtB,MAAMnC,UAAAA,GAAamC,SAASnC,UAAU;AACtC,QAAA,IAAIA,UAAAA,CAAWW,SAAS,KAAKC,6BAAAA,CAAkBC,UAAU,EAAE;YACvD,OAAOuB,sCAAAA,CAAuBJ,aAAahC,UAAAA,EAAYmC,QAAAA,CAASpB,cAAc,EAAEsB,8BAAAA,CAAmBC,OAAO,EAAE;AAAEL,gBAAAA;AAAO,aAAA,CAAA;AACzH,QAAA;AAEA,QAAA,MAAML,KAAAA,GAASO,CAAAA,QAAAA,CAASP,KAAK,IAAI,EAAC,EAAGlC,GAAG,CAACC,CAAAA,QAAS;AAAEhB,gBAAAA,EAAAA,EAAIgB,KAAKhB,EAAE;AAAEL,gBAAAA,MAAAA,EAAQqB,KAAKrB,MAAM;AAAEiE,gBAAAA,QAAAA,EAAU5C,KAAKE,MAAM,KAAK,OAAA,GAAUX,SAAAA,GAAYS,KAAKE;aAAO,CAAA,CAAA;QAClJ,OAAO2C,mCAAAA,CAAoBR,aAAahC,UAAAA,CAAWL,IAAI,EAAEiC,KAAAA,EAAOS,8BAAAA,CAAmBC,OAAO,EAAE;AAAEL,YAAAA,MAAAA;AAAQ3B,YAAAA,IAAAA,EAAMN,WAAWM;AAAK,SAAA,CAAA;AAChI,IAAA,CAAA,CAAA;AACJ;AAEA;;;;;;;;;;;;AAYC,IACM,SAASmC,OAAAA,CAAQC,QAAuB,EAAET,MAAc,EAAEU,OAAuB,EAAA;AACpF,IAAA,MAAMC,QAAQC,2BAAAA,CAAcH,QAAAA,CAAAA;AAC5B,IAAA,MAAMlF,MAAAA,GAASoF,KAAAA,CAAME,KAAK,CAAC3B,GAAG,CAACc,MAAAA,CAAAA;IAC/B,IAAI,CAACzE,QAAQ,OAAO0B,SAAAA;AAEpB,IAAA,MAAMzB,KAAAA,GAAQsF,yCAAAA,CAAqBL,QAAAA,EAAUC,OAAAA,CAAQK,KAAK,CAAA;AAC1D,IAAA,MAAM9C,MAAAA,GAAS+C,oCAAAA,CAAsBxF,KAAAA,EAAOkF,OAAAA,CAAQO,OAAO,CAAA;AAC3D,IAAA,MAAMjD,gBAAgBxC,KAAAA,CAAMG,MAAM,CAACC,EAAE,CAAC,EAAC,CAAA,EAAI0E,QAAAA;IAC3C,MAAM7E,WAAAA,GAAcuC,kBAAkBf,SAAAA,GAAYA,SAAAA,GAAYgB,OAAOiD,UAAU,CAAChC,GAAG,CAAClB,aAAAA,CAAAA;AACpF,IAAA,MAAMmD,gBAAgBC,2DAAAA,CAA8B5F,KAAAA,EAAOiF,SAASY,qBAAqB,EAAEX,QAAQO,OAAO,CAAA;IAE1G,MAAMlE,UAAAA,GAAazB,YAAAA,CAAaC,MAAAA,EAAQC,KAAAA,EAAOC,WAAAA,CAAAA;AAC/C,IAAA,MAAM6F,WAAAA,GAAcC,yBAAAA,CAAahG,MAAAA,EAAQmF,OAAAA,CAAQO,OAAO,CAAA;AACxD,IAAA,MAAMO,WAAAA,GAAcjG,MAAAA,CAAOQ,IAAI,KAAKI,yBAAAA,CAAcC,OAAO,GAAIb,MAAAA,CAAOkB,KAAK,CAAoBC,EAAE,GAAGO,SAAAA;IAClG,MAAMiB,gBAAAA,GAAmBiD,aAAAA,CAAcM,UAAU,CAAClD,IAAI,CAACC,CAAAA,SAAAA,GAAaA,SAAAA,CAAUhC,SAAS,KAAKgF,WAAAA,CAAAA,EAAcnF,MAAAA;AAE1G,IAAA,MAAMqF,WAAAA,GAAiC;AAChCJ,QAAAA,GAAAA,WAAAA,CAAYI,WAAW;AACvBP,QAAAA,GAAAA,aAAAA,CAAcO,WAAW,CAACC,MAAM,CAACC,CAAAA,UAAAA,GAAcA,UAAAA,CAAWpF,SAAS,KAAKS,SAAAA,IAAa2E,UAAAA,CAAWpF,SAAS,KAAKgF,WAAAA;AACpH,KAAA;AACD,IAAA,IAAIhG,KAAAA,CAAMG,MAAM,CAACiE,MAAM,KAAK,CAAA,EAAG;AAC3B8B,QAAAA,WAAAA,CAAYG,IAAI,CAAA,GAAIrG,KAAAA,CAAMkG,WAAW,CAACC,MAAM,CAACC,CAAAA,UAAAA,GAAcA,UAAAA,CAAWE,IAAI,KAAKC,2BAAeC,YAAY,CAAA,CAAA;AAC9G,IAAA;AAEA,IAAA,MAAMlC,UAAAA,GAAawB,WAAAA,CAAYxB,UAAU,CAACrC,GAAG,CAACM,CAAAA,UAAAA,GAAcD,eAAAA,CAAgBC,UAAAA,EAAYxC,MAAAA,EAAQwB,UAAAA,EAAYiB,eAAevC,WAAAA,EAAayC,gBAAAA,CAAAA,CAAAA;IACxI,IAAIwC,OAAAA,CAAQX,WAAW,EAAE;AACrB2B,QAAAA,WAAAA,CAAYG,IAAI,CAAA,GAAIhC,iBAAAA,CAAkBC,UAAAA,EAAYY,OAAAA,CAAQX,WAAW,EAAEC,MAAAA,CAAAA,CAAAA;AAC3E,IAAA;IAEA,OAAO;AACHA,QAAAA,MAAAA;AACAjE,QAAAA,IAAAA,EAAMR,OAAOQ,IAAI;AACjBkG,QAAAA,MAAAA,EAAQ1G,OAAO0G,MAAM;AACrBC,QAAAA,KAAAA,EAAO3G,OAAO2G,KAAK;AACnBC,QAAAA,QAAAA,EAAU5G,OAAO4G,QAAQ;AACzBpF,QAAAA,UAAAA;AACA+C,QAAAA,UAAAA;AACAsC,QAAAA,YAAAA,EAAcd,YAAYc,YAAY;AACtCC,QAAAA,SAAAA,EAAWvF,YAAYvB,MAAAA,EAAQwB,UAAAA,CAAAA;AAC/B2E,QAAAA;AACJ,KAAA;AACJ;;;"}