@cratis/components 4.26.3 → 4.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compat-manifest.json +11 -11
- package/dist/esm/Common/CratisComponentsProvider.d.ts +4 -0
- package/dist/esm/Common/CratisComponentsProvider.d.ts.map +1 -1
- package/dist/esm/Common/CratisComponentsProvider.js +1 -0
- package/dist/esm/Common/CratisComponentsProvider.js.map +1 -1
- package/dist/esm/DataPage/DataPage.d.ts +2 -0
- package/dist/esm/DataPage/DataPage.d.ts.map +1 -1
- package/dist/esm/DataPage/DataPage.js.map +1 -1
- package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +2 -0
- package/dist/esm/DataTables/DataTableForObservableQuery.d.ts.map +1 -1
- package/dist/esm/DataTables/DataTableForObservableQuery.js +1 -1
- package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -1
- package/dist/esm/DataTables/DataTableForQuery.d.ts +2 -0
- package/dist/esm/DataTables/DataTableForQuery.d.ts.map +1 -1
- package/dist/esm/DataTables/DataTableForQuery.js +1 -1
- package/dist/esm/DataTables/DataTableForQuery.js.map +1 -1
- package/dist/esm/DataTables/PaginatorPageItem.d.ts +13 -0
- package/dist/esm/DataTables/PaginatorPageItem.d.ts.map +1 -0
- package/dist/esm/DataTables/PaginatorPageItem.js +4 -0
- package/dist/esm/DataTables/PaginatorPageItem.js.map +1 -0
- package/dist/esm/DataTables/TablePaginator.d.ts +22 -2
- package/dist/esm/DataTables/TablePaginator.d.ts.map +1 -1
- package/dist/esm/DataTables/TablePaginator.js.map +1 -1
- package/dist/esm/DataTables/TablePaginatorImplementation.d.ts +1 -1
- package/dist/esm/DataTables/TablePaginatorImplementation.d.ts.map +1 -1
- package/dist/esm/DataTables/TablePaginatorImplementation.js +8 -3
- package/dist/esm/DataTables/TablePaginatorImplementation.js.map +1 -1
- package/dist/esm/DataTables/TablePaginatorPages.d.ts +9 -0
- package/dist/esm/DataTables/TablePaginatorPages.d.ts.map +1 -0
- package/dist/esm/DataTables/TablePaginatorPages.js +20 -0
- package/dist/esm/DataTables/TablePaginatorPages.js.map +1 -0
- package/dist/esm/DataTables/index.d.ts +2 -0
- package/dist/esm/DataTables/index.d.ts.map +1 -1
- package/dist/esm/DataTables/index.js +1 -0
- package/dist/esm/DataTables/index.js.map +1 -1
- package/dist/esm/DataTables/paginatorPages.d.ts +15 -0
- package/dist/esm/DataTables/paginatorPages.d.ts.map +1 -0
- package/dist/esm/DataTables/paginatorPages.js +40 -0
- package/dist/esm/DataTables/paginatorPages.js.map +1 -0
- package/dist/esm/Filter/FilterGroup.d.ts +23 -0
- package/dist/esm/Filter/FilterGroup.d.ts.map +1 -0
- package/dist/esm/Filter/FilterGroup.js +51 -0
- package/dist/esm/Filter/FilterGroup.js.map +1 -0
- package/dist/esm/Filter/FilterPanel.d.ts.map +1 -1
- package/dist/esm/Filter/FilterPanel.js +24 -257
- package/dist/esm/Filter/FilterPanel.js.map +1 -1
- package/dist/esm/Filter/FilterSearchBox.d.ts +10 -0
- package/dist/esm/Filter/FilterSearchBox.d.ts.map +1 -0
- package/dist/esm/Filter/FilterSearchBox.js +10 -0
- package/dist/esm/Filter/FilterSearchBox.js.map +1 -0
- package/dist/esm/Filter/measurePanelPlacement.d.ts +31 -0
- package/dist/esm/Filter/measurePanelPlacement.d.ts.map +1 -0
- package/dist/esm/Filter/measurePanelPlacement.js +132 -0
- package/dist/esm/Filter/measurePanelPlacement.js.map +1 -0
- package/dist/esm/Filter/usePanelDismissal.d.ts +32 -0
- package/dist/esm/Filter/usePanelDismissal.d.ts.map +1 -0
- package/dist/esm/Filter/usePanelDismissal.js +63 -0
- package/dist/esm/Filter/usePanelDismissal.js.map +1 -0
- package/dist/esm/Filter/usePanelPosition.d.ts +24 -0
- package/dist/esm/Filter/usePanelPosition.d.ts.map +1 -0
- package/dist/esm/Filter/usePanelPosition.js +85 -0
- package/dist/esm/Filter/usePanelPosition.js.map +1 -0
- package/dist/esm/Filter/useResolvedAnchor.d.ts +17 -0
- package/dist/esm/Filter/useResolvedAnchor.d.ts.map +1 -0
- package/dist/esm/Filter/useResolvedAnchor.js +16 -0
- package/dist/esm/Filter/useResolvedAnchor.js.map +1 -0
- package/dist/esm/PivotViewer/PivotViewer.d.ts.map +1 -1
- package/dist/esm/PivotViewer/PivotViewer.js +47 -207
- package/dist/esm/PivotViewer/PivotViewer.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/sprites.js +1 -1
- package/dist/esm/PivotViewer/components/pivot/syncScrollSprites.d.ts +2 -2
- package/dist/esm/PivotViewer/components/pivot/syncScrollSprites.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/syncScrollSprites.js +1 -1
- package/dist/esm/PivotViewer/components/pivot/syncScrollSprites.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.js +8 -2
- package/dist/esm/PivotViewer/components/pivot/usePivotScrollSync.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.js +49 -28
- package/dist/esm/PivotViewer/components/pivot/usePivotSpriteSync.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/visibility.d.ts +12 -2
- package/dist/esm/PivotViewer/components/pivot/visibility.d.ts.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/visibility.js +34 -194
- package/dist/esm/PivotViewer/components/pivot/visibility.js.map +1 -1
- package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.d.ts +114 -0
- package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.d.ts.map +1 -0
- package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.js +306 -0
- package/dist/esm/PivotViewer/components/pivot/visibilityHelpers.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useColorCssVariables.d.ts +9 -0
- package/dist/esm/PivotViewer/hooks/useColorCssVariables.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useColorCssVariables.js +32 -0
- package/dist/esm/PivotViewer/hooks/useColorCssVariables.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.d.ts +27 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.js +40 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerGrouping.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.d.ts +27 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.js +46 -0
- package/dist/esm/PivotViewer/hooks/usePivotViewerInteractions.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useRawGrouping.d.ts +22 -0
- package/dist/esm/PivotViewer/hooks/useRawGrouping.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useRawGrouping.js +56 -0
- package/dist/esm/PivotViewer/hooks/useRawGrouping.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.d.ts +12 -0
- package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.js +20 -0
- package/dist/esm/PivotViewer/hooks/useScrollPositionTracking.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useViewerLayout.d.ts +16 -0
- package/dist/esm/PivotViewer/hooks/useViewerLayout.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useViewerLayout.js +29 -0
- package/dist/esm/PivotViewer/hooks/useViewerLayout.js.map +1 -0
- package/dist/esm/PivotViewer/hooks/useVisibleIds.d.ts +21 -0
- package/dist/esm/PivotViewer/hooks/useVisibleIds.d.ts.map +1 -0
- package/dist/esm/PivotViewer/hooks/useVisibleIds.js +34 -0
- package/dist/esm/PivotViewer/hooks/useVisibleIds.js.map +1 -0
- package/dist/esm/configuration/CratisComponentsDefaults.d.ts.map +1 -1
- package/dist/esm/configuration/CratisComponentsDefaults.js +2 -0
- package/dist/esm/configuration/CratisComponentsDefaults.js.map +1 -1
- package/dist/esm/styles.DataPage.css +51 -6
- package/dist/esm/styles.DataTables.css +51 -6
- package/dist/esm/styles.SchemaEditor.css +51 -6
- package/dist/esm/styles.css +51 -6
- package/dist/esm/styles.renderer.builtin.css +51 -6
- package/dist/esm/types/parts.d.ts +4 -1
- package/dist/esm/types/parts.d.ts.map +1 -1
- package/dist/esm/types/parts.js +4 -1
- package/dist/esm/types/parts.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
import { useCardSelection } from './useCardSelection.js';
|
|
3
|
+
import { useAnimationModeTracking } from './useAnimationModeTracking.js';
|
|
4
|
+
type CardSelectionParams<TItem extends object> = Parameters<typeof useCardSelection<TItem>>[0];
|
|
5
|
+
type AnimationTrackingParams = Parameters<typeof useAnimationModeTracking>;
|
|
6
|
+
export interface UsePivotViewerInteractionsOptions<TItem extends object> extends Omit<CardSelectionParams<TItem>, 'resolveId' | 'containerRef'> {
|
|
7
|
+
containerRef: RefObject<HTMLDivElement>;
|
|
8
|
+
axisLabelsRef: RefObject<HTMLDivElement>;
|
|
9
|
+
filterState: AnimationTrackingParams[0];
|
|
10
|
+
rangeFilterState: AnimationTrackingParams[1];
|
|
11
|
+
search: AnimationTrackingParams[2];
|
|
12
|
+
activeDimensionKey: AnimationTrackingParams[3];
|
|
13
|
+
setAnimationMode: AnimationTrackingParams[5];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Wires scroll syncing, animation tracking, card selection and detail-panel closing.
|
|
17
|
+
*
|
|
18
|
+
* @param options - The viewer state and setters the interactions operate on.
|
|
19
|
+
* @returns The id resolver, card click handler and detail close handler.
|
|
20
|
+
*/
|
|
21
|
+
export declare function usePivotViewerInteractions<TItem extends object>(options: UsePivotViewerInteractionsOptions<TItem>): {
|
|
22
|
+
resolveId: (item: TItem) => number;
|
|
23
|
+
handleCardClick: (item: TItem, e: MouseEvent, id?: number | string) => void;
|
|
24
|
+
closeDetail: () => void;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=usePivotViewerInteractions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePivotViewerInteractions.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/hooks/usePivotViewerInteractions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AAGtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA4B,CAAC;AAGtE,KAAK,mBAAmB,CAAC,KAAK,SAAS,MAAM,IAAI,UAAU,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,KAAK,uBAAuB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE3E,MAAM,WAAW,iCAAiC,CAAC,KAAK,SAAS,MAAM,CACnE,SAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC;IACtE,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACxC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACnC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAC/C,gBAAgB,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;CAChD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,MAAM,EAC3D,OAAO,EAAE,iCAAiC,CAAC,KAAK,CAAC;sBA0BtC,KAAK;;;EAoDnB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { resolveInternalItemIndex } from '../utils/idResolution.js';
|
|
3
|
+
import { useCardSelection } from './useCardSelection.js';
|
|
4
|
+
import { useDetailPanelClose } from './useDetailPanelClose.js';
|
|
5
|
+
import { useScrollSync } from './useScrollSync.js';
|
|
6
|
+
import { useAnimationModeTracking } from './useAnimationModeTracking.js';
|
|
7
|
+
import { useViewModeScrollHandling } from './useViewModeScrollHandling.js';
|
|
8
|
+
|
|
9
|
+
function usePivotViewerInteractions(options) {
|
|
10
|
+
const { data, getItemId, containerRef, axisLabelsRef, viewMode, grouping, layout, selectedItem, zoomLevel, containerDimensions, preSelectionState, filterState, rangeFilterState, search, activeDimensionKey, setAnimationMode, setZoomLevel, setIsZooming, setSelectedItem, setPreSelectionState, } = options;
|
|
11
|
+
const resolveId = useCallback((item) => resolveInternalItemIndex(data, item, getItemId), [data, getItemId]);
|
|
12
|
+
useAnimationModeTracking(filterState, rangeFilterState, search, activeDimensionKey, viewMode, setAnimationMode);
|
|
13
|
+
useScrollSync(containerRef, axisLabelsRef, viewMode);
|
|
14
|
+
useViewModeScrollHandling({
|
|
15
|
+
containerRef,
|
|
16
|
+
viewMode,
|
|
17
|
+
grouping,
|
|
18
|
+
layout,
|
|
19
|
+
selectedItem,
|
|
20
|
+
zoomLevel,
|
|
21
|
+
resolveId,
|
|
22
|
+
data,
|
|
23
|
+
setPreSelectionState,
|
|
24
|
+
});
|
|
25
|
+
const handleCardClick = useCardSelection({ ...options, resolveId });
|
|
26
|
+
const closeDetail = useDetailPanelClose({
|
|
27
|
+
selectedItem,
|
|
28
|
+
preSelectionState,
|
|
29
|
+
zoomLevel,
|
|
30
|
+
viewMode,
|
|
31
|
+
layout,
|
|
32
|
+
containerRef,
|
|
33
|
+
containerDimensions,
|
|
34
|
+
grouping,
|
|
35
|
+
data,
|
|
36
|
+
resolveId,
|
|
37
|
+
setZoomLevel,
|
|
38
|
+
setIsZooming,
|
|
39
|
+
setSelectedItem,
|
|
40
|
+
setPreSelectionState,
|
|
41
|
+
});
|
|
42
|
+
return { resolveId, handleCardClick, closeDetail };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { usePivotViewerInteractions };
|
|
46
|
+
//# sourceMappingURL=usePivotViewerInteractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePivotViewerInteractions.js","sources":["../../../../PivotViewer/hooks/usePivotViewerInteractions.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 { useCallback } from 'react';\nimport type { RefObject } from 'react';\nimport { resolveInternalItemIndex } from '../utils/idResolution';\nimport { useCardSelection } from './useCardSelection';\nimport { useDetailPanelClose } from './useDetailPanelClose';\nimport { useScrollSync } from './useScrollSync';\nimport { useAnimationModeTracking } from './useAnimationModeTracking';\nimport { useViewModeScrollHandling } from './useViewModeScrollHandling';\n\ntype CardSelectionParams<TItem extends object> = Parameters<typeof useCardSelection<TItem>>[0];\ntype AnimationTrackingParams = Parameters<typeof useAnimationModeTracking>;\n\nexport interface UsePivotViewerInteractionsOptions<TItem extends object>\n extends Omit<CardSelectionParams<TItem>, 'resolveId' | 'containerRef'> {\n containerRef: RefObject<HTMLDivElement>;\n axisLabelsRef: RefObject<HTMLDivElement>;\n filterState: AnimationTrackingParams[0];\n rangeFilterState: AnimationTrackingParams[1];\n search: AnimationTrackingParams[2];\n activeDimensionKey: AnimationTrackingParams[3];\n setAnimationMode: AnimationTrackingParams[5];\n}\n\n/**\n * Wires scroll syncing, animation tracking, card selection and detail-panel closing.\n *\n * @param options - The viewer state and setters the interactions operate on.\n * @returns The id resolver, card click handler and detail close handler.\n */\nexport function usePivotViewerInteractions<TItem extends object>(\n options: UsePivotViewerInteractionsOptions<TItem>,\n) {\n const {\n data,\n getItemId,\n containerRef,\n axisLabelsRef,\n viewMode,\n grouping,\n layout,\n selectedItem,\n zoomLevel,\n containerDimensions,\n preSelectionState,\n filterState,\n rangeFilterState,\n search,\n activeDimensionKey,\n setAnimationMode,\n setZoomLevel,\n setIsZooming,\n setSelectedItem,\n setPreSelectionState,\n } = options;\n\n const resolveId = useCallback(\n (item: TItem) => resolveInternalItemIndex(data, item, getItemId),\n [data, getItemId],\n );\n\n // Track animation mode changes\n useAnimationModeTracking(\n filterState,\n rangeFilterState,\n search,\n activeDimensionKey,\n viewMode,\n setAnimationMode,\n );\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({ ...options, resolveId });\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 return { resolveId, handleCardClick, closeDetail };\n}\n"],"names":[],"mappings":";;;;;;;;AAgCM,SAAU,0BAA0B,CACtC,OAAiD,EAAA;AAEjD,IAAA,MAAM,EACF,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,oBAAoB,GACvB,GAAG,OAAO;IAEX,MAAM,SAAS,GAAG,WAAW,CACzB,CAAC,IAAW,KAAK,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,EAChE,CAAC,IAAI,EAAE,SAAS,CAAC,CACpB;AAGD,IAAA,wBAAwB,CACpB,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,CACnB;AAGD,IAAA,aAAa,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC;AAGpD,IAAA,yBAAyB,CAAC;QACtB,YAAY;QACZ,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,SAAS;QACT,SAAS;QACT,IAAI;QACJ,oBAAoB;AACvB,KAAA,CAAC;IAGF,MAAM,eAAe,GAAG,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC;IAGnE,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACpC,YAAY;QACZ,iBAAiB;QACjB,SAAS;QACT,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,mBAAmB;QACnB,QAAQ;QACR,IAAI;QACJ,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,eAAe;QACf,oBAAoB;AACvB,KAAA,CAAC;AAEF,IAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE;AACtD;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GroupSpec, GroupingResult } from '../engine/types.js';
|
|
2
|
+
import type { ViewMode } from '../components/Toolbar.js';
|
|
3
|
+
/** Inputs for {@link useRawGrouping}. */
|
|
4
|
+
export interface UseRawGroupingOptions {
|
|
5
|
+
ready: boolean;
|
|
6
|
+
visibleIds: Uint32Array;
|
|
7
|
+
currentGroupBy: GroupSpec;
|
|
8
|
+
viewMode: ViewMode;
|
|
9
|
+
activeDimensionKey: string | null;
|
|
10
|
+
computeGrouping: (visibleIds: Uint32Array, groupBy: GroupSpec) => Promise<GroupingResult>;
|
|
11
|
+
sortIds: (visibleIds: Uint32Array, sortBy: string) => Promise<Uint32Array>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Computes the (unpresented) grouping of the visible ids. Every async branch ignores a result
|
|
15
|
+
* after its dependencies change, so an older worker response can never overwrite a newer
|
|
16
|
+
* filter/search/view selection.
|
|
17
|
+
*
|
|
18
|
+
* @param options - Engine, view mode and visible ids.
|
|
19
|
+
* @returns The raw grouping result.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useRawGrouping({ ready, visibleIds, currentGroupBy, viewMode, activeDimensionKey, computeGrouping, sortIds, }: UseRawGroupingOptions): GroupingResult;
|
|
22
|
+
//# sourceMappingURL=useRawGrouping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRawGrouping.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/hooks/useRawGrouping.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAAuB,CAAC;AAEtD,yCAAyC;AACzC,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,WAAW,CAAC;IACxB,cAAc,EAAE,SAAS,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1F,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9E;AAiBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAC3B,KAAK,EACL,UAAU,EACV,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,OAAO,GACV,EAAE,qBAAqB,GAAG,cAAc,CAsCxC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function singleGroup(ids) {
|
|
4
|
+
return {
|
|
5
|
+
groups: [
|
|
6
|
+
{
|
|
7
|
+
key: 'all',
|
|
8
|
+
label: 'All Items',
|
|
9
|
+
value: 'all',
|
|
10
|
+
ids,
|
|
11
|
+
count: ids.length,
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function useRawGrouping({ ready, visibleIds, currentGroupBy, viewMode, activeDimensionKey, computeGrouping, sortIds, }) {
|
|
17
|
+
const [rawGrouping, setRawGrouping] = useState({ groups: [] });
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!ready || visibleIds.length === 0) {
|
|
20
|
+
setRawGrouping({ groups: [] });
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
let cancelled = false;
|
|
24
|
+
if (viewMode !== 'collection') {
|
|
25
|
+
void computeGrouping(visibleIds, currentGroupBy).then((result) => {
|
|
26
|
+
if (!cancelled)
|
|
27
|
+
setRawGrouping(result);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else if (activeDimensionKey) {
|
|
31
|
+
void sortIds(visibleIds, activeDimensionKey).then((sortedIds) => {
|
|
32
|
+
if (cancelled)
|
|
33
|
+
return;
|
|
34
|
+
setRawGrouping(singleGroup(sortedIds));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
setRawGrouping(singleGroup(visibleIds));
|
|
39
|
+
}
|
|
40
|
+
return () => {
|
|
41
|
+
cancelled = true;
|
|
42
|
+
};
|
|
43
|
+
}, [
|
|
44
|
+
ready,
|
|
45
|
+
visibleIds,
|
|
46
|
+
currentGroupBy,
|
|
47
|
+
viewMode,
|
|
48
|
+
computeGrouping,
|
|
49
|
+
sortIds,
|
|
50
|
+
activeDimensionKey,
|
|
51
|
+
]);
|
|
52
|
+
return rawGrouping;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { useRawGrouping };
|
|
56
|
+
//# sourceMappingURL=useRawGrouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRawGrouping.js","sources":["../../../../PivotViewer/hooks/useRawGrouping.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 { useEffect, useState } from 'react';\nimport type { GroupSpec, GroupingResult } from '../engine/types';\nimport type { ViewMode } from '../components/Toolbar';\n\n/** Inputs for {@link useRawGrouping}. */\nexport interface UseRawGroupingOptions {\n ready: boolean;\n visibleIds: Uint32Array;\n currentGroupBy: GroupSpec;\n viewMode: ViewMode;\n activeDimensionKey: string | null;\n computeGrouping: (visibleIds: Uint32Array, groupBy: GroupSpec) => Promise<GroupingResult>;\n sortIds: (visibleIds: Uint32Array, sortBy: string) => Promise<Uint32Array>;\n}\n\n/** The single \"all items\" group shown in collection mode. */\nfunction singleGroup(ids: Uint32Array): GroupingResult {\n return {\n groups: [\n {\n key: 'all',\n label: 'All Items',\n value: 'all',\n ids,\n count: ids.length,\n },\n ],\n };\n}\n\n/**\n * Computes the (unpresented) grouping of the visible ids. Every async branch ignores a result\n * after its dependencies change, so an older worker response can never overwrite a newer\n * filter/search/view selection.\n *\n * @param options - Engine, view mode and visible ids.\n * @returns The raw grouping result.\n */\nexport function useRawGrouping({\n ready,\n visibleIds,\n currentGroupBy,\n viewMode,\n activeDimensionKey,\n computeGrouping,\n sortIds,\n}: UseRawGroupingOptions): GroupingResult {\n const [rawGrouping, setRawGrouping] = useState<GroupingResult>({ groups: [] });\n\n useEffect(() => {\n if (!ready || visibleIds.length === 0) {\n setRawGrouping({ groups: [] });\n return;\n }\n\n let cancelled = false;\n if (viewMode !== 'collection') {\n void computeGrouping(visibleIds, currentGroupBy).then((result) => {\n if (!cancelled) setRawGrouping(result);\n });\n } else if (activeDimensionKey) {\n // In collection mode, create a single group with all items.\n void sortIds(visibleIds, activeDimensionKey).then((sortedIds) => {\n if (cancelled) return;\n setRawGrouping(singleGroup(sortedIds));\n });\n } else {\n setRawGrouping(singleGroup(visibleIds));\n }\n\n return () => {\n cancelled = true;\n };\n }, [\n ready,\n visibleIds,\n currentGroupBy,\n viewMode,\n computeGrouping,\n sortIds,\n activeDimensionKey,\n ]);\n\n return rawGrouping;\n}\n"],"names":[],"mappings":";;AAmBA,SAAS,WAAW,CAAC,GAAgB,EAAA;IACjC,OAAO;AACH,QAAA,MAAM,EAAE;AACJ,YAAA;AACI,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,KAAK,EAAE,KAAK;gBACZ,GAAG;gBACH,KAAK,EAAE,GAAG,CAAC,MAAM;AACpB,aAAA;AACJ,SAAA;KACJ;AACL;SAUgB,cAAc,CAAC,EAC3B,KAAK,EACL,UAAU,EACV,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,OAAO,GACa,EAAA;AACpB,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAE9E,SAAS,CAAC,MAAK;QACX,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC9B;QACJ;QAEA,IAAI,SAAS,GAAG,KAAK;AACrB,QAAA,IAAI,QAAQ,KAAK,YAAY,EAAE;AAC3B,YAAA,KAAK,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC7D,gBAAA,IAAI,CAAC,SAAS;oBAAE,cAAc,CAAC,MAAM,CAAC;AAC1C,YAAA,CAAC,CAAC;QACN;aAAO,IAAI,kBAAkB,EAAE;AAE3B,YAAA,KAAK,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAI;AAC5D,gBAAA,IAAI,SAAS;oBAAE;AACf,gBAAA,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3C;AAEA,QAAA,OAAO,MAAK;YACR,SAAS,GAAG,IAAI;AACpB,QAAA,CAAC;AACL,IAAA,CAAC,EAAE;QACC,KAAK;QACL,UAAU;QACV,cAAc;QACd,QAAQ;QACR,eAAe;QACf,OAAO;QACP,kBAAkB;AACrB,KAAA,CAAC;AAEF,IAAA,OAAO,WAAW;AACtB;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Reports the container's scroll offset whenever it scrolls.
|
|
4
|
+
*
|
|
5
|
+
* @param containerRef - The scrollable container.
|
|
6
|
+
* @param setScrollPosition - Receives the new scroll offset.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useScrollPositionTracking(containerRef: RefObject<HTMLDivElement>, setScrollPosition: (position: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}) => void): void;
|
|
12
|
+
//# sourceMappingURL=useScrollPositionTracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollPositionTracking.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/hooks/useScrollPositionTracking.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACrC,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,EACvC,iBAAiB,EAAE,CAAC,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,QAgBlE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function useScrollPositionTracking(containerRef, setScrollPosition) {
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
const container = containerRef.current;
|
|
6
|
+
if (!container)
|
|
7
|
+
return;
|
|
8
|
+
const handleScroll = () => {
|
|
9
|
+
setScrollPosition({
|
|
10
|
+
x: container.scrollLeft,
|
|
11
|
+
y: container.scrollTop,
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
container.addEventListener('scroll', handleScroll);
|
|
15
|
+
return () => container.removeEventListener('scroll', handleScroll);
|
|
16
|
+
}, [containerRef, setScrollPosition]);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { useScrollPositionTracking };
|
|
20
|
+
//# sourceMappingURL=useScrollPositionTracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollPositionTracking.js","sources":["../../../../PivotViewer/hooks/useScrollPositionTracking.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 { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\n/**\n * Reports the container's scroll offset whenever it scrolls.\n *\n * @param containerRef - The scrollable container.\n * @param setScrollPosition - Receives the new scroll offset.\n */\nexport function useScrollPositionTracking(\n containerRef: RefObject<HTMLDivElement>,\n setScrollPosition: (position: { x: number; y: number }) => void,\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 }, [containerRef, setScrollPosition]);\n}\n"],"names":[],"mappings":";;AAYM,SAAU,yBAAyB,CACrC,YAAuC,EACvC,iBAA+D,EAAA;IAE/D,SAAS,CAAC,MAAK;AACX,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO;AACtC,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,MAAM,YAAY,GAAG,MAAK;AACtB,YAAA,iBAAiB,CAAC;gBACd,CAAC,EAAE,SAAS,CAAC,UAAU;gBACvB,CAAC,EAAE,SAAS,CAAC,SAAS;AACzB,aAAA,CAAC;AACN,QAAA,CAAC;AAED,QAAA,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;QAClD,OAAO,MAAM,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC;AACtE,IAAA,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AACzC;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GroupingResult } from '../engine/types.js';
|
|
2
|
+
import type { ViewMode } from '../components/Toolbar.js';
|
|
3
|
+
/**
|
|
4
|
+
* Computes the card layout at base dimensions (zoom is applied as a transform).
|
|
5
|
+
*
|
|
6
|
+
* @param grouping - The presented grouping to lay out.
|
|
7
|
+
* @param viewMode - The current view mode.
|
|
8
|
+
* @param zoomLevel - The current zoom level.
|
|
9
|
+
* @param containerDimensions - The measured container size.
|
|
10
|
+
* @returns The computed layout.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useViewerLayout(grouping: GroupingResult, viewMode: ViewMode, zoomLevel: number, containerDimensions: {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}): import("../engine/types.js").LayoutResult;
|
|
16
|
+
//# sourceMappingURL=useViewerLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useViewerLayout.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/hooks/useViewerLayout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAiB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAAuB,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,6CA0BzD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { computeLayout } from '../engine/layout.js';
|
|
3
|
+
import { BASE_CARD_WIDTH, BASE_CARD_HEIGHT, CARDS_PER_COLUMN } from '../constants.js';
|
|
4
|
+
|
|
5
|
+
function useViewerLayout(grouping, viewMode, zoomLevel, containerDimensions) {
|
|
6
|
+
return useMemo(() => {
|
|
7
|
+
const containerWidth = containerDimensions.width / zoomLevel;
|
|
8
|
+
const containerHeight = viewMode === 'collection'
|
|
9
|
+
? containerDimensions.height / zoomLevel
|
|
10
|
+
: containerDimensions.height;
|
|
11
|
+
return computeLayout(grouping, {
|
|
12
|
+
viewMode,
|
|
13
|
+
cardWidth: BASE_CARD_WIDTH,
|
|
14
|
+
cardHeight: BASE_CARD_HEIGHT,
|
|
15
|
+
cardsPerColumn: CARDS_PER_COLUMN,
|
|
16
|
+
containerWidth,
|
|
17
|
+
containerHeight,
|
|
18
|
+
});
|
|
19
|
+
}, [
|
|
20
|
+
grouping,
|
|
21
|
+
viewMode,
|
|
22
|
+
zoomLevel,
|
|
23
|
+
containerDimensions.width,
|
|
24
|
+
containerDimensions.height,
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { useViewerLayout };
|
|
29
|
+
//# sourceMappingURL=useViewerLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useViewerLayout.js","sources":["../../../../PivotViewer/hooks/useViewerLayout.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 { useMemo } from 'react';\nimport type { GroupingResult } from '../engine/types';\nimport { computeLayout } from '../engine/layout';\nimport { BASE_CARD_WIDTH, BASE_CARD_HEIGHT, CARDS_PER_COLUMN, GROUP_SPACING } from '../constants';\nimport type { ViewMode } from '../components/Toolbar';\n\n/**\n * Computes the card layout at base dimensions (zoom is applied as a transform).\n *\n * @param grouping - The presented grouping to lay out.\n * @param viewMode - The current view mode.\n * @param zoomLevel - The current zoom level.\n * @param containerDimensions - The measured container size.\n * @returns The computed layout.\n */\nexport function useViewerLayout(\n grouping: GroupingResult,\n viewMode: ViewMode,\n zoomLevel: number,\n containerDimensions: { width: number; height: number },\n) {\n return useMemo(() => {\n const containerWidth = containerDimensions.width / zoomLevel;\n // For grouped mode, use fixed container height to ensure stable layout during zoom\n const containerHeight =\n viewMode === 'collection'\n ? containerDimensions.height / zoomLevel\n : containerDimensions.height;\n\n return computeLayout(grouping, {\n viewMode,\n cardWidth: BASE_CARD_WIDTH,\n cardHeight: BASE_CARD_HEIGHT,\n cardsPerColumn: CARDS_PER_COLUMN,\n groupSpacing: GROUP_SPACING,\n containerWidth,\n containerHeight,\n });\n }, [\n grouping,\n viewMode,\n zoomLevel,\n containerDimensions.width,\n containerDimensions.height,\n ]);\n}\n"],"names":[],"mappings":";;;;AAkBM,SAAU,eAAe,CAC3B,QAAwB,EACxB,QAAkB,EAClB,SAAiB,EACjB,mBAAsD,EAAA;IAEtD,OAAO,OAAO,CAAC,MAAK;AAChB,QAAA,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,GAAG,SAAS;AAE5D,QAAA,MAAM,eAAe,GACjB,QAAQ,KAAK;AACT,cAAE,mBAAmB,CAAC,MAAM,GAAG;AAC/B,cAAE,mBAAmB,CAAC,MAAM;QAEpC,OAAO,aAAa,CAAC,QAAQ,EAAE;YAC3B,QAAQ;AACR,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,UAAU,EAAE,gBAAgB;AAC5B,YAAA,cAAc,EAAE,gBAAgB;AAChC,YACA,cAAc;YACd,eAAe;AAClB,SAAA,CAAC;AACN,IAAA,CAAC,EAAE;QACC,QAAQ;QACR,QAAQ;QACR,SAAS;AACT,QAAA,mBAAmB,CAAC,KAAK;AACzB,QAAA,mBAAmB,CAAC,MAAM;AAC7B,KAAA,CAAC;AACN;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FilterSpec, FilterResult } from '../engine/types.js';
|
|
2
|
+
import type { PivotViewerProps } from '../types.js';
|
|
3
|
+
/** Inputs for {@link useVisibleIds}. */
|
|
4
|
+
export interface UseVisibleIdsOptions<TItem extends object> {
|
|
5
|
+
ready: boolean;
|
|
6
|
+
data: TItem[];
|
|
7
|
+
currentFilters: FilterSpec[];
|
|
8
|
+
search: string;
|
|
9
|
+
searchFields: PivotViewerProps<TItem>['searchFields'];
|
|
10
|
+
engineApplyFilters: (filters: FilterSpec[]) => Promise<FilterResult>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Applies filters, then narrows the result by search - a post-filter step over the visible
|
|
14
|
+
* Uint32 ids so it applies identically whether the engine result came from the worker or
|
|
15
|
+
* its synchronous fallback.
|
|
16
|
+
*
|
|
17
|
+
* @param options - Engine, data, filters and search inputs.
|
|
18
|
+
* @returns The ids currently visible.
|
|
19
|
+
*/
|
|
20
|
+
export declare function useVisibleIds<TItem extends object>({ ready, data, currentFilters, search, searchFields, engineApplyFilters, }: UseVisibleIdsOptions<TItem>): Uint32Array;
|
|
21
|
+
//# sourceMappingURL=useVisibleIds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVisibleIds.d.ts","sourceRoot":"","sources":["../../../../PivotViewer/hooks/useVisibleIds.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAU,CAAC;AAEjD,wCAAwC;AACxC,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,MAAM;IACtD,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;IACtD,kBAAkB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACxE;AAWD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,MAAM,EAAE,EAChD,KAAK,EACL,IAAI,EACJ,cAAc,EACd,MAAM,EACN,YAAY,EACZ,kBAAkB,GACrB,EAAE,oBAAoB,CAAC,KAAK,CAAC,GAAG,WAAW,CAyB3C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
import { filterVisibleIdsBySearch } from '../utils/search.js';
|
|
3
|
+
|
|
4
|
+
function allIds(count) {
|
|
5
|
+
const ids = new Uint32Array(count);
|
|
6
|
+
for (let i = 0; i < count; i++) {
|
|
7
|
+
ids[i] = i;
|
|
8
|
+
}
|
|
9
|
+
return ids;
|
|
10
|
+
}
|
|
11
|
+
function useVisibleIds({ ready, data, currentFilters, search, searchFields, engineApplyFilters, }) {
|
|
12
|
+
const [visibleIds, setVisibleIds] = useState(new Uint32Array(0));
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!ready)
|
|
15
|
+
return;
|
|
16
|
+
let cancelled = false;
|
|
17
|
+
void engineApplyFilters(currentFilters).then((result) => {
|
|
18
|
+
if (cancelled)
|
|
19
|
+
return;
|
|
20
|
+
let ids = result.visibleIds;
|
|
21
|
+
if (ids.length === 0 && currentFilters.length === 0 && data.length > 0) {
|
|
22
|
+
ids = allIds(data.length);
|
|
23
|
+
}
|
|
24
|
+
setVisibleIds(filterVisibleIdsBySearch(data, ids, search, searchFields));
|
|
25
|
+
});
|
|
26
|
+
return () => {
|
|
27
|
+
cancelled = true;
|
|
28
|
+
};
|
|
29
|
+
}, [ready, currentFilters, engineApplyFilters, data, search, searchFields]);
|
|
30
|
+
return visibleIds;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { useVisibleIds };
|
|
34
|
+
//# sourceMappingURL=useVisibleIds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVisibleIds.js","sources":["../../../../PivotViewer/hooks/useVisibleIds.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 { useEffect, useState } from 'react';\nimport type { FilterSpec, FilterResult } from '../engine/types';\nimport { filterVisibleIdsBySearch } from '../utils/search';\nimport type { PivotViewerProps } from '../types';\n\n/** Inputs for {@link useVisibleIds}. */\nexport interface UseVisibleIdsOptions<TItem extends object> {\n ready: boolean;\n data: TItem[];\n currentFilters: FilterSpec[];\n search: string;\n searchFields: PivotViewerProps<TItem>['searchFields'];\n engineApplyFilters: (filters: FilterSpec[]) => Promise<FilterResult>;\n}\n\n/** The full dataset's ids, used when the engine returns nothing while no filters are active. */\nfunction allIds(count: number): Uint32Array {\n const ids = new Uint32Array(count);\n for (let i = 0; i < count; i++) {\n ids[i] = i;\n }\n return ids;\n}\n\n/**\n * Applies filters, then narrows the result by search - a post-filter step over the visible\n * Uint32 ids so it applies identically whether the engine result came from the worker or\n * its synchronous fallback.\n *\n * @param options - Engine, data, filters and search inputs.\n * @returns The ids currently visible.\n */\nexport function useVisibleIds<TItem extends object>({\n ready,\n data,\n currentFilters,\n search,\n searchFields,\n engineApplyFilters,\n}: UseVisibleIdsOptions<TItem>): Uint32Array {\n const [visibleIds, setVisibleIds] = useState<Uint32Array>(new Uint32Array(0));\n\n useEffect(() => {\n if (!ready) return;\n\n let cancelled = false;\n void engineApplyFilters(currentFilters).then((result) => {\n if (cancelled) return;\n let ids = result.visibleIds;\n\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 (ids.length === 0 && currentFilters.length === 0 && data.length > 0) {\n ids = allIds(data.length);\n }\n\n setVisibleIds(filterVisibleIdsBySearch(data, ids, search, searchFields));\n });\n return () => {\n cancelled = true;\n };\n }, [ready, currentFilters, engineApplyFilters, data, search, searchFields]);\n\n return visibleIds;\n}\n"],"names":[],"mappings":";;;AAmBA,SAAS,MAAM,CAAC,KAAa,EAAA;AACzB,IAAA,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AAClC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACd;AACA,IAAA,OAAO,GAAG;AACd;AAUM,SAAU,aAAa,CAAuB,EAChD,KAAK,EACL,IAAI,EACJ,cAAc,EACd,MAAM,EACN,YAAY,EACZ,kBAAkB,GACQ,EAAA;AAC1B,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAc,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7E,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,IAAI,SAAS,GAAG,KAAK;QACrB,KAAK,kBAAkB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACpD,YAAA,IAAI,SAAS;gBAAE;AACf,YAAA,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU;AAI3B,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,gBAAA,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B;AAEA,YAAA,aAAa,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5E,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAK;YACR,SAAS,GAAG,IAAI;AACpB,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAE3E,IAAA,OAAO,UAAU;AACrB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CratisComponentsDefaults.d.ts","sourceRoot":"","sources":["../../../configuration/CratisComponentsDefaults.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAoC,CAAC;AAEjF,sDAAsD;AACtD,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"CratisComponentsDefaults.d.ts","sourceRoot":"","sources":["../../../configuration/CratisComponentsDefaults.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAoC,CAAC;AAEjF,sDAAsD;AACtD,eAAO,MAAM,cAAc,EAAE,sBAiE5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CratisComponentsDefaults.js","sources":["../../../configuration/CratisComponentsDefaults.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 { CratisComponentsConfig } from '../Common/CratisComponentsProvider';\n\n/** Default locale and English Components messages. */\nexport const cratisDefaults: CratisComponentsConfig = {\n locale: 'en-US',\n messages: {\n paginator: {\n navigation: 'Pagination',\n first: 'First page',\n previous: 'Previous page',\n next: 'Next page',\n last: 'Last page',\n },\n datePicker: {\n today: 'Today',\n clear: 'Clear',\n openCalendar: 'Open calendar',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n label: 'Date',\n },\n dropdown: {\n showOptions: 'Show options',\n clearSelection: 'Clear selection',\n },\n dialog: {\n ok: 'Ok',\n cancel: 'Cancel',\n yes: 'Yes',\n no: 'No',\n close: 'Close',\n },\n stepper: {\n next: 'Next',\n previous: 'Previous',\n submit: 'Submit',\n },\n notifications: {\n dismiss: 'Dismiss',\n region: 'Notifications',\n },\n dataTable: {\n selectRow: 'Select row',\n selectAllRows: 'Select all rows',\n search: 'Search…',\n searchAriaLabel: 'Search table',\n loading: 'Loading…',\n failed: 'Could not load data.',\n unauthorized: 'You are not authorized to view this data.',\n },\n filter: {\n label: 'Filters',\n // Leave searchAriaLabel unset: existing placeholders remain search names by default.\n },\n columnFilter: {\n matchModeAriaLabel: 'Match mode',\n clear: 'Clear',\n apply: 'Apply',\n true: 'True',\n false: 'False',\n },\n toolbar: {\n label: 'Tools',\n closeDrawer: 'Close',\n },\n },\n};\n"],"names":[],"mappings":"AAMO,MAAM,cAAc,GAA2B;AAClD,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,QAAQ,EAAE;AACN,QAAA,SAAS,EAAE;AACP,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"CratisComponentsDefaults.js","sources":["../../../configuration/CratisComponentsDefaults.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 { CratisComponentsConfig } from '../Common/CratisComponentsProvider';\n\n/** Default locale and English Components messages. */\nexport const cratisDefaults: CratisComponentsConfig = {\n locale: 'en-US',\n messages: {\n paginator: {\n navigation: 'Pagination',\n first: 'First page',\n previous: 'Previous page',\n next: 'Next page',\n last: 'Last page',\n page: (page) => `Page ${page}`,\n pages: 'Pages',\n },\n datePicker: {\n today: 'Today',\n clear: 'Clear',\n openCalendar: 'Open calendar',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n label: 'Date',\n },\n dropdown: {\n showOptions: 'Show options',\n clearSelection: 'Clear selection',\n },\n dialog: {\n ok: 'Ok',\n cancel: 'Cancel',\n yes: 'Yes',\n no: 'No',\n close: 'Close',\n },\n stepper: {\n next: 'Next',\n previous: 'Previous',\n submit: 'Submit',\n },\n notifications: {\n dismiss: 'Dismiss',\n region: 'Notifications',\n },\n dataTable: {\n selectRow: 'Select row',\n selectAllRows: 'Select all rows',\n search: 'Search…',\n searchAriaLabel: 'Search table',\n loading: 'Loading…',\n failed: 'Could not load data.',\n unauthorized: 'You are not authorized to view this data.',\n },\n filter: {\n label: 'Filters',\n // Leave searchAriaLabel unset: existing placeholders remain search names by default.\n },\n columnFilter: {\n matchModeAriaLabel: 'Match mode',\n clear: 'Clear',\n apply: 'Apply',\n true: 'True',\n false: 'False',\n },\n toolbar: {\n label: 'Tools',\n closeDrawer: 'Close',\n },\n },\n};\n"],"names":[],"mappings":"AAMO,MAAM,cAAc,GAA2B;AAClD,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,QAAQ,EAAE;AACN,QAAA,SAAS,EAAE;AACP,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,CAAC,IAAI,KAAK,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE;AAC9B,YAAA,KAAK,EAAE,OAAO;AACjB,SAAA;AACD,QAAA,UAAU,EAAE;AACR,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,aAAa,EAAE,gBAAgB;AAC/B,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,KAAK,EAAE,MAAM;AAChB,SAAA;AACD,QAAA,QAAQ,EAAE;AACN,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,cAAc,EAAE,iBAAiB;AACpC,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,KAAK,EAAE,OAAO;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;AACL,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,MAAM,EAAE,QAAQ;AACnB,SAAA;AACD,QAAA,aAAa,EAAE;AACX,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,eAAe;AAC1B,SAAA;AACD,QAAA,SAAS,EAAE;AACP,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,aAAa,EAAE,iBAAiB;AAChC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,eAAe,EAAE,cAAc;AAC/B,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,YAAY,EAAE,2CAA2C;AAC5D,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,KAAK,EAAE,SAAS;AAEnB,SAAA;AACD,QAAA,YAAY,EAAE;AACV,YAAA,kBAAkB,EAAE,YAAY;AAChC,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,OAAO;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;AACL,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,WAAW,EAAE,OAAO;AACvB,SAAA;AACJ,KAAA;;;"}
|
|
@@ -1501,25 +1501,70 @@
|
|
|
1501
1501
|
/* Copyright (c) Cratis. All rights reserved. */
|
|
1502
1502
|
/* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
|
|
1503
1503
|
|
|
1504
|
-
.cratis-table-paginator
|
|
1504
|
+
.cratis-table-paginator,
|
|
1505
|
+
.cratis-table-paginator-pages {
|
|
1505
1506
|
display: flex;
|
|
1506
1507
|
align-items: center;
|
|
1507
|
-
justify-content: center;
|
|
1508
1508
|
gap: 0.25rem;
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
.cratis-table-paginator {
|
|
1512
|
+
justify-content: center;
|
|
1509
1513
|
padding: 0.25rem;
|
|
1510
1514
|
}
|
|
1511
1515
|
|
|
1512
|
-
.cratis-table-paginator-info
|
|
1513
|
-
|
|
1516
|
+
.cratis-table-paginator-info,
|
|
1517
|
+
.cratis-table-paginator-ellipsis,
|
|
1518
|
+
.cratis-table-paginator-range {
|
|
1514
1519
|
color: var(--cratis-text-color-secondary);
|
|
1515
1520
|
padding: 0 0.5rem;
|
|
1516
1521
|
}
|
|
1517
1522
|
|
|
1523
|
+
.cratis-table-paginator-info {
|
|
1524
|
+
font-size: 0.875rem;
|
|
1525
|
+
}
|
|
1526
|
+
|
|
1527
|
+
.cratis-table-paginator-page {
|
|
1528
|
+
min-width: var(--cratis-control-height);
|
|
1529
|
+
min-height: var(--cratis-control-height);
|
|
1530
|
+
padding: 0.5rem;
|
|
1531
|
+
border: 1px solid transparent;
|
|
1532
|
+
border-radius: var(--cratis-border-radius);
|
|
1533
|
+
background: transparent;
|
|
1534
|
+
color: var(--cratis-text-color);
|
|
1535
|
+
font: inherit;
|
|
1536
|
+
font-weight: 600;
|
|
1537
|
+
cursor: pointer;
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
.cratis-table-paginator-page:hover:not(:disabled, [data-selected]) {
|
|
1541
|
+
background: color-mix(in srgb, currentColor 4%, transparent);
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
.cratis-table-paginator-page[data-selected] {
|
|
1545
|
+
border-color: var(--cratis-action-background);
|
|
1546
|
+
background: var(--cratis-action-background);
|
|
1547
|
+
color: var(--cratis-action-text);
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1550
|
+
.cratis-table-paginator-page:focus-visible {
|
|
1551
|
+
outline: none;
|
|
1552
|
+
box-shadow: var(--cratis-focus-ring);
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
@media (forced-colors: active) {
|
|
1556
|
+
.cratis-table-paginator-page:focus-visible {
|
|
1557
|
+
outline: 2px solid Highlight;
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
.cratis-table-paginator-page[data-selected] {
|
|
1561
|
+
border-color: Highlight;
|
|
1562
|
+
}
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1518
1565
|
.cratis-table-paginator-range {
|
|
1519
1566
|
font-size: 0.8125rem;
|
|
1520
|
-
color: var(--cratis-text-color-secondary);
|
|
1521
1567
|
margin-right: auto;
|
|
1522
|
-
padding: 0 0.5rem;
|
|
1523
1568
|
}
|
|
1524
1569
|
|
|
1525
1570
|
/* ── ./Dropdown/Dropdown.css ─────────────────────────────────────── */
|
|
@@ -1300,25 +1300,70 @@
|
|
|
1300
1300
|
/* Copyright (c) Cratis. All rights reserved. */
|
|
1301
1301
|
/* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
|
|
1302
1302
|
|
|
1303
|
-
.cratis-table-paginator
|
|
1303
|
+
.cratis-table-paginator,
|
|
1304
|
+
.cratis-table-paginator-pages {
|
|
1304
1305
|
display: flex;
|
|
1305
1306
|
align-items: center;
|
|
1306
|
-
justify-content: center;
|
|
1307
1307
|
gap: 0.25rem;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
.cratis-table-paginator {
|
|
1311
|
+
justify-content: center;
|
|
1308
1312
|
padding: 0.25rem;
|
|
1309
1313
|
}
|
|
1310
1314
|
|
|
1311
|
-
.cratis-table-paginator-info
|
|
1312
|
-
|
|
1315
|
+
.cratis-table-paginator-info,
|
|
1316
|
+
.cratis-table-paginator-ellipsis,
|
|
1317
|
+
.cratis-table-paginator-range {
|
|
1313
1318
|
color: var(--cratis-text-color-secondary);
|
|
1314
1319
|
padding: 0 0.5rem;
|
|
1315
1320
|
}
|
|
1316
1321
|
|
|
1322
|
+
.cratis-table-paginator-info {
|
|
1323
|
+
font-size: 0.875rem;
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
.cratis-table-paginator-page {
|
|
1327
|
+
min-width: var(--cratis-control-height);
|
|
1328
|
+
min-height: var(--cratis-control-height);
|
|
1329
|
+
padding: 0.5rem;
|
|
1330
|
+
border: 1px solid transparent;
|
|
1331
|
+
border-radius: var(--cratis-border-radius);
|
|
1332
|
+
background: transparent;
|
|
1333
|
+
color: var(--cratis-text-color);
|
|
1334
|
+
font: inherit;
|
|
1335
|
+
font-weight: 600;
|
|
1336
|
+
cursor: pointer;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
.cratis-table-paginator-page:hover:not(:disabled, [data-selected]) {
|
|
1340
|
+
background: color-mix(in srgb, currentColor 4%, transparent);
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
.cratis-table-paginator-page[data-selected] {
|
|
1344
|
+
border-color: var(--cratis-action-background);
|
|
1345
|
+
background: var(--cratis-action-background);
|
|
1346
|
+
color: var(--cratis-action-text);
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.cratis-table-paginator-page:focus-visible {
|
|
1350
|
+
outline: none;
|
|
1351
|
+
box-shadow: var(--cratis-focus-ring);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
@media (forced-colors: active) {
|
|
1355
|
+
.cratis-table-paginator-page:focus-visible {
|
|
1356
|
+
outline: 2px solid Highlight;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.cratis-table-paginator-page[data-selected] {
|
|
1360
|
+
border-color: Highlight;
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1317
1364
|
.cratis-table-paginator-range {
|
|
1318
1365
|
font-size: 0.8125rem;
|
|
1319
|
-
color: var(--cratis-text-color-secondary);
|
|
1320
1366
|
margin-right: auto;
|
|
1321
|
-
padding: 0 0.5rem;
|
|
1322
1367
|
}
|
|
1323
1368
|
|
|
1324
1369
|
/* ── ./Dropdown/Dropdown.css ─────────────────────────────────────── */
|
|
@@ -1300,25 +1300,70 @@
|
|
|
1300
1300
|
/* Copyright (c) Cratis. All rights reserved. */
|
|
1301
1301
|
/* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
|
|
1302
1302
|
|
|
1303
|
-
.cratis-table-paginator
|
|
1303
|
+
.cratis-table-paginator,
|
|
1304
|
+
.cratis-table-paginator-pages {
|
|
1304
1305
|
display: flex;
|
|
1305
1306
|
align-items: center;
|
|
1306
|
-
justify-content: center;
|
|
1307
1307
|
gap: 0.25rem;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
.cratis-table-paginator {
|
|
1311
|
+
justify-content: center;
|
|
1308
1312
|
padding: 0.25rem;
|
|
1309
1313
|
}
|
|
1310
1314
|
|
|
1311
|
-
.cratis-table-paginator-info
|
|
1312
|
-
|
|
1315
|
+
.cratis-table-paginator-info,
|
|
1316
|
+
.cratis-table-paginator-ellipsis,
|
|
1317
|
+
.cratis-table-paginator-range {
|
|
1313
1318
|
color: var(--cratis-text-color-secondary);
|
|
1314
1319
|
padding: 0 0.5rem;
|
|
1315
1320
|
}
|
|
1316
1321
|
|
|
1322
|
+
.cratis-table-paginator-info {
|
|
1323
|
+
font-size: 0.875rem;
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
.cratis-table-paginator-page {
|
|
1327
|
+
min-width: var(--cratis-control-height);
|
|
1328
|
+
min-height: var(--cratis-control-height);
|
|
1329
|
+
padding: 0.5rem;
|
|
1330
|
+
border: 1px solid transparent;
|
|
1331
|
+
border-radius: var(--cratis-border-radius);
|
|
1332
|
+
background: transparent;
|
|
1333
|
+
color: var(--cratis-text-color);
|
|
1334
|
+
font: inherit;
|
|
1335
|
+
font-weight: 600;
|
|
1336
|
+
cursor: pointer;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
.cratis-table-paginator-page:hover:not(:disabled, [data-selected]) {
|
|
1340
|
+
background: color-mix(in srgb, currentColor 4%, transparent);
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
.cratis-table-paginator-page[data-selected] {
|
|
1344
|
+
border-color: var(--cratis-action-background);
|
|
1345
|
+
background: var(--cratis-action-background);
|
|
1346
|
+
color: var(--cratis-action-text);
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.cratis-table-paginator-page:focus-visible {
|
|
1350
|
+
outline: none;
|
|
1351
|
+
box-shadow: var(--cratis-focus-ring);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
@media (forced-colors: active) {
|
|
1355
|
+
.cratis-table-paginator-page:focus-visible {
|
|
1356
|
+
outline: 2px solid Highlight;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.cratis-table-paginator-page[data-selected] {
|
|
1360
|
+
border-color: Highlight;
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1317
1364
|
.cratis-table-paginator-range {
|
|
1318
1365
|
font-size: 0.8125rem;
|
|
1319
|
-
color: var(--cratis-text-color-secondary);
|
|
1320
1366
|
margin-right: auto;
|
|
1321
|
-
padding: 0 0.5rem;
|
|
1322
1367
|
}
|
|
1323
1368
|
|
|
1324
1369
|
/* ── ./Display/Display.css ─────────────────────────────────────── */
|