@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 @@
|
|
|
1
|
+
{"version":3,"file":"RangeHistogramFilter.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/components/RangeHistogramFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CACpD;AASD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,GAAG,EACH,GAAG,EACH,OAAY,EACZ,aAAa,EACb,QAAQ,GACT,EAAE,yBAAyB,2CA8L3B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
function RangeHistogramFilter({ values, min, max, buckets = 20, selectedRange, onChange, }) {
|
|
5
|
+
const containerRef = useRef(null);
|
|
6
|
+
const [isDragging, setIsDragging] = useState(null);
|
|
7
|
+
const [dragStart, setDragStart] = useState(null);
|
|
8
|
+
const numericValues = useMemo(() => {
|
|
9
|
+
return values
|
|
10
|
+
.map((v) => {
|
|
11
|
+
if (typeof v === 'number')
|
|
12
|
+
return v;
|
|
13
|
+
if (v instanceof Date)
|
|
14
|
+
return v.getTime();
|
|
15
|
+
const parsed = Number(v);
|
|
16
|
+
return Number.isNaN(parsed) ? null : parsed;
|
|
17
|
+
})
|
|
18
|
+
.filter((v) => v !== null);
|
|
19
|
+
}, [values]);
|
|
20
|
+
const histogram = useMemo(() => {
|
|
21
|
+
const range = max - min;
|
|
22
|
+
if (range <= 0 || numericValues.length === 0) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
const bucketSize = range / buckets;
|
|
26
|
+
const bucketCounts = Array(buckets).fill(0);
|
|
27
|
+
numericValues.forEach((value) => {
|
|
28
|
+
const bucketIndex = Math.min(Math.floor((value - min) / bucketSize), buckets - 1);
|
|
29
|
+
if (bucketIndex >= 0 && bucketIndex < buckets) {
|
|
30
|
+
bucketCounts[bucketIndex]++;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
const maxCount = Math.max(...bucketCounts, 1);
|
|
34
|
+
return bucketCounts.map((count, i) => ({
|
|
35
|
+
start: min + i * bucketSize,
|
|
36
|
+
end: min + (i + 1) * bucketSize,
|
|
37
|
+
count,
|
|
38
|
+
maxCount,
|
|
39
|
+
}));
|
|
40
|
+
}, [numericValues, min, max, buckets]);
|
|
41
|
+
const currentRange = selectedRange ?? [min, max];
|
|
42
|
+
const getPositionFromValue = useCallback((value) => {
|
|
43
|
+
const range = max - min;
|
|
44
|
+
if (range <= 0)
|
|
45
|
+
return 0;
|
|
46
|
+
return ((value - min) / range) * 100;
|
|
47
|
+
}, [min, max]);
|
|
48
|
+
const handleMouseDown = (e, handle) => {
|
|
49
|
+
e.preventDefault?.();
|
|
50
|
+
setIsDragging(handle);
|
|
51
|
+
setDragStart({ x: e.clientX, range: [...currentRange] });
|
|
52
|
+
};
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!isDragging || !dragStart || !containerRef.current)
|
|
55
|
+
return;
|
|
56
|
+
const container = containerRef.current;
|
|
57
|
+
const rect = container.getBoundingClientRect();
|
|
58
|
+
const range = max - min;
|
|
59
|
+
const handleMouseMove = (e) => {
|
|
60
|
+
const deltaX = e.clientX - dragStart.x;
|
|
61
|
+
const deltaPercent = (deltaX / rect.width) * 100;
|
|
62
|
+
const deltaValue = (deltaPercent / 100) * range;
|
|
63
|
+
let newRange = [...dragStart.range];
|
|
64
|
+
if (isDragging === 'left') {
|
|
65
|
+
newRange[0] = Math.max(min, Math.min(dragStart.range[0] + deltaValue, newRange[1] - range * 0.01));
|
|
66
|
+
}
|
|
67
|
+
else if (isDragging === 'right') {
|
|
68
|
+
newRange[1] = Math.min(max, Math.max(dragStart.range[1] + deltaValue, newRange[0] + range * 0.01));
|
|
69
|
+
}
|
|
70
|
+
else if (isDragging === 'range') {
|
|
71
|
+
const rangeWidth = dragStart.range[1] - dragStart.range[0];
|
|
72
|
+
let newStart = dragStart.range[0] + deltaValue;
|
|
73
|
+
let newEnd = dragStart.range[1] + deltaValue;
|
|
74
|
+
if (newStart < min) {
|
|
75
|
+
newStart = min;
|
|
76
|
+
newEnd = min + rangeWidth;
|
|
77
|
+
}
|
|
78
|
+
if (newEnd > max) {
|
|
79
|
+
newEnd = max;
|
|
80
|
+
newStart = max - rangeWidth;
|
|
81
|
+
}
|
|
82
|
+
newRange = [newStart, newEnd];
|
|
83
|
+
}
|
|
84
|
+
onChange(newRange);
|
|
85
|
+
};
|
|
86
|
+
const handleMouseUp = () => {
|
|
87
|
+
setIsDragging(null);
|
|
88
|
+
setDragStart(null);
|
|
89
|
+
};
|
|
90
|
+
document.addEventListener('mousemove', handleMouseMove);
|
|
91
|
+
document.addEventListener('mouseup', handleMouseUp);
|
|
92
|
+
return () => {
|
|
93
|
+
document.removeEventListener('mousemove', handleMouseMove);
|
|
94
|
+
document.removeEventListener('mouseup', handleMouseUp);
|
|
95
|
+
};
|
|
96
|
+
}, [isDragging, dragStart, min, max, onChange]);
|
|
97
|
+
const handleBarClick = (bucket) => {
|
|
98
|
+
onChange([bucket.start, bucket.end]);
|
|
99
|
+
};
|
|
100
|
+
const handleClear = () => {
|
|
101
|
+
onChange(null);
|
|
102
|
+
};
|
|
103
|
+
const leftPos = getPositionFromValue(currentRange[0]);
|
|
104
|
+
const rightPos = getPositionFromValue(currentRange[1]);
|
|
105
|
+
const formatValue = (value) => {
|
|
106
|
+
if (Number.isInteger(value))
|
|
107
|
+
return value.toString();
|
|
108
|
+
return value.toFixed(1);
|
|
109
|
+
};
|
|
110
|
+
return (jsxs("div", { className: "pv-range-histogram", ref: containerRef, children: [jsx("div", { className: "pv-histogram-bars", children: histogram.map((bucket, i) => {
|
|
111
|
+
const heightPercent = (bucket.count / bucket.maxCount) * 100;
|
|
112
|
+
const isInRange = bucket.start >= currentRange[0] && bucket.end <= currentRange[1];
|
|
113
|
+
const isPartiallyInRange = bucket.end > currentRange[0] && bucket.start < currentRange[1];
|
|
114
|
+
return (jsx("button", { className: `pv-histogram-bar ${isInRange ? 'in-range' : ''} ${isPartiallyInRange && !isInRange ? 'partial' : ''}`, style: { height: `${heightPercent}%` }, onClick: () => handleBarClick(bucket), title: `${formatValue(bucket.start)} - ${formatValue(bucket.end)}: ${bucket.count} items`, type: "button" }, i));
|
|
115
|
+
}) }), jsxs("div", { className: "pv-range-slider", children: [jsx("div", { className: "pv-range-track" }), jsx("div", { className: "pv-range-selection", style: {
|
|
116
|
+
left: `${leftPos}%`,
|
|
117
|
+
width: `${rightPos - leftPos}%`,
|
|
118
|
+
}, onMouseDown: (e) => handleMouseDown(e, 'range') }), jsx("div", { className: "pv-range-handle pv-range-handle-left", style: { left: `${leftPos}%` }, onMouseDown: (e) => handleMouseDown(e, 'left') }), jsx("div", { className: "pv-range-handle pv-range-handle-right", style: { left: `${rightPos}%` }, onMouseDown: (e) => handleMouseDown(e, 'right') })] }), jsxs("div", { className: "pv-range-labels", children: [jsx("span", { className: "pv-range-value", children: formatValue(currentRange[0]) }), jsx("span", { className: "pv-range-value", children: formatValue(currentRange[1]) })] }), selectedRange && (jsx("button", { type: "button", className: "pv-range-clear", onClick: handleClear, children: "Clear Range" }))] }));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { RangeHistogramFilter };
|
|
122
|
+
//# sourceMappingURL=RangeHistogramFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangeHistogramFilter.js","sources":["../../../../PivotViewer/components/RangeHistogramFilter.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 { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { PivotPrimitive } from '../types';\n\nexport interface RangeHistogramFilterProps {\n values: PivotPrimitive[];\n min: number;\n max: number;\n buckets?: number;\n selectedRange: [number, number] | null;\n onChange: (range: [number, number] | null) => void;\n}\n\ninterface HistogramBucket {\n start: number;\n end: number;\n count: number;\n maxCount: number;\n}\n\nexport function RangeHistogramFilter({\n values,\n min,\n max,\n buckets = 20,\n selectedRange,\n onChange,\n}: RangeHistogramFilterProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [isDragging, setIsDragging] = useState<'left' | 'right' | 'range' | null>(null);\n const [dragStart, setDragStart] = useState<{ x: number; range: [number, number] } | null>(null);\n\n const numericValues = useMemo(() => {\n return values\n .map((v) => {\n if (typeof v === 'number') return v;\n if (v instanceof Date) return v.getTime();\n const parsed = Number(v);\n return Number.isNaN(parsed) ? null : parsed;\n })\n .filter((v): v is number => v !== null);\n }, [values]);\n\n const histogram = useMemo((): HistogramBucket[] => {\n const range = max - min;\n if (range <= 0 || numericValues.length === 0) {\n return [];\n }\n\n const bucketSize = range / buckets;\n const bucketCounts: number[] = Array(buckets).fill(0);\n\n numericValues.forEach((value) => {\n const bucketIndex = Math.min(\n Math.floor((value - min) / bucketSize),\n buckets - 1\n );\n if (bucketIndex >= 0 && bucketIndex < buckets) {\n bucketCounts[bucketIndex]++;\n }\n });\n\n const maxCount = Math.max(...bucketCounts, 1);\n\n return bucketCounts.map((count, i) => ({\n start: min + i * bucketSize,\n end: min + (i + 1) * bucketSize,\n count,\n maxCount,\n }));\n }, [numericValues, min, max, buckets]);\n\n const currentRange = selectedRange ?? [min, max];\n\n const getPositionFromValue = useCallback(\n (value: number) => {\n const range = max - min;\n if (range <= 0) return 0;\n return ((value - min) / range) * 100;\n },\n [min, max]\n );\n\n const handleMouseDown = (\n e: React.MouseEvent,\n handle: 'left' | 'right' | 'range'\n ) => {\n (e as any).preventDefault?.();\n setIsDragging(handle);\n setDragStart({ x: e.clientX, range: [...currentRange] as [number, number] });\n };\n\n useEffect(() => {\n if (!isDragging || !dragStart || !containerRef.current) return;\n\n const container = containerRef.current;\n const rect = container.getBoundingClientRect();\n const range = max - min;\n\n const handleMouseMove = (e: MouseEvent) => {\n const deltaX = e.clientX - dragStart.x;\n const deltaPercent = (deltaX / rect.width) * 100;\n const deltaValue = (deltaPercent / 100) * range;\n\n let newRange: [number, number] = [...dragStart.range];\n\n if (isDragging === 'left') {\n newRange[0] = Math.max(min, Math.min(dragStart.range[0] + deltaValue, newRange[1] - range * 0.01));\n } else if (isDragging === 'right') {\n newRange[1] = Math.min(max, Math.max(dragStart.range[1] + deltaValue, newRange[0] + range * 0.01));\n } else if (isDragging === 'range') {\n const rangeWidth = dragStart.range[1] - dragStart.range[0];\n let newStart = dragStart.range[0] + deltaValue;\n let newEnd = dragStart.range[1] + deltaValue;\n\n if (newStart < min) {\n newStart = min;\n newEnd = min + rangeWidth;\n }\n if (newEnd > max) {\n newEnd = max;\n newStart = max - rangeWidth;\n }\n\n newRange = [newStart, newEnd];\n }\n\n onChange(newRange);\n };\n\n const handleMouseUp = () => {\n setIsDragging(null);\n setDragStart(null);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, dragStart, min, max, onChange]);\n\n const handleBarClick = (bucket: HistogramBucket) => {\n onChange([bucket.start, bucket.end]);\n };\n\n const handleClear = () => {\n onChange(null);\n };\n\n const leftPos = getPositionFromValue(currentRange[0]);\n const rightPos = getPositionFromValue(currentRange[1]);\n\n const formatValue = (value: number) => {\n if (Number.isInteger(value)) return value.toString();\n return value.toFixed(1);\n };\n\n return (\n <div className=\"pv-range-histogram\" ref={containerRef}>\n <div className=\"pv-histogram-bars\">\n {histogram.map((bucket, i) => {\n const heightPercent = (bucket.count / bucket.maxCount) * 100;\n const isInRange =\n bucket.start >= currentRange[0] && bucket.end <= currentRange[1];\n const isPartiallyInRange =\n bucket.end > currentRange[0] && bucket.start < currentRange[1];\n\n return (\n <button\n key={i}\n className={`pv-histogram-bar ${isInRange ? 'in-range' : ''} ${isPartiallyInRange && !isInRange ? 'partial' : ''}`}\n style={{ height: `${heightPercent}%` }}\n onClick={() => handleBarClick(bucket)}\n title={`${formatValue(bucket.start)} - ${formatValue(bucket.end)}: ${bucket.count} items`}\n type=\"button\"\n />\n );\n })}\n </div>\n\n <div className=\"pv-range-slider\">\n <div className=\"pv-range-track\" />\n <div\n className=\"pv-range-selection\"\n style={{\n left: `${leftPos}%`,\n width: `${rightPos - leftPos}%`,\n }}\n onMouseDown={(e) => handleMouseDown(e, 'range')}\n />\n <div\n className=\"pv-range-handle pv-range-handle-left\"\n style={{ left: `${leftPos}%` }}\n onMouseDown={(e) => handleMouseDown(e, 'left')}\n />\n <div\n className=\"pv-range-handle pv-range-handle-right\"\n style={{ left: `${rightPos}%` }}\n onMouseDown={(e) => handleMouseDown(e, 'right')}\n />\n </div>\n\n <div className=\"pv-range-labels\">\n <span className=\"pv-range-value\">{formatValue(currentRange[0])}</span>\n <span className=\"pv-range-value\">{formatValue(currentRange[1])}</span>\n </div>\n\n {selectedRange && (\n <button type=\"button\" className=\"pv-range-clear\" onClick={handleClear}>\n Clear Range\n </button>\n )}\n </div>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/components/Spinner.tsx"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAC;AAEvB,wBAAgB,OAAO,4CAetB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import './Spinner.css';
|
|
3
|
+
|
|
4
|
+
function Spinner() {
|
|
5
|
+
return (jsx("div", { className: "pv-loading", children: jsxs("div", { className: "pv-spinner", children: [jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" }), jsx("div", { className: "pv-spinner-ring" })] }) }));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export { Spinner };
|
|
9
|
+
//# sourceMappingURL=Spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sources":["../../../../PivotViewer/components/Spinner.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 './Spinner.css';\n\nexport function Spinner() {\n return (\n <div className=\"pv-loading\">\n <div className=\"pv-spinner\">\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n <div className=\"pv-spinner-ring\" />\n </div>\n </div>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":";;;SAKgB,OAAO,GAAA;AACrB,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EACzBC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EAAA,CACzBD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,EACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,CAAG,CAAA,EAAA,CAC/B,EAAA,CACF;AAEV;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PivotDimension } from '../types';
|
|
2
|
+
export type ViewMode = 'collection' | 'grouped';
|
|
3
|
+
export interface ToolbarProps<TItem extends object> {
|
|
4
|
+
hasFilters: boolean;
|
|
5
|
+
filtersOpen: boolean;
|
|
6
|
+
filteredCount: number;
|
|
7
|
+
viewMode: ViewMode;
|
|
8
|
+
zoomLevel: number;
|
|
9
|
+
activeDimensionKey: string;
|
|
10
|
+
dimensions: PivotDimension<TItem>[];
|
|
11
|
+
activeFilterCount: number;
|
|
12
|
+
onFiltersToggle: () => void;
|
|
13
|
+
onViewModeChange: (mode: ViewMode) => void;
|
|
14
|
+
onZoomIn: () => void;
|
|
15
|
+
onZoomOut: () => void;
|
|
16
|
+
onZoomSlider: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
17
|
+
onDimensionChange: (key: string) => void;
|
|
18
|
+
filterButtonRef: React.RefObject<HTMLButtonElement | null>;
|
|
19
|
+
}
|
|
20
|
+
export declare function Toolbar<TItem extends object>({ hasFilters, filtersOpen, filteredCount, viewMode, zoomLevel, activeDimensionKey, dimensions, activeFilterCount, onFiltersToggle, onViewModeChange, onZoomIn, onZoomOut, onZoomSlider, onDimensionChange, filterButtonRef, }: ToolbarProps<TItem>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=Toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/components/Toolbar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC;AAEhD,MAAM,WAAW,YAAY,CAAC,KAAK,SAAS,MAAM;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,wBAAgB,OAAO,CAAC,KAAK,SAAS,MAAM,EAAE,EAC5C,UAAU,EACV,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,EAAE,YAAY,CAAC,KAAK,CAAC,2CAuFrB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { ZOOM_MIN, ZOOM_STEP, ZOOM_MAX } from '../utils/utils.js';
|
|
3
|
+
|
|
4
|
+
function Toolbar({ hasFilters, filtersOpen, filteredCount, viewMode, zoomLevel, activeDimensionKey, dimensions, activeFilterCount, onFiltersToggle, onViewModeChange, onZoomIn, onZoomOut, onZoomSlider, onDimensionChange, filterButtonRef, }) {
|
|
5
|
+
const labelText = 'Sort by';
|
|
6
|
+
return (jsxs("header", { className: "pv-toolbar", children: [jsxs("div", { className: "pv-toolbar-left", children: [hasFilters && (jsxs("button", { ref: filterButtonRef, type: "button", className: `pv-filter-icon-button ${filtersOpen ? 'active' : ''}`, onClick: onFiltersToggle, title: "Filters", children: [jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: jsx("polygon", { points: "22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3" }) }), activeFilterCount > 0 && (jsx("span", { className: "pv-filter-badge", children: activeFilterCount }))] })), jsx("h1", { children: "Pivot Viewer" }), jsxs("span", { className: "pv-count", children: [filteredCount, " events"] })] }), jsxs("div", { className: "pv-toolbar-right", children: [jsxs("div", { className: "pv-zoom-controls", children: [jsx("button", { type: "button", onClick: onZoomOut, disabled: zoomLevel <= ZOOM_MIN, title: "Zoom out", children: "\u2212" }), jsx("input", { type: "range", className: "pv-zoom-slider", min: ZOOM_MIN, max: ZOOM_MAX, step: ZOOM_STEP, value: zoomLevel, onChange: onZoomSlider, title: `Zoom: ${Math.round(zoomLevel * 100)}%` }), jsxs("span", { className: "pv-zoom-level", children: [Math.round(zoomLevel * 100), "%"] }), jsx("button", { type: "button", onClick: onZoomIn, disabled: zoomLevel >= ZOOM_MAX, title: "Zoom in", children: "+" })] }), jsxs("div", { className: "pv-view-toggle", children: [jsx("button", { type: "button", className: viewMode === 'collection' ? 'active' : '', onClick: () => onViewModeChange('collection'), children: "Collection" }), jsx("button", { type: "button", className: viewMode === 'grouped' ? 'active' : '', onClick: () => onViewModeChange('grouped'), children: "Buckets" })] }), jsxs("label", { className: "pv-dimension-select", children: [jsx("span", { children: labelText }), jsx("select", { value: activeDimensionKey, onChange: (event) => onDimensionChange(event.target.value), children: dimensions.map((dimension) => (jsx("option", { value: dimension.key, children: dimension.label }, dimension.key))) })] })] })] }));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { Toolbar };
|
|
10
|
+
//# sourceMappingURL=Toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbar.js","sources":["../../../../PivotViewer/components/Toolbar.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 { PivotDimension } from '../types';\nimport { ZOOM_MIN, ZOOM_MAX, ZOOM_STEP } from '../utils/utils';\n\nexport type ViewMode = 'collection' | 'grouped';\n\nexport interface ToolbarProps<TItem extends object> {\n hasFilters: boolean;\n filtersOpen: boolean;\n filteredCount: number;\n viewMode: ViewMode;\n zoomLevel: number;\n activeDimensionKey: string;\n dimensions: PivotDimension<TItem>[];\n activeFilterCount: number;\n onFiltersToggle: () => void;\n onViewModeChange: (mode: ViewMode) => void;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onZoomSlider: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onDimensionChange: (key: string) => void;\n filterButtonRef: React.RefObject<HTMLButtonElement | null>;\n}\n\nexport function Toolbar<TItem extends object>({\n hasFilters,\n filtersOpen,\n filteredCount,\n viewMode,\n zoomLevel,\n activeDimensionKey,\n dimensions,\n activeFilterCount,\n onFiltersToggle,\n onViewModeChange,\n onZoomIn,\n onZoomOut,\n onZoomSlider,\n onDimensionChange,\n filterButtonRef,\n}: ToolbarProps<TItem>) {\n const labelText = 'Sort by';\n\n return (\n <header className=\"pv-toolbar\">\n <div className=\"pv-toolbar-left\">\n {hasFilters && (\n <button\n ref={filterButtonRef}\n type=\"button\"\n className={`pv-filter-icon-button ${filtersOpen ? 'active' : ''}`}\n onClick={onFiltersToggle}\n title=\"Filters\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\" />\n </svg>\n {activeFilterCount > 0 && (\n <span className=\"pv-filter-badge\">{activeFilterCount}</span>\n )}\n </button>\n )}\n <h1>Pivot Viewer</h1>\n <span className=\"pv-count\">{filteredCount} events</span>\n </div>\n <div className=\"pv-toolbar-right\">\n <div className=\"pv-zoom-controls\">\n <button\n type=\"button\"\n onClick={onZoomOut}\n disabled={zoomLevel <= ZOOM_MIN}\n title=\"Zoom out\"\n >\n −\n </button>\n <input\n type=\"range\"\n className=\"pv-zoom-slider\"\n min={ZOOM_MIN}\n max={ZOOM_MAX}\n step={ZOOM_STEP}\n value={zoomLevel}\n onChange={onZoomSlider}\n title={`Zoom: ${Math.round(zoomLevel * 100)}%`}\n />\n <span className=\"pv-zoom-level\">{Math.round(zoomLevel * 100)}%</span>\n <button\n type=\"button\"\n onClick={onZoomIn}\n disabled={zoomLevel >= ZOOM_MAX}\n title=\"Zoom in\"\n >\n +\n </button>\n </div>\n <div className=\"pv-view-toggle\">\n <button\n type=\"button\"\n className={viewMode === 'collection' ? 'active' : ''}\n onClick={() => onViewModeChange('collection')}\n >\n Collection\n </button>\n <button\n type=\"button\"\n className={viewMode === 'grouped' ? 'active' : ''}\n onClick={() => onViewModeChange('grouped')}\n >\n Buckets\n </button>\n </div>\n <label className=\"pv-dimension-select\">\n <span>{labelText}</span>\n <select\n value={activeDimensionKey}\n onChange={(event) => onDimensionChange(event.target.value)}\n >\n {dimensions.map((dimension) => (\n <option key={dimension.key} value={dimension.key}>\n {dimension.label}\n </option>\n ))}\n </select>\n </label>\n </div>\n </header>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ToolbarProps } from './Toolbar';
|
|
2
|
+
export type ToolbarContainerProps<TItem extends object> = ToolbarProps<TItem>;
|
|
3
|
+
export declare function ToolbarContainer<TItem extends object>(props: ToolbarContainerProps<TItem>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=ToolbarContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolbarContainer.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/components/ToolbarContainer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,MAAM,qBAAqB,CAAC,KAAK,SAAS,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AAE9E,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,2CAEzF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolbarContainer.js","sources":["../../../../PivotViewer/components/ToolbarContainer.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 { Toolbar, type ToolbarProps } from './Toolbar';\n\nexport type ToolbarContainerProps<TItem extends object> = ToolbarProps<TItem>;\n\nexport function ToolbarContainer<TItem extends object>(props: ToolbarContainerProps<TItem>) {\n return <Toolbar {...props} />;\n}\n"],"names":["_jsx"],"mappings":";;;AAOM,SAAU,gBAAgB,CAAuB,KAAmC,EAAA;AACxF,IAAA,OAAOA,GAAA,CAAC,OAAO,EAAA,EAAA,GAAK,KAAK,GAAI;AAC/B;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { PivotCanvas } from './PivotCanvas';
|
|
2
|
+
export { FilterPanel } from './FilterPanel';
|
|
3
|
+
export { Toolbar } from './Toolbar';
|
|
4
|
+
export { DetailPanel } from './DetailPanel';
|
|
5
|
+
export { AxisLabels } from './AxisLabels';
|
|
6
|
+
export { Spinner } from './Spinner';
|
|
7
|
+
export { RangeHistogramFilter } from './RangeHistogramFilter';
|
|
8
|
+
export type { ViewMode } from './Toolbar';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/components/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { PivotCanvas } from './PivotCanvas';
|
|
2
|
+
export { FilterPanel } from './FilterPanel';
|
|
3
|
+
export { Toolbar } from './Toolbar';
|
|
4
|
+
export { DetailPanel } from './DetailPanel';
|
|
5
|
+
export { AxisLabels } from './AxisLabels';
|
|
6
|
+
export { Spinner } from './Spinner';
|
|
7
|
+
export { RangeHistogramFilter } from './RangeHistogramFilter';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../PivotViewer/components/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CardSprite } from './constants';
|
|
2
|
+
import type * as PIXI from 'pixi.js';
|
|
3
|
+
export declare function updatePositions(sprites: Map<unknown, CardSprite>, isViewTransitionRef: {
|
|
4
|
+
current: boolean;
|
|
5
|
+
}, animationSpeed?: number): boolean;
|
|
6
|
+
export declare function startAnimationLoop(refs: {
|
|
7
|
+
mountedRef: {
|
|
8
|
+
current: boolean;
|
|
9
|
+
};
|
|
10
|
+
appRef: {
|
|
11
|
+
current: PIXI.Application | null;
|
|
12
|
+
};
|
|
13
|
+
animationFrameRef: {
|
|
14
|
+
current: number;
|
|
15
|
+
};
|
|
16
|
+
isAnimatingRef: {
|
|
17
|
+
current: boolean;
|
|
18
|
+
};
|
|
19
|
+
needsRenderRef: {
|
|
20
|
+
current: boolean;
|
|
21
|
+
};
|
|
22
|
+
spritesRef: {
|
|
23
|
+
current: Map<unknown, CardSprite>;
|
|
24
|
+
};
|
|
25
|
+
isViewTransitionRef: {
|
|
26
|
+
current: boolean;
|
|
27
|
+
};
|
|
28
|
+
}, animationSpeed?: number): void;
|
|
29
|
+
//# sourceMappingURL=animation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../../../../../PivotViewer/components/pivot/animation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,KAAK,IAAI,MAAM,SAAS,CAAC;AAErC,wBAAgB,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,cAAc,SAAO,WAgElI;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IACJ,UAAU,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACjC,MAAM,EAAE;QAAE,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7C,iBAAiB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,cAAc,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACrC,cAAc,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACrC,UAAU,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;KAAE,CAAC;IAClD,mBAAmB,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3C,EACD,cAAc,SAAO,QAyBtB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
function updatePositions(sprites, isViewTransitionRef, animationSpeed = 0.15) {
|
|
2
|
+
let isAnimating = false;
|
|
3
|
+
const threshold = 0.5;
|
|
4
|
+
const shouldAnimate = isViewTransitionRef.current;
|
|
5
|
+
const now = Date.now();
|
|
6
|
+
const DURATION = 600;
|
|
7
|
+
for (const sprite of sprites.values()) {
|
|
8
|
+
if (sprite.animationStartTime !== undefined) {
|
|
9
|
+
const elapsed = now - sprite.animationStartTime;
|
|
10
|
+
const delay = sprite.animationDelay || 0;
|
|
11
|
+
if (elapsed < delay) {
|
|
12
|
+
isAnimating = true;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const progress = Math.min(1, (elapsed - delay) / DURATION);
|
|
16
|
+
const t = 1 - Math.pow(1 - progress, 3);
|
|
17
|
+
if (sprite.startX !== undefined && sprite.startY !== undefined) {
|
|
18
|
+
sprite.currentX = sprite.startX + (sprite.targetX - sprite.startX) * t;
|
|
19
|
+
sprite.currentY = sprite.startY + (sprite.targetY - sprite.startY) * t;
|
|
20
|
+
}
|
|
21
|
+
sprite.container.position.set(sprite.currentX, sprite.currentY);
|
|
22
|
+
if (progress < 1) {
|
|
23
|
+
isAnimating = true;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
sprite.currentX = sprite.targetX;
|
|
27
|
+
sprite.currentY = sprite.targetY;
|
|
28
|
+
delete sprite.animationStartTime;
|
|
29
|
+
delete sprite.animationDelay;
|
|
30
|
+
delete sprite.startX;
|
|
31
|
+
delete sprite.startY;
|
|
32
|
+
}
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const dx = sprite.targetX - sprite.currentX;
|
|
36
|
+
const dy = sprite.targetY - sprite.currentY;
|
|
37
|
+
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
38
|
+
if (shouldAnimate && distance > threshold) {
|
|
39
|
+
sprite.currentX += dx * animationSpeed;
|
|
40
|
+
sprite.currentY += dy * animationSpeed;
|
|
41
|
+
sprite.container.position.set(sprite.currentX, sprite.currentY);
|
|
42
|
+
isAnimating = true;
|
|
43
|
+
}
|
|
44
|
+
else if (distance > 0) {
|
|
45
|
+
sprite.currentX = sprite.targetX;
|
|
46
|
+
sprite.currentY = sprite.targetY;
|
|
47
|
+
sprite.container.position.set(sprite.currentX, sprite.currentY);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!isAnimating && isViewTransitionRef.current) {
|
|
51
|
+
isViewTransitionRef.current = false;
|
|
52
|
+
}
|
|
53
|
+
return isAnimating;
|
|
54
|
+
}
|
|
55
|
+
function startAnimationLoop(refs, animationSpeed = 0.15) {
|
|
56
|
+
const { mountedRef, appRef, animationFrameRef, isAnimatingRef, needsRenderRef, spritesRef, isViewTransitionRef } = refs;
|
|
57
|
+
const animate = () => {
|
|
58
|
+
if (!mountedRef.current)
|
|
59
|
+
return;
|
|
60
|
+
const stillAnimating = updatePositions(spritesRef.current, isViewTransitionRef, animationSpeed);
|
|
61
|
+
if (stillAnimating || needsRenderRef.current) {
|
|
62
|
+
appRef.current?.renderer.render(appRef.current.stage);
|
|
63
|
+
needsRenderRef.current = false;
|
|
64
|
+
}
|
|
65
|
+
if (stillAnimating) {
|
|
66
|
+
animationFrameRef.current = requestAnimationFrame(animate);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
isAnimatingRef.current = false;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
if (!isAnimatingRef.current) {
|
|
73
|
+
isAnimatingRef.current = true;
|
|
74
|
+
animate();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { startAnimationLoop, updatePositions };
|
|
79
|
+
//# sourceMappingURL=animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","sources":["../../../../../PivotViewer/components/pivot/animation.ts"],"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 { CardSprite } from './constants';\nimport type * as PIXI from 'pixi.js';\n\nexport function updatePositions(sprites: Map<unknown, CardSprite>, isViewTransitionRef: { current: boolean }, animationSpeed = 0.15) {\n let isAnimating = false;\n const threshold = 0.5;\n const shouldAnimate = isViewTransitionRef.current;\n const now = Date.now();\n const DURATION = 600; // ms\n\n for (const sprite of sprites.values()) {\n // Handle explicit time-based animation (view transitions)\n if (sprite.animationStartTime !== undefined) {\n const elapsed = now - sprite.animationStartTime;\n const delay = sprite.animationDelay || 0;\n\n if (elapsed < delay) {\n isAnimating = true;\n continue;\n }\n\n const progress = Math.min(1, (elapsed - delay) / DURATION);\n // Ease out cubic: 1 - (1-t)^3\n const t = 1 - Math.pow(1 - progress, 3);\n\n if (sprite.startX !== undefined && sprite.startY !== undefined) {\n sprite.currentX = sprite.startX + (sprite.targetX - sprite.startX) * t;\n sprite.currentY = sprite.startY + (sprite.targetY - sprite.startY) * t;\n }\n\n sprite.container.position.set(sprite.currentX, sprite.currentY);\n\n if (progress < 1) {\n isAnimating = true;\n } else {\n // Animation finished, clean up\n sprite.currentX = sprite.targetX;\n sprite.currentY = sprite.targetY;\n delete sprite.animationStartTime;\n delete sprite.animationDelay;\n delete sprite.startX;\n delete sprite.startY;\n }\n continue;\n }\n\n const dx = sprite.targetX - sprite.currentX;\n const dy = sprite.targetY - sprite.currentY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (shouldAnimate && distance > threshold) {\n sprite.currentX += dx * animationSpeed;\n sprite.currentY += dy * animationSpeed;\n sprite.container.position.set(sprite.currentX, sprite.currentY);\n isAnimating = true;\n } else if (distance > 0) {\n sprite.currentX = sprite.targetX;\n sprite.currentY = sprite.targetY;\n sprite.container.position.set(sprite.currentX, sprite.currentY);\n }\n }\n\n if (!isAnimating && isViewTransitionRef.current) {\n isViewTransitionRef.current = false;\n }\n\n return isAnimating;\n}\n\nexport function startAnimationLoop(\n refs: {\n mountedRef: { current: boolean };\n appRef: { current: PIXI.Application | null };\n animationFrameRef: { current: number };\n isAnimatingRef: { current: boolean };\n needsRenderRef: { current: boolean };\n spritesRef: { current: Map<unknown, CardSprite> };\n isViewTransitionRef: { current: boolean };\n },\n animationSpeed = 0.15,\n) {\n const { mountedRef, appRef, animationFrameRef, isAnimatingRef, needsRenderRef, spritesRef, isViewTransitionRef } = refs;\n\n const animate = () => {\n if (!mountedRef.current) return;\n\n const stillAnimating = updatePositions(spritesRef.current, isViewTransitionRef, animationSpeed);\n\n if (stillAnimating || needsRenderRef.current) {\n appRef.current?.renderer.render(appRef.current.stage);\n needsRenderRef.current = false;\n }\n\n if (stillAnimating) {\n animationFrameRef.current = requestAnimationFrame(animate);\n } else {\n isAnimatingRef.current = false;\n }\n };\n\n if (!isAnimatingRef.current) {\n isAnimatingRef.current = true;\n animate();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as PIXI from 'pixi.js';
|
|
2
|
+
import type { CardColors } from './constants';
|
|
3
|
+
import type { GroupingResult, LayoutResult } from '../../engine/types';
|
|
4
|
+
export declare function updateBucketBackgrounds(bucketsContainer: PIXI.Container | null, container: HTMLDivElement | null, grouping: GroupingResult, layout: LayoutResult, zoomLevel: number, cardColors: CardColors, viewMode: string): void;
|
|
5
|
+
export declare function updateHighlight(bucketsContainer: PIXI.Container | null, container: HTMLDivElement | null, grouping: GroupingResult, layout: LayoutResult, hoveredGroupIndex: number | null, cardWidth: number, zoomLevel: number): void;
|
|
6
|
+
//# sourceMappingURL=buckets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../../../PivotViewer/components/pivot/buckets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvE,wBAAgB,uBAAuB,CACrC,gBAAgB,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,EACvC,SAAS,EAAE,cAAc,GAAG,IAAI,EAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,QA6EjB;AAED,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,EACvC,SAAS,EAAE,cAAc,GAAG,IAAI,EAChC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,QAmDlB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as PIXI from 'pixi.js';
|
|
2
|
+
|
|
3
|
+
function updateBucketBackgrounds(bucketsContainer, container, grouping, layout, zoomLevel, cardColors, viewMode) {
|
|
4
|
+
if (!bucketsContainer)
|
|
5
|
+
return;
|
|
6
|
+
if (!container || grouping.groups.length === 0 || viewMode === 'collection') {
|
|
7
|
+
for (const child of bucketsContainer.children) {
|
|
8
|
+
if (child.name !== 'highlight') {
|
|
9
|
+
child.visible = false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const worldHeight = layout.totalHeight || container.clientHeight;
|
|
15
|
+
const backgroundGraphics = bucketsContainer.children.filter(c => c.name !== 'highlight');
|
|
16
|
+
let bgIndex = 0;
|
|
17
|
+
for (let index = 0; index < grouping.groups.length; index++) {
|
|
18
|
+
const group = grouping.groups[index];
|
|
19
|
+
let minX = Infinity;
|
|
20
|
+
let maxX = -Infinity;
|
|
21
|
+
for (let j = 0; j < group.ids.length; j++) {
|
|
22
|
+
const id = group.ids[j];
|
|
23
|
+
const pos = layout.positions.get(id);
|
|
24
|
+
if (pos) {
|
|
25
|
+
minX = Math.min(minX, pos.x);
|
|
26
|
+
maxX = Math.max(maxX, pos.x);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (minX === Infinity)
|
|
30
|
+
continue;
|
|
31
|
+
const bucketWidths = layout.bucketWidths || [];
|
|
32
|
+
const widthFromLayout = bucketWidths[index];
|
|
33
|
+
const width = widthFromLayout && widthFromLayout > 0 ? widthFromLayout : (maxX - minX) || 0;
|
|
34
|
+
if (index % 2 === 0 && width > 0) {
|
|
35
|
+
let bg;
|
|
36
|
+
if (bgIndex < backgroundGraphics.length) {
|
|
37
|
+
bg = backgroundGraphics[bgIndex];
|
|
38
|
+
bg.clear();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
bg = new PIXI.Graphics();
|
|
42
|
+
const highlightIndex = bucketsContainer.children.findIndex(c => c.name === 'highlight');
|
|
43
|
+
if (highlightIndex >= 0) {
|
|
44
|
+
bucketsContainer.addChildAt(bg, highlightIndex);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
bucketsContainer.addChild(bg);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
bg.rect(minX, 0, width, worldHeight);
|
|
51
|
+
bg.fill(cardColors.base);
|
|
52
|
+
bg.alpha = 0.15;
|
|
53
|
+
bg.visible = true;
|
|
54
|
+
bgIndex++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
for (let i = bgIndex; i < backgroundGraphics.length; i++) {
|
|
58
|
+
backgroundGraphics[i].visible = false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function updateHighlight(bucketsContainer, container, grouping, layout, hoveredGroupIndex, cardWidth, zoomLevel) {
|
|
62
|
+
if (!bucketsContainer || !container || grouping.groups.length === 0)
|
|
63
|
+
return;
|
|
64
|
+
let highlight = bucketsContainer.children.find(child => child.name === 'highlight');
|
|
65
|
+
if (!highlight) {
|
|
66
|
+
highlight = new PIXI.Graphics();
|
|
67
|
+
highlight.name = 'highlight';
|
|
68
|
+
bucketsContainer.addChild(highlight);
|
|
69
|
+
}
|
|
70
|
+
highlight.clear();
|
|
71
|
+
if (hoveredGroupIndex === null || hoveredGroupIndex < 0) {
|
|
72
|
+
highlight.visible = false;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const group = grouping.groups[hoveredGroupIndex];
|
|
76
|
+
if (!group || group.ids.length === 0) {
|
|
77
|
+
highlight.visible = false;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
let minX = Infinity;
|
|
81
|
+
let maxX = -Infinity;
|
|
82
|
+
for (let j = 0; j < group.ids.length; j++) {
|
|
83
|
+
const id = group.ids[j];
|
|
84
|
+
const pos = layout.positions.get(id);
|
|
85
|
+
if (pos) {
|
|
86
|
+
minX = Math.min(minX, pos.x);
|
|
87
|
+
maxX = Math.max(maxX, pos.x + cardWidth);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (minX === Infinity) {
|
|
91
|
+
highlight.visible = false;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const worldHeight = layout.totalHeight || container.clientHeight;
|
|
95
|
+
highlight.rect(minX, 0, maxX - minX, worldHeight);
|
|
96
|
+
highlight.fill(0xffffff);
|
|
97
|
+
highlight.alpha = 0.05;
|
|
98
|
+
highlight.visible = true;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { updateBucketBackgrounds, updateHighlight };
|
|
102
|
+
//# sourceMappingURL=buckets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buckets.js","sources":["../../../../../PivotViewer/components/pivot/buckets.ts"],"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 * as PIXI from 'pixi.js';\nimport type { CardColors } from './constants';\nimport type { GroupingResult, LayoutResult } from '../../engine/types';\n\nexport function updateBucketBackgrounds(\n bucketsContainer: PIXI.Container | null,\n container: HTMLDivElement | null,\n grouping: GroupingResult,\n layout: LayoutResult,\n zoomLevel: number,\n cardColors: CardColors,\n viewMode: string,\n) {\n if (!bucketsContainer) return;\n\n // keep parameter referenced to avoid unused param lint when callers pass zoomLevel\n void zoomLevel;\n\n if (!container || grouping.groups.length === 0 || viewMode === 'collection') {\n // If we shouldn't show anything, hide all existing backgrounds\n // We keep the highlight if it exists\n for (const child of bucketsContainer.children) {\n if ((child as any).name !== 'highlight') {\n child.visible = false;\n }\n }\n return;\n }\n\n // Use layout's total height if available so backgrounds match sprite positions\n const worldHeight = layout.totalHeight || container.clientHeight;\n\n // Get existing background graphics (excluding highlight)\n const backgroundGraphics = bucketsContainer.children.filter(c => (c as any).name !== 'highlight') as PIXI.Graphics[];\n let bgIndex = 0;\n\n // Instead of re-deriving bucket geometry from constants, compute bucket bounds\n // directly from the positions stored in the layout so backgrounds align exactly.\n for (let index = 0; index < grouping.groups.length; index++) {\n const group = grouping.groups[index];\n let minX = Infinity;\n let maxX = -Infinity;\n\n for (let j = 0; j < group.ids.length; j++) {\n const id = group.ids[j];\n const pos = layout.positions.get(id);\n if (pos) {\n minX = Math.min(minX, pos.x);\n maxX = Math.max(maxX, pos.x);\n }\n }\n\n if (minX === Infinity) continue;\n\n // Prefer explicit bucket width from layout when available\n const bucketWidths = layout.bucketWidths || [];\n const widthFromLayout = bucketWidths[index];\n const width = widthFromLayout && widthFromLayout > 0 ? widthFromLayout : (maxX - minX) || 0;\n\n if (index % 2 === 0 && width > 0) {\n let bg: PIXI.Graphics;\n\n if (bgIndex < backgroundGraphics.length) {\n bg = backgroundGraphics[bgIndex];\n bg.clear();\n } else {\n bg = new PIXI.Graphics();\n // Insert before highlight if it exists, otherwise at end\n const highlightIndex = bucketsContainer.children.findIndex(c => (c as any).name === 'highlight');\n if (highlightIndex >= 0) {\n bucketsContainer.addChildAt(bg, highlightIndex);\n } else {\n bucketsContainer.addChild(bg);\n }\n }\n\n bg.rect(minX, 0, width, worldHeight);\n bg.fill(cardColors.base);\n bg.alpha = 0.15;\n bg.visible = true;\n bgIndex++;\n }\n }\n\n // Hide unused background graphics\n for (let i = bgIndex; i < backgroundGraphics.length; i++) {\n backgroundGraphics[i].visible = false;\n }\n}\n\nexport function updateHighlight(\n bucketsContainer: PIXI.Container | null,\n container: HTMLDivElement | null,\n grouping: GroupingResult,\n layout: LayoutResult,\n hoveredGroupIndex: number | null,\n cardWidth: number,\n zoomLevel: number,\n) {\n if (!bucketsContainer || !container || grouping.groups.length === 0) return;\n\n // `zoomLevel` is part of the signature for future use; reference it\n // to avoid unused-parameter lint errors when callers pass it.\n void zoomLevel;\n\n let highlight = bucketsContainer.children.find(child => (child as any).name === 'highlight') as PIXI.Graphics;\n\n if (!highlight) {\n highlight = new PIXI.Graphics();\n (highlight as any).name = 'highlight';\n bucketsContainer.addChild(highlight);\n }\n\n highlight.clear();\n\n if (hoveredGroupIndex === null || hoveredGroupIndex < 0) {\n highlight.visible = false;\n return;\n }\n\n const group = grouping.groups[hoveredGroupIndex];\n if (!group || group.ids.length === 0) {\n highlight.visible = false;\n return;\n }\n\n let minX = Infinity;\n let maxX = -Infinity;\n\n for (let j = 0; j < group.ids.length; j++) {\n const id = group.ids[j];\n const pos = layout.positions.get(id);\n if (pos) {\n minX = Math.min(minX, pos.x);\n maxX = Math.max(maxX, pos.x + cardWidth);\n }\n }\n\n if (minX === Infinity) {\n highlight.visible = false;\n return;\n }\n\n const worldHeight = layout.totalHeight || container.clientHeight;\n highlight.rect(minX, 0, maxX - minX, worldHeight);\n highlight.fill(0xffffff);\n highlight.alpha = 0.05;\n highlight.visible = true;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type CardColors } from './constants';
|
|
2
|
+
export declare function createCssColorResolver(): (cssValue: string, fallback: number) => number;
|
|
3
|
+
export declare function resolveCardColors(cssColorResolver: (s: string, f: number) => number): CardColors;
|
|
4
|
+
//# sourceMappingURL=colorResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorResolver.d.ts","sourceRoot":"","sources":["../../../../../PivotViewer/components/pivot/colorResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D,wBAAgB,sBAAsB,KAmB5B,UAAU,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,CA0BpD;AAED,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,UAAU,CAchG"}
|