@cratis/scene.react 4.9.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/SceneElementView.tsx +29 -7
  2. package/dist/cjs/SceneElementView.js +21 -8
  3. package/dist/cjs/SceneElementView.js.map +1 -1
  4. package/dist/cjs/core/coreComponents.js +4 -0
  5. package/dist/cjs/core/coreComponents.js.map +1 -1
  6. package/dist/cjs/core/coreDescriptors.js +3 -0
  7. package/dist/cjs/core/coreDescriptors.js.map +1 -1
  8. package/dist/cjs/index.js +11 -0
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/navigation/resolveDestination.js +54 -0
  11. package/dist/cjs/navigation/resolveDestination.js.map +1 -0
  12. package/dist/cjs/packages/DesignTimeBundle.js.map +1 -1
  13. package/dist/cjs/packages/DesignTimeProvider.js +23 -0
  14. package/dist/cjs/packages/DesignTimeProvider.js.map +1 -0
  15. package/dist/cjs/packages/PackageHostConfiguration.js +30 -2
  16. package/dist/cjs/packages/PackageHostConfiguration.js.map +1 -1
  17. package/dist/cjs/renderer/AbortableQueryRunner.js +26 -0
  18. package/dist/cjs/renderer/AbortableQueryRunner.js.map +1 -0
  19. package/dist/cjs/renderer/InteractiveComponent.js +30 -1
  20. package/dist/cjs/renderer/InteractiveComponent.js.map +1 -1
  21. package/dist/cjs/renderer/RenderBindingScopeContext.js +77 -0
  22. package/dist/cjs/renderer/RenderBindingScopeContext.js.map +1 -0
  23. package/dist/esm/SceneElementView.d.ts +5 -2
  24. package/dist/esm/SceneElementView.d.ts.map +1 -1
  25. package/dist/esm/SceneElementView.js +22 -9
  26. package/dist/esm/SceneElementView.js.map +1 -1
  27. package/dist/esm/core/coreComponents.js +4 -0
  28. package/dist/esm/core/coreComponents.js.map +1 -1
  29. package/dist/esm/core/coreDescriptors.js +3 -0
  30. package/dist/esm/core/coreDescriptors.js.map +1 -1
  31. package/dist/esm/index.d.ts +1 -0
  32. package/dist/esm/index.d.ts.map +1 -1
  33. package/dist/esm/index.js +4 -0
  34. package/dist/esm/index.js.map +1 -1
  35. package/dist/esm/navigation/DestinationResolution.d.ts +10 -0
  36. package/dist/esm/navigation/DestinationResolution.d.ts.map +1 -0
  37. package/dist/esm/navigation/DestinationResolution.js +2 -0
  38. package/dist/esm/navigation/DestinationResolution.js.map +1 -0
  39. package/dist/esm/navigation/index.d.ts +3 -0
  40. package/dist/esm/navigation/index.d.ts.map +1 -0
  41. package/dist/esm/navigation/index.js +3 -0
  42. package/dist/esm/navigation/index.js.map +1 -0
  43. package/dist/esm/navigation/resolveDestination.d.ts +5 -0
  44. package/dist/esm/navigation/resolveDestination.d.ts.map +1 -0
  45. package/dist/esm/navigation/resolveDestination.js +52 -0
  46. package/dist/esm/navigation/resolveDestination.js.map +1 -0
  47. package/dist/esm/packages/DesignTimeAction.d.ts +3 -4
  48. package/dist/esm/packages/DesignTimeAction.d.ts.map +1 -1
  49. package/dist/esm/packages/DesignTimeBundle.d.ts +8 -11
  50. package/dist/esm/packages/DesignTimeBundle.d.ts.map +1 -1
  51. package/dist/esm/packages/DesignTimeBundle.js.map +1 -1
  52. package/dist/esm/packages/DesignTimeComponentProps.d.ts +5 -0
  53. package/dist/esm/packages/DesignTimeComponentProps.d.ts.map +1 -0
  54. package/dist/esm/packages/DesignTimeComponentProps.js +2 -0
  55. package/dist/esm/packages/DesignTimeComponentProps.js.map +1 -0
  56. package/dist/esm/packages/DesignTimeContext.d.ts +18 -0
  57. package/dist/esm/packages/DesignTimeContext.d.ts.map +1 -0
  58. package/dist/esm/packages/DesignTimeContext.js +2 -0
  59. package/dist/esm/packages/DesignTimeContext.js.map +1 -0
  60. package/dist/esm/packages/DesignTimePropertyDisplayProps.d.ts +8 -0
  61. package/dist/esm/packages/DesignTimePropertyDisplayProps.d.ts.map +1 -0
  62. package/dist/esm/packages/DesignTimePropertyDisplayProps.js +2 -0
  63. package/dist/esm/packages/DesignTimePropertyDisplayProps.js.map +1 -0
  64. package/dist/esm/packages/DesignTimePropertyEditorProps.d.ts +9 -0
  65. package/dist/esm/packages/DesignTimePropertyEditorProps.d.ts.map +1 -0
  66. package/dist/esm/packages/DesignTimePropertyEditorProps.js +2 -0
  67. package/dist/esm/packages/DesignTimePropertyEditorProps.js.map +1 -0
  68. package/dist/esm/packages/DesignTimeProvider.d.ts +9 -0
  69. package/dist/esm/packages/DesignTimeProvider.d.ts.map +1 -0
  70. package/dist/esm/packages/DesignTimeProvider.js +20 -0
  71. package/dist/esm/packages/DesignTimeProvider.js.map +1 -0
  72. package/dist/esm/packages/PackageHostConfiguration.d.ts +8 -1
  73. package/dist/esm/packages/PackageHostConfiguration.d.ts.map +1 -1
  74. package/dist/esm/packages/PackageHostConfiguration.js +31 -3
  75. package/dist/esm/packages/PackageHostConfiguration.js.map +1 -1
  76. package/dist/esm/packages/index.d.ts +6 -0
  77. package/dist/esm/packages/index.d.ts.map +1 -1
  78. package/dist/esm/packages/index.js +6 -0
  79. package/dist/esm/packages/index.js.map +1 -1
  80. package/dist/esm/renderer/AbortableQueryRunner.d.ts +7 -0
  81. package/dist/esm/renderer/AbortableQueryRunner.d.ts.map +1 -0
  82. package/dist/esm/renderer/AbortableQueryRunner.js +24 -0
  83. package/dist/esm/renderer/AbortableQueryRunner.js.map +1 -0
  84. package/dist/esm/renderer/InteractiveComponent.d.ts.map +1 -1
  85. package/dist/esm/renderer/InteractiveComponent.js +31 -2
  86. package/dist/esm/renderer/InteractiveComponent.js.map +1 -1
  87. package/dist/esm/renderer/RenderBindingScopeContext.d.ts +14 -0
  88. package/dist/esm/renderer/RenderBindingScopeContext.d.ts.map +1 -0
  89. package/dist/esm/renderer/RenderBindingScopeContext.js +73 -0
  90. package/dist/esm/renderer/RenderBindingScopeContext.js.map +1 -0
  91. package/dist/esm/renderer/index.d.ts +2 -0
  92. package/dist/esm/renderer/index.d.ts.map +1 -1
  93. package/dist/esm/renderer/index.js +2 -0
  94. package/dist/esm/renderer/index.js.map +1 -1
  95. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  96. package/index.ts +1 -0
  97. package/navigation/DestinationResolution.ts +13 -0
  98. package/navigation/index.ts +5 -0
  99. package/navigation/resolveDestination.ts +50 -0
  100. package/package.json +5 -5
  101. package/packages/DesignTimeAction.ts +3 -4
  102. package/packages/DesignTimeBundle.ts +8 -5
  103. package/packages/DesignTimeComponentProps.ts +11 -0
  104. package/packages/DesignTimeContext.ts +32 -0
  105. package/packages/DesignTimePropertyDisplayProps.ts +14 -0
  106. package/packages/DesignTimePropertyEditorProps.ts +15 -0
  107. package/packages/DesignTimeProvider.tsx +25 -0
  108. package/packages/PackageHostConfiguration.ts +47 -5
  109. package/packages/index.ts +6 -0
  110. package/renderer/AbortableQueryRunner.ts +27 -0
  111. package/renderer/InteractiveComponent.tsx +27 -3
  112. package/renderer/RenderBindingScopeContext.tsx +73 -0
  113. package/renderer/index.ts +2 -0
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ import { DesignTimeContext } from './DesignTimeContext';
3
+ export interface DesignTimeProviderProps {
4
+ context: DesignTimeContext;
5
+ children: ReactNode;
6
+ }
7
+ export declare function DesignTimeProvider({ context, children }: DesignTimeProviderProps): import("react").JSX.Element;
8
+ export declare function useDesignTimeContext(): DesignTimeContext;
9
+ //# sourceMappingURL=DesignTimeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignTimeProvider.d.ts","sourceRoot":"","sources":["../../../packages/DesignTimeProvider.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACvB;AAKD,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,uBAAuB,+BAEhF;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAIxD"}
@@ -0,0 +1,20 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useContext, createContext } from 'react';
3
+
4
+ const Context = /*#__PURE__*/ createContext(undefined);
5
+ /**
6
+ * Makes the generic package-side design-time context available to nested package components.
7
+ */ function DesignTimeProvider({ context, children }) {
8
+ return /*#__PURE__*/ jsx(Context.Provider, {
9
+ value: context,
10
+ children: children
11
+ });
12
+ }
13
+ function useDesignTimeContext() {
14
+ const context = useContext(Context);
15
+ if (!context) throw new Error('No Scene design-time context is available.');
16
+ return context;
17
+ }
18
+
19
+ export { DesignTimeProvider, useDesignTimeContext };
20
+ //# sourceMappingURL=DesignTimeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignTimeProvider.js","sources":["../../../packages/DesignTimeProvider.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 { DesignTimeContext } from './DesignTimeContext';\n\nconst Context = createContext<DesignTimeContext | undefined>(undefined);\n\nexport interface DesignTimeProviderProps {\n context: DesignTimeContext;\n children: ReactNode;\n}\n\n/**\n * Makes the generic package-side design-time context available to nested package components.\n */\nexport function DesignTimeProvider({ context, children }: DesignTimeProviderProps) {\n return <Context.Provider value={context}>{children}</Context.Provider>;\n}\n\nexport function useDesignTimeContext(): DesignTimeContext {\n const context = useContext(Context);\n if (!context) throw new Error('No Scene design-time context is available.');\n return context;\n}\n"],"names":["Context","createContext","undefined","DesignTimeProvider","context","children","_jsx","Provider","value","useDesignTimeContext","useContext","Error"],"mappings":";;;AAMA,MAAMA,wBAAUC,aAAAA,CAA6CC,SAAAA,CAAAA;AAO7D;;AAEC,IACM,SAASC,kBAAAA,CAAmB,EAAEC,OAAO,EAAEC,QAAQ,EAA2B,EAAA;IAC7E,qBAAOC,GAAA,CAACN,QAAQO,QAAQ,EAAA;QAACC,KAAAA,EAAOJ,OAAAA;AAAUC,QAAAA,QAAAA,EAAAA;;AAC9C;AAEO,SAASI,oBAAAA,GAAAA;AACZ,IAAA,MAAML,UAAUM,UAAAA,CAAWV,OAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACI,OAAAA,EAAS,MAAM,IAAIO,KAAAA,CAAM,4CAAA,CAAA;IAC9B,OAAOP,OAAAA;AACX;;"}
@@ -1,4 +1,5 @@
1
- import { UiProfile } from '@cratis/scene.model';
1
+ import { DialogTemplate, Layout, ScreenTemplate, Theme, UiProfile } from '@cratis/scene.model';
2
+ import { IconAdapterRegistry } from '../icons/IconAdapterRegistry';
2
3
  import { ScenePackageBundle, mergePackageRegistries } from './ScenePackageBundle';
