@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,98 @@
|
|
|
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 React from 'react';
|
|
5
|
+
|
|
6
|
+
interface PropertiesProps {
|
|
7
|
+
data: Record<string, unknown>;
|
|
8
|
+
/** CSS class name for the container */
|
|
9
|
+
className?: string;
|
|
10
|
+
/** Text alignment for the table */
|
|
11
|
+
align?: 'left' | 'right';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const Properties: React.FC<PropertiesProps> = ({ data, className, align = 'left' }) => {
|
|
15
|
+
const tableStyle: React.CSSProperties = {
|
|
16
|
+
width: '100%',
|
|
17
|
+
borderCollapse: 'collapse',
|
|
18
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "SF Mono", monospace',
|
|
19
|
+
fontSize: '13px',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const rowStyle: React.CSSProperties = {
|
|
23
|
+
borderBottom: '1px solid rgba(255,255,255,0.1)',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const labelStyle: React.CSSProperties = {
|
|
27
|
+
padding: '8px 12px',
|
|
28
|
+
color: 'rgba(255,255,255,0.6)',
|
|
29
|
+
textAlign: align,
|
|
30
|
+
fontWeight: 500,
|
|
31
|
+
width: '40%',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const valueStyle: React.CSSProperties = {
|
|
35
|
+
padding: '8px 12px',
|
|
36
|
+
color: '#fff',
|
|
37
|
+
textAlign: align,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const renderValue = (value: unknown): React.ReactNode => {
|
|
41
|
+
if (value === null || value === undefined) {
|
|
42
|
+
return <span style={{ color: 'rgba(255,255,255,0.4)' }}>null</span>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (typeof value === 'boolean') {
|
|
46
|
+
return <span style={{ color: value ? '#4ade80' : '#f87171' }}>{value.toString()}</span>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (typeof value === 'number') {
|
|
50
|
+
return <span style={{ color: '#fbbf24' }}>{value}</span>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (value instanceof Date) {
|
|
54
|
+
return <span style={{ color: '#60a5fa' }}>{value.toLocaleString()}</span>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
return (
|
|
59
|
+
<span style={{ color: 'rgba(255,255,255,0.7)' }}>
|
|
60
|
+
Array[{value.length}]
|
|
61
|
+
</span>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (typeof value === 'object') {
|
|
66
|
+
return (
|
|
67
|
+
<span style={{ color: 'rgba(255,255,255,0.7)' }}>
|
|
68
|
+
{'{'}...{'}'}
|
|
69
|
+
</span>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return <span>{String(value)}</span>;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const formatPropertyName = (key: string): string => {
|
|
77
|
+
// Convert camelCase to Title Case with spaces
|
|
78
|
+
return key
|
|
79
|
+
.replace(/([A-Z])/g, ' $1')
|
|
80
|
+
.replace(/^./, str => str.toUpperCase())
|
|
81
|
+
.trim();
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<div className={className}>
|
|
86
|
+
<table style={tableStyle}>
|
|
87
|
+
<tbody>
|
|
88
|
+
{data && Object.entries(data).map(([key, value], index) => (
|
|
89
|
+
<tr key={`${key}-${index}`} style={rowStyle}>
|
|
90
|
+
<td style={labelStyle}>{formatPropertyName(key)}</td>
|
|
91
|
+
<td style={valueStyle}>{renderValue(value)}</td>
|
|
92
|
+
</tr>
|
|
93
|
+
))}
|
|
94
|
+
</tbody>
|
|
95
|
+
</table>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
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 React from 'react';
|
|
5
|
+
import * as Comp from './ReadModelView';
|
|
6
|
+
const Component: React.ComponentType<any> | undefined = (Comp as any).default || (Object.values(Comp)[0] as any);
|
|
7
|
+
|
|
8
|
+
export default { title: 'TimeMachine/ReadModelView', component: Component };
|
|
9
|
+
|
|
10
|
+
export const Default = () => (Component ? <Component /> : <div>Unable to render component</div>);
|
|
@@ -0,0 +1,143 @@
|
|
|
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 React, { useState } from 'react';
|
|
5
|
+
import type { Version } from './types';
|
|
6
|
+
import { Properties } from './Properties';
|
|
7
|
+
|
|
8
|
+
interface ReadModelViewProps {
|
|
9
|
+
versions: Version[];
|
|
10
|
+
selectedIndex: number;
|
|
11
|
+
hoveredIndex: number | null;
|
|
12
|
+
onVersionSelect: (index: number) => void;
|
|
13
|
+
onHoveringCardChange: (isHovering: boolean) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const ReadModelView: React.FC<ReadModelViewProps> = ({
|
|
17
|
+
versions,
|
|
18
|
+
selectedIndex,
|
|
19
|
+
hoveredIndex,
|
|
20
|
+
onVersionSelect,
|
|
21
|
+
onHoveringCardChange,
|
|
22
|
+
}) => {
|
|
23
|
+
const displayIndex = hoveredIndex ?? selectedIndex;
|
|
24
|
+
const [flippedMap, setFlippedMap] = useState<Record<string, boolean>>({});
|
|
25
|
+
|
|
26
|
+
const toggleFlip = (id: string) => (event: React.MouseEvent<HTMLButtonElement>) => {
|
|
27
|
+
event.stopPropagation();
|
|
28
|
+
setFlippedMap(previous => ({
|
|
29
|
+
...previous,
|
|
30
|
+
[id]: !previous[id]
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<>
|
|
36
|
+
{/* Starfield background */}
|
|
37
|
+
<div className="time-machine-background">
|
|
38
|
+
<div className="stars"></div>
|
|
39
|
+
<div className="stars stars-2"></div>
|
|
40
|
+
<div className="stars stars-3"></div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
{/* 3D Stacked Windows */}
|
|
44
|
+
<div className="time-machine-viewport">
|
|
45
|
+
<div className="windows-container">
|
|
46
|
+
{versions.map((version, index) => {
|
|
47
|
+
const depth = index - displayIndex;
|
|
48
|
+
const isActive = index === displayIndex;
|
|
49
|
+
const isVisible = depth >= 0 && depth < 10;
|
|
50
|
+
const isFlipped = flippedMap[version.id] ?? false;
|
|
51
|
+
|
|
52
|
+
if (!isVisible) return null;
|
|
53
|
+
|
|
54
|
+
// Only prepare events for the active version to avoid showing all events at once
|
|
55
|
+
const events = isActive && version.events?.length
|
|
56
|
+
? version.events.map(event => ({
|
|
57
|
+
...event,
|
|
58
|
+
occurred: new Date(event.occurred)
|
|
59
|
+
}))
|
|
60
|
+
: [];
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div
|
|
64
|
+
key={version.id}
|
|
65
|
+
className={`version-window ${isActive ? 'active' : ''} ${isFlipped ? 'flipped' : ''}`}
|
|
66
|
+
style={{
|
|
67
|
+
'--depth': depth,
|
|
68
|
+
'--z-offset': -depth * 150,
|
|
69
|
+
'--scale': 1 - depth * 0.05,
|
|
70
|
+
'--opacity': 1 - depth * 0.12,
|
|
71
|
+
} as React.CSSProperties}
|
|
72
|
+
onClick={() => onVersionSelect(index)}
|
|
73
|
+
onMouseEnter={() => onHoveringCardChange(true)}
|
|
74
|
+
onMouseLeave={() => onHoveringCardChange(false)}
|
|
75
|
+
>
|
|
76
|
+
<div className="version-window-inner">
|
|
77
|
+
<div className="version-window-face version-window-face--front">
|
|
78
|
+
<div className="window-chrome">
|
|
79
|
+
<div className="window-controls">
|
|
80
|
+
<span className="control close"></span>
|
|
81
|
+
<span className="control minimize"></span>
|
|
82
|
+
<span className="control maximize"></span>
|
|
83
|
+
</div>
|
|
84
|
+
<div className="window-title">{version.label}</div>
|
|
85
|
+
<div className="window-actions">
|
|
86
|
+
<button
|
|
87
|
+
type="button"
|
|
88
|
+
className="window-flip-button"
|
|
89
|
+
onClick={toggleFlip(version.id)}
|
|
90
|
+
aria-label="Show related events"
|
|
91
|
+
aria-pressed={isFlipped}
|
|
92
|
+
>
|
|
93
|
+
<i className={`pi ${isFlipped ? 'pi-undo' : 'pi-refresh'}`} />
|
|
94
|
+
</button>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
<div className="window-content">
|
|
98
|
+
{version.content}
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
<div className="version-window-face version-window-face--back">
|
|
102
|
+
<div className="window-chrome window-chrome--back">
|
|
103
|
+
<div className="window-controls">
|
|
104
|
+
<span className="control close"></span>
|
|
105
|
+
<span className="control minimize"></span>
|
|
106
|
+
<span className="control maximize"></span>
|
|
107
|
+
</div>
|
|
108
|
+
<div className="window-title">Related Events</div>
|
|
109
|
+
<div className="window-actions">
|
|
110
|
+
<button
|
|
111
|
+
type="button"
|
|
112
|
+
className="window-flip-button"
|
|
113
|
+
onClick={toggleFlip(version.id)}
|
|
114
|
+
aria-label="Show read model snapshot"
|
|
115
|
+
aria-pressed={isFlipped}
|
|
116
|
+
>
|
|
117
|
+
<i className={`pi ${isFlipped ? 'pi-undo' : 'pi-refresh'}`} />
|
|
118
|
+
</button>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
<div className="window-content window-content--events">
|
|
122
|
+
<div className="snapshot-event-list">
|
|
123
|
+
{events.map((event, eventIndex) => (
|
|
124
|
+
<div key={`${version.id}-${event.sequenceNumber ?? eventIndex}`} className="snapshot-event">
|
|
125
|
+
<div className="snapshot-event-header">
|
|
126
|
+
<span className="snapshot-event-name">{event.type}</span>
|
|
127
|
+
<span className="snapshot-event-timestamp">{event.occurred.toLocaleString()}</span>
|
|
128
|
+
</div>
|
|
129
|
+
<Properties data={event.content} align="left" />
|
|
130
|
+
</div>
|
|
131
|
+
))}
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
})}
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</>
|
|
142
|
+
);
|
|
143
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
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 React from 'react';
|
|
5
|
+
import * as Comp from './TimeMachine';
|
|
6
|
+
const Component: React.ComponentType<any> | undefined = (Comp as any).default || (Object.values(Comp)[0] as any);
|
|
7
|
+
|
|
8
|
+
export default { title: 'TimeMachine/TimeMachine', component: Component };
|
|
9
|
+
|
|
10
|
+
export const Default = () => (Component ? <Component /> : <div>Unable to render component</div>);
|
|
@@ -0,0 +1,244 @@
|
|
|
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 React, { useState, useCallback, useRef, useEffect } from 'react';
|
|
5
|
+
import type { Version } from './types';
|
|
6
|
+
import { ReadModelView } from './ReadModelView';
|
|
7
|
+
import { EventsView } from './EventsView';
|
|
8
|
+
import './TimeMachine.css';
|
|
9
|
+
|
|
10
|
+
type ViewMode = 'readmodel' | 'events';
|
|
11
|
+
|
|
12
|
+
interface TimeMachineProps {
|
|
13
|
+
versions: Version[];
|
|
14
|
+
currentVersionIndex?: number;
|
|
15
|
+
onVersionChange?: (index: number) => void;
|
|
16
|
+
/** Scroll sensitivity - higher values require more scrolling to change versions */
|
|
17
|
+
scrollSensitivity?: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const TimeMachine: React.FC<TimeMachineProps> = ({
|
|
21
|
+
versions,
|
|
22
|
+
currentVersionIndex = 0,
|
|
23
|
+
onVersionChange,
|
|
24
|
+
scrollSensitivity = 50,
|
|
25
|
+
}) => {
|
|
26
|
+
const [selectedIndex, setSelectedIndex] = useState(currentVersionIndex);
|
|
27
|
+
const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);
|
|
28
|
+
const [isHoveringCard, setIsHoveringCard] = useState(false);
|
|
29
|
+
const [viewMode, setViewMode] = useState<ViewMode>('readmodel');
|
|
30
|
+
const containerRef = useRef<HTMLDivElement>(null);
|
|
31
|
+
const scrollAccumulatorRef = useRef(0);
|
|
32
|
+
|
|
33
|
+
const handleVersionSelect = useCallback((index: number) => {
|
|
34
|
+
setSelectedIndex(index);
|
|
35
|
+
onVersionChange?.(index);
|
|
36
|
+
}, [onVersionChange]);
|
|
37
|
+
|
|
38
|
+
const handleTimelineHover = useCallback((index: number | null) => {
|
|
39
|
+
setHoveredIndex(index);
|
|
40
|
+
}, []);
|
|
41
|
+
|
|
42
|
+
// Handle trackpad two-finger scroll gesture
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (viewMode !== 'readmodel') {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const container = containerRef.current;
|
|
49
|
+
if (!container) return;
|
|
50
|
+
|
|
51
|
+
const handleWheel = (e: WheelEvent) => {
|
|
52
|
+
// Only handle navigation when not hovering over a card
|
|
53
|
+
if (isHoveringCard) {
|
|
54
|
+
return; // Allow normal scrolling within cards
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Prevent default scrolling behavior
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
|
|
60
|
+
// Use deltaX for horizontal scroll, fallback to deltaY for vertical
|
|
61
|
+
// Most trackpads send horizontal delta for two-finger swipe
|
|
62
|
+
const delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
|
|
63
|
+
|
|
64
|
+
// Accumulate scroll delta
|
|
65
|
+
scrollAccumulatorRef.current += delta;
|
|
66
|
+
|
|
67
|
+
// Check if we've accumulated enough scroll to change version
|
|
68
|
+
if (Math.abs(scrollAccumulatorRef.current) >= scrollSensitivity) {
|
|
69
|
+
const direction = scrollAccumulatorRef.current > 0 ? 1 : -1;
|
|
70
|
+
const newIndex = Math.max(0, Math.min(versions.length - 1, selectedIndex + direction));
|
|
71
|
+
|
|
72
|
+
if (newIndex !== selectedIndex) {
|
|
73
|
+
setSelectedIndex(newIndex);
|
|
74
|
+
onVersionChange?.(newIndex);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Reset accumulator after version change
|
|
78
|
+
scrollAccumulatorRef.current = 0;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
container.addEventListener('wheel', handleWheel, { passive: false });
|
|
83
|
+
|
|
84
|
+
return () => {
|
|
85
|
+
container.removeEventListener('wheel', handleWheel);
|
|
86
|
+
};
|
|
87
|
+
}, [versions.length, selectedIndex, onVersionChange, scrollSensitivity, isHoveringCard, viewMode]);
|
|
88
|
+
|
|
89
|
+
// Calculate the display index - either hovered or selected
|
|
90
|
+
// (not used in this component; ReadModelView computes its own display index)
|
|
91
|
+
void hoveredIndex;
|
|
92
|
+
void selectedIndex;
|
|
93
|
+
|
|
94
|
+
// Get all events from all versions
|
|
95
|
+
const allEvents = versions.flatMap(version => version.events || []);
|
|
96
|
+
|
|
97
|
+
return (
|
|
98
|
+
<div className="time-machine" ref={containerRef}>
|
|
99
|
+
{/* View Switcher */}
|
|
100
|
+
<div className="view-switcher">
|
|
101
|
+
<button
|
|
102
|
+
className={`view-button ${viewMode === 'readmodel' ? 'active' : ''}`}
|
|
103
|
+
onClick={() => setViewMode('readmodel')}
|
|
104
|
+
aria-label="Read Model View"
|
|
105
|
+
title="Read Model View"
|
|
106
|
+
>
|
|
107
|
+
<i className="pi pi-box" />
|
|
108
|
+
</button>
|
|
109
|
+
<button
|
|
110
|
+
className={`view-button ${viewMode === 'events' ? 'active' : ''}`}
|
|
111
|
+
onClick={() => setViewMode('events')}
|
|
112
|
+
aria-label="Events View"
|
|
113
|
+
title="Events View"
|
|
114
|
+
>
|
|
115
|
+
<i className="pi pi-list" />
|
|
116
|
+
</button>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
{/* Render the appropriate view */}
|
|
120
|
+
{viewMode === 'readmodel' ? (
|
|
121
|
+
<ReadModelView
|
|
122
|
+
versions={versions}
|
|
123
|
+
selectedIndex={selectedIndex}
|
|
124
|
+
hoveredIndex={hoveredIndex}
|
|
125
|
+
onVersionSelect={handleVersionSelect}
|
|
126
|
+
onHoveringCardChange={setIsHoveringCard}
|
|
127
|
+
/>
|
|
128
|
+
) : (
|
|
129
|
+
<EventsView events={allEvents} />
|
|
130
|
+
)}
|
|
131
|
+
|
|
132
|
+
{/* Timeline - only show in ReadModel view */}
|
|
133
|
+
{viewMode === 'readmodel' && (
|
|
134
|
+
<Timeline
|
|
135
|
+
versions={versions}
|
|
136
|
+
selectedIndex={selectedIndex}
|
|
137
|
+
hoveredIndex={hoveredIndex}
|
|
138
|
+
onSelect={handleVersionSelect}
|
|
139
|
+
onHover={handleTimelineHover}
|
|
140
|
+
/>
|
|
141
|
+
)}
|
|
142
|
+
|
|
143
|
+
{/* Navigation arrows - only show in ReadModel view */}
|
|
144
|
+
{viewMode === 'readmodel' && (
|
|
145
|
+
<div className="navigation-controls">
|
|
146
|
+
<button
|
|
147
|
+
className="nav-button prev"
|
|
148
|
+
disabled={selectedIndex === 0}
|
|
149
|
+
onClick={() => handleVersionSelect(Math.max(0, selectedIndex - 1))}
|
|
150
|
+
aria-label="Previous version"
|
|
151
|
+
>
|
|
152
|
+
‹
|
|
153
|
+
</button>
|
|
154
|
+
<button
|
|
155
|
+
className="nav-button next"
|
|
156
|
+
disabled={selectedIndex === versions.length - 1}
|
|
157
|
+
onClick={() => handleVersionSelect(Math.min(versions.length - 1, selectedIndex + 1))}
|
|
158
|
+
aria-label="Next version"
|
|
159
|
+
>
|
|
160
|
+
›
|
|
161
|
+
</button>
|
|
162
|
+
</div>
|
|
163
|
+
)}
|
|
164
|
+
</div>
|
|
165
|
+
);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
interface TimelineProps {
|
|
169
|
+
versions: Version[];
|
|
170
|
+
selectedIndex: number;
|
|
171
|
+
hoveredIndex: number | null;
|
|
172
|
+
onSelect: (index: number) => void;
|
|
173
|
+
onHover: (index: number | null) => void;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const Timeline: React.FC<TimelineProps> = ({
|
|
177
|
+
versions,
|
|
178
|
+
selectedIndex,
|
|
179
|
+
hoveredIndex,
|
|
180
|
+
onSelect,
|
|
181
|
+
onHover,
|
|
182
|
+
}) => {
|
|
183
|
+
const getMagnification = (index: number, hoverIdx: number | null): number => {
|
|
184
|
+
if (hoverIdx === null) return 1;
|
|
185
|
+
const distance = Math.abs(index - hoverIdx);
|
|
186
|
+
// Fish-eye effect: items close to hover get magnified
|
|
187
|
+
if (distance === 0) return 2.0;
|
|
188
|
+
if (distance === 1) return 1.6;
|
|
189
|
+
if (distance === 2) return 1.3;
|
|
190
|
+
if (distance === 3) return 1.1;
|
|
191
|
+
return 1;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
const formatDate = (date: Date): string => {
|
|
195
|
+
return date.toLocaleDateString('en-US', {
|
|
196
|
+
month: 'short',
|
|
197
|
+
day: 'numeric',
|
|
198
|
+
year: 'numeric',
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const formatTime = (date: Date): string => {
|
|
203
|
+
return date.toLocaleTimeString('en-US', {
|
|
204
|
+
hour: 'numeric',
|
|
205
|
+
minute: '2-digit',
|
|
206
|
+
hour12: true,
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
return (
|
|
211
|
+
<div
|
|
212
|
+
className="timeline"
|
|
213
|
+
onMouseLeave={() => onHover(null)}
|
|
214
|
+
>
|
|
215
|
+
<div className="timeline-track">
|
|
216
|
+
{versions.map((version, index) => {
|
|
217
|
+
const magnification = getMagnification(index, hoveredIndex);
|
|
218
|
+
const isSelected = index === selectedIndex;
|
|
219
|
+
const isHovered = index === hoveredIndex;
|
|
220
|
+
|
|
221
|
+
return (
|
|
222
|
+
<div
|
|
223
|
+
key={version.id}
|
|
224
|
+
className={`timeline-entry ${isSelected ? 'selected' : ''} ${isHovered ? 'hovered' : ''}`}
|
|
225
|
+
style={{
|
|
226
|
+
'--magnification': magnification,
|
|
227
|
+
} as React.CSSProperties}
|
|
228
|
+
onMouseEnter={() => onHover(index)}
|
|
229
|
+
onClick={() => onSelect(index)}
|
|
230
|
+
>
|
|
231
|
+
<div className="timeline-tick"></div>
|
|
232
|
+
<div className="timeline-label">
|
|
233
|
+
<span className="timeline-date">{formatDate(version.timestamp)}</span>
|
|
234
|
+
<span className="timeline-time">{formatTime(version.timestamp)}</span>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
);
|
|
238
|
+
})}
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
);
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
export default TimeMachine;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
export { TimeMachine } from './TimeMachine';
|
|
5
|
+
export { ReadModelView } from './ReadModelView';
|
|
6
|
+
export { EventsView } from './EventsView';
|
|
7
|
+
export { Properties } from './Properties';
|
|
8
|
+
export * from './types';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
export interface Version {
|
|
5
|
+
id: string;
|
|
6
|
+
timestamp: Date;
|
|
7
|
+
label: string;
|
|
8
|
+
content: React.ReactNode;
|
|
9
|
+
events?: Event[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface Event {
|
|
13
|
+
sequenceNumber: number;
|
|
14
|
+
type: string;
|
|
15
|
+
occurred: Date;
|
|
16
|
+
content: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface TimelineEntry {
|
|
20
|
+
id: string;
|
|
21
|
+
timestamp: Date;
|
|
22
|
+
label: string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var dialog = require('primereact/dialog');
|
|
5
|
+
var button = require('primereact/button');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var CommandForm = require('../CommandForm/CommandForm.js');
|
|
8
|
+
|
|
9
|
+
const CommandDialogContext = React.createContext(undefined);
|
|
10
|
+
const useCommandDialogContext = () => {
|
|
11
|
+
const context = React.useContext(CommandDialogContext);
|
|
12
|
+
if (!context) {
|
|
13
|
+
throw new Error('useCommandDialogContext must be used within a CommandDialog');
|
|
14
|
+
}
|
|
15
|
+
return context;
|
|
16
|
+
};
|
|
17
|
+
const CommandDialogFormContent = () => {
|
|
18
|
+
const command = CommandForm.useCommandInstance();
|
|
19
|
+
const { setCommandResult, setCommandValues, isValid, onBeforeExecute } = CommandForm.useCommandFormContext();
|
|
20
|
+
const { onSuccess: onConfirm, onCancel, confirmLabel, cancelLabel, confirmIcon, cancelIcon } = useCommandDialogContext();
|
|
21
|
+
const handleConfirm = async () => {
|
|
22
|
+
if (onBeforeExecute) {
|
|
23
|
+
const transformedValues = onBeforeExecute(command);
|
|
24
|
+
setCommandValues(transformedValues);
|
|
25
|
+
}
|
|
26
|
+
const result = await command.execute();
|
|
27
|
+
if (result.isSuccess) {
|
|
28
|
+
await onConfirm(result);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
setCommandResult(result);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const handleCancel = () => {
|
|
35
|
+
onCancel();
|
|
36
|
+
};
|
|
37
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { className: "card flex flex-wrap justify-content-center gap-3 mt-8", children: [jsxRuntime.jsx(button.Button, { label: confirmLabel, icon: confirmIcon, onClick: handleConfirm, disabled: !isValid }), jsxRuntime.jsx(button.Button, { label: cancelLabel, icon: cancelIcon, severity: 'secondary', onClick: handleCancel })] }) }));
|
|
38
|
+
};
|
|
39
|
+
const CommandDialogFieldsWrapper = (props) => {
|
|
40
|
+
React.Children.forEach(props.children, child => {
|
|
41
|
+
if (React.isValidElement(child)) {
|
|
42
|
+
const component = child.type;
|
|
43
|
+
if (component.displayName !== 'CommandFormField') {
|
|
44
|
+
throw new Error(`Only CommandFormField components are allowed as children of CommandDialog.Fields. Got: ${component.displayName || component.name || 'Unknown'}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return (jsxRuntime.jsx(CommandForm.CommandForm.Fields, { children: props.children }));
|
|
49
|
+
};
|
|
50
|
+
const CommandDialogComponent = (props) => {
|
|
51
|
+
const { command, initialValues, currentValues, visible, header, confirmLabel = 'Confirm', cancelLabel = 'Cancel', confirmIcon = 'pi pi-check', cancelIcon = 'pi pi-times', onConfirm, onCancel, onFieldValidate, onFieldChange, onBeforeExecute, children, style = { width: '50vw' }, width } = props;
|
|
52
|
+
const dialogStyle = width ? { ...style, width } : style;
|
|
53
|
+
const contextValue = {
|
|
54
|
+
onSuccess: onConfirm,
|
|
55
|
+
onCancel,
|
|
56
|
+
confirmLabel,
|
|
57
|
+
cancelLabel,
|
|
58
|
+
confirmIcon,
|
|
59
|
+
cancelIcon,
|
|
60
|
+
onFieldValidate,
|
|
61
|
+
onFieldChange,
|
|
62
|
+
onBeforeExecute
|
|
63
|
+
};
|
|
64
|
+
return (jsxRuntime.jsx(dialog.Dialog, { header: header, visible: visible, style: dialogStyle, onHide: onCancel, contentStyle: { overflow: 'visible' }, children: jsxRuntime.jsx(CommandDialogContext.Provider, { value: contextValue, children: jsxRuntime.jsxs(CommandForm.CommandForm, { command: command, initialValues: initialValues, currentValues: currentValues, onFieldValidate: onFieldValidate, onFieldChange: onFieldChange, onBeforeExecute: onBeforeExecute, children: [children, jsxRuntime.jsx(CommandDialogFormContent, {})] }) }) }));
|
|
65
|
+
};
|
|
66
|
+
CommandDialogComponent.Fields = CommandDialogFieldsWrapper;
|
|
67
|
+
const CommandDialog = CommandDialogComponent;
|
|
68
|
+
|
|
69
|
+
exports.CommandDialog = CommandDialog;
|
|
70
|
+
exports.useCommandDialogContext = useCommandDialogContext;
|
|
71
|
+
//# sourceMappingURL=CommandDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandDialog.js","sources":["../../../CommandDialog/CommandDialog.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 { ICommandResult } from '@cratis/arc/commands';\nimport { Constructor } from '@cratis/fundamentals';\nimport { Dialog } from 'primereact/dialog';\nimport { Button } from 'primereact/button';\nimport React, { createContext, useContext } from 'react';\nimport { CommandForm, useCommandFormContext, BeforeExecuteCallback } from '../CommandForm/CommandForm';\nimport { useCommandInstance } from '../CommandForm/CommandForm';\n\nexport type FieldValidator<TCommand> = (command: TCommand, fieldName: string, oldValue: unknown, newValue: unknown) => string | undefined;\nexport type FieldChangeCallback<TCommand> = (command: TCommand, fieldName: string, oldValue: unknown, newValue: unknown) => void;\n\nexport interface CommandDialogProps<TCommand, TResponse = object> {\n command: Constructor<TCommand>;\n initialValues?: Partial<TCommand>;\n currentValues?: Partial<TCommand> | undefined;\n visible: boolean;\n header: string;\n confirmLabel?: string;\n cancelLabel?: string;\n confirmIcon?: string;\n cancelIcon?: string;\n onConfirm: (result: ICommandResult<TResponse>) => void | Promise<void>;\n onCancel: () => void;\n onFieldValidate?: FieldValidator<TCommand>;\n onFieldChange?: FieldChangeCallback<TCommand>;\n onBeforeExecute?: BeforeExecuteCallback<TCommand>;\n children?: React.ReactNode;\n style?: React.CSSProperties;\n width?: string;\n}\n\ninterface CommandDialogContextValue<TCommand = unknown> {\n onSuccess: (result: ICommandResult<any>) => void | Promise<void>;\n onCancel: () => void;\n confirmLabel: string;\n cancelLabel: string;\n confirmIcon: string;\n cancelIcon: string;\n onFieldValidate?: FieldValidator<TCommand>;\n onFieldChange?: FieldChangeCallback<TCommand>;\n onBeforeExecute?: BeforeExecuteCallback<TCommand>;\n}\n\nconst CommandDialogContext = createContext<CommandDialogContextValue<unknown> | undefined>(undefined);\n\nexport const useCommandDialogContext = <TCommand = unknown,>() => {\n const context = useContext(CommandDialogContext);\n if (!context) {\n throw new Error('useCommandDialogContext must be used within a CommandDialog');\n }\n return context as CommandDialogContextValue<TCommand>;\n};\n\nconst CommandDialogFormContent = () => {\n const command = useCommandInstance();\n const { setCommandResult, setCommandValues, isValid, onBeforeExecute } = useCommandFormContext();\n const { onSuccess: onConfirm, onCancel, confirmLabel, cancelLabel, confirmIcon, cancelIcon } = useCommandDialogContext();\n\n const handleConfirm = async () => {\n if (onBeforeExecute) {\n const transformedValues = onBeforeExecute(command);\n setCommandValues(transformedValues);\n }\n const result = await command.execute();\n if (result.isSuccess) {\n await onConfirm(result);\n } else {\n setCommandResult(result);\n }\n };\n\n const handleCancel = () => {\n onCancel();\n };\n\n return (\n <>\n <div className=\"card flex flex-wrap justify-content-center gap-3 mt-8\">\n <Button label={confirmLabel} icon={confirmIcon} onClick={handleConfirm} disabled={!isValid} />\n <Button label={cancelLabel} icon={cancelIcon} severity='secondary' onClick={handleCancel} />\n </div>\n </>\n );\n};\n\nconst CommandDialogFieldsWrapper = (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 CommandDialog.Fields. Got: ${component.displayName || component.name || 'Unknown'}`);\n }\n }\n });\n\n return (\n <CommandForm.Fields>\n {props.children}\n </CommandForm.Fields>\n );\n};\n\nconst CommandDialogComponent = <TCommand extends object = any, TResponse = object>(props: CommandDialogProps<TCommand, TResponse>) => {\n const {\n command,\n initialValues,\n currentValues,\n visible,\n header,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n confirmIcon = 'pi pi-check',\n cancelIcon = 'pi pi-times',\n onConfirm,\n onCancel,\n onFieldValidate,\n onFieldChange,\n onBeforeExecute,\n children,\n style = { width: '50vw' },\n width\n } = props;\n\n const dialogStyle = width ? { ...style, width } : style;\n\n const contextValue: CommandDialogContextValue<TCommand> = {\n onSuccess: onConfirm,\n onCancel,\n confirmLabel,\n cancelLabel,\n confirmIcon,\n cancelIcon,\n onFieldValidate,\n onFieldChange,\n onBeforeExecute\n };\n\n return (\n <Dialog\n header={header}\n visible={visible}\n style={dialogStyle}\n onHide={onCancel}\n contentStyle={{ overflow: 'visible' }}\n >\n <CommandDialogContext.Provider value={contextValue}>\n <CommandForm command={command} initialValues={initialValues} currentValues={currentValues} onFieldValidate={onFieldValidate} onFieldChange={onFieldChange} onBeforeExecute={onBeforeExecute}>\n {children}\n <CommandDialogFormContent />\n </CommandForm>\n </CommandDialogContext.Provider>\n </Dialog>\n );\n};\n\nCommandDialogComponent.Fields = CommandDialogFieldsWrapper;\n\nexport const CommandDialog = CommandDialogComponent;\n"],"names":["createContext","useContext","useCommandInstance","useCommandFormContext","_jsx","_jsxs","Button","CommandForm","Dialog"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|