@cratis/components 1.5.0 → 1.6.6
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/dist/cjs/CommandDialog/CommandDialog.js +11 -4
- package/dist/cjs/CommandDialog/CommandDialog.js.map +1 -1
- package/dist/cjs/CommandDialog/StepperCommandDialog.js +23 -4
- package/dist/cjs/CommandDialog/StepperCommandDialog.js.map +1 -1
- package/dist/cjs/CommandDialog/index.js +2 -1
- package/dist/cjs/CommandDialog/index.js.map +1 -1
- package/dist/cjs/CommandForm/fields/CalendarField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/CheckboxField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/ChipsField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/ColorPickerField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/DropdownField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/InputTextField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/MultiSelectField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/NumberField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/SliderField.js.map +1 -1
- package/dist/cjs/CommandForm/fields/TextAreaField.js.map +1 -1
- package/dist/cjs/CommandForm/index.js +2 -34
- package/dist/cjs/CommandForm/index.js.map +1 -1
- package/dist/cjs/Common/ErrorBoundary.js.map +1 -1
- package/dist/cjs/Common/FormElement.js.map +1 -1
- package/dist/cjs/Common/Page.js.map +1 -1
- package/dist/cjs/Common/Tooltip.js +4 -0
- package/dist/cjs/Common/Tooltip.js.map +1 -1
- package/dist/cjs/Common/index.js +2 -1
- package/dist/cjs/Common/index.js.map +1 -1
- package/dist/cjs/DataPage/DataPage.js +6 -0
- package/dist/cjs/DataPage/DataPage.js.map +1 -1
- package/dist/cjs/DataPage/index.js +2 -1
- package/dist/cjs/DataPage/index.js.map +1 -1
- package/dist/cjs/DataTables/DataTableForObservableQuery.js +5 -0
- package/dist/cjs/DataTables/DataTableForObservableQuery.js.map +1 -1
- package/dist/cjs/DataTables/DataTableForQuery.js +5 -0
- package/dist/cjs/DataTables/DataTableForQuery.js.map +1 -1
- package/dist/cjs/DataTables/index.js +2 -1
- package/dist/cjs/DataTables/index.js.map +1 -1
- package/dist/cjs/Dialogs/BusyIndicatorDialog.js.map +1 -1
- package/dist/cjs/Dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/cjs/Dialogs/Dialog.js +8 -2
- package/dist/cjs/Dialogs/Dialog.js.map +1 -1
- package/dist/cjs/Dialogs/index.js +2 -1
- package/dist/cjs/Dialogs/index.js.map +1 -1
- package/dist/cjs/Dropdown/Dropdown.js +1 -0
- package/dist/cjs/Dropdown/Dropdown.js.map +1 -1
- package/dist/cjs/Dropdown/index.js +2 -1
- package/dist/cjs/Dropdown/index.js.map +1 -1
- package/dist/cjs/ObjectContentEditor/ObjectContentEditor.js.map +1 -1
- package/dist/cjs/ObjectContentEditor/index.js +2 -1
- package/dist/cjs/ObjectContentEditor/index.js.map +1 -1
- package/dist/cjs/ObjectContentEditor/objectHelpers.js +6 -0
- package/dist/cjs/ObjectContentEditor/objectHelpers.js.map +1 -1
- package/dist/cjs/ObjectNavigationalBar/ObjectNavigationalBar.js.map +1 -1
- package/dist/cjs/ObjectNavigationalBar/breadcrumbHelpers.js +6 -0
- package/dist/cjs/ObjectNavigationalBar/breadcrumbHelpers.js.map +1 -1
- package/dist/cjs/ObjectNavigationalBar/index.js +2 -1
- package/dist/cjs/ObjectNavigationalBar/index.js.map +1 -1
- package/dist/cjs/PivotViewer/PivotViewer.js +28 -0
- package/dist/cjs/PivotViewer/PivotViewer.js.map +1 -1
- package/dist/cjs/PivotViewer/components/AxisLabels.js +4 -0
- package/dist/cjs/PivotViewer/components/AxisLabels.js.map +1 -1
- package/dist/cjs/PivotViewer/components/DetailPanel.js.map +1 -1
- package/dist/cjs/PivotViewer/components/FilterPanel.js +4 -0
- package/dist/cjs/PivotViewer/components/FilterPanel.js.map +1 -1
- package/dist/cjs/PivotViewer/components/FilterPanelContainer.js.map +1 -1
- package/dist/cjs/PivotViewer/components/PivotCanvas.js +138 -2
- package/dist/cjs/PivotViewer/components/PivotCanvas.js.map +1 -1
- package/dist/cjs/PivotViewer/components/PivotViewerMain.js +4 -0
- package/dist/cjs/PivotViewer/components/PivotViewerMain.js.map +1 -1
- package/dist/cjs/PivotViewer/components/RangeHistogramFilter.js.map +1 -1
- package/dist/cjs/PivotViewer/components/Spinner.js.map +1 -1
- package/dist/cjs/PivotViewer/components/Toolbar.js.map +1 -1
- package/dist/cjs/PivotViewer/components/ToolbarContainer.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/animation.js +8 -1
- package/dist/cjs/PivotViewer/components/pivot/animation.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/colorResolver.js +3 -1
- package/dist/cjs/PivotViewer/components/pivot/colorResolver.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/constants.js +8 -5
- package/dist/cjs/PivotViewer/components/pivot/constants.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/groups.js +15 -0
- package/dist/cjs/PivotViewer/components/pivot/groups.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/sprites.js +32 -13
- package/dist/cjs/PivotViewer/components/pivot/sprites.js.map +1 -1
- package/dist/cjs/PivotViewer/components/pivot/visibility.js +102 -3
- package/dist/cjs/PivotViewer/components/pivot/visibility.js.map +1 -1
- package/dist/cjs/PivotViewer/constants.js +2 -0
- package/dist/cjs/PivotViewer/constants.js.map +1 -1
- package/dist/cjs/PivotViewer/engine/layout.js +23 -0
- package/dist/cjs/PivotViewer/engine/layout.js.map +1 -1
- package/dist/cjs/PivotViewer/engine/store.js +29 -0
- package/dist/cjs/PivotViewer/engine/store.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useAnimationModeTracking.js +8 -0
- package/dist/cjs/PivotViewer/hooks/useAnimationModeTracking.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useCardSelection.js +10 -1
- package/dist/cjs/PivotViewer/hooks/useCardSelection.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useContainerDimensions.js +11 -0
- package/dist/cjs/PivotViewer/hooks/useContainerDimensions.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useCurrentFilters.js +6 -0
- package/dist/cjs/PivotViewer/hooks/useCurrentFilters.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useDetailPanelClose.js +11 -1
- package/dist/cjs/PivotViewer/hooks/useDetailPanelClose.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useDimensionState.js +2 -0
- package/dist/cjs/PivotViewer/hooks/useDimensionState.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useFieldExtractors.js +2 -0
- package/dist/cjs/PivotViewer/hooks/useFieldExtractors.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useFilterOptions.js +2 -0
- package/dist/cjs/PivotViewer/hooks/useFilterOptions.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useFilterState.js +5 -0
- package/dist/cjs/PivotViewer/hooks/useFilterState.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/usePanning.js +14 -0
- package/dist/cjs/PivotViewer/hooks/usePanning.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/usePivotEngine.js +7 -0
- package/dist/cjs/PivotViewer/hooks/usePivotEngine.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useScrollSync.js +6 -0
- package/dist/cjs/PivotViewer/hooks/useScrollSync.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useViewModeScrollHandling.js +9 -0
- package/dist/cjs/PivotViewer/hooks/useViewModeScrollHandling.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useWheelZoom.js +8 -2
- package/dist/cjs/PivotViewer/hooks/useWheelZoom.js.map +1 -1
- package/dist/cjs/PivotViewer/hooks/useZoomState.js +2 -0
- package/dist/cjs/PivotViewer/hooks/useZoomState.js.map +1 -1
- package/dist/cjs/PivotViewer/index.js +2 -1
- package/dist/cjs/PivotViewer/index.js.map +1 -1
- package/dist/cjs/PivotViewer/types.js +11 -0
- package/dist/cjs/PivotViewer/types.js.map +1 -1
- package/dist/cjs/PivotViewer/utils/animations.js +35 -2
- package/dist/cjs/PivotViewer/utils/animations.js.map +1 -1
- package/dist/cjs/PivotViewer/utils/cardPosition.js +21 -3
- package/dist/cjs/PivotViewer/utils/cardPosition.js.map +1 -1
- package/dist/cjs/PivotViewer/utils/constants.js +3 -0
- package/dist/cjs/PivotViewer/utils/constants.js.map +1 -1
- package/dist/cjs/PivotViewer/utils/idResolution.js +16 -0
- package/dist/cjs/PivotViewer/utils/idResolution.js.map +1 -1
- package/dist/cjs/PivotViewer/utils/selection.js +25 -0
- package/dist/cjs/PivotViewer/utils/selection.js.map +1 -1
- package/dist/cjs/PivotViewer/utils/utils.js +5 -0
- package/dist/cjs/PivotViewer/utils/utils.js.map +1 -1
- package/dist/cjs/SchemaEditor/NameCell.js.map +1 -1
- package/dist/cjs/SchemaEditor/SchemaEditor.js.map +1 -1
- package/dist/cjs/SchemaEditor/TypeCell.js.map +1 -1
- package/dist/cjs/SchemaEditor/index.js +2 -1
- package/dist/cjs/SchemaEditor/index.js.map +1 -1
- package/dist/cjs/SchemaEditor/schemaHelpers.js +8 -0
- package/dist/cjs/SchemaEditor/schemaHelpers.js.map +1 -1
- package/dist/cjs/TimeMachine/EventsView.js +2 -0
- package/dist/cjs/TimeMachine/EventsView.js.map +1 -1
- package/dist/cjs/TimeMachine/Properties.js.map +1 -1
- package/dist/cjs/TimeMachine/ReadModelView.js +1 -0
- package/dist/cjs/TimeMachine/ReadModelView.js.map +1 -1
- package/dist/cjs/TimeMachine/TimeMachine.js +11 -1
- package/dist/cjs/TimeMachine/TimeMachine.js.map +1 -1
- package/dist/cjs/TimeMachine/index.js +2 -1
- package/dist/cjs/TimeMachine/index.js.map +1 -1
- package/dist/cjs/TimeMachine/propertiesHelpers.js +5 -0
- package/dist/cjs/TimeMachine/propertiesHelpers.js.map +1 -1
- package/dist/cjs/Toolbar/Toolbar.css +8 -0
- package/dist/cjs/Toolbar/Toolbar.js +7 -1
- package/dist/cjs/Toolbar/Toolbar.js.map +1 -1
- package/dist/cjs/Toolbar/ToolbarButton.js +16 -2
- package/dist/cjs/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/cjs/Toolbar/ToolbarContext.js +8 -0
- package/dist/cjs/Toolbar/ToolbarContext.js.map +1 -1
- package/dist/cjs/Toolbar/ToolbarDragContext.js +24 -0
- package/dist/cjs/Toolbar/ToolbarDragContext.js.map +1 -0
- package/dist/cjs/Toolbar/ToolbarFanOutItem.js +11 -0
- package/dist/cjs/Toolbar/ToolbarFanOutItem.js.map +1 -1
- package/dist/cjs/Toolbar/ToolbarSection.js +18 -1
- package/dist/cjs/Toolbar/ToolbarSection.js.map +1 -1
- package/dist/cjs/Toolbar/ToolbarSeparator.js +6 -0
- package/dist/cjs/Toolbar/ToolbarSeparator.js.map +1 -1
- package/dist/cjs/Toolbar/index.js +2 -1
- package/dist/cjs/Toolbar/index.js.map +1 -1
- package/dist/cjs/tailwind-utilities.css +16 -1
- package/dist/cjs/types/TypeFormat.js +2 -0
- package/dist/cjs/types/TypeFormat.js.map +1 -1
- package/dist/cjs/types/index.js +2 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/useOverlayZIndex.js +10 -0
- package/dist/cjs/useOverlayZIndex.js.map +1 -1
- package/dist/esm/CommandDialog/CommandDialog.d.ts +2 -2
- package/dist/esm/CommandDialog/CommandDialog.d.ts.map +1 -1
- package/dist/esm/CommandDialog/CommandDialog.js +11 -4
- package/dist/esm/CommandDialog/CommandDialog.js.map +1 -1
- package/dist/esm/CommandDialog/CommandDialog.stories.d.ts +1 -0
- package/dist/esm/CommandDialog/CommandDialog.stories.d.ts.map +1 -1
- package/dist/esm/CommandDialog/CommandDialog.stories.js +52 -0
- package/dist/esm/CommandDialog/CommandDialog.stories.js.map +1 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.d.ts +5 -4
- package/dist/esm/CommandDialog/StepperCommandDialog.d.ts.map +1 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.js +23 -4
- package/dist/esm/CommandDialog/StepperCommandDialog.js.map +1 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.stories.d.ts +1 -0
- package/dist/esm/CommandDialog/StepperCommandDialog.stories.d.ts.map +1 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.stories.js +54 -0
- package/dist/esm/CommandDialog/StepperCommandDialog.stories.js.map +1 -1
- package/dist/esm/CommandDialog/index.js +3 -0
- package/dist/esm/CommandDialog/index.js.map +1 -1
- package/dist/esm/CommandForm/fields/CalendarField.js.map +1 -1
- package/dist/esm/CommandForm/fields/CheckboxField.js.map +1 -1
- package/dist/esm/CommandForm/fields/ChipsField.js.map +1 -1
- package/dist/esm/CommandForm/fields/ColorPickerField.js.map +1 -1
- package/dist/esm/CommandForm/fields/DropdownField.js.map +1 -1
- package/dist/esm/CommandForm/fields/InputTextField.js.map +1 -1
- package/dist/esm/CommandForm/fields/MultiSelectField.js.map +1 -1
- package/dist/esm/CommandForm/fields/NumberField.js.map +1 -1
- package/dist/esm/CommandForm/fields/SliderField.js.map +1 -1
- package/dist/esm/CommandForm/fields/TextAreaField.js.map +1 -1
- package/dist/esm/CommandForm/index.d.ts +0 -1
- package/dist/esm/CommandForm/index.d.ts.map +1 -1
- package/dist/esm/CommandForm/index.js +3 -1
- package/dist/esm/CommandForm/index.js.map +1 -1
- package/dist/esm/Common/ErrorBoundary.js.map +1 -1
- package/dist/esm/Common/FormElement.js.map +1 -1
- package/dist/esm/Common/Page.js.map +1 -1
- package/dist/esm/Common/Tooltip.js +4 -0
- package/dist/esm/Common/Tooltip.js.map +1 -1
- package/dist/esm/Common/index.js +3 -0
- package/dist/esm/Common/index.js.map +1 -1
- package/dist/esm/DataPage/DataPage.js +6 -0
- package/dist/esm/DataPage/DataPage.js.map +1 -1
- package/dist/esm/DataPage/index.js +3 -0
- package/dist/esm/DataPage/index.js.map +1 -1
- package/dist/esm/DataTables/DataTableForObservableQuery.js +5 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -1
- package/dist/esm/DataTables/DataTableForQuery.js +5 -0
- package/dist/esm/DataTables/DataTableForQuery.js.map +1 -1
- package/dist/esm/DataTables/index.js +3 -0
- package/dist/esm/DataTables/index.js.map +1 -1
- package/dist/esm/Dialogs/BusyIndicatorDialog.js.map +1 -1
- package/dist/esm/Dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/esm/Dialogs/Dialog.d.ts +5 -3
- package/dist/esm/Dialogs/Dialog.d.ts.map +1 -1
- package/dist/esm/Dialogs/Dialog.js +8 -2
- package/dist/esm/Dialogs/Dialog.js.map +1 -1
- package/dist/esm/Dialogs/index.js +3 -0
- package/dist/esm/Dialogs/index.js.map +1 -1
- package/dist/esm/Dropdown/Dropdown.js +1 -0
- package/dist/esm/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/Dropdown/index.js +3 -0
- package/dist/esm/Dropdown/index.js.map +1 -1
- package/dist/esm/ObjectContentEditor/ObjectContentEditor.js.map +1 -1
- package/dist/esm/ObjectContentEditor/index.js +3 -0
- package/dist/esm/ObjectContentEditor/index.js.map +1 -1
- package/dist/esm/ObjectContentEditor/objectHelpers.js +6 -0
- package/dist/esm/ObjectContentEditor/objectHelpers.js.map +1 -1
- package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.js.map +1 -1
- package/dist/esm/ObjectNavigationalBar/breadcrumbHelpers.js +6 -0
- package/dist/esm/ObjectNavigationalBar/breadcrumbHelpers.js.map +1 -1
- package/dist/esm/ObjectNavigationalBar/index.js +3 -0
- package/dist/esm/ObjectNavigationalBar/index.js.map +1 -1
- package/dist/esm/PivotViewer/PivotViewer.js +28 -0
- package/dist/esm/PivotViewer/PivotViewer.js.map +1 -1
- package/dist/esm/PivotViewer/components/AxisLabels.js +4 -0
- package/dist/esm/PivotViewer/components/AxisLabels.js.map +1 -1
- package/dist/esm/PivotViewer/components/DetailPanel.js.map +1 -1
- package/dist/esm/PivotViewer/components/FilterPanel.js +4 -0
- package/dist/esm/PivotViewer/components/FilterPanel.js.map +1 -1
- package/dist/esm/PivotViewer/components/FilterPanelContainer.js.map +1 -1
- package/dist/esm/PivotViewer/components/PivotCanvas.js +138 -2
- package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -1
- package/dist/esm/PivotViewer/components/PivotViewerMain.js +4 -0
- package/dist/esm/PivotViewer/components/PivotViewerMain.js.map +1 -1
- package/dist/esm/PivotViewer/components/RangeHistogramFilter.js.map +1 -1
- package/dist/esm/PivotViewer/components/Spinner.js.map +1 -1
- package/dist/esm/PivotViewer/components/Toolbar.js.map +1 -1
- package/dist/esm/PivotViewer/components/ToolbarContainer.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/animation.js +8 -1
- package/dist/esm/PivotViewer/components/pivot/animation.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/colorResolver.js +3 -1
- package/dist/esm/PivotViewer/components/pivot/colorResolver.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/constants.js +8 -5
- package/dist/esm/PivotViewer/components/pivot/constants.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/groups.js +15 -0
- package/dist/esm/PivotViewer/components/pivot/groups.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/sprites.js +19 -0
- package/dist/esm/PivotViewer/components/pivot/sprites.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/visibility.js +102 -3
- package/dist/esm/PivotViewer/components/pivot/visibility.js.map +1 -1
- package/dist/esm/PivotViewer/constants.js +2 -0
- package/dist/esm/PivotViewer/constants.js.map +1 -1
- package/dist/esm/PivotViewer/engine/layout.js +23 -0
- package/dist/esm/PivotViewer/engine/layout.js.map +1 -1
- package/dist/esm/PivotViewer/engine/store.js +29 -0
- package/dist/esm/PivotViewer/engine/store.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useAnimationModeTracking.js +8 -0
- package/dist/esm/PivotViewer/hooks/useAnimationModeTracking.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useCardSelection.js +10 -1
- package/dist/esm/PivotViewer/hooks/useCardSelection.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.js +11 -0
- package/dist/esm/PivotViewer/hooks/useContainerDimensions.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useCurrentFilters.js +6 -0
- package/dist/esm/PivotViewer/hooks/useCurrentFilters.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useDetailPanelClose.js +11 -1
- package/dist/esm/PivotViewer/hooks/useDetailPanelClose.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useDimensionState.js +2 -0
- package/dist/esm/PivotViewer/hooks/useDimensionState.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useFieldExtractors.js +2 -0
- package/dist/esm/PivotViewer/hooks/useFieldExtractors.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useFilterOptions.js +2 -0
- package/dist/esm/PivotViewer/hooks/useFilterOptions.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useFilterState.js +5 -0
- package/dist/esm/PivotViewer/hooks/useFilterState.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/usePanning.js +14 -0
- package/dist/esm/PivotViewer/hooks/usePanning.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/usePivotEngine.js +7 -0
- package/dist/esm/PivotViewer/hooks/usePivotEngine.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useScrollSync.js +6 -0
- package/dist/esm/PivotViewer/hooks/useScrollSync.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useViewModeScrollHandling.js +9 -0
- package/dist/esm/PivotViewer/hooks/useViewModeScrollHandling.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useWheelZoom.js +8 -2
- package/dist/esm/PivotViewer/hooks/useWheelZoom.js.map +1 -1
- package/dist/esm/PivotViewer/hooks/useZoomState.js +2 -0
- package/dist/esm/PivotViewer/hooks/useZoomState.js.map +1 -1
- package/dist/esm/PivotViewer/index.js +3 -0
- package/dist/esm/PivotViewer/index.js.map +1 -1
- package/dist/esm/PivotViewer/types.js +11 -0
- package/dist/esm/PivotViewer/types.js.map +1 -1
- package/dist/esm/PivotViewer/utils/animations.js +35 -2
- package/dist/esm/PivotViewer/utils/animations.js.map +1 -1
- package/dist/esm/PivotViewer/utils/cardPosition.js +21 -3
- package/dist/esm/PivotViewer/utils/cardPosition.js.map +1 -1
- package/dist/esm/PivotViewer/utils/constants.js +3 -0
- package/dist/esm/PivotViewer/utils/constants.js.map +1 -1
- package/dist/esm/PivotViewer/utils/idResolution.js +16 -0
- package/dist/esm/PivotViewer/utils/idResolution.js.map +1 -1
- package/dist/esm/PivotViewer/utils/selection.js +25 -0
- package/dist/esm/PivotViewer/utils/selection.js.map +1 -1
- package/dist/esm/PivotViewer/utils/utils.js +5 -0
- package/dist/esm/PivotViewer/utils/utils.js.map +1 -1
- package/dist/esm/SchemaEditor/NameCell.js.map +1 -1
- package/dist/esm/SchemaEditor/SchemaEditor.js.map +1 -1
- package/dist/esm/SchemaEditor/TypeCell.js.map +1 -1
- package/dist/esm/SchemaEditor/index.js +3 -0
- package/dist/esm/SchemaEditor/index.js.map +1 -1
- package/dist/esm/SchemaEditor/schemaHelpers.js +8 -0
- package/dist/esm/SchemaEditor/schemaHelpers.js.map +1 -1
- package/dist/esm/TimeMachine/EventsView.js +2 -0
- package/dist/esm/TimeMachine/EventsView.js.map +1 -1
- package/dist/esm/TimeMachine/Properties.js.map +1 -1
- package/dist/esm/TimeMachine/ReadModelView.js +1 -0
- package/dist/esm/TimeMachine/ReadModelView.js.map +1 -1
- package/dist/esm/TimeMachine/TimeMachine.js +11 -1
- package/dist/esm/TimeMachine/TimeMachine.js.map +1 -1
- package/dist/esm/TimeMachine/index.js +3 -0
- package/dist/esm/TimeMachine/index.js.map +1 -1
- package/dist/esm/TimeMachine/propertiesHelpers.js +5 -0
- package/dist/esm/TimeMachine/propertiesHelpers.js.map +1 -1
- package/dist/esm/Toolbar/Toolbar.css +8 -0
- package/dist/esm/Toolbar/Toolbar.d.ts +3 -1
- package/dist/esm/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/esm/Toolbar/Toolbar.js +7 -1
- package/dist/esm/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/Toolbar/Toolbar.stories.d.ts +1 -0
- package/dist/esm/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/esm/Toolbar/Toolbar.stories.js +23 -0
- package/dist/esm/Toolbar/Toolbar.stories.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarButton.d.ts +4 -1
- package/dist/esm/Toolbar/ToolbarButton.d.ts.map +1 -1
- package/dist/esm/Toolbar/ToolbarButton.js +16 -2
- package/dist/esm/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarContext.js +8 -0
- package/dist/esm/Toolbar/ToolbarContext.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarDragContext.d.ts +7 -0
- package/dist/esm/Toolbar/ToolbarDragContext.d.ts.map +1 -0
- package/dist/esm/Toolbar/ToolbarDragContext.js +21 -0
- package/dist/esm/Toolbar/ToolbarDragContext.js.map +1 -0
- package/dist/esm/Toolbar/ToolbarFanOutItem.js +11 -0
- package/dist/esm/Toolbar/ToolbarFanOutItem.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarSection.js +18 -1
- package/dist/esm/Toolbar/ToolbarSection.js.map +1 -1
- package/dist/esm/Toolbar/ToolbarSeparator.js +6 -0
- package/dist/esm/Toolbar/ToolbarSeparator.js.map +1 -1
- package/dist/esm/Toolbar/index.js +3 -0
- package/dist/esm/Toolbar/index.js.map +1 -1
- package/dist/esm/tailwind-utilities.css +16 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/types/TypeFormat.js +2 -0
- package/dist/esm/types/TypeFormat.js.map +1 -1
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/useOverlayZIndex.js +10 -0
- package/dist/esm/useOverlayZIndex.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotViewer.js","sources":["../../../PivotViewer/PivotViewer.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 { PivotViewerProps } from './types';\nimport type { GroupingResult } from './engine/types';\nimport { usePivotEngine } from './hooks/usePivotEngine';\nimport { computeLayout } from './engine/layout';\nimport { useFilterState } from './hooks/useFilterState';\nimport { useDimensionState } from './hooks/useDimensionState';\nimport { useZoomState } from './hooks/useZoomState';\nimport { BASE_CARD_WIDTH, BASE_CARD_HEIGHT, CARDS_PER_COLUMN, GROUP_SPACING } from './constants';\nimport './PivotViewer.css';\nimport { PivotViewerMain } from './components/PivotViewerMain';\nimport { FilterPanelContainer } from './components/FilterPanelContainer';\nimport { ToolbarContainer } from './components/ToolbarContainer';\nimport { usePanning, useWheelZoom, useFilterOptions } from './hooks';\nimport { useContainerDimensions } from './hooks/useContainerDimensions';\nimport type { ViewMode } from './components/Toolbar';\nimport { useFieldExtractors } from './hooks/useFieldExtractors';\nimport { useCurrentFilters, useCurrentGroupBy } from './hooks/useCurrentFilters';\nimport { useCardSelection } from './hooks/useCardSelection';\nimport { useDetailPanelClose } from './hooks/useDetailPanelClose';\nimport { useScrollSync } from './hooks/useScrollSync';\nimport { useAnimationModeTracking } from './hooks/useAnimationModeTracking';\nimport { useViewModeScrollHandling } from './hooks/useViewModeScrollHandling';\n\nexport function PivotViewer<TItem extends object>({\n data,\n dimensions,\n filters,\n defaultDimensionKey,\n cardRenderer,\n detailRenderer,\n getItemId,\n searchFields,\n className,\n emptyContent,\n isLoading = false,\n colors,\n}: PivotViewerProps<TItem>) {\n // Refs\n const containerRef = useRef<HTMLDivElement>(null!);\n const filterButtonRef = useRef<HTMLButtonElement>(null!);\n const axisLabelsRef = useRef<HTMLDivElement>(null!);\n const spacerRef = useRef<HTMLDivElement>(null!);\n\n // State\n const [search, setSearch] = useState('');\n const [viewMode, setViewMode] = useState<ViewMode>('collection');\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [selectedItem, setSelectedItem] = useState<TItem | null>(null);\n const [isZooming, setIsZooming] = useState(false);\n const [visibleIds, setVisibleIds] = useState<Uint32Array>(new Uint32Array(0));\n const [grouping, setGrouping] = useState<GroupingResult>({ groups: [] });\n const [hoveredGroupIndex, setHoveredGroupIndex] = useState<number | null>(null);\n const [preSelectionState, setPreSelectionState] = useState<{ zoom: number; scrollLeft: number; scrollTop: number } | null>(null);\n const [, setAnimationMode] = useState<'layout' | 'filter'>('layout');\n const [scrollPosition, setScrollPosition] = useState({ x: 0, y: 0 });\n\n // Filter hooks\n const {\n filterState,\n rangeFilterState,\n expandedFilterKey,\n setExpandedFilterKey,\n handleToggleFilter,\n handleClearFilter,\n handleRangeChange,\n } = useFilterState(filters);\n\n // Dimension hooks\n const {\n activeDimensionKey,\n setActiveDimensionKey,\n activeDimension,\n dimensionFilter,\n handleAxisLabelClick,\n } = useDimensionState(dimensions, defaultDimensionKey);\n\n // Zoom and pan hooks\n const {\n zoomLevel,\n setZoomLevel,\n handleZoomIn,\n handleZoomOut,\n handleZoomSlider,\n handleZoomReset,\n handleZoomChange,\n } = useZoomState(1);\n\n const {\n isPanning,\n handlePanStart,\n handlePanMove,\n handlePanEnd,\n } = usePanning(containerRef, undefined, setScrollPosition);\n\n useWheelZoom(containerRef, zoomLevel, setZoomLevel);\n\n // Track container dimensions for responsive layout\n const containerDimensions = useContainerDimensions(containerRef, isLoading);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n setScrollPosition({\n x: container.scrollLeft,\n y: container.scrollTop,\n });\n };\n\n container.addEventListener('scroll', handleScroll);\n return () => container.removeEventListener('scroll', handleScroll);\n }, []);\n\n // Build field extractors for the columnar store\n const { fieldExtractors, indexFields } = useFieldExtractors(dimensions, filters);\n\n // Initialize the Web Worker engine\n const { ready, applyFilters: engineApplyFilters, computeGrouping, sortIds } = usePivotEngine({\n data,\n fieldExtractors,\n indexFields,\n });\n\n // Build filter specs from UI state\n const currentFilters = useCurrentFilters(\n filters,\n filterState,\n rangeFilterState,\n search,\n searchFields,\n dimensionFilter,\n activeDimension,\n );\n\n const currentGroupBy = useCurrentGroupBy(activeDimensionKey, dimensions);\n\n // Apply filters\n useEffect(() => {\n if (!ready) return;\n\n engineApplyFilters(currentFilters).then((result) => {\n // If the engine failed to return any IDs while no filters are active,\n // fall back to showing the full dataset so the canvas never renders empty.\n if (result.visibleIds.length === 0 && currentFilters.length === 0 && data.length > 0) {\n const fallbackIds = new Uint32Array(data.length);\n for (let i = 0; i < data.length; i++) {\n fallbackIds[i] = i;\n }\n setVisibleIds(fallbackIds);\n return;\n }\n\n setVisibleIds(result.visibleIds);\n });\n }, [ready, currentFilters, engineApplyFilters, data.length]);\n\n // Compute grouping\n const lastGroupingRequest = useRef<{ viewMode: ViewMode; groupBy: unknown; visibleIds: Uint32Array } | null>(null);\n \n useEffect(() => {\n if (!ready || visibleIds.length === 0) {\n setGrouping({ groups: [] });\n lastGroupingRequest.current = null;\n return;\n }\n\n if (viewMode === 'collection') {\n // In collection mode, create a single group with all items\n // Sort items if activeDimensionKey is set\n if (activeDimensionKey) {\n sortIds(visibleIds, activeDimensionKey).then((sortedIds) => {\n setGrouping({\n groups: [{\n key: 'all',\n label: 'All Items',\n value: 'all',\n ids: sortedIds,\n count: sortedIds.length\n }]\n });\n });\n } else {\n setGrouping({\n groups: [{\n key: 'all',\n label: 'All Items',\n value: 'all',\n ids: visibleIds,\n count: visibleIds.length\n }]\n });\n }\n lastGroupingRequest.current = null;\n return;\n }\n\n // Check if this is the same request as last time to prevent duplicate computations\n const lastRequest = lastGroupingRequest.current;\n if (\n lastRequest &&\n lastRequest.viewMode === viewMode &&\n (lastRequest.groupBy as unknown as typeof currentGroupBy)?.field === currentGroupBy.field &&\n lastRequest.visibleIds === visibleIds\n ) {\n return;\n }\n\n lastGroupingRequest.current = { viewMode, groupBy: currentGroupBy, visibleIds };\n \n computeGrouping(visibleIds, currentGroupBy).then((result) => {\n setGrouping(result);\n });\n }, [ready, visibleIds, currentGroupBy, viewMode, computeGrouping, sortIds, activeDimensionKey]);\n\n // Compute layout\n const layout = useMemo(() => {\n // Calculate layout at base dimensions (zoom is applied as transform)\n const cardWidth = BASE_CARD_WIDTH;\n const cardHeight = BASE_CARD_HEIGHT;\n const containerWidth = containerDimensions.width / zoomLevel;\n // For grouped mode, use fixed container height to ensure stable layout during zoom\n const containerHeight = viewMode === 'collection'\n ? containerDimensions.height / zoomLevel\n : containerDimensions.height;\n\n const result = computeLayout(grouping, {\n viewMode,\n cardWidth,\n cardHeight,\n cardsPerColumn: CARDS_PER_COLUMN,\n groupSpacing: GROUP_SPACING,\n containerWidth,\n containerHeight,\n });\n\n return result;\n }, [grouping, viewMode, zoomLevel, containerDimensions.width, containerDimensions.height]);\n\n const resolveId = useCallback((item: TItem, index: number) => {\n if (getItemId) {\n const id = getItemId(item, index);\n return typeof id === 'number' ? id : index;\n }\n const id = (item as Record<string, unknown>)['id'];\n return typeof id === 'number' ? id : index;\n }, [getItemId]);\n\n // Track animation mode changes\n useAnimationModeTracking(filterState, rangeFilterState, search, activeDimensionKey, viewMode, setAnimationMode);\n\n // Sync axis labels scroll with container scroll\n useScrollSync(containerRef, axisLabelsRef, viewMode);\n\n // Handle scroll positioning when switching view modes or grouping changes\n useViewModeScrollHandling({\n containerRef,\n viewMode,\n grouping,\n layout,\n selectedItem,\n zoomLevel,\n resolveId,\n data,\n setPreSelectionState,\n });\n\n // Handle card selection (click)\n const handleCardClick = useCardSelection({\n data,\n isPanning,\n selectedItem,\n zoomLevel,\n viewMode,\n layout,\n containerRef,\n spacerRef,\n containerDimensions,\n scrollPosition,\n preSelectionState,\n grouping,\n getItemId,\n resolveId,\n setZoomLevel,\n setIsZooming,\n setSelectedItem,\n setPreSelectionState,\n });\n\n // Handle detail panel close\n const closeDetail = useDetailPanelClose({\n selectedItem,\n preSelectionState,\n zoomLevel,\n viewMode,\n layout,\n containerRef,\n containerDimensions,\n grouping,\n data,\n resolveId,\n setZoomLevel,\n setIsZooming,\n setSelectedItem,\n setPreSelectionState,\n });\n\n // Use base card dimensions - zoom is applied as transform in canvas\n const cardWidth = BASE_CARD_WIDTH;\n const cardHeight = BASE_CARD_HEIGHT;\n\n // Calculate filter options\n const filterOptions = useFilterOptions(data, filters, filterState, rangeFilterState);\n\n const hasFilters = Boolean(filters && filters.length > 0);\n const activeFilterCount = Object.values(filterState).reduce((sum: number, vals) => sum + (vals as Set<string>).size, 0) +\n Object.values(rangeFilterState).filter(r => r !== null).length;\n\n const viewerClassName = [\n 'pivot-viewer',\n className,\n hasFilters ? (filtersOpen ? 'filters-open' : 'filters-closed') : 'no-filters',\n viewMode === 'grouped' ? 'grouped-mode' : 'collection-mode',\n ]\n .filter(Boolean)\n .join(' ');\n\n // Deselect any selected card when switching between view modes\n useEffect(() => {\n setSelectedItem(null);\n }, [viewMode]);\n\n // Map provided color overrides to CSS variables understood by the component.\n const cssVariables = useMemo(() => {\n const vars: Record<string, string> = {};\n if (!colors) return vars;\n if (colors.primaryColor) vars['--primary-color'] = colors.primaryColor;\n if (colors.primaryColorText) vars['--primary-color-text'] = colors.primaryColorText;\n if (colors.primary500) vars['--primary-500'] = colors.primary500;\n if (colors.surfaceGround) vars['--surface-ground'] = colors.surfaceGround;\n if (colors.surfaceCard) vars['--surface-card'] = colors.surfaceCard;\n if (colors.surfaceSection) vars['--surface-section'] = colors.surfaceSection;\n if (colors.surfaceOverlay) vars['--surface-overlay'] = colors.surfaceOverlay;\n if (colors.surfaceBorder) vars['--surface-border'] = colors.surfaceBorder;\n if (colors.textColor) vars['--text-color'] = colors.textColor;\n if (colors.textColorSecondary) vars['--text-color-secondary'] = colors.textColorSecondary;\n if (colors.highlightBg) vars['--highlight-bg'] = colors.highlightBg;\n if (colors.maskbg) vars['--maskbg'] = colors.maskbg;\n if (colors.focusRing) vars['--focus-ring'] = colors.focusRing;\n return vars;\n }, [colors]);\n\n return (\n <div className={viewerClassName} style={cssVariables as React.CSSProperties}>\n <FilterPanelContainer\n isOpen={filtersOpen && hasFilters}\n search={search}\n filterState={filterState}\n rangeFilterState={rangeFilterState}\n expandedFilterKey={expandedFilterKey}\n filterOptions={filterOptions}\n anchorRef={filterButtonRef}\n onClose={() => setFiltersOpen(false)}\n onSearchChange={setSearch}\n onFilterToggle={handleToggleFilter}\n onFilterClear={handleClearFilter}\n onRangeChange={handleRangeChange}\n onExpandedFilterChange={setExpandedFilterKey}\n />\n\n <main className=\"pv-main\">\n <ToolbarContainer\n hasFilters={hasFilters}\n filtersOpen={filtersOpen}\n filteredCount={visibleIds.length}\n viewMode={viewMode}\n zoomLevel={zoomLevel}\n activeDimensionKey={activeDimensionKey}\n dimensions={dimensions}\n activeFilterCount={activeFilterCount}\n onFiltersToggle={() => setFiltersOpen((prev) => !prev)}\n onViewModeChange={setViewMode}\n onZoomIn={handleZoomIn}\n onZoomOut={handleZoomOut}\n onZoomSlider={handleZoomSlider}\n onZoomReset={handleZoomReset}\n onZoomChange={handleZoomChange}\n onDimensionChange={setActiveDimensionKey}\n filterButtonRef={filterButtonRef}\n />\n\n <PivotViewerMain\n data={data}\n ready={ready}\n isLoading={isLoading}\n visibleIds={visibleIds}\n grouping={grouping}\n layout={layout}\n cardWidth={cardWidth}\n cardHeight={cardHeight}\n zoomLevel={zoomLevel}\n scrollPosition={scrollPosition}\n containerDimensions={containerDimensions}\n selectedItem={selectedItem}\n hoveredGroupIndex={hoveredGroupIndex}\n isZooming={isZooming}\n viewMode={viewMode}\n cardRenderer={cardRenderer}\n detailRenderer={detailRenderer}\n resolveId={resolveId}\n emptyContent={emptyContent}\n dimensionFilter={dimensionFilter}\n onCardClick={handleCardClick}\n onPanStart={handlePanStart as (e: React.MouseEvent) => void}\n onPanMove={handlePanMove as (e: React.MouseEvent) => void}\n onPanEnd={handlePanEnd}\n onGroupHover={setHoveredGroupIndex}\n onAxisLabelClick={handleAxisLabelClick}\n onCloseDetail={closeDetail}\n containerRef={containerRef}\n axisLabelsRef={axisLabelsRef}\n spacerRef={spacerRef}\n />\n </main>\n </div>\n );\n}\n"],"names":["useRef","useState","useFilterState","useDimensionState","useZoomState","usePanning","useWheelZoom","useContainerDimensions","useEffect","useFieldExtractors","usePivotEngine","useCurrentFilters","useCurrentGroupBy","layout","useMemo","BASE_CARD_WIDTH","BASE_CARD_HEIGHT","computeLayout","CARDS_PER_COLUMN","useCallback","useAnimationModeTracking","useScrollSync","useViewModeScrollHandling","useCardSelection","useDetailPanelClose","useFilterOptions","_jsxs","_jsx","FilterPanelContainer","ToolbarContainer","PivotViewerMain"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PivotViewer.js","sources":["../../../PivotViewer/PivotViewer.tsx"],"sourcesContent":[null],"names":["useRef","useState","useFilterState","useDimensionState","useZoomState","usePanning","useWheelZoom","useContainerDimensions","useEffect","useFieldExtractors","usePivotEngine","useCurrentFilters","useCurrentGroupBy","layout","useMemo","BASE_CARD_WIDTH","BASE_CARD_HEIGHT","computeLayout","CARDS_PER_COLUMN","useCallback","useAnimationModeTracking","useScrollSync","useViewModeScrollHandling","useCardSelection","useDetailPanelClose","useFilterOptions","_jsxs","_jsx","FilterPanelContainer","ToolbarContainer","PivotViewerMain"],"mappings":"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"}
|
|
@@ -5,14 +5,18 @@ var constants = require('../constants.js');
|
|
|
5
5
|
|
|
6
6
|
function AxisLabels({ groups, bucketWidths, dimensionFilter, hoveredGroup, zoomLevel, visible, onHover, onClick, containerRef, }) {
|
|
7
7
|
return (jsxRuntime.jsx("div", { className: `pv-axis-labels ${visible ? 'visible' : 'hidden'}`, ref: containerRef, style: {
|
|
8
|
+
// Align labels start with grouped buckets using canvas padding scaled by zoom
|
|
8
9
|
paddingLeft: `${(constants.CANVAS_PADDING * zoomLevel) - (20 * zoomLevel)}px`,
|
|
9
10
|
overflowX: 'hidden',
|
|
10
11
|
whiteSpace: 'nowrap',
|
|
11
12
|
}, children: groups.map((group, index) => {
|
|
12
13
|
const isSelected = dimensionFilter === group.key;
|
|
13
14
|
const baseBucketWidth = bucketWidths[index] || 0;
|
|
15
|
+
// Apply zoom to bucket width
|
|
14
16
|
const bucketWidth = baseBucketWidth * zoomLevel;
|
|
17
|
+
// Width is just the bucket width - spacing is handled by CSS gap
|
|
15
18
|
const width = bucketWidth;
|
|
19
|
+
// When a dimension filter is active, mark non-selected groups as filtered-out
|
|
16
20
|
const isFilteredOut = dimensionFilter !== null && !isSelected;
|
|
17
21
|
return (jsxRuntime.jsxs("button", { type: "button", className: `pv-axis-label ${hoveredGroup === group.key ? 'highlighted' : ''} ${isSelected ? 'selected' : ''} ${isFilteredOut ? 'filtered-out' : ''}`, style: {
|
|
18
22
|
width,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxisLabels.js","sources":["../../../../PivotViewer/components/AxisLabels.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"AxisLabels.js","sources":["../../../../PivotViewer/components/AxisLabels.tsx"],"sourcesContent":[null],"names":["_jsx","CANVAS_PADDING","_jsxs"],"mappings":";;;;;AAkBM,SAAU,UAAU,CAAuB,EAC/C,MAAM,EACN,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,SAAS,EACT,OAAO,EACP,OAAO,EACP,OAAO,EACP,YAAY,GACW,EAAA;IACvB,QACEA,wBACE,SAAS,EAAE,kBAAkB,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA,CAAE,EAC7D,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE;;AAEL,YAAA,WAAW,EAAE,CAAA,EAAG,CAACC,wBAAc,GAAG,SAAS,KAAG,EAAE,GAAC,SAAS,CAAC,CAAA,EAAA,CAAI;AAC/D,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,UAAU,EAAE,QAAQ;SACrB,EAAA,QAAA,EAEA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC3B,YAAA,MAAM,UAAU,GAAG,eAAe,KAAK,KAAK,CAAC,GAAG;YAChD,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEhD,YAAA,MAAM,WAAW,GAAG,eAAe,GAAG,SAAS;;YAE/C,MAAM,KAAK,GAAG,WAAW;;YAGzB,MAAM,aAAa,GAAG,eAAe,KAAK,IAAI,IAAI,CAAC,UAAU;YAE7D,QACEC,4BAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAA,cAAA,EAAiB,YAAY,KAAK,KAAK,CAAC,GAAG,GAAG,aAAa,GAAG,EAAE,IAAI,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,CAAA,EAAI,aAAa,GAAG,cAAc,GAAG,EAAE,CAAA,CAAE,EACpJ,KAAK,EAAE;oBACL,KAAK;AACN,iBAAA,EACD,YAAY,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EACtC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACjC,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CAEjCF,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAE,KAAK,CAAC,KAAK,EAAA,CAAQ,EACzDA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAA,CAAQ,CAAA,EAAA,EAX3E,KAAK,CAAC,GAAG,CAYP;QAEb,CAAC,CAAC,EAAA,CACE;AAEV;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailPanel.js","sources":["../../../../PivotViewer/components/DetailPanel.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"DetailPanel.js","sources":["../../../../PivotViewer/components/DetailPanel.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","AnimatePresence","motion"],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ var RangeHistogramFilter = require('./RangeHistogramFilter.js');
|
|
|
10
10
|
function FilterPanel({ isOpen, search, filterState, rangeFilterState, expandedFilterKey, filterOptions, anchorRef, onClose, onSearchChange, onFilterToggle, onFilterClear, onRangeChange, onExpandedFilterChange, }) {
|
|
11
11
|
const panelRef = React.useRef(null);
|
|
12
12
|
const [position, setPosition] = React.useState({ top: 0, left: 0 });
|
|
13
|
+
// Calculate position when opening
|
|
13
14
|
React.useEffect(() => {
|
|
14
15
|
if (isOpen && anchorRef.current) {
|
|
15
16
|
const rect = anchorRef.current.getBoundingClientRect();
|
|
@@ -19,6 +20,7 @@ function FilterPanel({ isOpen, search, filterState, rangeFilterState, expandedFi
|
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
22
|
}, [isOpen, anchorRef]);
|
|
23
|
+
// Handle click outside to close
|
|
22
24
|
React.useEffect(() => {
|
|
23
25
|
if (!isOpen)
|
|
24
26
|
return;
|
|
@@ -30,6 +32,8 @@ function FilterPanel({ isOpen, search, filterState, rangeFilterState, expandedFi
|
|
|
30
32
|
onClose();
|
|
31
33
|
}
|
|
32
34
|
};
|
|
35
|
+
// Use capture phase to ensure we catch the event before any other handlers
|
|
36
|
+
// Use timeout to avoid closing immediately when clicking the button to open
|
|
33
37
|
const timeoutId = setTimeout(() => {
|
|
34
38
|
document.addEventListener('mousedown', handleClickOutside, true);
|
|
35
39
|
}, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPanel.js","sources":["../../../../PivotViewer/components/FilterPanel.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 { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport type { PivotFilter, PivotFilterOption, PivotPrimitive } from '../types';\nimport type { FilterState, RangeFilterState } from '../utils/utils';\nimport { renderOptionCount } from '../utils/utils';\nimport { RangeHistogramFilter } from './RangeHistogramFilter';\n\nexport interface FilterPanelProps<TItem extends object> {\n isOpen: boolean;\n search: string;\n filterState: FilterState;\n rangeFilterState: RangeFilterState;\n expandedFilterKey: string | null;\n filterOptions: {\n filter: PivotFilter<TItem>;\n options: PivotFilterOption[];\n numericRange?: { min: number; max: number; values: PivotPrimitive[] };\n }[];\n anchorRef: React.RefObject<HTMLButtonElement | null>;\n onClose: () => void;\n onSearchChange: (value: string) => void;\n onFilterToggle: (filterKey: string, optionKey: string, multi: boolean | undefined) => void;\n onFilterClear: (filterKey: string) => void;\n onRangeChange: (filterKey: string, range: [number, number] | null) => void;\n onExpandedFilterChange: (key: string | null) => void;\n}\n\nexport function FilterPanel<TItem extends object>({\n isOpen,\n search,\n filterState,\n rangeFilterState,\n expandedFilterKey,\n filterOptions,\n anchorRef,\n onClose,\n onSearchChange,\n onFilterToggle,\n onFilterClear,\n onRangeChange,\n onExpandedFilterChange,\n}: FilterPanelProps<TItem>) {\n const panelRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n // Calculate position when opening\n useEffect(() => {\n if (isOpen && anchorRef.current) {\n const rect = anchorRef.current.getBoundingClientRect();\n setPosition({\n top: rect.bottom + 8,\n left: rect.left,\n });\n }\n }, [isOpen, anchorRef]);\n\n // Handle click outside to close\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n const panel = panelRef.current;\n const anchor = anchorRef.current;\n\n if (panel && !panel.contains(target) && anchor && !anchor.contains(target)) {\n onClose();\n }\n };\n\n // Use capture phase to ensure we catch the event before any other handlers\n // Use timeout to avoid closing immediately when clicking the button to open\n const timeoutId = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside, true);\n }, 0);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('mousedown', handleClickOutside, true);\n };\n }, [isOpen, anchorRef, onClose]);\n\n return createPortal(\n <AnimatePresence initial={false}>\n {isOpen && (\n <motion.aside\n ref={panelRef}\n className=\"pv-filter-dropdown\"\n style={{\n position: 'fixed',\n left: position.left,\n top: position.top,\n }}\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.15 }}\n >\n <div className=\"pv-filter-dropdown-content\">\n <div className=\"pv-search\">\n <input\n type=\"search\"\n placeholder=\"Search events\"\n value={search}\n onChange={(event) => onSearchChange(event.target.value)}\n />\n </div>\n <div className=\"pv-filter-groups\">\n {filterOptions.map(({ filter, options, numericRange }) => {\n const selections = filterState[filter.key] ?? new Set<string>();\n const rangeSelection = rangeFilterState[filter.key];\n const isExpanded = expandedFilterKey === filter.key;\n const isNumeric = filter.type === 'number';\n\n return (\n <div key={filter.key} className={`pv-filter ${isExpanded ? 'expanded' : ''}`}>\n <button\n type=\"button\"\n className=\"pv-filter-trigger\"\n onClick={() => onExpandedFilterChange(isExpanded ? null : filter.key)}\n >\n <span className=\"pv-filter-label\">{filter.label}</span>\n <span className=\"pv-filter-trigger-meta\">\n {!isNumeric && selections.size > 0 && <span className=\"pv-filter-count\">{selections.size}</span>}\n {isNumeric && rangeSelection && <span className=\"pv-filter-count\">Range</span>}\n <span className=\"pv-filter-chevron\" />\n </span>\n </button>\n <div className={`pv-filter-content ${isExpanded ? 'expanded' : ''}`}>\n {isNumeric && numericRange ? (\n <RangeHistogramFilter\n values={numericRange.values}\n min={numericRange.min}\n max={numericRange.max}\n buckets={filter.buckets ?? 20}\n selectedRange={rangeSelection ?? null}\n onChange={(range) => onRangeChange(filter.key, range)}\n />\n ) : (\n <>\n <ul>\n {options.map((option) => {\n const optionKey = option.key;\n const checked = selections.has(optionKey);\n return (\n <li key={option.key}>\n <label>\n <input\n type={filter.multi ? 'checkbox' : 'radio'}\n name={`filter-${filter.key}`}\n checked={checked}\n onChange={() =>\n onFilterToggle(filter.key, optionKey, filter.multi ?? false)\n }\n />\n <span>{option.label}</span>\n <span className=\"pv-option-count\">{renderOptionCount(option.count)}</span>\n </label>\n </li>\n );\n })}\n </ul>\n {selections.size > 0 && (\n <button\n type=\"button\"\n className=\"pv-filter-clear\"\n onClick={() => onFilterClear(filter.key)}\n >\n Clear\n </button>\n )}\n </>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </motion.aside>\n )}\n </AnimatePresence>,\n document.body\n );\n}\n"],"names":["useRef","useState","useEffect","createPortal","_jsx","AnimatePresence","motion","_jsxs","RangeHistogramFilter","_Fragment","renderOptionCount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPanel.js","sources":["../../../../PivotViewer/components/FilterPanel.tsx"],"sourcesContent":[null],"names":["useRef","useState","useEffect","createPortal","_jsx","AnimatePresence","motion","_jsxs","RangeHistogramFilter","_Fragment","renderOptionCount"],"mappings":";;;;;;;;;AA+BM,SAAU,WAAW,CAAuB,EAChD,MAAM,EACN,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,sBAAsB,GACE,EAAA;AACxB,IAAA,MAAM,QAAQ,GAAGA,YAAM,CAAiB,IAAI,CAAC;AAC7C,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGC,cAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;IAG7DC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE;YAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACtD,YAAA,WAAW,CAAC;AACV,gBAAA,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;;IAGvBA,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;AACnC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO;AAC9B,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;YAEhC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1E,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC;;;AAID,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAK;YAChC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC;QAClE,CAAC,EAAE,CAAC,CAAC;AAEL,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,SAAS,CAAC;YACvB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC;AACrE,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEhC,OAAOC,qBAAY,CACjBC,cAAA,CAACC,4BAAe,EAAA,EAAC,OAAO,EAAE,KAAK,EAAA,QAAA,EAC5B,MAAM,KACLD,cAAA,CAACE,mBAAM,CAAC,KAAK,EAAA,EACX,GAAG,EAAE,QAAQ,EACb,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;aAClB,EACD,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAC9B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAC3B,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAE9BC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACzCH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,YACxBA,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,WAAW,EAAC,eAAe,EAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CACvD,EAAA,CACE,EACNA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAC9B,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAI;AACvD,4BAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,EAAU;4BAC/D,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;AACnD,4BAAA,MAAM,UAAU,GAAG,iBAAiB,KAAK,MAAM,CAAC,GAAG;AACnD,4BAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ;AAE1C,4BAAA,QACEG,eAAA,CAAA,KAAA,EAAA,EAAsB,SAAS,EAAE,CAAA,UAAA,EAAa,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,CAAE,aAC1EA,eAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAE,MAAM,sBAAsB,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CAErEH,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAE,MAAM,CAAC,KAAK,GAAQ,EACvDG,eAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,wBAAwB,aACrC,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,IAAIH,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAE,UAAU,CAAC,IAAI,GAAQ,EAC/F,SAAS,IAAI,cAAc,IAAIA,yBAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,OAAA,EAAA,CAAa,EAC9EA,yBAAM,SAAS,EAAC,mBAAmB,EAAA,CAAG,IACjC,CAAA,EAAA,CACA,EACTA,wBAAK,SAAS,EAAE,qBAAqB,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAChE,SAAS,IAAI,YAAY,IACxBA,cAAA,CAACI,yCAAoB,IACnB,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,GAAG,EAAE,YAAY,CAAC,GAAG,EACrB,GAAG,EAAE,YAAY,CAAC,GAAG,EACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAC7B,aAAa,EAAE,cAAc,IAAI,IAAI,EACrC,QAAQ,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAA,CACrD,KAEFD,eAAA,CAAAE,mBAAA,EAAA,EAAA,QAAA,EAAA,CACEL,cAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACtB,wDAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG;wDAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,wDAAA,QACEA,cAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EACEG,eAAA,CAAA,OAAA,EAAA,EAAA,QAAA,EAAA,CACEH,cAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,UAAU,GAAG,OAAO,EACzC,IAAI,EAAE,UAAU,MAAM,CAAC,GAAG,CAAA,CAAE,EAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MACR,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAA,CAE9D,EACFA,cAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,MAAM,CAAC,KAAK,GAAQ,EAC3BA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAEM,uBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CAAQ,CAAA,EAAA,CACpE,IAZD,MAAM,CAAC,GAAG,CAad;AAET,oDAAA,CAAC,CAAC,EAAA,CACC,EACJ,UAAU,CAAC,IAAI,GAAG,CAAC,KAClBN,cAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,iBAAiB,EAC3B,OAAO,EAAE,MAAM,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,OAAA,EAAA,CAGjC,CACV,CAAA,EAAA,CACA,CACJ,GACG,CAAA,EAAA,EA1DE,MAAM,CAAC,GAAG,CA2Dd;wBAEV,CAAC,CAAC,EAAA,CACE,CAAA,EAAA,CACF,EAAA,CACO,CAChB,EAAA,CACe,EAClB,QAAQ,CAAC,IAAI,CACd;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPanelContainer.js","sources":["../../../../PivotViewer/components/FilterPanelContainer.tsx"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"FilterPanelContainer.js","sources":["../../../../PivotViewer/components/FilterPanelContainer.tsx"],"sourcesContent":[null],"names":["_jsx","FilterPanel"],"mappings":";;;;;AAOM,SAAU,oBAAoB,CAAuB,KAAuC,EAAA;AAChG,IAAA,OAAOA,cAAA,CAACC,uBAAW,EAAA,EAAA,GAAK,KAAK,GAAI;AACnC;;;;"}
|
|
@@ -28,7 +28,13 @@ function _interopNamespaceDefault(e) {
|
|
|
28
28
|
|
|
29
29
|
var PIXI__namespace = /*#__PURE__*/_interopNamespaceDefault(PIXI);
|
|
30
30
|
|
|
31
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
32
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
33
|
+
// `CardSprite` type moved to ./pivot/constants and imported above
|
|
34
|
+
// constants and CardColors type moved to ./pivot/constants
|
|
31
35
|
function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeight, zoomLevel, panX, panY, viewportWidth, viewportHeight, selectedId, hoveredGroupIndex, isZooming: _isZooming = false, resolveId: _resolveId, onCardClick, onPanStart, onPanMove, onPanEnd, viewMode, cardRenderer, containerRef, }) {
|
|
36
|
+
// Use the containerRef passed from the parent viewport so we append the Pixi
|
|
37
|
+
// canvas and spacer into the actual scrollable element.
|
|
32
38
|
const parentContainerRef = containerRef;
|
|
33
39
|
const resolveId = _resolveId;
|
|
34
40
|
const canvasRef = React.useRef(null);
|
|
@@ -57,7 +63,9 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
57
63
|
const onPanEndRef = React.useRef(onPanEnd);
|
|
58
64
|
const onCardClickRef = React.useRef(onCardClick);
|
|
59
65
|
const prevPanRef = React.useRef({ x: panX, y: panY });
|
|
66
|
+
// Initialize Pixi Application
|
|
60
67
|
React.useEffect(() => {
|
|
68
|
+
// ... existing code ...
|
|
61
69
|
onPanMoveRef.current = onPanMove;
|
|
62
70
|
onPanEndRef.current = onPanEnd;
|
|
63
71
|
onCardClickRef.current = onCardClick;
|
|
@@ -66,17 +74,22 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
66
74
|
cardColorsRef.current = colorResolver.resolveCardColors(cssColorResolver);
|
|
67
75
|
}, [cssColorResolver]);
|
|
68
76
|
React.useEffect(() => {
|
|
77
|
+
// Reset mounted flag
|
|
69
78
|
mountedRef.current = true;
|
|
70
79
|
if (!parentContainerRef || !parentContainerRef.current) {
|
|
71
80
|
return;
|
|
72
81
|
}
|
|
82
|
+
// Prevent multiple simultaneous initializations
|
|
73
83
|
if (initializingRef.current || appRef.current) {
|
|
74
84
|
return;
|
|
75
85
|
}
|
|
76
86
|
initializingRef.current = true;
|
|
77
87
|
let app = null;
|
|
88
|
+
// Handler references declared here so cleanup can remove them later.
|
|
78
89
|
(async () => {
|
|
79
90
|
try {
|
|
91
|
+
// Prefer the new init API (v8+) to avoid deprecation issues. Fall back
|
|
92
|
+
// to the constructor options when `init` is not available.
|
|
80
93
|
const options = {
|
|
81
94
|
backgroundAlpha: 0,
|
|
82
95
|
antialias: false,
|
|
@@ -88,13 +101,17 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
88
101
|
};
|
|
89
102
|
app = new PIXI__namespace.Application();
|
|
90
103
|
if (app.init && typeof app.init === 'function') {
|
|
104
|
+
// init may return a promise in some builds
|
|
105
|
+
// @ts-ignore
|
|
91
106
|
await app.init(options);
|
|
92
107
|
}
|
|
93
108
|
else {
|
|
109
|
+
// Fall back to constructor that accepts options
|
|
94
110
|
app.destroy?.();
|
|
95
111
|
app = new PIXI__namespace.Application(options);
|
|
96
112
|
}
|
|
97
113
|
if (!mountedRef.current || !parentContainerRef.current) {
|
|
114
|
+
// Component unmounted during initialization
|
|
98
115
|
if (app && typeof app.destroy === 'function')
|
|
99
116
|
app.destroy(true, { children: true });
|
|
100
117
|
initializingRef.current = false;
|
|
@@ -107,7 +124,15 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
107
124
|
const root = new PIXI__namespace.Container();
|
|
108
125
|
rootRef.current = root;
|
|
109
126
|
app.stage.addChild(root);
|
|
127
|
+
// Resolve canvas element (different Pixi builds expose it as `view` or
|
|
128
|
+
// `canvas`).
|
|
110
129
|
const canvasEl = (app.view ?? app.canvas ?? app.renderer?.view);
|
|
130
|
+
// Place canvas outside the scrollable content so native scrolling
|
|
131
|
+
// doesn't move the canvas DOM element itself. We overlay the canvas
|
|
132
|
+
// on top of the scroll area by inserting it into the parent element
|
|
133
|
+
// (or the container itself if parent is not available). This ensures
|
|
134
|
+
// the Pixi canvas remains stable while we move the Pixi world inside
|
|
135
|
+
// it to represent camera pan.
|
|
111
136
|
const overlayParent = parentContainerRef.current.parentElement ?? parentContainerRef.current;
|
|
112
137
|
if (canvasEl) {
|
|
113
138
|
if (canvasEl.parentElement) {
|
|
@@ -127,26 +152,41 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
127
152
|
else {
|
|
128
153
|
console.error('PivotCanvas: Could not find canvas element from Pixi application');
|
|
129
154
|
}
|
|
155
|
+
// Position the canvas to overlay the scrollable container area.
|
|
130
156
|
if (canvasRef.current && parentContainerRef.current) {
|
|
131
157
|
const parentBounds = parentContainerRef.current.getBoundingClientRect();
|
|
132
158
|
void parentBounds;
|
|
133
159
|
canvasRef.current.style.position = 'absolute';
|
|
160
|
+
// Place canvas relative to the overlayParent's coordinate space.
|
|
161
|
+
// If overlayParent is the immediate parent, top/left 0 aligns it.
|
|
134
162
|
const offsetLeft = parentContainerRef.current.offsetLeft;
|
|
135
163
|
const offsetTop = parentContainerRef.current.offsetTop;
|
|
136
164
|
canvasRef.current.style.left = `${offsetLeft}px`;
|
|
137
165
|
canvasRef.current.style.top = `${offsetTop}px`;
|
|
138
166
|
canvasRef.current.style.width = `${parentContainerRef.current.clientWidth}px`;
|
|
139
167
|
canvasRef.current.style.height = `${parentContainerRef.current.clientHeight}px`;
|
|
168
|
+
// Place canvas behind the scrollable container (which has z-index 1)
|
|
169
|
+
// so scrollbars appear on top.
|
|
140
170
|
canvasRef.current.style.zIndex = '0';
|
|
171
|
+
// Disable pointer events on canvas so they pass through to the viewport if needed,
|
|
172
|
+
// though viewport is on top anyway.
|
|
141
173
|
canvasRef.current.style.pointerEvents = 'none';
|
|
142
174
|
}
|
|
175
|
+
// We handle clicks and interactions manually in PivotViewerMain now,
|
|
176
|
+
// so we don't need to configure Pixi events on the container.
|
|
177
|
+
// This avoids z-index conflicts and event propagation issues.
|
|
178
|
+
// Make canvas fill container with absolute positioning
|
|
143
179
|
if (canvasRef.current) {
|
|
144
180
|
canvasRef.current.style.display = 'block';
|
|
181
|
+
// Ensure canvas does not capture events so they pass through to the viewport
|
|
145
182
|
canvasRef.current.style.pointerEvents = 'none';
|
|
146
183
|
}
|
|
184
|
+
// Setup stage events for background panning
|
|
147
185
|
app.stage.eventMode = 'static';
|
|
148
186
|
app.stage.hitArea = new PIXI__namespace.Rectangle(0, 0, viewportWidth, viewportHeight);
|
|
149
187
|
app.stage.on('pointerdown', (e) => {
|
|
188
|
+
// Only handle if it reached the stage (background)
|
|
189
|
+
// Sprites stop propagation, so this is safe
|
|
150
190
|
onPanStartRef.current(e.nativeEvent);
|
|
151
191
|
});
|
|
152
192
|
app.stage.on('globalpointermove', (e) => {
|
|
@@ -155,14 +195,28 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
155
195
|
app.stage.on('globalpointerup', () => {
|
|
156
196
|
onPanEndRef.current();
|
|
157
197
|
});
|
|
198
|
+
// We no longer need manual event listeners on parentEl because Pixi
|
|
199
|
+
// is now listening to events on parentEl directly via setTargetElement.
|
|
200
|
+
// This allows Pixi to handle hit testing through the transparent container.
|
|
158
201
|
const parentEl = parentContainerRef.current;
|
|
159
202
|
if (parentEl) {
|
|
203
|
+
// handleMouseDown = (e: Event) => onPanStartRef.current(e as unknown);
|
|
204
|
+
// handleMouseMove = (e: Event) => onPanMoveRef.current(e as unknown);
|
|
205
|
+
// handleMouseUp = () => onPanEndRef.current();
|
|
206
|
+
// parentEl.addEventListener('mousedown', handleMouseDown);
|
|
207
|
+
// parentEl.addEventListener('mousemove', handleMouseMove);
|
|
208
|
+
// parentEl.addEventListener('mouseup', handleMouseUp);
|
|
209
|
+
// parentEl.addEventListener('mouseleave', handleMouseUp);
|
|
210
|
+
// window.addEventListener('mouseup', handleMouseUp);
|
|
211
|
+
// window.addEventListener('pointerup', handleMouseUp);
|
|
160
212
|
}
|
|
213
|
+
// Immediately size to container to avoid delay
|
|
161
214
|
if (viewportWidth > 0 && viewportHeight > 0) {
|
|
162
215
|
app.renderer?.resize(viewportWidth, viewportHeight);
|
|
163
216
|
}
|
|
164
217
|
setPixiReady(true);
|
|
165
218
|
initializingRef.current = false;
|
|
219
|
+
// Trigger initial render
|
|
166
220
|
needsRenderRef.current = true;
|
|
167
221
|
app.renderer?.render(app.stage);
|
|
168
222
|
}
|
|
@@ -180,14 +234,27 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
180
234
|
appRef.current = null;
|
|
181
235
|
rootRef.current = null;
|
|
182
236
|
}
|
|
237
|
+
// Clear local sprite references to prevent re-use of destroyed sprites
|
|
183
238
|
spritesRef.current.clear();
|
|
239
|
+
// Clear sprite pool to avoid holding onto destroyed textures
|
|
240
|
+
// clearSpritePool();
|
|
241
|
+
// Remove any event listeners we attached to the parent container
|
|
184
242
|
try {
|
|
185
243
|
const parentEl = parentContainerRef.current;
|
|
186
244
|
if (parentEl) {
|
|
245
|
+
// if (handleMouseDown) parentEl.removeEventListener('mousedown', handleMouseDown);
|
|
246
|
+
// if (handleMouseMove) parentEl.removeEventListener('mousemove', handleMouseMove);
|
|
247
|
+
// if (handleMouseUp) parentEl.removeEventListener('mouseup', handleMouseUp);
|
|
248
|
+
// if (handleMouseUp) parentEl.removeEventListener('mouseleave', handleMouseUp);
|
|
249
|
+
// if (handleMouseUp) {
|
|
250
|
+
// window.removeEventListener('mouseup', handleMouseUp);
|
|
251
|
+
// window.removeEventListener('pointerup', handleMouseUp);
|
|
252
|
+
// }
|
|
187
253
|
}
|
|
188
254
|
}
|
|
189
255
|
catch (e) {
|
|
190
256
|
}
|
|
257
|
+
// Remove DOM nodes we appended
|
|
191
258
|
try {
|
|
192
259
|
if (canvasRef.current && canvasRef.current.parentElement) {
|
|
193
260
|
canvasRef.current.parentElement.removeChild(canvasRef.current);
|
|
@@ -196,7 +263,8 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
196
263
|
catch (e) {
|
|
197
264
|
}
|
|
198
265
|
};
|
|
199
|
-
}, []);
|
|
266
|
+
}, []); // Only initialize once - resizing handled by separate useEffect
|
|
267
|
+
// Handle canvas resize
|
|
200
268
|
React.useEffect(() => {
|
|
201
269
|
if (!parentContainerRef || !parentContainerRef.current || !appRef.current || !pixiReady)
|
|
202
270
|
return;
|
|
@@ -204,12 +272,15 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
204
272
|
const app = appRef.current;
|
|
205
273
|
let resizeTimeout;
|
|
206
274
|
const handleResize = () => {
|
|
275
|
+
// Size canvas to viewport dimensions from props
|
|
207
276
|
if (viewportWidth > 0 && viewportHeight > 0) {
|
|
208
277
|
app.renderer?.resize(viewportWidth, viewportHeight);
|
|
209
278
|
app.stage.hitArea = new PIXI__namespace.Rectangle(0, 0, viewportWidth, viewportHeight);
|
|
279
|
+
// Keep canvas DOM size in sync with container
|
|
210
280
|
if (canvasRef.current && parentContainerRef.current) {
|
|
211
281
|
canvasRef.current.style.width = `${parentContainerRef.current.clientWidth}px`;
|
|
212
282
|
canvasRef.current.style.height = `${parentContainerRef.current.clientHeight}px`;
|
|
283
|
+
// Also update left/top in case the container moved
|
|
213
284
|
canvasRef.current.style.left = `${parentContainerRef.current.offsetLeft}px`;
|
|
214
285
|
canvasRef.current.style.top = `${parentContainerRef.current.offsetTop}px`;
|
|
215
286
|
}
|
|
@@ -219,7 +290,9 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
219
290
|
clearTimeout(resizeTimeout);
|
|
220
291
|
resizeTimeout = setTimeout(handleResize, 150);
|
|
221
292
|
};
|
|
293
|
+
// Initial resize (immediate)
|
|
222
294
|
handleResize();
|
|
295
|
+
// Watch for size changes (debounced)
|
|
223
296
|
const resizeObserver = new ResizeObserver(debouncedResize);
|
|
224
297
|
resizeObserver.observe(container);
|
|
225
298
|
return () => {
|
|
@@ -227,6 +300,7 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
227
300
|
resizeObserver.disconnect();
|
|
228
301
|
};
|
|
229
302
|
}, [pixiReady, viewportWidth, viewportHeight]);
|
|
303
|
+
// Update group backgrounds only when layout/grouping changes
|
|
230
304
|
React.useEffect(() => {
|
|
231
305
|
if (!groupsContainerRef.current || !parentContainerRef.current || !pixiReady)
|
|
232
306
|
return;
|
|
@@ -234,6 +308,7 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
234
308
|
needsRenderRef.current = true;
|
|
235
309
|
appRef.current?.renderer?.render(appRef.current.stage);
|
|
236
310
|
}, [grouping, layout, zoomLevel, viewMode, pixiReady]);
|
|
311
|
+
// Fade buckets background when switching view modes
|
|
237
312
|
React.useEffect(() => {
|
|
238
313
|
const gc = groupsContainerRef.current;
|
|
239
314
|
const app = appRef.current;
|
|
@@ -241,7 +316,7 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
241
316
|
return;
|
|
242
317
|
const target = viewMode === 'grouped' ? 1 : 0;
|
|
243
318
|
const start = typeof gc.alpha === 'number' ? gc.alpha : 1;
|
|
244
|
-
const duration = 200;
|
|
319
|
+
const duration = 200; // ms
|
|
245
320
|
if (Math.abs(start - target) < 0.01) {
|
|
246
321
|
gc.alpha = target;
|
|
247
322
|
return;
|
|
@@ -261,6 +336,7 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
261
336
|
if (!rootRef.current || !parentContainerRef.current || !pixiReady) {
|
|
262
337
|
return;
|
|
263
338
|
}
|
|
339
|
+
// Check if this is a view mode change (not just pan/scroll)
|
|
264
340
|
const viewModeChanged = previousViewModeRef.current !== viewMode;
|
|
265
341
|
const groupingChanged = prevGroupingRef.current !== grouping;
|
|
266
342
|
const layoutChanged = prevLayoutRef.current !== layout;
|
|
@@ -269,7 +345,14 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
269
345
|
lastViewChangeTimeRef.current = Date.now();
|
|
270
346
|
previousViewModeRef.current = viewMode;
|
|
271
347
|
prevGroupingRef.current = grouping;
|
|
348
|
+
// Don't hide sprites here - let visibility.ts handle the transition
|
|
349
|
+
// The syncSpritesToViewport function will properly animate sprites to new positions
|
|
350
|
+
// during view transitions (isViewTransitionRef.current = true), and visibility.ts
|
|
351
|
+
// will handle cleanup of sprites that no longer have positions in the layout.
|
|
352
|
+
// Previously, hiding sprites here caused sorting/transitions to not work because
|
|
353
|
+
// sprites were destroyed before they could animate.
|
|
272
354
|
}
|
|
355
|
+
// Update spacer dimensions to match scaled world size
|
|
273
356
|
if (spacerRef.current) {
|
|
274
357
|
const spacer = spacerRef.current;
|
|
275
358
|
const worldWidth = (layout.totalWidth || viewportWidth) * zoomLevel;
|
|
@@ -277,12 +360,16 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
277
360
|
spacer.style.width = `${Math.max(worldWidth, viewportWidth)}px`;
|
|
278
361
|
spacer.style.height = `${Math.max(worldHeight, viewportHeight)}px`;
|
|
279
362
|
}
|
|
363
|
+
// Ensure scroll spacer matches layout so the container becomes scrollable and
|
|
364
|
+
// native scrollLeft/scrollTop reflect the camera position.
|
|
280
365
|
if (parentContainerRef.current) {
|
|
281
366
|
spacerRef.current;
|
|
282
367
|
}
|
|
283
368
|
const panDeltaX = panX - prevPanRef.current.x;
|
|
284
369
|
const panDeltaY = panY - prevPanRef.current.y;
|
|
285
370
|
prevPanRef.current = { x: panX, y: panY };
|
|
371
|
+
// Sync sprites into viewport and create/remove as needed
|
|
372
|
+
// Provide wrappers for sprite creation and content update so helpers have required context
|
|
286
373
|
const currentScrollTop = parentContainerRef.current?.scrollTop || 0;
|
|
287
374
|
const currentScrollLeft = parentContainerRef.current?.scrollLeft || 0;
|
|
288
375
|
visibility.syncSpritesToViewport({
|
|
@@ -310,9 +397,11 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
310
397
|
prevScrollTop: prevScrollTopRef.current,
|
|
311
398
|
prevScrollLeft: prevScrollLeftRef.current,
|
|
312
399
|
});
|
|
400
|
+
// Update previous scroll position for next frame
|
|
313
401
|
prevScrollTopRef.current = currentScrollTop;
|
|
314
402
|
prevScrollLeftRef.current = currentScrollLeft;
|
|
315
403
|
needsRenderRef.current = true;
|
|
404
|
+
// Force an immediate render after syncing sprites to ensure cards appear
|
|
316
405
|
if (appRef.current?.renderer && rootRef.current) {
|
|
317
406
|
appRef.current.renderer.render(appRef.current.stage);
|
|
318
407
|
needsRenderRef.current = false;
|
|
@@ -327,9 +416,33 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
327
416
|
isViewTransitionRef,
|
|
328
417
|
});
|
|
329
418
|
}, [layout, visibleIds, items, cardWidth, cardHeight, pixiReady, zoomLevel, panX, panY, grouping, viewMode]);
|
|
419
|
+
// Update prevLayoutRef after processing layout changes
|
|
330
420
|
React.useEffect(() => {
|
|
331
421
|
prevLayoutRef.current = layout;
|
|
332
422
|
}, [layout]);
|
|
423
|
+
// Duplicate camera position effect removed -- syncSpritesToViewport handles this with correct offsetY logic logic
|
|
424
|
+
/*
|
|
425
|
+
useEffect(() => {
|
|
426
|
+
if (!rootRef.current || !groupsContainerRef.current) return;
|
|
427
|
+
|
|
428
|
+
// Camera transform: move world opposite to camera position. Prefer the
|
|
429
|
+
// native container scroll positions where available (they are authoritative
|
|
430
|
+
// during user scrolls) and fall back to the passed pan props.
|
|
431
|
+
const effectivePanX = parentContainerRef.current ? parentContainerRef.current.scrollLeft : panX;
|
|
432
|
+
const effectivePanY = parentContainerRef.current ? parentContainerRef.current.scrollTop : panY;
|
|
433
|
+
|
|
434
|
+
// Apply zoom and position to root and groups.
|
|
435
|
+
if (rootRef.current.scale && groupsContainerRef.current.scale) {
|
|
436
|
+
rootRef.current.scale.set(zoomLevel);
|
|
437
|
+
groupsContainerRef.current.scale.set(zoomLevel);
|
|
438
|
+
}
|
|
439
|
+
if (rootRef.current.position && groupsContainerRef.current.position) {
|
|
440
|
+
rootRef.current.position.set(-effectivePanX, -effectivePanY);
|
|
441
|
+
groupsContainerRef.current.position.set(-effectivePanX, -effectivePanY);
|
|
442
|
+
}
|
|
443
|
+
appRef.current?.renderer?.render(appRef.current.stage);
|
|
444
|
+
}, [zoomLevel, panX, panY]);
|
|
445
|
+
*/
|
|
333
446
|
React.useEffect(() => {
|
|
334
447
|
if (!rootRef.current)
|
|
335
448
|
return;
|
|
@@ -344,20 +457,38 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
344
457
|
needsRenderRef.current = true;
|
|
345
458
|
appRef.current?.renderer.render(appRef.current.stage);
|
|
346
459
|
}, [hoveredGroupIndex, layout, grouping]);
|
|
460
|
+
// Note: animation loop and group background updates are delegated to
|
|
461
|
+
// external helpers (`startAnimationLoopExternal` and
|
|
462
|
+
// `updateGroupBackgroundsExternal`) and invoked where needed. We don't
|
|
463
|
+
// expose local wrappers to avoid unused-function lint warnings.
|
|
464
|
+
// Listen to native scroll events on the parent container so we update the
|
|
465
|
+
// Pixi world immediately when the user scrolls (native scrollbar or
|
|
466
|
+
// programmatic). This ensures `syncSpritesToViewport` runs on scroll and
|
|
467
|
+
// creates/destroys sprites as the viewport moves.
|
|
347
468
|
React.useEffect(() => {
|
|
348
469
|
if (!pixiReady || !parentContainerRef || !parentContainerRef.current || !appRef.current || !rootRef.current)
|
|
349
470
|
return;
|
|
350
471
|
const container = parentContainerRef.current;
|
|
351
472
|
const app = appRef.current;
|
|
473
|
+
// rAF-batched scroll handling: store the latest scroll values and process
|
|
474
|
+
// them once per animation frame to avoid heavy synchronous work inside
|
|
475
|
+
// the scroll event which causes jank and de-synchronisation between the
|
|
476
|
+
// compositor and Pixi render updates.
|
|
352
477
|
const lastScroll = { x: container.scrollLeft, y: container.scrollTop };
|
|
353
478
|
const pendingRef = { scheduled: false };
|
|
354
479
|
const processScroll = () => {
|
|
355
480
|
pendingRef.scheduled = false;
|
|
356
481
|
try {
|
|
482
|
+
// Read directly from container to ensure consistency with visibility logic
|
|
483
|
+
// and to handle cases where scroll changes without event (e.g. resize clamping)
|
|
357
484
|
const effectivePanX = container.scrollLeft;
|
|
358
485
|
const effectivePanY = container.scrollTop;
|
|
486
|
+
// Update lastScroll to keep it in sync
|
|
359
487
|
lastScroll.x = effectivePanX;
|
|
360
488
|
lastScroll.y = effectivePanY;
|
|
489
|
+
// Note: We delegate root/groups container positioning to syncSpritesToViewport
|
|
490
|
+
// because it encapsulates the logic for conditional vertical alignment (offsetY)
|
|
491
|
+
// in different view modes. Manually setting position here would overwrite that logic.
|
|
361
492
|
visibility.syncSpritesToViewport({
|
|
362
493
|
root: rootRef.current,
|
|
363
494
|
groupsContainer: groupsContainerRef.current,
|
|
@@ -380,6 +511,7 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
380
511
|
prevScrollTop: prevScrollTopRef.current,
|
|
381
512
|
prevScrollLeft: prevScrollLeftRef.current,
|
|
382
513
|
});
|
|
514
|
+
// Update previous scroll position for next frame
|
|
383
515
|
prevScrollTopRef.current = container.scrollTop || 0;
|
|
384
516
|
prevScrollLeftRef.current = container.scrollLeft || 0;
|
|
385
517
|
needsRenderRef.current = true;
|
|
@@ -390,6 +522,7 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
390
522
|
}
|
|
391
523
|
};
|
|
392
524
|
const onScroll = () => {
|
|
525
|
+
// capture latest scroll positions quickly and schedule work
|
|
393
526
|
lastScroll.x = container.scrollLeft;
|
|
394
527
|
lastScroll.y = container.scrollTop;
|
|
395
528
|
if (!pendingRef.scheduled) {
|
|
@@ -415,6 +548,9 @@ function PivotCanvas({ items, layout, grouping, visibleIds, cardWidth, cardHeigh
|
|
|
415
548
|
function updateHighlight() {
|
|
416
549
|
groups.updateHighlight(groupsContainerRef.current, parentContainerRef.current, grouping, layout, hoveredGroupIndex, cardWidth, zoomLevel);
|
|
417
550
|
}
|
|
551
|
+
// This component renders into the parent `containerRef` (we append Pixi canvas
|
|
552
|
+
// and spacer directly into that DOM node). Return null so we don't replace or
|
|
553
|
+
// reassign the parent's ref which must remain the scrollable viewport element.
|
|
418
554
|
return null;
|
|
419
555
|
}
|
|
420
556
|
|