@cratis/scene.react 4.9.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) 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 +6 -0
  5. package/dist/cjs/core/coreComponents.js.map +1 -1
  6. package/dist/cjs/core/coreDescriptors.js +5 -0
  7. package/dist/cjs/core/coreDescriptors.js.map +1 -1
  8. package/dist/cjs/index.js +28 -0
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/navigation/SceneNavigationContext.js +21 -0
  11. package/dist/cjs/navigation/SceneNavigationContext.js.map +1 -0
  12. package/dist/cjs/navigation/SceneNavigationHost.js +82 -0
  13. package/dist/cjs/navigation/SceneNavigationHost.js.map +1 -0
  14. package/dist/cjs/navigation/resolveDestination.js +54 -0
  15. package/dist/cjs/navigation/resolveDestination.js.map +1 -0
  16. package/dist/cjs/packages/DesignTimeBundle.js.map +1 -1
  17. package/dist/cjs/packages/DesignTimeProvider.js +23 -0
  18. package/dist/cjs/packages/DesignTimeProvider.js.map +1 -0
  19. package/dist/cjs/packages/EmbeddedPackageHost.js +15 -0
  20. package/dist/cjs/packages/EmbeddedPackageHost.js.map +1 -0
  21. package/dist/cjs/packages/PackageHostAssets.js +30 -0
  22. package/dist/cjs/packages/PackageHostAssets.js.map +1 -0
  23. package/dist/cjs/packages/PackageHostConfiguration.js +40 -4
  24. package/dist/cjs/packages/PackageHostConfiguration.js.map +1 -1
  25. package/dist/cjs/packages/PackageHostRenderMode.js +15 -0
  26. package/dist/cjs/packages/PackageHostRenderMode.js.map +1 -0
  27. package/dist/cjs/packages/PackageHostView.js +53 -0
  28. package/dist/cjs/packages/PackageHostView.js.map +1 -0
  29. package/dist/cjs/packages/StandalonePackageHost.js +15 -0
  30. package/dist/cjs/packages/StandalonePackageHost.js.map +1 -0
  31. package/dist/cjs/packages/WebViewPackageHost.js +15 -0
  32. package/dist/cjs/packages/WebViewPackageHost.js.map +1 -0
  33. package/dist/cjs/renderer/AbortableQueryRunner.js +26 -0
  34. package/dist/cjs/renderer/AbortableQueryRunner.js.map +1 -0
  35. package/dist/cjs/renderer/InteractiveComponent.js +34 -1
  36. package/dist/cjs/renderer/InteractiveComponent.js.map +1 -1
  37. package/dist/cjs/renderer/RenderBindingScopeContext.js +77 -0
  38. package/dist/cjs/renderer/RenderBindingScopeContext.js.map +1 -0
  39. package/dist/esm/SceneElementView.d.ts +5 -2
  40. package/dist/esm/SceneElementView.d.ts.map +1 -1
  41. package/dist/esm/SceneElementView.js +22 -9
  42. package/dist/esm/SceneElementView.js.map +1 -1
  43. package/dist/esm/core/coreComponents.js +6 -0
  44. package/dist/esm/core/coreComponents.js.map +1 -1
  45. package/dist/esm/core/coreDescriptors.js +5 -0
  46. package/dist/esm/core/coreDescriptors.js.map +1 -1
  47. package/dist/esm/index.d.ts +1 -0
  48. package/dist/esm/index.d.ts.map +1 -1
  49. package/dist/esm/index.js +12 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/navigation/DestinationResolution.d.ts +10 -0
  52. package/dist/esm/navigation/DestinationResolution.d.ts.map +1 -0
  53. package/dist/esm/navigation/DestinationResolution.js +2 -0
  54. package/dist/esm/navigation/DestinationResolution.js.map +1 -0
  55. package/dist/esm/navigation/SceneNavigationContext.d.ts +20 -0
  56. package/dist/esm/navigation/SceneNavigationContext.d.ts.map +1 -0
  57. package/dist/esm/navigation/SceneNavigationContext.js +18 -0
  58. package/dist/esm/navigation/SceneNavigationContext.js.map +1 -0
  59. package/dist/esm/navigation/SceneNavigationHost.d.ts +12 -0
  60. package/dist/esm/navigation/SceneNavigationHost.d.ts.map +1 -0
  61. package/dist/esm/navigation/SceneNavigationHost.js +80 -0
  62. package/dist/esm/navigation/SceneNavigationHost.js.map +1 -0
  63. package/dist/esm/navigation/index.d.ts +5 -0
  64. package/dist/esm/navigation/index.d.ts.map +1 -0
  65. package/dist/esm/navigation/index.js +5 -0
  66. package/dist/esm/navigation/index.js.map +1 -0
  67. package/dist/esm/navigation/resolveDestination.d.ts +5 -0
  68. package/dist/esm/navigation/resolveDestination.d.ts.map +1 -0
  69. package/dist/esm/navigation/resolveDestination.js +52 -0
  70. package/dist/esm/navigation/resolveDestination.js.map +1 -0
  71. package/dist/esm/packages/DesignTimeAction.d.ts +3 -4
  72. package/dist/esm/packages/DesignTimeAction.d.ts.map +1 -1
  73. package/dist/esm/packages/DesignTimeBundle.d.ts +8 -11
  74. package/dist/esm/packages/DesignTimeBundle.d.ts.map +1 -1
  75. package/dist/esm/packages/DesignTimeBundle.js.map +1 -1
  76. package/dist/esm/packages/DesignTimeComponentProps.d.ts +5 -0
  77. package/dist/esm/packages/DesignTimeComponentProps.d.ts.map +1 -0
  78. package/dist/esm/packages/DesignTimeComponentProps.js +2 -0
  79. package/dist/esm/packages/DesignTimeComponentProps.js.map +1 -0
  80. package/dist/esm/packages/DesignTimeContext.d.ts +18 -0
  81. package/dist/esm/packages/DesignTimeContext.d.ts.map +1 -0
  82. package/dist/esm/packages/DesignTimeContext.js +2 -0
  83. package/dist/esm/packages/DesignTimeContext.js.map +1 -0
  84. package/dist/esm/packages/DesignTimePropertyDisplayProps.d.ts +8 -0
  85. package/dist/esm/packages/DesignTimePropertyDisplayProps.d.ts.map +1 -0
  86. package/dist/esm/packages/DesignTimePropertyDisplayProps.js +2 -0
  87. package/dist/esm/packages/DesignTimePropertyDisplayProps.js.map +1 -0
  88. package/dist/esm/packages/DesignTimePropertyEditorProps.d.ts +9 -0
  89. package/dist/esm/packages/DesignTimePropertyEditorProps.d.ts.map +1 -0
  90. package/dist/esm/packages/DesignTimePropertyEditorProps.js +2 -0
  91. package/dist/esm/packages/DesignTimePropertyEditorProps.js.map +1 -0
  92. package/dist/esm/packages/DesignTimeProvider.d.ts +9 -0
  93. package/dist/esm/packages/DesignTimeProvider.d.ts.map +1 -0
  94. package/dist/esm/packages/DesignTimeProvider.js +20 -0
  95. package/dist/esm/packages/DesignTimeProvider.js.map +1 -0
  96. package/dist/esm/packages/EmbeddedPackageHost.d.ts +3 -0
  97. package/dist/esm/packages/EmbeddedPackageHost.d.ts.map +1 -0
  98. package/dist/esm/packages/EmbeddedPackageHost.js +13 -0
  99. package/dist/esm/packages/EmbeddedPackageHost.js.map +1 -0
  100. package/dist/esm/packages/PackageHostAssets.d.ts +6 -0
  101. package/dist/esm/packages/PackageHostAssets.d.ts.map +1 -0
  102. package/dist/esm/packages/PackageHostAssets.js +28 -0
  103. package/dist/esm/packages/PackageHostAssets.js.map +1 -0
  104. package/dist/esm/packages/PackageHostConfiguration.d.ts +11 -1
  105. package/dist/esm/packages/PackageHostConfiguration.d.ts.map +1 -1
  106. package/dist/esm/packages/PackageHostConfiguration.js +41 -5
  107. package/dist/esm/packages/PackageHostConfiguration.js.map +1 -1
  108. package/dist/esm/packages/PackageHostRenderMode.d.ts +6 -0
  109. package/dist/esm/packages/PackageHostRenderMode.d.ts.map +1 -0
  110. package/dist/esm/packages/PackageHostRenderMode.js +13 -0
  111. package/dist/esm/packages/PackageHostRenderMode.js.map +1 -0
  112. package/dist/esm/packages/PackageHostView.d.ts +13 -0
  113. package/dist/esm/packages/PackageHostView.d.ts.map +1 -0
  114. package/dist/esm/packages/PackageHostView.js +51 -0
  115. package/dist/esm/packages/PackageHostView.js.map +1 -0
  116. package/dist/esm/packages/StandalonePackageHost.d.ts +3 -0
  117. package/dist/esm/packages/StandalonePackageHost.d.ts.map +1 -0
  118. package/dist/esm/packages/StandalonePackageHost.js +13 -0
  119. package/dist/esm/packages/StandalonePackageHost.js.map +1 -0
  120. package/dist/esm/packages/WebViewPackageHost.d.ts +3 -0
  121. package/dist/esm/packages/WebViewPackageHost.d.ts.map +1 -0
  122. package/dist/esm/packages/WebViewPackageHost.js +13 -0
  123. package/dist/esm/packages/WebViewPackageHost.js.map +1 -0
  124. package/dist/esm/packages/index.d.ts +12 -0
  125. package/dist/esm/packages/index.d.ts.map +1 -1
  126. package/dist/esm/packages/index.js +12 -0
  127. package/dist/esm/packages/index.js.map +1 -1
  128. package/dist/esm/renderer/AbortableQueryRunner.d.ts +7 -0
  129. package/dist/esm/renderer/AbortableQueryRunner.d.ts.map +1 -0
  130. package/dist/esm/renderer/AbortableQueryRunner.js +24 -0
  131. package/dist/esm/renderer/AbortableQueryRunner.js.map +1 -0
  132. package/dist/esm/renderer/InteractiveComponent.d.ts.map +1 -1
  133. package/dist/esm/renderer/InteractiveComponent.js +35 -2
  134. package/dist/esm/renderer/InteractiveComponent.js.map +1 -1
  135. package/dist/esm/renderer/RenderBindingScopeContext.d.ts +14 -0
  136. package/dist/esm/renderer/RenderBindingScopeContext.d.ts.map +1 -0
  137. package/dist/esm/renderer/RenderBindingScopeContext.js +73 -0
  138. package/dist/esm/renderer/RenderBindingScopeContext.js.map +1 -0
  139. package/dist/esm/renderer/index.d.ts +2 -0
  140. package/dist/esm/renderer/index.d.ts.map +1 -1
  141. package/dist/esm/renderer/index.js +2 -0
  142. package/dist/esm/renderer/index.js.map +1 -1
  143. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  144. package/index.ts +1 -0
  145. package/navigation/DestinationResolution.ts +13 -0
  146. package/navigation/SceneNavigationContext.tsx +34 -0
  147. package/navigation/SceneNavigationHost.tsx +67 -0
  148. package/navigation/index.ts +7 -0
  149. package/navigation/resolveDestination.ts +50 -0
  150. package/package.json +5 -5
  151. package/packages/DesignTimeAction.ts +3 -4
  152. package/packages/DesignTimeBundle.ts +8 -5
  153. package/packages/DesignTimeComponentProps.ts +11 -0
  154. package/packages/DesignTimeContext.ts +32 -0
  155. package/packages/DesignTimePropertyDisplayProps.ts +14 -0
  156. package/packages/DesignTimePropertyEditorProps.ts +15 -0
  157. package/packages/DesignTimeProvider.tsx +25 -0
  158. package/packages/EmbeddedPackageHost.tsx +10 -0
  159. package/packages/PackageHostAssets.tsx +18 -0
  160. package/packages/PackageHostConfiguration.ts +62 -5
  161. package/packages/PackageHostRenderMode.ts +11 -0
  162. package/packages/PackageHostView.tsx +43 -0
  163. package/packages/StandalonePackageHost.tsx +10 -0
  164. package/packages/WebViewPackageHost.tsx +10 -0
  165. package/packages/index.ts +12 -0
  166. package/renderer/AbortableQueryRunner.ts +27 -0
  167. package/renderer/InteractiveComponent.tsx +32 -3
  168. package/renderer/RenderBindingScopeContext.tsx +73 -0
  169. package/renderer/index.ts +2 -0
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var scene_engine = require('@cratis/scene.engine');
4
+ var IconAdapterRegistry = require('../icons/IconAdapterRegistry.js');
3
5
  var ScenePackageBundle = require('./ScenePackageBundle.js');
