@cratis/scene.react 4.10.0 → 4.11.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/core/coreComponents.js +3 -1
- package/dist/cjs/core/coreComponents.js.map +1 -1
- package/dist/cjs/core/coreDescriptors.js +2 -0
- package/dist/cjs/core/coreDescriptors.js.map +1 -1
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/navigation/SceneNavigationContext.js +21 -0
- package/dist/cjs/navigation/SceneNavigationContext.js.map +1 -0
- package/dist/cjs/navigation/SceneNavigationHost.js +82 -0
- package/dist/cjs/navigation/SceneNavigationHost.js.map +1 -0
- package/dist/cjs/packages/EmbeddedPackageHost.js +15 -0
- package/dist/cjs/packages/EmbeddedPackageHost.js.map +1 -0
- package/dist/cjs/packages/PackageHostAssets.js +30 -0
- package/dist/cjs/packages/PackageHostAssets.js.map +1 -0
- package/dist/cjs/packages/PackageHostConfiguration.js +17 -9
- package/dist/cjs/packages/PackageHostConfiguration.js.map +1 -1
- package/dist/cjs/packages/PackageHostRenderMode.js +15 -0
- package/dist/cjs/packages/PackageHostRenderMode.js.map +1 -0
- package/dist/cjs/packages/PackageHostView.js +53 -0
- package/dist/cjs/packages/PackageHostView.js.map +1 -0
- package/dist/cjs/packages/StandalonePackageHost.js +15 -0
- package/dist/cjs/packages/StandalonePackageHost.js.map +1 -0
- package/dist/cjs/packages/WebViewPackageHost.js +15 -0
- package/dist/cjs/packages/WebViewPackageHost.js.map +1 -0
- package/dist/cjs/renderer/InteractiveComponent.js +4 -0
- package/dist/cjs/renderer/InteractiveComponent.js.map +1 -1
- package/dist/esm/core/coreComponents.js +3 -1
- package/dist/esm/core/coreComponents.js.map +1 -1
- package/dist/esm/core/coreDescriptors.js +2 -0
- package/dist/esm/core/coreDescriptors.js.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/navigation/SceneNavigationContext.d.ts +20 -0
- package/dist/esm/navigation/SceneNavigationContext.d.ts.map +1 -0
- package/dist/esm/navigation/SceneNavigationContext.js +18 -0
- package/dist/esm/navigation/SceneNavigationContext.js.map +1 -0
- package/dist/esm/navigation/SceneNavigationHost.d.ts +12 -0
- package/dist/esm/navigation/SceneNavigationHost.d.ts.map +1 -0
- package/dist/esm/navigation/SceneNavigationHost.js +80 -0
- package/dist/esm/navigation/SceneNavigationHost.js.map +1 -0
- package/dist/esm/navigation/index.d.ts +2 -0
- package/dist/esm/navigation/index.d.ts.map +1 -1
- package/dist/esm/navigation/index.js +2 -0
- package/dist/esm/navigation/index.js.map +1 -1
- package/dist/esm/packages/EmbeddedPackageHost.d.ts +3 -0
- package/dist/esm/packages/EmbeddedPackageHost.d.ts.map +1 -0
- package/dist/esm/packages/EmbeddedPackageHost.js +13 -0
- package/dist/esm/packages/EmbeddedPackageHost.js.map +1 -0
- package/dist/esm/packages/PackageHostAssets.d.ts +6 -0
- package/dist/esm/packages/PackageHostAssets.d.ts.map +1 -0
- package/dist/esm/packages/PackageHostAssets.js +28 -0
- package/dist/esm/packages/PackageHostAssets.js.map +1 -0
- package/dist/esm/packages/PackageHostConfiguration.d.ts +3 -0
- package/dist/esm/packages/PackageHostConfiguration.d.ts.map +1 -1
- package/dist/esm/packages/PackageHostConfiguration.js +17 -9
- package/dist/esm/packages/PackageHostConfiguration.js.map +1 -1
- package/dist/esm/packages/PackageHostRenderMode.d.ts +6 -0
- package/dist/esm/packages/PackageHostRenderMode.d.ts.map +1 -0
- package/dist/esm/packages/PackageHostRenderMode.js +13 -0
- package/dist/esm/packages/PackageHostRenderMode.js.map +1 -0
- package/dist/esm/packages/PackageHostView.d.ts +13 -0
- package/dist/esm/packages/PackageHostView.d.ts.map +1 -0
- package/dist/esm/packages/PackageHostView.js +51 -0
- package/dist/esm/packages/PackageHostView.js.map +1 -0
- package/dist/esm/packages/StandalonePackageHost.d.ts +3 -0
- package/dist/esm/packages/StandalonePackageHost.d.ts.map +1 -0
- package/dist/esm/packages/StandalonePackageHost.js +13 -0
- package/dist/esm/packages/StandalonePackageHost.js.map +1 -0
- package/dist/esm/packages/WebViewPackageHost.d.ts +3 -0
- package/dist/esm/packages/WebViewPackageHost.d.ts.map +1 -0
- package/dist/esm/packages/WebViewPackageHost.js +13 -0
- package/dist/esm/packages/WebViewPackageHost.js.map +1 -0
- package/dist/esm/packages/index.d.ts +6 -0
- package/dist/esm/packages/index.d.ts.map +1 -1
- package/dist/esm/packages/index.js +6 -0
- package/dist/esm/packages/index.js.map +1 -1
- package/dist/esm/renderer/InteractiveComponent.js +4 -0
- package/dist/esm/renderer/InteractiveComponent.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/navigation/SceneNavigationContext.tsx +34 -0
- package/navigation/SceneNavigationHost.tsx +67 -0
- package/navigation/index.ts +2 -0
- package/package.json +5 -5
- package/packages/EmbeddedPackageHost.tsx +10 -0
- package/packages/PackageHostAssets.tsx +18 -0
- package/packages/PackageHostConfiguration.ts +24 -9
- package/packages/PackageHostRenderMode.ts +11 -0
- package/packages/PackageHostView.tsx +43 -0
- package/packages/StandalonePackageHost.tsx +10 -0
- package/packages/WebViewPackageHost.tsx +10 -0
- package/packages/index.ts +6 -0
- package/renderer/InteractiveComponent.tsx +5 -0
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
require('react/jsx-runtime');
|
|
4
4
|
require('react');
|
|
5
|
-
require('@cratis/scene.engine');
|
|
6
5
|
require('@cratis/scene.model');
|
|
6
|
+
require('@cratis/scene.engine');
|
|
7
|
+
require('../interactions/useInteractions.js');
|
|
8
|
+
require('../interactions/NotificationHost.js');
|
|
7
9
|
var ScenePackageBundle = require('../packages/ScenePackageBundle.js');
|
|
8
10
|
var CoreText = require('./CoreText.js');
|
|
9
11
|
var CoreButton = require('./CoreButton.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coreComponents.js","sources":["../../../core/coreComponents.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 { ComponentRegistry } from '../renderer';\nimport { componentRegistryKey } from '../packages';\nimport { CoreText } from './CoreText';\nimport { CoreButton } from './CoreButton';\nimport { CoreCard } from './CoreCard';\nimport { CoreNavigationBar } from './CoreNavigationBar';\nimport {\n CoreAction,\n CoreCode,\n CoreColumn,\n CoreData,\n CoreField,\n CoreFile,\n CoreNavigate,\n CoreSection,\n CoreSummary,\n CoreTable,\n CoreTitle,\n} from './ScreenplayCoreComponents';\n\n/**\n * The `core` package's component registry - the final fallback every `ui profile` resolves against\n * regardless of which other packages it lists (Scene#3).\n */\nexport const coreComponents: ComponentRegistry = {\n [componentRegistryKey('core', 'text')]: CoreText,\n [componentRegistryKey('core', 'button')]: CoreButton,\n [componentRegistryKey('core', 'card')]: CoreCard,\n [componentRegistryKey('core', 'data')]: CoreData,\n [componentRegistryKey('core', 'action')]: CoreAction,\n [componentRegistryKey('core', 'section')]: CoreSection,\n [componentRegistryKey('core', 'navigate')]: CoreNavigate,\n [componentRegistryKey('core', 'title')]: CoreTitle,\n [componentRegistryKey('core', 'table')]: CoreTable,\n [componentRegistryKey('core', 'column')]: CoreColumn,\n [componentRegistryKey('core', 'summary')]: CoreSummary,\n [componentRegistryKey('core', 'field')]: CoreField,\n [componentRegistryKey('core', 'code')]: CoreCode,\n [componentRegistryKey('core', 'file')]: CoreFile,\n [componentRegistryKey('core', 'navigationBar')]: CoreNavigationBar,\n};\n"],"names":["coreComponents","componentRegistryKey","CoreText","CoreButton","CoreCard","CoreData","CoreAction","CoreSection","CoreNavigate","CoreTitle","CoreTable","CoreColumn","CoreSummary","CoreField","CoreCode","CoreFile","CoreNavigationBar"],"mappings":"
|
|
1
|
+
{"version":3,"file":"coreComponents.js","sources":["../../../core/coreComponents.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 { ComponentRegistry } from '../renderer';\nimport { componentRegistryKey } from '../packages';\nimport { CoreText } from './CoreText';\nimport { CoreButton } from './CoreButton';\nimport { CoreCard } from './CoreCard';\nimport { CoreNavigationBar } from './CoreNavigationBar';\nimport {\n CoreAction,\n CoreCode,\n CoreColumn,\n CoreData,\n CoreField,\n CoreFile,\n CoreNavigate,\n CoreSection,\n CoreSummary,\n CoreTable,\n CoreTitle,\n} from './ScreenplayCoreComponents';\n\n/**\n * The `core` package's component registry - the final fallback every `ui profile` resolves against\n * regardless of which other packages it lists (Scene#3).\n */\nexport const coreComponents: ComponentRegistry = {\n [componentRegistryKey('core', 'text')]: CoreText,\n [componentRegistryKey('core', 'button')]: CoreButton,\n [componentRegistryKey('core', 'card')]: CoreCard,\n [componentRegistryKey('core', 'data')]: CoreData,\n [componentRegistryKey('core', 'action')]: CoreAction,\n [componentRegistryKey('core', 'section')]: CoreSection,\n [componentRegistryKey('core', 'navigate')]: CoreNavigate,\n [componentRegistryKey('core', 'title')]: CoreTitle,\n [componentRegistryKey('core', 'table')]: CoreTable,\n [componentRegistryKey('core', 'column')]: CoreColumn,\n [componentRegistryKey('core', 'summary')]: CoreSummary,\n [componentRegistryKey('core', 'field')]: CoreField,\n [componentRegistryKey('core', 'code')]: CoreCode,\n [componentRegistryKey('core', 'file')]: CoreFile,\n [componentRegistryKey('core', 'navigationBar')]: CoreNavigationBar,\n};\n"],"names":["coreComponents","componentRegistryKey","CoreText","CoreButton","CoreCard","CoreData","CoreAction","CoreSection","CoreNavigate","CoreTitle","CoreTable","CoreColumn","CoreSummary","CoreField","CoreCode","CoreFile","CoreNavigationBar"],"mappings":";;;;;;;;;;;;;;;AAAA;AACA;AAsBA;;;UAIaA,cAAAA,GAAoC;IAC7C,CAACC,uCAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUC,iBAAAA;IACxC,CAACD,uCAAAA,CAAqB,MAAA,EAAQ,QAAA,CAAA,GAAYE,qBAAAA;IAC1C,CAACF,uCAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUG,iBAAAA;IACxC,CAACH,uCAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUI,iCAAAA;IACxC,CAACJ,uCAAAA,CAAqB,MAAA,EAAQ,QAAA,CAAA,GAAYK,mCAAAA;IAC1C,CAACL,uCAAAA,CAAqB,MAAA,EAAQ,SAAA,CAAA,GAAaM,oCAAAA;IAC3C,CAACN,uCAAAA,CAAqB,MAAA,EAAQ,UAAA,CAAA,GAAcO,qCAAAA;IAC5C,CAACP,uCAAAA,CAAqB,MAAA,EAAQ,OAAA,CAAA,GAAWQ,kCAAAA;IACzC,CAACR,uCAAAA,CAAqB,MAAA,EAAQ,OAAA,CAAA,GAAWS,kCAAAA;IACzC,CAACT,uCAAAA,CAAqB,MAAA,EAAQ,QAAA,CAAA,GAAYU,mCAAAA;IAC1C,CAACV,uCAAAA,CAAqB,MAAA,EAAQ,SAAA,CAAA,GAAaW,oCAAAA;IAC3C,CAACX,uCAAAA,CAAqB,MAAA,EAAQ,OAAA,CAAA,GAAWY,kCAAAA;IACzC,CAACZ,uCAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUa,iCAAAA;IACxC,CAACb,uCAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUc,iCAAAA;IACxC,CAACd,uCAAAA,CAAqB,MAAA,EAAQ,eAAA,CAAA,GAAmBe;AACrD;;"}
|
|
@@ -4,6 +4,8 @@ var scene_model = require('@cratis/scene.model');
|
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
6
|
require('@cratis/scene.engine');
|
|
7
|
+
require('../interactions/useInteractions.js');
|
|
8
|
+
require('../interactions/NotificationHost.js');
|
|
7
9
|
var ScenePackageBundle = require('../packages/ScenePackageBundle.js');
|
|
8
10
|
|
|
9
11
|
// Copyright (c) Cratis. All rights reserved.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coreDescriptors.js","sources":["../../../core/coreDescriptors.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 { ComponentDescriptor, PropertyValueType } from '@cratis/scene.model';\nimport { componentRegistryKey } from '../packages';\n\nconst key = (name: string) => componentRegistryKey('core', name);\n\n/**\n * What can be edited on the `core` package's components.\n *\n * Only the components an author configures by hand are described: a button's label, an action's command and its\n * argument mapping, a column's heading, and the navigation bar. The Screenplay structural components - `data`,\n * `section`, `summary` - have nothing to edit that is not already a node in the tree.\n */\nexport const coreDescriptors: ComponentDescriptor[] = [\n {\n component: key('button'),\n displayName: 'Button',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, default: '' },\n ],\n },\n {\n component: key('action'),\n displayName: 'Command action',\n description: 'Invokes a modeled command. The command and its argument mapping are stored on the element; the host that handles the command event reads them.',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String },\n {\n path: 'command', label: 'Command', group: 'Behavior', valueType: PropertyValueType.String,\n editorKind: 'stateChangeReference', constraints: { required: true },\n description: 'The state change this action submits.',\n },\n {\n path: 'arguments', label: 'Argument mapping', group: 'Behavior', valueType: PropertyValueType.Collection,\n description: 'Where each command argument comes from.',\n item: {\n label: 'Argument',\n properties: [\n { path: 'name', label: 'Argument', group: 'Behavior', valueType: PropertyValueType.String, constraints: { required: true } },\n { path: 'source', label: 'Source', group: 'Behavior', valueType: PropertyValueType.String, editorKind: 'bindingPath', constraints: { required: true } },\n ],\n },\n },\n ],\n },\n {\n component: key('column'),\n displayName: 'Table column',\n properties: [\n { path: 'property', label: 'Result field', group: 'Data', valueType: PropertyValueType.String, editorKind: 'resultField', constraints: { required: true } },\n { path: 'label', label: 'Heading', group: 'Content', valueType: PropertyValueType.String },\n ],\n },\n {\n component: key('navigationBar'),\n displayName: 'Navigation bar',\n description: 'A list of navigation items. A template author fixes the first item (Home) and can expose the list so that screens add their own.',\n properties: [\n { path: 'title', label: 'Title', group: 'Content', valueType: PropertyValueType.String, default: 'Navigation' },\n {\n path: 'items', label: 'Items', group: 'Content', valueType: PropertyValueType.Collection, default: [],\n item: {\n label: 'Navigation item',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, constraints: { required: true, minimumLength: 1 } },\n { path: 'icon', label: 'Icon', group: 'Content', valueType: PropertyValueType.Icon, editorKind: 'iconPicker' },\n { path: 'destination', label: 'Destination', group: 'Content', valueType: PropertyValueType.Destination, editorKind: 'screenPicker', constraints: { required: true } },\n ],\n },\n },\n ],\n },\n];\n"],"names":["key","name","componentRegistryKey","coreDescriptors","component","displayName","properties","path","label","group","valueType","PropertyValueType","String","default","description","editorKind","constraints","required","Collection","item","minimumLength","Icon","Destination"],"mappings":"
|
|
1
|
+
{"version":3,"file":"coreDescriptors.js","sources":["../../../core/coreDescriptors.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 { ComponentDescriptor, PropertyValueType } from '@cratis/scene.model';\nimport { componentRegistryKey } from '../packages';\n\nconst key = (name: string) => componentRegistryKey('core', name);\n\n/**\n * What can be edited on the `core` package's components.\n *\n * Only the components an author configures by hand are described: a button's label, an action's command and its\n * argument mapping, a column's heading, and the navigation bar. The Screenplay structural components - `data`,\n * `section`, `summary` - have nothing to edit that is not already a node in the tree.\n */\nexport const coreDescriptors: ComponentDescriptor[] = [\n {\n component: key('button'),\n displayName: 'Button',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, default: '' },\n ],\n },\n {\n component: key('action'),\n displayName: 'Command action',\n description: 'Invokes a modeled command. The command and its argument mapping are stored on the element; the host that handles the command event reads them.',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String },\n {\n path: 'command', label: 'Command', group: 'Behavior', valueType: PropertyValueType.String,\n editorKind: 'stateChangeReference', constraints: { required: true },\n description: 'The state change this action submits.',\n },\n {\n path: 'arguments', label: 'Argument mapping', group: 'Behavior', valueType: PropertyValueType.Collection,\n description: 'Where each command argument comes from.',\n item: {\n label: 'Argument',\n properties: [\n { path: 'name', label: 'Argument', group: 'Behavior', valueType: PropertyValueType.String, constraints: { required: true } },\n { path: 'source', label: 'Source', group: 'Behavior', valueType: PropertyValueType.String, editorKind: 'bindingPath', constraints: { required: true } },\n ],\n },\n },\n ],\n },\n {\n component: key('column'),\n displayName: 'Table column',\n properties: [\n { path: 'property', label: 'Result field', group: 'Data', valueType: PropertyValueType.String, editorKind: 'resultField', constraints: { required: true } },\n { path: 'label', label: 'Heading', group: 'Content', valueType: PropertyValueType.String },\n ],\n },\n {\n component: key('navigationBar'),\n displayName: 'Navigation bar',\n description: 'A list of navigation items. A template author fixes the first item (Home) and can expose the list so that screens add their own.',\n properties: [\n { path: 'title', label: 'Title', group: 'Content', valueType: PropertyValueType.String, default: 'Navigation' },\n {\n path: 'items', label: 'Items', group: 'Content', valueType: PropertyValueType.Collection, default: [],\n item: {\n label: 'Navigation item',\n properties: [\n { path: 'label', label: 'Label', group: 'Content', valueType: PropertyValueType.String, constraints: { required: true, minimumLength: 1 } },\n { path: 'icon', label: 'Icon', group: 'Content', valueType: PropertyValueType.Icon, editorKind: 'iconPicker' },\n { path: 'destination', label: 'Destination', group: 'Content', valueType: PropertyValueType.Destination, editorKind: 'screenPicker', constraints: { required: true } },\n ],\n },\n },\n ],\n },\n];\n"],"names":["key","name","componentRegistryKey","coreDescriptors","component","displayName","properties","path","label","group","valueType","PropertyValueType","String","default","description","editorKind","constraints","required","Collection","item","minimumLength","Icon","Destination"],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -17,6 +17,8 @@ var coreComponents = require('./core/coreComponents.js');
|
|
|
17
17
|
var corePackage = require('./core/corePackage.js');
|
|
18
18
|
var NavBar = require('./NavBar/NavBar.js');
|
|
19
19
|
var extractNavigationItem = require('./NavBar/extractNavigationItem.js');
|
|
20
|
+
var SceneNavigationContext = require('./navigation/SceneNavigationContext.js');
|
|
21
|
+
var SceneNavigationHost = require('./navigation/SceneNavigationHost.js');
|
|
20
22
|
var resolveDestination = require('./navigation/resolveDestination.js');
|
|
21
23
|
var IconAdapterRegistry = require('./icons/IconAdapterRegistry.js');
|
|
22
24
|
var IconAdapterContext = require('./icons/IconAdapterContext.js');
|
|
@@ -24,8 +26,14 @@ var useIconGlyph = require('./icons/useIconGlyph.js');
|
|
|
24
26
|
var SceneIcon = require('./icons/SceneIcon.js');
|
|
25
27
|
var DesignTimeBundle = require('./packages/DesignTimeBundle.js');
|
|
26
28
|
var DesignTimeProvider = require('./packages/DesignTimeProvider.js');
|
|
29
|
+
var EmbeddedPackageHost = require('./packages/EmbeddedPackageHost.js');
|
|
30
|
+
var PackageHostAssets = require('./packages/PackageHostAssets.js');
|
|
27
31
|
var PackageHostConfiguration = require('./packages/PackageHostConfiguration.js');
|
|
32
|
+
var PackageHostRenderMode = require('./packages/PackageHostRenderMode.js');
|
|
33
|
+
var PackageHostView = require('./packages/PackageHostView.js');
|
|
28
34
|
var ScenePackageBundle = require('./packages/ScenePackageBundle.js');
|
|
35
|
+
var StandalonePackageHost = require('./packages/StandalonePackageHost.js');
|
|
36
|
+
var WebViewPackageHost = require('./packages/WebViewPackageHost.js');
|
|
29
37
|
var ComponentsUiLibraryContract = require('./packages/ComponentsUiLibraryContract.js');
|
|
30
38
|
var themeTokens = require('./theme/themeTokens.js');
|
|
31
39
|
var SceneThemeProvider = require('./theme/SceneThemeProvider.js');
|
|
@@ -71,6 +79,9 @@ exports.corePackage = corePackage.corePackage;
|
|
|
71
79
|
exports.corePackageManifest = corePackage.corePackageManifest;
|
|
72
80
|
exports.NavBar = NavBar.NavBar;
|
|
73
81
|
exports.extractNavigationItem = extractNavigationItem.extractNavigationItem;
|
|
82
|
+
exports.SceneNavigationProvider = SceneNavigationContext.SceneNavigationProvider;
|
|
83
|
+
exports.useSceneNavigation = SceneNavigationContext.useSceneNavigation;
|
|
84
|
+
exports.SceneNavigationHost = SceneNavigationHost.SceneNavigationHost;
|
|
74
85
|
exports.resolveDestination = resolveDestination.resolveDestination;
|
|
75
86
|
exports.IconAdapterRegistry = IconAdapterRegistry.IconAdapterRegistry;
|
|
76
87
|
exports.createIconAdapterRegistry = IconAdapterRegistry.createIconAdapterRegistry;
|
|
@@ -81,11 +92,17 @@ exports.SceneIcon = SceneIcon.SceneIcon;
|
|
|
81
92
|
exports.validateDesignTimeBundle = DesignTimeBundle.validateDesignTimeBundle;
|
|
82
93
|
exports.DesignTimeProvider = DesignTimeProvider.DesignTimeProvider;
|
|
83
94
|
exports.useDesignTimeContext = DesignTimeProvider.useDesignTimeContext;
|
|
95
|
+
exports.EmbeddedPackageHost = EmbeddedPackageHost.EmbeddedPackageHost;
|
|
96
|
+
exports.PackageHostAssets = PackageHostAssets.PackageHostAssets;
|
|
84
97
|
exports.resolvePackageHost = PackageHostConfiguration.resolvePackageHost;
|
|
98
|
+
exports.PackageHostRenderMode = PackageHostRenderMode.PackageHostRenderMode;
|
|
99
|
+
exports.PackageHostView = PackageHostView.PackageHostView;
|
|
85
100
|
exports.componentRegistryKey = ScenePackageBundle.componentRegistryKey;
|
|
86
101
|
exports.mergeIconAdapters = ScenePackageBundle.mergeIconAdapters;
|
|
87
102
|
exports.mergePackageRegistries = ScenePackageBundle.mergePackageRegistries;
|
|
88
103
|
exports.validatePackageBundle = ScenePackageBundle.validatePackageBundle;
|
|
104
|
+
exports.StandalonePackageHost = StandalonePackageHost.StandalonePackageHost;
|
|
105
|
+
exports.WebViewPackageHost = WebViewPackageHost.WebViewPackageHost;
|
|
89
106
|
exports.validateComponentsUiLibraryContract = ComponentsUiLibraryContract.validateComponentsUiLibraryContract;
|
|
90
107
|
exports.validateComponentsUiLibraryMapping = ComponentsUiLibraryContract.validateComponentsUiLibraryMapping;
|
|
91
108
|
exports.applyThemeTokens = themeTokens.applyThemeTokens;
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
const Context = /*#__PURE__*/ react.createContext(undefined);
|
|
7
|
+
function SceneNavigationProvider({ value, children }) {
|
|
8
|
+
return /*#__PURE__*/ jsxRuntime.jsx(Context.Provider, {
|
|
9
|
+
value: value,
|
|
10
|
+
children: children
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function useSceneNavigation() {
|
|
14
|
+
const context = react.useContext(Context);
|
|
15
|
+
if (!context) throw new Error('No Scene navigation context is available.');
|
|
16
|
+
return context;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.SceneNavigationProvider = SceneNavigationProvider;
|
|
20
|
+
exports.useSceneNavigation = useSceneNavigation;
|
|
21
|
+
//# sourceMappingURL=SceneNavigationContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneNavigationContext.js","sources":["../../../navigation/SceneNavigationContext.tsx"],"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 { ReactNode, createContext, useContext } from 'react';\nimport { BindingScope } from '@cratis/scene.engine';\nimport { DestinationReference } from '@cratis/scene.model';\nimport { DestinationResolution } from './DestinationResolution';\n\nexport interface SceneNavigationContextValue {\n currentScreen: string;\n currentUrl?: string;\n currentOutlet?: string;\n currentDialog?: string;\n bindingScope: BindingScope;\n navigate(destination: DestinationReference): DestinationResolution;\n closeDialog(): void;\n}\n\nconst Context = createContext<SceneNavigationContextValue | undefined>(undefined);\n\nexport interface SceneNavigationProviderProps {\n value: SceneNavigationContextValue;\n children: ReactNode;\n}\n\nexport function SceneNavigationProvider({ value, children }: SceneNavigationProviderProps) {\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\nexport function useSceneNavigation(): SceneNavigationContextValue {\n const context = useContext(Context);\n if (!context) throw new Error('No Scene navigation context is available.');\n return context;\n}\n"],"names":["Context","createContext","undefined","SceneNavigationProvider","value","children","_jsx","Provider","useSceneNavigation","context","useContext","Error"],"mappings":";;;;;AAkBA,MAAMA,wBAAUC,mBAAAA,CAAuDC,SAAAA,CAAAA;AAOhE,SAASC,uBAAAA,CAAwB,EAAEC,KAAK,EAAEC,QAAQ,EAAgC,EAAA;IACrF,qBAAOC,cAAA,CAACN,QAAQO,QAAQ,EAAA;QAACH,KAAAA,EAAOA,KAAAA;AAAQC,QAAAA,QAAAA,EAAAA;;AAC5C;AAEO,SAASG,kBAAAA,GAAAA;AACZ,IAAA,MAAMC,UAAUC,gBAAAA,CAAWV,OAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACS,OAAAA,EAAS,MAAM,IAAIE,KAAAA,CAAM,2CAAA,CAAA;IAC9B,OAAOF,OAAAA;AACX;;;"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var scene_model = require('@cratis/scene.model');
|
|
6
|
+
var SceneElementView = require('../SceneElementView.js');
|
|
7
|
+
var SceneNavigationContext = require('./SceneNavigationContext.js');
|
|
8
|
+
var resolveDestination = require('./resolveDestination.js');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Executes Scene destinations against an in-memory rendered hierarchy: screen routes replace outlets,
|
|
12
|
+
* dialog destinations render dialog content, and external destinations only report their resolved action.
|
|
13
|
+
*/ function SceneNavigationHost({ screens, dialogs = {}, initialScreen, registry, bindingScope = {} }) {
|
|
14
|
+
const [currentScreen, setCurrentScreen] = react.useState(initialScreen);
|
|
15
|
+
const [currentUrl, setCurrentUrl] = react.useState(initialScreen);
|
|
16
|
+
const [currentOutlet, setCurrentOutlet] = react.useState();
|
|
17
|
+
const [currentDialog, setCurrentDialog] = react.useState();
|
|
18
|
+
const navigate = react.useCallback((destination)=>{
|
|
19
|
+
const resolution = resolveDestination.resolveDestination(destination, bindingScope);
|
|
20
|
+
if (resolution.kind === scene_model.DestinationKind.Dialog) {
|
|
21
|
+
setCurrentDialog(resolution.dialog);
|
|
22
|
+
return resolution;
|
|
23
|
+
}
|
|
24
|
+
if (resolution.kind !== scene_model.DestinationKind.External) {
|
|
25
|
+
setCurrentScreen(destination.screen ?? destination.slice ?? currentScreen);
|
|
26
|
+
setCurrentOutlet(resolution.outlet);
|
|
27
|
+
}
|
|
28
|
+
setCurrentUrl(resolution.url);
|
|
29
|
+
return resolution;
|
|
30
|
+
}, [
|
|
31
|
+
bindingScope,
|
|
32
|
+
currentScreen
|
|
33
|
+
]);
|
|
34
|
+
const value = react.useMemo(()=>({
|
|
35
|
+
currentScreen,
|
|
36
|
+
currentUrl,
|
|
37
|
+
currentOutlet,
|
|
38
|
+
currentDialog,
|
|
39
|
+
bindingScope,
|
|
40
|
+
navigate,
|
|
41
|
+
closeDialog: ()=>setCurrentDialog(undefined)
|
|
42
|
+
}), [
|
|
43
|
+
bindingScope,
|
|
44
|
+
currentDialog,
|
|
45
|
+
currentOutlet,
|
|
46
|
+
currentScreen,
|
|
47
|
+
currentUrl,
|
|
48
|
+
navigate
|
|
49
|
+
]);
|
|
50
|
+
const screen = screens[currentScreen];
|
|
51
|
+
const dialog = currentDialog ? dialogs[currentDialog] : undefined;
|
|
52
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(SceneNavigationContext.SceneNavigationProvider, {
|
|
53
|
+
value: value,
|
|
54
|
+
children: [
|
|
55
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
56
|
+
"data-scene-outlet": currentOutlet ?? 'primary',
|
|
57
|
+
"data-scene-url": currentUrl,
|
|
58
|
+
children: screen && /*#__PURE__*/ jsxRuntime.jsx(SceneElementView.SceneElementView, {
|
|
59
|
+
element: screen,
|
|
60
|
+
registry: registry,
|
|
61
|
+
dataContext: bindingScope.dataContext,
|
|
62
|
+
queryResults: bindingScope.queryResults,
|
|
63
|
+
componentOutputs: bindingScope.componentOutputs
|
|
64
|
+
})
|
|
65
|
+
}),
|
|
66
|
+
dialog && /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
67
|
+
role: "dialog",
|
|
68
|
+
"data-scene-dialog": currentDialog,
|
|
69
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(SceneElementView.SceneElementView, {
|
|
70
|
+
element: dialog,
|
|
71
|
+
registry: registry,
|
|
72
|
+
dataContext: bindingScope.dataContext,
|
|
73
|
+
queryResults: bindingScope.queryResults,
|
|
74
|
+
componentOutputs: bindingScope.componentOutputs
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
exports.SceneNavigationHost = SceneNavigationHost;
|
|
82
|
+
//# sourceMappingURL=SceneNavigationHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneNavigationHost.js","sources":["../../../navigation/SceneNavigationHost.tsx"],"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 { useCallback, useMemo, useState } from 'react';\nimport { BindingScope } from '@cratis/scene.engine';\nimport { DestinationKind, DestinationReference, SceneElement } from '@cratis/scene.model';\nimport { SceneElementView } from '../SceneElementView';\nimport { ComponentRegistry } from '../renderer';\nimport { SceneNavigationContextValue, SceneNavigationProvider } from './SceneNavigationContext';\nimport { resolveDestination } from './resolveDestination';\n\nexport interface SceneNavigationHostProps {\n screens: Record<string, SceneElement>;\n dialogs?: Record<string, SceneElement>;\n initialScreen: string;\n registry: ComponentRegistry;\n bindingScope?: BindingScope;\n}\n\n/**\n * Executes Scene destinations against an in-memory rendered hierarchy: screen routes replace outlets,\n * dialog destinations render dialog content, and external destinations only report their resolved action.\n */\nexport function SceneNavigationHost({ screens, dialogs = {}, initialScreen, registry, bindingScope = {} }: SceneNavigationHostProps) {\n const [currentScreen, setCurrentScreen] = useState(initialScreen);\n const [currentUrl, setCurrentUrl] = useState<string | undefined>(initialScreen);\n const [currentOutlet, setCurrentOutlet] = useState<string | undefined>();\n const [currentDialog, setCurrentDialog] = useState<string | undefined>();\n\n const navigate = useCallback((destination: DestinationReference) => {\n const resolution = resolveDestination(destination, bindingScope);\n if (resolution.kind === DestinationKind.Dialog) {\n setCurrentDialog(resolution.dialog);\n return resolution;\n }\n\n if (resolution.kind !== DestinationKind.External) {\n setCurrentScreen(destination.screen ?? destination.slice ?? currentScreen);\n setCurrentOutlet(resolution.outlet);\n }\n\n setCurrentUrl(resolution.url);\n return resolution;\n }, [bindingScope, currentScreen]);\n\n const value = useMemo<SceneNavigationContextValue>(() => ({\n currentScreen,\n currentUrl,\n currentOutlet,\n currentDialog,\n bindingScope,\n navigate,\n closeDialog: () => setCurrentDialog(undefined),\n }), [bindingScope, currentDialog, currentOutlet, currentScreen, currentUrl, navigate]);\n\n const screen = screens[currentScreen];\n const dialog = currentDialog ? dialogs[currentDialog] : undefined;\n\n return <SceneNavigationProvider value={value}>\n <div data-scene-outlet={currentOutlet ?? 'primary'} data-scene-url={currentUrl}>\n {screen && <SceneElementView element={screen} registry={registry} dataContext={bindingScope.dataContext} queryResults={bindingScope.queryResults} componentOutputs={bindingScope.componentOutputs} />}\n </div>\n {dialog && <div role='dialog' data-scene-dialog={currentDialog}>\n <SceneElementView element={dialog} registry={registry} dataContext={bindingScope.dataContext} queryResults={bindingScope.queryResults} componentOutputs={bindingScope.componentOutputs} />\n </div>}\n </SceneNavigationProvider>;\n}\n"],"names":["SceneNavigationHost","screens","dialogs","initialScreen","registry","bindingScope","currentScreen","setCurrentScreen","useState","currentUrl","setCurrentUrl","currentOutlet","setCurrentOutlet","currentDialog","setCurrentDialog","navigate","useCallback","destination","resolution","resolveDestination","kind","DestinationKind","Dialog","dialog","External","screen","slice","outlet","url","value","useMemo","closeDialog","undefined","_jsxs","SceneNavigationProvider","_jsx","div","data-scene-outlet","data-scene-url","SceneElementView","element","dataContext","queryResults","componentOutputs","role","data-scene-dialog"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var PackageHostView = require('./PackageHostView.js');
|
|
5
|
+
var PackageHostRenderMode = require('./PackageHostRenderMode.js');
|
|
6
|
+
|
|
7
|
+
/** An embedded package host example surface for application or designer panes. */ function EmbeddedPackageHost(props) {
|
|
8
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PackageHostView.PackageHostView, {
|
|
9
|
+
...props,
|
|
10
|
+
mode: PackageHostRenderMode.PackageHostRenderMode.Embedded
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
exports.EmbeddedPackageHost = EmbeddedPackageHost;
|
|
15
|
+
//# sourceMappingURL=EmbeddedPackageHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddedPackageHost.js","sources":["../../../packages/EmbeddedPackageHost.tsx"],"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 { PackageHostView, PackageHostViewProps } from './PackageHostView';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\n/** An embedded package host example surface for application or designer panes. */\nexport function EmbeddedPackageHost(props: Omit<PackageHostViewProps, 'mode'>) {\n return <PackageHostView {...props} mode={PackageHostRenderMode.Embedded} />;\n}\n"],"names":["EmbeddedPackageHost","props","_jsx","PackageHostView","mode","PackageHostRenderMode","Embedded"],"mappings":";;;;;;AAMA,mFACO,SAASA,mBAAAA,CAAoBC,KAAyC,EAAA;AACzE,IAAA,qBAAOC,cAAA,CAACC,+BAAAA,EAAAA;AAAiB,QAAA,GAAGF,KAAK;AAAEG,QAAAA,IAAAA,EAAMC,4CAAsBC;;AACnE;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
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
|
+
* Emits package-declared browser assets for a package host example.
|
|
9
|
+
*/ function PackageHostAssets({ assets, fonts }) {
|
|
10
|
+
const fontSet = new Set(fonts);
|
|
11
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
12
|
+
children: [
|
|
13
|
+
assets.filter((asset)=>!fontSet.has(asset)).map((asset)=>/*#__PURE__*/ jsxRuntime.jsx("link", {
|
|
14
|
+
rel: "stylesheet",
|
|
15
|
+
href: asset,
|
|
16
|
+
"data-scene-package-asset": asset
|
|
17
|
+
}, asset)),
|
|
18
|
+
fonts.map((font)=>/*#__PURE__*/ jsxRuntime.jsx("link", {
|
|
19
|
+
rel: "preload",
|
|
20
|
+
href: font,
|
|
21
|
+
as: "font",
|
|
22
|
+
crossOrigin: "",
|
|
23
|
+
"data-scene-package-font": font
|
|
24
|
+
}, font))
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.PackageHostAssets = PackageHostAssets;
|
|
30
|
+
//# sourceMappingURL=PackageHostAssets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageHostAssets.js","sources":["../../../packages/PackageHostAssets.tsx"],"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\nexport interface PackageHostAssetsProps {\n assets: string[];\n fonts: string[];\n}\n\n/**\n * Emits package-declared browser assets for a package host example.\n */\nexport function PackageHostAssets({ assets, fonts }: PackageHostAssetsProps) {\n const fontSet = new Set(fonts);\n return <>\n {assets.filter(asset => !fontSet.has(asset)).map(asset => <link key={asset} rel='stylesheet' href={asset} data-scene-package-asset={asset} />)}\n {fonts.map(font => <link key={font} rel='preload' href={font} as='font' crossOrigin='' data-scene-package-font={font} />)}\n </>;\n}\n"],"names":["PackageHostAssets","assets","fonts","fontSet","Set","_jsxs","_Fragment","filter","asset","has","map","_jsx","link","rel","href","data-scene-package-asset","font","as","crossOrigin","data-scene-package-font"],"mappings":";;;;AAAA;AACA;AAOA;;AAEC,IACM,SAASA,iBAAAA,CAAkB,EAAEC,MAAM,EAAEC,KAAK,EAA0B,EAAA;IACvE,MAAMC,OAAAA,GAAU,IAAIC,GAAAA,CAAIF,KAAAA,CAAAA;IACxB,qBAAOG,eAAA,CAAAC,mBAAA,EAAA;;AACFL,YAAAA,MAAAA,CAAOM,MAAM,CAACC,CAAAA,KAAAA,GAAS,CAACL,OAAAA,CAAQM,GAAG,CAACD,KAAAA,CAAAA,CAAAA,CAAQE,GAAG,CAACF,CAAAA,sBAASG,cAAA,CAACC,MAAAA,EAAAA;oBAAiBC,GAAAA,EAAI,YAAA;oBAAaC,IAAAA,EAAMN,KAAAA;oBAAOO,0BAAAA,EAA0BP;AAA/DA,iBAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AACpEN,YAAAA,KAAAA,CAAMQ,GAAG,CAACM,CAAAA,IAAAA,iBAAQL,cAAA,CAACC,MAAAA,EAAAA;oBAAgBC,GAAAA,EAAI,SAAA;oBAAUC,IAAAA,EAAME,IAAAA;oBAAMC,EAAAA,EAAG,MAAA;oBAAOC,WAAAA,EAAY,EAAA;oBAAGC,yBAAAA,EAAyBH;AAAlFA,iBAAAA,EAAAA,IAAAA,CAAAA;;;AAEtC;;"}
|
|
@@ -37,7 +37,7 @@ var ScenePackageBundle = require('./ScenePackageBundle.js');
|
|
|
37
37
|
continue;
|
|
38
38
|
}
|
|
39
39
|
diagnostics.push(...ScenePackageBundle.validatePackageBundle(bundle).map((problem)=>`${packageName}: ${problem}`));
|
|
40
|
-
if (!configuration.policy.allowExecutableImports && bundle.designTime) {
|
|
40
|
+
if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {
|
|
41
41
|
diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);
|
|
42
42
|
}
|
|
43
43
|
const packageAssets = bundle.manifest.assets ?? [];
|
|
@@ -54,18 +54,26 @@ var ScenePackageBundle = require('./ScenePackageBundle.js');
|
|
|
54
54
|
}
|
|
55
55
|
bundles.push(bundle);
|
|
56
56
|
}
|
|
57
|
+
const blocked = diagnostics.length > 0;
|
|
58
|
+
const approved = blocked ? [] : bundles;
|
|
59
|
+
const approvedAssets = blocked ? [] : assets;
|
|
57
60
|
return {
|
|
58
|
-
bundles,
|
|
59
|
-
components: ScenePackageBundle.mergePackageRegistries(
|
|
60
|
-
layouts:
|
|
61
|
-
screenTemplates:
|
|
62
|
-
dialogTemplates:
|
|
63
|
-
themes:
|
|
64
|
-
icons: IconAdapterRegistry.createIconAdapterRegistry(
|
|
65
|
-
assets,
|
|
61
|
+
bundles: approved,
|
|
62
|
+
components: ScenePackageBundle.mergePackageRegistries(approved),
|
|
63
|
+
layouts: approved.flatMap((bundle)=>bundle.layouts ?? []),
|
|
64
|
+
screenTemplates: approved.flatMap((bundle)=>bundle.screenTemplates ?? []),
|
|
65
|
+
dialogTemplates: approved.flatMap((bundle)=>bundle.dialogTemplates ?? []),
|
|
66
|
+
themes: approved.flatMap((bundle)=>bundle.themes ?? []),
|
|
67
|
+
icons: IconAdapterRegistry.createIconAdapterRegistry(approved.map((bundle)=>bundle.iconLibrary?.adapter).filter((adapter)=>adapter !== undefined)),
|
|
68
|
+
assets: approvedAssets,
|
|
69
|
+
fonts: approvedAssets.filter(isFontAsset),
|
|
70
|
+
blocked,
|
|
66
71
|
diagnostics
|
|
67
72
|
};
|
|
68
73
|
}
|
|
74
|
+
function isFontAsset(asset) {
|
|
75
|
+
return /\.(woff2?|otf|ttf)(\?|$)/.test(asset) || asset.includes('/fonts/');
|
|
76
|
+
}
|
|
69
77
|
|
|
70
78
|
exports.resolvePackageHost = resolvePackageHost;
|
|
71
79
|
//# sourceMappingURL=PackageHostConfiguration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageHostConfiguration.js","sources":["../../../packages/PackageHostConfiguration.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 { DialogTemplate, Layout, ScreenTemplate, Theme, UiProfile } from '@cratis/scene.model';\nimport { resolvePackageDependencies } from '@cratis/scene.engine';\nimport { IconAdapterRegistry, createIconAdapterRegistry } from '../icons/IconAdapterRegistry';\nimport { ScenePackageBundle, mergePackageRegistries, validatePackageBundle } from './ScenePackageBundle';\n\nexport interface PackageHostPolicy {\n allowExecutableImports: boolean;\n allowNetworkAssets: boolean;\n}\n\nexport interface PackageHostConfiguration {\n bundles: ScenePackageBundle[];\n profile: UiProfile;\n policy: PackageHostPolicy;\n}\n\nexport interface ResolvedPackageHost {\n bundles: ScenePackageBundle[];\n components: ReturnType<typeof mergePackageRegistries>;\n layouts: Layout[];\n screenTemplates: ScreenTemplate[];\n dialogTemplates: DialogTemplate[];\n themes: Theme[];\n icons: IconAdapterRegistry;\n assets: string[];\n diagnostics: string[];\n}\n\n/**\n * Resolves the approved package set a standalone or embedded React host uses.\n */\nexport function resolvePackageHost(configuration: PackageHostConfiguration): ResolvedPackageHost {\n const diagnostics: string[] = [];\n const names = new Map<string, number>();\n for (const bundle of configuration.bundles) {\n names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);\n }\n\n for (const [name, count] of names) {\n if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);\n }\n\n const byName = new Map(configuration.bundles.map(bundle => [bundle.manifest.name, bundle]));\n const selection = resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map(bundle => bundle.manifest));\n for (const missing of selection.missing) diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);\n for (const conflict of selection.versionConflicts) {\n diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);\n }\n for (const cycle of selection.cycles) diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);\n\n const bundles: ScenePackageBundle[] = [];\n const runtimeSingletons = new Map<string, string>();\n const assets: string[] = [];\n\n for (const packageName of selection.packages) {\n const bundle = byName.get(packageName);\n if (!bundle) {\n diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);\n continue;\n }\n\n diagnostics.push(...validatePackageBundle(bundle).map(problem => `${packageName}: ${problem}`));\n if (!configuration.policy.allowExecutableImports && bundle.designTime) {\n diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);\n }\n\n const packageAssets = bundle.manifest.assets ?? [];\n if (!configuration.policy.allowNetworkAssets && packageAssets.some(asset => /^https?:\\/\\//.test(asset))) {\n diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);\n }\n assets.push(...packageAssets);\n\n for (const dependency of bundle.manifest.runtimeSingletons ?? []) {\n const owner = runtimeSingletons.get(dependency);\n if (owner && owner !== packageName) {\n diagnostics.push(`Runtime singleton '${dependency}' is provided by both '${owner}' and '${packageName}'`);\n }\n runtimeSingletons.set(dependency, packageName);\n }\n\n bundles.push(bundle);\n }\n\n return {\n bundles,\n components: mergePackageRegistries(bundles),\n layouts: bundles.flatMap(bundle => bundle.layouts ?? []),\n screenTemplates: bundles.flatMap(bundle => bundle.screenTemplates ?? []),\n dialogTemplates: bundles.flatMap(bundle => bundle.dialogTemplates ?? []),\n themes: bundles.flatMap(bundle => bundle.themes ?? []),\n icons: createIconAdapterRegistry(bundles.map(bundle => bundle.iconLibrary?.adapter).filter(adapter => adapter !== undefined)),\n assets,\n diagnostics,\n };\n}\n"],"names":["resolvePackageHost","configuration","diagnostics","names","Map","bundle","bundles","set","manifest","name","get","count","push","byName","map","selection","resolvePackageDependencies","profile","packages","missing","package","dependsOn","conflict","versionConflicts","requiredRange","actualVersion","cycle","cycles","join","runtimeSingletons","assets","packageName","validatePackageBundle","problem","policy","allowExecutableImports","designTime","packageAssets","allowNetworkAssets","some","asset","test","dependency","owner","components","mergePackageRegistries","layouts","flatMap","screenTemplates","dialogTemplates","themes","icons","createIconAdapterRegistry","iconLibrary","adapter","filter","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PackageHostConfiguration.js","sources":["../../../packages/PackageHostConfiguration.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 { DialogTemplate, Layout, ScreenTemplate, Theme, UiProfile } from '@cratis/scene.model';\nimport { resolvePackageDependencies } from '@cratis/scene.engine';\nimport { IconAdapterRegistry, createIconAdapterRegistry } from '../icons/IconAdapterRegistry';\nimport { ScenePackageBundle, mergePackageRegistries, validatePackageBundle } from './ScenePackageBundle';\n\nexport interface PackageHostPolicy {\n allowExecutableImports: boolean;\n allowNetworkAssets: boolean;\n\n /** Whether this host is resolving optional design-time bundles in addition to runtime contributions. */\n loadDesignTime?: boolean;\n}\n\nexport interface PackageHostConfiguration {\n bundles: ScenePackageBundle[];\n profile: UiProfile;\n policy: PackageHostPolicy;\n}\n\nexport interface ResolvedPackageHost {\n bundles: ScenePackageBundle[];\n components: ReturnType<typeof mergePackageRegistries>;\n layouts: Layout[];\n screenTemplates: ScreenTemplate[];\n dialogTemplates: DialogTemplate[];\n themes: Theme[];\n icons: IconAdapterRegistry;\n assets: string[];\n fonts: string[];\n blocked: boolean;\n diagnostics: string[];\n}\n\n/**\n * Resolves the approved package set a standalone or embedded React host uses.\n */\nexport function resolvePackageHost(configuration: PackageHostConfiguration): ResolvedPackageHost {\n const diagnostics: string[] = [];\n const names = new Map<string, number>();\n for (const bundle of configuration.bundles) {\n names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);\n }\n\n for (const [name, count] of names) {\n if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);\n }\n\n const byName = new Map(configuration.bundles.map(bundle => [bundle.manifest.name, bundle]));\n const selection = resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map(bundle => bundle.manifest));\n for (const missing of selection.missing) diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);\n for (const conflict of selection.versionConflicts) {\n diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);\n }\n for (const cycle of selection.cycles) diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);\n\n const bundles: ScenePackageBundle[] = [];\n const runtimeSingletons = new Map<string, string>();\n const assets: string[] = [];\n\n for (const packageName of selection.packages) {\n const bundle = byName.get(packageName);\n if (!bundle) {\n diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);\n continue;\n }\n\n diagnostics.push(...validatePackageBundle(bundle).map(problem => `${packageName}: ${problem}`));\n if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {\n diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);\n }\n\n const packageAssets = bundle.manifest.assets ?? [];\n if (!configuration.policy.allowNetworkAssets && packageAssets.some(asset => /^https?:\\/\\//.test(asset))) {\n diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);\n }\n assets.push(...packageAssets);\n\n for (const dependency of bundle.manifest.runtimeSingletons ?? []) {\n const owner = runtimeSingletons.get(dependency);\n if (owner && owner !== packageName) {\n diagnostics.push(`Runtime singleton '${dependency}' is provided by both '${owner}' and '${packageName}'`);\n }\n runtimeSingletons.set(dependency, packageName);\n }\n\n bundles.push(bundle);\n }\n\n const blocked = diagnostics.length > 0;\n const approved = blocked ? [] : bundles;\n const approvedAssets = blocked ? [] : assets;\n\n return {\n bundles: approved,\n components: mergePackageRegistries(approved),\n layouts: approved.flatMap(bundle => bundle.layouts ?? []),\n screenTemplates: approved.flatMap(bundle => bundle.screenTemplates ?? []),\n dialogTemplates: approved.flatMap(bundle => bundle.dialogTemplates ?? []),\n themes: approved.flatMap(bundle => bundle.themes ?? []),\n icons: createIconAdapterRegistry(approved.map(bundle => bundle.iconLibrary?.adapter).filter(adapter => adapter !== undefined)),\n assets: approvedAssets,\n fonts: approvedAssets.filter(isFontAsset),\n blocked,\n diagnostics,\n };\n}\n\nfunction isFontAsset(asset: string): boolean {\n return /\\.(woff2?|otf|ttf)(\\?|$)/.test(asset) || asset.includes('/fonts/');\n}\n"],"names":["resolvePackageHost","configuration","diagnostics","names","Map","bundle","bundles","set","manifest","name","get","count","push","byName","map","selection","resolvePackageDependencies","profile","packages","missing","package","dependsOn","conflict","versionConflicts","requiredRange","actualVersion","cycle","cycles","join","runtimeSingletons","assets","packageName","validatePackageBundle","problem","policy","loadDesignTime","allowExecutableImports","designTime","packageAssets","allowNetworkAssets","some","asset","test","dependency","owner","blocked","length","approved","approvedAssets","components","mergePackageRegistries","layouts","flatMap","screenTemplates","dialogTemplates","themes","icons","createIconAdapterRegistry","iconLibrary","adapter","filter","undefined","fonts","isFontAsset","includes"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
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
|
+
/**
|
|
6
|
+
* The host surface rendering a resolved package profile.
|
|
7
|
+
*/ var PackageHostRenderMode = /*#__PURE__*/ function(PackageHostRenderMode) {
|
|
8
|
+
PackageHostRenderMode["Standalone"] = "standalone";
|
|
9
|
+
PackageHostRenderMode["Embedded"] = "embedded";
|
|
10
|
+
PackageHostRenderMode["WebView"] = "webView";
|
|
11
|
+
return PackageHostRenderMode;
|
|
12
|
+
}({});
|
|
13
|
+
|
|
14
|
+
exports.PackageHostRenderMode = PackageHostRenderMode;
|
|
15
|
+
//# sourceMappingURL=PackageHostRenderMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageHostRenderMode.js","sources":["../../../packages/PackageHostRenderMode.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\n/**\n * The host surface rendering a resolved package profile.\n */\nexport enum PackageHostRenderMode {\n Standalone = 'standalone',\n Embedded = 'embedded',\n WebView = 'webView',\n}\n"],"names":["PackageHostRenderMode"],"mappings":";;AAAA;AACA;AAEA;;IAGO,IAAKA,qBAAAA,iBAAAA,SAAAA,qBAAAA,EAAAA;;;;AAAAA,IAAAA,OAAAA,qBAAAA;AAIX,CAAA,CAAA,EAAA;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var SceneElementView = require('../SceneElementView.js');
|
|
5
|
+
var PackageHostAssets = require('./PackageHostAssets.js');
|
|
6
|
+
var PackageHostConfiguration = require('./PackageHostConfiguration.js');
|
|
7
|
+
var PackageHostRenderMode = require('./PackageHostRenderMode.js');
|
|
8
|
+
|
|
9
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
10
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
11
|
+
/**
|
|
12
|
+
* Renders a Scene element through an approved package host. Diagnostics are blocking: no rejected bundle,
|
|
13
|
+
* component, asset or design-time contribution is rendered after policy/dependency validation fails.
|
|
14
|
+
*/ function PackageHostView({ configuration, element, mode = PackageHostRenderMode.PackageHostRenderMode.Embedded, dataContext, queryResults, componentOutputs }) {
|
|
15
|
+
const host = PackageHostConfiguration.resolvePackageHost(configuration);
|
|
16
|
+
if (host.blocked) {
|
|
17
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("section", {
|
|
18
|
+
role: "alert",
|
|
19
|
+
"data-scene-host-mode": mode,
|
|
20
|
+
"data-scene-host-blocked": "true",
|
|
21
|
+
children: [
|
|
22
|
+
/*#__PURE__*/ jsxRuntime.jsx("h2", {
|
|
23
|
+
children: "Scene package host blocked rendering"
|
|
24
|
+
}),
|
|
25
|
+
/*#__PURE__*/ jsxRuntime.jsx("ul", {
|
|
26
|
+
children: host.diagnostics.map((diagnostic)=>/*#__PURE__*/ jsxRuntime.jsx("li", {
|
|
27
|
+
children: diagnostic
|
|
28
|
+
}, diagnostic))
|
|
29
|
+
})
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("section", {
|
|
34
|
+
"data-scene-host-mode": mode,
|
|
35
|
+
"data-scene-host-blocked": "false",
|
|
36
|
+
children: [
|
|
37
|
+
/*#__PURE__*/ jsxRuntime.jsx(PackageHostAssets.PackageHostAssets, {
|
|
38
|
+
assets: host.assets,
|
|
39
|
+
fonts: host.fonts
|
|
40
|
+
}),
|
|
41
|
+
/*#__PURE__*/ jsxRuntime.jsx(SceneElementView.SceneElementView, {
|
|
42
|
+
element: element,
|
|
43
|
+
registry: host.components,
|
|
44
|
+
dataContext: dataContext,
|
|
45
|
+
queryResults: queryResults,
|
|
46
|
+
componentOutputs: componentOutputs
|
|
47
|
+
})
|
|
48
|
+
]
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
exports.PackageHostView = PackageHostView;
|
|
53
|
+
//# sourceMappingURL=PackageHostView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageHostView.js","sources":["../../../packages/PackageHostView.tsx"],"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 { SceneElement } from '@cratis/scene.model';\nimport { SceneElementView } from '../SceneElementView';\nimport { PackageHostAssets } from './PackageHostAssets';\nimport { PackageHostConfiguration, resolvePackageHost } from './PackageHostConfiguration';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\nexport interface PackageHostViewProps {\n configuration: PackageHostConfiguration;\n element: SceneElement;\n mode?: PackageHostRenderMode;\n dataContext?: unknown;\n queryResults?: Record<string, unknown>;\n componentOutputs?: Record<string, Record<string, unknown>>;\n}\n\n/**\n * Renders a Scene element through an approved package host. Diagnostics are blocking: no rejected bundle,\n * component, asset or design-time contribution is rendered after policy/dependency validation fails.\n */\nexport function PackageHostView({\n configuration,\n element,\n mode = PackageHostRenderMode.Embedded,\n dataContext,\n queryResults,\n componentOutputs,\n}: PackageHostViewProps) {\n const host = resolvePackageHost(configuration);\n if (host.blocked) {\n return <section role='alert' data-scene-host-mode={mode} data-scene-host-blocked='true'>\n <h2>Scene package host blocked rendering</h2>\n <ul>{host.diagnostics.map(diagnostic => <li key={diagnostic}>{diagnostic}</li>)}</ul>\n </section>;\n }\n\n return <section data-scene-host-mode={mode} data-scene-host-blocked='false'>\n <PackageHostAssets assets={host.assets} fonts={host.fonts} />\n <SceneElementView element={element} registry={host.components} dataContext={dataContext} queryResults={queryResults} componentOutputs={componentOutputs} />\n </section>;\n}\n"],"names":["PackageHostView","configuration","element","mode","PackageHostRenderMode","Embedded","dataContext","queryResults","componentOutputs","host","resolvePackageHost","blocked","_jsxs","section","role","data-scene-host-mode","data-scene-host-blocked","_jsx","h2","ul","diagnostics","map","diagnostic","li","PackageHostAssets","assets","fonts","SceneElementView","registry","components"],"mappings":";;;;;;;;AAAA;AACA;AAiBA;;;AAGC,IACM,SAASA,eAAAA,CAAgB,EAC5BC,aAAa,EACbC,OAAO,EACPC,IAAAA,GAAOC,2CAAAA,CAAsBC,QAAQ,EACrCC,WAAW,EACXC,YAAY,EACZC,gBAAgB,EACG,EAAA;AACnB,IAAA,MAAMC,OAAOC,2CAAAA,CAAmBT,aAAAA,CAAAA;IAChC,IAAIQ,IAAAA,CAAKE,OAAO,EAAE;AACd,QAAA,qBAAOC,eAAA,CAACC,SAAAA,EAAAA;YAAQC,IAAAA,EAAK,OAAA;YAAQC,sBAAAA,EAAsBZ,IAAAA;YAAMa,yBAAAA,EAAwB,MAAA;;8BAC7EC,cAAA,CAACC,IAAAA,EAAAA;AAAG,oBAAA,QAAA,EAAA;;8BACJD,cAAA,CAACE,IAAAA,EAAAA;AAAIV,oBAAAA,QAAAA,EAAAA,IAAAA,CAAKW,WAAW,CAACC,GAAG,CAACC,CAAAA,2BAAcL,cAAA,CAACM,IAAAA,EAAAA;AAAqBD,4BAAAA,QAAAA,EAAAA;AAAbA,yBAAAA,EAAAA,UAAAA,CAAAA;;;;AAEzD,IAAA;AAEA,IAAA,qBAAOV,eAAA,CAACC,SAAAA,EAAAA;QAAQE,sBAAAA,EAAsBZ,IAAAA;QAAMa,yBAAAA,EAAwB,OAAA;;0BAChEC,cAAA,CAACO,mCAAAA,EAAAA;AAAkBC,gBAAAA,MAAAA,EAAQhB,KAAKgB,MAAM;AAAEC,gBAAAA,KAAAA,EAAOjB,KAAKiB;;0BACpDT,cAAA,CAACU,iCAAAA,EAAAA;gBAAiBzB,OAAAA,EAASA,OAAAA;AAAS0B,gBAAAA,QAAAA,EAAUnB,KAAKoB,UAAU;gBAAEvB,WAAAA,EAAaA,WAAAA;gBAAaC,YAAAA,EAAcA,YAAAA;gBAAcC,gBAAAA,EAAkBA;;;;AAE/I;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var PackageHostView = require('./PackageHostView.js');
|
|
5
|
+
var PackageHostRenderMode = require('./PackageHostRenderMode.js');
|
|
6
|
+
|
|
7
|
+
/** A standalone browser package host example surface. */ function StandalonePackageHost(props) {
|
|
8
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PackageHostView.PackageHostView, {
|
|
9
|
+
...props,
|
|
10
|
+
mode: PackageHostRenderMode.PackageHostRenderMode.Standalone
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
exports.StandalonePackageHost = StandalonePackageHost;
|
|
15
|
+
//# sourceMappingURL=StandalonePackageHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StandalonePackageHost.js","sources":["../../../packages/StandalonePackageHost.tsx"],"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 { PackageHostView, PackageHostViewProps } from './PackageHostView';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\n/** A standalone browser package host example surface. */\nexport function StandalonePackageHost(props: Omit<PackageHostViewProps, 'mode'>) {\n return <PackageHostView {...props} mode={PackageHostRenderMode.Standalone} />;\n}\n"],"names":["StandalonePackageHost","props","_jsx","PackageHostView","mode","PackageHostRenderMode","Standalone"],"mappings":";;;;;;AAMA,0DACO,SAASA,qBAAAA,CAAsBC,KAAyC,EAAA;AAC3E,IAAA,qBAAOC,cAAA,CAACC,+BAAAA,EAAAA;AAAiB,QAAA,GAAGF,KAAK;AAAEG,QAAAA,IAAAA,EAAMC,4CAAsBC;;AACnE;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var PackageHostView = require('./PackageHostView.js');
|
|
5
|
+
var PackageHostRenderMode = require('./PackageHostRenderMode.js');
|
|
6
|
+
|
|
7
|
+
/** A constrained webview package host example surface. */ function WebViewPackageHost(props) {
|
|
8
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PackageHostView.PackageHostView, {
|
|
9
|
+
...props,
|
|
10
|
+
mode: PackageHostRenderMode.PackageHostRenderMode.WebView
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
exports.WebViewPackageHost = WebViewPackageHost;
|
|
15
|
+
//# sourceMappingURL=WebViewPackageHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebViewPackageHost.js","sources":["../../../packages/WebViewPackageHost.tsx"],"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 { PackageHostView, PackageHostViewProps } from './PackageHostView';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\n/** A constrained webview package host example surface. */\nexport function WebViewPackageHost(props: Omit<PackageHostViewProps, 'mode'>) {\n return <PackageHostView {...props} mode={PackageHostRenderMode.WebView} />;\n}\n"],"names":["WebViewPackageHost","props","_jsx","PackageHostView","mode","PackageHostRenderMode","WebView"],"mappings":";;;;;;AAMA,2DACO,SAASA,kBAAAA,CAAmBC,KAAyC,EAAA;AACxE,IAAA,qBAAOC,cAAA,CAACC,+BAAAA,EAAAA;AAAiB,QAAA,GAAGF,KAAK;AAAEG,QAAAA,IAAAA,EAAMC,4CAAsBC;;AACnE;;"}
|
|
@@ -44,6 +44,7 @@ function resolveProperties(properties, resolveBinding) {
|
|
|
44
44
|
}
|
|
45
45
|
function resolveValue(value, resolveBinding) {
|
|
46
46
|
if (isBindingExpression(value)) return resolveBinding(value);
|
|
47
|
+
if (isDestinationReference(value)) return value;
|
|
47
48
|
if (Array.isArray(value)) return value.map((entry)=>resolveValue(entry, resolveBinding));
|
|
48
49
|
if (value !== null && typeof value === 'object') {
|
|
49
50
|
return Object.fromEntries(Object.entries(value).map(([name, entry])=>[
|
|
@@ -56,6 +57,9 @@ function resolveValue(value, resolveBinding) {
|
|
|
56
57
|
function isBindingExpression(value) {
|
|
57
58
|
return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof value.path === 'string';
|
|
58
59
|
}
|
|
60
|
+
function isDestinationReference(value) {
|
|
61
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) && 'routeParameterBindings' in value;
|
|
62
|
+
}
|
|
59
63
|
|
|
60
64
|
exports.InteractiveComponent = InteractiveComponent;
|
|
61
65
|
//# sourceMappingURL=InteractiveComponent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractiveComponent.js","sources":["../../../renderer/InteractiveComponent.tsx"],"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 { ComponentType, ReactNode, createElement, useEffect, useMemo } from 'react';\nimport { BindingExpression, ExternalComponent } from '@cratis/scene.model';\nimport { useInteractions } from '../interactions';\nimport { useBindingOutputs } from './BindingOutputContext';\nimport { RegisteredComponentProps } from './ComponentRegistry';\nimport { useRenderBindingResolver } from './RenderBindingScopeContext';\n\nexport interface InteractiveComponentProps {\n component: ComponentType<RegisteredComponentProps>;\n element: ExternalComponent;\n slots: Record<string, ReactNode[]>;\n}\n\n/**\n * Resolves an element's interactions and hands them to the component that renders it.\n *\n * This exists as a component rather than as a call inside the renderer because resolving them is a hook, and a\n * hook cannot run inside the plain function a {@link Renderer} is. Keeping the renderer plain is what lets the\n * same element tree be rendered by something that is not React at all.\n */\nexport function InteractiveComponent({ component, element, slots }: InteractiveComponentProps) {\n const interactions = useInteractions(element.id, element.behaviors);\n const bindingOutputs = useBindingOutputs(element.id);\n const resolveBinding = useRenderBindingResolver();\n const resolvedElement = useMemo(() => ({\n ...element,\n properties: resolveProperties(element.properties, resolveBinding),\n }), [element, resolveBinding]);\n useEffect(() => () => bindingOutputs.clearAll(), [element.id]);\n return createElement(component, { element: resolvedElement, slots, interactions, bindingOutputs });\n}\n\nfunction resolveProperties(properties: Record<string, unknown>, resolveBinding: (binding: BindingExpression) => unknown): Record<string, unknown> {\n return Object.fromEntries(Object.entries(properties).map(([name, value]) => [name, resolveValue(value, resolveBinding)]));\n}\n\nfunction resolveValue(value: unknown, resolveBinding: (binding: BindingExpression) => unknown): unknown {\n if (isBindingExpression(value)) return resolveBinding(value);\n if (Array.isArray(value)) return value.map(entry => resolveValue(entry, resolveBinding));\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([name, entry]) => [name, resolveValue(entry, resolveBinding)]));\n }\n\n return value;\n}\n\nfunction isBindingExpression(value: unknown): value is BindingExpression {\n return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof (value as Record<string, unknown>).path === 'string';\n}\n"],"names":["InteractiveComponent","component","element","slots","interactions","useInteractions","id","behaviors","bindingOutputs","useBindingOutputs","resolveBinding","useRenderBindingResolver","resolvedElement","useMemo","properties","resolveProperties","useEffect","clearAll","createElement","Object","fromEntries","entries","map","name","value","resolveValue","isBindingExpression","Array","isArray","entry","path"],"mappings":";;;;;;;;;AAAA;AACA;AAeA;;;;;;IAOO,SAASA,oBAAAA,CAAqB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,KAAK,EAA6B,EAAA;AACzF,IAAA,MAAMC,eAAeC,+BAAAA,CAAgBH,OAAAA,CAAQI,EAAE,EAAEJ,QAAQK,SAAS,CAAA;IAClE,MAAMC,cAAAA,GAAiBC,sCAAAA,CAAkBP,OAAAA,CAAQI,EAAE,CAAA;AACnD,IAAA,MAAMI,cAAAA,GAAiBC,kDAAAA,EAAAA;IACvB,MAAMC,eAAAA,GAAkBC,aAAAA,CAAQ,KAAO;AACnC,YAAA,GAAGX,OAAO;YACVY,UAAAA,EAAYC,iBAAAA,CAAkBb,OAAAA,CAAQY,UAAU,EAAEJ,cAAAA;AACtD,SAAA,CAAA,EAAI;AAACR,QAAAA,OAAAA;AAASQ,QAAAA;AAAe,KAAA,CAAA;AAC7BM,IAAAA,eAAAA,CAAU,IAAM,IAAMR,cAAAA,CAAeS,QAAQ,EAAA,EAAI;AAACf,QAAAA,OAAAA,CAAQI;AAAG,KAAA,CAAA;AAC7D,IAAA,qBAAOY,oBAAcjB,SAAAA,EAAW;QAAEC,OAAAA,EAASU,eAAAA;AAAiBT,QAAAA,KAAAA;AAAOC,QAAAA,YAAAA;AAAcI,QAAAA;AAAe,KAAA,CAAA;AACpG;AAEA,SAASO,iBAAAA,CAAkBD,UAAmC,EAAEJ,cAAuD,EAAA;AACnH,IAAA,OAAOS,MAAAA,CAAOC,WAAW,CAACD,MAAAA,CAAOE,OAAO,CAACP,UAAAA,CAAAA,CAAYQ,GAAG,CAAC,CAAC,CAACC,IAAAA,EAAMC,MAAM,GAAK;AAACD,YAAAA,IAAAA;AAAME,YAAAA,YAAAA,CAAaD,KAAAA,EAAOd,cAAAA;AAAgB,SAAA,CAAA,CAAA;AAC3H;AAEA,SAASe,YAAAA,CAAaD,KAAc,EAAEd,cAAuD,EAAA;IACzF,IAAIgB,mBAAAA,CAAoBF,KAAAA,CAAAA,EAAQ,OAAOd,cAAAA,CAAec,KAAAA,CAAAA;IACtD,IAAIG,KAAAA,CAAMC,OAAO,
|
|
1
|
+
{"version":3,"file":"InteractiveComponent.js","sources":["../../../renderer/InteractiveComponent.tsx"],"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 { ComponentType, ReactNode, createElement, useEffect, useMemo } from 'react';\nimport { BindingExpression, ExternalComponent } from '@cratis/scene.model';\nimport { useInteractions } from '../interactions';\nimport { useBindingOutputs } from './BindingOutputContext';\nimport { RegisteredComponentProps } from './ComponentRegistry';\nimport { useRenderBindingResolver } from './RenderBindingScopeContext';\n\nexport interface InteractiveComponentProps {\n component: ComponentType<RegisteredComponentProps>;\n element: ExternalComponent;\n slots: Record<string, ReactNode[]>;\n}\n\n/**\n * Resolves an element's interactions and hands them to the component that renders it.\n *\n * This exists as a component rather than as a call inside the renderer because resolving them is a hook, and a\n * hook cannot run inside the plain function a {@link Renderer} is. Keeping the renderer plain is what lets the\n * same element tree be rendered by something that is not React at all.\n */\nexport function InteractiveComponent({ component, element, slots }: InteractiveComponentProps) {\n const interactions = useInteractions(element.id, element.behaviors);\n const bindingOutputs = useBindingOutputs(element.id);\n const resolveBinding = useRenderBindingResolver();\n const resolvedElement = useMemo(() => ({\n ...element,\n properties: resolveProperties(element.properties, resolveBinding),\n }), [element, resolveBinding]);\n useEffect(() => () => bindingOutputs.clearAll(), [element.id]);\n return createElement(component, { element: resolvedElement, slots, interactions, bindingOutputs });\n}\n\nfunction resolveProperties(properties: Record<string, unknown>, resolveBinding: (binding: BindingExpression) => unknown): Record<string, unknown> {\n return Object.fromEntries(Object.entries(properties).map(([name, value]) => [name, resolveValue(value, resolveBinding)]));\n}\n\nfunction resolveValue(value: unknown, resolveBinding: (binding: BindingExpression) => unknown): unknown {\n if (isBindingExpression(value)) return resolveBinding(value);\n if (isDestinationReference(value)) return value;\n if (Array.isArray(value)) return value.map(entry => resolveValue(entry, resolveBinding));\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([name, entry]) => [name, resolveValue(entry, resolveBinding)]));\n }\n\n return value;\n}\n\nfunction isBindingExpression(value: unknown): value is BindingExpression {\n return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof (value as Record<string, unknown>).path === 'string';\n}\n\nfunction isDestinationReference(value: unknown): boolean {\n return value !== null && typeof value === 'object' && !Array.isArray(value) && 'routeParameterBindings' in value;\n}\n"],"names":["InteractiveComponent","component","element","slots","interactions","useInteractions","id","behaviors","bindingOutputs","useBindingOutputs","resolveBinding","useRenderBindingResolver","resolvedElement","useMemo","properties","resolveProperties","useEffect","clearAll","createElement","Object","fromEntries","entries","map","name","value","resolveValue","isBindingExpression","isDestinationReference","Array","isArray","entry","path"],"mappings":";;;;;;;;;AAAA;AACA;AAeA;;;;;;IAOO,SAASA,oBAAAA,CAAqB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,KAAK,EAA6B,EAAA;AACzF,IAAA,MAAMC,eAAeC,+BAAAA,CAAgBH,OAAAA,CAAQI,EAAE,EAAEJ,QAAQK,SAAS,CAAA;IAClE,MAAMC,cAAAA,GAAiBC,sCAAAA,CAAkBP,OAAAA,CAAQI,EAAE,CAAA;AACnD,IAAA,MAAMI,cAAAA,GAAiBC,kDAAAA,EAAAA;IACvB,MAAMC,eAAAA,GAAkBC,aAAAA,CAAQ,KAAO;AACnC,YAAA,GAAGX,OAAO;YACVY,UAAAA,EAAYC,iBAAAA,CAAkBb,OAAAA,CAAQY,UAAU,EAAEJ,cAAAA;AACtD,SAAA,CAAA,EAAI;AAACR,QAAAA,OAAAA;AAASQ,QAAAA;AAAe,KAAA,CAAA;AAC7BM,IAAAA,eAAAA,CAAU,IAAM,IAAMR,cAAAA,CAAeS,QAAQ,EAAA,EAAI;AAACf,QAAAA,OAAAA,CAAQI;AAAG,KAAA,CAAA;AAC7D,IAAA,qBAAOY,oBAAcjB,SAAAA,EAAW;QAAEC,OAAAA,EAASU,eAAAA;AAAiBT,QAAAA,KAAAA;AAAOC,QAAAA,YAAAA;AAAcI,QAAAA;AAAe,KAAA,CAAA;AACpG;AAEA,SAASO,iBAAAA,CAAkBD,UAAmC,EAAEJ,cAAuD,EAAA;AACnH,IAAA,OAAOS,MAAAA,CAAOC,WAAW,CAACD,MAAAA,CAAOE,OAAO,CAACP,UAAAA,CAAAA,CAAYQ,GAAG,CAAC,CAAC,CAACC,IAAAA,EAAMC,MAAM,GAAK;AAACD,YAAAA,IAAAA;AAAME,YAAAA,YAAAA,CAAaD,KAAAA,EAAOd,cAAAA;AAAgB,SAAA,CAAA,CAAA;AAC3H;AAEA,SAASe,YAAAA,CAAaD,KAAc,EAAEd,cAAuD,EAAA;IACzF,IAAIgB,mBAAAA,CAAoBF,KAAAA,CAAAA,EAAQ,OAAOd,cAAAA,CAAec,KAAAA,CAAAA;IACtD,IAAIG,sBAAAA,CAAuBH,QAAQ,OAAOA,KAAAA;IAC1C,IAAII,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,EAAQ,OAAOA,KAAAA,CAAMF,GAAG,CAACQ,CAAAA,KAAAA,GAASL,YAAAA,CAAaK,KAAAA,EAAOpB,cAAAA,CAAAA,CAAAA;AACxE,IAAA,IAAIc,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA,EAAU;AAC7C,QAAA,OAAOL,MAAAA,CAAOC,WAAW,CAACD,MAAAA,CAAOE,OAAO,CAACG,KAAAA,CAAAA,CAAkCF,GAAG,CAAC,CAAC,CAACC,IAAAA,EAAMO,MAAM,GAAK;AAACP,gBAAAA,IAAAA;AAAME,gBAAAA,YAAAA,CAAaK,KAAAA,EAAOpB,cAAAA;AAAgB,aAAA,CAAA,CAAA;AACjJ,IAAA;IAEA,OAAOc,KAAAA;AACX;AAEA,SAASE,oBAAoBF,KAAc,EAAA;AACvC,IAAA,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,YAAY,CAACI,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,IAAU,OAAO,KAACA,CAAkCO,IAAI,KAAK,QAAA;AACtI;AAEA,SAASJ,uBAAuBH,KAAc,EAAA;IAC1C,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA,IAAY,CAACI,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,IAAU,wBAAA,IAA4BA,KAAAA;AAC/G;;"}
|