@cratis/components 0.1.9
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 +24 -0
- package/CommandDialog/CommandDialog.stories.tsx +25 -0
- package/CommandDialog/CommandDialog.tsx +161 -0
- package/CommandDialog/index.ts +4 -0
- package/CommandForm/CommandForm.stories.tsx +24 -0
- package/CommandForm/CommandForm.tsx +266 -0
- package/CommandForm/CommandFormField.tsx +27 -0
- package/CommandForm/CommandFormFields.tsx +142 -0
- package/CommandForm/DatePickerField.tsx +57 -0
- package/CommandForm/DropdownField.tsx +65 -0
- package/CommandForm/InputTextField.tsx +62 -0
- package/CommandForm/SliderField.tsx +68 -0
- package/CommandForm/index.ts +10 -0
- package/Common/ErrorBoundary.stories.tsx +10 -0
- package/Common/ErrorBoundary.tsx +41 -0
- package/Common/FormElement.stories.tsx +10 -0
- package/Common/FormElement.tsx +20 -0
- package/Common/Page.stories.tsx +10 -0
- package/Common/Page.tsx +21 -0
- package/Common/index.ts +6 -0
- package/DataPage/DataPage.stories.tsx +10 -0
- package/DataPage/DataPage.tsx +191 -0
- package/DataPage/index.ts +4 -0
- package/DataTables/DataTableForObservableQuery.stories.tsx +10 -0
- package/DataTables/DataTableForObservableQuery.tsx +97 -0
- package/DataTables/DataTableForQuery.stories.tsx +10 -0
- package/DataTables/DataTableForQuery.tsx +97 -0
- package/DataTables/index.ts +5 -0
- package/Dialogs/BusyIndicatorDialog.stories.tsx +26 -0
- package/Dialogs/BusyIndicatorDialog.tsx +26 -0
- package/Dialogs/ConfirmationDialog.stories.tsx +36 -0
- package/Dialogs/ConfirmationDialog.tsx +75 -0
- package/Dialogs/index.ts +5 -0
- package/Dropdown/Dropdown.tsx +23 -0
- package/Dropdown/index.ts +4 -0
- package/PivotViewer/PivotViewer.stories.tsx +24 -0
- package/PivotViewer/PivotViewer.tsx +791 -0
- package/PivotViewer/components/AxisLabels.tsx +69 -0
- package/PivotViewer/components/DetailPanel.tsx +108 -0
- package/PivotViewer/components/FilterPanel.tsx +189 -0
- package/PivotViewer/components/FilterPanelContainer.tsx +10 -0
- package/PivotViewer/components/PivotCanvas.tsx +660 -0
- package/PivotViewer/components/PivotViewerMain.tsx +229 -0
- package/PivotViewer/components/RangeHistogramFilter.tsx +220 -0
- package/PivotViewer/components/Spinner.tsx +21 -0
- package/PivotViewer/components/Toolbar.tsx +130 -0
- package/PivotViewer/components/ToolbarContainer.tsx +10 -0
- package/PivotViewer/components/index.ts +12 -0
- package/PivotViewer/components/pivot/animation.ts +108 -0
- package/PivotViewer/components/pivot/buckets.ts +152 -0
- package/PivotViewer/components/pivot/colorResolver.ts +67 -0
- package/PivotViewer/components/pivot/constants.ts +46 -0
- package/PivotViewer/components/pivot/sprites.ts +265 -0
- package/PivotViewer/components/pivot/visibility.ts +319 -0
- package/PivotViewer/constants.ts +9 -0
- package/PivotViewer/engine/layout.ts +149 -0
- package/PivotViewer/engine/pivot.worker.ts +86 -0
- package/PivotViewer/engine/store.ts +437 -0
- package/PivotViewer/engine/types.ts +255 -0
- package/PivotViewer/hooks/index.ts +13 -0
- package/PivotViewer/hooks/useContainerDimensions.ts +45 -0
- package/PivotViewer/hooks/useDimensionState.ts +53 -0
- package/PivotViewer/hooks/useFilterOptions.ts +36 -0
- package/PivotViewer/hooks/useFilterPanelDrag.ts +49 -0
- package/PivotViewer/hooks/useFilterState.ts +106 -0
- package/PivotViewer/hooks/useFilteredData.ts +119 -0
- package/PivotViewer/hooks/usePanning.ts +163 -0
- package/PivotViewer/hooks/usePivotEngine.ts +252 -0
- package/PivotViewer/hooks/useSelectedItem.ts +402 -0
- package/PivotViewer/hooks/useWheelZoom.ts +114 -0
- package/PivotViewer/hooks/useZoomState.ts +34 -0
- package/PivotViewer/index.ts +7 -0
- package/PivotViewer/types.ts +59 -0
- package/PivotViewer/utils/animations.ts +249 -0
- package/PivotViewer/utils/constants.ts +20 -0
- package/PivotViewer/utils/index.ts +6 -0
- package/PivotViewer/utils/selection.ts +292 -0
- package/PivotViewer/utils/utils.ts +259 -0
- package/README.md +1 -0
- package/TimeMachine/EventsView.stories.tsx +10 -0
- package/TimeMachine/EventsView.tsx +119 -0
- package/TimeMachine/Properties.stories.tsx +10 -0
- package/TimeMachine/Properties.tsx +98 -0
- package/TimeMachine/ReadModelView.stories.tsx +10 -0
- package/TimeMachine/ReadModelView.tsx +143 -0
- package/TimeMachine/TimeMachine.stories.tsx +10 -0
- package/TimeMachine/TimeMachine.tsx +244 -0
- package/TimeMachine/index.ts +8 -0
- package/TimeMachine/types.ts +23 -0
- package/dist/cjs/CommandDialog/CommandDialog.js +71 -0
- package/dist/cjs/CommandDialog/CommandDialog.js.map +1 -0
- package/dist/cjs/CommandDialog/index.js +9 -0
- package/dist/cjs/CommandDialog/index.js.map +1 -0
- package/dist/cjs/CommandForm/CommandForm.js +179 -0
- package/dist/cjs/CommandForm/CommandForm.js.map +1 -0
- package/dist/cjs/CommandForm/CommandFormField.js +11 -0
- package/dist/cjs/CommandForm/CommandFormField.js.map +1 -0
- package/dist/cjs/CommandForm/CommandFormFields.js +67 -0
- package/dist/cjs/CommandForm/CommandFormFields.js.map +1 -0
- package/dist/cjs/CommandForm/DatePickerField.js +31 -0
- package/dist/cjs/CommandForm/DatePickerField.js.map +1 -0
- package/dist/cjs/CommandForm/DropdownField.js +31 -0
- package/dist/cjs/CommandForm/DropdownField.js.map +1 -0
- package/dist/cjs/CommandForm/InputTextField.js +32 -0
- package/dist/cjs/CommandForm/InputTextField.js.map +1 -0
- package/dist/cjs/CommandForm/SliderField.js +34 -0
- package/dist/cjs/CommandForm/SliderField.js.map +1 -0
- package/dist/cjs/CommandForm/index.js +23 -0
- package/dist/cjs/CommandForm/index.js.map +1 -0
- package/dist/cjs/Common/Page.js +10 -0
- package/dist/cjs/Common/Page.js.map +1 -0
- package/dist/cjs/DataPage/DataPage.js +64 -0
- package/dist/cjs/DataPage/DataPage.js.map +1 -0
- package/dist/cjs/DataPage/index.js +11 -0
- package/dist/cjs/DataPage/index.js.map +1 -0
- package/dist/cjs/DataTables/DataTableForObservableQuery.js +17 -0
- package/dist/cjs/DataTables/DataTableForObservableQuery.js.map +1 -0
- package/dist/cjs/DataTables/DataTableForQuery.js +17 -0
- package/dist/cjs/DataTables/DataTableForQuery.js.map +1 -0
- package/dist/cjs/DataTables/index.js +10 -0
- package/dist/cjs/DataTables/index.js.map +1 -0
- package/dist/cjs/Dialogs/BusyIndicatorDialog.js +13 -0
- package/dist/cjs/Dialogs/BusyIndicatorDialog.js.map +1 -0
- package/dist/cjs/Dialogs/ConfirmationDialog.js +33 -0
- package/dist/cjs/Dialogs/ConfirmationDialog.js.map +1 -0
- package/dist/cjs/Dialogs/index.js +10 -0
- package/dist/cjs/Dialogs/index.js.map +1 -0
- package/dist/cjs/Dropdown/Dropdown.js +15 -0
- package/dist/cjs/Dropdown/Dropdown.js.map +1 -0
- package/dist/cjs/Dropdown/index.js +8 -0
- package/dist/cjs/Dropdown/index.js.map +1 -0
- package/dist/cjs/PivotViewer/PivotViewer.js +525 -0
- package/dist/cjs/PivotViewer/PivotViewer.js.map +1 -0
- package/dist/cjs/PivotViewer/components/AxisLabels.js +27 -0
- package/dist/cjs/PivotViewer/components/AxisLabels.js.map +1 -0
- package/dist/cjs/PivotViewer/components/DetailPanel.js +35 -0
- package/dist/cjs/PivotViewer/components/DetailPanel.js.map +1 -0
- package/dist/cjs/PivotViewer/components/FilterPanel.js +59 -0
- package/dist/cjs/PivotViewer/components/FilterPanel.js.map +1 -0
- package/dist/cjs/PivotViewer/components/FilterPanelContainer.js +11 -0
- package/dist/cjs/PivotViewer/components/FilterPanelContainer.js.map +1 -0
- package/dist/cjs/PivotViewer/components/PivotCanvas.js +394 -0
- package/dist/cjs/PivotViewer/components/PivotCanvas.js.map +1 -0
- package/dist/cjs/PivotViewer/components/PivotViewerMain.js +81 -0
- package/dist/cjs/PivotViewer/components/PivotViewerMain.js.map +1 -0
- package/dist/cjs/PivotViewer/components/RangeHistogramFilter.js +124 -0
- package/dist/cjs/PivotViewer/components/RangeHistogramFilter.js.map +1 -0
- package/dist/cjs/PivotViewer/components/Spinner.js +11 -0
- package/dist/cjs/PivotViewer/components/Spinner.js.map +1 -0
- package/dist/cjs/PivotViewer/components/Toolbar.js +12 -0
- package/dist/cjs/PivotViewer/components/Toolbar.js.map +1 -0
- package/dist/cjs/PivotViewer/components/ToolbarContainer.js +11 -0
- package/dist/cjs/PivotViewer/components/ToolbarContainer.js.map +1 -0
- package/dist/cjs/PivotViewer/components/pivot/animation.js +82 -0
- package/dist/cjs/PivotViewer/components/pivot/animation.js.map +1 -0
- package/dist/cjs/PivotViewer/components/pivot/buckets.js +124 -0
- package/dist/cjs/PivotViewer/components/pivot/buckets.js.map +1 -0
- package/dist/cjs/PivotViewer/components/pivot/colorResolver.js +64 -0
- package/dist/cjs/PivotViewer/components/pivot/colorResolver.js.map +1 -0
- package/dist/cjs/PivotViewer/components/pivot/constants.js +19 -0
- package/dist/cjs/PivotViewer/components/pivot/constants.js.map +1 -0
- package/dist/cjs/PivotViewer/components/pivot/sprites.js +227 -0
- package/dist/cjs/PivotViewer/components/pivot/sprites.js.map +1 -0
- package/dist/cjs/PivotViewer/components/pivot/visibility.js +223 -0
- package/dist/cjs/PivotViewer/components/pivot/visibility.js.map +1 -0
- package/dist/cjs/PivotViewer/constants.js +16 -0
- package/dist/cjs/PivotViewer/constants.js.map +1 -0
- package/dist/cjs/PivotViewer/engine/layout.js +95 -0
- package/dist/cjs/PivotViewer/engine/layout.js.map +1 -0
- package/dist/cjs/PivotViewer/engine/store.js +336 -0
- package/dist/cjs/PivotViewer/engine/store.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/useContainerDimensions.js +30 -0
- package/dist/cjs/PivotViewer/hooks/useContainerDimensions.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/useDimensionState.js +43 -0
- package/dist/cjs/PivotViewer/hooks/useDimensionState.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/useFilterOptions.js +24 -0
- package/dist/cjs/PivotViewer/hooks/useFilterOptions.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/useFilterState.js +96 -0
- package/dist/cjs/PivotViewer/hooks/useFilterState.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/usePanning.js +120 -0
- package/dist/cjs/PivotViewer/hooks/usePanning.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/usePivotEngine.js +183 -0
- package/dist/cjs/PivotViewer/hooks/usePivotEngine.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/useWheelZoom.js +93 -0
- package/dist/cjs/PivotViewer/hooks/useWheelZoom.js.map +1 -0
- package/dist/cjs/PivotViewer/hooks/useZoomState.js +31 -0
- package/dist/cjs/PivotViewer/hooks/useZoomState.js.map +1 -0
- package/dist/cjs/PivotViewer/index.js +9 -0
- package/dist/cjs/PivotViewer/index.js.map +1 -0
- package/dist/cjs/PivotViewer/utils/animations.js +144 -0
- package/dist/cjs/PivotViewer/utils/animations.js.map +1 -0
- package/dist/cjs/PivotViewer/utils/constants.js +12 -0
- package/dist/cjs/PivotViewer/utils/constants.js.map +1 -0
- package/dist/cjs/PivotViewer/utils/selection.js +136 -0
- package/dist/cjs/PivotViewer/utils/selection.js.map +1 -0
- package/dist/cjs/PivotViewer/utils/utils.js +150 -0
- package/dist/cjs/PivotViewer/utils/utils.js.map +1 -0
- package/dist/cjs/TimeMachine/EventsView.js +57 -0
- package/dist/cjs/TimeMachine/EventsView.js.map +1 -0
- package/dist/cjs/TimeMachine/Properties.js +58 -0
- package/dist/cjs/TimeMachine/Properties.js.map +1 -0
- package/dist/cjs/TimeMachine/ReadModelView.js +40 -0
- package/dist/cjs/TimeMachine/ReadModelView.js.map +1 -0
- package/dist/cjs/TimeMachine/TimeMachine.js +98 -0
- package/dist/cjs/TimeMachine/TimeMachine.js.map +1 -0
- package/dist/cjs/TimeMachine/index.js +14 -0
- package/dist/cjs/TimeMachine/index.js.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/useOverlayZIndex.js +24 -0
- package/dist/cjs/useOverlayZIndex.js.map +1 -0
- package/dist/esm/CommandDialog/CommandDialog.d.ts +45 -0
- package/dist/esm/CommandDialog/CommandDialog.d.ts.map +1 -0
- package/dist/esm/CommandDialog/CommandDialog.js +68 -0
- package/dist/esm/CommandDialog/CommandDialog.js.map +1 -0
- package/dist/esm/CommandDialog/CommandDialog.stories.d.ts +7 -0
- package/dist/esm/CommandDialog/CommandDialog.stories.d.ts.map +1 -0
- package/dist/esm/CommandDialog/CommandDialog.stories.js +12 -0
- package/dist/esm/CommandDialog/CommandDialog.stories.js.map +1 -0
- package/dist/esm/CommandDialog/index.d.ts +2 -0
- package/dist/esm/CommandDialog/index.d.ts.map +1 -0
- package/dist/esm/CommandDialog/index.js +2 -0
- package/dist/esm/CommandDialog/index.js.map +1 -0
- package/dist/esm/CommandForm/CommandForm.d.ts +49 -0
- package/dist/esm/CommandForm/CommandForm.d.ts.map +1 -0
- package/dist/esm/CommandForm/CommandForm.js +174 -0
- package/dist/esm/CommandForm/CommandForm.js.map +1 -0
- package/dist/esm/CommandForm/CommandForm.stories.d.ts +7 -0
- package/dist/esm/CommandForm/CommandForm.stories.d.ts.map +1 -0
- package/dist/esm/CommandForm/CommandForm.stories.js +12 -0
- package/dist/esm/CommandForm/CommandForm.stories.js.map +1 -0
- package/dist/esm/CommandForm/CommandFormField.d.ts +18 -0
- package/dist/esm/CommandForm/CommandFormField.d.ts.map +1 -0
- package/dist/esm/CommandForm/CommandFormField.js +9 -0
- package/dist/esm/CommandForm/CommandFormField.js.map +1 -0
- package/dist/esm/CommandForm/CommandFormFields.d.ts +11 -0
- package/dist/esm/CommandForm/CommandFormFields.d.ts.map +1 -0
- package/dist/esm/CommandForm/CommandFormFields.js +65 -0
- package/dist/esm/CommandForm/CommandFormFields.js.map +1 -0
- package/dist/esm/CommandForm/DatePickerField.d.ts +20 -0
- package/dist/esm/CommandForm/DatePickerField.d.ts.map +1 -0
- package/dist/esm/CommandForm/DatePickerField.js +29 -0
- package/dist/esm/CommandForm/DatePickerField.js.map +1 -0
- package/dist/esm/CommandForm/DropdownField.d.ts +24 -0
- package/dist/esm/CommandForm/DropdownField.d.ts.map +1 -0
- package/dist/esm/CommandForm/DropdownField.js +29 -0
- package/dist/esm/CommandForm/DropdownField.js.map +1 -0
- package/dist/esm/CommandForm/InputTextField.d.ts +20 -0
- package/dist/esm/CommandForm/InputTextField.d.ts.map +1 -0
- package/dist/esm/CommandForm/InputTextField.js +30 -0
- package/dist/esm/CommandForm/InputTextField.js.map +1 -0
- package/dist/esm/CommandForm/SliderField.d.ts +23 -0
- package/dist/esm/CommandForm/SliderField.d.ts.map +1 -0
- package/dist/esm/CommandForm/SliderField.js +32 -0
- package/dist/esm/CommandForm/SliderField.js.map +1 -0
- package/dist/esm/CommandForm/index.d.ts +8 -0
- package/dist/esm/CommandForm/index.d.ts.map +1 -0
- package/dist/esm/CommandForm/index.js +8 -0
- package/dist/esm/CommandForm/index.js.map +1 -0
- package/dist/esm/Common/ErrorBoundary.d.ts +16 -0
- package/dist/esm/Common/ErrorBoundary.d.ts.map +1 -0
- package/dist/esm/Common/ErrorBoundary.js +21 -0
- package/dist/esm/Common/ErrorBoundary.js.map +1 -0
- package/dist/esm/Common/ErrorBoundary.stories.d.ts +8 -0
- package/dist/esm/Common/ErrorBoundary.stories.d.ts.map +1 -0
- package/dist/esm/Common/ErrorBoundary.stories.js +6 -0
- package/dist/esm/Common/ErrorBoundary.stories.js.map +1 -0
- package/dist/esm/Common/FormElement.d.ts +6 -0
- package/dist/esm/Common/FormElement.d.ts.map +1 -0
- package/dist/esm/Common/FormElement.js +5 -0
- package/dist/esm/Common/FormElement.js.map +1 -0
- package/dist/esm/Common/FormElement.stories.d.ts +8 -0
- package/dist/esm/Common/FormElement.stories.d.ts.map +1 -0
- package/dist/esm/Common/FormElement.stories.js +6 -0
- package/dist/esm/Common/FormElement.stories.js.map +1 -0
- package/dist/esm/Common/Page.d.ts +8 -0
- package/dist/esm/Common/Page.d.ts.map +1 -0
- package/dist/esm/Common/Page.js +8 -0
- package/dist/esm/Common/Page.js.map +1 -0
- package/dist/esm/Common/Page.stories.d.ts +8 -0
- package/dist/esm/Common/Page.stories.d.ts.map +1 -0
- package/dist/esm/Common/Page.stories.js +6 -0
- package/dist/esm/Common/Page.stories.js.map +1 -0
- package/dist/esm/Common/index.d.ts +4 -0
- package/dist/esm/Common/index.d.ts.map +1 -0
- package/dist/esm/Common/index.js +4 -0
- package/dist/esm/Common/index.js.map +1 -0
- package/dist/esm/DataPage/DataPage.d.ts +41 -0
- package/dist/esm/DataPage/DataPage.d.ts.map +1 -0
- package/dist/esm/DataPage/DataPage.js +59 -0
- package/dist/esm/DataPage/DataPage.js.map +1 -0
- package/dist/esm/DataPage/DataPage.stories.d.ts +8 -0
- package/dist/esm/DataPage/DataPage.stories.d.ts.map +1 -0
- package/dist/esm/DataPage/DataPage.stories.js +6 -0
- package/dist/esm/DataPage/DataPage.stories.js.map +1 -0
- package/dist/esm/DataPage/index.d.ts +2 -0
- package/dist/esm/DataPage/index.d.ts.map +1 -0
- package/dist/esm/DataPage/index.js +2 -0
- package/dist/esm/DataPage/index.js.map +1 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +17 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.d.ts.map +1 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.js +15 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.stories.d.ts +8 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.stories.d.ts.map +1 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.stories.js +6 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.stories.js.map +1 -0
- package/dist/esm/DataTables/DataTableForQuery.d.ts +17 -0
- package/dist/esm/DataTables/DataTableForQuery.d.ts.map +1 -0
- package/dist/esm/DataTables/DataTableForQuery.js +15 -0
- package/dist/esm/DataTables/DataTableForQuery.js.map +1 -0
- package/dist/esm/DataTables/DataTableForQuery.stories.d.ts +8 -0
- package/dist/esm/DataTables/DataTableForQuery.stories.d.ts.map +1 -0
- package/dist/esm/DataTables/DataTableForQuery.stories.js +6 -0
- package/dist/esm/DataTables/DataTableForQuery.stories.js.map +1 -0
- package/dist/esm/DataTables/index.d.ts +3 -0
- package/dist/esm/DataTables/index.d.ts.map +1 -0
- package/dist/esm/DataTables/index.js +3 -0
- package/dist/esm/DataTables/index.js.map +1 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.d.ts +3 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.d.ts.map +1 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.js +11 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.js.map +1 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.stories.d.ts +7 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.stories.d.ts.map +1 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.stories.js +15 -0
- package/dist/esm/Dialogs/BusyIndicatorDialog.stories.js.map +1 -0
- package/dist/esm/Dialogs/ConfirmationDialog.d.ts +2 -0
- package/dist/esm/Dialogs/ConfirmationDialog.d.ts.map +1 -0
- package/dist/esm/Dialogs/ConfirmationDialog.js +31 -0
- package/dist/esm/Dialogs/ConfirmationDialog.js.map +1 -0
- package/dist/esm/Dialogs/ConfirmationDialog.stories.d.ts +7 -0
- package/dist/esm/Dialogs/ConfirmationDialog.stories.d.ts.map +1 -0
- package/dist/esm/Dialogs/ConfirmationDialog.stories.js +20 -0
- package/dist/esm/Dialogs/ConfirmationDialog.stories.js.map +1 -0
- package/dist/esm/Dialogs/index.d.ts +3 -0
- package/dist/esm/Dialogs/index.d.ts.map +1 -0
- package/dist/esm/Dialogs/index.js +3 -0
- package/dist/esm/Dialogs/index.js.map +1 -0
- package/dist/esm/Dropdown/Dropdown.d.ts +5 -0
- package/dist/esm/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/esm/Dropdown/Dropdown.js +13 -0
- package/dist/esm/Dropdown/Dropdown.js.map +1 -0
- package/dist/esm/Dropdown/index.d.ts +2 -0
- package/dist/esm/Dropdown/index.d.ts.map +1 -0
- package/dist/esm/Dropdown/index.js +2 -0
- package/dist/esm/Dropdown/index.js.map +1 -0
- package/dist/esm/PivotViewer/PivotViewer.d.ts +4 -0
- package/dist/esm/PivotViewer/PivotViewer.d.ts.map +1 -0
- package/dist/esm/PivotViewer/PivotViewer.js +523 -0
- package/dist/esm/PivotViewer/PivotViewer.js.map +1 -0
- package/dist/esm/PivotViewer/PivotViewer.stories.d.ts +7 -0
- package/dist/esm/PivotViewer/PivotViewer.stories.d.ts.map +1 -0
- package/dist/esm/PivotViewer/PivotViewer.stories.js +12 -0
- package/dist/esm/PivotViewer/PivotViewer.stories.js.map +1 -0
- package/dist/esm/PivotViewer/components/AxisLabels.d.ts +13 -0
- package/dist/esm/PivotViewer/components/AxisLabels.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/AxisLabels.js +25 -0
- package/dist/esm/PivotViewer/components/AxisLabels.js.map +1 -0
- package/dist/esm/PivotViewer/components/DetailPanel.d.ts +6 -0
- package/dist/esm/PivotViewer/components/DetailPanel.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/DetailPanel.js +33 -0
- package/dist/esm/PivotViewer/components/DetailPanel.js.map +1 -0
- package/dist/esm/PivotViewer/components/FilterPanel.d.ts +27 -0
- package/dist/esm/PivotViewer/components/FilterPanel.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/FilterPanel.js +57 -0
- package/dist/esm/PivotViewer/components/FilterPanel.js.map +1 -0
- package/dist/esm/PivotViewer/components/FilterPanelContainer.d.ts +4 -0
- package/dist/esm/PivotViewer/components/FilterPanelContainer.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/FilterPanelContainer.js +9 -0
- package/dist/esm/PivotViewer/components/FilterPanelContainer.js.map +1 -0
- package/dist/esm/PivotViewer/components/PivotCanvas.d.ts +29 -0
- package/dist/esm/PivotViewer/components/PivotCanvas.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/PivotCanvas.js +373 -0
- package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -0
- package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts +43 -0
- package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/PivotViewerMain.js +79 -0
- package/dist/esm/PivotViewer/components/PivotViewerMain.js.map +1 -0
- package/dist/esm/PivotViewer/components/RangeHistogramFilter.d.ts +11 -0
- package/dist/esm/PivotViewer/components/RangeHistogramFilter.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/RangeHistogramFilter.js +122 -0
- package/dist/esm/PivotViewer/components/RangeHistogramFilter.js.map +1 -0
- package/dist/esm/PivotViewer/components/Spinner.d.ts +3 -0
- package/dist/esm/PivotViewer/components/Spinner.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/Spinner.js +9 -0
- package/dist/esm/PivotViewer/components/Spinner.js.map +1 -0
- package/dist/esm/PivotViewer/components/Toolbar.d.ts +21 -0
- package/dist/esm/PivotViewer/components/Toolbar.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/Toolbar.js +10 -0
- package/dist/esm/PivotViewer/components/Toolbar.js.map +1 -0
- package/dist/esm/PivotViewer/components/ToolbarContainer.d.ts +4 -0
- package/dist/esm/PivotViewer/components/ToolbarContainer.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/ToolbarContainer.js +9 -0
- package/dist/esm/PivotViewer/components/ToolbarContainer.js.map +1 -0
- package/dist/esm/PivotViewer/components/index.d.ts +9 -0
- package/dist/esm/PivotViewer/components/index.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/index.js +8 -0
- package/dist/esm/PivotViewer/components/index.js.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/animation.d.ts +29 -0
- package/dist/esm/PivotViewer/components/pivot/animation.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/animation.js +79 -0
- package/dist/esm/PivotViewer/components/pivot/animation.js.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/buckets.d.ts +6 -0
- package/dist/esm/PivotViewer/components/pivot/buckets.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/buckets.js +102 -0
- package/dist/esm/PivotViewer/components/pivot/buckets.js.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/colorResolver.d.ts +4 -0
- package/dist/esm/PivotViewer/components/pivot/colorResolver.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/colorResolver.js +61 -0
- package/dist/esm/PivotViewer/components/pivot/colorResolver.js.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/constants.d.ts +38 -0
- package/dist/esm/PivotViewer/components/pivot/constants.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/constants.js +14 -0
- package/dist/esm/PivotViewer/components/pivot/constants.js.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/sprites.d.ts +6 -0
- package/dist/esm/PivotViewer/components/pivot/sprites.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/sprites.js +203 -0
- package/dist/esm/PivotViewer/components/pivot/sprites.js.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/visibility.d.ts +26 -0
- package/dist/esm/PivotViewer/components/pivot/visibility.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/visibility.js +221 -0
- package/dist/esm/PivotViewer/components/pivot/visibility.js.map +1 -0
- package/dist/esm/PivotViewer/constants.d.ts +7 -0
- package/dist/esm/PivotViewer/constants.d.ts.map +1 -0
- package/dist/esm/PivotViewer/constants.js +9 -0
- package/dist/esm/PivotViewer/constants.js.map +1 -0
- package/dist/esm/PivotViewer/engine/layout.d.ts +3 -0
- package/dist/esm/PivotViewer/engine/layout.d.ts.map +1 -0
- package/dist/esm/PivotViewer/engine/layout.js +93 -0
- package/dist/esm/PivotViewer/engine/layout.js.map +1 -0
- package/dist/esm/PivotViewer/engine/pivot.worker.d.ts +2 -0
- package/dist/esm/PivotViewer/engine/pivot.worker.d.ts.map +1 -0
- package/dist/esm/PivotViewer/engine/pivot.worker.js +58 -0
- package/dist/esm/PivotViewer/engine/pivot.worker.js.map +1 -0
- package/dist/esm/PivotViewer/engine/store.d.ts +9 -0
- package/dist/esm/PivotViewer/engine/store.d.ts.map +1 -0
- package/dist/esm/PivotViewer/engine/store.js +328 -0
- package/dist/esm/PivotViewer/engine/store.js.map +1 -0
- package/dist/esm/PivotViewer/engine/types.d.ts +125 -0
- package/dist/esm/PivotViewer/engine/types.d.ts.map +1 -0
- package/dist/esm/PivotViewer/engine/types.js +2 -0
- package/dist/esm/PivotViewer/engine/types.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/index.d.ts +11 -0
- package/dist/esm/PivotViewer/hooks/index.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/index.js +11 -0
- package/dist/esm/PivotViewer/hooks/index.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.d.ts +5 -0
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.js +28 -0
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useDimensionState.d.ts +11 -0
- package/dist/esm/PivotViewer/hooks/useDimensionState.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useDimensionState.js +41 -0
- package/dist/esm/PivotViewer/hooks/useDimensionState.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilterOptions.d.ts +12 -0
- package/dist/esm/PivotViewer/hooks/useFilterOptions.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilterOptions.js +22 -0
- package/dist/esm/PivotViewer/hooks/useFilterOptions.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilterPanelDrag.d.ts +9 -0
- package/dist/esm/PivotViewer/hooks/useFilterPanelDrag.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilterPanelDrag.js +42 -0
- package/dist/esm/PivotViewer/hooks/useFilterPanelDrag.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilterState.d.ts +11 -0
- package/dist/esm/PivotViewer/hooks/useFilterState.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilterState.js +94 -0
- package/dist/esm/PivotViewer/hooks/useFilterState.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilteredData.d.ts +9 -0
- package/dist/esm/PivotViewer/hooks/useFilteredData.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useFilteredData.js +85 -0
- package/dist/esm/PivotViewer/hooks/useFilteredData.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePanning.d.ts +10 -0
- package/dist/esm/PivotViewer/hooks/usePanning.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePanning.js +118 -0
- package/dist/esm/PivotViewer/hooks/usePanning.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePivotEngine.d.ts +14 -0
- package/dist/esm/PivotViewer/hooks/usePivotEngine.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePivotEngine.js +180 -0
- package/dist/esm/PivotViewer/hooks/usePivotEngine.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useSelectedItem.d.ts +8 -0
- package/dist/esm/PivotViewer/hooks/useSelectedItem.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useSelectedItem.js +322 -0
- package/dist/esm/PivotViewer/hooks/useSelectedItem.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useWheelZoom.d.ts +2 -0
- package/dist/esm/PivotViewer/hooks/useWheelZoom.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useWheelZoom.js +91 -0
- package/dist/esm/PivotViewer/hooks/useWheelZoom.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useZoomState.d.ts +9 -0
- package/dist/esm/PivotViewer/hooks/useZoomState.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useZoomState.js +29 -0
- package/dist/esm/PivotViewer/hooks/useZoomState.js.map +1 -0
- package/dist/esm/PivotViewer/index.d.ts +4 -0
- package/dist/esm/PivotViewer/index.d.ts.map +1 -0
- package/dist/esm/PivotViewer/index.js +2 -0
- package/dist/esm/PivotViewer/index.js.map +1 -0
- package/dist/esm/PivotViewer/types.d.ts +47 -0
- package/dist/esm/PivotViewer/types.d.ts.map +1 -0
- package/dist/esm/PivotViewer/types.js +2 -0
- package/dist/esm/PivotViewer/types.js.map +1 -0
- package/dist/esm/PivotViewer/utils/animations.d.ts +54 -0
- package/dist/esm/PivotViewer/utils/animations.d.ts.map +1 -0
- package/dist/esm/PivotViewer/utils/animations.js +139 -0
- package/dist/esm/PivotViewer/utils/animations.js.map +1 -0
- package/dist/esm/PivotViewer/utils/constants.d.ts +13 -0
- package/dist/esm/PivotViewer/utils/constants.d.ts.map +1 -0
- package/dist/esm/PivotViewer/utils/constants.js +7 -0
- package/dist/esm/PivotViewer/utils/constants.js.map +1 -0
- package/dist/esm/PivotViewer/utils/index.d.ts +4 -0
- package/dist/esm/PivotViewer/utils/index.d.ts.map +1 -0
- package/dist/esm/PivotViewer/utils/index.js +4 -0
- package/dist/esm/PivotViewer/utils/index.js.map +1 -0
- package/dist/esm/PivotViewer/utils/selection.d.ts +50 -0
- package/dist/esm/PivotViewer/utils/selection.d.ts.map +1 -0
- package/dist/esm/PivotViewer/utils/selection.js +134 -0
- package/dist/esm/PivotViewer/utils/selection.js.map +1 -0
- package/dist/esm/PivotViewer/utils/utils.d.ts +24 -0
- package/dist/esm/PivotViewer/utils/utils.d.ts.map +1 -0
- package/dist/esm/PivotViewer/utils/utils.js +138 -0
- package/dist/esm/PivotViewer/utils/utils.js.map +1 -0
- package/dist/esm/TimeMachine/EventsView.d.ts +9 -0
- package/dist/esm/TimeMachine/EventsView.d.ts.map +1 -0
- package/dist/esm/TimeMachine/EventsView.js +55 -0
- package/dist/esm/TimeMachine/EventsView.js.map +1 -0
- package/dist/esm/TimeMachine/EventsView.stories.d.ts +8 -0
- package/dist/esm/TimeMachine/EventsView.stories.d.ts.map +1 -0
- package/dist/esm/TimeMachine/EventsView.stories.js +6 -0
- package/dist/esm/TimeMachine/EventsView.stories.js.map +1 -0
- package/dist/esm/TimeMachine/Properties.d.ts +9 -0
- package/dist/esm/TimeMachine/Properties.d.ts.map +1 -0
- package/dist/esm/TimeMachine/Properties.js +56 -0
- package/dist/esm/TimeMachine/Properties.js.map +1 -0
- package/dist/esm/TimeMachine/Properties.stories.d.ts +8 -0
- package/dist/esm/TimeMachine/Properties.stories.d.ts.map +1 -0
- package/dist/esm/TimeMachine/Properties.stories.js +6 -0
- package/dist/esm/TimeMachine/Properties.stories.js.map +1 -0
- package/dist/esm/TimeMachine/ReadModelView.d.ts +12 -0
- package/dist/esm/TimeMachine/ReadModelView.d.ts.map +1 -0
- package/dist/esm/TimeMachine/ReadModelView.js +38 -0
- package/dist/esm/TimeMachine/ReadModelView.js.map +1 -0
- package/dist/esm/TimeMachine/ReadModelView.stories.d.ts +8 -0
- package/dist/esm/TimeMachine/ReadModelView.stories.d.ts.map +1 -0
- package/dist/esm/TimeMachine/ReadModelView.stories.js +6 -0
- package/dist/esm/TimeMachine/ReadModelView.stories.js.map +1 -0
- package/dist/esm/TimeMachine/TimeMachine.d.ts +12 -0
- package/dist/esm/TimeMachine/TimeMachine.d.ts.map +1 -0
- package/dist/esm/TimeMachine/TimeMachine.js +93 -0
- package/dist/esm/TimeMachine/TimeMachine.js.map +1 -0
- package/dist/esm/TimeMachine/TimeMachine.stories.d.ts +8 -0
- package/dist/esm/TimeMachine/TimeMachine.stories.d.ts.map +1 -0
- package/dist/esm/TimeMachine/TimeMachine.stories.js +6 -0
- package/dist/esm/TimeMachine/TimeMachine.stories.js.map +1 -0
- package/dist/esm/TimeMachine/index.d.ts +6 -0
- package/dist/esm/TimeMachine/index.d.ts.map +1 -0
- package/dist/esm/TimeMachine/index.js +5 -0
- package/dist/esm/TimeMachine/index.js.map +1 -0
- package/dist/esm/TimeMachine/types.d.ts +19 -0
- package/dist/esm/TimeMachine/types.d.ts.map +1 -0
- package/dist/esm/TimeMachine/types.js +2 -0
- package/dist/esm/TimeMachine/types.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 +17 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/useOverlayZIndex.d.ts +2 -0
- package/dist/esm/useOverlayZIndex.d.ts.map +1 -0
- package/dist/esm/useOverlayZIndex.js +22 -0
- package/dist/esm/useOverlayZIndex.js.map +1 -0
- package/dist/esm/vite.config.d.ts +3 -0
- package/dist/esm/vite.config.d.ts.map +1 -0
- package/dist/esm/vite.config.js +76 -0
- package/dist/esm/vite.config.js.map +1 -0
- package/global.d.ts +11 -0
- package/index.ts +22 -0
- package/package.json +160 -0
- package/useOverlayZIndex.ts +32 -0
- package/vite.config.ts +80 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var CommandFormFields = require('./CommandFormFields.js');
|
|
5
|
+
var commands = require('@cratis/arc.react/commands');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var panel = require('primereact/panel');
|
|
8
|
+
|
|
9
|
+
const CommandFormContext = React.createContext(undefined);
|
|
10
|
+
const useCommandFormContext = () => {
|
|
11
|
+
const context = React.useContext(CommandFormContext);
|
|
12
|
+
if (!context) {
|
|
13
|
+
throw new Error('useCommandFormContext must be used within a CommandForm');
|
|
14
|
+
}
|
|
15
|
+
return context;
|
|
16
|
+
};
|
|
17
|
+
const useCommandInstance = () => {
|
|
18
|
+
const { commandInstance } = useCommandFormContext();
|
|
19
|
+
return commandInstance;
|
|
20
|
+
};
|
|
21
|
+
const useSetCommandResult = () => {
|
|
22
|
+
const { setCommandResult } = useCommandFormContext();
|
|
23
|
+
return setCommandResult;
|
|
24
|
+
};
|
|
25
|
+
const CommandFormFieldsWrapper = (props) => {
|
|
26
|
+
React.Children.forEach(props.children, child => {
|
|
27
|
+
if (React.isValidElement(child)) {
|
|
28
|
+
const component = child.type;
|
|
29
|
+
if (component.displayName !== 'CommandFormField') {
|
|
30
|
+
throw new Error(`Only CommandFormField components are allowed as children of CommandForm.Fields. Got: ${component.displayName || component.name || 'Unknown'}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
35
|
+
};
|
|
36
|
+
CommandFormFieldsWrapper.displayName = 'CommandFormFieldsWrapper';
|
|
37
|
+
const getCommandFormFields = (props) => {
|
|
38
|
+
if (!props.children) {
|
|
39
|
+
return { fieldsOrColumns: [], otherChildren: [], initialValuesFromFields: {} };
|
|
40
|
+
}
|
|
41
|
+
let fields = [];
|
|
42
|
+
const columns = [];
|
|
43
|
+
let hasColumns = false;
|
|
44
|
+
const otherChildren = [];
|
|
45
|
+
let initialValuesFromFields = {};
|
|
46
|
+
const extractInitialValue = (field) => {
|
|
47
|
+
const fieldProps = field.props;
|
|
48
|
+
if (fieldProps.currentValue !== undefined && fieldProps.value) {
|
|
49
|
+
const propertyAccessor = fieldProps.value;
|
|
50
|
+
const propertyName = getPropertyNameFromAccessor(propertyAccessor);
|
|
51
|
+
if (propertyName) {
|
|
52
|
+
initialValuesFromFields = { ...initialValuesFromFields, [propertyName]: fieldProps.currentValue };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
React.Children.toArray(props.children).forEach(child => {
|
|
57
|
+
if (!React.isValidElement(child)) {
|
|
58
|
+
otherChildren.push(child);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const component = child.type;
|
|
62
|
+
if (component.displayName === 'CommandFormColumn') {
|
|
63
|
+
hasColumns = true;
|
|
64
|
+
const childProps = child.props;
|
|
65
|
+
const columnFields = React.Children.toArray(childProps.children).filter(child => {
|
|
66
|
+
if (React.isValidElement(child)) {
|
|
67
|
+
const comp = child.type;
|
|
68
|
+
if (comp.displayName === 'CommandFormField') {
|
|
69
|
+
extractInitialValue(child);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
});
|
|
75
|
+
columns.push({ fields: columnFields });
|
|
76
|
+
}
|
|
77
|
+
else if (component.displayName === 'CommandFormField') {
|
|
78
|
+
extractInitialValue(child);
|
|
79
|
+
fields.push(child);
|
|
80
|
+
}
|
|
81
|
+
else if (component === CommandFormFieldsWrapper || component.displayName === 'CommandFormFieldsWrapper') {
|
|
82
|
+
const childProps = child.props;
|
|
83
|
+
const relevantChildren = React.Children.toArray(childProps.children).filter(child => {
|
|
84
|
+
if (React.isValidElement(child)) {
|
|
85
|
+
const component = child.type;
|
|
86
|
+
if (component.displayName === 'CommandFormField') {
|
|
87
|
+
extractInitialValue(child);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
});
|
|
93
|
+
fields = [...fields, ...relevantChildren];
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
otherChildren.push(child);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return { fieldsOrColumns: hasColumns ? columns : fields, otherChildren, initialValuesFromFields };
|
|
100
|
+
};
|
|
101
|
+
function getPropertyNameFromAccessor(accessor) {
|
|
102
|
+
const fnStr = accessor.toString();
|
|
103
|
+
const match = fnStr.match(/\.([a-zA-Z_$][a-zA-Z0-9_$]*)/);
|
|
104
|
+
return match ? match[1] : '';
|
|
105
|
+
}
|
|
106
|
+
const CommandFormComponent = (props) => {
|
|
107
|
+
const { fieldsOrColumns, otherChildren, initialValuesFromFields } = React.useMemo(() => getCommandFormFields(props), [props.children]);
|
|
108
|
+
const valuesFromCurrentValues = React.useMemo(() => {
|
|
109
|
+
if (!props.currentValues)
|
|
110
|
+
return {};
|
|
111
|
+
const tempCommand = new props.command();
|
|
112
|
+
const commandProperties = tempCommand.properties || [];
|
|
113
|
+
const extracted = {};
|
|
114
|
+
commandProperties.forEach((propertyName) => {
|
|
115
|
+
if (props.currentValues[propertyName] !== undefined) {
|
|
116
|
+
extracted[propertyName] = props.currentValues[propertyName];
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
return extracted;
|
|
120
|
+
}, [props.currentValues, props.command]);
|
|
121
|
+
const mergedInitialValues = React.useMemo(() => ({
|
|
122
|
+
...valuesFromCurrentValues,
|
|
123
|
+
...initialValuesFromFields,
|
|
124
|
+
...props.initialValues
|
|
125
|
+
}), [valuesFromCurrentValues, initialValuesFromFields, props.initialValues]);
|
|
126
|
+
const [commandInstance, setCommandValues] = commands.useCommand(props.command, mergedInitialValues);
|
|
127
|
+
const [commandResult, setCommandResult] = React.useState(undefined);
|
|
128
|
+
const [fieldValidities, setFieldValidities] = React.useState({});
|
|
129
|
+
const [customFieldErrors, setCustomFieldErrors] = React.useState({});
|
|
130
|
+
React.useEffect(() => {
|
|
131
|
+
if (mergedInitialValues && Object.keys(mergedInitialValues).length > 0) {
|
|
132
|
+
setCommandValues(mergedInitialValues);
|
|
133
|
+
}
|
|
134
|
+
}, [mergedInitialValues, setCommandValues]);
|
|
135
|
+
const isValid = Object.values(fieldValidities).every(valid => valid);
|
|
136
|
+
const setFieldValidity = React.useCallback((fieldName, isFieldValid) => {
|
|
137
|
+
setFieldValidities(prev => ({ ...prev, [fieldName]: isFieldValid }));
|
|
138
|
+
}, []);
|
|
139
|
+
const setCustomFieldError = React.useCallback((fieldName, error) => {
|
|
140
|
+
setCustomFieldErrors(prev => {
|
|
141
|
+
if (error === undefined) {
|
|
142
|
+
const newErrors = { ...prev };
|
|
143
|
+
delete newErrors[fieldName];
|
|
144
|
+
return newErrors;
|
|
145
|
+
}
|
|
146
|
+
return { ...prev, [fieldName]: error };
|
|
147
|
+
});
|
|
148
|
+
}, []);
|
|
149
|
+
const getFieldError = (propertyName) => {
|
|
150
|
+
if (customFieldErrors[propertyName]) {
|
|
151
|
+
return customFieldErrors[propertyName];
|
|
152
|
+
}
|
|
153
|
+
if (!commandResult || !commandResult.validationResults) {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
for (const validationResult of commandResult.validationResults) {
|
|
157
|
+
if (validationResult.members && validationResult.members.includes(propertyName)) {
|
|
158
|
+
return validationResult.message;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
};
|
|
163
|
+
const exceptionMessages = commandResult?.exceptionMessages || [];
|
|
164
|
+
const hasColumns = fieldsOrColumns.length > 0 && 'fields' in fieldsOrColumns[0];
|
|
165
|
+
return (jsxRuntime.jsxs(CommandFormContext.Provider, { value: { command: props.command, commandInstance, setCommandValues, commandResult, setCommandResult, getFieldError, isValid, setFieldValidity, onFieldValidate: props.onFieldValidate, onFieldChange: props.onFieldChange, onBeforeExecute: props.onBeforeExecute, customFieldErrors, setCustomFieldError }, children: [jsxRuntime.jsx(CommandFormFields.CommandFormFields, { fields: hasColumns ? undefined : fieldsOrColumns, columns: hasColumns ? fieldsOrColumns : undefined }), exceptionMessages.length > 0 && (jsxRuntime.jsx("div", { className: "card flex flex-row gap-3 mt-3", children: jsxRuntime.jsx(panel.Panel, { header: "The server responded with", className: "w-full", children: jsxRuntime.jsx("ul", { children: exceptionMessages.map((msg, idx) => (jsxRuntime.jsx("li", { children: msg }, idx))) }) }) })), otherChildren] }));
|
|
166
|
+
};
|
|
167
|
+
const CommandFormColumnComponent = (_props) => {
|
|
168
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
169
|
+
};
|
|
170
|
+
CommandFormColumnComponent.displayName = 'CommandFormColumn';
|
|
171
|
+
CommandFormComponent.Fields = CommandFormFieldsWrapper;
|
|
172
|
+
CommandFormComponent.Column = CommandFormColumnComponent;
|
|
173
|
+
const CommandForm = CommandFormComponent;
|
|
174
|
+
|
|
175
|
+
exports.CommandForm = CommandForm;
|
|
176
|
+
exports.useCommandFormContext = useCommandFormContext;
|
|
177
|
+
exports.useCommandInstance = useCommandInstance;
|
|
178
|
+
exports.useSetCommandResult = useSetCommandResult;
|
|
179
|
+
//# sourceMappingURL=CommandForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandForm.js","sources":["../../../CommandForm/CommandForm.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 { CommandFormFields, ColumnInfo } from './CommandFormFields';\nimport { Constructor } from '@cratis/fundamentals';\nimport { useCommand, SetCommandValues } from '@cratis/arc.react/commands';\nimport { ICommandResult } from '@cratis/arc/commands';\nimport React, { createContext, useContext, useMemo, useState, useCallback } from 'react';\nimport type { CommandFormFieldProps } from './CommandFormField';\nimport { Panel } from 'primereact/panel';\n\nexport type BeforeExecuteCallback<TCommand> = (values: TCommand) => TCommand;\n\nexport interface CommandFormProps<TCommand extends object> {\n command: Constructor<TCommand>;\n initialValues?: Partial<TCommand>;\n currentValues?: Partial<TCommand> | undefined;\n onFieldValidate?: (command: TCommand, fieldName: string, oldValue: unknown, newValue: unknown) => string | undefined;\n onFieldChange?: (command: TCommand, fieldName: string, oldValue: unknown, newValue: unknown) => void;\n onBeforeExecute?: BeforeExecuteCallback<TCommand>;\n children?: React.ReactNode;\n}\n\ninterface CommandFormContextValue<TCommand> {\n command: Constructor<TCommand>;\n commandInstance: TCommand;\n setCommandValues: SetCommandValues<TCommand>;\n commandResult?: ICommandResult<unknown>;\n setCommandResult: (result: ICommandResult<unknown>) => void;\n getFieldError: (propertyName: string) => string | undefined;\n isValid: boolean;\n setFieldValidity: (fieldName: string, isValid: boolean) => void;\n onFieldValidate?: (command: TCommand, fieldName: string, oldValue: unknown, newValue: unknown) => string | undefined;\n onFieldChange?: (command: TCommand, fieldName: string, oldValue: unknown, newValue: unknown) => void;\n onBeforeExecute?: BeforeExecuteCallback<TCommand>;\n customFieldErrors: Record<string, string>;\n setCustomFieldError: (fieldName: string, error: string | undefined) => void;\n}\n\nconst CommandFormContext = createContext<CommandFormContextValue<any> | undefined>(undefined);\n\nexport const useCommandFormContext = <TCommand,>() => {\n const context = useContext(CommandFormContext);\n if (!context) {\n throw new Error('useCommandFormContext must be used within a CommandForm');\n }\n return context as CommandFormContextValue<TCommand>;\n};\n\n// Hook to get just the command instance for easier access\nexport const useCommandInstance = <TCommand = any>() => {\n const { commandInstance } = useCommandFormContext<any>();\n return commandInstance as TCommand;\n};\n\n// Hook to get setCommandResult for easier access\nexport const useSetCommandResult = () => {\n const { setCommandResult } = useCommandFormContext();\n return setCommandResult;\n};\n\nconst CommandFormFieldsWrapper = (props: { children: React.ReactNode }) => {\n React.Children.forEach(props.children, child => {\n if (React.isValidElement(child)) {\n const component = child.type as any;\n if (component.displayName !== 'CommandFormField') {\n throw new Error(`Only CommandFormField components are allowed as children of CommandForm.Fields. Got: ${component.displayName || component.name || 'Unknown'}`);\n }\n }\n });\n\n return <></>;\n};\n\nCommandFormFieldsWrapper.displayName = 'CommandFormFieldsWrapper';\n\nconst getCommandFormFields = <TCommand,>(props: { children?: React.ReactNode }): { fieldsOrColumns: React.ReactElement[] | ColumnInfo[], otherChildren: React.ReactNode[], initialValuesFromFields: Partial<TCommand> } => {\n if (!props.children) {\n return { fieldsOrColumns: [], otherChildren: [], initialValuesFromFields: {} };\n }\n let fields: React.ReactElement<CommandFormFieldProps<any>>[] = [];\n const columns: ColumnInfo[] = [];\n let hasColumns = false;\n const otherChildren: React.ReactNode[] = [];\n let initialValuesFromFields: Partial<TCommand> = {};\n\n const extractInitialValue = (field: React.ReactElement) => {\n const fieldProps = field.props as any;\n if (fieldProps.currentValue !== undefined && fieldProps.value) {\n const propertyAccessor = fieldProps.value;\n const propertyName = getPropertyNameFromAccessor(propertyAccessor);\n if (propertyName) {\n initialValuesFromFields = { ...initialValuesFromFields, [propertyName]: fieldProps.currentValue } as Partial<TCommand>;\n }\n }\n };\n\n React.Children.toArray(props.children).forEach(child => {\n if (!React.isValidElement(child)) {\n otherChildren.push(child);\n return;\n }\n\n const component = child.type as any;\n\n // Check if child is a CommandFormColumn\n if (component.displayName === 'CommandFormColumn') {\n hasColumns = true;\n const childProps = child.props as { children?: React.ReactNode };\n const columnFields = React.Children.toArray(childProps.children).filter(child => {\n if (React.isValidElement(child)) {\n const comp = child.type as any;\n if (comp.displayName === 'CommandFormField') {\n extractInitialValue(child as React.ReactElement);\n return true;\n }\n }\n return false;\n }) as React.ReactElement[];\n columns.push({ fields: columnFields as React.ReactElement<CommandFormFieldProps<any>>[] });\n }\n // Check if child is a CommandFormField (direct child)\n else if (component.displayName === 'CommandFormField') {\n extractInitialValue(child as React.ReactElement);\n fields.push(child as React.ReactElement<CommandFormFieldProps<any>>);\n }\n // Check if child is Fields wrapper (backwards compatibility)\n else if (component === CommandFormFieldsWrapper || component.displayName === 'CommandFormFieldsWrapper') {\n const childProps = child.props as { children: React.ReactNode };\n const relevantChildren = React.Children.toArray(childProps.children).filter(child => {\n if (React.isValidElement(child)) {\n const component = child.type as any;\n if (component.displayName === 'CommandFormField') {\n extractInitialValue(child as React.ReactElement);\n return true;\n }\n }\n return false;\n }) as React.ReactElement[];\n fields = [...fields, ...(relevantChildren as React.ReactElement<CommandFormFieldProps<any>>[])];\n }\n // Everything else is not a field, keep it as other children\n else {\n otherChildren.push(child);\n }\n });\n\n return { fieldsOrColumns: hasColumns ? columns : fields, otherChildren, initialValuesFromFields };\n};\n\n// Helper function to extract property name from accessor function\nfunction getPropertyNameFromAccessor<T>(accessor: (obj: T) => unknown): string {\n const fnStr = accessor.toString();\n const match = fnStr.match(/\\.([a-zA-Z_$][a-zA-Z0-9_$]*)/);\n return match ? match[1] : '';\n}\n\nconst CommandFormComponent = <TCommand extends object = any>(props: CommandFormProps<TCommand>) => {\n const { fieldsOrColumns, otherChildren, initialValuesFromFields } = useMemo(() => getCommandFormFields<TCommand>(props), [props.children]);\n\n // Extract matching properties from currentValues\n const valuesFromCurrentValues = useMemo(() => {\n if (!props.currentValues) return {};\n\n const tempCommand = new props.command();\n const commandProperties = (tempCommand as any).properties || [];\n const extracted: Partial<TCommand> = {};\n\n commandProperties.forEach((propertyName: string) => {\n if ((props.currentValues as any)[propertyName] !== undefined) {\n (extracted as any)[propertyName] = (props.currentValues as any)[propertyName];\n }\n });\n\n return extracted;\n }, [props.currentValues, props.command]);\n\n // Merge initialValues prop with values extracted from field currentValue props and currentValues\n const mergedInitialValues = useMemo(() => ({\n ...valuesFromCurrentValues,\n ...initialValuesFromFields,\n ...props.initialValues\n }), [valuesFromCurrentValues, initialValuesFromFields, props.initialValues]);\n\n // useCommand returns [instance, setter] for the typed command. Provide generics so commandInstance is TCommand.\n const [commandInstance, setCommandValues] = useCommand<any>(props.command as Constructor<any>, mergedInitialValues as Partial<any>);\n const [commandResult, setCommandResult] = useState<ICommandResult<unknown> | undefined>(undefined);\n const [fieldValidities, setFieldValidities] = useState<Record<string, boolean>>({});\n const [customFieldErrors, setCustomFieldErrors] = useState<Record<string, string>>({});\n\n // Update command values when mergedInitialValues changes (e.g., when data loads asynchronously)\n React.useEffect(() => {\n if (mergedInitialValues && Object.keys(mergedInitialValues).length > 0) {\n setCommandValues(mergedInitialValues as TCommand);\n }\n }, [mergedInitialValues, setCommandValues]);\n\n const isValid = Object.values(fieldValidities).every(valid => valid);\n\n const setFieldValidity = useCallback((fieldName: string, isFieldValid: boolean) => {\n setFieldValidities(prev => ({ ...prev, [fieldName]: isFieldValid }));\n }, []);\n\n const setCustomFieldError = useCallback((fieldName: string, error: string | undefined) => {\n setCustomFieldErrors(prev => {\n if (error === undefined) {\n const newErrors = { ...prev };\n delete newErrors[fieldName];\n return newErrors;\n }\n return { ...prev, [fieldName]: error };\n });\n }, []);\n\n const getFieldError = (propertyName: string): string | undefined => {\n // Check custom field errors first\n if (customFieldErrors[propertyName]) {\n return customFieldErrors[propertyName];\n }\n\n if (!commandResult || !commandResult.validationResults) {\n return undefined;\n }\n\n for (const validationResult of commandResult.validationResults) {\n if (validationResult.members && validationResult.members.includes(propertyName)) {\n return validationResult.message;\n }\n }\n\n return undefined;\n };\n\n const exceptionMessages = commandResult?.exceptionMessages || [];\n const hasColumns = fieldsOrColumns.length > 0 && 'fields' in fieldsOrColumns[0];\n\n return (\n <CommandFormContext.Provider value={{ command: props.command, commandInstance, setCommandValues, commandResult, setCommandResult, getFieldError, isValid, setFieldValidity, onFieldValidate: props.onFieldValidate, onFieldChange: props.onFieldChange, onBeforeExecute: props.onBeforeExecute, customFieldErrors, setCustomFieldError }}>\n <CommandFormFields fields={hasColumns ? undefined : (fieldsOrColumns as React.ReactElement<CommandFormFieldProps<any>>[])} columns={hasColumns ? fieldsOrColumns as ColumnInfo[] : undefined} />\n {exceptionMessages.length > 0 && (\n <div className=\"card flex flex-row gap-3 mt-3\">\n <Panel header=\"The server responded with\" className=\"w-full\">\n <ul>\n {exceptionMessages.map((msg, idx) => (\n <li key={idx}>{msg}</li>\n ))}\n </ul>\n </Panel>\n </div>\n )}\n {otherChildren}\n </CommandFormContext.Provider>\n );\n};\n\nconst CommandFormColumnComponent = (_props: { children: React.ReactNode }) => {\n void _props;\n return <></>;\n};\n\nCommandFormColumnComponent.displayName = 'CommandFormColumn';\n\nCommandFormComponent.Fields = CommandFormFieldsWrapper;\nCommandFormComponent.Column = CommandFormColumnComponent;\n\nexport const CommandForm = CommandFormComponent;\n"],"names":["createContext","useContext","_jsx","useMemo","useCommand","useState","useCallback","_jsxs","CommandFormFields","Panel"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
const CommandFormField = (_props) => {
|
|
6
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
7
|
+
};
|
|
8
|
+
CommandFormField.displayName = 'CommandFormField';
|
|
9
|
+
|
|
10
|
+
exports.CommandFormField = CommandFormField;
|
|
11
|
+
//# sourceMappingURL=CommandFormField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandFormField.js","sources":["../../../CommandForm/CommandFormField.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 type { PropertyAccessor } from '@cratis/fundamentals';\n\nexport interface CommandFormFieldProps<TCommand = unknown> {\n icon?: React.ReactElement;\n /** Accessor function that selects a property on the command, e.g. c => c.name */\n value?: PropertyAccessor<TCommand>;\n /** Current value for the property (injected by CommandFormFields) */\n currentValue?: unknown;\n /** Called when the field value changes (injected by CommandFormFields) */\n onValueChange?: (value: unknown) => void;\n onChange?: (value: unknown) => void;\n required?: boolean;\n title?: string;\n description?: string;\n propertyDescriptor?: unknown;\n fieldName?: string;\n}\n\nexport const CommandFormField = <TCommand,>(_props?: CommandFormFieldProps<TCommand>) => {\n void _props;\n return <></>;\n};\n\nCommandFormField.displayName = 'CommandFormField';\n"],"names":["_jsx"],"mappings":";;;;AAqBO,MAAM,gBAAgB,GAAG,CAAY,MAAwC,KAAI;AAEpF,IAAA,OAAOA,uCAAK;AAChB;AAEA,gBAAgB,CAAC,WAAW,GAAG,kBAAkB;;;;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var CommandForm = require('./CommandForm.js');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var tooltip = require('primereact/tooltip');
|
|
7
|
+
|
|
8
|
+
const CommandFormFieldWrapper = ({ field, index }) => {
|
|
9
|
+
const context = CommandForm.useCommandFormContext();
|
|
10
|
+
const fieldProps = field.props;
|
|
11
|
+
const propertyAccessor = fieldProps.value;
|
|
12
|
+
const propertyName = propertyAccessor ? getPropertyName(propertyAccessor) : '';
|
|
13
|
+
const currentValue = propertyName ? context.commandInstance?.[propertyName] : undefined;
|
|
14
|
+
const errorMessage = propertyName ? context.getFieldError(propertyName) : undefined;
|
|
15
|
+
const propertyDescriptor = propertyName && context.commandInstance?.propertyDescriptors
|
|
16
|
+
? context.commandInstance.propertyDescriptors.find((pd) => pd.name === propertyName)
|
|
17
|
+
: undefined;
|
|
18
|
+
const clonedField = React.cloneElement(field, {
|
|
19
|
+
...fieldProps,
|
|
20
|
+
currentValue,
|
|
21
|
+
propertyDescriptor,
|
|
22
|
+
fieldName: propertyName,
|
|
23
|
+
onValueChange: (value) => {
|
|
24
|
+
if (propertyName) {
|
|
25
|
+
const oldValue = currentValue;
|
|
26
|
+
if (context.onFieldValidate) {
|
|
27
|
+
const validationError = context.onFieldValidate(context.commandInstance, propertyName, oldValue, value);
|
|
28
|
+
context.setCustomFieldError(propertyName, validationError);
|
|
29
|
+
}
|
|
30
|
+
context.setCommandValues({ [propertyName]: value });
|
|
31
|
+
if (context.onFieldChange) {
|
|
32
|
+
context.onFieldChange(context.commandInstance, propertyName, oldValue, value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
fieldProps.onChange?.(value);
|
|
36
|
+
},
|
|
37
|
+
required: fieldProps.required ?? true,
|
|
38
|
+
invalid: !!errorMessage
|
|
39
|
+
});
|
|
40
|
+
const tooltipId = fieldProps.description ? `tooltip-${propertyName}-${index}` : undefined;
|
|
41
|
+
return (jsxRuntime.jsxs("div", { style: { width: '100%' }, children: [jsxRuntime.jsxs("div", { className: "p-inputgroup", style: { width: '100%' }, children: [fieldProps.description && (jsxRuntime.jsx(tooltip.Tooltip, { target: `.${tooltipId}`, content: fieldProps.description })), fieldProps.icon && (jsxRuntime.jsx("span", { className: `p-inputgroup-addon ${tooltipId || ''}`, children: fieldProps.icon })), clonedField] }), errorMessage && (jsxRuntime.jsx("small", { className: "p-error block mt-1", children: errorMessage }))] }));
|
|
42
|
+
};
|
|
43
|
+
const CommandFormFields = (props) => {
|
|
44
|
+
const { fields, columns } = props;
|
|
45
|
+
if (columns && columns.length > 0) {
|
|
46
|
+
return (jsxRuntime.jsx("div", { className: "card flex flex-column md:flex-row gap-3", children: columns.map((column, columnIndex) => (jsxRuntime.jsx("div", { className: "flex flex-column gap-3 flex-1", children: column.fields.map((field, index) => {
|
|
47
|
+
const fieldProps = field.props;
|
|
48
|
+
const propertyAccessor = fieldProps.value;
|
|
49
|
+
const propertyName = propertyAccessor ? getPropertyName(propertyAccessor) : `field-${columnIndex}-${index}`;
|
|
50
|
+
return (jsxRuntime.jsx(CommandFormFieldWrapper, { field: field, index: index }, propertyName));
|
|
51
|
+
}) }, `column-${columnIndex}`))) }));
|
|
52
|
+
}
|
|
53
|
+
return (jsxRuntime.jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '1rem', width: '100%' }, children: (fields || []).map((field, index) => {
|
|
54
|
+
const fieldProps = field.props;
|
|
55
|
+
const propertyAccessor = fieldProps.value;
|
|
56
|
+
const propertyName = propertyAccessor ? getPropertyName(propertyAccessor) : `field-${index}`;
|
|
57
|
+
return (jsxRuntime.jsx(CommandFormFieldWrapper, { field: field, index: index }, propertyName));
|
|
58
|
+
}) }));
|
|
59
|
+
};
|
|
60
|
+
function getPropertyName(accessor) {
|
|
61
|
+
const fnStr = accessor.toString();
|
|
62
|
+
const match = fnStr.match(/\.([a-zA-Z_$][a-zA-Z0-9_$]*)/);
|
|
63
|
+
return match ? match[1] : '';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
exports.CommandFormFields = CommandFormFields;
|
|
67
|
+
//# sourceMappingURL=CommandFormFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandFormFields.js","sources":["../../../CommandForm/CommandFormFields.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 { useCommandFormContext } from './CommandForm';\nimport React from 'react';\nimport { Tooltip } from 'primereact/tooltip';\nimport type { CommandFormFieldProps } from './CommandFormField';\n\nexport interface ColumnInfo {\n fields: React.ReactElement<CommandFormFieldProps<any>>[];\n}\n\nexport interface CommandFormFieldsProps {\n fields?: React.ReactElement<CommandFormFieldProps<any>>[];\n columns?: ColumnInfo[];\n}\n\n// Separate component for each field to prevent re-rendering all fields\nconst CommandFormFieldWrapper = ({ field, index }: { field: React.ReactElement<CommandFormFieldProps<any>>; index: number }) => {\n const context = useCommandFormContext<any>();\n const fieldProps = field.props as CommandFormFieldProps<any>;\n const propertyAccessor = fieldProps.value;\n\n // Get the property name from the accessor function\n const propertyName = propertyAccessor ? getPropertyName(propertyAccessor) : '';\n\n // Get the current value from the command instance\n const currentValue = propertyName ? (context.commandInstance as any)?.[propertyName] : undefined;\n\n // Get the error message for this field, if any\n const errorMessage = propertyName ? context.getFieldError(propertyName) : undefined;\n\n // Get the property descriptor for this field from the command instance\n const propertyDescriptor = propertyName && (context.commandInstance as any)?.propertyDescriptors\n ? (context.commandInstance as any).propertyDescriptors.find((pd: any) => pd.name === propertyName)\n : undefined;\n\n // Clone the field element with the current value and onChange handler\n const clonedField = React.cloneElement(field as React.ReactElement, {\n ...fieldProps,\n currentValue,\n propertyDescriptor,\n fieldName: propertyName,\n onValueChange: (value: unknown) => {\n if (propertyName) {\n const oldValue = currentValue;\n\n // Call custom field validator if provided\n if (context.onFieldValidate) {\n const validationError = context.onFieldValidate(context.commandInstance as any, propertyName, oldValue, value);\n context.setCustomFieldError(propertyName, validationError);\n }\n\n context.setCommandValues({ [propertyName]: value } as any);\n\n // Call field change callback if provided\n if (context.onFieldChange) {\n context.onFieldChange(context.commandInstance as any, propertyName, oldValue, value);\n }\n }\n fieldProps.onChange?.(value as any);\n },\n required: fieldProps.required ?? true,\n invalid: !!errorMessage\n } as any);\n\n const tooltipId = fieldProps.description ? `tooltip-${propertyName}-${index}` : undefined;\n\n return (\n <div style={{ width: '100%' }}>\n <div className=\"p-inputgroup\" style={{ width: '100%' }}>\n {fieldProps.description && (\n <Tooltip target={`.${tooltipId}`} content={fieldProps.description} />\n )}\n {fieldProps.icon && (\n <span className={`p-inputgroup-addon ${tooltipId || ''}`}>\n {fieldProps.icon}\n </span>\n )}\n {clonedField}\n </div>\n {errorMessage && (\n <small className=\"p-error block mt-1\">{errorMessage}</small>\n )}\n </div>\n );\n};\n\nexport const CommandFormFields = (props: CommandFormFieldsProps) => {\n const { fields, columns } = props;\n\n // Render columns if provided\n if (columns && columns.length > 0) {\n return (\n <div className=\"card flex flex-column md:flex-row gap-3\">\n {columns.map((column, columnIndex) => (\n <div key={`column-${columnIndex}`} className=\"flex flex-column gap-3 flex-1\">\n {column.fields.map((field, index) => {\n const fieldProps = field.props as CommandFormFieldProps<any>;\n const propertyAccessor = fieldProps.value;\n const propertyName = propertyAccessor ? getPropertyName(propertyAccessor) : `field-${columnIndex}-${index}`;\n\n return (\n <CommandFormFieldWrapper\n key={propertyName}\n field={field}\n index={index}\n />\n );\n })}\n </div>\n ))}\n </div>\n );\n }\n\n // Render fields (single column layout)\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem', width: '100%' }}>\n {(fields || []).map((field, index) => {\n const fieldProps = field.props as CommandFormFieldProps<any>;\n const propertyAccessor = fieldProps.value;\n const propertyName = propertyAccessor ? getPropertyName(propertyAccessor) : `field-${index}`;\n\n return (\n <CommandFormFieldWrapper\n key={propertyName}\n field={field}\n index={index}\n />\n );\n })}\n </div>\n );\n};\n\n// Helper function to extract property name from accessor function\nfunction getPropertyName<T>(accessor: (obj: T) => unknown): string {\n const fnStr = accessor.toString();\n const match = fnStr.match(/\\.([a-zA-Z_$][a-zA-Z0-9_$]*)/);\n return match ? match[1] : '';\n}\n"],"names":["useCommandFormContext","_jsxs","_jsx","Tooltip"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var inputtext = require('primereact/inputtext');
|
|
6
|
+
var CommandForm = require('./CommandForm.js');
|
|
7
|
+
|
|
8
|
+
const DatePickerField = (props) => {
|
|
9
|
+
const [localValue, setLocalValue] = React.useState(props.currentValue || '');
|
|
10
|
+
const required = props.required ?? true;
|
|
11
|
+
const isValid = !required || localValue.trim().length > 0;
|
|
12
|
+
const { setFieldValidity } = CommandForm.useCommandFormContext();
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
setLocalValue(props.currentValue || '');
|
|
15
|
+
}, [props.currentValue]);
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
if (props.fieldName) {
|
|
18
|
+
setFieldValidity(props.fieldName, isValid);
|
|
19
|
+
}
|
|
20
|
+
}, [isValid, props.fieldName, setFieldValidity]);
|
|
21
|
+
const handleChange = (e) => {
|
|
22
|
+
const newValue = e.target.value;
|
|
23
|
+
setLocalValue(newValue);
|
|
24
|
+
props.onValueChange?.(newValue);
|
|
25
|
+
};
|
|
26
|
+
return (jsxRuntime.jsx(inputtext.InputText, { type: "date", value: localValue, onChange: handleChange, required: required, invalid: !isValid, placeholder: props.title }));
|
|
27
|
+
};
|
|
28
|
+
DatePickerField.displayName = 'CommandFormField';
|
|
29
|
+
|
|
30
|
+
exports.DatePickerField = DatePickerField;
|
|
31
|
+
//# sourceMappingURL=DatePickerField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerField.js","sources":["../../../CommandForm/DatePickerField.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 { PropertyAccessor } from '@cratis/fundamentals';\nimport { PropertyDescriptor } from '@cratis/arc/reflection';\nimport React, { useState, useEffect } from 'react';\nimport { InputText } from 'primereact/inputtext';\nimport { useCommandFormContext } from './CommandForm';\n\nexport interface DatePickerFieldProps<TCommand> {\n icon?: React.ReactElement;\n value: PropertyAccessor<TCommand>;\n onChange?: (value: unknown) => void;\n currentValue?: string;\n onValueChange?: (value: string) => void;\n required?: boolean;\n title?: string;\n description?: string;\n propertyDescriptor?: PropertyDescriptor;\n fieldName?: string;\n}\n\nexport const DatePickerField = <TCommand,>(props: DatePickerFieldProps<TCommand>) => {\n const [localValue, setLocalValue] = useState(props.currentValue || '');\n const required = props.required ?? true;\n const isValid = !required || localValue.trim().length > 0;\n const { setFieldValidity } = useCommandFormContext();\n\n useEffect(() => {\n setLocalValue(props.currentValue || '');\n }, [props.currentValue]);\n\n useEffect(() => {\n if (props.fieldName) {\n setFieldValidity(props.fieldName, isValid);\n }\n }, [isValid, props.fieldName, setFieldValidity]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n props.onValueChange?.(newValue);\n };\n\n return (\n <InputText\n type=\"date\"\n value={localValue}\n onChange={handleChange}\n required={required}\n invalid={!isValid}\n placeholder={props.title}\n />\n );\n};\n\nDatePickerField.displayName = 'CommandFormField';\n"],"names":["useState","useCommandFormContext","useEffect","_jsx","InputText"],"mappings":";;;;;;;AAsBO,MAAM,eAAe,GAAG,CAAY,KAAqC,KAAI;AAChF,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;AACtE,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI;AACvC,IAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AACzD,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAGC,iCAAqB,EAAE;IAEpDC,eAAS,CAAC,MAAK;AACX,QAAA,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;AAC3C,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAExBA,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,YAAA,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9C;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEhD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAsC,KAAI;AAC5D,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAC/B,aAAa,CAAC,QAAQ,CAAC;AACvB,QAAA,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;AACnC,IAAA,CAAC;AAED,IAAA,QACIC,cAAA,CAACC,mBAAS,EAAA,EACN,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,OAAO,EACjB,WAAW,EAAE,KAAK,CAAC,KAAK,EAAA,CAC1B;AAEV;AAEA,eAAe,CAAC,WAAW,GAAG,kBAAkB;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var Dropdown = require('../Dropdown/Dropdown.js');
|
|
6
|
+
var CommandForm = require('./CommandForm.js');
|
|
7
|
+
|
|
8
|
+
const DropdownField = (props) => {
|
|
9
|
+
const [localValue, setLocalValue] = React.useState(props.currentValue);
|
|
10
|
+
const required = props.required ?? true;
|
|
11
|
+
const isValid = !required || localValue !== null && localValue !== undefined;
|
|
12
|
+
const { setFieldValidity } = CommandForm.useCommandFormContext();
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
setLocalValue(props.currentValue);
|
|
15
|
+
}, [props.currentValue]);
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
if (props.fieldName) {
|
|
18
|
+
setFieldValidity(props.fieldName, isValid);
|
|
19
|
+
}
|
|
20
|
+
}, [isValid, props.fieldName, setFieldValidity]);
|
|
21
|
+
const handleChange = (e) => {
|
|
22
|
+
const newValue = e.value;
|
|
23
|
+
setLocalValue(newValue);
|
|
24
|
+
props.onValueChange?.(newValue);
|
|
25
|
+
};
|
|
26
|
+
return (jsxRuntime.jsx(Dropdown.Dropdown, { value: localValue, onChange: handleChange, options: props.options, optionLabel: props.optionLabelField, optionValue: props.optionIdField, placeholder: props.placeholder || props.title, required: required, invalid: !isValid, className: "w-full" }));
|
|
27
|
+
};
|
|
28
|
+
DropdownField.displayName = 'CommandFormField';
|
|
29
|
+
|
|
30
|
+
exports.DropdownField = DropdownField;
|
|
31
|
+
//# sourceMappingURL=DropdownField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownField.js","sources":["../../../CommandForm/DropdownField.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 { PropertyAccessor } from '@cratis/fundamentals';\nimport { PropertyDescriptor } from '@cratis/arc/reflection';\nimport React, { useState, useEffect } from 'react';\nimport { DropdownChangeEvent } from 'primereact/dropdown';\nimport { Dropdown } from '../Dropdown';\nimport { useCommandFormContext } from './CommandForm';\n\nexport interface DropdownFieldProps<TCommand, TOption> {\n icon?: React.ReactElement;\n value: PropertyAccessor<TCommand>;\n options: TOption[];\n optionIdField: keyof TOption;\n optionLabelField: keyof TOption;\n placeholder?: string;\n onChange?: (value: unknown) => void;\n currentValue?: unknown;\n onValueChange?: (value: unknown) => void;\n required?: boolean;\n title?: string;\n description?: string;\n propertyDescriptor?: PropertyDescriptor;\n fieldName?: string;\n}\n\nexport const DropdownField = <TCommand, TOption>(props: DropdownFieldProps<TCommand, TOption>) => {\n const [localValue, setLocalValue] = useState(props.currentValue);\n const required = props.required ?? true;\n const isValid = !required || localValue !== null && localValue !== undefined;\n const { setFieldValidity } = useCommandFormContext();\n\n useEffect(() => {\n setLocalValue(props.currentValue);\n }, [props.currentValue]);\n\n useEffect(() => {\n if (props.fieldName) {\n setFieldValidity(props.fieldName, isValid);\n }\n }, [isValid, props.fieldName, setFieldValidity]);\n\n const handleChange = (e: DropdownChangeEvent) => {\n const newValue = e.value;\n setLocalValue(newValue);\n props.onValueChange?.(newValue);\n };\n\n return (\n <Dropdown\n value={localValue}\n onChange={handleChange}\n options={props.options}\n optionLabel={props.optionLabelField as string}\n optionValue={props.optionIdField as string}\n placeholder={props.placeholder || props.title}\n required={required}\n invalid={!isValid}\n className=\"w-full\"\n />\n );\n};\n\nDropdownField.displayName = 'CommandFormField';\n"],"names":["useState","useCommandFormContext","useEffect","_jsx","Dropdown"],"mappings":";;;;;;;AA2BO,MAAM,aAAa,GAAG,CAAoB,KAA4C,KAAI;AAC7F,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AAChE,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI;AACvC,IAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;AAC5E,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAGC,iCAAqB,EAAE;IAEpDC,eAAS,CAAC,MAAK;AACX,QAAA,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;AACrC,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAExBA,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,YAAA,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9C;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEhD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAsB,KAAI;AAC5C,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK;QACxB,aAAa,CAAC,QAAQ,CAAC;AACvB,QAAA,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;AACnC,IAAA,CAAC;IAED,QACIC,cAAA,CAACC,iBAAQ,EAAA,EACL,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,WAAW,EAAE,KAAK,CAAC,gBAA0B,EAC7C,WAAW,EAAE,KAAK,CAAC,aAAuB,EAC1C,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAC7C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,OAAO,EACjB,SAAS,EAAC,QAAQ,EAAA,CACpB;AAEV;AAEA,aAAa,CAAC,WAAW,GAAG,kBAAkB;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var inputtext = require('primereact/inputtext');
|
|
6
|
+
var CommandForm = require('./CommandForm.js');
|
|
7
|
+
|
|
8
|
+
const InputTextField = (props) => {
|
|
9
|
+
const [localValue, setLocalValue] = React.useState(props.currentValue || '');
|
|
10
|
+
const required = props.required ?? true;
|
|
11
|
+
const isValid = !required || localValue.trim().length > 0;
|
|
12
|
+
const { setFieldValidity } = CommandForm.useCommandFormContext();
|
|
13
|
+
const inputType = props.propertyDescriptor?.type === Number ? 'number' : 'text';
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
setLocalValue(props.currentValue || '');
|
|
16
|
+
}, [props.currentValue]);
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
if (props.fieldName) {
|
|
19
|
+
setFieldValidity(props.fieldName, isValid);
|
|
20
|
+
}
|
|
21
|
+
}, [isValid, props.fieldName, setFieldValidity]);
|
|
22
|
+
const handleChange = (e) => {
|
|
23
|
+
const newValue = e.target.value;
|
|
24
|
+
setLocalValue(newValue);
|
|
25
|
+
props.onValueChange?.(newValue);
|
|
26
|
+
};
|
|
27
|
+
return (jsxRuntime.jsx(inputtext.InputText, { type: inputType, value: localValue, onChange: handleChange, required: required, invalid: !isValid, placeholder: props.title }));
|
|
28
|
+
};
|
|
29
|
+
InputTextField.displayName = 'CommandFormField';
|
|
30
|
+
|
|
31
|
+
exports.InputTextField = InputTextField;
|
|
32
|
+
//# sourceMappingURL=InputTextField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputTextField.js","sources":["../../../CommandForm/InputTextField.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 { PropertyAccessor } from '@cratis/fundamentals';\nimport { PropertyDescriptor } from '@cratis/arc/reflection';\nimport React, { useState, useEffect } from 'react';\nimport { InputText } from 'primereact/inputtext';\nimport { useCommandFormContext } from './CommandForm';\n\nexport interface InputTextFieldProps<TCommand> {\n icon?: React.ReactElement;\n value: PropertyAccessor<TCommand>;\n onChange?: (value: unknown) => void;\n currentValue?: string;\n onValueChange?: (value: string) => void;\n required?: boolean;\n title?: string;\n description?: string;\n propertyDescriptor?: PropertyDescriptor;\n fieldName?: string;\n}\n\nexport const InputTextField = <TCommand,>(props: InputTextFieldProps<TCommand>) => {\n const [localValue, setLocalValue] = useState(props.currentValue || '');\n const required = props.required ?? true;\n const isValid = !required || localValue.trim().length > 0;\n const { setFieldValidity } = useCommandFormContext();\n\n // Determine input type based on property descriptor\n const inputType = props.propertyDescriptor?.type === Number ? 'number' : 'text';\n\n // Update local value when prop changes from outside\n useEffect(() => {\n setLocalValue(props.currentValue || '');\n }, [props.currentValue]);\n\n // Report validity changes\n useEffect(() => {\n if (props.fieldName) {\n setFieldValidity(props.fieldName, isValid);\n }\n }, [isValid, props.fieldName, setFieldValidity]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n props.onValueChange?.(newValue);\n };\n\n return (\n <InputText\n type={inputType}\n value={localValue}\n onChange={handleChange}\n required={required}\n invalid={!isValid}\n placeholder={props.title}\n />\n );\n};\n\nInputTextField.displayName = 'CommandFormField';\n"],"names":["useState","useCommandFormContext","useEffect","_jsx","InputText"],"mappings":";;;;;;;AAsBO,MAAM,cAAc,GAAG,CAAY,KAAoC,KAAI;AAC9E,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;AACtE,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI;AACvC,IAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AACzD,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAGC,iCAAqB,EAAE;AAGpD,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,EAAE,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,MAAM;IAG/EC,eAAS,CAAC,MAAK;AACX,QAAA,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;AAC3C,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAGxBA,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,YAAA,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9C;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEhD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAsC,KAAI;AAC5D,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAC/B,aAAa,CAAC,QAAQ,CAAC;AACvB,QAAA,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;AACnC,IAAA,CAAC;AAED,IAAA,QACIC,cAAA,CAACC,mBAAS,EAAA,EACN,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,OAAO,EACjB,WAAW,EAAE,KAAK,CAAC,KAAK,EAAA,CAC1B;AAEV;AAEA,cAAc,CAAC,WAAW,GAAG,kBAAkB;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var slider = require('primereact/slider');
|
|
6
|
+
var CommandForm = require('./CommandForm.js');
|
|
7
|
+
|
|
8
|
+
const SliderField = (props) => {
|
|
9
|
+
const [localValue, setLocalValue] = React.useState(props.currentValue ?? 0);
|
|
10
|
+
const required = props.required ?? true;
|
|
11
|
+
const min = props.min ?? 0;
|
|
12
|
+
const max = props.max ?? 1;
|
|
13
|
+
const step = props.step ?? 0.01;
|
|
14
|
+
const isValid = !required || (localValue >= min && localValue <= max);
|
|
15
|
+
const { setFieldValidity } = CommandForm.useCommandFormContext();
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
setLocalValue(props.currentValue ?? 0);
|
|
18
|
+
}, [props.currentValue]);
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
if (props.fieldName) {
|
|
21
|
+
setFieldValidity(props.fieldName, isValid);
|
|
22
|
+
}
|
|
23
|
+
}, [isValid, props.fieldName, setFieldValidity]);
|
|
24
|
+
const handleChange = (e) => {
|
|
25
|
+
const newValue = e.value;
|
|
26
|
+
setLocalValue(newValue);
|
|
27
|
+
props.onValueChange?.(newValue);
|
|
28
|
+
};
|
|
29
|
+
return (jsxRuntime.jsxs("div", { className: "p-inputtext w-full flex align-items-center gap-3", style: { display: 'flex', alignItems: 'center', borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }, children: [jsxRuntime.jsx(slider.Slider, { value: localValue, onChange: handleChange, min: min, max: max, step: step, className: "flex-1 ml-2" }), jsxRuntime.jsx("span", { className: "font-semibold", style: { minWidth: '3rem', textAlign: 'right' }, children: localValue.toFixed(2) })] }));
|
|
30
|
+
};
|
|
31
|
+
SliderField.displayName = 'CommandFormField';
|
|
32
|
+
|
|
33
|
+
exports.SliderField = SliderField;
|
|
34
|
+
//# sourceMappingURL=SliderField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SliderField.js","sources":["../../../CommandForm/SliderField.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 { PropertyAccessor } from '@cratis/fundamentals';\nimport { PropertyDescriptor } from '@cratis/arc/reflection';\nimport React, { useState, useEffect } from 'react';\nimport { Slider, SliderChangeEvent } from 'primereact/slider';\nimport { useCommandFormContext } from './CommandForm';\n\nexport interface SliderFieldProps<TCommand> {\n icon?: React.ReactElement;\n value: PropertyAccessor<TCommand>;\n onChange?: (value: unknown) => void;\n currentValue?: number;\n onValueChange?: (value: number) => void;\n required?: boolean;\n title?: string;\n description?: string;\n propertyDescriptor?: PropertyDescriptor;\n fieldName?: string;\n min?: number;\n max?: number;\n step?: number;\n}\n\nexport const SliderField = <TCommand,>(props: SliderFieldProps<TCommand>) => {\n const [localValue, setLocalValue] = useState(props.currentValue ?? 0);\n const required = props.required ?? true;\n const min = props.min ?? 0;\n const max = props.max ?? 1;\n const step = props.step ?? 0.01;\n const isValid = !required || (localValue >= min && localValue <= max);\n const { setFieldValidity } = useCommandFormContext();\n\n useEffect(() => {\n setLocalValue(props.currentValue ?? 0);\n }, [props.currentValue]);\n\n useEffect(() => {\n if (props.fieldName) {\n setFieldValidity(props.fieldName, isValid);\n }\n }, [isValid, props.fieldName, setFieldValidity]);\n\n const handleChange = (e: SliderChangeEvent) => {\n const newValue = e.value as number;\n setLocalValue(newValue);\n props.onValueChange?.(newValue);\n };\n\n return (\n <div className=\"p-inputtext w-full flex align-items-center gap-3\" style={{ display: 'flex', alignItems: 'center', borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}>\n <Slider\n value={localValue}\n onChange={handleChange}\n min={min}\n max={max}\n step={step}\n className=\"flex-1 ml-2\"\n />\n <span className=\"font-semibold\" style={{ minWidth: '3rem', textAlign: 'right' }}>\n {localValue.toFixed(2)}\n </span>\n </div>\n );\n};\n\nSliderField.displayName = 'CommandFormField';\n"],"names":["useState","useCommandFormContext","useEffect","_jsxs","_jsx","Slider"],"mappings":";;;;;;;AAyBO,MAAM,WAAW,GAAG,CAAY,KAAiC,KAAI;AACxE,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;AACrE,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI;AACvC,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;AAC1B,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;AAC1B,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI;AAC/B,IAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,KAAK,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC;AACrE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAGC,iCAAqB,EAAE;IAEpDC,eAAS,CAAC,MAAK;AACX,QAAA,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;AAC1C,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAExBA,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,YAAA,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9C;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEhD,IAAA,MAAM,YAAY,GAAG,CAAC,CAAoB,KAAI;AAC1C,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAe;QAClC,aAAa,CAAC,QAAQ,CAAC;AACvB,QAAA,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;AACnC,IAAA,CAAC;AAED,IAAA,QACIC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,EAAA,QAAA,EAAA,CACjKC,eAACC,aAAM,EAAA,EACH,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,aAAa,GACzB,EACFD,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAA,QAAA,EAC1E,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAA,CACnB,CAAA,EAAA,CACL;AAEd;AAEA,WAAW,CAAC,WAAW,GAAG,kBAAkB;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var CommandForm = require('./CommandForm.js');
|
|
4
|
+
var CommandFormField = require('./CommandFormField.js');
|
|
5
|
+
var CommandFormFields = require('./CommandFormFields.js');
|
|
6
|
+
var InputTextField = require('./InputTextField.js');
|
|
7
|
+
var DatePickerField = require('./DatePickerField.js');
|
|
8
|
+
var DropdownField = require('./DropdownField.js');
|
|
9
|
+
var SliderField = require('./SliderField.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.CommandForm = CommandForm.CommandForm;
|
|
14
|
+
exports.useCommandFormContext = CommandForm.useCommandFormContext;
|
|
15
|
+
exports.useCommandInstance = CommandForm.useCommandInstance;
|
|
16
|
+
exports.useSetCommandResult = CommandForm.useSetCommandResult;
|
|
17
|
+
exports.CommandFormField = CommandFormField.CommandFormField;
|
|
18
|
+
exports.CommandFormFields = CommandFormFields.CommandFormFields;
|
|
19
|
+
exports.InputTextField = InputTextField.InputTextField;
|
|
20
|
+
exports.DatePickerField = DatePickerField.DatePickerField;
|
|
21
|
+
exports.DropdownField = DropdownField.DropdownField;
|
|
22
|
+
exports.SliderField = SliderField.SliderField;
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
const Page = ({ title, children, panel, ...rest }) => {
|
|
6
|
+
return (jsxRuntime.jsxs("div", { className: 'flex flex-col h-full', ...rest, children: [jsxRuntime.jsx("h1", { className: 'text-3xl mt-3 mb-4', children: title }), jsxRuntime.jsx("main", { className: `overflow-hidden h-full flex flex-col flex-1 ${panel ? 'panel' : ''}`, children: children })] }));
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.Page = Page;
|
|
10
|
+
//# sourceMappingURL=Page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Page.js","sources":["../../../Common/Page.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 { HTMLAttributes, ReactNode } from 'react';\n\nexport interface PageProps extends HTMLAttributes<HTMLDivElement> {\n title: string;\n children?: ReactNode;\n panel?: boolean\n}\n\nexport const Page = ({ title, children, panel, ...rest }: PageProps) => {\n return (\n <div className='flex flex-col h-full' {...rest}>\n <h1 className='text-3xl mt-3 mb-4'>{title}</h1>\n <main className={`overflow-hidden h-full flex flex-col flex-1 ${panel ? 'panel' : ''}`}>\n {children}\n </main>\n </div>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;AAWO,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAa,KAAI;AACnE,IAAA,QACIA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sBAAsB,EAAA,GAAK,IAAI,EAAA,QAAA,EAAA,CAC1CC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAE,KAAK,GAAM,EAC/CA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,+CAA+C,KAAK,GAAG,OAAO,GAAG,EAAE,EAAE,EAAA,QAAA,EACjF,QAAQ,EAAA,CACN,CAAA,EAAA,CACL;AAEd;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var Page = require('../Common/Page.js');
|
|
6
|
+
var menubar = require('primereact/menubar');
|
|
7
|
+
var queries = require('@cratis/arc/queries');
|
|
8
|
+
var DataTableForObservableQuery = require('../DataTables/DataTableForObservableQuery.js');
|
|
9
|
+
var DataTableForQuery = require('../DataTables/DataTableForQuery.js');
|
|
10
|
+
var allotment = require('allotment');
|
|
11
|
+
|
|
12
|
+
const MenuItem = (_) => {
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
15
|
+
const MenuItems = ({ children }) => {
|
|
16
|
+
const context = React.useContext(DataPageContext);
|
|
17
|
+
const isDisabled = React.useMemo(() => {
|
|
18
|
+
return !context.selectedItem;
|
|
19
|
+
}, [context.selectedItem]);
|
|
20
|
+
const items = React.useMemo(() => {
|
|
21
|
+
const menuItems = [];
|
|
22
|
+
React.Children.forEach(children, (child) => {
|
|
23
|
+
if (React.isValidElement(child) && child.type == MenuItem) {
|
|
24
|
+
const Icon = child.props.icon;
|
|
25
|
+
const menuItem = { ...child.props };
|
|
26
|
+
menuItem.icon = jsxRuntime.jsx(Icon, { className: 'mr-2' });
|
|
27
|
+
menuItem.disabled = isDisabled && child.props.disableOnUnselected;
|
|
28
|
+
menuItems.push(menuItem);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return menuItems;
|
|
32
|
+
}, [children, context.selectedItem]);
|
|
33
|
+
return (jsxRuntime.jsx("div", { className: "px-4 py-2", children: jsxRuntime.jsx(menubar.Menubar, { "aria-label": "Actions", model: items }) }));
|
|
34
|
+
};
|
|
35
|
+
const Columns = ({ children }) => {
|
|
36
|
+
const context = React.useContext(DataPageContext);
|
|
37
|
+
if (context.query.prototype instanceof queries.QueryFor) {
|
|
38
|
+
return (jsxRuntime.jsx(DataTableForQuery.DataTableForQuery, { ...context, selection: context.selectedItem, onSelectionChange: context.onSelectionChanged, children: children }));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
return (jsxRuntime.jsx(DataTableForObservableQuery.DataTableForObservableQuery, { ...context, selection: context.selectedItem, onSelectionChange: context.onSelectionChanged, children: children }));
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const DataPageContext = React.createContext(null);
|
|
45
|
+
const DataPage = (props) => {
|
|
46
|
+
const [selectedItem, setSelectedItem] = React.useState(undefined);
|
|
47
|
+
const selectionChanged = (e) => {
|
|
48
|
+
setSelectedItem(e.value);
|
|
49
|
+
if (props.onSelectionChange) {
|
|
50
|
+
props.onSelectionChange(e);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const context = { ...props, selectedItem, onSelectionChanged: selectionChanged };
|
|
54
|
+
return (jsxRuntime.jsx(DataPageContext.Provider, { value: context, children: jsxRuntime.jsx(Page.Page, { title: props.title, panel: true, children: jsxRuntime.jsxs(allotment.Allotment, { className: "h-full", proportionalLayout: false, children: [jsxRuntime.jsx(allotment.Allotment.Pane, { className: "flex-grow", children: props.children }), props.detailsComponent && selectedItem &&
|
|
55
|
+
jsxRuntime.jsx(allotment.Allotment.Pane, { preferredSize: "450px", children: jsxRuntime.jsx(props.detailsComponent, { item: selectedItem }) })] }) }) }));
|
|
56
|
+
};
|
|
57
|
+
DataPage.MenuItems = MenuItems;
|
|
58
|
+
DataPage.Columns = Columns;
|
|
59
|
+
|
|
60
|
+
exports.Columns = Columns;
|
|
61
|
+
exports.DataPage = DataPage;
|
|
62
|
+
exports.MenuItem = MenuItem;
|
|
63
|
+
exports.MenuItems = MenuItems;
|
|
64
|
+
//# sourceMappingURL=DataPage.js.map
|