@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.
- package/dist/cjs/editing/DescriptorCatalog.js +42 -0
- package/dist/cjs/editing/DescriptorCatalog.js.map +1 -0
- package/dist/cjs/editing/EditSession.js +44 -0
- package/dist/cjs/editing/EditSession.js.map +1 -0
- package/dist/cjs/editing/applyEdit.js +83 -0
- package/dist/cjs/editing/applyEdit.js.map +1 -0
- package/dist/cjs/editing/applyEffectiveConfiguration.js +62 -0
- package/dist/cjs/editing/applyEffectiveConfiguration.js.map +1 -0
- package/dist/cjs/editing/collectComponents.js +34 -0
- package/dist/cjs/editing/collectComponents.js.map +1 -0
- package/dist/cjs/editing/collectIconUsages.js +86 -0
- package/dist/cjs/editing/collectIconUsages.js.map +1 -0
- package/dist/cjs/editing/describeNode.js +63 -0
- package/dist/cjs/editing/describeNode.js.map +1 -0
- package/dist/cjs/editing/diagnoseIcons.js +67 -0
- package/dist/cjs/editing/diagnoseIcons.js.map +1 -0
- package/dist/cjs/editing/diagnostics.js +36 -0
- package/dist/cjs/editing/diagnostics.js.map +1 -0
- package/dist/cjs/editing/documentPaths.js +45 -0
- package/dist/cjs/editing/documentPaths.js.map +1 -0
- package/dist/cjs/editing/exposureEdits.js +106 -0
- package/dist/cjs/editing/exposureEdits.js.map +1 -0
- package/dist/cjs/editing/exposureGrants.js +115 -0
- package/dist/cjs/editing/exposureGrants.js.map +1 -0
- package/dist/cjs/editing/iconDiagnostics.js +103 -0
- package/dist/cjs/editing/iconDiagnostics.js.map +1 -0
- package/dist/cjs/editing/indexDocument.js +400 -0
- package/dist/cjs/editing/indexDocument.js.map +1 -0
- package/dist/cjs/editing/inspect.js +154 -0
- package/dist/cjs/editing/inspect.js.map +1 -0
- package/dist/cjs/editing/instanceEdits.js +267 -0
- package/dist/cjs/editing/instanceEdits.js.map +1 -0
- package/dist/cjs/editing/layoutTypeDescriptors.js +425 -0
- package/dist/cjs/editing/layoutTypeDescriptors.js.map +1 -0
- package/dist/cjs/editing/layoutTypeEdits.js +141 -0
- package/dist/cjs/editing/layoutTypeEdits.js.map +1 -0
- package/dist/cjs/editing/nodeIds.js +115 -0
- package/dist/cjs/editing/nodeIds.js.map +1 -0
- package/dist/cjs/editing/pathAccess.js +53 -0
- package/dist/cjs/editing/pathAccess.js.map +1 -0
- package/dist/cjs/editing/propertyEdits.js +125 -0
- package/dist/cjs/editing/propertyEdits.js.map +1 -0
- package/dist/cjs/editing/resolveEffectiveConfiguration.js +200 -0
- package/dist/cjs/editing/resolveEffectiveConfiguration.js.map +1 -0
- package/dist/cjs/editing/resolveTemplateChain.js +100 -0
- package/dist/cjs/editing/resolveTemplateChain.js.map +1 -0
- package/dist/cjs/editing/structureEdits.js +231 -0
- package/dist/cjs/editing/structureEdits.js.map +1 -0
- package/dist/cjs/editing/validateBinding.js +111 -0
- package/dist/cjs/editing/validateBinding.js.map +1 -0
- package/dist/cjs/editing/validateValue.js +114 -0
- package/dist/cjs/editing/validateValue.js.map +1 -0
- package/dist/cjs/icons/EffectiveIconCatalog.js +212 -0
- package/dist/cjs/icons/EffectiveIconCatalog.js.map +1 -0
- package/dist/cjs/icons/EffectiveIconEntry.js +22 -0
- package/dist/cjs/icons/EffectiveIconEntry.js.map +1 -0
- package/dist/cjs/icons/analyzeIconImpact.js +48 -0
- package/dist/cjs/icons/analyzeIconImpact.js.map +1 -0
- package/dist/cjs/icons/matchesIconQuery.js +22 -0
- package/dist/cjs/icons/matchesIconQuery.js.map +1 -0
- package/dist/cjs/icons/resolveIconLibraries.js +45 -0
- package/dist/cjs/icons/resolveIconLibraries.js.map +1 -0
- package/dist/cjs/index.js +67 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/editing/DescriptorCatalog.d.ts +9 -0
- package/dist/esm/editing/DescriptorCatalog.d.ts.map +1 -0
- package/dist/esm/editing/DescriptorCatalog.js +38 -0
- package/dist/esm/editing/DescriptorCatalog.js.map +1 -0
- package/dist/esm/editing/DocumentIndex.d.ts +31 -0
- package/dist/esm/editing/DocumentIndex.d.ts.map +1 -0
- package/dist/esm/editing/DocumentIndex.js +2 -0
- package/dist/esm/editing/DocumentIndex.js.map +1 -0
- package/dist/esm/editing/EditOutcome.d.ts +7 -0
- package/dist/esm/editing/EditOutcome.d.ts.map +1 -0
- package/dist/esm/editing/EditOutcome.js +2 -0
- package/dist/esm/editing/EditOutcome.js.map +1 -0
- package/dist/esm/editing/EditSession.d.ts +20 -0
- package/dist/esm/editing/EditSession.d.ts.map +1 -0
- package/dist/esm/editing/EditSession.js +42 -0
- package/dist/esm/editing/EditSession.js.map +1 -0
- package/dist/esm/editing/EditingContext.d.ts +10 -0
- package/dist/esm/editing/EditingContext.d.ts.map +1 -0
- package/dist/esm/editing/EditingContext.js +2 -0
- package/dist/esm/editing/EditingContext.js.map +1 -0
- package/dist/esm/editing/TemplateChain.d.ts +13 -0
- package/dist/esm/editing/TemplateChain.d.ts.map +1 -0
- package/dist/esm/editing/TemplateChain.js +2 -0
- package/dist/esm/editing/TemplateChain.js.map +1 -0
- package/dist/esm/editing/applyEdit.d.ts +5 -0
- package/dist/esm/editing/applyEdit.d.ts.map +1 -0
- package/dist/esm/editing/applyEdit.js +81 -0
- package/dist/esm/editing/applyEdit.js.map +1 -0
- package/dist/esm/editing/applyEffectiveConfiguration.d.ts +3 -0
- package/dist/esm/editing/applyEffectiveConfiguration.d.ts.map +1 -0
- package/dist/esm/editing/applyEffectiveConfiguration.js +60 -0
- package/dist/esm/editing/applyEffectiveConfiguration.js.map +1 -0
- package/dist/esm/editing/collectComponents.d.ts +3 -0
- package/dist/esm/editing/collectComponents.d.ts.map +1 -0
- package/dist/esm/editing/collectComponents.js +32 -0
- package/dist/esm/editing/collectComponents.js.map +1 -0
- package/dist/esm/editing/collectIconUsages.d.ts +5 -0
- package/dist/esm/editing/collectIconUsages.d.ts.map +1 -0
- package/dist/esm/editing/collectIconUsages.js +84 -0
- package/dist/esm/editing/collectIconUsages.js.map +1 -0
- package/dist/esm/editing/describeNode.d.ts +11 -0
- package/dist/esm/editing/describeNode.d.ts.map +1 -0
- package/dist/esm/editing/describeNode.js +60 -0
- package/dist/esm/editing/describeNode.js.map +1 -0
- package/dist/esm/editing/diagnoseIcons.d.ts +4 -0
- package/dist/esm/editing/diagnoseIcons.d.ts.map +1 -0
- package/dist/esm/editing/diagnoseIcons.js +65 -0
- package/dist/esm/editing/diagnoseIcons.js.map +1 -0
- package/dist/esm/editing/diagnostics.d.ts +6 -0
- package/dist/esm/editing/diagnostics.d.ts.map +1 -0
- package/dist/esm/editing/diagnostics.js +32 -0
- package/dist/esm/editing/diagnostics.js.map +1 -0
- package/dist/esm/editing/documentPaths.d.ts +8 -0
- package/dist/esm/editing/documentPaths.d.ts.map +1 -0
- package/dist/esm/editing/documentPaths.js +41 -0
- package/dist/esm/editing/documentPaths.js.map +1 -0
- package/dist/esm/editing/exposureEdits.d.ts +5 -0
- package/dist/esm/editing/exposureEdits.d.ts.map +1 -0
- package/dist/esm/editing/exposureEdits.js +103 -0
- package/dist/esm/editing/exposureEdits.js.map +1 -0
- package/dist/esm/editing/exposureGrants.d.ts +21 -0
- package/dist/esm/editing/exposureGrants.d.ts.map +1 -0
- package/dist/esm/editing/exposureGrants.js +112 -0
- package/dist/esm/editing/exposureGrants.js.map +1 -0
- package/dist/esm/editing/given/a_layout_document.d.ts +14 -0
- package/dist/esm/editing/given/a_layout_document.d.ts.map +1 -0
- package/dist/esm/editing/given/a_layout_document.js +67 -0
- package/dist/esm/editing/given/a_layout_document.js.map +1 -0
- package/dist/esm/editing/given/a_scene_document.d.ts +20 -0
- package/dist/esm/editing/given/a_scene_document.d.ts.map +1 -0
- package/dist/esm/editing/given/a_scene_document.js +110 -0
- package/dist/esm/editing/given/a_scene_document.js.map +1 -0
- package/dist/esm/editing/iconDiagnostics.d.ts +11 -0
- package/dist/esm/editing/iconDiagnostics.d.ts.map +1 -0
- package/dist/esm/editing/iconDiagnostics.js +99 -0
- package/dist/esm/editing/iconDiagnostics.js.map +1 -0
- package/dist/esm/editing/index.d.ts +22 -0
- package/dist/esm/editing/index.d.ts.map +1 -0
- package/dist/esm/editing/index.js +22 -0
- package/dist/esm/editing/index.js.map +1 -0
- package/dist/esm/editing/indexDocument.d.ts +6 -0
- package/dist/esm/editing/indexDocument.d.ts.map +1 -0
- package/dist/esm/editing/indexDocument.js +396 -0
- package/dist/esm/editing/indexDocument.js.map +1 -0
- package/dist/esm/editing/inspect.d.ts +8 -0
- package/dist/esm/editing/inspect.d.ts.map +1 -0
- package/dist/esm/editing/inspect.js +151 -0
- package/dist/esm/editing/inspect.js.map +1 -0
- package/dist/esm/editing/instanceEdits.d.ts +9 -0
- package/dist/esm/editing/instanceEdits.d.ts.map +1 -0
- package/dist/esm/editing/instanceEdits.js +260 -0
- package/dist/esm/editing/instanceEdits.js.map +1 -0
- package/dist/esm/editing/layoutTypeDescriptors.d.ts +5 -0
- package/dist/esm/editing/layoutTypeDescriptors.d.ts.map +1 -0
- package/dist/esm/editing/layoutTypeDescriptors.js +421 -0
- package/dist/esm/editing/layoutTypeDescriptors.js.map +1 -0
- package/dist/esm/editing/layoutTypeEdits.d.ts +4 -0
- package/dist/esm/editing/layoutTypeEdits.d.ts.map +1 -0
- package/dist/esm/editing/layoutTypeEdits.js +139 -0
- package/dist/esm/editing/layoutTypeEdits.js.map +1 -0
- package/dist/esm/editing/nodeIds.d.ts +14 -0
- package/dist/esm/editing/nodeIds.d.ts.map +1 -0
- package/dist/esm/editing/nodeIds.js +102 -0
- package/dist/esm/editing/nodeIds.js.map +1 -0
- package/dist/esm/editing/pathAccess.d.ts +7 -0
- package/dist/esm/editing/pathAccess.d.ts.map +1 -0
- package/dist/esm/editing/pathAccess.js +48 -0
- package/dist/esm/editing/pathAccess.js.map +1 -0
- package/dist/esm/editing/propertyEdits.d.ts +15 -0
- package/dist/esm/editing/propertyEdits.d.ts.map +1 -0
- package/dist/esm/editing/propertyEdits.js +120 -0
- package/dist/esm/editing/propertyEdits.js.map +1 -0
- package/dist/esm/editing/resolveEffectiveConfiguration.d.ts +5 -0
- package/dist/esm/editing/resolveEffectiveConfiguration.d.ts.map +1 -0
- package/dist/esm/editing/resolveEffectiveConfiguration.js +198 -0
- package/dist/esm/editing/resolveEffectiveConfiguration.js.map +1 -0
- package/dist/esm/editing/resolveTemplateChain.d.ts +4 -0
- package/dist/esm/editing/resolveTemplateChain.d.ts.map +1 -0
- package/dist/esm/editing/resolveTemplateChain.js +98 -0
- package/dist/esm/editing/resolveTemplateChain.js.map +1 -0
- package/dist/esm/editing/structureEdits.d.ts +6 -0
- package/dist/esm/editing/structureEdits.d.ts.map +1 -0
- package/dist/esm/editing/structureEdits.js +227 -0
- package/dist/esm/editing/structureEdits.js.map +1 -0
- package/dist/esm/editing/validateBinding.d.ts +7 -0
- package/dist/esm/editing/validateBinding.d.ts.map +1 -0
- package/dist/esm/editing/validateBinding.js +108 -0
- package/dist/esm/editing/validateBinding.js.map +1 -0
- package/dist/esm/editing/validateValue.d.ts +8 -0
- package/dist/esm/editing/validateValue.d.ts.map +1 -0
- package/dist/esm/editing/validateValue.js +111 -0
- package/dist/esm/editing/validateValue.js.map +1 -0
- package/dist/esm/icons/EffectiveIconCatalog.d.ts +25 -0
- package/dist/esm/icons/EffectiveIconCatalog.d.ts.map +1 -0
- package/dist/esm/icons/EffectiveIconCatalog.js +210 -0
- package/dist/esm/icons/EffectiveIconCatalog.js.map +1 -0
- package/dist/esm/icons/EffectiveIconEntry.d.ts +9 -0
- package/dist/esm/icons/EffectiveIconEntry.d.ts.map +1 -0
- package/dist/esm/icons/EffectiveIconEntry.js +20 -0
- package/dist/esm/icons/EffectiveIconEntry.js.map +1 -0
- package/dist/esm/icons/IconCatalogSource.d.ts +6 -0
- package/dist/esm/icons/IconCatalogSource.d.ts.map +1 -0
- package/dist/esm/icons/IconCatalogSource.js +2 -0
- package/dist/esm/icons/IconCatalogSource.js.map +1 -0
- package/dist/esm/icons/IconDiagnostic.d.ts +9 -0
- package/dist/esm/icons/IconDiagnostic.d.ts.map +1 -0
- package/dist/esm/icons/IconDiagnostic.js +2 -0
- package/dist/esm/icons/IconDiagnostic.js.map +1 -0
- package/dist/esm/icons/IconImpactReport.d.ts +18 -0
- package/dist/esm/icons/IconImpactReport.d.ts.map +1 -0
- package/dist/esm/icons/IconImpactReport.js +2 -0
- package/dist/esm/icons/IconImpactReport.js.map +1 -0
- package/dist/esm/icons/IconLibraryResolution.d.ts +7 -0
- package/dist/esm/icons/IconLibraryResolution.d.ts.map +1 -0
- package/dist/esm/icons/IconLibraryResolution.js +2 -0
- package/dist/esm/icons/IconLibraryResolution.js.map +1 -0
- package/dist/esm/icons/IconQuery.d.ts +7 -0
- package/dist/esm/icons/IconQuery.d.ts.map +1 -0
- package/dist/esm/icons/IconQuery.js +2 -0
- package/dist/esm/icons/IconQuery.js.map +1 -0
- package/dist/esm/icons/IconResolution.d.ts +14 -0
- package/dist/esm/icons/IconResolution.d.ts.map +1 -0
- package/dist/esm/icons/IconResolution.js +2 -0
- package/dist/esm/icons/IconResolution.js.map +1 -0
- package/dist/esm/icons/IconSearchResult.d.ts +7 -0
- package/dist/esm/icons/IconSearchResult.d.ts.map +1 -0
- package/dist/esm/icons/IconSearchResult.js +2 -0
- package/dist/esm/icons/IconSearchResult.js.map +1 -0
- package/dist/esm/icons/IconUsage.d.ts +6 -0
- package/dist/esm/icons/IconUsage.d.ts.map +1 -0
- package/dist/esm/icons/IconUsage.js +2 -0
- package/dist/esm/icons/IconUsage.js.map +1 -0
- package/dist/esm/icons/ResolvedIconLibrary.d.ts +8 -0
- package/dist/esm/icons/ResolvedIconLibrary.d.ts.map +1 -0
- package/dist/esm/icons/ResolvedIconLibrary.js +2 -0
- package/dist/esm/icons/ResolvedIconLibrary.js.map +1 -0
- package/dist/esm/icons/analyzeIconImpact.d.ts +5 -0
- package/dist/esm/icons/analyzeIconImpact.d.ts.map +1 -0
- package/dist/esm/icons/analyzeIconImpact.js +46 -0
- package/dist/esm/icons/analyzeIconImpact.js.map +1 -0
- package/dist/esm/icons/index.d.ts +14 -0
- package/dist/esm/icons/index.d.ts.map +1 -0
- package/dist/esm/icons/index.js +14 -0
- package/dist/esm/icons/index.js.map +1 -0
- package/dist/esm/icons/matchesIconQuery.d.ts +4 -0
- package/dist/esm/icons/matchesIconQuery.d.ts.map +1 -0
- package/dist/esm/icons/matchesIconQuery.js +20 -0
- package/dist/esm/icons/matchesIconQuery.js.map +1 -0
- package/dist/esm/icons/resolveIconLibraries.d.ts +4 -0
- package/dist/esm/icons/resolveIconLibraries.d.ts.map +1 -0
- package/dist/esm/icons/resolveIconLibraries.js +43 -0
- package/dist/esm/icons/resolveIconLibraries.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +21 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/editing/DescriptorCatalog.ts +51 -0
- package/editing/DocumentIndex.ts +73 -0
- package/editing/EditOutcome.ts +21 -0
- package/editing/EditSession.ts +50 -0
- package/editing/EditingContext.ts +34 -0
- package/editing/TemplateChain.ts +36 -0
- package/editing/applyEdit.ts +69 -0
- package/editing/applyEffectiveConfiguration.ts +53 -0
- package/editing/collectComponents.ts +36 -0
- package/editing/collectIconUsages.ts +78 -0
- package/editing/describeNode.ts +61 -0
- package/editing/diagnoseIcons.ts +60 -0
- package/editing/diagnostics.ts +30 -0
- package/editing/documentPaths.ts +40 -0
- package/editing/exposureEdits.ts +119 -0
- package/editing/exposureGrants.ts +159 -0
- package/editing/given/a_layout_document.ts +88 -0
- package/editing/given/a_scene_document.ts +135 -0
- package/editing/iconDiagnostics.ts +90 -0
- package/editing/index.ts +24 -0
- package/editing/indexDocument.ts +237 -0
- package/editing/inspect.ts +165 -0
- package/editing/instanceEdits.ts +251 -0
- package/editing/layoutTypeDescriptors.ts +191 -0
- package/editing/layoutTypeEdits.ts +135 -0
- package/editing/nodeIds.ts +111 -0
- package/editing/pathAccess.ts +81 -0
- package/editing/propertyEdits.ts +127 -0
- package/editing/resolveEffectiveConfiguration.ts +202 -0
- package/editing/resolveTemplateChain.ts +109 -0
- package/editing/structureEdits.ts +234 -0
- package/editing/validateBinding.ts +103 -0
- package/editing/validateValue.ts +130 -0
- package/icons/EffectiveIconCatalog.ts +199 -0
- package/icons/EffectiveIconEntry.ts +36 -0
- package/icons/IconCatalogSource.ts +23 -0
- package/icons/IconDiagnostic.ts +45 -0
- package/icons/IconImpactReport.ts +63 -0
- package/icons/IconLibraryResolution.ts +22 -0
- package/icons/IconQuery.ts +27 -0
- package/icons/IconResolution.ts +25 -0
- package/icons/IconSearchResult.ts +21 -0
- package/icons/IconUsage.ts +21 -0
- package/icons/ResolvedIconLibrary.ts +32 -0
- package/icons/analyzeIconImpact.ts +41 -0
- package/icons/index.ts +16 -0
- package/icons/matchesIconQuery.ts +19 -0
- package/icons/resolveIconLibraries.ts +47 -0
- package/index.ts +2 -0
- package/package.json +3 -3
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { DiagnosticCode, PropertyValueType } from '@cratis/scene.model';
|
|
2
|
+
import { findComponentDescriptor } from './DescriptorCatalog.js';
|
|
3
|
+
import { errorDiagnostic } from './diagnostics.js';
|
|
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
|
+
/**
|
|
8
|
+
* The key a grant is stored under.
|
|
9
|
+
*/ function grantKey(component, path) {
|
|
10
|
+
return `${component}\u0000${path}`;
|
|
11
|
+
}
|
|
12
|
+
function narrow(grant, reExposure) {
|
|
13
|
+
const requested = reExposure.operations ?? [];
|
|
14
|
+
const operations = requested.filter((operation)=>grant.operations.includes(operation));
|
|
15
|
+
const fields = grant.editableFields === undefined ? reExposure.editableFields : reExposure.editableFields === undefined ? grant.editableFields : reExposure.editableFields.filter((field)=>grant.editableFields.includes(field));
|
|
16
|
+
const widened = operations.length < requested.length || grant.editableFields !== undefined && reExposure.editableFields !== undefined && reExposure.editableFields.some((field)=>!grant.editableFields.includes(field));
|
|
17
|
+
return {
|
|
18
|
+
grant: {
|
|
19
|
+
...grant,
|
|
20
|
+
operations,
|
|
21
|
+
editableFields: fields,
|
|
22
|
+
label: reExposure.label ?? grant.label
|
|
23
|
+
},
|
|
24
|
+
widened
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Works out, for every instance in a chain, which properties it may configure.
|
|
29
|
+
*
|
|
30
|
+
* An owner's exposure reaches the instance directly inside it. It reaches further only through explicit
|
|
31
|
+
* re-exposure by every level in between, and each re-exposure can only narrow what it passes on - a nested
|
|
32
|
+
* template that lists more operations or fields than its owner granted gets the owner's, not its own.
|
|
33
|
+
*
|
|
34
|
+
* @param chain The chain to analyze.
|
|
35
|
+
* @param catalog The descriptors that say what each component supports.
|
|
36
|
+
*/ function computeExposureGrants(chain, catalog) {
|
|
37
|
+
const result = {
|
|
38
|
+
exposed: [],
|
|
39
|
+
byInstance: new Map(),
|
|
40
|
+
diagnostics: []
|
|
41
|
+
};
|
|
42
|
+
for (const chainLevel of chain.levels)result.byInstance.set(chainLevel.instance, new Map());
|
|
43
|
+
const consumed = new Set();
|
|
44
|
+
chain.levels.forEach((owner, ownerLevel)=>{
|
|
45
|
+
for (const exposure of owner.exposures.filter((candidate)=>candidate.reExposes === undefined)){
|
|
46
|
+
const element = owner.elements.find((candidate)=>candidate.id === exposure.component);
|
|
47
|
+
if (!element) {
|
|
48
|
+
result.diagnostics.push(errorDiagnostic(DiagnosticCode.ExposureTargetMissing, `'${owner.owner}' exposes '${exposure.path}' on '${exposure.component}', but it has no such component.`, {
|
|
49
|
+
component: exposure.component,
|
|
50
|
+
path: exposure.path
|
|
51
|
+
}));
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const descriptor = findComponentDescriptor(catalog, element.componentName);
|
|
55
|
+
if (!descriptor) {
|
|
56
|
+
result.diagnostics.push(errorDiagnostic(DiagnosticCode.MissingComponentDescriptor, `'${owner.owner}' exposes '${exposure.path}' on '${exposure.component}', but nothing describes the component '${element.componentName}'.`, {
|
|
57
|
+
component: exposure.component,
|
|
58
|
+
path: exposure.path
|
|
59
|
+
}));
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const property = descriptor.properties.find((candidate)=>candidate.path === exposure.path);
|
|
63
|
+
if (!property) {
|
|
64
|
+
result.diagnostics.push(errorDiagnostic(DiagnosticCode.ExposureTargetMissing, `'${owner.owner}' exposes '${exposure.path}' on '${exposure.component}', but '${element.componentName}' no longer has that property.`, {
|
|
65
|
+
component: exposure.component,
|
|
66
|
+
path: exposure.path
|
|
67
|
+
}));
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const isCollection = property.valueType === PropertyValueType.Collection;
|
|
71
|
+
let current = {
|
|
72
|
+
component: exposure.component,
|
|
73
|
+
path: exposure.path,
|
|
74
|
+
descriptor: property,
|
|
75
|
+
owner: owner.owner,
|
|
76
|
+
ownerLevel,
|
|
77
|
+
operations: isCollection ? [
|
|
78
|
+
...new Set(exposure.operations ?? [])
|
|
79
|
+
] : [],
|
|
80
|
+
editableFields: isCollection ? exposure.editableFields : undefined,
|
|
81
|
+
label: exposure.label
|
|
82
|
+
};
|
|
83
|
+
result.exposed.push(current);
|
|
84
|
+
for(let contributor = ownerLevel + 1; contributor < chain.levels.length; contributor++){
|
|
85
|
+
result.byInstance.get(chain.levels[contributor].instance).set(grantKey(exposure.component, exposure.path), current);
|
|
86
|
+
const reExposure = chain.levels[contributor].exposures.find((candidate)=>candidate.reExposes === owner.owner && candidate.component === exposure.component && candidate.path === exposure.path);
|
|
87
|
+
if (!reExposure) break;
|
|
88
|
+
consumed.add(reExposure);
|
|
89
|
+
const narrowed = narrow(current, reExposure);
|
|
90
|
+
if (narrowed.widened) {
|
|
91
|
+
result.diagnostics.push(errorDiagnostic(DiagnosticCode.ExposureWidensOwner, `'${chain.levels[contributor].owner}' re-exposes more of '${exposure.path}' than '${owner.owner}' exposed; only what the owner granted is passed on.`, {
|
|
92
|
+
component: exposure.component,
|
|
93
|
+
path: exposure.path
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
current = narrowed.grant;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
for (const chainLevel of chain.levels){
|
|
101
|
+
for (const reExposure of chainLevel.exposures.filter((candidate)=>candidate.reExposes !== undefined && !consumed.has(candidate))){
|
|
102
|
+
result.diagnostics.push(errorDiagnostic(DiagnosticCode.ReExposureBroken, `'${chainLevel.owner}' re-exposes '${reExposure.path}' on '${reExposure.component}' from '${reExposure.reExposes}', which does not expose it to this chain.`, {
|
|
103
|
+
component: reExposure.component,
|
|
104
|
+
path: reExposure.path
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { computeExposureGrants, grantKey };
|
|
112
|
+
//# sourceMappingURL=exposureGrants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposureGrants.js","sources":["../../../editing/exposureGrants.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 CollectionOperation, DiagnosticCode, ExposedProperty, PropertyDescriptor, PropertyValueType, SceneDiagnostic,\n} from '@cratis/scene.model';\nimport { DescriptorCatalog, findComponentDescriptor } from './DescriptorCatalog';\nimport { errorDiagnostic } from './diagnostics';\nimport { TemplateChain } from './TemplateChain';\n\n/**\n * What one instance may configure on one property: the owner's exposure, narrowed by every re-exposure between the\n * owner and that instance.\n */\nexport interface ExposureGrant {\n /** The id of the element that owns the property. */\n component: string;\n\n path: string;\n descriptor: PropertyDescriptor;\n\n /** The name of the layout or template that owns the element. */\n owner: string;\n\n /** The index of the owner in the chain. */\n ownerLevel: number;\n\n /** For a collection: what may be done to it. Empty for any other property. */\n operations: CollectionOperation[];\n\n /** For a collection: the item fields that may be changed; absent means all of them. */\n editableFields?: string[];\n\n label?: string;\n}\n\n/**\n * The outcome of working out who may configure what.\n */\nexport interface ExposureGrants {\n /** Every valid exposure, one per owner-declared property, at the level of its owner. */\n exposed: ExposureGrant[];\n\n /** For each contributing instance id, what it may configure, keyed by {@link grantKey}. */\n byInstance: Map<string, Map<string, ExposureGrant>>;\n\n diagnostics: SceneDiagnostic[];\n}\n\n/**\n * The key a grant is stored under.\n */\nexport function grantKey(component: string, path: string): string {\n return `${component}\\u0000${path}`;\n}\n\nfunction narrow(grant: ExposureGrant, reExposure: ExposedProperty): { grant: ExposureGrant; widened: boolean } {\n const requested = reExposure.operations ?? [];\n const operations = requested.filter(operation => grant.operations.includes(operation));\n const fields = grant.editableFields === undefined\n ? reExposure.editableFields\n : (reExposure.editableFields === undefined ? grant.editableFields : reExposure.editableFields.filter(field => grant.editableFields!.includes(field)));\n\n const widened = operations.length < requested.length\n || (grant.editableFields !== undefined && reExposure.editableFields !== undefined && reExposure.editableFields.some(field => !grant.editableFields!.includes(field)));\n\n return { grant: { ...grant, operations, editableFields: fields, label: reExposure.label ?? grant.label }, widened };\n}\n\n/**\n * Works out, for every instance in a chain, which properties it may configure.\n *\n * An owner's exposure reaches the instance directly inside it. It reaches further only through explicit\n * re-exposure by every level in between, and each re-exposure can only narrow what it passes on - a nested\n * template that lists more operations or fields than its owner granted gets the owner's, not its own.\n *\n * @param chain The chain to analyze.\n * @param catalog The descriptors that say what each component supports.\n */\nexport function computeExposureGrants(chain: TemplateChain, catalog: DescriptorCatalog): ExposureGrants {\n const result: ExposureGrants = { exposed: [], byInstance: new Map(), diagnostics: [] };\n for (const chainLevel of chain.levels) result.byInstance.set(chainLevel.instance, new Map());\n\n const consumed = new Set<ExposedProperty>();\n\n chain.levels.forEach((owner, ownerLevel) => {\n for (const exposure of owner.exposures.filter(candidate => candidate.reExposes === undefined)) {\n const element = owner.elements.find(candidate => candidate.id === exposure.component);\n if (!element) {\n result.diagnostics.push(errorDiagnostic(\n DiagnosticCode.ExposureTargetMissing,\n `'${owner.owner}' exposes '${exposure.path}' on '${exposure.component}', but it has no such component.`,\n { component: exposure.component, path: exposure.path }));\n continue;\n }\n\n const descriptor = findComponentDescriptor(catalog, element.componentName);\n if (!descriptor) {\n result.diagnostics.push(errorDiagnostic(\n DiagnosticCode.MissingComponentDescriptor,\n `'${owner.owner}' exposes '${exposure.path}' on '${exposure.component}', but nothing describes the component '${element.componentName}'.`,\n { component: exposure.component, path: exposure.path }));\n continue;\n }\n\n const property = descriptor.properties.find(candidate => candidate.path === exposure.path);\n if (!property) {\n result.diagnostics.push(errorDiagnostic(\n DiagnosticCode.ExposureTargetMissing,\n `'${owner.owner}' exposes '${exposure.path}' on '${exposure.component}', but '${element.componentName}' no longer has that property.`,\n { component: exposure.component, path: exposure.path }));\n continue;\n }\n\n const isCollection = property.valueType === PropertyValueType.Collection;\n let current: ExposureGrant = {\n component: exposure.component,\n path: exposure.path,\n descriptor: property,\n owner: owner.owner,\n ownerLevel,\n operations: isCollection ? [...new Set(exposure.operations ?? [])] : [],\n editableFields: isCollection ? exposure.editableFields : undefined,\n label: exposure.label,\n };\n result.exposed.push(current);\n\n for (let contributor = ownerLevel + 1; contributor < chain.levels.length; contributor++) {\n result.byInstance.get(chain.levels[contributor].instance)!.set(grantKey(exposure.component, exposure.path), current);\n\n const reExposure = chain.levels[contributor].exposures.find(candidate =>\n candidate.reExposes === owner.owner && candidate.component === exposure.component && candidate.path === exposure.path);\n if (!reExposure) break;\n\n consumed.add(reExposure);\n const narrowed = narrow(current, reExposure);\n if (narrowed.widened) {\n result.diagnostics.push(errorDiagnostic(\n DiagnosticCode.ExposureWidensOwner,\n `'${chain.levels[contributor].owner}' re-exposes more of '${exposure.path}' than '${owner.owner}' exposed; only what the owner granted is passed on.`,\n { component: exposure.component, path: exposure.path }));\n }\n\n current = narrowed.grant;\n }\n }\n });\n\n for (const chainLevel of chain.levels) {\n for (const reExposure of chainLevel.exposures.filter(candidate => candidate.reExposes !== undefined && !consumed.has(candidate))) {\n result.diagnostics.push(errorDiagnostic(\n DiagnosticCode.ReExposureBroken,\n `'${chainLevel.owner}' re-exposes '${reExposure.path}' on '${reExposure.component}' from '${reExposure.reExposes}', which does not expose it to this chain.`,\n { component: reExposure.component, path: reExposure.path }));\n }\n }\n\n return result;\n}\n"],"names":["grantKey","component","path","narrow","grant","reExposure","requested","operations","filter","operation","includes","fields","editableFields","undefined","field","widened","length","some","label","computeExposureGrants","chain","catalog","result","exposed","byInstance","Map","diagnostics","chainLevel","levels","set","instance","consumed","Set","forEach","owner","ownerLevel","exposure","exposures","candidate","reExposes","element","elements","find","id","push","errorDiagnostic","DiagnosticCode","ExposureTargetMissing","descriptor","findComponentDescriptor","componentName","MissingComponentDescriptor","property","properties","isCollection","valueType","PropertyValueType","Collection","current","contributor","get","add","narrowed","ExposureWidensOwner","has","ReExposureBroken"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SceneDocument, SceneElement } from '@cratis/scene.model';
|
|
2
|
+
import { EditingContext } from '../../index';
|
|
3
|
+
export declare function panel(id: string, own: Record<string, unknown>, children?: SceneElement[]): SceneElement;
|
|
4
|
+
export declare const stackPanel: (id: string, children: SceneElement[], spacing?: number) => SceneElement;
|
|
5
|
+
export declare const wrapPanel: (id: string, children: SceneElement[], itemWidth?: number) => SceneElement;
|
|
6
|
+
export declare const table: (id: string) => import("@cratis/scene.model").ExternalComponent;
|
|
7
|
+
export declare const mainSlot = "screenTemplate:Page#slot:main";
|
|
8
|
+
export declare const sideSlot = "screenTemplate:Page#slot:side";
|
|
9
|
+
export declare const canvasSlot = "screenTemplate:Page#slot:canvas";
|
|
10
|
+
export declare function createLayoutDocument(): SceneDocument;
|
|
11
|
+
export declare function pageContext(extra?: Partial<EditingContext>): EditingContext;
|
|
12
|
+
export declare function homeContext(extra?: Partial<EditingContext>): EditingContext;
|
|
13
|
+
export declare function deepFreeze<T>(value: T): T;
|
|
14
|
+
//# sourceMappingURL=a_layout_document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a_layout_document.d.ts","sourceRoot":"","sources":["../../../../editing/given/a_layout_document.ts"],"names":[],"mappings":"AAGA,OAAO,EACgE,aAAa,EAAE,YAAY,EACjG,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAE,YAAY,EAAO,GAAG,YAAY,CAG3G;AAED,eAAO,MAAM,UAAU,OAAQ,MAAM,YAAY,YAAY,EAAE,mCAAqF,CAAC;AACrJ,eAAO,MAAM,SAAS,OAAQ,MAAM,YAAY,YAAY,EAAE,cAAc,MAAM,iBAA4E,CAAC;AAE/J,eAAO,MAAM,KAAK,OAAQ,MAAM,oDAAgC,CAAC;AAKjE,eAAO,MAAM,QAAQ,kCAAkC,CAAC;AACxD,eAAO,MAAM,QAAQ,kCAAkC,CAAC;AACxD,eAAO,MAAM,UAAU,oCAAoC,CAAC;AAO5D,wBAAgB,oBAAoB,IAAI,aAAa,CAqCpD;AAED,wBAAgB,WAAW,CAAC,KAAK,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc,CAE/E;AAED,wBAAgB,WAAW,CAAC,KAAK,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc,CAE/E;AAGD,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAOzC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { EditingScopeKind, FlowContainerKind, HeightSizeClass, Orientation, WidthSizeClass, } from '@cratis/scene.model';
|
|
2
|
+
import { catalog, component, shell } from './a_scene_document';
|
|
3
|
+
export function panel(id, own, children = []) {
|
|
4
|
+
const { componentName: _componentName, slots: _slots, ...frameworkElement } = component(id, 'ignored');
|
|
5
|
+
return { ...frameworkElement, children, ...own };
|
|
6
|
+
}
|
|
7
|
+
export const stackPanel = (id, children, spacing = 0) => panel(id, { orientation: Orientation.Vertical, spacing }, children);
|
|
8
|
+
export const wrapPanel = (id, children, itemWidth) => panel(id, { orientation: Orientation.Horizontal, itemWidth }, children);
|
|
9
|
+
export const table = (id) => component(id, 'test:table');
|
|
10
|
+
const compact = { width: WidthSizeClass.Compact, height: HeightSizeClass.Compact };
|
|
11
|
+
const regular = { width: WidthSizeClass.Regular, height: HeightSizeClass.Regular };
|
|
12
|
+
export const mainSlot = 'screenTemplate:Page#slot:main';
|
|
13
|
+
export const sideSlot = 'screenTemplate:Page#slot:side';
|
|
14
|
+
export const canvasSlot = 'screenTemplate:Page#slot:canvas';
|
|
15
|
+
export function createLayoutDocument() {
|
|
16
|
+
return {
|
|
17
|
+
layouts: [{ ...shell, slots: [{ name: 'content' }] }],
|
|
18
|
+
screenTemplates: [{
|
|
19
|
+
name: 'Page',
|
|
20
|
+
fitsSlot: 'content',
|
|
21
|
+
slots: [
|
|
22
|
+
{
|
|
23
|
+
name: 'main',
|
|
24
|
+
arrangement: {
|
|
25
|
+
root: {
|
|
26
|
+
kind: FlowContainerKind.Column, gap: 8,
|
|
27
|
+
children: [
|
|
28
|
+
{ kind: FlowContainerKind.Row, gap: 4, children: [{ content: table('a') }, { content: table('b') }] },
|
|
29
|
+
{ content: table('c'), grow: 1 },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'canvas',
|
|
36
|
+
arrangement: {
|
|
37
|
+
variants: [
|
|
38
|
+
{ sizeClass: compact, placements: [{ element: stackPanel('freeStack', [table('f')]), x: 0, y: 0, width: 100, height: 50 }] },
|
|
39
|
+
{ sizeClass: regular, placements: [{ element: stackPanel('freeStack', [table('f')]), x: 10, y: 10, width: 200, height: 80 }] },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{ name: 'side' },
|
|
44
|
+
],
|
|
45
|
+
content: { side: [stackPanel('stack', [table('g'), table('h')], 6), table('i')] },
|
|
46
|
+
}],
|
|
47
|
+
dialogTemplates: [],
|
|
48
|
+
screens: [{ name: 'Home', layout: 'Shell', screenTemplate: 'Page', forms: [], contributions: [], slotContent: { side: [table('j')] } }],
|
|
49
|
+
exposures: [],
|
|
50
|
+
instanceContributions: [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function pageContext(extra = {}) {
|
|
54
|
+
return { catalog, scope: { kind: EditingScopeKind.ScreenTemplate, name: 'Page', layout: 'Shell' }, ...extra };
|
|
55
|
+
}
|
|
56
|
+
export function homeContext(extra = {}) {
|
|
57
|
+
return { catalog, scope: { kind: EditingScopeKind.Screen, name: 'Home' }, ...extra };
|
|
58
|
+
}
|
|
59
|
+
export function deepFreeze(value) {
|
|
60
|
+
if (value !== null && typeof value === 'object') {
|
|
61
|
+
Object.freeze(value);
|
|
62
|
+
for (const child of Object.values(value))
|
|
63
|
+
deepFreeze(child);
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=a_layout_document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a_layout_document.js","sourceRoot":"","sources":["../../../../editing/given/a_layout_document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ComponentDescriptor, EditingScope, EditingScopeKind, ExternalComponent, Layout, SceneDocument } from '@cratis/scene.model';
|
|
2
|
+
import { EditingContext } from '../../index';
|
|
3
|
+
export declare function component(id: string, componentName: string, properties?: Record<string, unknown>, slots?: ExternalComponent['slots']): ExternalComponent;
|
|
4
|
+
export declare const navigationBarDescriptor: ComponentDescriptor;
|
|
5
|
+
export declare const tableDescriptor: ComponentDescriptor;
|
|
6
|
+
export declare const homeItem: {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
destination: {
|
|
10
|
+
screen: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export declare const shell: Layout;
|
|
14
|
+
export declare function createSceneDocument(): SceneDocument;
|
|
15
|
+
export declare function createExposedDocument(): SceneDocument;
|
|
16
|
+
export declare function createReExposedDocument(): SceneDocument;
|
|
17
|
+
export declare const catalog: import("..").DescriptorCatalog;
|
|
18
|
+
export declare function scopeOf(kind: EditingScopeKind, name: string, layout?: string): EditingScope;
|
|
19
|
+
export declare function contextFor(kind: EditingScopeKind, name: string, extra?: Partial<EditingContext>): EditingContext;
|
|
20
|
+
//# sourceMappingURL=a_scene_document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a_scene_document.d.ts","sourceRoot":"","sources":["../../../../editing/given/a_scene_document.ts"],"names":[],"mappings":"AAGA,OAAO,EACkB,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EACtE,MAAM,EAAuC,aAAa,EAElF,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA2B,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,KAAK,GAAE,iBAAiB,CAAC,OAAO,CAAM,GAAG,iBAAiB,CAOhK;AAGD,eAAO,MAAM,uBAAuB,EAAE,mBAmBrC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,mBAO7B,CAAC;AAEF,eAAO,MAAM,QAAQ;IAAK,EAAE;IAAU,KAAK;IAAU,WAAW;QAAI,MAAM;;CAAY,CAAC;AAEvF,eAAO,MAAM,KAAK,EAAE,MAA4E,CAAC;AAMjG,wBAAgB,mBAAmB,IAAI,aAAa,CAwCnD;AAGD,wBAAgB,qBAAqB,IAAI,aAAa,CAUrD;AAGD,wBAAgB,uBAAuB,IAAI,aAAa,CAUvD;AAED,eAAO,MAAM,OAAO,gCAAsE,CAAC;AAE3F,wBAAgB,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAE3F;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc,CAEpH"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { CollectionOperation, FlowContainerKind, HorizontalAlignment, PropertyValueType, QueryResultShape, VerticalAlignment, Visibility, } from '@cratis/scene.model';
|
|
2
|
+
import { createDescriptorCatalog } from '../../index';
|
|
3
|
+
export function component(id, componentName, properties = {}, slots = {}) {
|
|
4
|
+
return {
|
|
5
|
+
id, name: id, componentName, properties, slots,
|
|
6
|
+
visibility: Visibility.Visible, isEnabled: true, opacity: 1, size: {}, zIndex: 0, minimumSize: {}, maximumSize: {},
|
|
7
|
+
margin: { left: 0, top: 0, right: 0, bottom: 0 },
|
|
8
|
+
horizontalAlignment: HorizontalAlignment.Stretch, verticalAlignment: VerticalAlignment.Stretch,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export const navigationBarDescriptor = {
|
|
12
|
+
component: 'test:navigationBar',
|
|
13
|
+
displayName: 'Navigation bar',
|
|
14
|
+
properties: [
|
|
15
|
+
{
|
|
16
|
+
path: 'items', label: 'Items', group: 'Content', valueType: PropertyValueType.Collection,
|
|
17
|
+
item: {
|
|
18
|
+
label: 'Item',
|
|
19
|
+
properties: [
|
|
20
|
+
{ path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, constraints: { required: true } },
|
|
21
|
+
{ path: 'icon', label: 'Icon', group: 'Content', valueType: PropertyValueType.Icon, editorKind: 'iconPicker' },
|
|
22
|
+
{ path: 'destination', label: 'Destination', group: 'Content', valueType: PropertyValueType.Destination },
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
constraints: { maximumItems: 6 },
|
|
26
|
+
},
|
|
27
|
+
{ path: 'title', label: 'Title', group: 'Content', valueType: PropertyValueType.String, default: 'Menu' },
|
|
28
|
+
{ path: 'density', label: 'Density', group: 'Look', valueType: PropertyValueType.Enum, choices: [{ value: 'compact', label: 'Compact' }, { value: 'roomy', label: 'Roomy' }] },
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
export const tableDescriptor = {
|
|
32
|
+
component: 'test:table',
|
|
33
|
+
properties: [
|
|
34
|
+
{ path: 'query', label: 'Query', group: 'Data', valueType: PropertyValueType.QueryReference, editorKind: 'queryBinding', constraints: { resultShapes: [QueryResultShape.Collection] } },
|
|
35
|
+
{ path: 'pageSize', label: 'Page size', group: 'Data', valueType: PropertyValueType.Number, constraints: { minimum: 1, maximum: 100, integer: true } },
|
|
36
|
+
{ path: 'locked', label: 'Locked', group: 'Data', valueType: PropertyValueType.String, readOnly: true },
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
export const homeItem = { id: 'home', label: 'Home', destination: { screen: 'Home' } };
|
|
40
|
+
export const shell = { name: 'Shell', slots: [{ name: 'header' }, { name: 'content' }] };
|
|
41
|
+
export function createSceneDocument() {
|
|
42
|
+
const module = {
|
|
43
|
+
name: 'Module',
|
|
44
|
+
fitsSlot: 'content',
|
|
45
|
+
slots: [{ name: 'chrome' }, { name: 'body' }],
|
|
46
|
+
content: { chrome: [component('navbar', 'test:navigationBar', { items: [homeItem] })], body: [] },
|
|
47
|
+
};
|
|
48
|
+
const feature = {
|
|
49
|
+
name: 'Feature',
|
|
50
|
+
fitsSlot: 'Module.body',
|
|
51
|
+
slots: [{ name: 'main' }],
|
|
52
|
+
content: {
|
|
53
|
+
main: [],
|
|
54
|
+
},
|
|
55
|
+
arrangement: {
|
|
56
|
+
root: {
|
|
57
|
+
kind: FlowContainerKind.Column, gap: 8, grow: 1,
|
|
58
|
+
children: [
|
|
59
|
+
{ kind: FlowContainerKind.Row, gap: 4, children: [{ slotName: 'main' }] },
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
const invoices = {
|
|
65
|
+
name: 'Invoices', layout: 'Shell', screenTemplate: 'Feature', forms: [], contributions: [],
|
|
66
|
+
slotContent: { main: [component('invoiceTable', 'test:table', { pageSize: 25 })] },
|
|
67
|
+
};
|
|
68
|
+
const customers = {
|
|
69
|
+
name: 'Customers', layout: 'Shell', screenTemplate: 'Feature', forms: [], contributions: [],
|
|
70
|
+
slotContent: { main: [component('customerTable', 'test:table')] },
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
layouts: [shell],
|
|
74
|
+
screenTemplates: [module, feature],
|
|
75
|
+
dialogTemplates: [],
|
|
76
|
+
screens: [invoices, customers],
|
|
77
|
+
exposures: [],
|
|
78
|
+
instanceContributions: [],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function createExposedDocument() {
|
|
82
|
+
const document = createSceneDocument();
|
|
83
|
+
document.exposures.push({
|
|
84
|
+
owner: 'Module',
|
|
85
|
+
properties: [
|
|
86
|
+
{ component: 'navbar', path: 'items', operations: [CollectionOperation.Add, CollectionOperation.Remove, CollectionOperation.Reorder, CollectionOperation.EditFields], editableFields: ['label', 'icon', 'destination'] },
|
|
87
|
+
{ component: 'navbar', path: 'title' },
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
return document;
|
|
91
|
+
}
|
|
92
|
+
export function createReExposedDocument() {
|
|
93
|
+
const document = createExposedDocument();
|
|
94
|
+
document.exposures.push({
|
|
95
|
+
owner: 'Feature',
|
|
96
|
+
properties: [
|
|
97
|
+
{ component: 'navbar', path: 'items', reExposes: 'Module', operations: [CollectionOperation.Add, CollectionOperation.EditFields] },
|
|
98
|
+
{ component: 'navbar', path: 'title', reExposes: 'Module' },
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
return document;
|
|
102
|
+
}
|
|
103
|
+
export const catalog = createDescriptorCatalog([navigationBarDescriptor, tableDescriptor]);
|
|
104
|
+
export function scopeOf(kind, name, layout) {
|
|
105
|
+
return { kind, name, layout };
|
|
106
|
+
}
|
|
107
|
+
export function contextFor(kind, name, extra = {}) {
|
|
108
|
+
return { catalog, scope: scopeOf(kind, name, 'Shell'), ...extra };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=a_scene_document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a_scene_document.js","sourceRoot":"","sources":["../../../../editing/given/a_scene_document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CollectionItemDescriptor, DiagnosticSeverity, PropertyDescriptor, SceneDiagnostic } from '@cratis/scene.model';
|
|
2
|
+
import { EffectiveIconCatalog } from '../icons/EffectiveIconCatalog';
|
|
3
|
+
import { DiagnosticContext } from './diagnostics';
|
|
4
|
+
export declare function iconProblem(catalog: EffectiveIconCatalog, value: unknown, severity: DiagnosticSeverity, context: DiagnosticContext): SceneDiagnostic | undefined;
|
|
5
|
+
export declare function iconProblemsOfItems(catalog: EffectiveIconCatalog, itemDescriptor: CollectionItemDescriptor | undefined, items: {
|
|
6
|
+
id: string;
|
|
7
|
+
values: Record<string, unknown>;
|
|
8
|
+
instance?: string;
|
|
9
|
+
}[], severity: DiagnosticSeverity, context: DiagnosticContext): SceneDiagnostic[];
|
|
10
|
+
export declare function iconProblemsOfProperty(catalog: EffectiveIconCatalog, descriptor: PropertyDescriptor, value: unknown, severity: DiagnosticSeverity, context: DiagnosticContext): SceneDiagnostic[];
|
|
11
|
+
//# sourceMappingURL=iconDiagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconDiagnostics.d.ts","sourceRoot":"","sources":["../../../editing/iconDiagnostics.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAkB,kBAAkB,EAAE,kBAAkB,EAAqB,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAC5K,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAwBlD,wBAAgB,WAAW,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,GAAG,eAAe,GAAG,SAAS,CAchK;AAQD,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,wBAAwB,GAAG,SAAS,EACpD,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3E,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,eAAe,EAAE,CAQnB;AASD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,GAAG,eAAe,EAAE,CAcjM"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { DiagnosticCode, isIconReference, DiagnosticSeverity, PropertyValueType } from '@cratis/scene.model';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
const codes = {
|
|
6
|
+
'missing-library': DiagnosticCode.MissingIconLibrary,
|
|
7
|
+
'missing-icon': DiagnosticCode.MissingIcon,
|
|
8
|
+
'missing-variant': DiagnosticCode.MissingIconVariant,
|
|
9
|
+
'incompatible-version': DiagnosticCode.IncompatibleIconLibrary,
|
|
10
|
+
'catalog-unavailable': DiagnosticCode.IconCatalogUnavailable
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Checks one icon value against the effective icon catalog.
|
|
14
|
+
*
|
|
15
|
+
* Nothing is rewritten or dropped: this only reports. A value whose library, icon or variant is missing, or
|
|
16
|
+
* whose library is at an incompatible version, produces a diagnostic of the given severity - an error when
|
|
17
|
+
* the value is being *set* (the edit is refused), a warning when it is already stored (it is kept, and
|
|
18
|
+
* applies again if the icon comes back). A value that cannot be judged yet, because its library's catalog has
|
|
19
|
+
* not been loaded, produces an `IconNotVerified` warning rather than silently passing.
|
|
20
|
+
*
|
|
21
|
+
* @param catalog The effective catalog of the profile being edited.
|
|
22
|
+
* @param value The value; anything that is not an icon reference is left to `validateValue`.
|
|
23
|
+
* @param severity How serious a definite problem is.
|
|
24
|
+
* @param context What the diagnostic is about.
|
|
25
|
+
*/ function iconProblem(catalog, value, severity, context) {
|
|
26
|
+
if (!isIconReference(value)) return undefined;
|
|
27
|
+
const resolution = catalog.lookup(value);
|
|
28
|
+
if (resolution === undefined) {
|
|
29
|
+
return {
|
|
30
|
+
code: DiagnosticCode.IconNotVerified,
|
|
31
|
+
severity: DiagnosticSeverity.Warning,
|
|
32
|
+
message: `The catalog of the icon library '${value.library}' is not loaded, so '${value.key}' could not be verified.`,
|
|
33
|
+
...context
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return resolution.isResolved ? undefined : {
|
|
37
|
+
code: codes[resolution.diagnostic.kind],
|
|
38
|
+
severity,
|
|
39
|
+
message: `${resolution.diagnostic.message}.`,
|
|
40
|
+
...context
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Checks the icon fields of collection items.
|
|
45
|
+
*
|
|
46
|
+
* @param itemDescriptor What the items look like.
|
|
47
|
+
* @param items The items, each with its id and field values.
|
|
48
|
+
*/ function iconProblemsOfItems(catalog, itemDescriptor, items, severity, context) {
|
|
49
|
+
const iconFields = (itemDescriptor?.properties ?? []).filter((field)=>field.valueType === PropertyValueType.Icon);
|
|
50
|
+
return items.flatMap((item)=>iconFields.flatMap((field)=>{
|
|
51
|
+
const problem = iconProblem(catalog, item.values[field.path], severity, {
|
|
52
|
+
...context,
|
|
53
|
+
itemId: item.id,
|
|
54
|
+
...item.instance === undefined ? {} : {
|
|
55
|
+
instance: item.instance
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return problem ? [
|
|
59
|
+
{
|
|
60
|
+
...problem,
|
|
61
|
+
message: `'${field.label}' of '${item.id}': ${problem.message}`
|
|
62
|
+
}
|
|
63
|
+
] : [];
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Checks a property's value - an icon, or a collection whose items have icon fields - against the effective icon
|
|
68
|
+
* catalog. Any other kind of property has nothing to check.
|
|
69
|
+
*
|
|
70
|
+
* @param descriptor The property.
|
|
71
|
+
* @param value The value; for a collection, the flat items (`{ id, ...fields }`) as they are stored.
|
|
72
|
+
*/ function iconProblemsOfProperty(catalog, descriptor, value, severity, context) {
|
|
73
|
+
if (descriptor.valueType === PropertyValueType.Icon) {
|
|
74
|
+
const problem = iconProblem(catalog, value, severity, {
|
|
75
|
+
...context,
|
|
76
|
+
path: descriptor.path
|
|
77
|
+
});
|
|
78
|
+
return problem ? [
|
|
79
|
+
{
|
|
80
|
+
...problem,
|
|
81
|
+
message: `'${descriptor.label}': ${problem.message}`
|
|
82
|
+
}
|
|
83
|
+
] : [];
|
|
84
|
+
}
|
|
85
|
+
if (descriptor.valueType === PropertyValueType.Collection && Array.isArray(value)) {
|
|
86
|
+
const items = value.filter((item)=>item !== null && typeof item === 'object').map(({ id, ...values })=>({
|
|
87
|
+
id: String(id),
|
|
88
|
+
values
|
|
89
|
+
}));
|
|
90
|
+
return iconProblemsOfItems(catalog, descriptor.item, items, severity, {
|
|
91
|
+
...context,
|
|
92
|
+
path: descriptor.path
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { iconProblem, iconProblemsOfItems, iconProblemsOfProperty };
|
|
99
|
+
//# sourceMappingURL=iconDiagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconDiagnostics.js","sources":["../../../editing/iconDiagnostics.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 { CollectionItemDescriptor, DiagnosticCode, DiagnosticSeverity, PropertyDescriptor, PropertyValueType, SceneDiagnostic, isIconReference } from '@cratis/scene.model';\nimport { EffectiveIconCatalog } from '../icons/EffectiveIconCatalog';\nimport { IconDiagnosticKind } from '../icons/IconDiagnostic';\nimport { DiagnosticContext } from './diagnostics';\n\nconst codes: Record<IconDiagnosticKind, DiagnosticCode> = {\n 'missing-library': DiagnosticCode.MissingIconLibrary,\n 'missing-icon': DiagnosticCode.MissingIcon,\n 'missing-variant': DiagnosticCode.MissingIconVariant,\n 'incompatible-version': DiagnosticCode.IncompatibleIconLibrary,\n 'catalog-unavailable': DiagnosticCode.IconCatalogUnavailable,\n};\n\n/**\n * Checks one icon value against the effective icon catalog.\n *\n * Nothing is rewritten or dropped: this only reports. A value whose library, icon or variant is missing, or\n * whose library is at an incompatible version, produces a diagnostic of the given severity - an error when\n * the value is being *set* (the edit is refused), a warning when it is already stored (it is kept, and\n * applies again if the icon comes back). A value that cannot be judged yet, because its library's catalog has\n * not been loaded, produces an `IconNotVerified` warning rather than silently passing.\n *\n * @param catalog The effective catalog of the profile being edited.\n * @param value The value; anything that is not an icon reference is left to `validateValue`.\n * @param severity How serious a definite problem is.\n * @param context What the diagnostic is about.\n */\nexport function iconProblem(catalog: EffectiveIconCatalog, value: unknown, severity: DiagnosticSeverity, context: DiagnosticContext): SceneDiagnostic | undefined {\n if (!isIconReference(value)) return undefined;\n\n const resolution = catalog.lookup(value);\n if (resolution === undefined) {\n return {\n code: DiagnosticCode.IconNotVerified,\n severity: DiagnosticSeverity.Warning,\n message: `The catalog of the icon library '${value.library}' is not loaded, so '${value.key}' could not be verified.`,\n ...context,\n };\n }\n\n return resolution.isResolved ? undefined : { code: codes[resolution.diagnostic.kind], severity, message: `${resolution.diagnostic.message}.`, ...context };\n}\n\n/**\n * Checks the icon fields of collection items.\n *\n * @param itemDescriptor What the items look like.\n * @param items The items, each with its id and field values.\n */\nexport function iconProblemsOfItems(\n catalog: EffectiveIconCatalog,\n itemDescriptor: CollectionItemDescriptor | undefined,\n items: { id: string; values: Record<string, unknown>; instance?: string }[],\n severity: DiagnosticSeverity,\n context: DiagnosticContext\n): SceneDiagnostic[] {\n const iconFields = (itemDescriptor?.properties ?? []).filter((field) => field.valueType === PropertyValueType.Icon);\n return items.flatMap((item) =>\n iconFields.flatMap((field) => {\n const problem = iconProblem(catalog, item.values[field.path], severity, { ...context, itemId: item.id, ...(item.instance === undefined ? {} : { instance: item.instance }) });\n return problem ? [{ ...problem, message: `'${field.label}' of '${item.id}': ${problem.message}` }] : [];\n })\n );\n}\n\n/**\n * Checks a property's value - an icon, or a collection whose items have icon fields - against the effective icon\n * catalog. Any other kind of property has nothing to check.\n *\n * @param descriptor The property.\n * @param value The value; for a collection, the flat items (`{ id, ...fields }`) as they are stored.\n */\nexport function iconProblemsOfProperty(catalog: EffectiveIconCatalog, descriptor: PropertyDescriptor, value: unknown, severity: DiagnosticSeverity, context: DiagnosticContext): SceneDiagnostic[] {\n if (descriptor.valueType === PropertyValueType.Icon) {\n const problem = iconProblem(catalog, value, severity, { ...context, path: descriptor.path });\n return problem ? [{ ...problem, message: `'${descriptor.label}': ${problem.message}` }] : [];\n }\n\n if (descriptor.valueType === PropertyValueType.Collection && Array.isArray(value)) {\n const items = value\n .filter((item): item is Record<string, unknown> => item !== null && typeof item === 'object')\n .map(({ id, ...values }) => ({ id: String(id), values }));\n return iconProblemsOfItems(catalog, descriptor.item, items, severity, { ...context, path: descriptor.path });\n }\n\n return [];\n}\n"],"names":["codes","DiagnosticCode","MissingIconLibrary","MissingIcon","MissingIconVariant","IncompatibleIconLibrary","IconCatalogUnavailable","iconProblem","catalog","value","severity","context","isIconReference","undefined","resolution","lookup","code","IconNotVerified","DiagnosticSeverity","Warning","message","library","key","isResolved","diagnostic","kind","iconProblemsOfItems","itemDescriptor","items","iconFields","properties","filter","field","valueType","PropertyValueType","Icon","flatMap","item","problem","values","path","itemId","id","instance","label","iconProblemsOfProperty","descriptor","Collection","Array","isArray","map","String"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from './diagnostics';
|
|
2
|
+
export * from './nodeIds';
|
|
3
|
+
export * from './layoutTypeDescriptors';
|
|
4
|
+
export * from './DescriptorCatalog';
|
|
5
|
+
export * from './validateValue';
|
|
6
|
+
export * from './validateBinding';
|
|
7
|
+
export * from './TemplateChain';
|
|
8
|
+
export * from './collectComponents';
|
|
9
|
+
export * from './resolveTemplateChain';
|
|
10
|
+
export * from './exposureGrants';
|
|
11
|
+
export * from './resolveEffectiveConfiguration';
|
|
12
|
+
export * from './applyEffectiveConfiguration';
|
|
13
|
+
export * from './DocumentIndex';
|
|
14
|
+
export * from './indexDocument';
|
|
15
|
+
export * from './EditingContext';
|
|
16
|
+
export * from './inspect';
|
|
17
|
+
export * from './EditOutcome';
|
|
18
|
+
export * from './applyEdit';
|
|
19
|
+
export * from './iconDiagnostics';
|
|
20
|
+
export * from './diagnoseIcons';
|
|
21
|
+
export * from './collectIconUsages';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../editing/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from './diagnostics';
|
|
2
|
+
export * from './nodeIds';
|
|
3
|
+
export * from './layoutTypeDescriptors';
|
|
4
|
+
export * from './DescriptorCatalog';
|
|
5
|
+
export * from './validateValue';
|
|
6
|
+
export * from './validateBinding';
|
|
7
|
+
export * from './TemplateChain';
|
|
8
|
+
export * from './collectComponents';
|
|
9
|
+
export * from './resolveTemplateChain';
|
|
10
|
+
export * from './exposureGrants';
|
|
11
|
+
export * from './resolveEffectiveConfiguration';
|
|
12
|
+
export * from './applyEffectiveConfiguration';
|
|
13
|
+
export * from './DocumentIndex';
|
|
14
|
+
export * from './indexDocument';
|
|
15
|
+
export * from './EditingContext';
|
|
16
|
+
export * from './inspect';
|
|
17
|
+
export * from './EditOutcome';
|
|
18
|
+
export * from './applyEdit';
|
|
19
|
+
export * from './iconDiagnostics';
|
|
20
|
+
export * from './diagnoseIcons';
|
|
21
|
+
export * from './collectIconUsages';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../editing/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FlowNode, LayoutType, SceneDocument, SceneElement } from '@cratis/scene.model';
|
|
2
|
+
import { DocumentIndex } from './DocumentIndex';
|
|
3
|
+
export declare function panelLayoutType(element: SceneElement): LayoutType | undefined;
|
|
4
|
+
export declare function flowLayoutType(node: FlowNode): LayoutType;
|
|
5
|
+
export declare function indexDocument(document: SceneDocument): DocumentIndex;
|
|
6
|
+
//# sourceMappingURL=indexDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexDocument.d.ts","sourceRoot":"","sources":["../../../editing/indexDocument.ts"],"names":[],"mappings":"AAGA,OAAO,EAC0F,QAAQ,EAC/C,UAAU,EAAE,aAAa,EAAE,YAAY,EAEhG,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,aAAa,EAA0C,MAAM,iBAAiB,CAAC;AAwBxF,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAQ7E;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAUzD;AA+KD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAEpE"}
|