@cratis/scene.components 0.1.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 (539) hide show
  1. package/.storybook/main.ts +55 -0
  2. package/.storybook/preview.tsx +36 -0
  3. package/CratisComponents.stories.tsx +235 -0
  4. package/README.md +192 -0
  5. package/bindings/ArcRuntimeBoundary.tsx +36 -0
  6. package/bindings/BindingKind.ts +18 -0
  7. package/bindings/BoundConstructor.ts +21 -0
  8. package/bindings/ElementBinding.ts +19 -0
  9. package/bindings/MissingBinding.tsx +34 -0
  10. package/bindings/Placeholder.tsx +42 -0
  11. package/bindings/bindingRegistry.ts +105 -0
  12. package/bindings/for_bindingRegistry/when_a_command_is_registered.ts +30 -0
  13. package/bindings/for_bindingRegistry/when_a_query_is_not_registered.ts +17 -0
  14. package/bindings/for_bindingRegistry/when_a_query_is_registered.ts +30 -0
  15. package/bindings/for_bindingRegistry/when_bindings_are_cleared.ts +29 -0
  16. package/bindings/for_resolveElementBinding/when_resolving_a_command_binding.ts +34 -0
  17. package/bindings/for_resolveElementBinding/when_resolving_a_query_binding.ts +45 -0
  18. package/bindings/index.ts +11 -0
  19. package/bindings/resolveElementBinding.ts +33 -0
  20. package/common/SceneDropdown.tsx +31 -0
  21. package/common/SceneErrorBoundary.tsx +17 -0
  22. package/common/SceneIcon.tsx +18 -0
  23. package/common/SceneTooltip.tsx +28 -0
  24. package/common/index.ts +7 -0
  25. package/cratisComponents.ts +91 -0
  26. package/cratisComponentsPackage.ts +101 -0
  27. package/data/SceneDataTable.tsx +41 -0
  28. package/data/SceneObservableDataTable.tsx +41 -0
  29. package/data/for_SceneDataTable/when_the_query_binding_is_missing.tsx +48 -0
  30. package/data/index.ts +5 -0
  31. package/dialogs/SceneBusyIndicatorDialog.tsx +29 -0
  32. package/dialogs/SceneCommandDialog.tsx +42 -0
  33. package/dialogs/SceneConfirmationDialog.tsx +23 -0
  34. package/dialogs/SceneDialog.tsx +41 -0
  35. package/dialogs/SceneStepperCommandDialog.tsx +50 -0
  36. package/dialogs/index.ts +8 -0
  37. package/dist/cjs/bindings/ArcRuntimeBoundary.js +37 -0
  38. package/dist/cjs/bindings/ArcRuntimeBoundary.js.map +1 -0
  39. package/dist/cjs/bindings/BindingKind.js +19 -0
  40. package/dist/cjs/bindings/BindingKind.js.map +1 -0
  41. package/dist/cjs/bindings/MissingBinding.js +24 -0
  42. package/dist/cjs/bindings/MissingBinding.js.map +1 -0
  43. package/dist/cjs/bindings/Placeholder.js +38 -0
  44. package/dist/cjs/bindings/Placeholder.js.map +1 -0
  45. package/dist/cjs/bindings/bindingRegistry.js +101 -0
  46. package/dist/cjs/bindings/bindingRegistry.js.map +1 -0
  47. package/dist/cjs/bindings/resolveElementBinding.js +34 -0
  48. package/dist/cjs/bindings/resolveElementBinding.js.map +1 -0
  49. package/dist/cjs/common/SceneDropdown.js +30 -0
  50. package/dist/cjs/common/SceneDropdown.js.map +1 -0
  51. package/dist/cjs/common/SceneErrorBoundary.js +20 -0
  52. package/dist/cjs/common/SceneErrorBoundary.js.map +1 -0
  53. package/dist/cjs/common/SceneIcon.js +22 -0
  54. package/dist/cjs/common/SceneIcon.js.map +1 -0
  55. package/dist/cjs/common/SceneTooltip.js +29 -0
  56. package/dist/cjs/common/SceneTooltip.js.map +1 -0
  57. package/dist/cjs/cratisComponents.js +106 -0
  58. package/dist/cjs/cratisComponents.js.map +1 -0
  59. package/dist/cjs/cratisComponentsPackage.js +105 -0
  60. package/dist/cjs/cratisComponentsPackage.js.map +1 -0
  61. package/dist/cjs/data/SceneDataTable.js +46 -0
  62. package/dist/cjs/data/SceneDataTable.js.map +1 -0
  63. package/dist/cjs/data/SceneObservableDataTable.js +44 -0
  64. package/dist/cjs/data/SceneObservableDataTable.js.map +1 -0
  65. package/dist/cjs/dialogs/SceneBusyIndicatorDialog.js +30 -0
  66. package/dist/cjs/dialogs/SceneBusyIndicatorDialog.js.map +1 -0
  67. package/dist/cjs/dialogs/SceneCommandDialog.js +47 -0
  68. package/dist/cjs/dialogs/SceneCommandDialog.js.map +1 -0
  69. package/dist/cjs/dialogs/SceneConfirmationDialog.js +25 -0
  70. package/dist/cjs/dialogs/SceneConfirmationDialog.js.map +1 -0
  71. package/dist/cjs/dialogs/SceneDialog.js +41 -0
  72. package/dist/cjs/dialogs/SceneDialog.js.map +1 -0
  73. package/dist/cjs/dialogs/SceneStepperCommandDialog.js +54 -0
  74. package/dist/cjs/dialogs/SceneStepperCommandDialog.js.map +1 -0
  75. package/dist/cjs/editors/SceneFilterPanel.js +57 -0
  76. package/dist/cjs/editors/SceneFilterPanel.js.map +1 -0
  77. package/dist/cjs/editors/SceneObjectContentEditor.js +37 -0
  78. package/dist/cjs/editors/SceneObjectContentEditor.js.map +1 -0
  79. package/dist/cjs/editors/SceneObjectNavigationalBar.js +34 -0
  80. package/dist/cjs/editors/SceneObjectNavigationalBar.js.map +1 -0
  81. package/dist/cjs/editors/SceneSchemaEditor.js +33 -0
  82. package/dist/cjs/editors/SceneSchemaEditor.js.map +1 -0
  83. package/dist/cjs/editors/SceneTimeMachine.js +32 -0
  84. package/dist/cjs/editors/SceneTimeMachine.js.map +1 -0
  85. package/dist/cjs/editors/filterDefinitions.js +59 -0
  86. package/dist/cjs/editors/filterDefinitions.js.map +1 -0
  87. package/dist/cjs/editors/timeMachineVersions.js +44 -0
  88. package/dist/cjs/editors/timeMachineVersions.js.map +1 -0
  89. package/dist/cjs/editors/useEditableCopy.js +39 -0
  90. package/dist/cjs/editors/useEditableCopy.js.map +1 -0
  91. package/dist/cjs/forms/SceneCommandForm.js +46 -0
  92. package/dist/cjs/forms/SceneCommandForm.js.map +1 -0
  93. package/dist/cjs/forms/fields/CommandFormField.js +31 -0
  94. package/dist/cjs/forms/fields/CommandFormField.js.map +1 -0
  95. package/dist/cjs/forms/fields/SceneCalendarField.js +41 -0
  96. package/dist/cjs/forms/fields/SceneCalendarField.js.map +1 -0
  97. package/dist/cjs/forms/fields/SceneCheckboxField.js +28 -0
  98. package/dist/cjs/forms/fields/SceneCheckboxField.js.map +1 -0
  99. package/dist/cjs/forms/fields/SceneChipsField.js +33 -0
  100. package/dist/cjs/forms/fields/SceneChipsField.js.map +1 -0
  101. package/dist/cjs/forms/fields/SceneColorPickerField.js +30 -0
  102. package/dist/cjs/forms/fields/SceneColorPickerField.js.map +1 -0
  103. package/dist/cjs/forms/fields/SceneDropdownField.js +35 -0
  104. package/dist/cjs/forms/fields/SceneDropdownField.js.map +1 -0
  105. package/dist/cjs/forms/fields/SceneInputTextField.js +45 -0
  106. package/dist/cjs/forms/fields/SceneInputTextField.js.map +1 -0
  107. package/dist/cjs/forms/fields/SceneMultiSelectField.js +40 -0
  108. package/dist/cjs/forms/fields/SceneMultiSelectField.js.map +1 -0
  109. package/dist/cjs/forms/fields/SceneNumberField.js +32 -0
  110. package/dist/cjs/forms/fields/SceneNumberField.js.map +1 -0
  111. package/dist/cjs/forms/fields/SceneRadioButtonField.js +35 -0
  112. package/dist/cjs/forms/fields/SceneRadioButtonField.js.map +1 -0
  113. package/dist/cjs/forms/fields/SceneRadioGroupField.js +36 -0
  114. package/dist/cjs/forms/fields/SceneRadioGroupField.js.map +1 -0
  115. package/dist/cjs/forms/fields/SceneSliderField.js +31 -0
  116. package/dist/cjs/forms/fields/SceneSliderField.js.map +1 -0
  117. package/dist/cjs/forms/fields/SceneTextAreaField.js +31 -0
  118. package/dist/cjs/forms/fields/SceneTextAreaField.js.map +1 -0
  119. package/dist/cjs/forms/fields/resolveFieldBinding.js +27 -0
  120. package/dist/cjs/forms/fields/resolveFieldBinding.js.map +1 -0
  121. package/dist/cjs/index.js +123 -0
  122. package/dist/cjs/index.js.map +1 -0
  123. package/dist/cjs/package.json +3 -0
  124. package/dist/cjs/pages/SceneDataPage.js +45 -0
  125. package/dist/cjs/pages/SceneDataPage.js.map +1 -0
  126. package/dist/cjs/pages/SceneFormElement.js +26 -0
  127. package/dist/cjs/pages/SceneFormElement.js.map +1 -0
  128. package/dist/cjs/pages/ScenePage.js +28 -0
  129. package/dist/cjs/pages/ScenePage.js.map +1 -0
  130. package/dist/cjs/properties.js +104 -0
  131. package/dist/cjs/properties.js.map +1 -0
  132. package/dist/cjs/toolbar/SceneToolbar.js +27 -0
  133. package/dist/cjs/toolbar/SceneToolbar.js.map +1 -0
  134. package/dist/cjs/toolbar/SceneToolbarButton.js +32 -0
  135. package/dist/cjs/toolbar/SceneToolbarButton.js.map +1 -0
  136. package/dist/cjs/toolbar/SceneToolbarGroup.js +27 -0
  137. package/dist/cjs/toolbar/SceneToolbarGroup.js.map +1 -0
  138. package/dist/cjs/toolbar/SceneToolbarSeparator.js +25 -0
  139. package/dist/cjs/toolbar/SceneToolbarSeparator.js.map +1 -0
  140. package/dist/esm/CratisComponents.stories.d.ts +29 -0
  141. package/dist/esm/CratisComponents.stories.d.ts.map +1 -0
  142. package/dist/esm/CratisComponents.stories.js +187 -0
  143. package/dist/esm/CratisComponents.stories.js.map +1 -0
  144. package/dist/esm/bindings/ArcRuntimeBoundary.d.ts +6 -0
  145. package/dist/esm/bindings/ArcRuntimeBoundary.d.ts.map +1 -0
  146. package/dist/esm/bindings/ArcRuntimeBoundary.js +35 -0
  147. package/dist/esm/bindings/ArcRuntimeBoundary.js.map +1 -0
  148. package/dist/esm/bindings/BindingKind.d.ts +5 -0
  149. package/dist/esm/bindings/BindingKind.d.ts.map +1 -0
  150. package/dist/esm/bindings/BindingKind.js +17 -0
  151. package/dist/esm/bindings/BindingKind.js.map +1 -0
  152. package/dist/esm/bindings/BoundConstructor.d.ts +2 -0
  153. package/dist/esm/bindings/BoundConstructor.d.ts.map +1 -0
  154. package/dist/esm/bindings/BoundConstructor.js +2 -0
  155. package/dist/esm/bindings/BoundConstructor.js.map +1 -0
  156. package/dist/esm/bindings/ElementBinding.d.ts +6 -0
  157. package/dist/esm/bindings/ElementBinding.d.ts.map +1 -0
  158. package/dist/esm/bindings/ElementBinding.js +2 -0
  159. package/dist/esm/bindings/ElementBinding.js.map +1 -0
  160. package/dist/esm/bindings/MissingBinding.d.ts +9 -0
  161. package/dist/esm/bindings/MissingBinding.d.ts.map +1 -0
  162. package/dist/esm/bindings/MissingBinding.js +22 -0
  163. package/dist/esm/bindings/MissingBinding.js.map +1 -0
  164. package/dist/esm/bindings/Placeholder.d.ts +7 -0
  165. package/dist/esm/bindings/Placeholder.d.ts.map +1 -0
  166. package/dist/esm/bindings/Placeholder.js +36 -0
  167. package/dist/esm/bindings/Placeholder.js.map +1 -0
  168. package/dist/esm/bindings/bindingRegistry.d.ts +11 -0
  169. package/dist/esm/bindings/bindingRegistry.d.ts.map +1 -0
  170. package/dist/esm/bindings/bindingRegistry.js +91 -0
  171. package/dist/esm/bindings/bindingRegistry.js.map +1 -0
  172. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.d.ts +2 -0
  173. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.d.ts.map +1 -0
  174. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.js +25 -0
  175. package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.js.map +1 -0
  176. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.d.ts +2 -0
  177. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.d.ts.map +1 -0
  178. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.js +12 -0
  179. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.js.map +1 -0
  180. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.d.ts +2 -0
  181. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.d.ts.map +1 -0
  182. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.js +23 -0
  183. package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.js.map +1 -0
  184. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.d.ts +2 -0
  185. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.d.ts.map +1 -0
  186. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.js +18 -0
  187. package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.js.map +1 -0
  188. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.d.ts +2 -0
  189. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.d.ts.map +1 -0
  190. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.js +25 -0
  191. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.js.map +1 -0
  192. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.d.ts +2 -0
  193. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.d.ts.map +1 -0
  194. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.js +33 -0
  195. package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.js.map +1 -0
  196. package/dist/esm/bindings/index.d.ts +9 -0
  197. package/dist/esm/bindings/index.d.ts.map +1 -0
  198. package/dist/esm/bindings/index.js +9 -0
  199. package/dist/esm/bindings/index.js.map +1 -0
  200. package/dist/esm/bindings/resolveElementBinding.d.ts +5 -0
  201. package/dist/esm/bindings/resolveElementBinding.d.ts.map +1 -0
  202. package/dist/esm/bindings/resolveElementBinding.js +32 -0
  203. package/dist/esm/bindings/resolveElementBinding.js.map +1 -0
  204. package/dist/esm/common/SceneDropdown.d.ts +3 -0
  205. package/dist/esm/common/SceneDropdown.d.ts.map +1 -0
  206. package/dist/esm/common/SceneDropdown.js +28 -0
  207. package/dist/esm/common/SceneDropdown.js.map +1 -0
  208. package/dist/esm/common/SceneErrorBoundary.d.ts +3 -0
  209. package/dist/esm/common/SceneErrorBoundary.d.ts.map +1 -0
  210. package/dist/esm/common/SceneErrorBoundary.js +18 -0
  211. package/dist/esm/common/SceneErrorBoundary.js.map +1 -0
  212. package/dist/esm/common/SceneIcon.d.ts +3 -0
  213. package/dist/esm/common/SceneIcon.d.ts.map +1 -0
  214. package/dist/esm/common/SceneIcon.js +20 -0
  215. package/dist/esm/common/SceneIcon.js.map +1 -0
  216. package/dist/esm/common/SceneTooltip.d.ts +3 -0
  217. package/dist/esm/common/SceneTooltip.d.ts.map +1 -0
  218. package/dist/esm/common/SceneTooltip.js +27 -0
  219. package/dist/esm/common/SceneTooltip.js.map +1 -0
  220. package/dist/esm/common/index.d.ts +5 -0
  221. package/dist/esm/common/index.d.ts.map +1 -0
  222. package/dist/esm/common/index.js +5 -0
  223. package/dist/esm/common/index.js.map +1 -0
  224. package/dist/esm/cratisComponents.d.ts +4 -0
  225. package/dist/esm/cratisComponents.d.ts.map +1 -0
  226. package/dist/esm/cratisComponents.js +103 -0
  227. package/dist/esm/cratisComponents.js.map +1 -0
  228. package/dist/esm/cratisComponentsPackage.d.ts +5 -0
  229. package/dist/esm/cratisComponentsPackage.d.ts.map +1 -0
  230. package/dist/esm/cratisComponentsPackage.js +102 -0
  231. package/dist/esm/cratisComponentsPackage.js.map +1 -0
  232. package/dist/esm/data/SceneDataTable.d.ts +3 -0
  233. package/dist/esm/data/SceneDataTable.d.ts.map +1 -0
  234. package/dist/esm/data/SceneDataTable.js +44 -0
  235. package/dist/esm/data/SceneDataTable.js.map +1 -0
  236. package/dist/esm/data/SceneObservableDataTable.d.ts +3 -0
  237. package/dist/esm/data/SceneObservableDataTable.d.ts.map +1 -0
  238. package/dist/esm/data/SceneObservableDataTable.js +42 -0
  239. package/dist/esm/data/SceneObservableDataTable.js.map +1 -0
  240. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.d.ts +2 -0
  241. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.d.ts.map +1 -0
  242. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.js +36 -0
  243. package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.js.map +1 -0
  244. package/dist/esm/data/index.d.ts +3 -0
  245. package/dist/esm/data/index.d.ts.map +1 -0
  246. package/dist/esm/data/index.js +3 -0
  247. package/dist/esm/data/index.js.map +1 -0
  248. package/dist/esm/dialogs/SceneBusyIndicatorDialog.d.ts +3 -0
  249. package/dist/esm/dialogs/SceneBusyIndicatorDialog.d.ts.map +1 -0
  250. package/dist/esm/dialogs/SceneBusyIndicatorDialog.js +28 -0
  251. package/dist/esm/dialogs/SceneBusyIndicatorDialog.js.map +1 -0
  252. package/dist/esm/dialogs/SceneCommandDialog.d.ts +3 -0
  253. package/dist/esm/dialogs/SceneCommandDialog.d.ts.map +1 -0
  254. package/dist/esm/dialogs/SceneCommandDialog.js +45 -0
  255. package/dist/esm/dialogs/SceneCommandDialog.js.map +1 -0
  256. package/dist/esm/dialogs/SceneConfirmationDialog.d.ts +2 -0
  257. package/dist/esm/dialogs/SceneConfirmationDialog.d.ts.map +1 -0
  258. package/dist/esm/dialogs/SceneConfirmationDialog.js +23 -0
  259. package/dist/esm/dialogs/SceneConfirmationDialog.js.map +1 -0
  260. package/dist/esm/dialogs/SceneDialog.d.ts +3 -0
  261. package/dist/esm/dialogs/SceneDialog.d.ts.map +1 -0
  262. package/dist/esm/dialogs/SceneDialog.js +39 -0
  263. package/dist/esm/dialogs/SceneDialog.js.map +1 -0
  264. package/dist/esm/dialogs/SceneStepperCommandDialog.d.ts +3 -0
  265. package/dist/esm/dialogs/SceneStepperCommandDialog.d.ts.map +1 -0
  266. package/dist/esm/dialogs/SceneStepperCommandDialog.js +52 -0
  267. package/dist/esm/dialogs/SceneStepperCommandDialog.js.map +1 -0
  268. package/dist/esm/dialogs/index.d.ts +6 -0
  269. package/dist/esm/dialogs/index.d.ts.map +1 -0
  270. package/dist/esm/dialogs/index.js +6 -0
  271. package/dist/esm/dialogs/index.js.map +1 -0
  272. package/dist/esm/editors/SceneFilterPanel.d.ts +3 -0
  273. package/dist/esm/editors/SceneFilterPanel.d.ts.map +1 -0
  274. package/dist/esm/editors/SceneFilterPanel.js +55 -0
  275. package/dist/esm/editors/SceneFilterPanel.js.map +1 -0
  276. package/dist/esm/editors/SceneObjectContentEditor.d.ts +3 -0
  277. package/dist/esm/editors/SceneObjectContentEditor.d.ts.map +1 -0
  278. package/dist/esm/editors/SceneObjectContentEditor.js +35 -0
  279. package/dist/esm/editors/SceneObjectContentEditor.js.map +1 -0
  280. package/dist/esm/editors/SceneObjectNavigationalBar.d.ts +3 -0
  281. package/dist/esm/editors/SceneObjectNavigationalBar.d.ts.map +1 -0
  282. package/dist/esm/editors/SceneObjectNavigationalBar.js +32 -0
  283. package/dist/esm/editors/SceneObjectNavigationalBar.js.map +1 -0
  284. package/dist/esm/editors/SceneSchemaEditor.d.ts +3 -0
  285. package/dist/esm/editors/SceneSchemaEditor.d.ts.map +1 -0
  286. package/dist/esm/editors/SceneSchemaEditor.js +31 -0
  287. package/dist/esm/editors/SceneSchemaEditor.js.map +1 -0
  288. package/dist/esm/editors/SceneTimeMachine.d.ts +3 -0
  289. package/dist/esm/editors/SceneTimeMachine.d.ts.map +1 -0
  290. package/dist/esm/editors/SceneTimeMachine.js +30 -0
  291. package/dist/esm/editors/SceneTimeMachine.js.map +1 -0
  292. package/dist/esm/editors/filterDefinitions.d.ts +3 -0
  293. package/dist/esm/editors/filterDefinitions.d.ts.map +1 -0
  294. package/dist/esm/editors/filterDefinitions.js +57 -0
  295. package/dist/esm/editors/filterDefinitions.js.map +1 -0
  296. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.d.ts +2 -0
  297. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.d.ts.map +1 -0
  298. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.js +15 -0
  299. package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.js.map +1 -0
  300. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.d.ts +2 -0
  301. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.d.ts.map +1 -0
  302. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.js +39 -0
  303. package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.js.map +1 -0
  304. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.d.ts +2 -0
  305. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.d.ts.map +1 -0
  306. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.js +32 -0
  307. package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.js.map +1 -0
  308. package/dist/esm/editors/index.d.ts +9 -0
  309. package/dist/esm/editors/index.d.ts.map +1 -0
  310. package/dist/esm/editors/index.js +9 -0
  311. package/dist/esm/editors/index.js.map +1 -0
  312. package/dist/esm/editors/timeMachineVersions.d.ts +3 -0
  313. package/dist/esm/editors/timeMachineVersions.d.ts.map +1 -0
  314. package/dist/esm/editors/timeMachineVersions.js +42 -0
  315. package/dist/esm/editors/timeMachineVersions.js.map +1 -0
  316. package/dist/esm/editors/useEditableCopy.d.ts +2 -0
  317. package/dist/esm/editors/useEditableCopy.d.ts.map +1 -0
  318. package/dist/esm/editors/useEditableCopy.js +37 -0
  319. package/dist/esm/editors/useEditableCopy.js.map +1 -0
  320. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.d.ts +2 -0
  321. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.d.ts.map +1 -0
  322. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.js +25 -0
  323. package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.js.map +1 -0
  324. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.d.ts +2 -0
  325. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.d.ts.map +1 -0
  326. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.js +34 -0
  327. package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.js.map +1 -0
  328. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.d.ts +2 -0
  329. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.d.ts.map +1 -0
  330. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.js +49 -0
  331. package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.js.map +1 -0
  332. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.d.ts +2 -0
  333. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.d.ts.map +1 -0
  334. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.js +27 -0
  335. package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.js.map +1 -0
  336. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.d.ts +2 -0
  337. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.d.ts.map +1 -0
  338. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.js +24 -0
  339. package/dist/esm/for_properties/when_a_property_has_the_wrong_type.js.map +1 -0
  340. package/dist/esm/for_properties/when_a_property_is_missing.d.ts +2 -0
  341. package/dist/esm/for_properties/when_a_property_is_missing.d.ts.map +1 -0
  342. package/dist/esm/for_properties/when_a_property_is_missing.js +13 -0
  343. package/dist/esm/for_properties/when_a_property_is_missing.js.map +1 -0
  344. package/dist/esm/for_properties/when_a_property_is_present.d.ts +2 -0
  345. package/dist/esm/for_properties/when_a_property_is_present.d.ts.map +1 -0
  346. package/dist/esm/for_properties/when_a_property_is_present.js +21 -0
  347. package/dist/esm/for_properties/when_a_property_is_present.js.map +1 -0
  348. package/dist/esm/forms/SceneCommandForm.d.ts +3 -0
  349. package/dist/esm/forms/SceneCommandForm.d.ts.map +1 -0
  350. package/dist/esm/forms/SceneCommandForm.js +44 -0
  351. package/dist/esm/forms/SceneCommandForm.js.map +1 -0
  352. package/dist/esm/forms/fields/CommandFormField.d.ts +9 -0
  353. package/dist/esm/forms/fields/CommandFormField.d.ts.map +1 -0
  354. package/dist/esm/forms/fields/CommandFormField.js +29 -0
  355. package/dist/esm/forms/fields/CommandFormField.js.map +1 -0
  356. package/dist/esm/forms/fields/FieldBinding.d.ts +6 -0
  357. package/dist/esm/forms/fields/FieldBinding.d.ts.map +1 -0
  358. package/dist/esm/forms/fields/FieldBinding.js +2 -0
  359. package/dist/esm/forms/fields/FieldBinding.js.map +1 -0
  360. package/dist/esm/forms/fields/SceneCalendarField.d.ts +3 -0
  361. package/dist/esm/forms/fields/SceneCalendarField.d.ts.map +1 -0
  362. package/dist/esm/forms/fields/SceneCalendarField.js +39 -0
  363. package/dist/esm/forms/fields/SceneCalendarField.js.map +1 -0
  364. package/dist/esm/forms/fields/SceneCheckboxField.d.ts +3 -0
  365. package/dist/esm/forms/fields/SceneCheckboxField.d.ts.map +1 -0
  366. package/dist/esm/forms/fields/SceneCheckboxField.js +26 -0
  367. package/dist/esm/forms/fields/SceneCheckboxField.js.map +1 -0
  368. package/dist/esm/forms/fields/SceneChipsField.d.ts +3 -0
  369. package/dist/esm/forms/fields/SceneChipsField.d.ts.map +1 -0
  370. package/dist/esm/forms/fields/SceneChipsField.js +31 -0
  371. package/dist/esm/forms/fields/SceneChipsField.js.map +1 -0
  372. package/dist/esm/forms/fields/SceneColorPickerField.d.ts +3 -0
  373. package/dist/esm/forms/fields/SceneColorPickerField.d.ts.map +1 -0
  374. package/dist/esm/forms/fields/SceneColorPickerField.js +28 -0
  375. package/dist/esm/forms/fields/SceneColorPickerField.js.map +1 -0
  376. package/dist/esm/forms/fields/SceneDropdownField.d.ts +3 -0
  377. package/dist/esm/forms/fields/SceneDropdownField.d.ts.map +1 -0
  378. package/dist/esm/forms/fields/SceneDropdownField.js +33 -0
  379. package/dist/esm/forms/fields/SceneDropdownField.js.map +1 -0
  380. package/dist/esm/forms/fields/SceneInputTextField.d.ts +3 -0
  381. package/dist/esm/forms/fields/SceneInputTextField.d.ts.map +1 -0
  382. package/dist/esm/forms/fields/SceneInputTextField.js +43 -0
  383. package/dist/esm/forms/fields/SceneInputTextField.js.map +1 -0
  384. package/dist/esm/forms/fields/SceneMultiSelectField.d.ts +3 -0
  385. package/dist/esm/forms/fields/SceneMultiSelectField.d.ts.map +1 -0
  386. package/dist/esm/forms/fields/SceneMultiSelectField.js +38 -0
  387. package/dist/esm/forms/fields/SceneMultiSelectField.js.map +1 -0
  388. package/dist/esm/forms/fields/SceneNumberField.d.ts +3 -0
  389. package/dist/esm/forms/fields/SceneNumberField.d.ts.map +1 -0
  390. package/dist/esm/forms/fields/SceneNumberField.js +30 -0
  391. package/dist/esm/forms/fields/SceneNumberField.js.map +1 -0
  392. package/dist/esm/forms/fields/SceneRadioButtonField.d.ts +3 -0
  393. package/dist/esm/forms/fields/SceneRadioButtonField.d.ts.map +1 -0
  394. package/dist/esm/forms/fields/SceneRadioButtonField.js +33 -0
  395. package/dist/esm/forms/fields/SceneRadioButtonField.js.map +1 -0
  396. package/dist/esm/forms/fields/SceneRadioGroupField.d.ts +3 -0
  397. package/dist/esm/forms/fields/SceneRadioGroupField.d.ts.map +1 -0
  398. package/dist/esm/forms/fields/SceneRadioGroupField.js +34 -0
  399. package/dist/esm/forms/fields/SceneRadioGroupField.js.map +1 -0
  400. package/dist/esm/forms/fields/SceneSliderField.d.ts +3 -0
  401. package/dist/esm/forms/fields/SceneSliderField.d.ts.map +1 -0
  402. package/dist/esm/forms/fields/SceneSliderField.js +29 -0
  403. package/dist/esm/forms/fields/SceneSliderField.js.map +1 -0
  404. package/dist/esm/forms/fields/SceneTextAreaField.d.ts +3 -0
  405. package/dist/esm/forms/fields/SceneTextAreaField.d.ts.map +1 -0
  406. package/dist/esm/forms/fields/SceneTextAreaField.js +29 -0
  407. package/dist/esm/forms/fields/SceneTextAreaField.js.map +1 -0
  408. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.d.ts +2 -0
  409. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.d.ts.map +1 -0
  410. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.js +12 -0
  411. package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.js.map +1 -0
  412. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.d.ts +2 -0
  413. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.d.ts.map +1 -0
  414. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js +24 -0
  415. package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js.map +1 -0
  416. package/dist/esm/forms/fields/index.d.ts +16 -0
  417. package/dist/esm/forms/fields/index.d.ts.map +1 -0
  418. package/dist/esm/forms/fields/index.js +16 -0
  419. package/dist/esm/forms/fields/index.js.map +1 -0
  420. package/dist/esm/forms/fields/resolveFieldBinding.d.ts +4 -0
  421. package/dist/esm/forms/fields/resolveFieldBinding.d.ts.map +1 -0
  422. package/dist/esm/forms/fields/resolveFieldBinding.js +25 -0
  423. package/dist/esm/forms/fields/resolveFieldBinding.js.map +1 -0
  424. package/dist/esm/forms/index.d.ts +3 -0
  425. package/dist/esm/forms/index.d.ts.map +1 -0
  426. package/dist/esm/forms/index.js +3 -0
  427. package/dist/esm/forms/index.js.map +1 -0
  428. package/dist/esm/given.d.ts +3 -0
  429. package/dist/esm/given.d.ts.map +1 -0
  430. package/dist/esm/given.js +21 -0
  431. package/dist/esm/given.js.map +1 -0
  432. package/dist/esm/index.d.ts +12 -0
  433. package/dist/esm/index.d.ts.map +1 -0
  434. package/dist/esm/index.js +51 -0
  435. package/dist/esm/index.js.map +1 -0
  436. package/dist/esm/package.json +3 -0
  437. package/dist/esm/pages/SceneDataPage.d.ts +3 -0
  438. package/dist/esm/pages/SceneDataPage.d.ts.map +1 -0
  439. package/dist/esm/pages/SceneDataPage.js +43 -0
  440. package/dist/esm/pages/SceneDataPage.js.map +1 -0
  441. package/dist/esm/pages/SceneFormElement.d.ts +3 -0
  442. package/dist/esm/pages/SceneFormElement.d.ts.map +1 -0
  443. package/dist/esm/pages/SceneFormElement.js +24 -0
  444. package/dist/esm/pages/SceneFormElement.js.map +1 -0
  445. package/dist/esm/pages/ScenePage.d.ts +3 -0
  446. package/dist/esm/pages/ScenePage.d.ts.map +1 -0
  447. package/dist/esm/pages/ScenePage.js +26 -0
  448. package/dist/esm/pages/ScenePage.js.map +1 -0
  449. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.d.ts +2 -0
  450. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.d.ts.map +1 -0
  451. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.js +31 -0
  452. package/dist/esm/pages/for_ScenePage/when_rendering_a_page.js.map +1 -0
  453. package/dist/esm/pages/index.d.ts +4 -0
  454. package/dist/esm/pages/index.d.ts.map +1 -0
  455. package/dist/esm/pages/index.js +4 -0
  456. package/dist/esm/pages/index.js.map +1 -0
  457. package/dist/esm/properties.d.ts +9 -0
  458. package/dist/esm/properties.d.ts.map +1 -0
  459. package/dist/esm/properties.js +95 -0
  460. package/dist/esm/properties.js.map +1 -0
  461. package/dist/esm/toolbar/SceneToolbar.d.ts +3 -0
  462. package/dist/esm/toolbar/SceneToolbar.d.ts.map +1 -0
  463. package/dist/esm/toolbar/SceneToolbar.js +25 -0
  464. package/dist/esm/toolbar/SceneToolbar.js.map +1 -0
  465. package/dist/esm/toolbar/SceneToolbarButton.d.ts +3 -0
  466. package/dist/esm/toolbar/SceneToolbarButton.d.ts.map +1 -0
  467. package/dist/esm/toolbar/SceneToolbarButton.js +30 -0
  468. package/dist/esm/toolbar/SceneToolbarButton.js.map +1 -0
  469. package/dist/esm/toolbar/SceneToolbarGroup.d.ts +3 -0
  470. package/dist/esm/toolbar/SceneToolbarGroup.d.ts.map +1 -0
  471. package/dist/esm/toolbar/SceneToolbarGroup.js +25 -0
  472. package/dist/esm/toolbar/SceneToolbarGroup.js.map +1 -0
  473. package/dist/esm/toolbar/SceneToolbarSeparator.d.ts +3 -0
  474. package/dist/esm/toolbar/SceneToolbarSeparator.d.ts.map +1 -0
  475. package/dist/esm/toolbar/SceneToolbarSeparator.js +23 -0
  476. package/dist/esm/toolbar/SceneToolbarSeparator.js.map +1 -0
  477. package/dist/esm/toolbar/index.d.ts +5 -0
  478. package/dist/esm/toolbar/index.d.ts.map +1 -0
  479. package/dist/esm/toolbar/index.js +5 -0
  480. package/dist/esm/toolbar/index.js.map +1 -0
  481. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  482. package/editors/SceneFilterPanel.tsx +52 -0
  483. package/editors/SceneObjectContentEditor.tsx +36 -0
  484. package/editors/SceneObjectNavigationalBar.tsx +34 -0
  485. package/editors/SceneSchemaEditor.tsx +34 -0
  486. package/editors/SceneTimeMachine.tsx +32 -0
  487. package/editors/filterDefinitions.ts +59 -0
  488. package/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.tsx +18 -0
  489. package/editors/for_filterDefinitions/when_reading_filter_definitions.ts +49 -0
  490. package/editors/for_timeMachineVersions/when_reading_versions.ts +39 -0
  491. package/editors/index.ts +11 -0
  492. package/editors/timeMachineVersions.ts +44 -0
  493. package/editors/useEditableCopy.ts +32 -0
  494. package/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.tsx +37 -0
  495. package/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.ts +49 -0
  496. package/for_cratisComponentsPackage/when_resolving_its_dependencies.ts +68 -0
  497. package/for_cratisComponentsPackage/when_validating_the_bundle.ts +39 -0
  498. package/for_properties/when_a_property_has_the_wrong_type.ts +41 -0
  499. package/for_properties/when_a_property_is_missing.ts +26 -0
  500. package/for_properties/when_a_property_is_present.ts +36 -0
  501. package/forms/SceneCommandForm.tsx +45 -0
  502. package/forms/fields/CommandFormField.tsx +32 -0
  503. package/forms/fields/FieldBinding.ts +26 -0
  504. package/forms/fields/SceneCalendarField.tsx +41 -0
  505. package/forms/fields/SceneCheckboxField.tsx +29 -0
  506. package/forms/fields/SceneChipsField.tsx +34 -0
  507. package/forms/fields/SceneColorPickerField.tsx +31 -0
  508. package/forms/fields/SceneDropdownField.tsx +36 -0
  509. package/forms/fields/SceneInputTextField.tsx +37 -0
  510. package/forms/fields/SceneMultiSelectField.tsx +40 -0
  511. package/forms/fields/SceneNumberField.tsx +33 -0
  512. package/forms/fields/SceneRadioButtonField.tsx +37 -0
  513. package/forms/fields/SceneRadioGroupField.tsx +36 -0
  514. package/forms/fields/SceneSliderField.tsx +32 -0
  515. package/forms/fields/SceneTextAreaField.tsx +32 -0
  516. package/forms/fields/for_CommandFormField/when_the_field_names_no_property.tsx +16 -0
  517. package/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts +34 -0
  518. package/forms/fields/index.ts +18 -0
  519. package/forms/fields/resolveFieldBinding.ts +27 -0
  520. package/forms/index.ts +5 -0
  521. package/given.ts +33 -0
  522. package/index.ts +14 -0
  523. package/package.json +68 -0
  524. package/pages/SceneDataPage.tsx +40 -0
  525. package/pages/SceneFormElement.tsx +21 -0
  526. package/pages/ScenePage.tsx +30 -0
  527. package/pages/for_ScenePage/when_rendering_a_page.tsx +39 -0
  528. package/pages/index.ts +6 -0
  529. package/properties.ts +112 -0
  530. package/storybook-static/assets/CommandDialog-B78_eDOU.css +1 -0
  531. package/storybook-static/assets/CratisComponents-qPooLvTv.css +1 -0
  532. package/storybook-static/assets/DataPage-CroWzXsC.css +1 -0
  533. package/storybook-static/assets/iframe-DQhZBFM5.css +1 -0
  534. package/theme/sceneTokenBridge.css +72 -0
  535. package/toolbar/SceneToolbar.tsx +28 -0
  536. package/toolbar/SceneToolbarButton.tsx +31 -0
  537. package/toolbar/SceneToolbarGroup.tsx +28 -0
  538. package/toolbar/SceneToolbarSeparator.tsx +21 -0
  539. package/toolbar/index.ts +7 -0
