@cratis/scene.blueprint.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.
- package/.storybook/main.ts +61 -0
- package/.storybook/preview.tsx +42 -0
- package/BorrowedComponentName.ts +22 -0
- package/ComponentName.ts +27 -0
- package/CompositeName.ts +97 -0
- package/README.md +40 -0
- package/componentsBlueprint.ts +72 -0
- package/componentsBlueprintComponents.ts +23 -0
- package/dist/cjs/BorrowedComponentName.js +25 -0
- package/dist/cjs/BorrowedComponentName.js.map +1 -0
- package/dist/cjs/ComponentName.js +30 -0
- package/dist/cjs/ComponentName.js.map +1 -0
- package/dist/cjs/CompositeName.js +52 -0
- package/dist/cjs/CompositeName.js.map +1 -0
- package/dist/cjs/componentsBlueprint.js +93 -0
- package/dist/cjs/componentsBlueprint.js.map +1 -0
- package/dist/cjs/componentsBlueprintComponents.js +27 -0
- package/dist/cjs/componentsBlueprintComponents.js.map +1 -0
- package/dist/cjs/gallery/DialogTemplatePreview.js +46 -0
- package/dist/cjs/gallery/DialogTemplatePreview.js.map +1 -0
- package/dist/cjs/gallery/GalleryScreenPreview.js +65 -0
- package/dist/cjs/gallery/GalleryScreenPreview.js.map +1 -0
- package/dist/cjs/gallery/applicationChrome.js +137 -0
- package/dist/cjs/gallery/applicationChrome.js.map +1 -0
- package/dist/cjs/gallery/navigation.js +128 -0
- package/dist/cjs/gallery/navigation.js.map +1 -0
- package/dist/cjs/gallery/previewProfile.js +87 -0
- package/dist/cjs/gallery/previewProfile.js.map +1 -0
- package/dist/cjs/gallery/screens.js +80 -0
- package/dist/cjs/gallery/screens.js.map +1 -0
- package/dist/cjs/header/ArcPageHeader.js +65 -0
- package/dist/cjs/header/ArcPageHeader.js.map +1 -0
- package/dist/cjs/header/deriveArcHeading.js +51 -0
- package/dist/cjs/header/deriveArcHeading.js.map +1 -0
- package/dist/cjs/header/humanizeBindingName.js +36 -0
- package/dist/cjs/header/humanizeBindingName.js.map +1 -0
- package/dist/cjs/index.js +119 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/packageName.js +15 -0
- package/dist/cjs/packageName.js.map +1 -0
- package/dist/cjs/templates/SampleBindingName.js +39 -0
- package/dist/cjs/templates/SampleBindingName.js.map +1 -0
- package/dist/cjs/templates/commandTemplates.js +82 -0
- package/dist/cjs/templates/commandTemplates.js.map +1 -0
- package/dist/cjs/templates/dataElements.js +131 -0
- package/dist/cjs/templates/dataElements.js.map +1 -0
- package/dist/cjs/templates/dialogElements.js +69 -0
- package/dist/cjs/templates/dialogElements.js.map +1 -0
- package/dist/cjs/templates/dialogTemplates.js +118 -0
- package/dist/cjs/templates/dialogTemplates.js.map +1 -0
- package/dist/cjs/templates/editorElements.js +81 -0
- package/dist/cjs/templates/editorElements.js.map +1 -0
- package/dist/cjs/templates/editorTemplates.js +172 -0
- package/dist/cjs/templates/editorTemplates.js.map +1 -0
- package/dist/cjs/templates/elements.js +101 -0
- package/dist/cjs/templates/elements.js.map +1 -0
- package/dist/cjs/templates/formElements.js +77 -0
- package/dist/cjs/templates/formElements.js.map +1 -0
- package/dist/cjs/templates/listTemplates.js +187 -0
- package/dist/cjs/templates/listTemplates.js.map +1 -0
- package/dist/cjs/templates/nesting.js +150 -0
- package/dist/cjs/templates/nesting.js.map +1 -0
- package/dist/cjs/templates/sampleData.js +141 -0
- package/dist/cjs/templates/sampleData.js.map +1 -0
- package/dist/cjs/templates/screenTemplates.js +41 -0
- package/dist/cjs/templates/screenTemplates.js.map +1 -0
- package/dist/cjs/templates/workspaceTemplates.js +212 -0
- package/dist/cjs/templates/workspaceTemplates.js.map +1 -0
- package/dist/esm/BorrowedComponentName.d.ts +4 -0
- package/dist/esm/BorrowedComponentName.d.ts.map +1 -0
- package/dist/esm/BorrowedComponentName.js +23 -0
- package/dist/esm/BorrowedComponentName.js.map +1 -0
- package/dist/esm/ComponentName.d.ts +4 -0
- package/dist/esm/ComponentName.d.ts.map +1 -0
- package/dist/esm/ComponentName.js +28 -0
- package/dist/esm/ComponentName.js.map +1 -0
- package/dist/esm/CompositeName.d.ts +28 -0
- package/dist/esm/CompositeName.d.ts.map +1 -0
- package/dist/esm/CompositeName.js +50 -0
- package/dist/esm/CompositeName.js.map +1 -0
- package/dist/esm/componentsBlueprint.d.ts +5 -0
- package/dist/esm/componentsBlueprint.d.ts.map +1 -0
- package/dist/esm/componentsBlueprint.js +90 -0
- package/dist/esm/componentsBlueprint.js.map +1 -0
- package/dist/esm/componentsBlueprintComponents.d.ts +3 -0
- package/dist/esm/componentsBlueprintComponents.d.ts.map +1 -0
- package/dist/esm/componentsBlueprintComponents.js +25 -0
- package/dist/esm/componentsBlueprintComponents.js.map +1 -0
- package/dist/esm/for_ArcPageHeader/when_rendering_a_gallery_screen.d.ts +2 -0
- package/dist/esm/for_ArcPageHeader/when_rendering_a_gallery_screen.d.ts.map +1 -0
- package/dist/esm/for_ArcPageHeader/when_rendering_a_gallery_screen.js +57 -0
- package/dist/esm/for_ArcPageHeader/when_rendering_a_gallery_screen.js.map +1 -0
- package/dist/esm/for_CompositeName/when_checking_the_names_against_the_packages_that_declare_them.d.ts +2 -0
- package/dist/esm/for_CompositeName/when_checking_the_names_against_the_packages_that_declare_them.d.ts.map +1 -0
- package/dist/esm/for_CompositeName/when_checking_the_names_against_the_packages_that_declare_them.js +26 -0
- package/dist/esm/for_CompositeName/when_checking_the_names_against_the_packages_that_declare_them.js.map +1 -0
- package/dist/esm/for_componentsBlueprint/when_resolving_its_dependencies.d.ts +2 -0
- package/dist/esm/for_componentsBlueprint/when_resolving_its_dependencies.d.ts.map +1 -0
- package/dist/esm/for_componentsBlueprint/when_resolving_its_dependencies.js +65 -0
- package/dist/esm/for_componentsBlueprint/when_resolving_its_dependencies.js.map +1 -0
- package/dist/esm/for_componentsBlueprint/when_validating_the_bundle.d.ts +2 -0
- package/dist/esm/for_componentsBlueprint/when_validating_the_bundle.d.ts.map +1 -0
- package/dist/esm/for_componentsBlueprint/when_validating_the_bundle.js +41 -0
- package/dist/esm/for_componentsBlueprint/when_validating_the_bundle.js.map +1 -0
- package/dist/esm/for_componentsGalleryScreens/when_checking_the_layouts_and_slots_they_fill.d.ts +2 -0
- package/dist/esm/for_componentsGalleryScreens/when_checking_the_layouts_and_slots_they_fill.d.ts.map +1 -0
- package/dist/esm/for_componentsGalleryScreens/when_checking_the_layouts_and_slots_they_fill.js +38 -0
- package/dist/esm/for_componentsGalleryScreens/when_checking_the_layouts_and_slots_they_fill.js.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_checking_that_arrangements_reference_declared_slots.d.ts +2 -0
- package/dist/esm/for_componentsScreenTemplates/when_checking_that_arrangements_reference_declared_slots.d.ts.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_checking_that_arrangements_reference_declared_slots.js +47 -0
- package/dist/esm/for_componentsScreenTemplates/when_checking_that_arrangements_reference_declared_slots.js.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_following_the_nesting_chain.d.ts +2 -0
- package/dist/esm/for_componentsScreenTemplates/when_following_the_nesting_chain.d.ts.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_following_the_nesting_chain.js +56 -0
- package/dist/esm/for_componentsScreenTemplates/when_following_the_nesting_chain.js.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.d.ts +2 -0
- package/dist/esm/for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.d.ts.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.js +31 -0
- package/dist/esm/for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.js.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.d.ts +2 -0
- package/dist/esm/for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.d.ts.map +1 -0
- package/dist/esm/for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.js +54 -0
- package/dist/esm/for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.js.map +1 -0
- package/dist/esm/for_deriveArcHeading/when_no_binding_is_named.d.ts +2 -0
- package/dist/esm/for_deriveArcHeading/when_no_binding_is_named.d.ts.map +1 -0
- package/dist/esm/for_deriveArcHeading/when_no_binding_is_named.js +27 -0
- package/dist/esm/for_deriveArcHeading/when_no_binding_is_named.js.map +1 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_not_registered.d.ts +2 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_not_registered.d.ts.map +1 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_not_registered.js +18 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_not_registered.js.map +1 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_registered.d.ts +2 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_registered.d.ts.map +1 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_registered.js +26 -0
- package/dist/esm/for_deriveArcHeading/when_the_binding_is_registered.js.map +1 -0
- package/dist/esm/for_humanizeBindingName/when_reading_a_proxy_name.d.ts +2 -0
- package/dist/esm/for_humanizeBindingName/when_reading_a_proxy_name.d.ts.map +1 -0
- package/dist/esm/for_humanizeBindingName/when_reading_a_proxy_name.js +25 -0
- package/dist/esm/for_humanizeBindingName/when_reading_a_proxy_name.js.map +1 -0
- package/dist/esm/gallery/ArcPages.stories.d.ts +30 -0
- package/dist/esm/gallery/ArcPages.stories.d.ts.map +1 -0
- package/dist/esm/gallery/ArcPages.stories.js +34 -0
- package/dist/esm/gallery/ArcPages.stories.js.map +1 -0
- package/dist/esm/gallery/Bindings.stories.d.ts +22 -0
- package/dist/esm/gallery/Bindings.stories.d.ts.map +1 -0
- package/dist/esm/gallery/Bindings.stories.js +78 -0
- package/dist/esm/gallery/Bindings.stories.js.map +1 -0
- package/dist/esm/gallery/DialogTemplatePreview.d.ts +7 -0
- package/dist/esm/gallery/DialogTemplatePreview.d.ts.map +1 -0
- package/dist/esm/gallery/DialogTemplatePreview.js +44 -0
- package/dist/esm/gallery/DialogTemplatePreview.js.map +1 -0
- package/dist/esm/gallery/DialogTemplates.stories.d.ts +21 -0
- package/dist/esm/gallery/DialogTemplates.stories.d.ts.map +1 -0
- package/dist/esm/gallery/DialogTemplates.stories.js +23 -0
- package/dist/esm/gallery/DialogTemplates.stories.js.map +1 -0
- package/dist/esm/gallery/GalleryScreenPreview.d.ts +10 -0
- package/dist/esm/gallery/GalleryScreenPreview.d.ts.map +1 -0
- package/dist/esm/gallery/GalleryScreenPreview.js +62 -0
- package/dist/esm/gallery/GalleryScreenPreview.js.map +1 -0
- package/dist/esm/gallery/applicationChrome.d.ts +3 -0
- package/dist/esm/gallery/applicationChrome.d.ts.map +1 -0
- package/dist/esm/gallery/applicationChrome.js +135 -0
- package/dist/esm/gallery/applicationChrome.js.map +1 -0
- package/dist/esm/gallery/index.d.ts +7 -0
- package/dist/esm/gallery/index.d.ts.map +1 -0
- package/dist/esm/gallery/index.js +7 -0
- package/dist/esm/gallery/index.js.map +1 -0
- package/dist/esm/gallery/navigation.d.ts +9 -0
- package/dist/esm/gallery/navigation.d.ts.map +1 -0
- package/dist/esm/gallery/navigation.js +121 -0
- package/dist/esm/gallery/navigation.js.map +1 -0
- package/dist/esm/gallery/previewProfile.d.ts +6 -0
- package/dist/esm/gallery/previewProfile.d.ts.map +1 -0
- package/dist/esm/gallery/previewProfile.js +83 -0
- package/dist/esm/gallery/previewProfile.js.map +1 -0
- package/dist/esm/gallery/screens.d.ts +4 -0
- package/dist/esm/gallery/screens.d.ts.map +1 -0
- package/dist/esm/gallery/screens.js +77 -0
- package/dist/esm/gallery/screens.js.map +1 -0
- package/dist/esm/header/ArcHeading.d.ts +9 -0
- package/dist/esm/header/ArcHeading.d.ts.map +1 -0
- package/dist/esm/header/ArcHeading.js +2 -0
- package/dist/esm/header/ArcHeading.js.map +1 -0
- package/dist/esm/header/ArcPageHeader.d.ts +3 -0
- package/dist/esm/header/ArcPageHeader.d.ts.map +1 -0
- package/dist/esm/header/ArcPageHeader.js +63 -0
- package/dist/esm/header/ArcPageHeader.js.map +1 -0
- package/dist/esm/header/deriveArcHeading.d.ts +4 -0
- package/dist/esm/header/deriveArcHeading.d.ts.map +1 -0
- package/dist/esm/header/deriveArcHeading.js +49 -0
- package/dist/esm/header/deriveArcHeading.js.map +1 -0
- package/dist/esm/header/humanizeBindingName.d.ts +2 -0
- package/dist/esm/header/humanizeBindingName.d.ts.map +1 -0
- package/dist/esm/header/humanizeBindingName.js +34 -0
- package/dist/esm/header/humanizeBindingName.js.map +1 -0
- package/dist/esm/header/index.d.ts +5 -0
- package/dist/esm/header/index.d.ts.map +1 -0
- package/dist/esm/header/index.js +5 -0
- package/dist/esm/header/index.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +30 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/packageName.d.ts +2 -0
- package/dist/esm/packageName.d.ts.map +1 -0
- package/dist/esm/packageName.js +13 -0
- package/dist/esm/packageName.js.map +1 -0
- package/dist/esm/templates/ArcHeaderOptions.d.ts +8 -0
- package/dist/esm/templates/ArcHeaderOptions.d.ts.map +1 -0
- package/dist/esm/templates/ArcHeaderOptions.js +2 -0
- package/dist/esm/templates/ArcHeaderOptions.js.map +1 -0
- package/dist/esm/templates/ColumnDefinition.d.ts +5 -0
- package/dist/esm/templates/ColumnDefinition.d.ts.map +1 -0
- package/dist/esm/templates/ColumnDefinition.js +2 -0
- package/dist/esm/templates/ColumnDefinition.js.map +1 -0
- package/dist/esm/templates/SampleBindingName.d.ts +11 -0
- package/dist/esm/templates/SampleBindingName.d.ts.map +1 -0
- package/dist/esm/templates/SampleBindingName.js +37 -0
- package/dist/esm/templates/SampleBindingName.js.map +1 -0
- package/dist/esm/templates/TableOptions.d.ts +6 -0
- package/dist/esm/templates/TableOptions.d.ts.map +1 -0
- package/dist/esm/templates/TableOptions.js +2 -0
- package/dist/esm/templates/TableOptions.js.map +1 -0
- package/dist/esm/templates/commandTemplates.d.ts +4 -0
- package/dist/esm/templates/commandTemplates.d.ts.map +1 -0
- package/dist/esm/templates/commandTemplates.js +79 -0
- package/dist/esm/templates/commandTemplates.js.map +1 -0
- package/dist/esm/templates/dataElements.d.ts +11 -0
- package/dist/esm/templates/dataElements.d.ts.map +1 -0
- package/dist/esm/templates/dataElements.js +123 -0
- package/dist/esm/templates/dataElements.js.map +1 -0
- package/dist/esm/templates/dialogElements.d.ts +5 -0
- package/dist/esm/templates/dialogElements.d.ts.map +1 -0
- package/dist/esm/templates/dialogElements.js +65 -0
- package/dist/esm/templates/dialogElements.js.map +1 -0
- package/dist/esm/templates/dialogTemplates.d.ts +6 -0
- package/dist/esm/templates/dialogTemplates.d.ts.map +1 -0
- package/dist/esm/templates/dialogTemplates.js +113 -0
- package/dist/esm/templates/dialogTemplates.js.map +1 -0
- package/dist/esm/templates/editorElements.d.ts +11 -0
- package/dist/esm/templates/editorElements.d.ts.map +1 -0
- package/dist/esm/templates/editorElements.js +74 -0
- package/dist/esm/templates/editorElements.js.map +1 -0
- package/dist/esm/templates/editorTemplates.d.ts +5 -0
- package/dist/esm/templates/editorTemplates.d.ts.map +1 -0
- package/dist/esm/templates/editorTemplates.js +168 -0
- package/dist/esm/templates/editorTemplates.js.map +1 -0
- package/dist/esm/templates/elements.d.ts +11 -0
- package/dist/esm/templates/elements.d.ts.map +1 -0
- package/dist/esm/templates/elements.js +92 -0
- package/dist/esm/templates/elements.js.map +1 -0
- package/dist/esm/templates/formElements.d.ts +11 -0
- package/dist/esm/templates/formElements.d.ts.map +1 -0
- package/dist/esm/templates/formElements.js +70 -0
- package/dist/esm/templates/formElements.js.map +1 -0
- package/dist/esm/templates/index.d.ts +18 -0
- package/dist/esm/templates/index.d.ts.map +1 -0
- package/dist/esm/templates/index.js +18 -0
- package/dist/esm/templates/index.js.map +1 -0
- package/dist/esm/templates/listTemplates.d.ts +6 -0
- package/dist/esm/templates/listTemplates.d.ts.map +1 -0
- package/dist/esm/templates/listTemplates.js +182 -0
- package/dist/esm/templates/listTemplates.js.map +1 -0
- package/dist/esm/templates/nesting.d.ts +6 -0
- package/dist/esm/templates/nesting.d.ts.map +1 -0
- package/dist/esm/templates/nesting.js +145 -0
- package/dist/esm/templates/nesting.js.map +1 -0
- package/dist/esm/templates/sampleData.d.ts +10 -0
- package/dist/esm/templates/sampleData.d.ts.map +1 -0
- package/dist/esm/templates/sampleData.js +134 -0
- package/dist/esm/templates/sampleData.js.map +1 -0
- package/dist/esm/templates/screenTemplates.d.ts +4 -0
- package/dist/esm/templates/screenTemplates.d.ts.map +1 -0
- package/dist/esm/templates/screenTemplates.js +38 -0
- package/dist/esm/templates/screenTemplates.js.map +1 -0
- package/dist/esm/templates/workspaceTemplates.d.ts +5 -0
- package/dist/esm/templates/workspaceTemplates.d.ts.map +1 -0
- package/dist/esm/templates/workspaceTemplates.js +208 -0
- package/dist/esm/templates/workspaceTemplates.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/for_ArcPageHeader/when_rendering_a_gallery_screen.tsx +79 -0
- package/for_CompositeName/when_checking_the_names_against_the_packages_that_declare_them.ts +41 -0
- package/for_componentsBlueprint/when_resolving_its_dependencies.ts +85 -0
- package/for_componentsBlueprint/when_validating_the_bundle.ts +55 -0
- package/for_componentsGalleryScreens/when_checking_the_layouts_and_slots_they_fill.ts +56 -0
- package/for_componentsScreenTemplates/when_checking_that_arrangements_reference_declared_slots.ts +66 -0
- package/for_componentsScreenTemplates/when_following_the_nesting_chain.ts +83 -0
- package/for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.ts +51 -0
- package/for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.ts +72 -0
- package/for_deriveArcHeading/when_no_binding_is_named.ts +42 -0
- package/for_deriveArcHeading/when_the_binding_is_not_registered.ts +25 -0
- package/for_deriveArcHeading/when_the_binding_is_registered.ts +35 -0
- package/for_humanizeBindingName/when_reading_a_proxy_name.ts +34 -0
- package/gallery/ArcPages.stories.tsx +80 -0
- package/gallery/Bindings.stories.tsx +134 -0
- package/gallery/DialogTemplatePreview.tsx +49 -0
- package/gallery/DialogTemplates.stories.tsx +44 -0
- package/gallery/GalleryScreenPreview.tsx +70 -0
- package/gallery/applicationChrome.ts +108 -0
- package/gallery/index.ts +9 -0
- package/gallery/navigation.ts +63 -0
- package/gallery/previewProfile.ts +68 -0
- package/gallery/screens.ts +75 -0
- package/header/ArcHeading.ts +39 -0
- package/header/ArcPageHeader.tsx +44 -0
- package/header/deriveArcHeading.ts +47 -0
- package/header/humanizeBindingName.ts +36 -0
- package/header/index.ts +7 -0
- package/index.ts +12 -0
- package/package.json +71 -0
- package/packageName.ts +12 -0
- package/templates/ArcHeaderOptions.ts +27 -0
- package/templates/ColumnDefinition.ts +18 -0
- package/templates/SampleBindingName.ts +50 -0
- package/templates/TableOptions.ts +22 -0
- package/templates/commandTemplates.ts +59 -0
- package/templates/dataElements.ts +97 -0
- package/templates/dialogElements.ts +53 -0
- package/templates/dialogTemplates.ts +105 -0
- package/templates/editorElements.ts +69 -0
- package/templates/editorTemplates.ts +129 -0
- package/templates/elements.ts +81 -0
- package/templates/formElements.ts +61 -0
- package/templates/index.ts +20 -0
- package/templates/listTemplates.ts +142 -0
- package/templates/nesting.ts +118 -0
- package/templates/sampleData.ts +81 -0
- package/templates/screenTemplates.ts +35 -0
- package/templates/workspaceTemplates.ts +163 -0
package/dist/esm/for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { resolveScreenTemplates } from '@cratis/scene.engine';
|
|
2
|
+
import { appShellLayout, defaultBlueprint } from '@cratis/scene.blueprint.default';
|
|
3
|
+
import { componentsPageTemplates } from '../templates';
|
|
4
|
+
describe('when placing them in the default blueprint layout', () => {
|
|
5
|
+
const templates = [...(defaultBlueprint.screenTemplates ?? []), ...componentsPageTemplates];
|
|
6
|
+
const resolution = resolveScreenTemplates(appShellLayout, templates);
|
|
7
|
+
const ownNames = new Set(componentsPageTemplates.map(template => template.name));
|
|
8
|
+
const ownPlacements = resolution.placements.filter(placement => ownNames.has(placement.template));
|
|
9
|
+
it('should have templates to place', () => {
|
|
10
|
+
componentsPageTemplates.should.not.be.empty;
|
|
11
|
+
});
|
|
12
|
+
it('should place every one of them', () => {
|
|
13
|
+
ownPlacements.map(placement => placement.template).sort().should.deep.equal([...ownNames].sort());
|
|
14
|
+
});
|
|
15
|
+
it('should leave none of them unplaced, even with the other blueprint templates in scope', () => {
|
|
16
|
+
resolution.unplaced.filter(unplaced => ownNames.has(unplaced.template)).should.be.empty;
|
|
17
|
+
});
|
|
18
|
+
it('should place every one directly inside the layout rather than inside another template', () => {
|
|
19
|
+
ownPlacements.filter(placement => placement.container !== appShellLayout.name).should.be.empty;
|
|
20
|
+
});
|
|
21
|
+
it('should place every one at the first level below the layout', () => {
|
|
22
|
+
ownPlacements.filter(placement => placement.depth !== 1).should.be.empty;
|
|
23
|
+
});
|
|
24
|
+
it('should place every one in the content slot, which is the only region a layout offers a screen', () => {
|
|
25
|
+
ownPlacements.filter(placement => placement.slot !== 'content').should.be.empty;
|
|
26
|
+
});
|
|
27
|
+
it('should introduce no nesting cycle', () => {
|
|
28
|
+
resolution.cycles.should.deep.equal([]);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=when_placing_them_in_the_default_blueprint_layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_placing_them_in_the_default_blueprint_layout.js","sourceRoot":"","sources":["../../../for_componentsScreenTemplates/when_placing_them_in_the_default_blueprint_layout.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAYvD,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC/D,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,GAAG,uBAAuB,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,sBAAsB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElG,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC5F,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAC7F,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACrG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_resolving_the_component_names_they_reference.d.ts","sourceRoot":"","sources":["../../../for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.ts"],"names":[],"mappings":""}
|
package/dist/esm/for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { resolveComponentName } from '@cratis/scene.engine';
|
|
2
|
+
import { composeScreenElement, defaultBlueprintName, distinctComponentNames } from '@cratis/scene.blueprint.default';
|
|
3
|
+
import { cratisComponentsPackageManifest } from '@cratis/scene.components';
|
|
4
|
+
import { ComponentName } from '../ComponentName';
|
|
5
|
+
import { CompositeName } from '../CompositeName';
|
|
6
|
+
import { componentsBlueprintCatalog, componentsBlueprintProfile, componentsGalleryScreens } from '../gallery';
|
|
7
|
+
import { componentsBlueprintName } from '../packageName';
|
|
8
|
+
import { componentsDialogTemplates } from '../templates';
|
|
9
|
+
describe('when resolving the component names they reference', () => {
|
|
10
|
+
const fromScreens = distinctComponentNames(componentsGalleryScreens.map(composeScreenElement));
|
|
11
|
+
const fromDialogs = distinctComponentNames(componentsDialogTemplates.flatMap(template => Object.values(template.content ?? {}).flat()));
|
|
12
|
+
const names = [...new Set([...fromScreens, ...fromDialogs])].sort();
|
|
13
|
+
const resolutions = names.map(name => ({ name, resolution: resolveComponentName(name, componentsBlueprintProfile, componentsBlueprintCatalog) }));
|
|
14
|
+
it('should reference something', () => {
|
|
15
|
+
names.should.not.be.empty;
|
|
16
|
+
});
|
|
17
|
+
it('should reference something from the dialog templates too', () => {
|
|
18
|
+
fromDialogs.should.not.be.empty;
|
|
19
|
+
});
|
|
20
|
+
it('should resolve every referenced name against the profile', () => {
|
|
21
|
+
resolutions
|
|
22
|
+
.filter(entry => entry.resolution === undefined)
|
|
23
|
+
.map(entry => entry.name)
|
|
24
|
+
.should.be.empty;
|
|
25
|
+
});
|
|
26
|
+
it('should resolve its own page header to itself', () => {
|
|
27
|
+
resolveComponentName(ComponentName.ArcPageHeader, componentsBlueprintProfile, componentsBlueprintCatalog).package.should.equal(componentsBlueprintName);
|
|
28
|
+
});
|
|
29
|
+
it('should reference every component it registers, so nothing is declared and then unused', () => {
|
|
30
|
+
const referenced = new Set(names);
|
|
31
|
+
Object.values(ComponentName)
|
|
32
|
+
.filter(name => !referenced.has(name))
|
|
33
|
+
.should.be.empty;
|
|
34
|
+
});
|
|
35
|
+
it('should resolve the shell components to the blueprint it layers on', () => {
|
|
36
|
+
resolveComponentName('appShell', componentsBlueprintProfile, componentsBlueprintCatalog).package.should.equal(defaultBlueprintName);
|
|
37
|
+
});
|
|
38
|
+
it('should resolve the Arc-bound composites to the component library', () => {
|
|
39
|
+
resolutions
|
|
40
|
+
.filter(entry => Object.values(CompositeName).includes(entry.name))
|
|
41
|
+
.filter(entry => entry.resolution?.package !== cratisComponentsPackageManifest.name)
|
|
42
|
+
.map(entry => entry.name)
|
|
43
|
+
.should.be.empty;
|
|
44
|
+
});
|
|
45
|
+
it('should resolve a name both libraries declare to the Arc-aware one, and record the other as shadowed', () => {
|
|
46
|
+
const dataTable = resolveComponentName(CompositeName.DataTable, componentsBlueprintProfile, componentsBlueprintCatalog);
|
|
47
|
+
dataTable.package.should.equal(cratisComponentsPackageManifest.name);
|
|
48
|
+
dataTable.shadows.should.contain('PrimeReact');
|
|
49
|
+
});
|
|
50
|
+
it('should resolve the borrowed column to PrimeReact, since neither library declares one', () => {
|
|
51
|
+
resolveComponentName('column', componentsBlueprintProfile, componentsBlueprintCatalog).package.should.equal('PrimeReact');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=when_resolving_the_component_names_they_reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_resolving_the_component_names_they_reference.js","sourceRoot":"","sources":["../../../for_componentsScreenTemplates/when_resolving_the_component_names_they_reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_no_binding_is_named.d.ts","sourceRoot":"","sources":["../../../for_deriveArcHeading/when_no_binding_is_named.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BindingKind } from '@cratis/scene.components';
|
|
2
|
+
import { deriveArcHeading } from '../header';
|
|
3
|
+
describe('when no binding is named', () => {
|
|
4
|
+
const heading = deriveArcHeading({ title: 'InvoiceRegistered' }, {}, BindingKind.Query);
|
|
5
|
+
it('should use the title the template gave it', () => {
|
|
6
|
+
heading.title.should.equal('InvoiceRegistered');
|
|
7
|
+
});
|
|
8
|
+
it('should build a trail of just the title when no section was given', () => {
|
|
9
|
+
heading.trail.should.deep.equal(['InvoiceRegistered']);
|
|
10
|
+
});
|
|
11
|
+
it('should report that it is not bound', () => {
|
|
12
|
+
heading.isBound.should.be.false;
|
|
13
|
+
});
|
|
14
|
+
it('should state the absence plainly rather than naming a binding nobody asked for', () => {
|
|
15
|
+
heading.bindingLabel.should.equal('No binding');
|
|
16
|
+
});
|
|
17
|
+
it('should carry no binding name', () => {
|
|
18
|
+
(heading.bindingName === undefined).should.be.true;
|
|
19
|
+
});
|
|
20
|
+
describe('and the template gave no title either', () => {
|
|
21
|
+
const untitled = deriveArcHeading({}, {}, BindingKind.Query);
|
|
22
|
+
it('should fall back to something readable rather than an empty heading', () => {
|
|
23
|
+
untitled.title.should.equal('Untitled page');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=when_no_binding_is_named.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_no_binding_is_named.js","sourceRoot":"","sources":["../../../for_deriveArcHeading/when_no_binding_is_named.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAO7C,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAExF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACxE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACtF,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7D,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC3E,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_the_binding_is_not_registered.d.ts","sourceRoot":"","sources":["../../../for_deriveArcHeading/when_the_binding_is_not_registered.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BindingKind } from '@cratis/scene.components';
|
|
2
|
+
import { deriveArcHeading } from '../header';
|
|
3
|
+
describe('when the binding is not registered', () => {
|
|
4
|
+
const heading = deriveArcHeading({ section: 'Billing' }, { name: 'RecordAdjustment' }, BindingKind.Command);
|
|
5
|
+
it('should fall back to the binding name read as a sentence, so the page is legible before anyone writes a title', () => {
|
|
6
|
+
heading.title.should.equal('Record adjustment');
|
|
7
|
+
});
|
|
8
|
+
it('should build the trail from the derived title', () => {
|
|
9
|
+
heading.trail.should.deep.equal(['Billing', 'Record adjustment']);
|
|
10
|
+
});
|
|
11
|
+
it('should report that it is not bound', () => {
|
|
12
|
+
heading.isBound.should.be.false;
|
|
13
|
+
});
|
|
14
|
+
it('should say which name a host has to register, which is the only actionable part', () => {
|
|
15
|
+
heading.bindingLabel.should.equal('No command registered as RecordAdjustment');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=when_the_binding_is_not_registered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_the_binding_is_not_registered.js","sourceRoot":"","sources":["../../../for_deriveArcHeading/when_the_binding_is_not_registered.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAE5G,EAAE,CAAC,8GAA8G,EAAE,GAAG,EAAE;QACpH,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACvF,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_the_binding_is_registered.d.ts","sourceRoot":"","sources":["../../../for_deriveArcHeading/when_the_binding_is_registered.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BindingKind } from '@cratis/scene.components';
|
|
2
|
+
import { deriveArcHeading } from '../header';
|
|
3
|
+
class AllInvoices {
|
|
4
|
+
}
|
|
5
|
+
describe('when the binding is registered', () => {
|
|
6
|
+
const heading = deriveArcHeading({ title: 'Invoices', subtitle: 'Every invoice', section: 'Billing' }, { name: 'AllInvoices', target: AllInvoices }, BindingKind.Query);
|
|
7
|
+
it('should use the title the template gave it', () => {
|
|
8
|
+
heading.title.should.equal('Invoices');
|
|
9
|
+
});
|
|
10
|
+
it('should keep the subtitle', () => {
|
|
11
|
+
heading.subtitle.should.equal('Every invoice');
|
|
12
|
+
});
|
|
13
|
+
it('should build the trail from the section and the title, rather than a second literal', () => {
|
|
14
|
+
heading.trail.should.deep.equal(['Billing', 'Invoices']);
|
|
15
|
+
});
|
|
16
|
+
it('should report that it is bound', () => {
|
|
17
|
+
heading.isBound.should.be.true;
|
|
18
|
+
});
|
|
19
|
+
it('should say what it is bound to, naming the kind so a query is not mistaken for a command', () => {
|
|
20
|
+
heading.bindingLabel.should.equal('Bound to query AllInvoices');
|
|
21
|
+
});
|
|
22
|
+
it('should keep the binding name for anything that wants to report it', () => {
|
|
23
|
+
heading.bindingName.should.equal('AllInvoices');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=when_the_binding_is_registered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_the_binding_is_registered.js","sourceRoot":"","sources":["../../../for_deriveArcHeading/when_the_binding_is_registered.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW;CAAG;AAEpB,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC5C,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAExK,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAChC,OAAO,CAAC,QAAS,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC3F,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAChG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,OAAO,CAAC,WAAY,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_reading_a_proxy_name.d.ts","sourceRoot":"","sources":["../../../for_humanizeBindingName/when_reading_a_proxy_name.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { humanizeBindingName } from '../header';
|
|
2
|
+
describe('when reading a proxy name', () => {
|
|
3
|
+
it('should read a two-word query name as a sentence', () => {
|
|
4
|
+
humanizeBindingName('AllInvoices').should.equal('All invoices');
|
|
5
|
+
});
|
|
6
|
+
it('should read a command name as a sentence', () => {
|
|
7
|
+
humanizeBindingName('RecordAdjustment').should.equal('Record adjustment');
|
|
8
|
+
});
|
|
9
|
+
it('should lower every word after the first', () => {
|
|
10
|
+
humanizeBindingName('InvoicesInFlight').should.equal('Invoices in flight');
|
|
11
|
+
});
|
|
12
|
+
it('should leave a single word alone', () => {
|
|
13
|
+
humanizeBindingName('Invoices').should.equal('Invoices');
|
|
14
|
+
});
|
|
15
|
+
it('should split a word boundary that follows a digit', () => {
|
|
16
|
+
humanizeBindingName('Top10Customers').should.equal('Top10 customers');
|
|
17
|
+
});
|
|
18
|
+
it('should keep a run of capitals together rather than chopping it into initials', () => {
|
|
19
|
+
humanizeBindingName('AllPIIRecords').should.equal('All PIIRecords');
|
|
20
|
+
});
|
|
21
|
+
it('should return an empty name unchanged rather than inventing a heading', () => {
|
|
22
|
+
humanizeBindingName('').should.equal('');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=when_reading_a_proxy_name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_reading_a_proxy_name.js","sourceRoot":"","sources":["../../../for_humanizeBindingName/when_reading_a_proxy_name.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,mBAAmB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAC/C,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACpF,mBAAmB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC7E,mBAAmB,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { GalleryScreenPreview } from './GalleryScreenPreview';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof GalleryScreenPreview;
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: string;
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
tags: string[];
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
type Story = StoryObj<typeof meta>;
|
|
18
|
+
export declare const DataListPage: Story;
|
|
19
|
+
export declare const ObservableDataListPage: Story;
|
|
20
|
+
export declare const DataListWithDetailPage: Story;
|
|
21
|
+
export declare const MasterDetailPage: Story;
|
|
22
|
+
export declare const DashboardPage: Story;
|
|
23
|
+
export declare const CommandFormPage: Story;
|
|
24
|
+
export declare const SchemaEditorPage: Story;
|
|
25
|
+
export declare const ObjectEditorPage: Story;
|
|
26
|
+
export declare const DataModulePage: Story;
|
|
27
|
+
export declare const DataFeatureSection: Story;
|
|
28
|
+
export declare const CommandSliceSection: Story;
|
|
29
|
+
export declare const InTheSlimMode: Story;
|
|
30
|
+
//# sourceMappingURL=ArcPages.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArcPages.stories.d.ts","sourceRoot":"","sources":["../../../gallery/ArcPages.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAU9D,QAAA,MAAM,IAAI;;;;QAIF,MAAM;QACN,IAAI;YACA,WAAW;gBACP,SAAS;;;;;CASoB,CAAC;eAE/B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAGnC,eAAO,MAAM,YAAY,EAAE,KAAgD,CAAC;AAG5E,eAAO,MAAM,sBAAsB,EAAE,KAA0D,CAAC;AAGhG,eAAO,MAAM,sBAAsB,EAAE,KAA0D,CAAC;AAGhG,eAAO,MAAM,gBAAgB,EAAE,KAAoD,CAAC;AAGpF,eAAO,MAAM,aAAa,EAAE,KAAiD,CAAC;AAG9E,eAAO,MAAM,eAAe,EAAE,KAAmD,CAAC;AAGlF,eAAO,MAAM,gBAAgB,EAAE,KAAoD,CAAC;AAGpF,eAAO,MAAM,gBAAgB,EAAE,KAAoD,CAAC;AAGpF,eAAO,MAAM,cAAc,EAAE,KAAkD,CAAC;AAGhF,eAAO,MAAM,kBAAkB,EAAE,KAAsD,CAAC;AAGxF,eAAO,MAAM,mBAAmB,EAAE,KAAuD,CAAC;AAS1F,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LayoutMode } from '@cratis/scene.blueprint.default';
|
|
2
|
+
import { GalleryScreenPreview } from './GalleryScreenPreview';
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'Blueprint/Arc pages',
|
|
5
|
+
component: GalleryScreenPreview,
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: 'fullscreen',
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: 'The eight Arc-bound page templates plus the three-level nesting chain, each booted as a screen inside the default ' +
|
|
11
|
+
"blueprint's application shell. Nothing is registered in the binding registry, so every Arc-bound region names the " +
|
|
12
|
+
'binding it wanted and every page header says which query or command a host still has to wire. That is the normal ' +
|
|
13
|
+
'design-time state - see the *Bindings* stories for what changes when a host registers one.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tags: ['autodocs'],
|
|
18
|
+
};
|
|
19
|
+
export default meta;
|
|
20
|
+
export const DataListPage = { args: { screenName: 'DataListPage' } };
|
|
21
|
+
export const ObservableDataListPage = { args: { screenName: 'ObservableDataListPage' } };
|
|
22
|
+
export const DataListWithDetailPage = { args: { screenName: 'DataListWithDetailPage' } };
|
|
23
|
+
export const MasterDetailPage = { args: { screenName: 'MasterDetailPage' } };
|
|
24
|
+
export const DashboardPage = { args: { screenName: 'DashboardPage' } };
|
|
25
|
+
export const CommandFormPage = { args: { screenName: 'CommandFormPage' } };
|
|
26
|
+
export const SchemaEditorPage = { args: { screenName: 'SchemaEditorPage' } };
|
|
27
|
+
export const ObjectEditorPage = { args: { screenName: 'ObjectEditorPage' } };
|
|
28
|
+
export const DataModulePage = { args: { screenName: 'DataModulePage' } };
|
|
29
|
+
export const DataFeatureSection = { args: { screenName: 'DataFeatureSection' } };
|
|
30
|
+
export const CommandSliceSection = { args: { screenName: 'CommandSliceSection' } };
|
|
31
|
+
export const InTheSlimMode = {
|
|
32
|
+
args: { screenName: 'DataListPage', initialConfig: { mode: LayoutMode.Slim } },
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=ArcPages.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArcPages.stories.js","sourceRoot":"","sources":["../../../gallery/ArcPages.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAU9D,MAAM,IAAI,GAAG;IACT,KAAK,EAAE,qBAAqB;IAC5B,SAAS,EAAE,oBAAoB;IAC/B,UAAU,EAAE;QACR,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE;YACF,WAAW,EAAE;gBACT,SAAS,EACL,oHAAoH;oBACpH,oHAAoH;oBACpH,mHAAmH;oBACnH,4FAA4F;aACnG;SACJ;KACJ;IACD,IAAI,EAAE,CAAC,UAAU,CAAC;CACuB,CAAC;AAE9C,eAAe,IAAI,CAAC;AAKpB,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,CAAC;AAG5E,MAAM,CAAC,MAAM,sBAAsB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,EAAE,CAAC;AAGhG,MAAM,CAAC,MAAM,sBAAsB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,EAAE,CAAC;AAGhG,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;AAGpF,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC;AAG9E,MAAM,CAAC,MAAM,eAAe,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,CAAC;AAGlF,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;AAGpF,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;AAGpF,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;AAGhF,MAAM,CAAC,MAAM,kBAAkB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,EAAE,CAAC;AAGxF,MAAM,CAAC,MAAM,mBAAmB,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE,CAAC;AAS1F,MAAM,CAAC,MAAM,aAAa,GAAU;IAChC,IAAI,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE;CACjF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { GalleryScreenPreview } from './GalleryScreenPreview';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof GalleryScreenPreview;
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: string;
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
tags: string[];
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
type Story = StoryObj<typeof meta>;
|
|
18
|
+
export declare const Unbound: Story;
|
|
19
|
+
export declare const Bound: Story;
|
|
20
|
+
export declare const BoundWithRealContent: Story;
|
|
21
|
+
export declare const UnboundWithRealContent: Story;
|
|
22
|
+
//# sourceMappingURL=Bindings.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bindings.stories.d.ts","sourceRoot":"","sources":["../../../gallery/Bindings.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,wBAAwB,CAAC;AAuEzF,QAAA,MAAM,IAAI;;;;QAIF,MAAM;QACN,IAAI;YACA,WAAW;gBACP,SAAS;;;;;CAQoB,CAAC;eAE/B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAMnC,eAAO,MAAM,OAAO,EAAE,KAGrB,CAAC;AAMF,eAAO,MAAM,KAAK,EAAE,KAGnB,CAAC;AASF,eAAO,MAAM,oBAAoB,EAAE,KAGlC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,KAGpC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { clearBindings, registerCommands, registerQueries } from '@cratis/scene.components';
|
|
4
|
+
import { SampleBindingName } from '../templates';
|
|
5
|
+
import { GalleryScreenPreview } from './GalleryScreenPreview';
|
|
6
|
+
class AllInvoices {
|
|
7
|
+
}
|
|
8
|
+
class InvoicesInFlight {
|
|
9
|
+
}
|
|
10
|
+
class InvoiceById {
|
|
11
|
+
}
|
|
12
|
+
class RevenueByMonth {
|
|
13
|
+
}
|
|
14
|
+
class OpenTickets {
|
|
15
|
+
}
|
|
16
|
+
class AllAdjustments {
|
|
17
|
+
}
|
|
18
|
+
class RegisterInvoice {
|
|
19
|
+
}
|
|
20
|
+
class RecordAdjustment {
|
|
21
|
+
}
|
|
22
|
+
const queries = {
|
|
23
|
+
[SampleBindingName.AllInvoices]: AllInvoices,
|
|
24
|
+
[SampleBindingName.InvoicesInFlight]: InvoicesInFlight,
|
|
25
|
+
[SampleBindingName.InvoiceById]: InvoiceById,
|
|
26
|
+
[SampleBindingName.RevenueByMonth]: RevenueByMonth,
|
|
27
|
+
[SampleBindingName.OpenTickets]: OpenTickets,
|
|
28
|
+
[SampleBindingName.AllAdjustments]: AllAdjustments,
|
|
29
|
+
};
|
|
30
|
+
const commands = {
|
|
31
|
+
[SampleBindingName.RegisterInvoice]: RegisterInvoice,
|
|
32
|
+
[SampleBindingName.RecordAdjustment]: RecordAdjustment,
|
|
33
|
+
};
|
|
34
|
+
function BoundScreen({ screenName, initialConfig }) {
|
|
35
|
+
useMemo(() => {
|
|
36
|
+
clearBindings();
|
|
37
|
+
registerQueries(queries);
|
|
38
|
+
registerCommands(commands);
|
|
39
|
+
}, []);
|
|
40
|
+
return _jsx(GalleryScreenPreview, { screenName: screenName, initialConfig: initialConfig });
|
|
41
|
+
}
|
|
42
|
+
function UnboundScreen({ screenName, initialConfig }) {
|
|
43
|
+
useMemo(() => clearBindings(), []);
|
|
44
|
+
return _jsx(GalleryScreenPreview, { screenName: screenName, initialConfig: initialConfig });
|
|
45
|
+
}
|
|
46
|
+
const meta = {
|
|
47
|
+
title: 'Blueprint/Bindings',
|
|
48
|
+
component: GalleryScreenPreview,
|
|
49
|
+
parameters: {
|
|
50
|
+
layout: 'fullscreen',
|
|
51
|
+
docs: {
|
|
52
|
+
description: {
|
|
53
|
+
component: 'What the binding registry does to a page. A template names a query or a command; a host registers the generated Arc ' +
|
|
54
|
+
'proxy under that name. These stories show a page with nothing registered, and the same pages with small fakes ' +
|
|
55
|
+
'registered, so the difference is something you can look at rather than something you have to take on trust.',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
tags: ['autodocs'],
|
|
60
|
+
};
|
|
61
|
+
export default meta;
|
|
62
|
+
export const Unbound = {
|
|
63
|
+
args: { screenName: 'DataListPage' },
|
|
64
|
+
render: args => _jsx(UnboundScreen, { ...args }),
|
|
65
|
+
};
|
|
66
|
+
export const Bound = {
|
|
67
|
+
args: { screenName: 'DataListPage' },
|
|
68
|
+
render: args => _jsx(BoundScreen, { ...args }),
|
|
69
|
+
};
|
|
70
|
+
export const BoundWithRealContent = {
|
|
71
|
+
args: { screenName: 'ObjectEditorPage' },
|
|
72
|
+
render: args => _jsx(BoundScreen, { ...args }),
|
|
73
|
+
};
|
|
74
|
+
export const UnboundWithRealContent = {
|
|
75
|
+
args: { screenName: 'ObjectEditorPage' },
|
|
76
|
+
render: args => _jsx(UnboundScreen, { ...args }),
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=Bindings.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bindings.stories.js","sourceRoot":"","sources":["../../../gallery/Bindings.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ComponentRegistry } from '@cratis/scene.react';
|
|
2
|
+
export interface DialogTemplatePreviewProps {
|
|
3
|
+
templateName: string;
|
|
4
|
+
registry?: ComponentRegistry;
|
|
5
|
+
}
|
|
6
|
+
export declare function DialogTemplatePreview({ templateName, registry }: DialogTemplatePreviewProps): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=DialogTemplatePreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogTemplatePreview.d.ts","sourceRoot":"","sources":["../../../gallery/DialogTemplatePreview.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,qBAAqB,CAAC;AAM1E,MAAM,WAAW,0BAA0B;IAEvC,YAAY,EAAE,MAAM,CAAC;IAGrB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAYD,wBAAgB,qBAAqB,CAAC,EAAE,YAAY,EAAE,QAAoC,EAAE,EAAE,0BAA0B,+BAmBvH"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { SceneElementView } from '@cratis/scene.react';
|
|
4
|
+
import { resolveElementComponentNames } from '@cratis/scene.blueprint.default';
|
|
5
|
+
import '../templates/listTemplates.js';
|
|
6
|
+
import '../templates/workspaceTemplates.js';
|
|
7
|
+
import '../templates/commandTemplates.js';
|
|
8
|
+
import '../templates/editorTemplates.js';
|
|
9
|
+
import '../templates/nesting.js';
|
|
10
|
+
import { componentsDialogTemplates } from '../templates/dialogTemplates.js';
|
|
11
|
+
import '../templates/screenTemplates.js';
|
|
12
|
+
import { componentsBlueprintProfile, componentsBlueprintCatalog } from './previewProfile.js';
|
|
13
|
+
import { componentsPreviewRegistry } from './GalleryScreenPreview.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Boots one dialog template through the real engine.
|
|
17
|
+
*
|
|
18
|
+
* A dialog has no layout and no shell, because it occupies no slot - it opens *over* whatever is already
|
|
19
|
+
* on screen. So there is nothing to compose it into: the template's own content is the whole tree, and it
|
|
20
|
+
* goes straight through `resolveComponentName` and `SceneElementView` exactly as a screen's does.
|
|
21
|
+
*
|
|
22
|
+
* Each of these templates declares one slot, so flattening the content is the whole of "assembling" it.
|
|
23
|
+
* That is a consequence of the composites owning their own frames rather than a simplification here.
|
|
24
|
+
*/ function DialogTemplatePreview({ templateName, registry = componentsPreviewRegistry }) {
|
|
25
|
+
const elements = useMemo(()=>{
|
|
26
|
+
const template = componentsDialogTemplates.find((candidate)=>candidate.name === templateName);
|
|
27
|
+
if (!template) {
|
|
28
|
+
throw new Error(`This blueprint has no dialog template named '${templateName}'.`);
|
|
29
|
+
}
|
|
30
|
+
return Object.values(template.content ?? {}).flat().map((element)=>resolveElementComponentNames(element, componentsBlueprintProfile, componentsBlueprintCatalog));
|
|
31
|
+
}, [
|
|
32
|
+
templateName
|
|
33
|
+
]);
|
|
34
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
35
|
+
children: elements.map((element)=>/*#__PURE__*/ jsx(SceneElementView, {
|
|
36
|
+
element: element,
|
|
37
|
+
registry: registry,
|
|
38
|
+
resolveBinding: ()=>undefined
|
|
39
|
+
}, element.id))
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { DialogTemplatePreview };
|
|
44
|
+
//# sourceMappingURL=DialogTemplatePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogTemplatePreview.js","sources":["../../../gallery/DialogTemplatePreview.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 { SceneElement } from '@cratis/scene.model';\nimport { ComponentRegistry, SceneElementView } from '@cratis/scene.react';\nimport { resolveElementComponentNames } from '@cratis/scene.blueprint.default';\nimport { componentsDialogTemplates } from '../templates';\nimport { componentsBlueprintCatalog, componentsBlueprintProfile } from './previewProfile';\nimport { componentsPreviewRegistry } from './GalleryScreenPreview';\n\nexport interface DialogTemplatePreviewProps {\n /** The name of the dialog template to boot. */\n templateName: string;\n\n /** The component registry to render against. Defaults to {@link componentsPreviewRegistry}. */\n registry?: ComponentRegistry;\n}\n\n/**\n * Boots one dialog template through the real engine.\n *\n * A dialog has no layout and no shell, because it occupies no slot - it opens *over* whatever is already\n * on screen. So there is nothing to compose it into: the template's own content is the whole tree, and it\n * goes straight through `resolveComponentName` and `SceneElementView` exactly as a screen's does.\n *\n * Each of these templates declares one slot, so flattening the content is the whole of \"assembling\" it.\n * That is a consequence of the composites owning their own frames rather than a simplification here.\n */\nexport function DialogTemplatePreview({ templateName, registry = componentsPreviewRegistry }: DialogTemplatePreviewProps) {\n const elements = useMemo(() => {\n const template = componentsDialogTemplates.find(candidate => candidate.name === templateName);\n if (!template) {\n throw new Error(`This blueprint has no dialog template named '${templateName}'.`);\n }\n\n return Object.values(template.content ?? {})\n .flat()\n .map((element: SceneElement) => resolveElementComponentNames(element, componentsBlueprintProfile, componentsBlueprintCatalog));\n }, [templateName]);\n\n return (\n <>\n {elements.map(element => (\n <SceneElementView key={element.id} element={element} registry={registry} resolveBinding={() => undefined} />\n ))}\n </>\n );\n}\n"],"names":["DialogTemplatePreview","templateName","registry","componentsPreviewRegistry","elements","useMemo","template","componentsDialogTemplates","find","candidate","name","Error","Object","values","content","flat","map","element","resolveElementComponentNames","componentsBlueprintProfile","componentsBlueprintCatalog","_jsx","_Fragment","SceneElementView","resolveBinding","undefined","id"],"mappings":";;;;;;;;;;;;;;AAmBA;;;;;;;;;IAUO,SAASA,qBAAAA,CAAsB,EAAEC,YAAY,EAAEC,QAAAA,GAAWC,yBAAyB,EAA8B,EAAA;AACpH,IAAA,MAAMC,WAAWC,OAAAA,CAAQ,IAAA;QACrB,MAAMC,QAAAA,GAAWC,0BAA0BC,IAAI,CAACC,CAAAA,SAAAA,GAAaA,SAAAA,CAAUC,IAAI,KAAKT,YAAAA,CAAAA;AAChF,QAAA,IAAI,CAACK,QAAAA,EAAU;AACX,YAAA,MAAM,IAAIK,KAAAA,CAAM,CAAC,6CAA6C,EAAEV,YAAAA,CAAa,EAAE,CAAC,CAAA;AACpF,QAAA;AAEA,QAAA,OAAOW,OAAOC,MAAM,CAACP,QAAAA,CAASQ,OAAO,IAAI,EAAC,CAAA,CACrCC,IAAI,EAAA,CACJC,GAAG,CAAC,CAACC,OAAAA,GAA0BC,4BAAAA,CAA6BD,SAASE,0BAAAA,EAA4BC,0BAAAA,CAAAA,CAAAA;IAC1G,CAAA,EAAG;AAACnB,QAAAA;AAAa,KAAA,CAAA;IAEjB,qBACIoB,GAAA,CAAAC,QAAA,EAAA;AACKlB,QAAAA,QAAAA,EAAAA,QAAAA,CAASY,GAAG,CAACC,CAAAA,OAAAA,iBACVI,GAAA,CAACE,gBAAAA,EAAAA;gBAAkCN,OAAAA,EAASA,OAAAA;gBAASf,QAAAA,EAAUA,QAAAA;AAAUsB,gBAAAA,cAAAA,EAAgB,IAAMC;AAAxER,aAAAA,EAAAA,OAAAA,CAAQS,EAAE,CAAA;;AAIjD;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react';
|
|
2
|
+
import { DialogTemplatePreview } from './DialogTemplatePreview';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof DialogTemplatePreview;
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: string;
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
tags: string[];
|
|
15
|
+
};
|
|
16
|
+
export default meta;
|
|
17
|
+
type Story = StoryObj<typeof meta>;
|
|
18
|
+
export declare const CommandDialog: Story;
|
|
19
|
+
export declare const ConfirmDialog: Story;
|
|
20
|
+
export declare const BusyDialog: Story;
|
|
21
|
+
//# sourceMappingURL=DialogTemplates.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogTemplates.stories.d.ts","sourceRoot":"","sources":["../../../gallery/DialogTemplates.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAShE,QAAA,MAAM,IAAI;;;;QAIF,MAAM;QACN,IAAI;YACA,WAAW;gBACP,SAAS;;;;;CAUqB,CAAC;eAEhC,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAGnC,eAAO,MAAM,aAAa,EAAE,KAAmD,CAAC;AAGhF,eAAO,MAAM,aAAa,EAAE,KAAmD,CAAC;AAGhF,eAAO,MAAM,UAAU,EAAE,KAAgD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DialogTemplatePreview } from './DialogTemplatePreview';
|
|
2
|
+
const meta = {
|
|
3
|
+
title: 'Blueprint/Dialog templates',
|
|
4
|
+
component: DialogTemplatePreview,
|
|
5
|
+
parameters: {
|
|
6
|
+
layout: 'centered',
|
|
7
|
+
docs: {
|
|
8
|
+
description: {
|
|
9
|
+
component: 'Each dialog template declares exactly one slot, because the Arc-aware dialogs own their own frame, title bar and ' +
|
|
10
|
+
'buttons - a template offering `header` and `actions` slots would be offering regions that render outside the modal. ' +
|
|
11
|
+
'The confirmation and busy dialogs reach the Arc runtime as soon as they render, so in a design surface they show the ' +
|
|
12
|
+
"library's own error boundary rather than a modal; the command dialog shows a placeholder until its command is " +
|
|
13
|
+
'registered. Both are what an application without an Arc client sees, and both are the point.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tags: ['autodocs'],
|
|
18
|
+
};
|
|
19
|
+
export default meta;
|
|
20
|
+
export const CommandDialog = { args: { templateName: 'CommandDialog' } };
|
|
21
|
+
export const ConfirmDialog = { args: { templateName: 'ConfirmDialog' } };
|
|
22
|
+
export const BusyDialog = { args: { templateName: 'BusyDialog' } };
|
|
23
|
+
//# sourceMappingURL=DialogTemplates.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogTemplates.stories.js","sourceRoot":"","sources":["../../../gallery/DialogTemplates.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAShE,MAAM,IAAI,GAAG;IACT,KAAK,EAAE,4BAA4B;IACnC,SAAS,EAAE,qBAAqB;IAChC,UAAU,EAAE;QACR,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE;YACF,WAAW,EAAE;gBACT,SAAS,EACL,mHAAmH;oBACnH,sHAAsH;oBACtH,uHAAuH;oBACvH,gHAAgH;oBAChH,8FAA8F;aACrG;SACJ;KACJ;IACD,IAAI,EAAE,CAAC,UAAU,CAAC;CACwB,CAAC;AAE/C,eAAe,IAAI,CAAC;AAKpB,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,CAAC;AAGhF,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,CAAC;AAGhF,MAAM,CAAC,MAAM,UAAU,GAAU,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComponentRegistry } from '@cratis/scene.react';
|
|
2
|
+
import { LayoutConfigState } from '@cratis/scene.blueprint.default';
|
|
3
|
+
export declare const componentsPreviewRegistry: ComponentRegistry;
|
|
4
|
+
export interface GalleryScreenPreviewProps {
|
|
5
|
+
screenName: string;
|
|
6
|
+
initialConfig?: Partial<LayoutConfigState>;
|
|
7
|
+
registry?: ComponentRegistry;
|
|
8
|
+
}
|
|
9
|
+
export declare function GalleryScreenPreview({ screenName, initialConfig, registry }: GalleryScreenPreviewProps): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=GalleryScreenPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GalleryScreenPreview.d.ts","sourceRoot":"","sources":["../../../gallery/GalleryScreenPreview.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAoC,MAAM,qBAAqB,CAAC;AAE1F,OAAO,EAAwB,iBAAiB,EAA+H,MAAM,iCAAiC,CAAC;AAgBvN,eAAO,MAAM,yBAAyB,EAAE,iBAKvC,CAAC;AAEF,MAAM,WAAW,yBAAyB;IAEtC,UAAU,EAAE,MAAM,CAAC;IAGnB,aAAa,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAG3C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAcD,wBAAgB,oBAAoB,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,QAAoC,EAAE,EAAE,yBAAyB,+BAiBlI"}
|