@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.
- package/.storybook/main.ts +55 -0
- package/.storybook/preview.tsx +36 -0
- package/CratisComponents.stories.tsx +235 -0
- package/README.md +192 -0
- package/bindings/ArcRuntimeBoundary.tsx +36 -0
- package/bindings/BindingKind.ts +18 -0
- package/bindings/BoundConstructor.ts +21 -0
- package/bindings/ElementBinding.ts +19 -0
- package/bindings/MissingBinding.tsx +34 -0
- package/bindings/Placeholder.tsx +42 -0
- package/bindings/bindingRegistry.ts +105 -0
- package/bindings/for_bindingRegistry/when_a_command_is_registered.ts +30 -0
- package/bindings/for_bindingRegistry/when_a_query_is_not_registered.ts +17 -0
- package/bindings/for_bindingRegistry/when_a_query_is_registered.ts +30 -0
- package/bindings/for_bindingRegistry/when_bindings_are_cleared.ts +29 -0
- package/bindings/for_resolveElementBinding/when_resolving_a_command_binding.ts +34 -0
- package/bindings/for_resolveElementBinding/when_resolving_a_query_binding.ts +45 -0
- package/bindings/index.ts +11 -0
- package/bindings/resolveElementBinding.ts +33 -0
- package/common/SceneDropdown.tsx +31 -0
- package/common/SceneErrorBoundary.tsx +17 -0
- package/common/SceneIcon.tsx +18 -0
- package/common/SceneTooltip.tsx +28 -0
- package/common/index.ts +7 -0
- package/cratisComponents.ts +91 -0
- package/cratisComponentsPackage.ts +101 -0
- package/data/SceneDataTable.tsx +41 -0
- package/data/SceneObservableDataTable.tsx +41 -0
- package/data/for_SceneDataTable/when_the_query_binding_is_missing.tsx +48 -0
- package/data/index.ts +5 -0
- package/dialogs/SceneBusyIndicatorDialog.tsx +29 -0
- package/dialogs/SceneCommandDialog.tsx +42 -0
- package/dialogs/SceneConfirmationDialog.tsx +23 -0
- package/dialogs/SceneDialog.tsx +41 -0
- package/dialogs/SceneStepperCommandDialog.tsx +50 -0
- package/dialogs/index.ts +8 -0
- package/dist/cjs/bindings/ArcRuntimeBoundary.js +37 -0
- package/dist/cjs/bindings/ArcRuntimeBoundary.js.map +1 -0
- package/dist/cjs/bindings/BindingKind.js +19 -0
- package/dist/cjs/bindings/BindingKind.js.map +1 -0
- package/dist/cjs/bindings/MissingBinding.js +24 -0
- package/dist/cjs/bindings/MissingBinding.js.map +1 -0
- package/dist/cjs/bindings/Placeholder.js +38 -0
- package/dist/cjs/bindings/Placeholder.js.map +1 -0
- package/dist/cjs/bindings/bindingRegistry.js +101 -0
- package/dist/cjs/bindings/bindingRegistry.js.map +1 -0
- package/dist/cjs/bindings/resolveElementBinding.js +34 -0
- package/dist/cjs/bindings/resolveElementBinding.js.map +1 -0
- package/dist/cjs/common/SceneDropdown.js +30 -0
- package/dist/cjs/common/SceneDropdown.js.map +1 -0
- package/dist/cjs/common/SceneErrorBoundary.js +20 -0
- package/dist/cjs/common/SceneErrorBoundary.js.map +1 -0
- package/dist/cjs/common/SceneIcon.js +22 -0
- package/dist/cjs/common/SceneIcon.js.map +1 -0
- package/dist/cjs/common/SceneTooltip.js +29 -0
- package/dist/cjs/common/SceneTooltip.js.map +1 -0
- package/dist/cjs/cratisComponents.js +106 -0
- package/dist/cjs/cratisComponents.js.map +1 -0
- package/dist/cjs/cratisComponentsPackage.js +105 -0
- package/dist/cjs/cratisComponentsPackage.js.map +1 -0
- package/dist/cjs/data/SceneDataTable.js +46 -0
- package/dist/cjs/data/SceneDataTable.js.map +1 -0
- package/dist/cjs/data/SceneObservableDataTable.js +44 -0
- package/dist/cjs/data/SceneObservableDataTable.js.map +1 -0
- package/dist/cjs/dialogs/SceneBusyIndicatorDialog.js +30 -0
- package/dist/cjs/dialogs/SceneBusyIndicatorDialog.js.map +1 -0
- package/dist/cjs/dialogs/SceneCommandDialog.js +47 -0
- package/dist/cjs/dialogs/SceneCommandDialog.js.map +1 -0
- package/dist/cjs/dialogs/SceneConfirmationDialog.js +25 -0
- package/dist/cjs/dialogs/SceneConfirmationDialog.js.map +1 -0
- package/dist/cjs/dialogs/SceneDialog.js +41 -0
- package/dist/cjs/dialogs/SceneDialog.js.map +1 -0
- package/dist/cjs/dialogs/SceneStepperCommandDialog.js +54 -0
- package/dist/cjs/dialogs/SceneStepperCommandDialog.js.map +1 -0
- package/dist/cjs/editors/SceneFilterPanel.js +57 -0
- package/dist/cjs/editors/SceneFilterPanel.js.map +1 -0
- package/dist/cjs/editors/SceneObjectContentEditor.js +37 -0
- package/dist/cjs/editors/SceneObjectContentEditor.js.map +1 -0
- package/dist/cjs/editors/SceneObjectNavigationalBar.js +34 -0
- package/dist/cjs/editors/SceneObjectNavigationalBar.js.map +1 -0
- package/dist/cjs/editors/SceneSchemaEditor.js +33 -0
- package/dist/cjs/editors/SceneSchemaEditor.js.map +1 -0
- package/dist/cjs/editors/SceneTimeMachine.js +32 -0
- package/dist/cjs/editors/SceneTimeMachine.js.map +1 -0
- package/dist/cjs/editors/filterDefinitions.js +59 -0
- package/dist/cjs/editors/filterDefinitions.js.map +1 -0
- package/dist/cjs/editors/timeMachineVersions.js +44 -0
- package/dist/cjs/editors/timeMachineVersions.js.map +1 -0
- package/dist/cjs/editors/useEditableCopy.js +39 -0
- package/dist/cjs/editors/useEditableCopy.js.map +1 -0
- package/dist/cjs/forms/SceneCommandForm.js +46 -0
- package/dist/cjs/forms/SceneCommandForm.js.map +1 -0
- package/dist/cjs/forms/fields/CommandFormField.js +31 -0
- package/dist/cjs/forms/fields/CommandFormField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneCalendarField.js +41 -0
- package/dist/cjs/forms/fields/SceneCalendarField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneCheckboxField.js +28 -0
- package/dist/cjs/forms/fields/SceneCheckboxField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneChipsField.js +33 -0
- package/dist/cjs/forms/fields/SceneChipsField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneColorPickerField.js +30 -0
- package/dist/cjs/forms/fields/SceneColorPickerField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneDropdownField.js +35 -0
- package/dist/cjs/forms/fields/SceneDropdownField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneInputTextField.js +45 -0
- package/dist/cjs/forms/fields/SceneInputTextField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneMultiSelectField.js +40 -0
- package/dist/cjs/forms/fields/SceneMultiSelectField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneNumberField.js +32 -0
- package/dist/cjs/forms/fields/SceneNumberField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneRadioButtonField.js +35 -0
- package/dist/cjs/forms/fields/SceneRadioButtonField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneRadioGroupField.js +36 -0
- package/dist/cjs/forms/fields/SceneRadioGroupField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneSliderField.js +31 -0
- package/dist/cjs/forms/fields/SceneSliderField.js.map +1 -0
- package/dist/cjs/forms/fields/SceneTextAreaField.js +31 -0
- package/dist/cjs/forms/fields/SceneTextAreaField.js.map +1 -0
- package/dist/cjs/forms/fields/resolveFieldBinding.js +27 -0
- package/dist/cjs/forms/fields/resolveFieldBinding.js.map +1 -0
- package/dist/cjs/index.js +123 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/pages/SceneDataPage.js +45 -0
- package/dist/cjs/pages/SceneDataPage.js.map +1 -0
- package/dist/cjs/pages/SceneFormElement.js +26 -0
- package/dist/cjs/pages/SceneFormElement.js.map +1 -0
- package/dist/cjs/pages/ScenePage.js +28 -0
- package/dist/cjs/pages/ScenePage.js.map +1 -0
- package/dist/cjs/properties.js +104 -0
- package/dist/cjs/properties.js.map +1 -0
- package/dist/cjs/toolbar/SceneToolbar.js +27 -0
- package/dist/cjs/toolbar/SceneToolbar.js.map +1 -0
- package/dist/cjs/toolbar/SceneToolbarButton.js +32 -0
- package/dist/cjs/toolbar/SceneToolbarButton.js.map +1 -0
- package/dist/cjs/toolbar/SceneToolbarGroup.js +27 -0
- package/dist/cjs/toolbar/SceneToolbarGroup.js.map +1 -0
- package/dist/cjs/toolbar/SceneToolbarSeparator.js +25 -0
- package/dist/cjs/toolbar/SceneToolbarSeparator.js.map +1 -0
- package/dist/esm/CratisComponents.stories.d.ts +29 -0
- package/dist/esm/CratisComponents.stories.d.ts.map +1 -0
- package/dist/esm/CratisComponents.stories.js +187 -0
- package/dist/esm/CratisComponents.stories.js.map +1 -0
- package/dist/esm/bindings/ArcRuntimeBoundary.d.ts +6 -0
- package/dist/esm/bindings/ArcRuntimeBoundary.d.ts.map +1 -0
- package/dist/esm/bindings/ArcRuntimeBoundary.js +35 -0
- package/dist/esm/bindings/ArcRuntimeBoundary.js.map +1 -0
- package/dist/esm/bindings/BindingKind.d.ts +5 -0
- package/dist/esm/bindings/BindingKind.d.ts.map +1 -0
- package/dist/esm/bindings/BindingKind.js +17 -0
- package/dist/esm/bindings/BindingKind.js.map +1 -0
- package/dist/esm/bindings/BoundConstructor.d.ts +2 -0
- package/dist/esm/bindings/BoundConstructor.d.ts.map +1 -0
- package/dist/esm/bindings/BoundConstructor.js +2 -0
- package/dist/esm/bindings/BoundConstructor.js.map +1 -0
- package/dist/esm/bindings/ElementBinding.d.ts +6 -0
- package/dist/esm/bindings/ElementBinding.d.ts.map +1 -0
- package/dist/esm/bindings/ElementBinding.js +2 -0
- package/dist/esm/bindings/ElementBinding.js.map +1 -0
- package/dist/esm/bindings/MissingBinding.d.ts +9 -0
- package/dist/esm/bindings/MissingBinding.d.ts.map +1 -0
- package/dist/esm/bindings/MissingBinding.js +22 -0
- package/dist/esm/bindings/MissingBinding.js.map +1 -0
- package/dist/esm/bindings/Placeholder.d.ts +7 -0
- package/dist/esm/bindings/Placeholder.d.ts.map +1 -0
- package/dist/esm/bindings/Placeholder.js +36 -0
- package/dist/esm/bindings/Placeholder.js.map +1 -0
- package/dist/esm/bindings/bindingRegistry.d.ts +11 -0
- package/dist/esm/bindings/bindingRegistry.d.ts.map +1 -0
- package/dist/esm/bindings/bindingRegistry.js +91 -0
- package/dist/esm/bindings/bindingRegistry.js.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.d.ts +2 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.d.ts.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.js +25 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_command_is_registered.js.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.d.ts +2 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.d.ts.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.js +12 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_not_registered.js.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.d.ts +2 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.d.ts.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.js +23 -0
- package/dist/esm/bindings/for_bindingRegistry/when_a_query_is_registered.js.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.d.ts +2 -0
- package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.d.ts.map +1 -0
- package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.js +18 -0
- package/dist/esm/bindings/for_bindingRegistry/when_bindings_are_cleared.js.map +1 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.d.ts +2 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.d.ts.map +1 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.js +25 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_command_binding.js.map +1 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.d.ts +2 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.d.ts.map +1 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.js +33 -0
- package/dist/esm/bindings/for_resolveElementBinding/when_resolving_a_query_binding.js.map +1 -0
- package/dist/esm/bindings/index.d.ts +9 -0
- package/dist/esm/bindings/index.d.ts.map +1 -0
- package/dist/esm/bindings/index.js +9 -0
- package/dist/esm/bindings/index.js.map +1 -0
- package/dist/esm/bindings/resolveElementBinding.d.ts +5 -0
- package/dist/esm/bindings/resolveElementBinding.d.ts.map +1 -0
- package/dist/esm/bindings/resolveElementBinding.js +32 -0
- package/dist/esm/bindings/resolveElementBinding.js.map +1 -0
- package/dist/esm/common/SceneDropdown.d.ts +3 -0
- package/dist/esm/common/SceneDropdown.d.ts.map +1 -0
- package/dist/esm/common/SceneDropdown.js +28 -0
- package/dist/esm/common/SceneDropdown.js.map +1 -0
- package/dist/esm/common/SceneErrorBoundary.d.ts +3 -0
- package/dist/esm/common/SceneErrorBoundary.d.ts.map +1 -0
- package/dist/esm/common/SceneErrorBoundary.js +18 -0
- package/dist/esm/common/SceneErrorBoundary.js.map +1 -0
- package/dist/esm/common/SceneIcon.d.ts +3 -0
- package/dist/esm/common/SceneIcon.d.ts.map +1 -0
- package/dist/esm/common/SceneIcon.js +20 -0
- package/dist/esm/common/SceneIcon.js.map +1 -0
- package/dist/esm/common/SceneTooltip.d.ts +3 -0
- package/dist/esm/common/SceneTooltip.d.ts.map +1 -0
- package/dist/esm/common/SceneTooltip.js +27 -0
- package/dist/esm/common/SceneTooltip.js.map +1 -0
- package/dist/esm/common/index.d.ts +5 -0
- package/dist/esm/common/index.d.ts.map +1 -0
- package/dist/esm/common/index.js +5 -0
- package/dist/esm/common/index.js.map +1 -0
- package/dist/esm/cratisComponents.d.ts +4 -0
- package/dist/esm/cratisComponents.d.ts.map +1 -0
- package/dist/esm/cratisComponents.js +103 -0
- package/dist/esm/cratisComponents.js.map +1 -0
- package/dist/esm/cratisComponentsPackage.d.ts +5 -0
- package/dist/esm/cratisComponentsPackage.d.ts.map +1 -0
- package/dist/esm/cratisComponentsPackage.js +102 -0
- package/dist/esm/cratisComponentsPackage.js.map +1 -0
- package/dist/esm/data/SceneDataTable.d.ts +3 -0
- package/dist/esm/data/SceneDataTable.d.ts.map +1 -0
- package/dist/esm/data/SceneDataTable.js +44 -0
- package/dist/esm/data/SceneDataTable.js.map +1 -0
- package/dist/esm/data/SceneObservableDataTable.d.ts +3 -0
- package/dist/esm/data/SceneObservableDataTable.d.ts.map +1 -0
- package/dist/esm/data/SceneObservableDataTable.js +42 -0
- package/dist/esm/data/SceneObservableDataTable.js.map +1 -0
- package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.d.ts +2 -0
- package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.d.ts.map +1 -0
- package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.js +36 -0
- package/dist/esm/data/for_SceneDataTable/when_the_query_binding_is_missing.js.map +1 -0
- package/dist/esm/data/index.d.ts +3 -0
- package/dist/esm/data/index.d.ts.map +1 -0
- package/dist/esm/data/index.js +3 -0
- package/dist/esm/data/index.js.map +1 -0
- package/dist/esm/dialogs/SceneBusyIndicatorDialog.d.ts +3 -0
- package/dist/esm/dialogs/SceneBusyIndicatorDialog.d.ts.map +1 -0
- package/dist/esm/dialogs/SceneBusyIndicatorDialog.js +28 -0
- package/dist/esm/dialogs/SceneBusyIndicatorDialog.js.map +1 -0
- package/dist/esm/dialogs/SceneCommandDialog.d.ts +3 -0
- package/dist/esm/dialogs/SceneCommandDialog.d.ts.map +1 -0
- package/dist/esm/dialogs/SceneCommandDialog.js +45 -0
- package/dist/esm/dialogs/SceneCommandDialog.js.map +1 -0
- package/dist/esm/dialogs/SceneConfirmationDialog.d.ts +2 -0
- package/dist/esm/dialogs/SceneConfirmationDialog.d.ts.map +1 -0
- package/dist/esm/dialogs/SceneConfirmationDialog.js +23 -0
- package/dist/esm/dialogs/SceneConfirmationDialog.js.map +1 -0
- package/dist/esm/dialogs/SceneDialog.d.ts +3 -0
- package/dist/esm/dialogs/SceneDialog.d.ts.map +1 -0
- package/dist/esm/dialogs/SceneDialog.js +39 -0
- package/dist/esm/dialogs/SceneDialog.js.map +1 -0
- package/dist/esm/dialogs/SceneStepperCommandDialog.d.ts +3 -0
- package/dist/esm/dialogs/SceneStepperCommandDialog.d.ts.map +1 -0
- package/dist/esm/dialogs/SceneStepperCommandDialog.js +52 -0
- package/dist/esm/dialogs/SceneStepperCommandDialog.js.map +1 -0
- package/dist/esm/dialogs/index.d.ts +6 -0
- package/dist/esm/dialogs/index.d.ts.map +1 -0
- package/dist/esm/dialogs/index.js +6 -0
- package/dist/esm/dialogs/index.js.map +1 -0
- package/dist/esm/editors/SceneFilterPanel.d.ts +3 -0
- package/dist/esm/editors/SceneFilterPanel.d.ts.map +1 -0
- package/dist/esm/editors/SceneFilterPanel.js +55 -0
- package/dist/esm/editors/SceneFilterPanel.js.map +1 -0
- package/dist/esm/editors/SceneObjectContentEditor.d.ts +3 -0
- package/dist/esm/editors/SceneObjectContentEditor.d.ts.map +1 -0
- package/dist/esm/editors/SceneObjectContentEditor.js +35 -0
- package/dist/esm/editors/SceneObjectContentEditor.js.map +1 -0
- package/dist/esm/editors/SceneObjectNavigationalBar.d.ts +3 -0
- package/dist/esm/editors/SceneObjectNavigationalBar.d.ts.map +1 -0
- package/dist/esm/editors/SceneObjectNavigationalBar.js +32 -0
- package/dist/esm/editors/SceneObjectNavigationalBar.js.map +1 -0
- package/dist/esm/editors/SceneSchemaEditor.d.ts +3 -0
- package/dist/esm/editors/SceneSchemaEditor.d.ts.map +1 -0
- package/dist/esm/editors/SceneSchemaEditor.js +31 -0
- package/dist/esm/editors/SceneSchemaEditor.js.map +1 -0
- package/dist/esm/editors/SceneTimeMachine.d.ts +3 -0
- package/dist/esm/editors/SceneTimeMachine.d.ts.map +1 -0
- package/dist/esm/editors/SceneTimeMachine.js +30 -0
- package/dist/esm/editors/SceneTimeMachine.js.map +1 -0
- package/dist/esm/editors/filterDefinitions.d.ts +3 -0
- package/dist/esm/editors/filterDefinitions.d.ts.map +1 -0
- package/dist/esm/editors/filterDefinitions.js +57 -0
- package/dist/esm/editors/filterDefinitions.js.map +1 -0
- package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.d.ts +2 -0
- package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.d.ts.map +1 -0
- package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.js +15 -0
- package/dist/esm/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.js.map +1 -0
- package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.d.ts +2 -0
- package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.d.ts.map +1 -0
- package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.js +39 -0
- package/dist/esm/editors/for_filterDefinitions/when_reading_filter_definitions.js.map +1 -0
- package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.d.ts +2 -0
- package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.d.ts.map +1 -0
- package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.js +32 -0
- package/dist/esm/editors/for_timeMachineVersions/when_reading_versions.js.map +1 -0
- package/dist/esm/editors/index.d.ts +9 -0
- package/dist/esm/editors/index.d.ts.map +1 -0
- package/dist/esm/editors/index.js +9 -0
- package/dist/esm/editors/index.js.map +1 -0
- package/dist/esm/editors/timeMachineVersions.d.ts +3 -0
- package/dist/esm/editors/timeMachineVersions.d.ts.map +1 -0
- package/dist/esm/editors/timeMachineVersions.js +42 -0
- package/dist/esm/editors/timeMachineVersions.js.map +1 -0
- package/dist/esm/editors/useEditableCopy.d.ts +2 -0
- package/dist/esm/editors/useEditableCopy.d.ts.map +1 -0
- package/dist/esm/editors/useEditableCopy.js +37 -0
- package/dist/esm/editors/useEditableCopy.js.map +1 -0
- package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.d.ts +2 -0
- package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.d.ts.map +1 -0
- package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.js +25 -0
- package/dist/esm/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.js.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.d.ts +2 -0
- package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.d.ts.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.js +34 -0
- package/dist/esm/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.js.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.d.ts +2 -0
- package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.d.ts.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.js +49 -0
- package/dist/esm/for_cratisComponentsPackage/when_resolving_its_dependencies.js.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.d.ts +2 -0
- package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.d.ts.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.js +27 -0
- package/dist/esm/for_cratisComponentsPackage/when_validating_the_bundle.js.map +1 -0
- package/dist/esm/for_properties/when_a_property_has_the_wrong_type.d.ts +2 -0
- package/dist/esm/for_properties/when_a_property_has_the_wrong_type.d.ts.map +1 -0
- package/dist/esm/for_properties/when_a_property_has_the_wrong_type.js +24 -0
- package/dist/esm/for_properties/when_a_property_has_the_wrong_type.js.map +1 -0
- package/dist/esm/for_properties/when_a_property_is_missing.d.ts +2 -0
- package/dist/esm/for_properties/when_a_property_is_missing.d.ts.map +1 -0
- package/dist/esm/for_properties/when_a_property_is_missing.js +13 -0
- package/dist/esm/for_properties/when_a_property_is_missing.js.map +1 -0
- package/dist/esm/for_properties/when_a_property_is_present.d.ts +2 -0
- package/dist/esm/for_properties/when_a_property_is_present.d.ts.map +1 -0
- package/dist/esm/for_properties/when_a_property_is_present.js +21 -0
- package/dist/esm/for_properties/when_a_property_is_present.js.map +1 -0
- package/dist/esm/forms/SceneCommandForm.d.ts +3 -0
- package/dist/esm/forms/SceneCommandForm.d.ts.map +1 -0
- package/dist/esm/forms/SceneCommandForm.js +44 -0
- package/dist/esm/forms/SceneCommandForm.js.map +1 -0
- package/dist/esm/forms/fields/CommandFormField.d.ts +9 -0
- package/dist/esm/forms/fields/CommandFormField.d.ts.map +1 -0
- package/dist/esm/forms/fields/CommandFormField.js +29 -0
- package/dist/esm/forms/fields/CommandFormField.js.map +1 -0
- package/dist/esm/forms/fields/FieldBinding.d.ts +6 -0
- package/dist/esm/forms/fields/FieldBinding.d.ts.map +1 -0
- package/dist/esm/forms/fields/FieldBinding.js +2 -0
- package/dist/esm/forms/fields/FieldBinding.js.map +1 -0
- package/dist/esm/forms/fields/SceneCalendarField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneCalendarField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneCalendarField.js +39 -0
- package/dist/esm/forms/fields/SceneCalendarField.js.map +1 -0
- package/dist/esm/forms/fields/SceneCheckboxField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneCheckboxField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneCheckboxField.js +26 -0
- package/dist/esm/forms/fields/SceneCheckboxField.js.map +1 -0
- package/dist/esm/forms/fields/SceneChipsField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneChipsField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneChipsField.js +31 -0
- package/dist/esm/forms/fields/SceneChipsField.js.map +1 -0
- package/dist/esm/forms/fields/SceneColorPickerField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneColorPickerField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneColorPickerField.js +28 -0
- package/dist/esm/forms/fields/SceneColorPickerField.js.map +1 -0
- package/dist/esm/forms/fields/SceneDropdownField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneDropdownField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneDropdownField.js +33 -0
- package/dist/esm/forms/fields/SceneDropdownField.js.map +1 -0
- package/dist/esm/forms/fields/SceneInputTextField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneInputTextField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneInputTextField.js +43 -0
- package/dist/esm/forms/fields/SceneInputTextField.js.map +1 -0
- package/dist/esm/forms/fields/SceneMultiSelectField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneMultiSelectField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneMultiSelectField.js +38 -0
- package/dist/esm/forms/fields/SceneMultiSelectField.js.map +1 -0
- package/dist/esm/forms/fields/SceneNumberField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneNumberField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneNumberField.js +30 -0
- package/dist/esm/forms/fields/SceneNumberField.js.map +1 -0
- package/dist/esm/forms/fields/SceneRadioButtonField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneRadioButtonField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneRadioButtonField.js +33 -0
- package/dist/esm/forms/fields/SceneRadioButtonField.js.map +1 -0
- package/dist/esm/forms/fields/SceneRadioGroupField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneRadioGroupField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneRadioGroupField.js +34 -0
- package/dist/esm/forms/fields/SceneRadioGroupField.js.map +1 -0
- package/dist/esm/forms/fields/SceneSliderField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneSliderField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneSliderField.js +29 -0
- package/dist/esm/forms/fields/SceneSliderField.js.map +1 -0
- package/dist/esm/forms/fields/SceneTextAreaField.d.ts +3 -0
- package/dist/esm/forms/fields/SceneTextAreaField.d.ts.map +1 -0
- package/dist/esm/forms/fields/SceneTextAreaField.js +29 -0
- package/dist/esm/forms/fields/SceneTextAreaField.js.map +1 -0
- package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.d.ts +2 -0
- package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.d.ts.map +1 -0
- package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.js +12 -0
- package/dist/esm/forms/fields/for_CommandFormField/when_the_field_names_no_property.js.map +1 -0
- package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.d.ts +2 -0
- package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.d.ts.map +1 -0
- package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js +24 -0
- package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js.map +1 -0
- package/dist/esm/forms/fields/index.d.ts +16 -0
- package/dist/esm/forms/fields/index.d.ts.map +1 -0
- package/dist/esm/forms/fields/index.js +16 -0
- package/dist/esm/forms/fields/index.js.map +1 -0
- package/dist/esm/forms/fields/resolveFieldBinding.d.ts +4 -0
- package/dist/esm/forms/fields/resolveFieldBinding.d.ts.map +1 -0
- package/dist/esm/forms/fields/resolveFieldBinding.js +25 -0
- package/dist/esm/forms/fields/resolveFieldBinding.js.map +1 -0
- package/dist/esm/forms/index.d.ts +3 -0
- package/dist/esm/forms/index.d.ts.map +1 -0
- package/dist/esm/forms/index.js +3 -0
- package/dist/esm/forms/index.js.map +1 -0
- package/dist/esm/given.d.ts +3 -0
- package/dist/esm/given.d.ts.map +1 -0
- package/dist/esm/given.js +21 -0
- package/dist/esm/given.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +51 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/pages/SceneDataPage.d.ts +3 -0
- package/dist/esm/pages/SceneDataPage.d.ts.map +1 -0
- package/dist/esm/pages/SceneDataPage.js +43 -0
- package/dist/esm/pages/SceneDataPage.js.map +1 -0
- package/dist/esm/pages/SceneFormElement.d.ts +3 -0
- package/dist/esm/pages/SceneFormElement.d.ts.map +1 -0
- package/dist/esm/pages/SceneFormElement.js +24 -0
- package/dist/esm/pages/SceneFormElement.js.map +1 -0
- package/dist/esm/pages/ScenePage.d.ts +3 -0
- package/dist/esm/pages/ScenePage.d.ts.map +1 -0
- package/dist/esm/pages/ScenePage.js +26 -0
- package/dist/esm/pages/ScenePage.js.map +1 -0
- package/dist/esm/pages/for_ScenePage/when_rendering_a_page.d.ts +2 -0
- package/dist/esm/pages/for_ScenePage/when_rendering_a_page.d.ts.map +1 -0
- package/dist/esm/pages/for_ScenePage/when_rendering_a_page.js +31 -0
- package/dist/esm/pages/for_ScenePage/when_rendering_a_page.js.map +1 -0
- package/dist/esm/pages/index.d.ts +4 -0
- package/dist/esm/pages/index.d.ts.map +1 -0
- package/dist/esm/pages/index.js +4 -0
- package/dist/esm/pages/index.js.map +1 -0
- package/dist/esm/properties.d.ts +9 -0
- package/dist/esm/properties.d.ts.map +1 -0
- package/dist/esm/properties.js +95 -0
- package/dist/esm/properties.js.map +1 -0
- package/dist/esm/toolbar/SceneToolbar.d.ts +3 -0
- package/dist/esm/toolbar/SceneToolbar.d.ts.map +1 -0
- package/dist/esm/toolbar/SceneToolbar.js +25 -0
- package/dist/esm/toolbar/SceneToolbar.js.map +1 -0
- package/dist/esm/toolbar/SceneToolbarButton.d.ts +3 -0
- package/dist/esm/toolbar/SceneToolbarButton.d.ts.map +1 -0
- package/dist/esm/toolbar/SceneToolbarButton.js +30 -0
- package/dist/esm/toolbar/SceneToolbarButton.js.map +1 -0
- package/dist/esm/toolbar/SceneToolbarGroup.d.ts +3 -0
- package/dist/esm/toolbar/SceneToolbarGroup.d.ts.map +1 -0
- package/dist/esm/toolbar/SceneToolbarGroup.js +25 -0
- package/dist/esm/toolbar/SceneToolbarGroup.js.map +1 -0
- package/dist/esm/toolbar/SceneToolbarSeparator.d.ts +3 -0
- package/dist/esm/toolbar/SceneToolbarSeparator.d.ts.map +1 -0
- package/dist/esm/toolbar/SceneToolbarSeparator.js +23 -0
- package/dist/esm/toolbar/SceneToolbarSeparator.js.map +1 -0
- package/dist/esm/toolbar/index.d.ts +5 -0
- package/dist/esm/toolbar/index.d.ts.map +1 -0
- package/dist/esm/toolbar/index.js +5 -0
- package/dist/esm/toolbar/index.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/editors/SceneFilterPanel.tsx +52 -0
- package/editors/SceneObjectContentEditor.tsx +36 -0
- package/editors/SceneObjectNavigationalBar.tsx +34 -0
- package/editors/SceneSchemaEditor.tsx +34 -0
- package/editors/SceneTimeMachine.tsx +32 -0
- package/editors/filterDefinitions.ts +59 -0
- package/editors/for_SceneObjectNavigationalBar/when_navigating_back_up_the_trail.tsx +18 -0
- package/editors/for_filterDefinitions/when_reading_filter_definitions.ts +49 -0
- package/editors/for_timeMachineVersions/when_reading_versions.ts +39 -0
- package/editors/index.ts +11 -0
- package/editors/timeMachineVersions.ts +44 -0
- package/editors/useEditableCopy.ts +32 -0
- package/for_cratisComponents/when_rendering_a_screen_through_the_real_renderer.tsx +37 -0
- package/for_cratisComponentsPackage/when_a_profile_ranks_it_above_the_packages_it_layers_on.ts +49 -0
- package/for_cratisComponentsPackage/when_resolving_its_dependencies.ts +68 -0
- package/for_cratisComponentsPackage/when_validating_the_bundle.ts +39 -0
- package/for_properties/when_a_property_has_the_wrong_type.ts +41 -0
- package/for_properties/when_a_property_is_missing.ts +26 -0
- package/for_properties/when_a_property_is_present.ts +36 -0
- package/forms/SceneCommandForm.tsx +45 -0
- package/forms/fields/CommandFormField.tsx +32 -0
- package/forms/fields/FieldBinding.ts +26 -0
- package/forms/fields/SceneCalendarField.tsx +41 -0
- package/forms/fields/SceneCheckboxField.tsx +29 -0
- package/forms/fields/SceneChipsField.tsx +34 -0
- package/forms/fields/SceneColorPickerField.tsx +31 -0
- package/forms/fields/SceneDropdownField.tsx +36 -0
- package/forms/fields/SceneInputTextField.tsx +37 -0
- package/forms/fields/SceneMultiSelectField.tsx +40 -0
- package/forms/fields/SceneNumberField.tsx +33 -0
- package/forms/fields/SceneRadioButtonField.tsx +37 -0
- package/forms/fields/SceneRadioGroupField.tsx +36 -0
- package/forms/fields/SceneSliderField.tsx +32 -0
- package/forms/fields/SceneTextAreaField.tsx +32 -0
- package/forms/fields/for_CommandFormField/when_the_field_names_no_property.tsx +16 -0
- package/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts +34 -0
- package/forms/fields/index.ts +18 -0
- package/forms/fields/resolveFieldBinding.ts +27 -0
- package/forms/index.ts +5 -0
- package/given.ts +33 -0
- package/index.ts +14 -0
- package/package.json +68 -0
- package/pages/SceneDataPage.tsx +40 -0
- package/pages/SceneFormElement.tsx +21 -0
- package/pages/ScenePage.tsx +30 -0
- package/pages/for_ScenePage/when_rendering_a_page.tsx +39 -0
- package/pages/index.ts +6 -0
- package/properties.ts +112 -0
- package/storybook-static/assets/CommandDialog-B78_eDOU.css +1 -0
- package/storybook-static/assets/CratisComponents-qPooLvTv.css +1 -0
- package/storybook-static/assets/DataPage-CroWzXsC.css +1 -0
- package/storybook-static/assets/iframe-DQhZBFM5.css +1 -0
- package/theme/sceneTokenBridge.css +72 -0
- package/toolbar/SceneToolbar.tsx +28 -0
- package/toolbar/SceneToolbarButton.tsx +31 -0
- package/toolbar/SceneToolbarGroup.tsx +28 -0
- package/toolbar/SceneToolbarSeparator.tsx +21 -0
- package/toolbar/index.ts +7 -0
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
arrayProperty,
|
|
6
|
+
booleanProperty,
|
|
7
|
+
numberProperty,
|
|
8
|
+
objectArrayProperty,
|
|
9
|
+
objectProperty,
|
|
10
|
+
stringArrayProperty,
|
|
11
|
+
stringProperty,
|
|
12
|
+
unionProperty,
|
|
13
|
+
} from '../properties';
|
|
14
|
+
|
|
15
|
+
describe('when a property has the wrong type', () => {
|
|
16
|
+
const properties: Record<string, unknown> = {
|
|
17
|
+
title: 42,
|
|
18
|
+
panel: 'yes',
|
|
19
|
+
rows: 'ten',
|
|
20
|
+
notANumber: Number.NaN,
|
|
21
|
+
options: 'first,second',
|
|
22
|
+
schema: ['not', 'an', 'object'],
|
|
23
|
+
orientation: 'diagonal',
|
|
24
|
+
fields: ['name', 7, 'number'],
|
|
25
|
+
entries: [{ key: 'a' }, 'not an object'],
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
it('should not read a number as a string', () => (stringProperty(properties, 'title') === undefined).should.be.true);
|
|
29
|
+
it('should not read a string as a boolean', () => (booleanProperty(properties, 'panel') === undefined).should.be.true);
|
|
30
|
+
it('should not read a string as a number', () => (numberProperty(properties, 'rows') === undefined).should.be.true);
|
|
31
|
+
it('should not read NaN as a number', () => (numberProperty(properties, 'notANumber') === undefined).should.be.true);
|
|
32
|
+
it('should not read a string as an array', () => (arrayProperty(properties, 'options') === undefined).should.be.true);
|
|
33
|
+
it('should not read an array as an object', () => (objectProperty(properties, 'schema') === undefined).should.be.true);
|
|
34
|
+
|
|
35
|
+
it('should reject a value outside the allowed union', () =>
|
|
36
|
+
(unionProperty(properties, 'orientation', ['vertical', 'horizontal']) === undefined).should.be.true);
|
|
37
|
+
|
|
38
|
+
it('should keep only the string elements of a string array', () => stringArrayProperty(properties, 'fields')!.should.deep.equal(['name', 'number']));
|
|
39
|
+
|
|
40
|
+
it('should keep only the object elements of an object array', () => objectArrayProperty(properties, 'entries')!.should.deep.equal([{ key: 'a' }]));
|
|
41
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
arrayProperty,
|
|
6
|
+
booleanProperty,
|
|
7
|
+
numberProperty,
|
|
8
|
+
objectArrayProperty,
|
|
9
|
+
objectProperty,
|
|
10
|
+
stringArrayProperty,
|
|
11
|
+
stringProperty,
|
|
12
|
+
unionProperty,
|
|
13
|
+
} from '../properties';
|
|
14
|
+
|
|
15
|
+
describe('when a property is missing', () => {
|
|
16
|
+
const properties: Record<string, unknown> = {};
|
|
17
|
+
|
|
18
|
+
it('should read no string', () => (stringProperty(properties, 'title') === undefined).should.be.true);
|
|
19
|
+
it('should read no boolean', () => (booleanProperty(properties, 'panel') === undefined).should.be.true);
|
|
20
|
+
it('should read no number', () => (numberProperty(properties, 'rows') === undefined).should.be.true);
|
|
21
|
+
it('should read no array', () => (arrayProperty(properties, 'options') === undefined).should.be.true);
|
|
22
|
+
it('should read no string array', () => (stringArrayProperty(properties, 'fields') === undefined).should.be.true);
|
|
23
|
+
it('should read no object array', () => (objectArrayProperty(properties, 'options') === undefined).should.be.true);
|
|
24
|
+
it('should read no object', () => (objectProperty(properties, 'schema') === undefined).should.be.true);
|
|
25
|
+
it('should read no union value', () => (unionProperty(properties, 'orientation', ['vertical', 'horizontal']) === undefined).should.be.true);
|
|
26
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
arrayProperty,
|
|
6
|
+
booleanProperty,
|
|
7
|
+
numberProperty,
|
|
8
|
+
objectArrayProperty,
|
|
9
|
+
objectProperty,
|
|
10
|
+
stringArrayProperty,
|
|
11
|
+
stringProperty,
|
|
12
|
+
unionProperty,
|
|
13
|
+
} from '../properties';
|
|
14
|
+
|
|
15
|
+
describe('when a property is present', () => {
|
|
16
|
+
const properties: Record<string, unknown> = {
|
|
17
|
+
title: 'Invoices',
|
|
18
|
+
panel: false,
|
|
19
|
+
rows: 0,
|
|
20
|
+
options: [{ label: 'Draft', value: 'draft' }],
|
|
21
|
+
fields: ['number', 'customer'],
|
|
22
|
+
schema: { type: 'object' },
|
|
23
|
+
orientation: 'vertical',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
it('should read the string', () => stringProperty(properties, 'title')!.should.equal('Invoices'));
|
|
27
|
+
it('should read a false boolean rather than treating it as absent', () => booleanProperty(properties, 'panel')!.should.equal(false));
|
|
28
|
+
it('should read a zero number rather than treating it as absent', () => numberProperty(properties, 'rows')!.should.equal(0));
|
|
29
|
+
it('should read the array', () => arrayProperty(properties, 'options')!.should.have.lengthOf(1));
|
|
30
|
+
it('should read the string array', () => stringArrayProperty(properties, 'fields')!.should.deep.equal(['number', 'customer']));
|
|
31
|
+
it('should read the object array', () => objectArrayProperty(properties, 'options')!.should.deep.equal([{ label: 'Draft', value: 'draft' }]));
|
|
32
|
+
it('should read the object', () => objectProperty(properties, 'schema')!.should.deep.equal({ type: 'object' }));
|
|
33
|
+
|
|
34
|
+
it('should read a value that is in the allowed union', () =>
|
|
35
|
+
unionProperty(properties, 'orientation', ['vertical', 'horizontal'])!.should.equal('vertical'));
|
|
36
|
+
});
|
|
@@ -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 { ComponentType, lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { ArcRuntimeBoundary, BindingKind, BoundConstructor, MissingBinding, resolveElementBinding } from '../bindings';
|
|
7
|
+
import { stringArrayProperty } from '../properties';
|
|
8
|
+
|
|
9
|
+
interface AutoCommandFormElementProps {
|
|
10
|
+
command: BoundConstructor;
|
|
11
|
+
exclude?: string[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `AutoCommandForm` types `exclude` as `(keyof TCommand)[]`, which collapses to `never[]` when the
|
|
16
|
+
* command type is only known at runtime - as it always is here, since the class arrives from the binding
|
|
17
|
+
* registry rather than from a type annotation. The conversion states the shape this adapter actually
|
|
18
|
+
* passes; the underlying component reads `exclude` as property names either way.
|
|
19
|
+
*/
|
|
20
|
+
const AutoCommandForm = lazy(async () => ({
|
|
21
|
+
default: (await import('@cratis/components/CommandForm')).AutoCommandForm as unknown as ComponentType<AutoCommandFormElementProps>,
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The `Cratis.Components:commandForm` component - `AutoCommandForm` from `@cratis/components/CommandForm`.
|
|
26
|
+
*
|
|
27
|
+
* `AutoCommandForm` rather than `CommandForm`, because a screen that had to list every field by hand
|
|
28
|
+
* would go stale the moment a property is added to the command on the backend. `AutoCommandForm` reads
|
|
29
|
+
* the command's own property descriptors and picks a field component per property type, so the form
|
|
30
|
+
* follows the command - which is the same guarantee Arc's generated proxies give the rest of the stack.
|
|
31
|
+
*
|
|
32
|
+
* A screen that does want to place fields itself puts the field components from this package in the
|
|
33
|
+
* `content` slot and names them individually; `exclude` keeps `AutoCommandForm` from generating a second
|
|
34
|
+
* copy of anything placed that way.
|
|
35
|
+
*/
|
|
36
|
+
export function SceneCommandForm({ element }: RegisteredComponentProps) {
|
|
37
|
+
const { name, target } = resolveElementBinding(element, BindingKind.Command);
|
|
38
|
+
if (!target) return <MissingBinding element={element} kind={BindingKind.Command} name={name} />;
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<ArcRuntimeBoundary>
|
|
42
|
+
<AutoCommandForm command={target} exclude={stringArrayProperty(element.properties, 'exclude')} />
|
|
43
|
+
</ArcRuntimeBoundary>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { ReactNode } from 'react';
|
|
5
|
+
import { ExternalComponent } from '@cratis/scene.model';
|
|
6
|
+
import { ArcRuntimeBoundary, Placeholder } from '../../bindings';
|
|
7
|
+
import { FieldBinding } from './FieldBinding';
|
|
8
|
+
import { resolveFieldBinding } from './resolveFieldBinding';
|
|
9
|
+
|
|
10
|
+
export interface CommandFormFieldProps {
|
|
11
|
+
/** The element being adapted, read for its `property`, `title` and `description`. */
|
|
12
|
+
element: ExternalComponent;
|
|
13
|
+
|
|
14
|
+
/** Renders the real `@cratis/components` field, given the binding built from the element. */
|
|
15
|
+
children: (binding: FieldBinding) => ReactNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The part every command form field adapter does identically: resolve the element's `property` into a
|
|
20
|
+
* {@link FieldBinding}, place a visible placeholder when there is none, and isolate the lazily loaded
|
|
21
|
+
* Arc-bound field behind an {@link ArcRuntimeBoundary}.
|
|
22
|
+
*
|
|
23
|
+
* Factored out rather than repeated twelve times so that the behavior a screen author depends on - an
|
|
24
|
+
* unbound field shows up as an unbound field, and one broken field does not take the form with it - is
|
|
25
|
+
* defined once and cannot drift between field types.
|
|
26
|
+
*/
|
|
27
|
+
export function CommandFormField({ element, children }: CommandFormFieldProps) {
|
|
28
|
+
const binding = resolveFieldBinding(element);
|
|
29
|
+
if (!binding) return <Placeholder element={element} problem="Missing 'property'" />;
|
|
30
|
+
|
|
31
|
+
return <ArcRuntimeBoundary>{children(binding)}</ArcRuntimeBoundary>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* What every `@cratis/components` command form field needs in order to bind itself to one property of
|
|
6
|
+
* the command the surrounding form is editing.
|
|
7
|
+
*
|
|
8
|
+
* The library's fields take an *accessor* (`value={command => command.name}`) rather than a property
|
|
9
|
+
* name, so that a hand-written form is typechecked end to end against the generated command proxy. A
|
|
10
|
+
* screen has no types to check against - it carries the property name as a string - so this is where the
|
|
11
|
+
* name becomes the accessor the field expects.
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldBinding {
|
|
14
|
+
/**
|
|
15
|
+
* Reads the bound property off the command instance the form hands in. Built from the screen's
|
|
16
|
+
* `property` name, which is the only form the binding can take once it has been through a `.play`
|
|
17
|
+
* file.
|
|
18
|
+
*/
|
|
19
|
+
value: (instance: Record<string, unknown>) => unknown;
|
|
20
|
+
|
|
21
|
+
/** The label rendered with the field. */
|
|
22
|
+
title: string;
|
|
23
|
+
|
|
24
|
+
/** Helper text rendered under the field, when the screen supplies any. */
|
|
25
|
+
description?: string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { booleanProperty, stringProperty, unionProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const CalendarField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).CalendarField }));
|
|
10
|
+
|
|
11
|
+
/** Whether times are shown on a 12- or 24-hour clock. */
|
|
12
|
+
const hourFormats = ['12', '24'] as const;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The `Cratis.Components:calendarField` component - `CalendarField` from `@cratis/components/CommandForm`.
|
|
16
|
+
*
|
|
17
|
+
* Binds to a `Date` property, so the command receives a real date rather than the string an
|
|
18
|
+
* `<input type="date">` produces - which matters because the backend's command record is typed and a
|
|
19
|
+
* string would fail model binding rather than the field.
|
|
20
|
+
*
|
|
21
|
+
* `minDate` and `maxDate` are deliberately not exposed: they would have to come out of the property bag
|
|
22
|
+
* as strings and be parsed here, and a bound range that silently misparses is worse than no bound range.
|
|
23
|
+
* A date range that has to be enforced belongs in the command's validator, where it is authoritative.
|
|
24
|
+
*/
|
|
25
|
+
export function SceneCalendarField({ element }: RegisteredComponentProps) {
|
|
26
|
+
return (
|
|
27
|
+
<CommandFormField element={element}>
|
|
28
|
+
{binding => (
|
|
29
|
+
<CalendarField
|
|
30
|
+
{...binding}
|
|
31
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
32
|
+
dateFormat={stringProperty(element.properties, 'dateFormat')}
|
|
33
|
+
showIcon={booleanProperty(element.properties, 'showIcon')}
|
|
34
|
+
showTime={booleanProperty(element.properties, 'showTime')}
|
|
35
|
+
hourFormat={unionProperty(element.properties, 'hourFormat', hourFormats)}
|
|
36
|
+
className={stringProperty(element.properties, 'className')}
|
|
37
|
+
/>
|
|
38
|
+
)}
|
|
39
|
+
</CommandFormField>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const CheckboxField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).CheckboxField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:checkboxField` component - `CheckboxField` from `@cratis/components/CommandForm`.
|
|
13
|
+
*
|
|
14
|
+
* `label` is the text beside the box and is distinct from `title`, which is the field's own label above
|
|
15
|
+
* it - a checkbox usually wants only one of the two, and which one is a layout decision the screen makes.
|
|
16
|
+
*/
|
|
17
|
+
export function SceneCheckboxField({ element }: RegisteredComponentProps) {
|
|
18
|
+
return (
|
|
19
|
+
<CommandFormField element={element}>
|
|
20
|
+
{binding => (
|
|
21
|
+
<CheckboxField
|
|
22
|
+
{...binding}
|
|
23
|
+
label={stringProperty(element.properties, 'label')}
|
|
24
|
+
className={stringProperty(element.properties, 'className')}
|
|
25
|
+
/>
|
|
26
|
+
)}
|
|
27
|
+
</CommandFormField>
|
|
28
|
+
);
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { booleanProperty, numberProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const ChipsField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).ChipsField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:chipsField` component - `ChipsField` from `@cratis/components/CommandForm`.
|
|
13
|
+
*
|
|
14
|
+
* A free-form list of strings - tags, labels, recipients - where the values are typed rather than picked.
|
|
15
|
+
* `multiSelectField` is the right choice whenever the values come from a known set; this one exists for
|
|
16
|
+
* when they do not.
|
|
17
|
+
*/
|
|
18
|
+
export function SceneChipsField({ element }: RegisteredComponentProps) {
|
|
19
|
+
return (
|
|
20
|
+
<CommandFormField element={element}>
|
|
21
|
+
{binding => (
|
|
22
|
+
<ChipsField
|
|
23
|
+
{...binding}
|
|
24
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
25
|
+
max={numberProperty(element.properties, 'max')}
|
|
26
|
+
separator={stringProperty(element.properties, 'separator')}
|
|
27
|
+
addOnBlur={booleanProperty(element.properties, 'addOnBlur')}
|
|
28
|
+
allowDuplicate={booleanProperty(element.properties, 'allowDuplicate')}
|
|
29
|
+
className={stringProperty(element.properties, 'className')}
|
|
30
|
+
/>
|
|
31
|
+
)}
|
|
32
|
+
</CommandFormField>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { booleanProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const ColorPickerField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).ColorPickerField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:colorPickerField` component - `ColorPickerField` from
|
|
13
|
+
* `@cratis/components/CommandForm`.
|
|
14
|
+
*
|
|
15
|
+
* Binds a color to a string property. `inline` decides whether the picker is always open or opens from a
|
|
16
|
+
* swatch, which is a layout decision rather than a behavioral one.
|
|
17
|
+
*/
|
|
18
|
+
export function SceneColorPickerField({ element }: RegisteredComponentProps) {
|
|
19
|
+
return (
|
|
20
|
+
<CommandFormField element={element}>
|
|
21
|
+
{binding => (
|
|
22
|
+
<ColorPickerField
|
|
23
|
+
{...binding}
|
|
24
|
+
inline={booleanProperty(element.properties, 'inline')}
|
|
25
|
+
defaultColor={stringProperty(element.properties, 'defaultColor')}
|
|
26
|
+
className={stringProperty(element.properties, 'className')}
|
|
27
|
+
/>
|
|
28
|
+
)}
|
|
29
|
+
</CommandFormField>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { objectArrayProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const DropdownField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).DropdownField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:dropdownField` component - `DropdownField` from `@cratis/components/CommandForm`.
|
|
13
|
+
*
|
|
14
|
+
* Single selection from a fixed list the screen carries inline. `optionLabel` and `optionValue` default
|
|
15
|
+
* to `label` and `value`, the shape an authored list takes when nobody says otherwise, so the common
|
|
16
|
+
* case needs only `options`.
|
|
17
|
+
*
|
|
18
|
+
* Options that have to come from the backend are a different component: bind the list to a query with
|
|
19
|
+
* `dataTable`, or register the lookup as its own query. A property bag is the wrong place for data.
|
|
20
|
+
*/
|
|
21
|
+
export function SceneDropdownField({ element }: RegisteredComponentProps) {
|
|
22
|
+
return (
|
|
23
|
+
<CommandFormField element={element}>
|
|
24
|
+
{binding => (
|
|
25
|
+
<DropdownField
|
|
26
|
+
{...binding}
|
|
27
|
+
options={objectArrayProperty(element.properties, 'options') ?? []}
|
|
28
|
+
optionLabel={stringProperty(element.properties, 'optionLabel') ?? 'label'}
|
|
29
|
+
optionValue={stringProperty(element.properties, 'optionValue') ?? 'value'}
|
|
30
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
31
|
+
className={stringProperty(element.properties, 'className')}
|
|
32
|
+
/>
|
|
33
|
+
)}
|
|
34
|
+
</CommandFormField>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { stringProperty, unionProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const InputTextField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).InputTextField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The HTML input types `InputTextField` supports, as a tuple so `unionProperty` narrows an authored
|
|
13
|
+
* string to exactly one of them and falls back to the component's own default for anything else.
|
|
14
|
+
*/
|
|
15
|
+
const inputTypes = ['text', 'email', 'password', 'color', 'date', 'datetime-local', 'time', 'url', 'tel', 'search'] as const;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The `Cratis.Components:inputTextField` component - `InputTextField` from `@cratis/components/CommandForm`.
|
|
19
|
+
*
|
|
20
|
+
* The single-line text field, and the one a screen reaches for most. `type` carries all the way through
|
|
21
|
+
* to the HTML input, so `email`, `password` and `url` fields are this component too rather than separate
|
|
22
|
+
* names - the browser's own keyboard and validation behavior is what differs, not the binding.
|
|
23
|
+
*/
|
|
24
|
+
export function SceneInputTextField({ element }: RegisteredComponentProps) {
|
|
25
|
+
return (
|
|
26
|
+
<CommandFormField element={element}>
|
|
27
|
+
{binding => (
|
|
28
|
+
<InputTextField
|
|
29
|
+
{...binding}
|
|
30
|
+
type={unionProperty(element.properties, 'type', inputTypes)}
|
|
31
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
32
|
+
className={stringProperty(element.properties, 'className')}
|
|
33
|
+
/>
|
|
34
|
+
)}
|
|
35
|
+
</CommandFormField>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { booleanProperty, numberProperty, objectArrayProperty, stringProperty, unionProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const MultiSelectField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).MultiSelectField }));
|
|
10
|
+
|
|
11
|
+
/** How the current selection is summarized in the closed control. */
|
|
12
|
+
const displayModes = ['comma', 'chip'] as const;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The `Cratis.Components:multiSelectField` component - `MultiSelectField` from
|
|
16
|
+
* `@cratis/components/CommandForm`.
|
|
17
|
+
*
|
|
18
|
+
* The many-valued counterpart to `dropdownField`, binding to a collection property on the command rather
|
|
19
|
+
* than a scalar one.
|
|
20
|
+
*/
|
|
21
|
+
export function SceneMultiSelectField({ element }: RegisteredComponentProps) {
|
|
22
|
+
return (
|
|
23
|
+
<CommandFormField element={element}>
|
|
24
|
+
{binding => (
|
|
25
|
+
<MultiSelectField
|
|
26
|
+
{...binding}
|
|
27
|
+
options={objectArrayProperty(element.properties, 'options') ?? []}
|
|
28
|
+
optionLabel={stringProperty(element.properties, 'optionLabel') ?? 'label'}
|
|
29
|
+
optionValue={stringProperty(element.properties, 'optionValue') ?? 'value'}
|
|
30
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
31
|
+
display={unionProperty(element.properties, 'display', displayModes)}
|
|
32
|
+
maxSelectedLabels={numberProperty(element.properties, 'maxSelectedLabels')}
|
|
33
|
+
filter={booleanProperty(element.properties, 'filter')}
|
|
34
|
+
showClear={booleanProperty(element.properties, 'showClear')}
|
|
35
|
+
className={stringProperty(element.properties, 'className')}
|
|
36
|
+
/>
|
|
37
|
+
)}
|
|
38
|
+
</CommandFormField>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
@@ -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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { numberProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const NumberField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).NumberField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:numberField` component - `NumberField` from `@cratis/components/CommandForm`.
|
|
13
|
+
*
|
|
14
|
+
* PrimeReact's `InputNumber` behind the command binding, so the bound property stays a number rather
|
|
15
|
+
* than the string an `<input type="number">` would hand back. `min`, `max` and `step` are client-side
|
|
16
|
+
* affordances only - the authoritative check is still the backend's validation on the command.
|
|
17
|
+
*/
|
|
18
|
+
export function SceneNumberField({ element }: RegisteredComponentProps) {
|
|
19
|
+
return (
|
|
20
|
+
<CommandFormField element={element}>
|
|
21
|
+
{binding => (
|
|
22
|
+
<NumberField
|
|
23
|
+
{...binding}
|
|
24
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
25
|
+
min={numberProperty(element.properties, 'min')}
|
|
26
|
+
max={numberProperty(element.properties, 'max')}
|
|
27
|
+
step={numberProperty(element.properties, 'step')}
|
|
28
|
+
className={stringProperty(element.properties, 'className')}
|
|
29
|
+
/>
|
|
30
|
+
)}
|
|
31
|
+
</CommandFormField>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { numberProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const RadioButtonField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).RadioButtonField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:radioButtonField` component - `RadioButtonField` from
|
|
13
|
+
* `@cratis/components/CommandForm`.
|
|
14
|
+
*
|
|
15
|
+
* One button of a mutually exclusive set, for a screen that needs the choices placed individually rather
|
|
16
|
+
* than as a block. `buttonValue` is the value this particular button writes to the bound property, and
|
|
17
|
+
* the whole set is tied together by every button naming the same `property`.
|
|
18
|
+
*
|
|
19
|
+
* `buttonValue` is read as a string first and a number second, since a choice is usually a string but a
|
|
20
|
+
* numeric code is common enough that forcing it through as `'1'` would bind the wrong value.
|
|
21
|
+
*/
|
|
22
|
+
export function SceneRadioButtonField({ element }: RegisteredComponentProps) {
|
|
23
|
+
const buttonValue = stringProperty(element.properties, 'buttonValue') ?? numberProperty(element.properties, 'buttonValue') ?? '';
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<CommandFormField element={element}>
|
|
27
|
+
{binding => (
|
|
28
|
+
<RadioButtonField
|
|
29
|
+
{...binding}
|
|
30
|
+
buttonValue={buttonValue}
|
|
31
|
+
label={stringProperty(element.properties, 'label')}
|
|
32
|
+
className={stringProperty(element.properties, 'className')}
|
|
33
|
+
/>
|
|
34
|
+
)}
|
|
35
|
+
</CommandFormField>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { objectArrayProperty, stringProperty, unionProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const RadioGroupField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).RadioGroupField }));
|
|
10
|
+
|
|
11
|
+
/** Whether the group's buttons stack or sit in a row. */
|
|
12
|
+
const layouts = ['horizontal', 'vertical'] as const;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The `Cratis.Components:radioGroupField` component - `RadioGroupField` from
|
|
16
|
+
* `@cratis/components/CommandForm`.
|
|
17
|
+
*
|
|
18
|
+
* A whole mutually exclusive choice from one options list, which is what a screen almost always wants.
|
|
19
|
+
* Use `radioButtonField` only when the individual buttons have to be placed apart from one another.
|
|
20
|
+
*/
|
|
21
|
+
export function SceneRadioGroupField({ element }: RegisteredComponentProps) {
|
|
22
|
+
return (
|
|
23
|
+
<CommandFormField element={element}>
|
|
24
|
+
{binding => (
|
|
25
|
+
<RadioGroupField
|
|
26
|
+
{...binding}
|
|
27
|
+
options={objectArrayProperty(element.properties, 'options') ?? []}
|
|
28
|
+
optionLabel={stringProperty(element.properties, 'optionLabel') ?? 'label'}
|
|
29
|
+
optionValue={stringProperty(element.properties, 'optionValue') ?? 'value'}
|
|
30
|
+
layout={unionProperty(element.properties, 'layout', layouts)}
|
|
31
|
+
className={stringProperty(element.properties, 'className')}
|
|
32
|
+
/>
|
|
33
|
+
)}
|
|
34
|
+
</CommandFormField>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { numberProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const SliderField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).SliderField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:sliderField` component - `SliderField` from `@cratis/components/CommandForm`.
|
|
13
|
+
*
|
|
14
|
+
* A numeric field where the range itself is the point - a percentage, a threshold, a weighting. Prefer
|
|
15
|
+
* `numberField` whenever the exact value matters more than its position in a range; a slider trades
|
|
16
|
+
* precision for a sense of scale, and that is only ever a deliberate choice.
|
|
17
|
+
*/
|
|
18
|
+
export function SceneSliderField({ element }: RegisteredComponentProps) {
|
|
19
|
+
return (
|
|
20
|
+
<CommandFormField element={element}>
|
|
21
|
+
{binding => (
|
|
22
|
+
<SliderField
|
|
23
|
+
{...binding}
|
|
24
|
+
min={numberProperty(element.properties, 'min')}
|
|
25
|
+
max={numberProperty(element.properties, 'max')}
|
|
26
|
+
step={numberProperty(element.properties, 'step')}
|
|
27
|
+
className={stringProperty(element.properties, 'className')}
|
|
28
|
+
/>
|
|
29
|
+
)}
|
|
30
|
+
</CommandFormField>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { lazy } from 'react';
|
|
5
|
+
import { RegisteredComponentProps } from '@cratis/scene.react';
|
|
6
|
+
import { numberProperty, stringProperty } from '../../properties';
|
|
7
|
+
import { CommandFormField } from './CommandFormField';
|
|
8
|
+
|
|
9
|
+
const TextAreaField = lazy(async () => ({ default: (await import('@cratis/components/CommandForm')).TextAreaField }));
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `Cratis.Components:textAreaField` component - `TextAreaField` from `@cratis/components/CommandForm`.
|
|
13
|
+
*
|
|
14
|
+
* The multi-line counterpart to `inputTextField`. A separate name rather than a `multiline` flag on that
|
|
15
|
+
* one, because the two wrap different PrimeReact inputs and take different sizing props - collapsing
|
|
16
|
+
* them would mean a `rows` property that is meaningless half the time.
|
|
17
|
+
*/
|
|
18
|
+
export function SceneTextAreaField({ element }: RegisteredComponentProps) {
|
|
19
|
+
return (
|
|
20
|
+
<CommandFormField element={element}>
|
|
21
|
+
{binding => (
|
|
22
|
+
<TextAreaField
|
|
23
|
+
{...binding}
|
|
24
|
+
placeholder={stringProperty(element.properties, 'placeholder')}
|
|
25
|
+
rows={numberProperty(element.properties, 'rows')}
|
|
26
|
+
cols={numberProperty(element.properties, 'cols')}
|
|
27
|
+
className={stringProperty(element.properties, 'className')}
|
|
28
|
+
/>
|
|
29
|
+
)}
|
|
30
|
+
</CommandFormField>
|
|
31
|
+
);
|
|
32
|
+
}
|