@@ -0,0 +1,42 @@
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
+ import { ExternalComponent } from '@cratis/scene.model';
5
+
6
+ export interface PlaceholderProps {
7
+ /**
8
+ * The element that could not be rendered as configured. Its `componentName` names what was being
9
+ * rendered, which is most of what makes the placeholder actionable.
10
+ */
11
+ element: ExternalComponent;
12
+
13
+ /**
14
+ * What is wrong, phrased as the problem rather than the remedy - `Unresolved query binding 'AllInvoices'`.
15
+ */
16
+ problem: string;
17
+ }
18
+
19
+ /**
20
+ * The stand-in an adapter renders when it has been given a screen it cannot honor - a binding name
21
+ * nothing is registered under, or a required property the screen never set.
22
+ *
23
+ * Deliberately the same presentation as `UnresolvedComponent` in `@cratis/scene.react`: a dashed red box
24
+ * that states the problem in monospace. They are the same class of failure seen at two different depths -
25
+ * the renderer could not find the component, or the component could not find what it needs - and a
26
+ * designer scanning a preview should recognize both instantly as "something here is not wired up".
27
+ *
28
+ * Rendering this rather than throwing is the whole point. Studio's design-time preview usually has no
29
+ * bindings registered at all, and it still has to show a usable layout: one unbound table must cost one
30
+ * dashed box, not the entire screen.
31
+ */
32
+ export function Placeholder({ element, problem }: PlaceholderProps) {
33
+ return (
34
+ <div
35
+ data-scene-id={element.id}
36
+ data-scene-placeholder={element.componentName}
37
+ style={{ border: '1px dashed red', color: 'red', padding: '0.25rem 0.5rem', fontFamily: 'monospace' }}
38
+ >
39
+ {problem} on {element.componentName}
40
+ </div>
41
+ );
42
+ }
@@ -0,0 +1,105 @@
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
+ import { BoundConstructor } from './BoundConstructor';
5
+
6
+ const queries = new Map<string, BoundConstructor>();
7
+ const commands = new Map<string, BoundConstructor>();
8
+
9
+ /**
10
+ * Registers an Arc query proxy under the name screens refer to it by.
11
+ *
12
+ * This is the seam that makes the Arc-bound half of `@cratis/components` usable from Scene at all. A
13
+ * screen says `data Invoices via query AllInvoices`, and by the time that reaches a renderer it is an
14
+ * `ExternalComponent` whose `properties` bag holds the *string* `'AllInvoices'` - a property bag carries
15
+ * plain values and named slots, and there is no way to put a TypeScript class into one. `DataTableForQuery`
16
+ * needs the class. The name is the only thing that survives the trip, so the name is what the lookup has
17
+ * to be keyed on, and a host that owns the generated proxies is the only party that can supply the class
18
+ * behind it.
19
+ *
20
+ * A host - Stage's generated application, or Studio's preview when it is wired to a real backend -
21
+ * registers every proxy a screen can name, once, during startup. Registering the same name twice
22
+ * replaces the earlier registration, so a host can re-register on hot reload without having to unwind
23
+ * the previous run.
24
+ */
25
+ export function registerQuery(name: string, queryClass: BoundConstructor): void {
26
+ queries.set(name, queryClass);
27
+ }
28
+
29
+ /**
30
+ * Registers several query proxies at once, keyed by the name screens refer to each by.
31
+ *
32
+ * Stage generates a module that exports every proxy it produced; handing that module's exports straight
33
+ * to this is the whole of a generated host's registration step, and it stays correct as proxies are
34
+ * added and removed without anyone editing a list.
35
+ */
36
+ export function registerQueries(bindings: Record<string, BoundConstructor>): void {
37
+ for (const [name, queryClass] of Object.entries(bindings)) {
38
+ registerQuery(name, queryClass);
39
+ }
40
+ }
41
+
42
+ /**
43
+ * The query proxy registered under a name, or `undefined` when nothing is registered under it.
44
+ *
45
+ * `undefined` rather than a throw: design-time preview in Studio normally has nothing registered at all,
46
+ * and a screen still has to render so its layout can be worked on. Every adapter turns `undefined` into
47
+ * a visible placeholder naming the binding it wanted.
48
+ */
49
+ export function resolveQuery(name: string): BoundConstructor | undefined {
50
+ return queries.get(name);
51
+ }
52
+
53
+ /**
54
+ * Registers an Arc command proxy under the name screens refer to it by. The command half of
55
+ * {@link registerQuery}, with the same contract.
56
+ */
57
+ export function registerCommand(name: string, commandClass: BoundConstructor): void {
58
+ commands.set(name, commandClass);
59
+ }
60
+
61
+ /**
62
+ * Registers several command proxies at once, keyed by the name screens refer to each by.
63
+ */
64
+ export function registerCommands(bindings: Record<string, BoundConstructor>): void {
65
+ for (const [name, commandClass] of Object.entries(bindings)) {
66
+ registerCommand(name, commandClass);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * The command proxy registered under a name, or `undefined` when nothing is registered under it.
72
+ */
73
+ export function resolveCommand(name: string): BoundConstructor | undefined {
74
+ return commands.get(name);
75
+ }
76
+
77
+ /**
78
+ * Every registered query name, sorted.
79
+ *
80
+ * A design-time tool uses this to offer the names a screen can actually bind to, and a diagnostics
81
+ * surface uses it to explain a placeholder - "this screen wants `AllInvoices`, and here is what is
82
+ * registered" is a far more useful message than the placeholder alone.
83
+ */
84
+ export function registeredQueryNames(): string[] {
85
+ return [...queries.keys()].sort();
86
+ }
87
+
88
+ /**
89
+ * Every registered command name, sorted.
90
+ */
91
+ export function registeredCommandNames(): string[] {
92
+ return [...commands.keys()].sort();
93
+ }
94
+
95
+ /**
96
+ * Forgets every registered query and command.
97
+ *
98
+ * The registry is module-level state, which is right for a host that registers once at startup but wrong
99
+ * for anything that switches between applications - Studio previewing a different project, or a spec
100
+ * that must not inherit what the previous one registered. Both need a way back to empty.
101
+ */
102
+ export function clearBindings(): void {
103
+ queries.clear();
104
+ commands.clear();
105
+ }
@@ -0,0 +1,30 @@
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
+ import { clearBindings, registerCommand, registerCommands, registeredCommandNames, resolveCommand, resolveQuery } from '../bindingRegistry';
5
+
6
+ class RegisterInvoice {}
7
+ class ApproveInvoice {}
8
+ class RegisterInvoiceV2 {}
9
+
10
+ describe('when a command is registered', () => {
11
+ beforeEach(() => {
12
+ clearBindings();
13
+ registerCommand('RegisterInvoice', RegisterInvoice);
14
+ registerCommands({ ApproveInvoice });
15
+ });
16
+
17
+ afterEach(() => clearBindings());
18
+
19
+ it('should resolve the class registered under the name', () => resolveCommand('RegisterInvoice')!.should.equal(RegisterInvoice));
20
+ it('should resolve every class registered in bulk', () => resolveCommand('ApproveInvoice')!.should.equal(ApproveInvoice));
21
+ it('should list every registered name in sorted order', () => registeredCommandNames().should.deep.equal(['ApproveInvoice', 'RegisterInvoice']));
22
+ it('should not resolve the same name as a query', () => (resolveQuery('RegisterInvoice') === undefined).should.be.true);
23
+
24
+ describe('and the same name is registered again', () => {
25
+ beforeEach(() => registerCommand('RegisterInvoice', RegisterInvoiceV2));
26
+
27
+ it('should resolve to the class registered last', () => resolveCommand('RegisterInvoice')!.should.equal(RegisterInvoiceV2));
28
+ it('should not list the name twice', () => registeredCommandNames().should.deep.equal(['ApproveInvoice', 'RegisterInvoice']));
29
+ });
30
+ });
@@ -0,0 +1,17 @@
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
+ import { clearBindings, registerQuery, resolveQuery } from '../bindingRegistry';
5
+
6
+ class AllInvoices {}
7
+
8
+ describe('when a query is not registered', () => {
9
+ beforeEach(() => {
10
+ clearBindings();
11
+ registerQuery('AllInvoices', AllInvoices);
12
+ });
13
+
14
+ afterEach(() => clearBindings());
15
+
16
+ it('should resolve to undefined rather than throwing', () => (resolveQuery('AllCustomers') === undefined).should.be.true);
17
+ });
@@ -0,0 +1,30 @@
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
+ import { clearBindings, registerQueries, registerQuery, registeredQueryNames, resolveCommand, resolveQuery } from '../bindingRegistry';
5
+
6
+ class AllInvoices {}
7
+ class InvoiceById {}
8
+ class OverdueInvoices {}
9
+
10
+ describe('when a query is registered', () => {
11
+ beforeEach(() => {
12
+ clearBindings();
13
+ registerQuery('AllInvoices', AllInvoices);
14
+ registerQueries({ InvoiceById, OverdueInvoices });
15
+ });
16
+
17
+ afterEach(() => clearBindings());
18
+
19
+ it('should resolve the class registered under the name', () => resolveQuery('AllInvoices')!.should.equal(AllInvoices));
20
+
21
+ it('should resolve every class registered in bulk', () => {
22
+ resolveQuery('InvoiceById')!.should.equal(InvoiceById);
23
+ resolveQuery('OverdueInvoices')!.should.equal(OverdueInvoices);
24
+ });
25
+
26
+ it('should list every registered name in sorted order', () =>
27
+ registeredQueryNames().should.deep.equal(['AllInvoices', 'InvoiceById', 'OverdueInvoices']));
28
+
29
+ it('should not resolve the same name as a command', () => (resolveCommand('AllInvoices') === undefined).should.be.true);
30
+ });
@@ -0,0 +1,29 @@
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
+ import {
5
+ clearBindings,
6
+ registerCommand,
7
+ registerQuery,
8
+ registeredCommandNames,
9
+ registeredQueryNames,
10
+ resolveCommand,
11
+ resolveQuery,
12
+ } from '../bindingRegistry';
13
+
14
+ class AllInvoices {}
15
+ class RegisterInvoice {}
16
+
17
+ describe('when bindings are cleared', () => {
18
+ beforeEach(() => {
19
+ clearBindings();
20
+ registerQuery('AllInvoices', AllInvoices);
21
+ registerCommand('RegisterInvoice', RegisterInvoice);
22
+ clearBindings();
23
+ });
24
+
25
+ it('should no longer resolve the query', () => (resolveQuery('AllInvoices') === undefined).should.be.true);
26
+ it('should no longer resolve the command', () => (resolveCommand('RegisterInvoice') === undefined).should.be.true);
27
+ it('should list no query names', () => registeredQueryNames().should.be.empty);
28
+ it('should list no command names', () => registeredCommandNames().should.be.empty);
29
+ });
@@ -0,0 +1,34 @@
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
+ import { externalComponent } from '../../given';
5
+ import { BindingKind } from '../BindingKind';
6
+ import { clearBindings, registerCommand, registerQuery } from '../bindingRegistry';
7
+ import { resolveElementBinding } from '../resolveElementBinding';
8
+
9
+ class RegisterInvoice {}
10
+ class SameNameQuery {}
11
+
12
+ describe('when resolving a command binding', () => {
13
+ beforeEach(() => {
14
+ clearBindings();
15
+ registerCommand('RegisterInvoice', RegisterInvoice);
16
+ registerQuery('ApproveInvoice', SameNameQuery);
17
+ });
18
+
19
+ afterEach(() => clearBindings());
20
+
21
+ describe('and the element names a registered command', () => {
22
+ const binding = () =>
23
+ resolveElementBinding(externalComponent('Cratis.Components:commandForm', { command: 'RegisterInvoice' }), BindingKind.Command);
24
+
25
+ it('should carry the registered class', () => binding().target!.should.equal(RegisterInvoice));
26
+ });
27
+
28
+ describe('and a query happens to be registered under the same name', () => {
29
+ const binding = () =>
30
+ resolveElementBinding(externalComponent('Cratis.Components:commandForm', { command: 'ApproveInvoice' }), BindingKind.Command);
31
+
32
+ it('should not satisfy a command binding from the query registry', () => (binding().target === undefined).should.be.true);
33
+ });
34
+ });
@@ -0,0 +1,45 @@
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
+ import { externalComponent } from '../../given';
5
+ import { BindingKind } from '../BindingKind';
6
+ import { clearBindings, registerQuery } from '../bindingRegistry';
7
+ import { resolveElementBinding } from '../resolveElementBinding';
8
+
9
+ class AllInvoices {}
10
+
11
+ describe('when resolving a query binding', () => {
12
+ beforeEach(() => {
13
+ clearBindings();
14
+ registerQuery('AllInvoices', AllInvoices);
15
+ });
16
+
17
+ afterEach(() => clearBindings());
18
+
19
+ describe('and the element names a registered query', () => {
20
+ const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable', { query: 'AllInvoices' }), BindingKind.Query);
21
+
22
+ it('should carry the name the element asked for', () => binding().name!.should.equal('AllInvoices'));
23
+ it('should carry the registered class', () => binding().target!.should.equal(AllInvoices));
24
+ });
25
+
26
+ describe('and the element names a query nothing is registered under', () => {
27
+ const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable', { query: 'AllCustomers' }), BindingKind.Query);
28
+
29
+ it('should still carry the name, so the placeholder can report it', () => binding().name!.should.equal('AllCustomers'));
30
+ it('should carry no class', () => (binding().target === undefined).should.be.true);
31
+ });
32
+
33
+ describe('and the element names no query at all', () => {
34
+ const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable'), BindingKind.Query);
35
+
36
+ it('should carry no name', () => (binding().name === undefined).should.be.true);
37
+ it('should carry no class', () => (binding().target === undefined).should.be.true);
38
+ });
39
+
40
+ describe('and the element carries the name under the command property instead', () => {
41
+ const binding = () => resolveElementBinding(externalComponent('Cratis.Components:dataTable', { command: 'AllInvoices' }), BindingKind.Query);
42
+
43
+ it('should not read a command name as a query name', () => (binding().name === undefined).should.be.true);
44
+ });
45
+ });
@@ -0,0 +1,11 @@
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
+ export * from './BindingKind';
5
+ export * from './BoundConstructor';
6
+ export * from './ElementBinding';
7
+ export * from './bindingRegistry';
8
+ export * from './resolveElementBinding';
9
+ export * from './Placeholder';
10
+ export * from './MissingBinding';
11
+ export * from './ArcRuntimeBoundary';
@@ -0,0 +1,33 @@
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
+ import { ExternalComponent } from '@cratis/scene.model';
5
+ import { stringProperty } from '../properties';
6
+ import { BindingKind } from './BindingKind';
7
+ import { ElementBinding } from './ElementBinding';
8
+ import { resolveCommand, resolveQuery } from './bindingRegistry';
9
+
10
+ /**
11
+ * The property an element carries its binding name in, per kind. Queries and commands use different
12
+ * property names so a single element could in principle carry both - a command dialog launched from a
13
+ * data page, say - without the two names colliding.
14
+ */
15
+ const bindingPropertyNames: Record<BindingKind, string> = {
16
+ [BindingKind.Query]: 'query',
17
+ [BindingKind.Command]: 'command',
18
+ };
19
+
20
+ /**
21
+ * Reads the binding name an element carries for the given kind and looks it up in the binding registry.
22
+ *
23
+ * Every Arc-bound adapter starts here, so the "name in, class out" step happens in exactly one place and
24
+ * every adapter reports a missing binding the same way. Nothing throws: an absent property and an
25
+ * unregistered name both come back as an {@link ElementBinding} with no `target`, which the adapter
26
+ * turns into a visible placeholder.
27
+ */
28
+ export function resolveElementBinding(element: ExternalComponent, kind: BindingKind): ElementBinding {
29
+ const name = stringProperty(element.properties, bindingPropertyNames[kind]);
30
+ if (name === undefined) return {};
31
+
32
+ return { name, target: kind === BindingKind.Query ? resolveQuery(name) : resolveCommand(name) };
33
+ }
@@ -0,0 +1,31 @@
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
+ import { Dropdown } from '@cratis/components/Dropdown';
5
+ import { RegisteredComponentProps } from '@cratis/scene.react';
6
+ import { booleanProperty, objectArrayProperty, stringProperty } from '../properties';
7
+
8
+ /**
9
+ * The `Cratis.Components:dropdown` component - `Dropdown` from `@cratis/components/Dropdown`.
10
+ *
11
+ * The library's own `Dropdown` rather than PrimeReact's, because it carries the overlay z-index fix the
12
+ * library applies across every overlay it owns - a dropdown inside a dialog renders above the dialog
13
+ * instead of behind it, which is the single most common overlay bug in a PrimeReact application.
14
+ *
15
+ * This is the standalone dropdown, not the command-form one: it takes its options from the screen and is
16
+ * not bound to a command property. Use `dropdownField` inside a `commandForm`.
17
+ */
18
+ export function SceneDropdown({ element }: RegisteredComponentProps) {
19
+ return (
20
+ <Dropdown
21
+ options={objectArrayProperty(element.properties, 'options') ?? []}
22
+ optionLabel={stringProperty(element.properties, 'optionLabel') ?? 'label'}
23
+ optionValue={stringProperty(element.properties, 'optionValue') ?? 'value'}
24
+ placeholder={stringProperty(element.properties, 'placeholder')}
25
+ disabled={booleanProperty(element.properties, 'disabled')}
26
+ showClear={booleanProperty(element.properties, 'showClear')}
27
+ filter={booleanProperty(element.properties, 'filter')}
28
+ className={stringProperty(element.properties, 'className')}
29
+ />
30
+ );
31
+ }
@@ -0,0 +1,17 @@
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
+ import { ErrorBoundary } from '@cratis/components/Common';
5
+ import { RegisteredComponentProps } from '@cratis/scene.react';
6
+
7
+ /**
8
+ * The `Cratis.Components:errorBoundary` component - `ErrorBoundary` from `@cratis/components/Common`.
9
+ *
10
+ * Lets a screen decide where a failure stops. React's default is that a throw anywhere unmounts the
11
+ * whole tree, which for a composed screen means one broken region takes the navigation with it; placing
12
+ * a boundary around a region scopes that to the region. Which regions deserve one is a design decision
13
+ * about the screen, which is precisely why it belongs in the screen rather than in the renderer.
14
+ */
15
+ export function SceneErrorBoundary({ slots }: RegisteredComponentProps) {
16
+ return <ErrorBoundary>{slots.content}</ErrorBoundary>;
17
+ }
@@ -0,0 +1,18 @@
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
+ import { IconDisplay } from '@cratis/components/Common';
5
+ import { RegisteredComponentProps } from '@cratis/scene.react';
6
+ import { stringProperty } from '../properties';
7
+
8
+ /**
9
+ * The `Cratis.Components:icon` component - `IconDisplay` from `@cratis/components/Common`.
10
+ *
11
+ * Takes an icon class name (`pi pi-check`) rather than an image, and normalizes the shorthand forms
12
+ * people actually write - `pi-check` on its own, or a bare name - into the class PrimeIcons expects.
13
+ * That normalization is the whole reason to route a screen's icons through this rather than emitting an
14
+ * `<i>`: a screen author writes what they remember and it still renders.
15
+ */
16
+ export function SceneIcon({ element }: RegisteredComponentProps) {
17
+ return <IconDisplay icon={stringProperty(element.properties, 'icon') ?? ''} className={stringProperty(element.properties, 'className')} />;
18
+ }
@@ -0,0 +1,28 @@
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
+ import { Tooltip } from '@cratis/components/Common';
5
+ import { RegisteredComponentProps } from '@cratis/scene.react';
6
+ import { booleanProperty, stringProperty, unionProperty } from '../properties';
7
+
8
+ /** Which side of the wrapped content the tooltip appears on. */
9
+ const positions = ['top', 'right', 'bottom', 'left'] as const;
10
+
11
+ /**
12
+ * The `Cratis.Components:tooltip` component - `Tooltip` from `@cratis/components/Common`.
13
+ *
14
+ * Wraps whatever is in its `content` slot and explains it on hover. `disabled` exists so a screen can
15
+ * keep the wrapper in place while turning the hint off, rather than restructuring the element tree to
16
+ * remove it - the tree is authored, and a conditional wrapper would be a worse thing to model.
17
+ */
18
+ export function SceneTooltip({ element, slots }: RegisteredComponentProps) {
19
+ return (
20
+ <Tooltip
21
+ content={stringProperty(element.properties, 'content') ?? ''}
22
+ position={unionProperty(element.properties, 'position', positions)}
23
+ disabled={booleanProperty(element.properties, 'disabled')}
24
+ >
25
+ {slots.content}
26
+ </Tooltip>
27
+ );
28
+ }
@@ -0,0 +1,7 @@
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
+ export * from './SceneIcon';
5
+ export * from './SceneTooltip';
6
+ export * from './SceneErrorBoundary';
7
+ export * from './SceneDropdown';
@@ -0,0 +1,91 @@
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
+ import { ComponentRegistry, componentRegistryKey } from '@cratis/scene.react';
5
+ import { SceneDataPage, SceneFormElement, ScenePage } from './pages';
6
+ import { SceneDataTable, SceneObservableDataTable } from './data';
7
+ import {
8
+ SceneCalendarField,
9
+ SceneCheckboxField,
10
+ SceneChipsField,
11
+ SceneColorPickerField,
12
+ SceneCommandForm,
13
+ SceneDropdownField,
14
+ SceneInputTextField,
15
+ SceneMultiSelectField,
16
+ SceneNumberField,
17
+ SceneRadioButtonField,
18
+ SceneRadioGroupField,
19
+ SceneSliderField,
20
+ SceneTextAreaField,
21
+ } from './forms';
22
+ import { SceneBusyIndicatorDialog, SceneCommandDialog, SceneConfirmationDialog, SceneDialog, SceneStepperCommandDialog } from './dialogs';
23
+ import { SceneDropdown, SceneErrorBoundary, SceneIcon, SceneTooltip } from './common';
24
+ import { SceneFilterPanel, SceneObjectContentEditor, SceneObjectNavigationalBar, SceneSchemaEditor, SceneTimeMachine } from './editors';
25
+ import { SceneToolbar, SceneToolbarButton, SceneToolbarGroup, SceneToolbarSeparator } from './toolbar';
26
+
27
+ /**
28
+ * The package name every component here is registered under, and the one a screen writes when it
29
+ * qualifies a name explicitly (`Cratis.Components.table`).
30
+ */
31
+ export const cratisComponentsPackageName = 'Cratis.Components';
32
+
33
+ /**
34
+ * The `Cratis.Components` package's component registry - the abstract names a screen can resolve to a
35
+ * real `@cratis/components` component.
36
+ *
37
+ * Names are `lowerCamelCase` and deliberately *abstract*: a screen names `dataTable`, not
38
+ * `DataTableForQuery`, so the same screen resolves against whichever package a profile ranks highest.
39
+ * Two of them - `table` and `dialog` - are names `core` and `PrimeReact` also declare, and that overlap
40
+ * is the point: a profile listing `core`, `PrimeReact`, `Cratis.Components` in that order resolves both
41
+ * here and records the others as shadowed, which is override priority doing exactly what it exists for.
42
+ *
43
+ * `table` and `dataTable` are the same component under two names. `dataTable` says what it is; `table`
44
+ * is what a screen written against the base vocabulary already says, and both should land on the
45
+ * query-aware implementation.
46
+ */
47
+ export const cratisComponents: ComponentRegistry = {
48
+ [componentRegistryKey(cratisComponentsPackageName, 'page')]: ScenePage,
49
+ [componentRegistryKey(cratisComponentsPackageName, 'dataPage')]: SceneDataPage,
50
+ [componentRegistryKey(cratisComponentsPackageName, 'formElement')]: SceneFormElement,
51
+
52
+ [componentRegistryKey(cratisComponentsPackageName, 'dataTable')]: SceneDataTable,
53
+ [componentRegistryKey(cratisComponentsPackageName, 'table')]: SceneDataTable,
54
+ [componentRegistryKey(cratisComponentsPackageName, 'observableDataTable')]: SceneObservableDataTable,
55
+
56
+ [componentRegistryKey(cratisComponentsPackageName, 'commandForm')]: SceneCommandForm,
57
+ [componentRegistryKey(cratisComponentsPackageName, 'inputTextField')]: SceneInputTextField,
58
+ [componentRegistryKey(cratisComponentsPackageName, 'numberField')]: SceneNumberField,
59
+ [componentRegistryKey(cratisComponentsPackageName, 'checkboxField')]: SceneCheckboxField,
60
+ [componentRegistryKey(cratisComponentsPackageName, 'textAreaField')]: SceneTextAreaField,
61
+ [componentRegistryKey(cratisComponentsPackageName, 'dropdownField')]: SceneDropdownField,
62
+ [componentRegistryKey(cratisComponentsPackageName, 'sliderField')]: SceneSliderField,
63
+ [componentRegistryKey(cratisComponentsPackageName, 'calendarField')]: SceneCalendarField,
64
+ [componentRegistryKey(cratisComponentsPackageName, 'colorPickerField')]: SceneColorPickerField,
65
+ [componentRegistryKey(cratisComponentsPackageName, 'multiSelectField')]: SceneMultiSelectField,
66
+ [componentRegistryKey(cratisComponentsPackageName, 'chipsField')]: SceneChipsField,
67
+ [componentRegistryKey(cratisComponentsPackageName, 'radioButtonField')]: SceneRadioButtonField,
68
+ [componentRegistryKey(cratisComponentsPackageName, 'radioGroupField')]: SceneRadioGroupField,
69
+
70
+ [componentRegistryKey(cratisComponentsPackageName, 'dialog')]: SceneDialog,
71
+ [componentRegistryKey(cratisComponentsPackageName, 'confirmationDialog')]: SceneConfirmationDialog,
72
+ [componentRegistryKey(cratisComponentsPackageName, 'busyIndicatorDialog')]: SceneBusyIndicatorDialog,
73
+ [componentRegistryKey(cratisComponentsPackageName, 'commandDialog')]: SceneCommandDialog,
74
+ [componentRegistryKey(cratisComponentsPackageName, 'stepperCommandDialog')]: SceneStepperCommandDialog,
75
+
76
+ [componentRegistryKey(cratisComponentsPackageName, 'icon')]: SceneIcon,
77
+ [componentRegistryKey(cratisComponentsPackageName, 'tooltip')]: SceneTooltip,
78
+ [componentRegistryKey(cratisComponentsPackageName, 'dropdown')]: SceneDropdown,
79
+ [componentRegistryKey(cratisComponentsPackageName, 'errorBoundary')]: SceneErrorBoundary,
80
+
81
+ [componentRegistryKey(cratisComponentsPackageName, 'objectContentEditor')]: SceneObjectContentEditor,
82
+ [componentRegistryKey(cratisComponentsPackageName, 'objectNavigationalBar')]: SceneObjectNavigationalBar,
83
+ [componentRegistryKey(cratisComponentsPackageName, 'schemaEditor')]: SceneSchemaEditor,
84
+ [componentRegistryKey(cratisComponentsPackageName, 'timeMachine')]: SceneTimeMachine,
85
+ [componentRegistryKey(cratisComponentsPackageName, 'filterPanel')]: SceneFilterPanel,
86
+
87
+ [componentRegistryKey(cratisComponentsPackageName, 'toolbar')]: SceneToolbar,
88
+ [componentRegistryKey(cratisComponentsPackageName, 'toolbarButton')]: SceneToolbarButton,
89
+ [componentRegistryKey(cratisComponentsPackageName, 'toolbarGroup')]: SceneToolbarGroup,
90
+ [componentRegistryKey(cratisComponentsPackageName, 'toolbarSeparator')]: SceneToolbarSeparator,
91
+ };