4
6
 
5
7
  // Copyright (c) Cratis. All rights reserved.
@@ -8,21 +10,41 @@ var ScenePackageBundle = require('./ScenePackageBundle.js');
8
10
  * Resolves the approved package set a standalone or embedded React host uses.
9
11
  */ function resolvePackageHost(configuration) {
10
12
  const diagnostics = [];
13
+ const names = new Map();
14
+ for (const bundle of configuration.bundles){
15
+ names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);
16
+ }
17
+ for (const [name, count] of names){
18
+ if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);
19
+ }
11
20
  const byName = new Map(configuration.bundles.map((bundle)=>[
12
21
  bundle.manifest.name,
13
22
  bundle
14
23
  ]));
24
+ const selection = scene_engine.resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map((bundle)=>bundle.manifest));
25
+ for (const missing of selection.missing)diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);
26
+ for (const conflict of selection.versionConflicts){
27
+ diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);
28
+ }
29
+ for (const cycle of selection.cycles)diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);
15
30
  const bundles = [];
16
31
  const runtimeSingletons = new Map();
17
- for (const packageName of configuration.profile.packages){
32
+ const assets = [];
33
+ for (const packageName of selection.packages){
18
34
  const bundle = byName.get(packageName);
19
35
  if (!bundle) {
20
36
  diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);
21
37
  continue;
22
38
  }
23
- if (!configuration.policy.allowNetworkAssets && (bundle.manifest.assets ?? []).some((asset)=>/^https?:\/\//.test(asset))) {
39
+ diagnostics.push(...ScenePackageBundle.validatePackageBundle(bundle).map((problem)=>`${packageName}: ${problem}`));
40
+ if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {
41
+ diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);
42
+ }
43
+ const packageAssets = bundle.manifest.assets ?? [];
44
+ if (!configuration.policy.allowNetworkAssets && packageAssets.some((asset)=>/^https?:\/\//.test(asset))) {
24
45
  diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);
25
46
  }
47
+ assets.push(...packageAssets);
26
48
  for (const dependency of bundle.manifest.runtimeSingletons ?? []){
27
49
  const owner = runtimeSingletons.get(dependency);
28
50
  if (owner && owner !== packageName) {
@@ -32,12 +54,26 @@ var ScenePackageBundle = require('./ScenePackageBundle.js');
32
54
  }
33
55
  bundles.push(bundle);
34
56
  }
57
+ const blocked = diagnostics.length > 0;
58
+ const approved = blocked ? [] : bundles;
59
+ const approvedAssets = blocked ? [] : assets;
35
60
  return {
36
- bundles,
37
- components: ScenePackageBundle.mergePackageRegistries(bundles),
61
+ bundles: approved,
62
+ components: ScenePackageBundle.mergePackageRegistries(approved),
63
+ layouts: approved.flatMap((bundle)=>bundle.layouts ?? []),
64
+ screenTemplates: approved.flatMap((bundle)=>bundle.screenTemplates ?? []),
65
+ dialogTemplates: approved.flatMap((bundle)=>bundle.dialogTemplates ?? []),
66
+ themes: approved.flatMap((bundle)=>bundle.themes ?? []),
67
+ icons: IconAdapterRegistry.createIconAdapterRegistry(approved.map((bundle)=>bundle.iconLibrary?.adapter).filter((adapter)=>adapter !== undefined)),
68
+ assets: approvedAssets,
69
+ fonts: approvedAssets.filter(isFontAsset),
70
+ blocked,
38
71
  diagnostics
39
72
  };
40
73
  }
74
+ function isFontAsset(asset) {
75
+ return /\.(woff2?|otf|ttf)(\?|$)/.test(asset) || asset.includes('/fonts/');
76
+ }
41
77
 
42
78
  exports.resolvePackageHost = resolvePackageHost;
43
79
  //# sourceMappingURL=PackageHostConfiguration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackageHostConfiguration.js","sources":["../../../packages/PackageHostConfiguration.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { 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,yCAAAA,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 /** Whether this host is resolving optional design-time bundles in addition to runtime contributions. */\n loadDesignTime?: boolean;\n}\n\nexport interface PackageHostConfiguration {\n bundles: ScenePackageBundle[];\n profile: UiProfile;\n policy: PackageHostPolicy;\n}\n\nexport interface ResolvedPackageHost {\n bundles: ScenePackageBundle[];\n components: ReturnType<typeof mergePackageRegistries>;\n layouts: Layout[];\n screenTemplates: ScreenTemplate[];\n dialogTemplates: DialogTemplate[];\n themes: Theme[];\n icons: IconAdapterRegistry;\n assets: string[];\n fonts: string[];\n blocked: boolean;\n diagnostics: string[];\n}\n\n/**\n * Resolves the approved package set a standalone or embedded React host uses.\n */\nexport function resolvePackageHost(configuration: PackageHostConfiguration): ResolvedPackageHost {\n const diagnostics: string[] = [];\n const names = new Map<string, number>();\n for (const bundle of configuration.bundles) {\n names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);\n }\n\n for (const [name, count] of names) {\n if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);\n }\n\n const byName = new Map(configuration.bundles.map(bundle => [bundle.manifest.name, bundle]));\n const selection = resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map(bundle => bundle.manifest));\n for (const missing of selection.missing) diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);\n for (const conflict of selection.versionConflicts) {\n diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);\n }\n for (const cycle of selection.cycles) diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);\n\n const bundles: ScenePackageBundle[] = [];\n const runtimeSingletons = new Map<string, string>();\n const assets: string[] = [];\n\n for (const packageName of selection.packages) {\n const bundle = byName.get(packageName);\n if (!bundle) {\n diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);\n continue;\n }\n\n diagnostics.push(...validatePackageBundle(bundle).map(problem => `${packageName}: ${problem}`));\n if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {\n diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);\n }\n\n const packageAssets = bundle.manifest.assets ?? [];\n if (!configuration.policy.allowNetworkAssets && packageAssets.some(asset => /^https?:\\/\\//.test(asset))) {\n diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);\n }\n assets.push(...packageAssets);\n\n for (const dependency of bundle.manifest.runtimeSingletons ?? []) {\n const owner = runtimeSingletons.get(dependency);\n if (owner && owner !== packageName) {\n diagnostics.push(`Runtime singleton '${dependency}' is provided by both '${owner}' and '${packageName}'`);\n }\n runtimeSingletons.set(dependency, packageName);\n }\n\n bundles.push(bundle);\n }\n\n const blocked = diagnostics.length > 0;\n const approved = blocked ? [] : bundles;\n const approvedAssets = blocked ? [] : assets;\n\n return {\n bundles: approved,\n components: mergePackageRegistries(approved),\n layouts: approved.flatMap(bundle => bundle.layouts ?? []),\n screenTemplates: approved.flatMap(bundle => bundle.screenTemplates ?? []),\n dialogTemplates: approved.flatMap(bundle => bundle.dialogTemplates ?? []),\n themes: approved.flatMap(bundle => bundle.themes ?? []),\n icons: createIconAdapterRegistry(approved.map(bundle => bundle.iconLibrary?.adapter).filter(adapter => adapter !== undefined)),\n assets: approvedAssets,\n fonts: approvedAssets.filter(isFontAsset),\n blocked,\n diagnostics,\n };\n}\n\nfunction isFontAsset(asset: string): boolean {\n return /\\.(woff2?|otf|ttf)(\\?|$)/.test(asset) || asset.includes('/fonts/');\n}\n"],"names":["resolvePackageHost","configuration","diagnostics","names","Map","bundle","bundles","set","manifest","name","get","count","push","byName","map","selection","resolvePackageDependencies","profile","packages","missing","package","dependsOn","conflict","versionConflicts","requiredRange","actualVersion","cycle","cycles","join","runtimeSingletons","assets","packageName","validatePackageBundle","problem","policy","loadDesignTime","allowExecutableImports","designTime","packageAssets","allowNetworkAssets","some","asset","test","dependency","owner","blocked","length","approved","approvedAssets","components","mergePackageRegistries","layouts","flatMap","screenTemplates","dialogTemplates","themes","icons","createIconAdapterRegistry","iconLibrary","adapter","filter","undefined","fonts","isFontAsset","includes"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /**
6
+ * The host surface rendering a resolved package profile.
7
+ */ var PackageHostRenderMode = /*#__PURE__*/ function(PackageHostRenderMode) {
8
+ PackageHostRenderMode["Standalone"] = "standalone";
9
+ PackageHostRenderMode["Embedded"] = "embedded";
10
+ PackageHostRenderMode["WebView"] = "webView";
11
+ return PackageHostRenderMode;
12
+ }({});
13
+
14
+ exports.PackageHostRenderMode = PackageHostRenderMode;
15
+ //# sourceMappingURL=PackageHostRenderMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageHostRenderMode.js","sources":["../../../packages/PackageHostRenderMode.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/**\n * The host surface rendering a resolved package profile.\n */\nexport enum PackageHostRenderMode {\n Standalone = 'standalone',\n Embedded = 'embedded',\n WebView = 'webView',\n}\n"],"names":["PackageHostRenderMode"],"mappings":";;AAAA;AACA;AAEA;;IAGO,IAAKA,qBAAAA,iBAAAA,SAAAA,qBAAAA,EAAAA;;;;AAAAA,IAAAA,OAAAA,qBAAAA;AAIX,CAAA,CAAA,EAAA;;"}
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var SceneElementView = require('../SceneElementView.js');
5
+ var PackageHostAssets = require('./PackageHostAssets.js');
6
+ var PackageHostConfiguration = require('./PackageHostConfiguration.js');
7
+ var PackageHostRenderMode = require('./PackageHostRenderMode.js');
8
+
9
+ // Copyright (c) Cratis. All rights reserved.
10
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
11
+ /**
12
+ * Renders a Scene element through an approved package host. Diagnostics are blocking: no rejected bundle,
13
+ * component, asset or design-time contribution is rendered after policy/dependency validation fails.
14
+ */ function PackageHostView({ configuration, element, mode = PackageHostRenderMode.PackageHostRenderMode.Embedded, dataContext, queryResults, componentOutputs }) {
15
+ const host = PackageHostConfiguration.resolvePackageHost(configuration);
16
+ if (host.blocked) {
17
+ return /*#__PURE__*/ jsxRuntime.jsxs("section", {
18
+ role: "alert",
19
+ "data-scene-host-mode": mode,
20
+ "data-scene-host-blocked": "true",
21
+ children: [
22
+ /*#__PURE__*/ jsxRuntime.jsx("h2", {
23
+ children: "Scene package host blocked rendering"
24
+ }),
25
+ /*#__PURE__*/ jsxRuntime.jsx("ul", {
26
+ children: host.diagnostics.map((diagnostic)=>/*#__PURE__*/ jsxRuntime.jsx("li", {
27
+ children: diagnostic
28
+ }, diagnostic))
29
+ })
30
+ ]
31
+ });
32
+ }
33
+ return /*#__PURE__*/ jsxRuntime.jsxs("section", {
34
+ "data-scene-host-mode": mode,
35
+ "data-scene-host-blocked": "false",
36
+ children: [
37
+ /*#__PURE__*/ jsxRuntime.jsx(PackageHostAssets.PackageHostAssets, {
38
+ assets: host.assets,
39
+ fonts: host.fonts
40
+ }),
41
+ /*#__PURE__*/ jsxRuntime.jsx(SceneElementView.SceneElementView, {
42
+ element: element,
43
+ registry: host.components,
44
+ dataContext: dataContext,
45
+ queryResults: queryResults,
46
+ componentOutputs: componentOutputs
47
+ })
48
+ ]
49
+ });
50
+ }
51
+
52
+ exports.PackageHostView = PackageHostView;
53
+ //# sourceMappingURL=PackageHostView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageHostView.js","sources":["../../../packages/PackageHostView.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { SceneElement } from '@cratis/scene.model';\nimport { SceneElementView } from '../SceneElementView';\nimport { PackageHostAssets } from './PackageHostAssets';\nimport { PackageHostConfiguration, resolvePackageHost } from './PackageHostConfiguration';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\nexport interface PackageHostViewProps {\n configuration: PackageHostConfiguration;\n element: SceneElement;\n mode?: PackageHostRenderMode;\n dataContext?: unknown;\n queryResults?: Record<string, unknown>;\n componentOutputs?: Record<string, Record<string, unknown>>;\n}\n\n/**\n * Renders a Scene element through an approved package host. Diagnostics are blocking: no rejected bundle,\n * component, asset or design-time contribution is rendered after policy/dependency validation fails.\n */\nexport function PackageHostView({\n configuration,\n element,\n mode = PackageHostRenderMode.Embedded,\n dataContext,\n queryResults,\n componentOutputs,\n}: PackageHostViewProps) {\n const host = resolvePackageHost(configuration);\n if (host.blocked) {\n return <section role='alert' data-scene-host-mode={mode} data-scene-host-blocked='true'>\n <h2>Scene package host blocked rendering</h2>\n <ul>{host.diagnostics.map(diagnostic => <li key={diagnostic}>{diagnostic}</li>)}</ul>\n </section>;\n }\n\n return <section data-scene-host-mode={mode} data-scene-host-blocked='false'>\n <PackageHostAssets assets={host.assets} fonts={host.fonts} />\n <SceneElementView element={element} registry={host.components} dataContext={dataContext} queryResults={queryResults} componentOutputs={componentOutputs} />\n </section>;\n}\n"],"names":["PackageHostView","configuration","element","mode","PackageHostRenderMode","Embedded","dataContext","queryResults","componentOutputs","host","resolvePackageHost","blocked","_jsxs","section","role","data-scene-host-mode","data-scene-host-blocked","_jsx","h2","ul","diagnostics","map","diagnostic","li","PackageHostAssets","assets","fonts","SceneElementView","registry","components"],"mappings":";;;;;;;;AAAA;AACA;AAiBA;;;AAGC,IACM,SAASA,eAAAA,CAAgB,EAC5BC,aAAa,EACbC,OAAO,EACPC,IAAAA,GAAOC,2CAAAA,CAAsBC,QAAQ,EACrCC,WAAW,EACXC,YAAY,EACZC,gBAAgB,EACG,EAAA;AACnB,IAAA,MAAMC,OAAOC,2CAAAA,CAAmBT,aAAAA,CAAAA;IAChC,IAAIQ,IAAAA,CAAKE,OAAO,EAAE;AACd,QAAA,qBAAOC,eAAA,CAACC,SAAAA,EAAAA;YAAQC,IAAAA,EAAK,OAAA;YAAQC,sBAAAA,EAAsBZ,IAAAA;YAAMa,yBAAAA,EAAwB,MAAA;;8BAC7EC,cAAA,CAACC,IAAAA,EAAAA;AAAG,oBAAA,QAAA,EAAA;;8BACJD,cAAA,CAACE,IAAAA,EAAAA;AAAIV,oBAAAA,QAAAA,EAAAA,IAAAA,CAAKW,WAAW,CAACC,GAAG,CAACC,CAAAA,2BAAcL,cAAA,CAACM,IAAAA,EAAAA;AAAqBD,4BAAAA,QAAAA,EAAAA;AAAbA,yBAAAA,EAAAA,UAAAA,CAAAA;;;;AAEzD,IAAA;AAEA,IAAA,qBAAOV,eAAA,CAACC,SAAAA,EAAAA;QAAQE,sBAAAA,EAAsBZ,IAAAA;QAAMa,yBAAAA,EAAwB,OAAA;;0BAChEC,cAAA,CAACO,mCAAAA,EAAAA;AAAkBC,gBAAAA,MAAAA,EAAQhB,KAAKgB,MAAM;AAAEC,gBAAAA,KAAAA,EAAOjB,KAAKiB;;0BACpDT,cAAA,CAACU,iCAAAA,EAAAA;gBAAiBzB,OAAAA,EAASA,OAAAA;AAAS0B,gBAAAA,QAAAA,EAAUnB,KAAKoB,UAAU;gBAAEvB,WAAAA,EAAaA,WAAAA;gBAAaC,YAAAA,EAAcA,YAAAA;gBAAcC,gBAAAA,EAAkBA;;;;AAE/I;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var PackageHostView = require('./PackageHostView.js');
5
+ var PackageHostRenderMode = require('./PackageHostRenderMode.js');
6
+
7
+ /** A standalone browser package host example surface. */ function StandalonePackageHost(props) {
8
+ return /*#__PURE__*/ jsxRuntime.jsx(PackageHostView.PackageHostView, {
9
+ ...props,
10
+ mode: PackageHostRenderMode.PackageHostRenderMode.Standalone
11
+ });
12
+ }
13
+
14
+ exports.StandalonePackageHost = StandalonePackageHost;
15
+ //# sourceMappingURL=StandalonePackageHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StandalonePackageHost.js","sources":["../../../packages/StandalonePackageHost.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { PackageHostView, PackageHostViewProps } from './PackageHostView';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\n/** A standalone browser package host example surface. */\nexport function StandalonePackageHost(props: Omit<PackageHostViewProps, 'mode'>) {\n return <PackageHostView {...props} mode={PackageHostRenderMode.Standalone} />;\n}\n"],"names":["StandalonePackageHost","props","_jsx","PackageHostView","mode","PackageHostRenderMode","Standalone"],"mappings":";;;;;;AAMA,0DACO,SAASA,qBAAAA,CAAsBC,KAAyC,EAAA;AAC3E,IAAA,qBAAOC,cAAA,CAACC,+BAAAA,EAAAA;AAAiB,QAAA,GAAGF,KAAK;AAAEG,QAAAA,IAAAA,EAAMC,4CAAsBC;;AACnE;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var PackageHostView = require('./PackageHostView.js');
5
+ var PackageHostRenderMode = require('./PackageHostRenderMode.js');
6
+
7
+ /** A constrained webview package host example surface. */ function WebViewPackageHost(props) {
8
+ return /*#__PURE__*/ jsxRuntime.jsx(PackageHostView.PackageHostView, {
9
+ ...props,
10
+ mode: PackageHostRenderMode.PackageHostRenderMode.WebView
11
+ });
12
+ }
13
+
14
+ exports.WebViewPackageHost = WebViewPackageHost;
15
+ //# sourceMappingURL=WebViewPackageHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebViewPackageHost.js","sources":["../../../packages/WebViewPackageHost.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { PackageHostView, PackageHostViewProps } from './PackageHostView';\nimport { PackageHostRenderMode } from './PackageHostRenderMode';\n\n/** A constrained webview package host example surface. */\nexport function WebViewPackageHost(props: Omit<PackageHostViewProps, 'mode'>) {\n return <PackageHostView {...props} mode={PackageHostRenderMode.WebView} />;\n}\n"],"names":["WebViewPackageHost","props","_jsx","PackageHostView","mode","PackageHostRenderMode","WebView"],"mappings":";;;;;;AAMA,2DACO,SAASA,kBAAAA,CAAmBC,KAAyC,EAAA;AACxE,IAAA,qBAAOC,cAAA,CAACC,+BAAAA,EAAAA;AAAiB,QAAA,GAAGF,KAAK;AAAEG,QAAAA,IAAAA,EAAMC,4CAAsBC;;AACnE;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ // Copyright (c) Cratis. All rights reserved.
4
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
5
+ /**
6
+ * Runs query bindings so a newer argument set aborts and ignores older work.
7
+ */ class AbortableQueryRunner {
8
+ #controller;
9
+ #generation = 0;
10
+ async run(query, argumentsValue, performer) {
11
+ this.#controller?.abort();
12
+ const controller = new AbortController();
13
+ const generation = ++this.#generation;
14
+ this.#controller = controller;
15
+ const result = await performer(query, argumentsValue, controller.signal);
16
+ return generation === this.#generation && !controller.signal.aborted ? result : undefined;
17
+ }
18
+ clear() {
19
+ this.#controller?.abort();
20
+ this.#generation++;
21
+ this.#controller = undefined;
22
+ }
23
+ }
24
+
25
+ exports.AbortableQueryRunner = AbortableQueryRunner;
26
+ //# 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;;"}
@@ -5,6 +5,7 @@ require('react/jsx-runtime');
5
5
  var useInteractions = require('../interactions/useInteractions.js');
6
6
  require('../interactions/NotificationHost.js');
7
7
  var BindingOutputContext = require('./BindingOutputContext.js');
8
+ var RenderBindingScopeContext = require('./RenderBindingScopeContext.js');
8
9
 
9
10
  // Copyright (c) Cratis. All rights reserved.
10
11
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -17,16 +18,48 @@ var BindingOutputContext = require('./BindingOutputContext.js');
17
18
  */ function InteractiveComponent({ component, element, slots }) {
18
19
  const interactions = useInteractions.useInteractions(element.id, element.behaviors);
19
20
  const bindingOutputs = BindingOutputContext.useBindingOutputs(element.id);
21
+ const resolveBinding = RenderBindingScopeContext.useRenderBindingResolver();
22
+ const resolvedElement = react.useMemo(()=>({
23
+ ...element,
24
+ properties: resolveProperties(element.properties, resolveBinding)
25
+ }), [
26
+ element,
27
+ resolveBinding
28
+ ]);
20
29
  react.useEffect(()=>()=>bindingOutputs.clearAll(), [
21
30
  element.id
22
31
  ]);
23
32
  return /*#__PURE__*/ react.createElement(component, {
24
- element,
33
+ element: resolvedElement,
25
34
  slots,
26
35
  interactions,
27
36
  bindingOutputs
28
37
  });
29
38
  }
39
+ function resolveProperties(properties, resolveBinding) {
40
+ return Object.fromEntries(Object.entries(properties).map(([name, value])=>[
41
+ name,
42
+ resolveValue(value, resolveBinding)
43
+ ]));
44
+ }
45
+ function resolveValue(value, resolveBinding) {
46
+ if (isBindingExpression(value)) return resolveBinding(value);
47
+ if (isDestinationReference(value)) return value;
48
+ if (Array.isArray(value)) return value.map((entry)=>resolveValue(entry, resolveBinding));
49
+ if (value !== null && typeof value === 'object') {
50
+ return Object.fromEntries(Object.entries(value).map(([name, entry])=>[
51
+ name,
52
+ resolveValue(entry, resolveBinding)
53
+ ]));
54
+ }
55
+ return value;
56
+ }
57
+ function isBindingExpression(value) {
58
+ return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof value.path === 'string';
59
+ }
60
+ function isDestinationReference(value) {
61
+ return value !== null && typeof value === 'object' && !Array.isArray(value) && 'routeParameterBindings' in value;
62
+ }
30
63
 
31
64
  exports.InteractiveComponent = InteractiveComponent;
32
65
  //# sourceMappingURL=InteractiveComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InteractiveComponent.js","sources":["../../../renderer/InteractiveComponent.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ComponentType, ReactNode, createElement, useEffect } 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,+BAAAA,CAAgBH,OAAAA,CAAQI,EAAE,EAAEJ,QAAQK,SAAS,CAAA;IAClE,MAAMC,cAAAA,GAAiBC,sCAAAA,CAAkBP,OAAAA,CAAQI,EAAE,CAAA;AACnDI,IAAAA,eAAAA,CAAU,IAAM,IAAMF,cAAAA,CAAeG,QAAQ,EAAA,EAAI;AAACT,QAAAA,OAAAA,CAAQI;AAAG,KAAA,CAAA;AAC7D,IAAA,qBAAOM,oBAAcX,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 (isDestinationReference(value)) return value;\n if (Array.isArray(value)) return value.map(entry => resolveValue(entry, resolveBinding));\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([name, entry]) => [name, resolveValue(entry, resolveBinding)]));\n }\n\n return value;\n}\n\nfunction isBindingExpression(value: unknown): value is BindingExpression {\n return value !== null && typeof value === 'object' && !Array.isArray(value) && typeof (value as Record<string, unknown>).path === 'string';\n}\n\nfunction isDestinationReference(value: unknown): boolean {\n return value !== null && typeof value === 'object' && !Array.isArray(value) && 'routeParameterBindings' in value;\n}\n"],"names":["InteractiveComponent","component","element","slots","interactions","useInteractions","id","behaviors","bindingOutputs","useBindingOutputs","resolveBinding","useRenderBindingResolver","resolvedElement","useMemo","properties","resolveProperties","useEffect","clearAll","createElement","Object","fromEntries","entries","map","name","value","resolveValue","isBindingExpression","isDestinationReference","Array","isArray","entry","path"],"mappings":";;;;;;;;;AAAA;AACA;AAeA;;;;;;IAOO,SAASA,oBAAAA,CAAqB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,KAAK,EAA6B,EAAA;AACzF,IAAA,MAAMC,eAAeC,+BAAAA,CAAgBH,OAAAA,CAAQI,EAAE,EAAEJ,QAAQK,SAAS,CAAA;IAClE,MAAMC,cAAAA,GAAiBC,sCAAAA,CAAkBP,OAAAA,CAAQI,EAAE,CAAA;AACnD,IAAA,MAAMI,cAAAA,GAAiBC,kDAAAA,EAAAA;IACvB,MAAMC,eAAAA,GAAkBC,aAAAA,CAAQ,KAAO;AACnC,YAAA,GAAGX,OAAO;YACVY,UAAAA,EAAYC,iBAAAA,CAAkBb,OAAAA,CAAQY,UAAU,EAAEJ,cAAAA;AACtD,SAAA,CAAA,EAAI;AAACR,QAAAA,OAAAA;AAASQ,QAAAA;AAAe,KAAA,CAAA;AAC7BM,IAAAA,eAAAA,CAAU,IAAM,IAAMR,cAAAA,CAAeS,QAAQ,EAAA,EAAI;AAACf,QAAAA,OAAAA,CAAQI;AAAG,KAAA,CAAA;AAC7D,IAAA,qBAAOY,oBAAcjB,SAAAA,EAAW;QAAEC,OAAAA,EAASU,eAAAA;AAAiBT,QAAAA,KAAAA;AAAOC,QAAAA,YAAAA;AAAcI,QAAAA;AAAe,KAAA,CAAA;AACpG;AAEA,SAASO,iBAAAA,CAAkBD,UAAmC,EAAEJ,cAAuD,EAAA;AACnH,IAAA,OAAOS,MAAAA,CAAOC,WAAW,CAACD,MAAAA,CAAOE,OAAO,CAACP,UAAAA,CAAAA,CAAYQ,GAAG,CAAC,CAAC,CAACC,IAAAA,EAAMC,MAAM,GAAK;AAACD,YAAAA,IAAAA;AAAME,YAAAA,YAAAA,CAAaD,KAAAA,EAAOd,cAAAA;AAAgB,SAAA,CAAA,CAAA;AAC3H;AAEA,SAASe,YAAAA,CAAaD,KAAc,EAAEd,cAAuD,EAAA;IACzF,IAAIgB,mBAAAA,CAAoBF,KAAAA,CAAAA,EAAQ,OAAOd,cAAAA,CAAec,KAAAA,CAAAA;IACtD,IAAIG,sBAAAA,CAAuBH,QAAQ,OAAOA,KAAAA;IAC1C,IAAII,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,EAAQ,OAAOA,KAAAA,CAAMF,GAAG,CAACQ,CAAAA,KAAAA,GAASL,YAAAA,CAAaK,KAAAA,EAAOpB,cAAAA,CAAAA,CAAAA;AACxE,IAAA,IAAIc,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA,EAAU;AAC7C,QAAA,OAAOL,MAAAA,CAAOC,WAAW,CAACD,MAAAA,CAAOE,OAAO,CAACG,KAAAA,CAAAA,CAAkCF,GAAG,CAAC,CAAC,CAACC,IAAAA,EAAMO,MAAM,GAAK;AAACP,gBAAAA,IAAAA;AAAME,gBAAAA,YAAAA,CAAaK,KAAAA,EAAOpB,cAAAA;AAAgB,aAAA,CAAA,CAAA;AACjJ,IAAA;IAEA,OAAOc,KAAAA;AACX;AAEA,SAASE,oBAAoBF,KAAc,EAAA;AACvC,IAAA,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,YAAY,CAACI,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,IAAU,OAAO,KAACA,CAAkCO,IAAI,KAAK,QAAA;AACtI;AAEA,SAASJ,uBAAuBH,KAAc,EAAA;IAC1C,OAAOA,KAAAA,KAAU,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAA,IAAY,CAACI,KAAAA,CAAMC,OAAO,CAACL,KAAAA,CAAAA,IAAU,wBAAA,IAA4BA,KAAAA;AAC/G;;"}
@@ -0,0 +1,77 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var scene_engine = require('@cratis/scene.engine');
6
+ var scene_model = require('@cratis/scene.model');
7
+ var BindingOutputContext = require('./BindingOutputContext.js');
8
+
9
+ const Context = /*#__PURE__*/ react.createContext(undefined);
10
+ /**
11
+ * Provides the inherited reactive binding scope for a rendered Scene tree.
12
+ */ function RenderBindingScopeProvider(props) {
13
+ const current = react.useContext(Context);
14
+ if (current) return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
15
+ children: props.children
16
+ });
17
+ return /*#__PURE__*/ jsxRuntime.jsx(BindingOutputContext.BindingOutputProvider, {
18
+ onOutputsChanged: props.onComponentOutputsChanged,
19
+ children: /*#__PURE__*/ jsxRuntime.jsx(RenderBindingScopeInner, {
20
+ ...props
21
+ })
22
+ });
23
+ }
24
+ function RenderBindingScopeInner({ children, dataContext, queryResults, componentOutputs, resolveBinding }) {
25
+ const outputs = BindingOutputContext.useBindingOutputScope();
26
+ const previousValues = react.useRef(new Map());
27
+ const scope = react.useMemo(()=>({
28
+ dataContext,
29
+ queryResults,
30
+ componentOutputs: {
31
+ ...componentOutputs ?? {},
32
+ ...outputs
33
+ }
34
+ }), [
35
+ componentOutputs,
36
+ dataContext,
37
+ outputs,
38
+ queryResults
39
+ ]);
40
+ const resolver = react.useCallback((binding)=>{
41
+ if (!binding.kind && resolveBinding) return resolveBinding(binding);
42
+ const key = JSON.stringify(binding);
43
+ const value = scene_engine.resolveBindingExpression(binding, scope);
44
+ if (binding.nullBehavior === scene_model.BindingNullBehavior.Preserve && value === undefined) {
45
+ return previousValues.current.get(key);
46
+ }
47
+ if (value !== undefined) previousValues.current.set(key, value);
48
+ return value;
49
+ }, [
50
+ resolveBinding,
51
+ scope
52
+ ]);
53
+ const value = react.useMemo(()=>({
54
+ resolveBinding: resolver,
55
+ scope
56
+ }), [
57
+ resolver,
58
+ scope
59
+ ]);
60
+ return /*#__PURE__*/ jsxRuntime.jsx(Context.Provider, {
61
+ value: value,
62
+ children: children
63
+ });
64
+ }
65
+ function useRenderBindingResolver() {
66
+ const context = react.useContext(Context);
67
+ if (!context) throw new Error('No Scene render binding scope is available.');
68
+ return context.resolveBinding;
69
+ }
70
+ function useRenderBindingScope() {
71
+ return react.useContext(Context)?.scope ?? {};
72
+ }
73
+
74
+ exports.RenderBindingScopeProvider = RenderBindingScopeProvider;
75
+ exports.useRenderBindingResolver = useRenderBindingResolver;
76
+ exports.useRenderBindingScope = useRenderBindingScope;
77
+ //# 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,mBAAAA,CAAmDC,SAAAA,CAAAA;AAWnE;;IAGO,SAASC,0BAAAA,CAA2BC,KAAsC,EAAA;AAC7E,IAAA,MAAMC,UAAUC,gBAAAA,CAAWN,OAAAA,CAAAA;AAC3B,IAAA,IAAIK,SAAS,qBAAOE,cAAA,CAAAC,mBAAA,EAAA;AAAGJ,QAAAA,QAAAA,EAAAA,KAAAA,CAAMK;;AAE7B,IAAA,qBACIF,cAAA,CAACG,0CAAAA,EAAAA;AAAsBC,QAAAA,gBAAAA,EAAkBP,MAAMQ,yBAAyB;AACpE,QAAA,QAAA,gBAAAL,cAAA,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,0CAAAA,EAAAA;IAChB,MAAMC,cAAAA,GAAiBC,aAAO,IAAIC,GAAAA,EAAAA,CAAAA;IAClC,MAAMC,KAAAA,GAAQC,aAAAA,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,kBAA6B,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,sCAAyBN,OAAAA,EAASJ,KAAAA,CAAAA;AAChD,QAAA,IAAII,QAAQO,YAAY,KAAKC,gCAAoBC,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,aAAAA,CAAiC,KAAO;YAAEP,cAAAA,EAAgBQ,QAAAA;AAAUF,YAAAA;AAAM,SAAA,CAAA,EAAI;AAACE,QAAAA,QAAAA;AAAUF,QAAAA;AAAM,KAAA,CAAA;IAC7G,qBAAOhB,cAAA,CAACP,QAAQuC,QAAQ,EAAA;QAACP,KAAAA,EAAOA,KAAAA;AAAQvB,QAAAA,QAAAA,EAAAA;;AAC5C;AAEO,SAAS+B,wBAAAA,GAAAA;AACZ,IAAA,MAAMC,UAAUnC,gBAAAA,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,gBAAAA,CAAWN,OAAAA,CAAAA,EAAUuB,KAAAA,IAAS,EAAC;AAC1C;;;;"}
@@ -4,9 +4,12 @@ import { ComponentRegistry } from './renderer';
4
4
  export interface SceneElementViewProps {
5
5
  element: SceneElement;
6
6
  registry: ComponentRegistry;
7
- resolveBinding: BindingResolver;
7
+ resolveBinding?: BindingResolver;
8
+ dataContext?: unknown;
9
+ queryResults?: Record<string, unknown>;
10
+ componentOutputs?: Record<string, Record<string, unknown>>;
8
11
  configuration?: EffectiveConfiguration;
9
12
  onComponentOutputsChanged?: (outputs: Record<string, Record<string, unknown>>) => void;
10
13
  }