3
4
  export interface PackageHostPolicy {
4
5
  allowExecutableImports: boolean;
@@ -12,6 +13,12 @@ export interface PackageHostConfiguration {
12
13
  export interface ResolvedPackageHost {
13
14
  bundles: ScenePackageBundle[];
14
15
  components: ReturnType<typeof mergePackageRegistries>;
16
+ layouts: Layout[];
17
+ screenTemplates: ScreenTemplate[];
18
+ dialogTemplates: DialogTemplate[];
19
+ themes: Theme[];
20
+ icons: IconAdapterRegistry;
21
+ assets: string[];
15
22
  diagnostics: string[];
16
23
  }
17
24
  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,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,WAAW,iBAAiB;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;CAC/B;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,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAKD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,wBAAwB,GAAG,mBAAmB,CA6B/F"}
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;CAC/B;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,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAKD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,wBAAwB,GAAG,mBAAmB,CA+D/F"}
@@ -1,4 +1,6 @@
1
- import { mergePackageRegistries } from './ScenePackageBundle.js';
1
+ import { resolvePackageDependencies } from '@cratis/scene.engine';
2
+ import { createIconAdapterRegistry } from '../icons/IconAdapterRegistry.js';
3
+ import { validatePackageBundle, mergePackageRegistries } from './ScenePackageBundle.js';
2
4
 
3
5
  // Copyright (c) Cratis. All rights reserved.
4
6
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -6,21 +8,41 @@ import { mergePackageRegistries } from './ScenePackageBundle.js';
6
8
  * Resolves the approved package set a standalone or embedded React host uses.
7
9
  */ function resolvePackageHost(configuration) {
8
10
  const diagnostics = [];
11
+ const names = new Map();
12
+ for (const bundle of configuration.bundles){
13
+ names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);
14
+ }
15
+ for (const [name, count] of names){
16
+ if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);
17
+ }
9
18
  const byName = new Map(configuration.bundles.map((bundle)=>[
10
19
  bundle.manifest.name,
11
20
  bundle
12
21
  ]));
22
+ const selection = resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map((bundle)=>bundle.manifest));
23
+ for (const missing of selection.missing)diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);
24
+ for (const conflict of selection.versionConflicts){
25
+ diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);
26
+ }
27
+ for (const cycle of selection.cycles)diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);
13
28
  const bundles = [];
