@cratis/scene.react 4.10.0 → 4.12.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
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import 'react/jsx-runtime';
|
|
2
2
|
import 'react';
|
|
3
|
-
import '@cratis/scene.engine';
|
|
4
3
|
import '@cratis/scene.model';
|
|
4
|
+
import '@cratis/scene.engine';
|
|
5
|
+
import '../interactions/useInteractions.js';
|
|
6
|
+
import '../interactions/NotificationHost.js';
|
|
5
7
|
import { componentRegistryKey } from '../packages/ScenePackageBundle.js';
|
|
6
8
|
import { CoreText } from './CoreText.js';
|
|
7
9
|
import { CoreButton } from './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,oBAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUC,QAAAA;IACxC,CAACD,oBAAAA,CAAqB,MAAA,EAAQ,QAAA,CAAA,GAAYE,UAAAA;IAC1C,CAACF,oBAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUG,QAAAA;IACxC,CAACH,oBAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUI,QAAAA;IACxC,CAACJ,oBAAAA,CAAqB,MAAA,EAAQ,QAAA,CAAA,GAAYK,UAAAA;IAC1C,CAACL,oBAAAA,CAAqB,MAAA,EAAQ,SAAA,CAAA,GAAaM,WAAAA;IAC3C,CAACN,oBAAAA,CAAqB,MAAA,EAAQ,UAAA,CAAA,GAAcO,YAAAA;IAC5C,CAACP,oBAAAA,CAAqB,MAAA,EAAQ,OAAA,CAAA,GAAWQ,SAAAA;IACzC,CAACR,oBAAAA,CAAqB,MAAA,EAAQ,OAAA,CAAA,GAAWS,SAAAA;IACzC,CAACT,oBAAAA,CAAqB,MAAA,EAAQ,QAAA,CAAA,GAAYU,UAAAA;IAC1C,CAACV,oBAAAA,CAAqB,MAAA,EAAQ,SAAA,CAAA,GAAaW,WAAAA;IAC3C,CAACX,oBAAAA,CAAqB,MAAA,EAAQ,OAAA,CAAA,GAAWY,SAAAA;IACzC,CAACZ,oBAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUa,QAAAA;IACxC,CAACb,oBAAAA,CAAqB,MAAA,EAAQ,MAAA,CAAA,GAAUc,QAAAA;IACxC,CAACd,oBAAAA,CAAqB,MAAA,EAAQ,eAAA,CAAA,GAAmBe;AACrD;;"}
|
|
@@ -2,6 +2,8 @@ import { PropertyValueType } from '@cratis/scene.model';
|
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@cratis/scene.engine';
|
|
5
|
+
import '../interactions/useInteractions.js';
|
|
6
|
+
import '../interactions/NotificationHost.js';
|
|
5
7
|
import { componentRegistryKey } from '../packages/ScenePackageBundle.js';
|
|
6
8
|
|
|
7
9
|
// 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":";;;;;;;;AAAA;AACA;AAKA,MAAMA,GAAAA,GAAM,CAACC,IAAAA,GAAiBC,oBAAAA,CAAqB,MAAA,EAAQD,IAAAA,CAAAA;AAE3D;;;;;;UAOaE,eAAAA,GAAyC;AAClD,IAAA;AACIC,QAAAA,SAAAA,EAAWJ,GAAAA,CAAI,QAAA,CAAA;QACfK,WAAAA,EAAa,QAAA;QACbC,UAAAA,EAAY;AACR,YAAA;gBAAEC,IAAAA,EAAM,OAAA;gBAASC,KAAAA,EAAO,OAAA;gBAASC,KAAAA,EAAO,SAAA;AAAWC,gBAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;gBAAEC,OAAAA,EAAS;AAAG;AACvG;AACL,KAAA;AACA,IAAA;AACIT,QAAAA,SAAAA,EAAWJ,GAAAA,CAAI,QAAA,CAAA;QACfK,WAAAA,EAAa,gBAAA;QACbS,WAAAA,EAAa,gJAAA;QACbR,UAAAA,EAAY;AACR,YAAA;gBAAEC,IAAAA,EAAM,OAAA;gBAASC,KAAAA,EAAO,OAAA;gBAASC,KAAAA,EAAO,SAAA;AAAWC,gBAAAA,SAAAA,EAAWC,kBAAkBC;AAAO,aAAA;AACvF,YAAA;gBACIL,IAAAA,EAAM,SAAA;gBAAWC,KAAAA,EAAO,SAAA;gBAAWC,KAAAA,EAAO,UAAA;AAAYC,gBAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;gBACzFG,UAAAA,EAAY,sBAAA;gBAAwBC,WAAAA,EAAa;oBAAEC,QAAAA,EAAU;AAAK,iBAAA;gBAClEH,WAAAA,EAAa;AACjB,aAAA;AACA,YAAA;gBACIP,IAAAA,EAAM,WAAA;gBAAaC,KAAAA,EAAO,kBAAA;gBAAoBC,KAAAA,EAAO,UAAA;AAAYC,gBAAAA,SAAAA,EAAWC,kBAAkBO,UAAU;gBACxGJ,WAAAA,EAAa,yCAAA;gBACbK,IAAAA,EAAM;oBACFX,KAAAA,EAAO,UAAA;oBACPF,UAAAA,EAAY;AACR,wBAAA;4BAAEC,IAAAA,EAAM,MAAA;4BAAQC,KAAAA,EAAO,UAAA;4BAAYC,KAAAA,EAAO,UAAA;AAAYC,4BAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;4BAAEI,WAAAA,EAAa;gCAAEC,QAAAA,EAAU;AAAK;AAAE,yBAAA;AAC3H,wBAAA;4BAAEV,IAAAA,EAAM,QAAA;4BAAUC,KAAAA,EAAO,QAAA;4BAAUC,KAAAA,EAAO,UAAA;AAAYC,4BAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;4BAAEG,UAAAA,EAAY,aAAA;4BAAeC,WAAAA,EAAa;gCAAEC,QAAAA,EAAU;AAAK;AAAE;AACzJ;AACL;AACJ;AACH;AACL,KAAA;AACA,IAAA;AACIb,QAAAA,SAAAA,EAAWJ,GAAAA,CAAI,QAAA,CAAA;QACfK,WAAAA,EAAa,cAAA;QACbC,UAAAA,EAAY;AACR,YAAA;gBAAEC,IAAAA,EAAM,UAAA;gBAAYC,KAAAA,EAAO,cAAA;gBAAgBC,KAAAA,EAAO,MAAA;AAAQC,gBAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;gBAAEG,UAAAA,EAAY,aAAA;gBAAeC,WAAAA,EAAa;oBAAEC,QAAAA,EAAU;AAAK;AAAE,aAAA;AAC1J,YAAA;gBAAEV,IAAAA,EAAM,OAAA;gBAASC,KAAAA,EAAO,SAAA;gBAAWC,KAAAA,EAAO,SAAA;AAAWC,gBAAAA,SAAAA,EAAWC,kBAAkBC;AAAO;AAC5F;AACL,KAAA;AACA,IAAA;AACIR,QAAAA,SAAAA,EAAWJ,GAAAA,CAAI,eAAA,CAAA;QACfK,WAAAA,EAAa,gBAAA;QACbS,WAAAA,EAAa,kIAAA;QACbR,UAAAA,EAAY;AACR,YAAA;gBAAEC,IAAAA,EAAM,OAAA;gBAASC,KAAAA,EAAO,OAAA;gBAASC,KAAAA,EAAO,SAAA;AAAWC,gBAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;gBAAEC,OAAAA,EAAS;AAAa,aAAA;AAC9G,YAAA;gBACIN,IAAAA,EAAM,OAAA;gBAASC,KAAAA,EAAO,OAAA;gBAASC,KAAAA,EAAO,SAAA;AAAWC,gBAAAA,SAAAA,EAAWC,kBAAkBO,UAAU;AAAEL,gBAAAA,OAAAA,EAAS,EAAE;gBACrGM,IAAAA,EAAM;oBACFX,KAAAA,EAAO,iBAAA;oBACPF,UAAAA,EAAY;AACR,wBAAA;4BAAEC,IAAAA,EAAM,OAAA;4BAASC,KAAAA,EAAO,OAAA;4BAASC,KAAAA,EAAO,SAAA;AAAWC,4BAAAA,SAAAA,EAAWC,kBAAkBC,MAAM;4BAAEI,WAAAA,EAAa;gCAAEC,QAAAA,EAAU,IAAA;gCAAMG,aAAAA,EAAe;AAAE;AAAE,yBAAA;AAC1I,wBAAA;4BAAEb,IAAAA,EAAM,MAAA;4BAAQC,KAAAA,EAAO,MAAA;4BAAQC,KAAAA,EAAO,SAAA;AAAWC,4BAAAA,SAAAA,EAAWC,kBAAkBU,IAAI;4BAAEN,UAAAA,EAAY;AAAa,yBAAA;AAC7G,wBAAA;4BAAER,IAAAA,EAAM,aAAA;4BAAeC,KAAAA,EAAO,aAAA;4BAAeC,KAAAA,EAAO,SAAA;AAAWC,4BAAAA,SAAAA,EAAWC,kBAAkBW,WAAW;4BAAEP,UAAAA,EAAY,cAAA;4BAAgBC,WAAAA,EAAa;gCAAEC,QAAAA,EAAU;AAAK;AAAE;AACxK;AACL;AACJ;AACH;AACL;;;"}
|
package/dist/esm/index.js
CHANGED
|
@@ -15,6 +15,8 @@ export { coreComponents } from './core/coreComponents.js';
|
|
|
15
15
|
export { corePackage, corePackageManifest } from './core/corePackage.js';
|
|
16
16
|
export { NavBar } from './NavBar/NavBar.js';
|
|
17
17
|
export { extractNavigationItem } from './NavBar/extractNavigationItem.js';
|
|
18
|
+
export { SceneNavigationProvider, useSceneNavigation } from './navigation/SceneNavigationContext.js';
|
|
19
|
+
export { SceneNavigationHost } from './navigation/SceneNavigationHost.js';
|
|
18
20
|
export { resolveDestination } from './navigation/resolveDestination.js';
|
|
19
21
|
export { IconAdapterRegistry, createIconAdapterRegistry } from './icons/IconAdapterRegistry.js';
|
|
20
22
|
export { IconAdapterProvider, useIconAdapters } from './icons/IconAdapterContext.js';
|
|
@@ -22,8 +24,14 @@ export { useIconGlyph } from './icons/useIconGlyph.js';
|
|
|
22
24
|
export { SceneIcon } from './icons/SceneIcon.js';
|
|
23
25
|
export { validateDesignTimeBundle } from './packages/DesignTimeBundle.js';
|
|
24
26
|
export { DesignTimeProvider, useDesignTimeContext } from './packages/DesignTimeProvider.js';
|
|
27
|
+
export { EmbeddedPackageHost } from './packages/EmbeddedPackageHost.js';
|
|
28
|
+
export { PackageHostAssets } from './packages/PackageHostAssets.js';
|
|
25
29
|
export { resolvePackageHost } from './packages/PackageHostConfiguration.js';
|
|
30
|
+
export { PackageHostRenderMode } from './packages/PackageHostRenderMode.js';
|
|
31
|
+
export { PackageHostView } from './packages/PackageHostView.js';
|
|
26
32
|
export { componentRegistryKey, mergeIconAdapters, mergePackageRegistries, validatePackageBundle } from './packages/ScenePackageBundle.js';
|
|
33
|
+
export { StandalonePackageHost } from './packages/StandalonePackageHost.js';
|
|
34
|
+
export { WebViewPackageHost } from './packages/WebViewPackageHost.js';
|
|
27
35
|
export { validateComponentsUiLibraryContract, validateComponentsUiLibraryMapping } from './packages/ComponentsUiLibraryContract.js';
|
|
28
36
|
export { applyThemeTokens, themeTokenPrefix, themeTokenProperty } from './theme/themeTokens.js';
|
|
29
37
|
export { SceneThemeProvider, useSceneTheme } from './theme/SceneThemeProvider.js';
|
package/dist/esm/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,20 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { BindingScope } from '@cratis/scene.engine';
|
|
3
|
+
import { DestinationReference } from '@cratis/scene.model';
|
|
4
|
+
import { DestinationResolution } from './DestinationResolution';
|
|
5
|
+
export interface SceneNavigationContextValue {
|
|
6
|
+
currentScreen: string;
|
|
7
|
+
currentUrl?: string;
|
|
8
|
+
currentOutlet?: string;
|
|
9
|
+
currentDialog?: string;
|
|
10
|
+
bindingScope: BindingScope;
|
|
11
|
+
navigate(destination: DestinationReference): DestinationResolution;
|
|
12
|
+
closeDialog(): void;
|
|
13
|
+
}
|
|
14
|
+
export interface SceneNavigationProviderProps {
|
|
15
|
+
value: SceneNavigationContextValue;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare function SceneNavigationProvider({ value, children }: SceneNavigationProviderProps): import("react").JSX.Element;
|
|
19
|
+
export declare function useSceneNavigation(): SceneNavigationContextValue;
|
|
20
|
+
//# sourceMappingURL=SceneNavigationContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneNavigationContext.d.ts","sourceRoot":"","sources":["../../../navigation/SceneNavigationContext.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,2BAA2B;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IACnE,WAAW,IAAI,IAAI,CAAC;CACvB;AAID,MAAM,WAAW,4BAA4B;IACzC,KAAK,EAAE,2BAA2B,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,4BAA4B,+BAExF;AAED,wBAAgB,kBAAkB,IAAI,2BAA2B,CAIhE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useContext, createContext } from 'react';
|
|
3
|
+
|
|
4
|
+
const Context = /*#__PURE__*/ createContext(undefined);
|
|
5
|
+
function SceneNavigationProvider({ value, children }) {
|
|
6
|
+
return /*#__PURE__*/ jsx(Context.Provider, {
|
|
7
|
+
value: value,
|
|
8
|
+
children: children
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function useSceneNavigation() {
|
|
12
|
+
const context = useContext(Context);
|
|
13
|
+
if (!context) throw new Error('No Scene navigation context is available.');
|
|
14
|
+
return context;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { SceneNavigationProvider, useSceneNavigation };
|
|
18
|
+
//# 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,aAAAA,CAAuDC,SAAAA,CAAAA;AAOhE,SAASC,uBAAAA,CAAwB,EAAEC,KAAK,EAAEC,QAAQ,EAAgC,EAAA;IACrF,qBAAOC,GAAA,CAACN,QAAQO,QAAQ,EAAA;QAACH,KAAAA,EAAOA,KAAAA;AAAQC,QAAAA,QAAAA,EAAAA;;AAC5C;AAEO,SAASG,kBAAAA,GAAAA;AACZ,IAAA,MAAMC,UAAUC,UAAAA,CAAWV,OAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACS,OAAAA,EAAS,MAAM,IAAIE,KAAAA,CAAM,2CAAA,CAAA;IAC9B,OAAOF,OAAAA;AACX;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BindingScope } from '@cratis/scene.engine';
|
|
2
|
+
import { SceneElement } from '@cratis/scene.model';
|
|
3
|
+
import { ComponentRegistry } from '../renderer';
|
|
4
|
+
export interface SceneNavigationHostProps {
|
|
5
|
+
screens: Record<string, SceneElement>;
|
|
6
|
+
dialogs?: Record<string, SceneElement>;
|
|
7
|
+
initialScreen: string;
|
|
8
|
+
registry: ComponentRegistry;
|
|
9
|
+
bindingScope?: BindingScope;
|
|
10
|
+
}
|
|
11
|
+
export declare function SceneNavigationHost({ screens, dialogs, initialScreen, registry, bindingScope }: SceneNavigationHostProps): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=SceneNavigationHost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneNavigationHost.d.ts","sourceRoot":"","sources":["../../../navigation/SceneNavigationHost.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAyC,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAMD,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAiB,EAAE,EAAE,wBAAwB,+BA2ClI"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useMemo } from 'react';
|
|
3
|
+
import { DestinationKind } from '@cratis/scene.model';
|
|
4
|
+
import { SceneElementView } from '../SceneElementView.js';
|
|
5
|
+
import { SceneNavigationProvider } from './SceneNavigationContext.js';
|
|
6
|
+
import { resolveDestination } from './resolveDestination.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Executes Scene destinations against an in-memory rendered hierarchy: screen routes replace outlets,
|
|
10
|
+
* dialog destinations render dialog content, and external destinations only report their resolved action.
|
|
11
|
+
*/ function SceneNavigationHost({ screens, dialogs = {}, initialScreen, registry, bindingScope = {} }) {
|
|
12
|
+
const [currentScreen, setCurrentScreen] = useState(initialScreen);
|
|
13
|
+
const [currentUrl, setCurrentUrl] = useState(initialScreen);
|
|
14
|
+
const [currentOutlet, setCurrentOutlet] = useState();
|
|
15
|
+
const [currentDialog, setCurrentDialog] = useState();
|
|
16
|
+
const navigate = useCallback((destination)=>{
|
|
17
|
+
const resolution = resolveDestination(destination, bindingScope);
|
|
18
|
+
if (resolution.kind === DestinationKind.Dialog) {
|
|
19
|
+
setCurrentDialog(resolution.dialog);
|
|
20
|
+
return resolution;
|
|
21
|
+
}
|
|
22
|
+
if (resolution.kind !== DestinationKind.External) {
|
|
23
|
+
setCurrentScreen(destination.screen ?? destination.slice ?? currentScreen);
|
|
24
|
+
setCurrentOutlet(resolution.outlet);
|
|
25
|
+
}
|
|
26
|
+
setCurrentUrl(resolution.url);
|
|
27
|
+
return resolution;
|
|
28
|
+
}, [
|
|
29
|
+
bindingScope,
|
|
30
|
+
currentScreen
|
|
31
|
+
]);
|
|
32
|
+
const value = useMemo(()=>({
|
|
33
|
+
currentScreen,
|
|
34
|
+
currentUrl,
|
|
35
|
+
currentOutlet,
|
|
36
|
+
currentDialog,
|
|
37
|
+
bindingScope,
|
|
38
|
+
navigate,
|
|
39
|
+
closeDialog: ()=>setCurrentDialog(undefined)
|
|
40
|
+
}), [
|
|
41
|
+
bindingScope,
|
|
42
|
+
currentDialog,
|
|
43
|
+
currentOutlet,
|
|
44
|
+
currentScreen,
|
|
45
|
+
currentUrl,
|
|
46
|
+
navigate
|
|
47
|
+
]);
|
|
48
|
+
const screen = screens[currentScreen];
|
|
49
|
+
const dialog = currentDialog ? dialogs[currentDialog] : undefined;
|
|
50
|
+
return /*#__PURE__*/ jsxs(SceneNavigationProvider, {
|
|
51
|
+
value: value,
|
|
52
|
+
children: [
|
|
53
|
+
/*#__PURE__*/ jsx("div", {
|
|
54
|
+
"data-scene-outlet": currentOutlet ?? 'primary',
|
|
55
|
+
"data-scene-url": currentUrl,
|
|
56
|
+
children: screen && /*#__PURE__*/ jsx(SceneElementView, {
|
|
57
|
+
element: screen,
|
|
58
|
+
registry: registry,
|
|
59
|
+
dataContext: bindingScope.dataContext,
|
|
60
|
+
queryResults: bindingScope.queryResults,
|
|
61
|
+
componentOutputs: bindingScope.componentOutputs
|
|
62
|
+
})
|
|
63
|
+
}),
|
|
64
|
+
dialog && /*#__PURE__*/ jsx("div", {
|
|
65
|
+
role: "dialog",
|
|
66
|
+
"data-scene-dialog": currentDialog,
|
|
67
|
+
children: /*#__PURE__*/ jsx(SceneElementView, {
|
|
68
|
+
element: dialog,
|
|
69
|
+
registry: registry,
|
|
70
|
+
dataContext: bindingScope.dataContext,
|
|
71
|
+
queryResults: bindingScope.queryResults,
|
|
72
|
+
componentOutputs: bindingScope.componentOutputs
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { SceneNavigationHost };
|
|
80
|
+
//# 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../navigation/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../navigation/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../navigation/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../navigation/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddedPackageHost.d.ts","sourceRoot":"","sources":["../../../packages/EmbeddedPackageHost.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAmB,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAI1E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,+BAE5E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { PackageHostView } from './PackageHostView.js';
|
|
3
|
+
import { PackageHostRenderMode } from './PackageHostRenderMode.js';
|
|
4
|
+
|
|
5
|
+
/** An embedded package host example surface for application or designer panes. */ function EmbeddedPackageHost(props) {
|
|
6
|
+
return /*#__PURE__*/ jsx(PackageHostView, {
|
|
7
|
+
...props,
|
|
8
|
+
mode: PackageHostRenderMode.Embedded
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { EmbeddedPackageHost };
|
|
13
|
+
//# 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,GAAA,CAACC,eAAAA,EAAAA;AAAiB,QAAA,GAAGF,KAAK;AAAEG,QAAAA,IAAAA,EAAMC,sBAAsBC;;AACnE;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageHostAssets.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostAssets.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAKD,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,sBAAsB,+BAM1E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
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
|
+
* Emits package-declared browser assets for a package host example.
|
|
7
|
+
*/ function PackageHostAssets({ assets, fonts }) {
|
|
8
|
+
const fontSet = new Set(fonts);
|
|
9
|
+
return /*#__PURE__*/ jsxs(Fragment, {
|
|
10
|
+
children: [
|
|
11
|
+
assets.filter((asset)=>!fontSet.has(asset)).map((asset)=>/*#__PURE__*/ jsx("link", {
|
|
12
|
+
rel: "stylesheet",
|
|
13
|
+
href: asset,
|
|
14
|
+
"data-scene-package-asset": asset
|
|
15
|
+
}, asset)),
|
|
16
|
+
fonts.map((font)=>/*#__PURE__*/ jsx("link", {
|
|
17
|
+
rel: "preload",
|
|
18
|
+
href: font,
|
|
19
|
+
as: "font",
|
|
20
|
+
crossOrigin: "",
|
|
21
|
+
"data-scene-package-font": font
|
|
22
|
+
}, font))
|
|
23
|
+
]
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { PackageHostAssets };
|
|
28
|
+
//# 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,IAAA,CAAAC,QAAA,EAAA;;AACFL,YAAAA,MAAAA,CAAOM,MAAM,CAACC,CAAAA,KAAAA,GAAS,CAACL,OAAAA,CAAQM,GAAG,CAACD,KAAAA,CAAAA,CAAAA,CAAQE,GAAG,CAACF,CAAAA,sBAASG,GAAA,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,GAAA,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;;"}
|
|
@@ -4,6 +4,7 @@ import { ScenePackageBundle, mergePackageRegistries } from './ScenePackageBundle
|
|
|
4
4
|
export interface PackageHostPolicy {
|
|
5
5
|
allowExecutableImports: boolean;
|
|
6
6
|
allowNetworkAssets: boolean;
|
|
7
|
+
loadDesignTime?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export interface PackageHostConfiguration {
|
|
9
10
|
bundles: ScenePackageBundle[];
|
|
@@ -19,6 +20,8 @@ export interface ResolvedPackageHost {
|
|
|
19
20
|
themes: Theme[];
|
|
20
21
|
icons: IconAdapterRegistry;
|
|
21
22
|
assets: string[];
|
|
23
|
+
fonts: string[];
|
|
24
|
+
blocked: boolean;
|
|
22
25
|
diagnostics: string[];
|
|
23
26
|
}
|
|
24
27
|
export declare function resolvePackageHost(configuration: PackageHostConfiguration): ResolvedPackageHost;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageHostConfiguration.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostConfiguration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,mBAAmB,EAA6B,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AAEzG,MAAM,WAAW,iBAAiB;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PackageHostConfiguration.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostConfiguration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,mBAAmB,EAA6B,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AAEzG,MAAM,WAAW,iBAAiB;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAG5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAKD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,wBAAwB,GAAG,mBAAmB,CAqE/F"}
|
|
@@ -35,7 +35,7 @@ import { validatePackageBundle, mergePackageRegistries } from './ScenePackageBun
|
|
|
35
35
|
continue;
|
|
36
36
|
}
|
|
37
37
|
diagnostics.push(...validatePackageBundle(bundle).map((problem)=>`${packageName}: ${problem}`));
|
|
38
|
-
if (!configuration.policy.allowExecutableImports && bundle.designTime) {
|
|
38
|
+
if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {
|
|
39
39
|
diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);
|
|
40
40
|
}
|
|
41
41
|
const packageAssets = bundle.manifest.assets ?? [];
|
|
@@ -52,18 +52,26 @@ import { validatePackageBundle, mergePackageRegistries } from './ScenePackageBun
|
|
|
52
52
|
}
|
|
53
53
|
bundles.push(bundle);
|
|
54
54
|
}
|
|
55
|
+
const blocked = diagnostics.length > 0;
|
|
56
|
+
const approved = blocked ? [] : bundles;
|
|
57
|
+
const approvedAssets = blocked ? [] : assets;
|
|
55
58
|
return {
|
|
56
|
-
bundles,
|
|
57
|
-
components: mergePackageRegistries(
|
|
58
|
-
layouts:
|
|
59
|
-
screenTemplates:
|
|
60
|
-
dialogTemplates:
|
|
61
|
-
themes:
|
|
62
|
-
icons: createIconAdapterRegistry(
|
|
63
|
-
assets,
|
|
59
|
+
bundles: approved,
|
|
60
|
+
components: mergePackageRegistries(approved),
|
|
61
|
+
layouts: approved.flatMap((bundle)=>bundle.layouts ?? []),
|
|
62
|
+
screenTemplates: approved.flatMap((bundle)=>bundle.screenTemplates ?? []),
|
|
63
|
+
dialogTemplates: approved.flatMap((bundle)=>bundle.dialogTemplates ?? []),
|
|
64
|
+
themes: approved.flatMap((bundle)=>bundle.themes ?? []),
|
|
65
|
+
icons: createIconAdapterRegistry(approved.map((bundle)=>bundle.iconLibrary?.adapter).filter((adapter)=>adapter !== undefined)),
|
|
66
|
+
assets: approvedAssets,
|
|
67
|
+
fonts: approvedAssets.filter(isFontAsset),
|
|
68
|
+
blocked,
|
|
64
69
|
diagnostics
|
|
65
70
|
};
|
|
66
71
|
}
|
|
72
|
+
function isFontAsset(asset) {
|
|
73
|
+
return /\.(woff2?|otf|ttf)(\?|$)/.test(asset) || asset.includes('/fonts/');
|
|
74
|
+
}
|
|
67
75
|
|
|
68
76
|
export { resolvePackageHost };
|
|
69
77
|
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"PackageHostRenderMode.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostRenderMode.ts"],"names":[],"mappings":"AAMA,oBAAY,qBAAqB;IAC7B,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACtB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/**
|
|
4
|
+
* The host surface rendering a resolved package profile.
|
|
5
|
+
*/ var PackageHostRenderMode = /*#__PURE__*/ function(PackageHostRenderMode) {
|
|
6
|
+
PackageHostRenderMode["Standalone"] = "standalone";
|
|
7
|
+
PackageHostRenderMode["Embedded"] = "embedded";
|
|
8
|
+
PackageHostRenderMode["WebView"] = "webView";
|
|
9
|
+
return PackageHostRenderMode;
|
|
10
|
+
}({});
|
|
11
|
+
|
|
12
|
+
export { PackageHostRenderMode };
|
|
13
|
+
//# 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,13 @@
|
|
|
1
|
+
import { SceneElement } from '@cratis/scene.model';
|
|
2
|
+
import { PackageHostConfiguration } from './PackageHostConfiguration';
|
|
3
|
+
import { PackageHostRenderMode } from './PackageHostRenderMode';
|
|
4
|
+
export interface PackageHostViewProps {
|
|
5
|
+
configuration: PackageHostConfiguration;
|
|
6
|
+
element: SceneElement;
|
|
7
|
+
mode?: PackageHostRenderMode;
|
|
8
|
+
dataContext?: unknown;
|
|
9
|
+
queryResults?: Record<string, unknown>;
|
|
10
|
+
componentOutputs?: Record<string, Record<string, unknown>>;
|
|
11
|
+
}
|
|
12
|
+
export declare function PackageHostView({ configuration, element, mode, dataContext, queryResults, componentOutputs, }: PackageHostViewProps): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=PackageHostView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageHostView.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostView.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,wBAAwB,EAAsB,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,wBAAwB,CAAC;IACxC,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9D;AAMD,wBAAgB,eAAe,CAAC,EAC5B,aAAa,EACb,OAAO,EACP,IAAqC,EACrC,WAAW,EACX,YAAY,EACZ,gBAAgB,GACnB,EAAE,oBAAoB,+BAatB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { SceneElementView } from '../SceneElementView.js';
|
|
3
|
+
import { PackageHostAssets } from './PackageHostAssets.js';
|
|
4
|
+
import { resolvePackageHost } from './PackageHostConfiguration.js';
|
|
5
|
+
import { PackageHostRenderMode } from './PackageHostRenderMode.js';
|
|
6
|
+
|
|
7
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
8
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
9
|
+
/**
|
|
10
|
+
* Renders a Scene element through an approved package host. Diagnostics are blocking: no rejected bundle,
|
|
11
|
+
* component, asset or design-time contribution is rendered after policy/dependency validation fails.
|
|
12
|
+
*/ function PackageHostView({ configuration, element, mode = PackageHostRenderMode.Embedded, dataContext, queryResults, componentOutputs }) {
|
|
13
|
+
const host = resolvePackageHost(configuration);
|
|
14
|
+
if (host.blocked) {
|
|
15
|
+
return /*#__PURE__*/ jsxs("section", {
|
|
16
|
+
role: "alert",
|
|
17
|
+
"data-scene-host-mode": mode,
|
|
18
|
+
"data-scene-host-blocked": "true",
|
|
19
|
+
children: [
|
|
20
|
+
/*#__PURE__*/ jsx("h2", {
|
|
21
|
+
children: "Scene package host blocked rendering"
|
|
22
|
+
}),
|
|
23
|
+
/*#__PURE__*/ jsx("ul", {
|
|
24
|
+
children: host.diagnostics.map((diagnostic)=>/*#__PURE__*/ jsx("li", {
|
|
25
|
+
children: diagnostic
|
|
26
|
+
}, diagnostic))
|
|
27
|
+
})
|
|
28
|
+
]
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return /*#__PURE__*/ jsxs("section", {
|
|
32
|
+
"data-scene-host-mode": mode,
|
|
33
|
+
"data-scene-host-blocked": "false",
|
|
34
|
+
children: [
|
|
35
|
+
/*#__PURE__*/ jsx(PackageHostAssets, {
|
|
36
|
+
assets: host.assets,
|
|
37
|
+
fonts: host.fonts
|
|
38
|
+
}),
|
|
39
|
+
/*#__PURE__*/ jsx(SceneElementView, {
|
|
40
|
+
element: element,
|
|
41
|
+
registry: host.components,
|
|
42
|
+
dataContext: dataContext,
|
|
43
|
+
queryResults: queryResults,
|
|
44
|
+
componentOutputs: componentOutputs
|
|
45
|
+
})
|
|
46
|
+
]
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { PackageHostView };
|
|
51
|
+
//# sourceMappingURL=PackageHostView.js.map
|