11
- export declare function SceneElementView({ element, registry, resolveBinding, configuration, onComponentOutputsChanged }: SceneElementViewProps): import("react").JSX.Element;
14
+ export declare function SceneElementView({ element, registry, resolveBinding, configuration, onComponentOutputsChanged, dataContext, queryResults, componentOutputs, }: SceneElementViewProps): import("react").JSX.Element;
12
15
  //# sourceMappingURL=SceneElementView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SceneElementView.d.ts","sourceRoot":"","sources":["../../SceneElementView.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA8C,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAyB,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAE3F,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,cAAc,EAAE,eAAe,CAAC;IAQhC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAGvC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CAC1F;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,yBAAyB,EAAE,EAAE,qBAAqB,+BAQtI"}
1
+ {"version":3,"file":"SceneElementView.d.ts","sourceRoot":"","sources":["../../SceneElementView.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA8C,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAA6E,MAAM,YAAY,CAAC;AAE1H,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,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;IAQ3D,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAGvC,yBAAyB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CAC1F;AAMD,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,WAAW,EACX,YAAY,EACZ,gBAAgB,GACnB,EAAE,qBAAqB,+BAYvB"}
@@ -1,7 +1,7 @@
1
- import { jsx } from 'react/jsx-runtime';
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { useMemo } from 'react';
3
3
  import { applyEffectiveConfiguration, renderElement } from '@cratis/scene.engine';
4
- import { BindingOutputProvider } from './renderer/BindingOutputContext.js';
4
+ import { RenderBindingScopeProvider, useRenderBindingResolver } from './renderer/RenderBindingScopeContext.js';
5
5
  import { createReactRenderer } from './renderer/createReactRenderer.js';
6
6
  import './interactions/useInteractions.js';
7
7
  import './interactions/NotificationHost.js';
@@ -9,17 +9,30 @@ import './interactions/NotificationHost.js';
9
9
  /**
10
10
  * Renders a Scene element tree with the real `Scene.React` renderer - the WYSIWYG building block Studio's
11
11
  * preview surface and Stage's shipped web bundle both consume unmodified.
12
- */ function SceneElementView({ element, registry, resolveBinding, configuration, onComponentOutputsChanged }) {
13
- const renderer = useMemo(()=>createReactRenderer(registry), [
14
- registry
15
- ]);
12
+ */ function SceneElementView({ element, registry, resolveBinding, configuration, onComponentOutputsChanged, dataContext, queryResults, componentOutputs }) {
16
13
  const configured = useMemo(()=>configuration ? applyEffectiveConfiguration(element, configuration) : element, [
17
14
  element,
18
15
  configuration
19
16
  ]);
20
- return /*#__PURE__*/ jsx(BindingOutputProvider, {
21
- onOutputsChanged: onComponentOutputsChanged,
22
- children: renderElement(configured, renderer, resolveBinding)
17
+ return /*#__PURE__*/ jsx(RenderBindingScopeProvider, {
18
+ dataContext: dataContext,
19
+ queryResults: queryResults,
20
+ componentOutputs: componentOutputs,
21
+ resolveBinding: resolveBinding,
22
+ onComponentOutputsChanged: onComponentOutputsChanged,
23
+ children: /*#__PURE__*/ jsx(RenderedElement, {
24
+ element: configured,
25
+ registry: registry
26
+ })
27
+ });
28
+ }
29
+ function RenderedElement({ element, registry }) {
30
+ const renderer = useMemo(()=>createReactRenderer(registry), [
31
+ registry
32
+ ]);
33
+ const resolveBinding = useRenderBindingResolver();
34
+ return /*#__PURE__*/ jsx(Fragment, {
35
+ children: renderElement(element, renderer, resolveBinding)
23
36
  });
24
37
  }
25
38
 
@@ -1 +1 @@
1
- {"version":3,"file":"SceneElementView.js","sources":["../../SceneElementView.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 { useMemo } from 'react';\nimport { applyEffectiveConfiguration, renderElement, BindingResolver } from '@cratis/scene.engine';\nimport { EffectiveConfiguration, SceneElement } from '@cratis/scene.model';\nimport { BindingOutputProvider, ComponentRegistry, createReactRenderer } from './renderer';\n\nexport interface SceneElementViewProps {\n element: SceneElement;\n registry: ComponentRegistry;\n resolveBinding: BindingResolver;\n\n /**\n * The resolved configuration of the template chain the element sits in, from `resolveEffectiveConfiguration`.\n * When given, each configurable component renders with its resolved properties - what a screen's own values add\n * to an inherited template. It is the same data the editor shows, and the same code path whether the screen is\n * being edited or played: there is no design-time mode.\n */\n configuration?: EffectiveConfiguration;\n\n /** Called when rendered components publish or clear output properties for typed bindings. */\n onComponentOutputsChanged?: (outputs: Record<string, Record<string, unknown>>) => void;\n}\n\n/**\n * Renders a Scene element tree with the real `Scene.React` renderer - the WYSIWYG building block Studio's\n * preview surface and Stage's shipped web bundle both consume unmodified.\n */\nexport function SceneElementView({ element, registry, resolveBinding, configuration, onComponentOutputsChanged }: SceneElementViewProps) {\n const renderer = useMemo(() => createReactRenderer(registry), [registry]);\n const configured = useMemo(() => configuration ? applyEffectiveConfiguration(element, configuration) : element, [element, configuration]);\n return (\n <BindingOutputProvider onOutputsChanged={onComponentOutputsChanged}>\n {renderElement(configured, renderer, resolveBinding)}\n </BindingOutputProvider>\n );\n}\n"],"names":["SceneElementView","element","registry","resolveBinding","configuration","onComponentOutputsChanged","renderer","useMemo","createReactRenderer","configured","applyEffectiveConfiguration","_jsx","BindingOutputProvider","onOutputsChanged","renderElement"],"mappings":";;;;;;;;AAyBA;;;AAGC,IACM,SAASA,gBAAAA,CAAiB,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,aAAa,EAAEC,yBAAyB,EAAyB,EAAA;AACnI,IAAA,MAAMC,QAAAA,GAAWC,OAAAA,CAAQ,IAAMC,mBAAAA,CAAoBN,QAAAA,CAAAA,EAAW;AAACA,QAAAA;AAAS,KAAA,CAAA;AACxE,IAAA,MAAMO,aAAaF,OAAAA,CAAQ,IAAMH,gBAAgBM,2BAAAA,CAA4BT,OAAAA,EAASG,iBAAiBH,OAAAA,EAAS;AAACA,QAAAA,OAAAA;AAASG,QAAAA;AAAc,KAAA,CAAA;AACxI,IAAA,qBACIO,GAAA,CAACC,qBAAAA,EAAAA;QAAsBC,gBAAAA,EAAkBR,yBAAAA;AACpCS,QAAAA,QAAAA,EAAAA,aAAAA,CAAcL,YAAYH,QAAAA,EAAUH,cAAAA;;AAGjD;;"}
1
+ {"version":3,"file":"SceneElementView.js","sources":["../../SceneElementView.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 { useMemo } from 'react';\nimport { applyEffectiveConfiguration, renderElement, BindingResolver } from '@cratis/scene.engine';\nimport { EffectiveConfiguration, SceneElement } from '@cratis/scene.model';\nimport { ComponentRegistry, RenderBindingScopeProvider, createReactRenderer, useRenderBindingResolver } from './renderer';\n\nexport interface SceneElementViewProps {\n element: SceneElement;\n registry: ComponentRegistry;\n resolveBinding?: BindingResolver;\n dataContext?: unknown;\n queryResults?: Record<string, unknown>;\n componentOutputs?: Record<string, Record<string, unknown>>;\n\n /**\n * The resolved configuration of the template chain the element sits in, from `resolveEffectiveConfiguration`.\n * When given, each configurable component renders with its resolved properties - what a screen's own values add\n * to an inherited template. It is the same data the editor shows, and the same code path whether the screen is\n * being edited or played: there is no design-time mode.\n */\n configuration?: EffectiveConfiguration;\n\n /** Called when rendered components publish or clear output properties for typed bindings. */\n onComponentOutputsChanged?: (outputs: Record<string, Record<string, unknown>>) => void;\n}\n\n/**\n * Renders a Scene element tree with the real `Scene.React` renderer - the WYSIWYG building block Studio's\n * preview surface and Stage's shipped web bundle both consume unmodified.\n */\nexport function SceneElementView({\n element,\n registry,\n resolveBinding,\n configuration,\n onComponentOutputsChanged,\n dataContext,\n queryResults,\n componentOutputs,\n}: SceneElementViewProps) {\n const configured = useMemo(() => configuration ? applyEffectiveConfiguration(element, configuration) : element, [element, configuration]);\n return (\n <RenderBindingScopeProvider\n dataContext={dataContext}\n queryResults={queryResults}\n componentOutputs={componentOutputs}\n resolveBinding={resolveBinding}\n onComponentOutputsChanged={onComponentOutputsChanged}>\n <RenderedElement element={configured} registry={registry} />\n </RenderBindingScopeProvider>\n );\n}\n\nfunction RenderedElement({ element, registry }: { element: SceneElement; registry: ComponentRegistry }) {\n const renderer = useMemo(() => createReactRenderer(registry), [registry]);\n const resolveBinding = useRenderBindingResolver();\n return <>{renderElement(element, renderer, resolveBinding)}</>;\n}\n"],"names":["SceneElementView","element","registry","resolveBinding","configuration","onComponentOutputsChanged","dataContext","queryResults","componentOutputs","configured","useMemo","applyEffectiveConfiguration","_jsx","RenderBindingScopeProvider","RenderedElement","renderer","createReactRenderer","useRenderBindingResolver","_Fragment","renderElement"],"mappings":";;;;;;;;AA4BA;;;AAGC,IACM,SAASA,gBAAAA,CAAiB,EAC7BC,OAAO,EACPC,QAAQ,EACRC,cAAc,EACdC,aAAa,EACbC,yBAAyB,EACzBC,WAAW,EACXC,YAAY,EACZC,gBAAgB,EACI,EAAA;AACpB,IAAA,MAAMC,aAAaC,OAAAA,CAAQ,IAAMN,gBAAgBO,2BAAAA,CAA4BV,OAAAA,EAASG,iBAAiBH,OAAAA,EAAS;AAACA,QAAAA,OAAAA;AAASG,QAAAA;AAAc,KAAA,CAAA;AACxI,IAAA,qBACIQ,GAAA,CAACC,0BAAAA,EAAAA;QACGP,WAAAA,EAAaA,WAAAA;QACbC,YAAAA,EAAcA,YAAAA;QACdC,gBAAAA,EAAkBA,gBAAAA;QAClBL,cAAAA,EAAgBA,cAAAA;QAChBE,yBAAAA,EAA2BA,yBAAAA;AAC3B,QAAA,QAAA,gBAAAO,GAAA,CAACE,eAAAA,EAAAA;YAAgBb,OAAAA,EAASQ,UAAAA;YAAYP,QAAAA,EAAUA;;;AAG5D;AAEA,SAASY,eAAAA,CAAgB,EAAEb,OAAO,EAAEC,QAAQ,EAA0D,EAAA;AAClG,IAAA,MAAMa,QAAAA,GAAWL,OAAAA,CAAQ,IAAMM,mBAAAA,CAAoBd,QAAAA,CAAAA,EAAW;AAACA,QAAAA;AAAS,KAAA,CAAA;AACxE,IAAA,MAAMC,cAAAA,GAAiBc,wBAAAA,EAAAA;IACvB,qBAAOL,GAAA,CAAAM,QAAA,EAAA;AAAGC,QAAAA,QAAAA,EAAAA,aAAAA,CAAclB,SAASc,QAAAA,EAAUZ,cAAAA;;AAC/C;;"}
@@ -1,3 +1,9 @@
1
+ import 'react/jsx-runtime';
2
+ import 'react';
3
+ import '@cratis/scene.model';
4
+ import '@cratis/scene.engine';
5
+ import '../interactions/useInteractions.js';
6
+ import '../interactions/NotificationHost.js';
1
7
  import { componentRegistryKey } from '../packages/ScenePackageBundle.js';
2
8
  import { CoreText } from './CoreText.js';
3
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":";;;;;;;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;;"}
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;;"}
@@ -1,4 +1,9 @@
1
1
  import { PropertyValueType } from '@cratis/scene.model';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
4
+ import '@cratis/scene.engine';
5
+ import '../interactions/useInteractions.js';
6
+ import '../interactions/NotificationHost.js';
2
7
  import { componentRegistryKey } from '../packages/ScenePackageBundle.js';
3
8
 
4
9
  // Copyright (c) Cratis. All rights reserved.