14
29
  const runtimeSingletons = new Map();
15
- for (const packageName of configuration.profile.packages){
30
+ const assets = [];
31
+ for (const packageName of selection.packages){
16
32
  const bundle = byName.get(packageName);
17
33
  if (!bundle) {
18
34
  diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);
19
35
  continue;
20
36
  }
21
- if (!configuration.policy.allowNetworkAssets && (bundle.manifest.assets ?? []).some((asset)=>/^https?:\/\//.test(asset))) {
37
+ diagnostics.push(...validatePackageBundle(bundle).map((problem)=>`${packageName}: ${problem}`));
38
+ if (!configuration.policy.allowExecutableImports && bundle.designTime) {
39
+ diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);
40
+ }
41
+ const packageAssets = bundle.manifest.assets ?? [];
42
+ if (!configuration.policy.allowNetworkAssets && packageAssets.some((asset)=>/^https?:\/\//.test(asset))) {
22
43
  diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);
23
44
  }
45
+ assets.push(...packageAssets);
24
46
  for (const dependency of bundle.manifest.runtimeSingletons ?? []){
25
47
  const owner = runtimeSingletons.get(dependency);
26
48
  if (owner && owner !== packageName) {
@@ -33,6 +55,12 @@ import { mergePackageRegistries } from './ScenePackageBundle.js';
33
55
  return {
34
56
  bundles,
35
57
  components: mergePackageRegistries(bundles),
58
+ layouts: bundles.flatMap((bundle)=>bundle.layouts ?? []),
59
+ screenTemplates: bundles.flatMap((bundle)=>bundle.screenTemplates ?? []),
60
+ dialogTemplates: bundles.flatMap((bundle)=>bundle.dialogTemplates ?? []),
61
+ themes: bundles.flatMap((bundle)=>bundle.themes ?? []),
62
+ icons: createIconAdapterRegistry(bundles.map((bundle)=>bundle.iconLibrary?.adapter).filter((adapter)=>adapter !== undefined)),
63
+ assets,
36
64
  diagnostics
37
65
  };
38
66
  }
@@ -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 { UiProfile } from '@cratis/scene.model';\nimport { ScenePackageBundle, mergePackageRegistries } 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 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 byName = new Map(configuration.bundles.map(bundle => [bundle.manifest.name, bundle]));\n const bundles: ScenePackageBundle[] = [];\n const runtimeSingletons = new Map<string, string>();\n\n for (const packageName of configuration.profile.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 if (!configuration.policy.allowNetworkAssets && (bundle.manifest.assets ?? []).some(asset => /^https?:\\/\\//.test(asset))) {\n diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);\n }\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 { bundles, components: mergePackageRegistries(bundles), diagnostics };\n}\n"],"names":["resolvePackageHost","configuration","diagnostics","byName","Map","bundles","map","bundle","manifest","name","runtimeSingletons","packageName","profile","packages","get","push","policy","allowNetworkAssets","assets","some","asset","test","dependency","owner","set","components","mergePackageRegistries"],"mappings":";;AAAA;AACA;AAsBA;;IAGO,SAASA,kBAAAA,CAAmBC,aAAuC,EAAA;AACtE,IAAA,MAAMC,cAAwB,EAAE;IAChC,MAAMC,MAAAA,GAAS,IAAIC,GAAAA,CAAIH,aAAAA,CAAcI,OAAO,CAACC,GAAG,CAACC,CAAAA,MAAAA,GAAU;YAACA,MAAAA,CAAOC,QAAQ,CAACC,IAAI;AAAEF,YAAAA;AAAO,SAAA,CAAA,CAAA;AACzF,IAAA,MAAMF,UAAgC,EAAE;AACxC,IAAA,MAAMK,oBAAoB,IAAIN,GAAAA,EAAAA;AAE9B,IAAA,KAAK,MAAMO,WAAAA,IAAeV,aAAAA,CAAcW,OAAO,CAACC,QAAQ,CAAE;QACtD,MAAMN,MAAAA,GAASJ,MAAAA,CAAOW,GAAG,CAACH,WAAAA,CAAAA;AAC1B,QAAA,IAAI,CAACJ,MAAAA,EAAQ;AACTL,YAAAA,WAAAA,CAAYa,IAAI,CAAC,CAAC,qBAAqB,EAAEJ,WAAAA,CAAY,8CAA8C,CAAC,CAAA;AACpG,YAAA;AACJ,QAAA;QAEA,IAAI,CAACV,cAAce,MAAM,CAACC,kBAAkB,IAAKV,CAAAA,MAAAA,CAAOC,QAAQ,CAACU,MAAM,IAAI,EAAE,EAAEC,IAAI,CAACC,CAAAA,KAAAA,GAAS,cAAA,CAAeC,IAAI,CAACD,KAAAA,CAAAA,CAAAA,EAAS;AACtHlB,YAAAA,WAAAA,CAAYa,IAAI,CAAC,CAAC,SAAS,EAAEJ,WAAAA,CAAY,uDAAuD,CAAC,CAAA;AACrG,QAAA;QAEA,KAAK,MAAMW,cAAcf,MAAAA,CAAOC,QAAQ,CAACE,iBAAiB,IAAI,EAAE,CAAE;YAC9D,MAAMa,KAAAA,GAAQb,iBAAAA,CAAkBI,GAAG,CAACQ,UAAAA,CAAAA;YACpC,IAAIC,KAAAA,IAASA,UAAUZ,WAAAA,EAAa;AAChCT,gBAAAA,WAAAA,CAAYa,IAAI,CAAC,CAAC,mBAAmB,EAAEO,UAAAA,CAAW,uBAAuB,EAAEC,KAAAA,CAAM,OAAO,EAAEZ,WAAAA,CAAY,CAAC,CAAC,CAAA;AAC5G,YAAA;YACAD,iBAAAA,CAAkBc,GAAG,CAACF,UAAAA,EAAYX,WAAAA,CAAAA;AACtC,QAAA;AAEAN,QAAAA,OAAAA,CAAQU,IAAI,CAACR,MAAAA,CAAAA;AACjB,IAAA;IAEA,OAAO;AAAEF,QAAAA,OAAAA;AAASoB,QAAAA,UAAAA,EAAYC,sBAAAA,CAAuBrB,OAAAA,CAAAA;AAAUH,QAAAA;AAAY,KAAA;AAC/E;;"}
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,5 +1,11 @@
1
1
  export * from './DesignTimeAction';
2
2
  export * from './DesignTimeBundle';
3
+ export * from './DesignTimeComponentProps';
4
+ export * from './DesignTimeContext';
5
+ export * from './DesignTimePropertyDisplayProps';
6
+ export * from './DesignTimePropertyEditorProps';
7
+ export * from './DesignTimeProvider';
8
+ export * from '../navigation';
3
9
  export * from './PackageHostConfiguration';
4
10
  export * from './ScenePackageBundle';
5
11
  export * from './ComponentsUiLibraryContract';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
@@ -1,5 +1,11 @@
1
1
  export * from './DesignTimeAction';
2
2
  export * from './DesignTimeBundle';
3
+ export * from './DesignTimeComponentProps';
4
+ export * from './DesignTimeContext';
5
+ export * from './DesignTimePropertyDisplayProps';
6
+ export * from './DesignTimePropertyEditorProps';
7
+ export * from './DesignTimeProvider';
8
+ export * from '../navigation';
3
9
  export * from './PackageHostConfiguration';
4
10
  export * from './ScenePackageBundle';
5
11
  export * from './ComponentsUiLibraryContract';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type QueryPerformer = (query: string, argumentsValue: unknown, signal: AbortSignal) => Promise<unknown>;
2
+ export declare class AbortableQueryRunner {
3
+ #private;
4
+ run(query: string, argumentsValue: unknown, performer: QueryPerformer): Promise<unknown | undefined>;
5
+ clear(): void;
6
+ }
7
+ //# sourceMappingURL=AbortableQueryRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbortableQueryRunner.d.ts","sourceRoot":"","sources":["../../../renderer/AbortableQueryRunner.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAK/G,qBAAa,oBAAoB;;IAIvB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAOzG;IAED,KAAK,IAAI,IAAI,CAIZ;CACJ"}
@@ -0,0 +1,24 @@
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
+ * Runs query bindings so a newer argument set aborts and ignores older work.
5
+ */ class AbortableQueryRunner {
6
+ #controller;
7
+ #generation = 0;
8
+ async run(query, argumentsValue, performer) {
9
+ this.#controller?.abort();
10
+ const controller = new AbortController();
11
+ const generation = ++this.#generation;
12
+ this.#controller = controller;
13
+ const result = await performer(query, argumentsValue, controller.signal);
14
+ return generation === this.#generation && !controller.signal.aborted ? result : undefined;
15
+ }
16
+ clear() {
17
+ this.#controller?.abort();
18
+ this.#generation++;
19
+ this.#controller = undefined;
20
+ }
21
+ }
22
+
23
+ export { AbortableQueryRunner };
24
+ //# sourceMappingURL=AbortableQueryRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbortableQueryRunner.js","sources":["../../../renderer/AbortableQueryRunner.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\nexport type QueryPerformer = (query: string, argumentsValue: unknown, signal: AbortSignal) => Promise<unknown>;\n\n/**\n * Runs query bindings so a newer argument set aborts and ignores older work.\n */\nexport class AbortableQueryRunner {\n #controller?: AbortController;\n #generation = 0;\n\n async run(query: string, argumentsValue: unknown, performer: QueryPerformer): Promise<unknown | undefined> {\n this.#controller?.abort();\n const controller = new AbortController();\n const generation = ++this.#generation;\n this.#controller = controller;\n const result = await performer(query, argumentsValue, controller.signal);\n return generation === this.#generation && !controller.signal.aborted ? result : undefined;\n }\n\n clear(): void {\n this.#controller?.abort();\n this.#generation++;\n this.#controller = undefined;\n }\n}\n"],"names":["AbortableQueryRunner","run","query","argumentsValue","performer","abort","controller","AbortController","generation","result","signal","aborted","undefined","clear"],"mappings":"AAAA;AACA;AAIA;;AAEC,IACM,MAAMA,oBAAAA,CAAAA;AACT,IAAA,WAAW;IACX,WAAW,GAAG,CAAA;AAEd,IAAA,MAAMC,IAAIC,KAAa,EAAEC,cAAuB,EAAEC,SAAyB,EAAgC;QACvG,IAAI,CAAC,WAAW,EAAEC,KAAAA,EAAAA;AAClB,QAAA,MAAMC,aAAa,IAAIC,eAAAA,EAAAA;AACvB,QAAA,MAAMC,UAAAA,GAAa,EAAE,IAAI,CAAC,WAAW;QACrC,IAAI,CAAC,WAAW,GAAGF,UAAAA;AACnB,QAAA,MAAMG,SAAS,MAAML,SAAAA,CAAUF,KAAAA,EAAOC,cAAAA,EAAgBG,WAAWI,MAAM,CAAA;AACvE,QAAA,OAAOF,UAAAA,KAAe,IAAI,CAAC,WAAW,IAAI,CAACF,UAAAA,CAAWI,MAAM,CAACC,OAAO,GAAGF,MAAAA,GAASG,SAAAA;AACpF,IAAA;IAEAC,KAAAA,GAAc;QACV,IAAI,CAAC,WAAW,EAAER,KAAAA,EAAAA;QAClB,IAAI,CAAC,WAAW,EAAA;QAChB,IAAI,CAAC,WAAW,GAAGO,SAAAA;AACvB,IAAA;AACJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"InteractiveComponent.d.ts","sourceRoot":"","sources":["../../../renderer/InteractiveComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,SAAS,EAA4B,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,yBAAyB;IACtC,SAAS,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACnD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;CACtC;AASD,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,yBAAyB,+GAK5F"}
1
+ {"version":3,"file":"InteractiveComponent.d.ts","sourceRoot":"","sources":["../../../renderer/InteractiveComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAqC,MAAM,OAAO,CAAC;AACpF,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,WAAW,yBAAyB;IACtC,SAAS,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACnD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;CACtC;AASD,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,yBAAyB,+GAU5F"}
@@ -1,8 +1,9 @@
1
- import { useEffect, createElement } from 'react';
1
+ import { useMemo, useEffect, createElement } from 'react';
2
2
  import 'react/jsx-runtime';
3
3
  import { useInteractions } from '../interactions/useInteractions.js';
4
4
  import '../interactions/NotificationHost.js';
5
5
  import { useBindingOutputs } from './BindingOutputContext.js';
6
+ import { useRenderBindingResolver } from './RenderBindingScopeContext.js';
6
7
 
7
8
  // Copyright (c) Cratis. All rights reserved.
8
9
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -15,16 +16,44 @@ import { useBindingOutputs } from './BindingOutputContext.js';
15
16
  */ function InteractiveComponent({ component, element, slots }) {
16
17
  const interactions = useInteractions(element.id, element.behaviors);
17
18
  const bindingOutputs = useBindingOutputs(element.id);
19
+ const resolveBinding = useRenderBindingResolver();
20
+ const resolvedElement = useMemo(()=>({
21
+ ...element,
22
+ properties: resolveProperties(element.properties, resolveBinding)
23
+ }), [
24
+ element,
25
+ resolveBinding
26
+ ]);
18
27
  useEffect(()=>()=>bindingOutputs.clearAll(), [
19
28
  element.id
20
29
  ]);
21
30
  return /*#__PURE__*/ createElement(component, {
22
- element,
31
+ element: resolvedElement,
23
32
  slots,
24
33
  interactions,
25
34
  bindingOutputs
26
35
  });
27
36
  }
37
+ function resolveProperties(properties, resolveBinding) {
38
+ return Object.fromEntries(Object.entries(properties).map(([name, value])=>[
39
+ name,
40
+ resolveValue(value, resolveBinding)
41
+ ]));
42
+ }
43
+ function resolveValue(value, resolveBinding) {
44
+ if (isBindingExpression(value)) return resolveBinding(value);
45
+ if (Array.isArray(value)) return value.map((entry)=>resolveValue(entry, resolveBinding));
46
+ if (value !== null && typeof value === 'object') {
47
+ return Object.fromEntries(Object.entries(value).map(([name, entry])=>[
48
+ name,
49
+ resolveValue(entry, resolveBinding)
50
+ ]));
51
+ }
52
+ return value;
53
+ }
54
+ function isBindingExpression(value) {
55
+ return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof value.path === 'string';
56
+ }
28
57
 
29
58
  export { InteractiveComponent };
30
59
  //# 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 } from 'react';\nimport { ExternalComponent } from '@cratis/scene.model';\nimport { useInteractions } from '../interactions';\nimport { useBindingOutputs } from './BindingOutputContext';\nimport { RegisteredComponentProps } from './ComponentRegistry';\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 useEffect(() => () => bindingOutputs.clearAll(), [element.id]);\n return createElement(component, { element, slots, interactions, bindingOutputs });\n}\n"],"names":["InteractiveComponent","component","element","slots","interactions","useInteractions","id","behaviors","bindingOutputs","useBindingOutputs","useEffect","clearAll","createElement"],"mappings":";;;;;;AAAA;AACA;AAcA;;;;;;IAOO,SAASA,oBAAAA,CAAqB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,KAAK,EAA6B,EAAA;AACzF,IAAA,MAAMC,eAAeC,eAAAA,CAAgBH,OAAAA,CAAQI,EAAE,EAAEJ,QAAQK,SAAS,CAAA;IAClE,MAAMC,cAAAA,GAAiBC,iBAAAA,CAAkBP,OAAAA,CAAQI,EAAE,CAAA;AACnDI,IAAAA,SAAAA,CAAU,IAAM,IAAMF,cAAAA,CAAeG,QAAQ,EAAA,EAAI;AAACT,QAAAA,OAAAA,CAAQI;AAAG,KAAA,CAAA;AAC7D,IAAA,qBAAOM,cAAcX,SAAAA,EAAW;AAAEC,QAAAA,OAAAA;AAASC,QAAAA,KAAAA;AAAOC,QAAAA,YAAAA;AAAcI,QAAAA;AAAe,KAAA,CAAA;AACnF;;"}
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,eAAAA,CAAgBH,OAAAA,CAAQI,EAAE,EAAEJ,QAAQK,SAAS,CAAA;IAClE,MAAMC,cAAAA,GAAiBC,iBAAAA,CAAkBP,OAAAA,CAAQI,EAAE,CAAA;AACnD,IAAA,MAAMI,cAAAA,GAAiBC,wBAAAA,EAAAA;IACvB,MAAMC,eAAAA,GAAkBC,OAAAA,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,SAAAA,CAAU,IAAM,IAAMR,cAAAA,CAAeS,QAAQ,EAAA,EAAI;AAACf,QAAAA,OAAAA,CAAQI;AAAG,KAAA,CAAA;AAC7D,IAAA,qBAAOY,cAAcjB,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,CAACJ,KAAAA,CAAAA,EAAQ,OAAOA,KAAAA,CAAMF,GAAG,CAACO,CAAAA,KAAAA,GAASJ,YAAAA,CAAaI,KAAAA,EAAOnB,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,EAAMM,MAAM,GAAK;AAACN,gBAAAA,IAAAA;AAAME,gBAAAA,YAAAA,CAAaI,KAAAA,EAAOnB,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,CAACG,KAAAA,CAAMC,OAAO,CAACJ,KAAAA,CAAAA,IAAU,OAAO,KAACA,CAAkCM,IAAI,KAAK,QAAA;AACtI;;"}
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ import { BindingResolver, BindingScope } from '@cratis/scene.engine';
3
+ export interface RenderBindingScopeProviderProps {
4
+ children: ReactNode;
5
+ dataContext?: unknown;
6
+ queryResults?: Record<string, unknown>;
7
+ componentOutputs?: Record<string, Record<string, unknown>>;
8
+ resolveBinding?: BindingResolver;
9
+ onComponentOutputsChanged?: (outputs: Record<string, Record<string, unknown>>) => void;
10
+ }
11
+ export declare function RenderBindingScopeProvider(props: RenderBindingScopeProviderProps): import("react").JSX.Element;
12
+ export declare function useRenderBindingResolver(): BindingResolver;
13
+ export declare function useRenderBindingScope(): BindingScope;
14
+ //# sourceMappingURL=RenderBindingScopeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderBindingScopeContext.d.ts","sourceRoot":"","sources":["../../../renderer/RenderBindingScopeContext.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA2D,MAAM,OAAO,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,YAAY,EAA4B,MAAM,sBAAsB,CAAC;AAW/F,MAAM,WAAW,+BAA+B;IAC5C,QAAQ,EAAE,SAAS,CAAC;IACpB,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;IAC3D,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CAC1F;AAKD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,+BAA+B,+BAShF;AA4BD,wBAAgB,wBAAwB,IAAI,eAAe,CAI1D;AAED,wBAAgB,qBAAqB,IAAI,YAAY,CAEpD"}
@@ -0,0 +1,73 @@
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
+ import { useContext, createContext, useRef, useMemo, useCallback } from 'react';
3
+ import { resolveBindingExpression } from '@cratis/scene.engine';
4
+ import { BindingNullBehavior } from '@cratis/scene.model';
5
+ import { BindingOutputProvider, useBindingOutputScope } from './BindingOutputContext.js';
6
+
7
+ const Context = /*#__PURE__*/ createContext(undefined);
8
+ /**
9
+ * Provides the inherited reactive binding scope for a rendered Scene tree.
10
+ */ function RenderBindingScopeProvider(props) {
11
+ const current = useContext(Context);
12
+ if (current) return /*#__PURE__*/ jsx(Fragment, {
13
+ children: props.children
14
+ });
15
+ return /*#__PURE__*/ jsx(BindingOutputProvider, {
16
+ onOutputsChanged: props.onComponentOutputsChanged,
17
+ children: /*#__PURE__*/ jsx(RenderBindingScopeInner, {
18
+ ...props
19
+ })
20
+ });
21
+ }
22
+ function RenderBindingScopeInner({ children, dataContext, queryResults, componentOutputs, resolveBinding }) {
23
+ const outputs = useBindingOutputScope();
24
+ const previousValues = useRef(new Map());
25
+ const scope = useMemo(()=>({
26
+ dataContext,
27
+ queryResults,
28
+ componentOutputs: {
29
+ ...componentOutputs ?? {},
30
+ ...outputs
31
+ }
32
+ }), [
33
+ componentOutputs,
34
+ dataContext,
35
+ outputs,
36
+ queryResults
37
+ ]);
38
+ const resolver = useCallback((binding)=>{
39
+ if (!binding.kind && resolveBinding) return resolveBinding(binding);
40
+ const key = JSON.stringify(binding);
41
+ const value = resolveBindingExpression(binding, scope);
42
+ if (binding.nullBehavior === BindingNullBehavior.Preserve && value === undefined) {
43
+ return previousValues.current.get(key);
44
+ }
45
+ if (value !== undefined) previousValues.current.set(key, value);
46
+ return value;
47
+ }, [
48
+ resolveBinding,
49
+ scope
50
+ ]);
51
+ const value = useMemo(()=>({
52
+ resolveBinding: resolver,
53
+ scope
54
+ }), [
55
+ resolver,
56
+ scope
57
+ ]);
58
+ return /*#__PURE__*/ jsx(Context.Provider, {
59
+ value: value,
60
+ children: children
61
+ });
62
+ }
63
+ function useRenderBindingResolver() {
64
+ const context = useContext(Context);
65
+ if (!context) throw new Error('No Scene render binding scope is available.');
66
+ return context.resolveBinding;
67
+ }
68
+ function useRenderBindingScope() {
69
+ return useContext(Context)?.scope ?? {};
70
+ }
71
+
72
+ export { RenderBindingScopeProvider, useRenderBindingResolver, useRenderBindingScope };
73
+ //# sourceMappingURL=RenderBindingScopeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderBindingScopeContext.js","sources":["../../../renderer/RenderBindingScopeContext.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, useCallback, useContext, useMemo, useRef } from 'react';\nimport { BindingResolver, BindingScope, resolveBindingExpression } from '@cratis/scene.engine';\nimport { BindingExpression, BindingNullBehavior } from '@cratis/scene.model';\nimport { BindingOutputProvider, useBindingOutputScope } from './BindingOutputContext';\n\ninterface RenderBindingScopeValue {\n resolveBinding: BindingResolver;\n scope: BindingScope;\n}\n\nconst Context = createContext<RenderBindingScopeValue | undefined>(undefined);\n\nexport interface RenderBindingScopeProviderProps {\n children: ReactNode;\n dataContext?: unknown;\n queryResults?: Record<string, unknown>;\n componentOutputs?: Record<string, Record<string, unknown>>;\n resolveBinding?: BindingResolver;\n onComponentOutputsChanged?: (outputs: Record<string, Record<string, unknown>>) => void;\n}\n\n/**\n * Provides the inherited reactive binding scope for a rendered Scene tree.\n */\nexport function RenderBindingScopeProvider(props: RenderBindingScopeProviderProps) {\n const current = useContext(Context);\n if (current) return <>{props.children}</>;\n\n return (\n <BindingOutputProvider onOutputsChanged={props.onComponentOutputsChanged}>\n <RenderBindingScopeInner {...props} />\n </BindingOutputProvider>\n );\n}\n\nfunction RenderBindingScopeInner({ children, dataContext, queryResults, componentOutputs, resolveBinding }: RenderBindingScopeProviderProps) {\n const outputs = useBindingOutputScope();\n const previousValues = useRef(new Map<string, unknown>());\n const scope = useMemo<BindingScope>(() => ({\n dataContext,\n queryResults,\n componentOutputs: { ...(componentOutputs ?? {}), ...outputs },\n }), [componentOutputs, dataContext, outputs, queryResults]);\n\n const resolver = useCallback<BindingResolver>((binding: BindingExpression) => {\n if (!binding.kind && resolveBinding) return resolveBinding(binding);\n\n const key = JSON.stringify(binding);\n const value = resolveBindingExpression(binding, scope);\n if (binding.nullBehavior === BindingNullBehavior.Preserve && value === undefined) {\n return previousValues.current.get(key);\n }\n\n if (value !== undefined) previousValues.current.set(key, value);\n return value;\n }, [resolveBinding, scope]);\n\n const value = useMemo<RenderBindingScopeValue>(() => ({ resolveBinding: resolver, scope }), [resolver, scope]);\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\nexport function useRenderBindingResolver(): BindingResolver {\n const context = useContext(Context);\n if (!context) throw new Error('No Scene render binding scope is available.');\n return context.resolveBinding;\n}\n\nexport function useRenderBindingScope(): BindingScope {\n return useContext(Context)?.scope ?? {};\n}\n"],"names":["Context","createContext","undefined","RenderBindingScopeProvider","props","current","useContext","_jsx","_Fragment","children","BindingOutputProvider","onOutputsChanged","onComponentOutputsChanged","RenderBindingScopeInner","dataContext","queryResults","componentOutputs","resolveBinding","outputs","useBindingOutputScope","previousValues","useRef","Map","scope","useMemo","resolver","useCallback","binding","kind","key","JSON","stringify","value","resolveBindingExpression","nullBehavior","BindingNullBehavior","Preserve","get","set","Provider","useRenderBindingResolver","context","Error","useRenderBindingScope"],"mappings":";;;;;;AAaA,MAAMA,wBAAUC,aAAAA,CAAmDC,SAAAA,CAAAA;AAWnE;;IAGO,SAASC,0BAAAA,CAA2BC,KAAsC,EAAA;AAC7E,IAAA,MAAMC,UAAUC,UAAAA,CAAWN,OAAAA,CAAAA;AAC3B,IAAA,IAAIK,SAAS,qBAAOE,GAAA,CAAAC,QAAA,EAAA;AAAGJ,QAAAA,QAAAA,EAAAA,KAAAA,CAAMK;;AAE7B,IAAA,qBACIF,GAAA,CAACG,qBAAAA,EAAAA;AAAsBC,QAAAA,gBAAAA,EAAkBP,MAAMQ,yBAAyB;AACpE,QAAA,QAAA,gBAAAL,GAAA,CAACM,uBAAAA,EAAAA;AAAyB,YAAA,GAAGT;;;AAGzC;AAEA,SAASS,uBAAAA,CAAwB,EAAEJ,QAAQ,EAAEK,WAAW,EAAEC,YAAY,EAAEC,gBAAgB,EAAEC,cAAc,EAAmC,EAAA;AACvI,IAAA,MAAMC,OAAAA,GAAUC,qBAAAA,EAAAA;IAChB,MAAMC,cAAAA,GAAiBC,OAAO,IAAIC,GAAAA,EAAAA,CAAAA;IAClC,MAAMC,KAAAA,GAAQC,OAAAA,CAAsB,KAAO;AACvCV,YAAAA,WAAAA;AACAC,YAAAA,YAAAA;YACAC,gBAAAA,EAAkB;gBAAE,GAAIA,gBAAAA,IAAoB,EAAE;AAAG,gBAAA,GAAGE;AAAQ;AAChE,SAAA,CAAA,EAAI;AAACF,QAAAA,gBAAAA;AAAkBF,QAAAA,WAAAA;AAAaI,QAAAA,OAAAA;AAASH,QAAAA;AAAa,KAAA,CAAA;IAE1D,MAAMU,QAAAA,GAAWC,YAA6B,CAACC,OAAAA,GAAAA;AAC3C,QAAA,IAAI,CAACA,OAAAA,CAAQC,IAAI,IAAIX,cAAAA,EAAgB,OAAOA,cAAAA,CAAeU,OAAAA,CAAAA;QAE3D,MAAME,GAAAA,GAAMC,IAAAA,CAAKC,SAAS,CAACJ,OAAAA,CAAAA;QAC3B,MAAMK,KAAAA,GAAQC,yBAAyBN,OAAAA,EAASJ,KAAAA,CAAAA;AAChD,QAAA,IAAII,QAAQO,YAAY,KAAKC,oBAAoBC,QAAQ,IAAIJ,UAAU9B,SAAAA,EAAW;AAC9E,YAAA,OAAOkB,cAAAA,CAAef,OAAO,CAACgC,GAAG,CAACR,GAAAA,CAAAA;AACtC,QAAA;AAEA,QAAA,IAAIG,UAAU9B,SAAAA,EAAWkB,cAAAA,CAAef,OAAO,CAACiC,GAAG,CAACT,GAAAA,EAAKG,KAAAA,CAAAA;QACzD,OAAOA,KAAAA;IACX,CAAA,EAAG;AAACf,QAAAA,cAAAA;AAAgBM,QAAAA;AAAM,KAAA,CAAA;IAE1B,MAAMS,KAAAA,GAAQR,OAAAA,CAAiC,KAAO;YAAEP,cAAAA,EAAgBQ,QAAAA;AAAUF,YAAAA;AAAM,SAAA,CAAA,EAAI;AAACE,QAAAA,QAAAA;AAAUF,QAAAA;AAAM,KAAA,CAAA;IAC7G,qBAAOhB,GAAA,CAACP,QAAQuC,QAAQ,EAAA;QAACP,KAAAA,EAAOA,KAAAA;AAAQvB,QAAAA,QAAAA,EAAAA;;AAC5C;AAEO,SAAS+B,wBAAAA,GAAAA;AACZ,IAAA,MAAMC,UAAUnC,UAAAA,CAAWN,OAAAA,CAAAA;AAC3B,IAAA,IAAI,CAACyC,OAAAA,EAAS,MAAM,IAAIC,KAAAA,CAAM,6CAAA,CAAA;AAC9B,IAAA,OAAOD,QAAQxB,cAAc;AACjC;AAEO,SAAS0B,qBAAAA,GAAAA;IACZ,OAAOrC,UAAAA,CAAWN,OAAAA,CAAAA,EAAUuB,KAAAA,IAAS,EAAC;AAC1C;;"}
@@ -1,5 +1,7 @@
1
+ export * from './AbortableQueryRunner';
1
2
  export * from './BindingOutputContext';
2
3
  export * from './ComponentRegistry';
4
+ export * from './RenderBindingScopeContext';
3
5
  export * from './UnresolvedComponent';
4
6
  export * from './createReactRenderer';
5
7
  export * from './InteractiveComponent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../renderer/index.ts"],"names":[],"mappings":"AAGA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../renderer/index.ts"],"names":[],"mappings":"AAGA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
@@ -1,5 +1,7 @@
1
+ export * from './AbortableQueryRunner';
1
2
  export * from './BindingOutputContext';
2
3
  export * from './ComponentRegistry';
4
+ export * from './RenderBindingScopeContext';
3
5
  export * from './UnresolvedComponent';
4
6
  export * from './createReactRenderer';
5
7
  export * from './InteractiveComponent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../renderer/index.ts"],"names":[],"mappings":"AAGA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../renderer/index.ts"],"names":[],"mappings":"AAGA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}