Skip to content

Pivot Config

For calculation input policies, defaults, execution pins, count meanings and numeric limits, see Aggregation policies. Signatures below describe the current supported exports; a server capability advertisement does not establish equivalent local/server results.

Field-library search and empty-state presentation shared by both state adapters.

export function FieldsPanel({ search, empty, emptyText, children }: {
search: ComponentProps<typeof SearchInput>;
empty: boolean; emptyText: string; children: ComponentChildren;
});

Owns the shared search control and the empty state around the dimensions grid.

DimensionsPanel: ({ bindings, empty, dimensions, selection, canSelectField, filters, onAddToFilters, allowFieldDragging, onDragStart, onDragEnd, onSelectionChange, search, onSearch, i18n, }: DimensionsPanelProps) => preact.JSX.Element;

export function filterPivotDimensions(
dimensions: PivotConfigDimension[],
query = '',
options: PivotFieldSearchOptions = {},
);

interface PivotFieldSearchOptions {
/** Include dimensions marked hidden in the returned field list. */
showHidden?: boolean
}

export type PivotDisplayPatch = Pick<Partial<PivotConfig>, 'totals' | 'valuesOnRows' | 'rowAxisLayout' | 'showRowGroupHeaders' | 'flatHeaders' | 'rowTree'>;

interface PivotNamedView {
readonly id: string;
readonly name: string
}

In-app view integration. Runtime payloads stay with the host, outside the UI.

interface PivotViewManager {
readonly persistence?: 'session' | 'persistent';
getState?(): { loading: boolean; error: string };
refresh?(): Promise<void>;
/** Replace the stored report, keeping the existing name and identity. */
update?(id: string): void | Promise<void>;
list(): readonly PivotNamedView[];
subscribe(listener: () => void): () => void;
/** Resolve only when the mutation has been accepted by the host. */
save(name: string): void | Promise<void>;
rename(id: string, name: string): void | Promise<void>;
remove(id: string): void | Promise<void>;
/** False means the existing preventable report update was not accepted. */
restore(id: string): Promise<boolean>
}

  • Required aggregators: Uses Pro aggregation definitions for built-in value aggregation options.
  • Required pro-ui: Uses Pro UI helper components and styles for configurator controls.
pivotConfigUiDependencies: PluginDependency[];

The PivotConfigurator component provides a flexible configuration interface for managing pivot table layouts. It allows users to drag and drop dimensions, rows, columns, and values into designated zones, facilitating dynamic pivot table setup.

Features:

  • Supports drag-and-drop functionality for configuring rows, columns, and values.
  • Enables dynamic selection and removal of dimensions, rows, columns, and values.
  • Includes built-in aggregator selection for values based on dimensions.
  • Provides customizable i18n support for localization of UI labels and messages.

Usage:

  • Import PivotConfigurator and pass in the required dimensions, columns, rows, and values as props.
  • Optionally, provide callbacks for onUpdateColumns, onUpdateRows, and onUpdateValues to handle configuration changes.
import { definePivotConfigurator } from '@revolist/pivot'
definePivotConfigurator(yourElement, {
dimensions: [...],
rows: [...],
columns: [...],
values: [...],
}, {
onUpdateColumns: (updatedColumns) => {
// Handle column configuration changes
},
onUpdateRows: (updatedRows) => {
// Handle row configuration changes
},
onUpdateValues: (updatedValues) => {
// Handle value configuration changes
},
})

The PivotConfigurator component is ideal for applications that require flexible, user-driven pivot table customization, especially in data management, reporting, and analytics tools.

Mounts the standalone Pivot configurator into any host element.

Use this when you want the drag-and-drop Pivot field panel outside of the default PivotPlugin wrapper, or when you need to drive Pivot state from an external UI shell.

definePivotConfigurator: (el: HTMLElement, config?: Partial<PivotConfig>, actions?: Partial<PivotConfigurationActions>, diagnostics?: PivotUiDiagnostics | undefined, templateContext?: { columnTypes?: ColumnTypes | undefined; additionalData?: unknown; } | undefined) => () => void;

Unmounts a standalone configurator and removes classes added by its mount helper.

disposePivotConfigurator: (el: HTMLElement) => void;

Mounts the compact in-grid Pivot field panel into a host element.

Unlike the standalone configurator, this panel is intended to sit above the Pivot grid and expose the active filter, data, row, and column field areas.

definePivotFieldPanel: (el: HTMLElement, config?: Partial<PivotConfig>, actions?: Partial<PivotConfigurationActions>, layout?: { columns?: (ColumnRegular<ColumnProp, DataType<any, ColumnProp>> | ColumnGrouping<any>)[] | undefined; colSize?: number | undefined; resizedColumns?: ColumnResizeDetail; } | undefined, diagnostics?: PivotUiDiagnostics | undefined, templateContext?: { columnTypes?: ColumnTypes | undefined; additionalData?: unknown; } | undefined) => () => void;

Unmounts a compact field panel and removes mount-helper presentation state.

disposePivotFieldPanel: (el: HTMLElement) => void;

export function PivotConfigurator(props: PivotConfiguratorProps = {});

Pivot state, policies and lifecycle for the shared configurator view.

usePivotConfiguratorBehavior: ({ tableDropTarget, authoring, onSaveView, viewManager, onUpdateDisplay, rowSize, onUpdateRowSize, totals, valuesOnRows, rowAxisLayout, showRowGroupHeaders, flatHeaders, rowTree, collapsed, dimensions, columns, rows, values, filters, filterSelections, i18n: inputI18n, fieldPanel, engine, showColumns, showRows, showValues, showFilters, onUpdateConfiguration, loadFilterValues, filterValuesContext, registerEditor, onUpdateColumns: onUpdateColumnsCallback, onUpdateRows: onUpdateRowsCallback, onUpdateValues: onUpdateValuesCallback, onUpdateFilters: onUpdateFiltersCallback, onUpdateFilterSelections, onResetLayout, diagnostics, columnTypes, additionalData, }?: Partial<PivotConfigurationComponentProps>) => { dimensionSelection: { rows: ColumnProp[]; columns: ColumnProp[]; values: PivotConfigValue[]; }; columnTypes: ColumnTypes | undefined; additionalData: unknown; measureFocusRoot: preact.RefObject<HTMLDivElement>; tableDropTarget: HTMLElement | undefined; activeDrag: boolean; allowFieldDragging: boolean; showRowFields: boolean; showColumnFields: boolean; showDataFields: boolean; showFilterFields: boolean; draggingItemRef: MutableRef<DraggingItem | null>; dimensionsByProp: Map<ColumnProp, PivotConfigDimension>; i18n: { fieldSettingDetail: (label: string, value: string) => string; fieldSettingsSummary: (details: string[]) => string; fieldCustomSettings: (summary: string) => string; fieldSettingsHint: (action: string, summary: string) => string; aggregationStatus: string; aggregationBadge: (label: string) => string; memberIncludeAbbr: string; memberExcludeAbbr: string; memberAllAbbr: string; memberSelectionBadge: (mode: string, count: number) => string; measureConditionalFormatting: string; editPivot: string; layout: string; display: string; undo: string; redo: string; saveView: string; undoError: string; redoError: string; saveViewHint: string; savedViews: string; saveNamedView: string; viewName: string; viewNamePlaceholder: string; noSavedViews: string; savedViewsSessionHint: string; savedViewsPersistentHint: string; reloadSavedViews: string; updateNamedView: (name: string) => string; viewUpdated: string; saveViewError: string; restoreViewError: string; viewSaved: string; viewRestored: (name: string) => string; restoreView: string; saveViewName: string; closeSavedViews: string; restoreNamedView: (name: string) => string; renameNamedView: (name: string) => string; deleteNamedView: (name: string) => string; totals: string; grandTotals: string; subtotals: string; valuesOrientation: string; rowLayout: string; showRowGroupHeaders: string; compact: string; tabular: string; comfortable: string; flatHeaders: string; tableDensity: string; formattingHint: string; displayUnavailable: string; directDropHint: string; layoutHint: string; fieldTypeNames: { string: string; number: string; integer: string; decimal: string; percent: string; currency: string; date: string; time: string; boolean: string; id: string; }; aggregationNames: Record<string, string>; aggregationForField: (field: string) => string; aggregationForFieldInstance: (field: string, operation: string, ordinal: number, count: number) => string; dragGroupPreview: (field: string, count: number) => string; calculationFieldLabel: (field: string, type: "string" | "number") => string; memberReportUpdating: string; memberSourceScope: string; memberValuesUnsupported: string; memberRetry: string; memberSourceCount: (first: number, last: number, total: number) => string; memberEdit: (field: string) => string; memberClearOne: (field: string) => string; memberRemoveValue: (value: string) => string; memberBlank: string; memberEmptyString: string; memberTrue: string; memberFalse: string; memberSelectionSummary: (mode: string, count: number) => string; memberEditHint: (title: string, summary: string) => string; memberValueDetails: (caption: string) => string; memberQuickValueLabel: (value: PivotFilterScalar) => string; memberInclude: string; memberExclude: string; memberMode: string; memberActive: string; memberClearAll: string; memberClear: string; memberConfiguredEmpty: string; memberPrevious: string; memberNext: string; memberChoicePages: string; memberSelectedPages: string; memberPage: (page: number, total: number) => string; memberConfigured: string; memberUnavailable: string; memberSelectionHint: string; memberSearch: string; memberSelectAll: string; memberValues: string; memberCount: string; memberVisibleSelected: string; memberLoading: string; memberEmpty: string; memberLoadError: string; engineCapabilityUnavailable: string; memberUnsupported: string; measureCalculation: string; measureCalculationType: string; measureCalculationNone: string; measureCalculationPreserved: string; measureCalculationAxis: string; measureCalculationField: string; measureCalculationChooseField: string; measureCalculationBase: string; measureCalculationPrevious: string; measureCalculationNext: string; measureCalculationOrder: string; measureCalculationAscending: string; measureCalculationDescending: string; measureCalculationNames: { percentOfGrandTotal: string; percentOfRowTotal: string; percentOfColumnTotal: string; percentOfParentRowTotal: string; percentOfParentColumnTotal: string; index: string; differenceFrom: string; percentDifferenceFrom: string; runningTotal: string; percentRunningTotal: string; rank: string; }; measureCalculationReplacement: string; measureCalculationHint: string; measureCalculationFieldError: string; measureCalculationCapabilityError: string; measureSummaries: string; measureSummaryMode: string; measureSummaryPreserved: string; measureSummaryReplace: string; measureSummaryGroup: string; measureSummaryTotal: string; measureSummaryInherit: string; measureSummaryHint: string; measureSummaryRemoteError: string; measureSummaryFormulaError: string; measureSummaryOperationError: string; measureSummaryReplacement: string; measureFormat: string; measureNumberFormat: string; measureFormatAutomatic: string; measureFormatNumber: string; measureFormatCompact: string; measureFormatCurrency: string; measureFormatPercent: string; measureFormatPreserved: string; measureMinimumDecimals: string; measureMaximumDecimals: string; measureFormatUnspecified: string; measureCurrencyCode: string; measureLocaleSource: string; measureLocaleKeep: string; measureLocaleDefault: string; measureLocaleOverride: string; measureFormatReplacement: string; measureFormatWholeReplacement: string; measureFormatBoundsError: string; measureFormatCurrencyError: string; measureFormatLocaleError: string; measureFormatIntlError: string; measureFormatDefaults: string; measureFormatSample: (raw: string, formatted: string) => string; measureFormatSamplePending: string; editMeasure: string; editFilter: string; editMeasureTitle: (field: string) => string; measureLabel: string; measureLabelHint: string; measureSource: (field: string) => string; measureCaptionPreview: (caption: string) => string; measureAggregation: string; measureCurrentUnavailable: (value: string) => string; measureAggregationUnavailable: string; measureConflict: string; measureReload: string; measureApply: string; measureCancel: string; addField: string; addFieldToArea: (area: string) => string; addFieldTo: (field: string, area: string) => string; clearFieldArea: (area: string) => string; fieldActions: string; actionsForField: (field: string) => string; actionsForFieldInstance: (field: string, area: string, ordinal: number, count: number) => string; assignFieldArea: (move: boolean, area: string) => string; moveFieldEarlier: string; moveFieldLater: string; duplicateMeasure: string; duplicateMeasureUnavailable: string; closeFieldActions: string; fieldActionAlready: string; fieldActionForbidden: string; fieldActionUnavailable: string; fieldActionBoundary: string; fieldActionStale: string; fieldActionRemovalDisabled: string; fieldRoleUnavailable: string; fieldNoPlacement: string; fieldFilterOnly: string; addToFilters: string; axisSwapUnavailable: string; fields: string; fieldCount: (count: number) => string; rows: string; columns: string; values: string; filters: string; fieldPanel: string; rowsPanelHint: string; columnsPanelHint: string; valuesPanelHint: string; filtersPanelHint: string; dropFilterFieldsHere: string; dragHereRows: string; dragHereColumns: string; dragHereValues: string; dragHereFilters: string; dragHere: string; dragDimension: (label: string) => string; dragDimensionGroup: (label: string) => string; expandFieldGroup: (label: string) => string; collapseFieldGroup: (label: string) => string; searchFields: string; selectField: (label: string) => string; selectAllFields: string; noFieldsFound: string; otherFields: string; swapRowsColumns: string; resetLayout: string; sortField: (label: string) => string; filterValue: (label: string) => string; all: string; pivotWarnings: string; pivotError: string; diagnosticMessage: (message: string) => string; remove: string; }; handleDrop: (target: PanelType, index?: number | undefined, event?: DragEvent | undefined) => void; handleDragEnd: () => void; totals: PivotConfigTotals | undefined; valuesOnRows: boolean | undefined; rows: ColumnProp[]; rowTree: PivotAxisField[] | undefined; rowAxisLayout: PivotRowAxisLayout | undefined; collapsed: boolean | undefined; showRowGroupHeaders: boolean | undefined; flatHeaders: boolean | undefined; authoring: PivotAuthoringController | undefined; onSaveView: (() => void | Promise<void>) | undefined; viewManager: PivotViewManager | undefined; onUpdateDisplay: ((patch: PivotDisplayPatch) => void) | undefined; rowSize: number | undefined; onUpdateRowSize: ((size: number) => void) | undefined; localValues: PivotConfigValue[]; measurePresentations: { key: string; caption: string; aggregationLabel: string; }[]; fieldActions: { canOpenMeasure: (request: { kind: "measure"; measureId: string; prop: ColumnProp; origin: HTMLElement; }) => boolean; openMeasure: (request: { kind: "measure"; measureId: string; prop: ColumnProp; origin: HTMLElement; }) => boolean; closeEditor: () => void; renderMeasureSettings(index: number): preact.JSX.Element | null; renderMeasureEditor(): preact.JSX.Element | null; renderZoneActions(area: keyof PivotFieldLayoutState): preact.JSX.Element | null; renderItemActions(area: keyof PivotFieldLayoutState, prop: ColumnProp, index: number, caption: string): preact.JSX.Element | null; }; memberFilters: { canOpenMember: (request: { kind: "member"; field: ColumnProp; origin: HTMLElement; }) => boolean; openMember: (request: { kind: "member"; field: ColumnProp; origin: HTMLElement; }) => boolean; closeMember: () => void; renderTrigger: (prop: ColumnProp, iconOnly?: boolean) => preact.JSX.Element; renderSummary: () => preact.JSX.Element; showQuickSelect: (prop: ColumnProp) => boolean; allowQuickSelect: boolean; }; fieldPanel: PivotFieldPanelConfig | undefined; onResetLayout: (() => void) | undefined; placementStatus: string; diagnostics: PivotUiDiagnostics | undefined; dimensions: PivotConfigDimension[]; localFilters: ColumnProp[]; applyLayoutState: (next: PivotDimensionLayoutState) => void; localRows: ColumnProp[]; localColumns: ColumnProp[]; handleDragStart: (source: PanelType, index: number, propOrProps: ColumnProp | ColumnProp[], isGroup?: boolean, _event?: DragEvent | undefined) => void; handleDimensionSelectionChange: (next: PivotDimensionSelectionState) => void; fieldSearch: string; setFieldSearch: React.Dispatch<React.SetStateAction<string>>; onDragOver: (e: Event) => void; onDragEnter: (e: Event) => void; allowFieldRemoving: boolean; canSwap: boolean; swapRowsAndColumns: () => void; canDrop: (target: PanelType, event?: DragEvent | undefined) => boolean; removeItem: (box: PanelType, index: number) => void; getDimensionAggregators: (prop: ColumnProp) => Record<string, (values: any[]) => any>; setLocalValues: React.Dispatch<React.SetStateAction<PivotConfigValue[]>>; onUpdateValues: (next: PivotConfigValue[]) => void; localFilterSelections: Partial<Record<string, PivotFilterSelection>>; updateFilterSelections: (next: Partial<Record<string, PivotFilterSelection>>, editedField?: ColumnProp | undefined) => void; };

interface PivotConfigurationActions {
/** Optional associated table for direct field drops. Scoped to this mounted configurator. */
tableDropTarget?: HTMLElement;
/** Optional existing attached authoring controller for Undo/Redo. */
authoring?: PivotAuthoringController;
/** Saves the accepted view through the host's persistence or export integration. */
onSaveView?: () => void | Promise<void>;
/** Optional manager for named in-app views. Takes precedence over onSaveView. */
viewManager?: PivotViewManager;
/** Applies report display settings without changing field placement. */
onUpdateDisplay?: (patch: PivotDisplayPatch) => void;
/** Current table row height and optional presentation-only density update. */
rowSize?: number;
onUpdateRowSize?: (size: number) => void;
/** Registers the current mounted shared editors. Cleanup revokes this UI lease. */
registerEditor?: PivotEditorRegistrar;
/** Loads distinct finite scalar choices in exact fixed-offset windows with a safe totalCount. Configured filterOptions (including []) take priority. */
loadFilterValues?: PivotFilterValuesLoader;
/** Optional scope notifications. Standalone hosts must provide this or replace the loader when invisible source/query scope changes. */
filterValuesContext?: PivotFilterValuesContext;
/** Applies related layout changes and any pruned member selections as one Pivot regeneration. */
onUpdateConfiguration?: (patch: PivotConfigurationPatch) => void;
/** Called whenever the configurator updates the ordered column dimension list. */
onUpdateColumns?: (cols: ColumnProp[]) => void;
/** Called whenever the configurator updates the ordered row dimension list. */
onUpdateRows?: (rows: ColumnProp[]) => void;
/** Called whenever the configurator updates the selected measures or aggregators. */
onUpdateValues?: (values: PivotConfigValue[]) => void;
/** Called whenever the configurator updates the ordered filter field list. */
onUpdateFilters?: (filters: ColumnProp[]) => void;
/** Called whenever the configurator changes selected filter values. */
onUpdateFilterSelections?: (selections: PivotFilterSelectionMap) => void;
/** Current sorting order used by the field panel. */
sorting?: SortingOrder;
/** Called when a field-panel sort control is toggled. */
onToggleSort?: (prop: ColumnProp) => void;
/** Called when the user clears the active Pivot layout. */
onResetLayout?: () => void
}

export type PivotConfigurationPatch = Pick<
Partial<PivotConfig>,
'columns' | 'rows' | 'values' | 'filters' | 'filterSelections'
>;

PivotConfigurationComponentProps (Extended from index.tsx)

Section titled “PivotConfigurationComponentProps (Extended from index.tsx)”
interface PivotConfigurationComponentProps {
diagnostics?: PivotUiDiagnostics;
columnTypes?: ColumnTypes;
additionalData?: unknown;
/** Optional associated table for direct field drops. Scoped to this mounted configurator. */
tableDropTarget?: HTMLElement;
/** Optional existing attached authoring controller for Undo/Redo. */
authoring?: PivotAuthoringController;
/** Saves the accepted view through the host's persistence or export integration. */
onSaveView?: () => void | Promise<void>;
/** Optional manager for named in-app views. Takes precedence over onSaveView. */
viewManager?: PivotViewManager;
/** Applies report display settings without changing field placement. */
onUpdateDisplay?: (patch: PivotDisplayPatch) => void;
/** Current table row height and optional presentation-only density update. */
rowSize?: number;
onUpdateRowSize?: (size: number) => void;
/** Registers the current mounted shared editors. Cleanup revokes this UI lease. */
registerEditor?: PivotEditorRegistrar;
/** Loads distinct finite scalar choices in exact fixed-offset windows with a safe totalCount. Configured filterOptions (including []) take priority. */
loadFilterValues?: PivotFilterValuesLoader;
/** Optional scope notifications. Standalone hosts must provide this or replace the loader when invisible source/query scope changes. */
filterValuesContext?: PivotFilterValuesContext;
/** Applies related layout changes and any pruned member selections as one Pivot regeneration. */
onUpdateConfiguration?: (patch: PivotConfigurationPatch) => void;
/** Called whenever the configurator updates the ordered column dimension list. */
onUpdateColumns?: (cols: ColumnProp[]) => void;
/** Called whenever the configurator updates the ordered row dimension list. */
onUpdateRows?: (rows: ColumnProp[]) => void;
/** Called whenever the configurator updates the selected measures or aggregators. */
onUpdateValues?: (values: PivotConfigValue[]) => void;
/** Called whenever the configurator updates the ordered filter field list. */
onUpdateFilters?: (filters: ColumnProp[]) => void;
/** Called whenever the configurator changes selected filter values. */
onUpdateFilterSelections?: (selections: PivotFilterSelectionMap) => void;
/** Current sorting order used by the field panel. */
sorting?: SortingOrder;
/** Called when a field-panel sort control is toggled. */
onToggleSort?: (prop: ColumnProp) => void;
/** Called when the user clears the active Pivot layout. */
onResetLayout?: () => void
}

interface PivotFilterValuesInput {
field: ColumnProp;
search?: string;
offset: number;
limit: number;
signal?: AbortSignal
}

Existing authoring lifecycle, or an equivalent host-owned scope. Notify even for same-revision pending transitions.

interface PivotFilterValuesContext {
getSnapshot(): Pick<PivotAuthoringSnapshot, 'revision' | 'status'>;
subscribe(listener: () => void): () => void
}

export type PivotFilterValuesLoader = (input: PivotFilterValuesInput) => Promise<PivotFilterValuesResponse>;

PivotConfiguratorBehavior (Extended from index.tsx)

Section titled “PivotConfiguratorBehavior (Extended from index.tsx)”

View contract shared by developer-selected integrations; no runtime mode switching.

/** View contract shared by developer-selected integrations; no runtime mode switching. */
export type PivotConfiguratorBehavior = Pick<PivotBehavior, SharedBehaviorKeys>
& Partial<Omit<PivotBehavior, SharedBehaviorKeys | 'fieldActions' | 'memberFilters'>> & {
fieldActions: Pick<PivotBehavior['fieldActions'], 'renderZoneActions' | 'renderItemActions'> & Partial<Pick<PivotBehavior['fieldActions'], 'renderMeasureSettings' | 'renderMeasureEditor'>>;
memberFilters?: PivotBehavior['memberFilters'];
fieldGridBindings?: FieldsGridBindings;
fieldLibraryEmpty?: boolean;
layoutOnly?: boolean;
root?: { className: string; label: string; theme: string; width?: string | number };
caption?: (area: PivotFieldArea, prop: ColumnProp, index: number) => ComponentChildren;
removeLabel?: (area: PivotFieldArea, prop: ColumnProp) => string;
footer?: (area: PivotFieldArea) => ComponentChildren;
popup?: ComponentChildren;
};

PivotConfiguratorProps (Extended from index.tsx)

Section titled “PivotConfiguratorProps (Extended from index.tsx)”
export type PivotConfiguratorProps = Partial<PivotConfigurationComponentProps> & {
/** Internal behavior adapter; the rendered configurator is shared. */
useBehavior?: (props: PivotConfiguratorProps) => PivotConfiguratorBehavior;
behaviorData?: unknown;
};

Current exact identity; opening never applies analytical changes.

/** Current exact identity; opening never applies analytical changes. */
export type PivotEditorRequest =
| { kind: 'measure'; measureId: string; prop: ColumnProp; origin: HTMLElement }
| { kind: 'member'; field: ColumnProp; origin: HTMLElement };

Live mounted constructor authority. Boolean means accepted UI scheduling, not Save.

interface PivotEditorBridge {
canOpen(request: PivotEditorRequest): boolean;
open(request: PivotEditorRequest): boolean;
/** Dismiss without saving or restoring focus. */
close(): void
}

export type PivotEditorRegistrar = (bridge: PivotEditorBridge) => () => void;

PivotFieldPanel: (props?: Partial<PivotFieldPanelProps>) => preact.JSX.Element;

DropZone: ({ title, label, footer, removeLabel, headerActions, renderActions, allowFieldRemoving, panel, items, itemKeys, dimensions, placeholder, i18n, renderItem, onRemove, onDrop, onDragOver, canDrop, onDragEnter, onItemDragStart, onItemDragEnd, allowFieldDragging, dragActive, }: DropZoneProps) => preact.JSX.Element;

ValueSelector: ({ value, aggregators, ariaLabel, labels, unavailableLabel, onUpdateValue, }: ValueSelectorProps) => preact.JSX.Element;

FilterSelector: ({ i18n, allLabel, ariaLabel, options, selected, dropdown, disabled, onUpdateSelection, }: FilterSelectorProps) => preact.JSX.Element;

PIVOT_DIMENSION_DRAG_MIME: string;

The item being dragged

interface DraggingItem {
/** The source panel of the dragging item */
source: PanelType;
/** The index of the dragging item in the source panel */
index: number;
/** Dragging item */
prop: ColumnProp;
/** Ordered field bundle when a dimensions group is dragged. */
props?: ColumnProp[];
/** The drag originated from a synthetic dimensions group row. */
isGroup?: boolean
}

export function resolvePivotConfigLocale(...overrides: Array<PivotConfigLocaleInput | undefined>): typeof PIVOT_CONFIG_EN;

export function getPivotAggregationLabel(operation: string, labels?: Record<string, string>);

PIVOT_CONFIG_EN: {
fieldSettingDetail: (label: string, value: string) => string;
fieldSettingsSummary: (details: string[]) => string;
fieldCustomSettings: (summary: string) => string;
fieldSettingsHint: (action: string, summary: string) => string;
aggregationStatus: string;
aggregationBadge: (label: string) => string;
memberIncludeAbbr: string;
memberExcludeAbbr: string;
memberAllAbbr: string;
memberSelectionBadge: (mode: string, count: number) => string;
measureConditionalFormatting: string;
editPivot: string;
layout: string;
display: string;
undo: string;
redo: string;
saveView: string;
undoError: string;
redoError: string;
saveViewHint: string;
savedViews: string;
saveNamedView: string;
viewName: string;
viewNamePlaceholder: string;
noSavedViews: string;
savedViewsSessionHint: string;
savedViewsPersistentHint: string;
reloadSavedViews: string;
updateNamedView: (name: string) => string;
viewUpdated: string;
saveViewError: string;
restoreViewError: string;
viewSaved: string;
viewRestored: (name: string) => string;
restoreView: string;
saveViewName: string;
closeSavedViews: string;
restoreNamedView: (name: string) => string;
renameNamedView: (name: string) => string;
deleteNamedView: (name: string) => string;
totals: string;
grandTotals: string;
subtotals: string;
valuesOrientation: string;
rowLayout: string;
showRowGroupHeaders: string;
compact: string;
tabular: string;
comfortable: string;
flatHeaders: string;
tableDensity: string;
formattingHint: string;
displayUnavailable: string;
directDropHint: string;
layoutHint: string;
fieldTypeNames: { string: string; number: string; integer: string; decimal: string; percent: string; currency: string; date: string; time: string; boolean: string; id: string; };
aggregationNames: Record<string, string>;
aggregationForField: (field: string) => string;
aggregationForFieldInstance: (field: string, operation: string, ordinal: number, count: number) => string;
dragGroupPreview: (field: string, count: number) => string;
calculationFieldLabel: (field: string, type: "string" | "number") => string;
memberReportUpdating: string;
memberSourceScope: string;
memberValuesUnsupported: string;
memberRetry: string;
memberSourceCount: (first: number, last: number, total: number) => string;
memberEdit: (field: string) => string;
memberClearOne: (field: string) => string;
memberRemoveValue: (value: string) => string;
memberBlank: string;
memberEmptyString: string;
memberTrue: string;
memberFalse: string;
memberSelectionSummary: (mode: string, count: number) => string;
memberEditHint: (title: string, summary: string) => string;
memberValueDetails: (caption: string) => string;
memberQuickValueLabel: (value: PivotFilterScalar) => string;
memberInclude: string;
memberExclude: string;
memberMode: string;
memberActive: string;
memberClearAll: string;
memberClear: string;
memberConfiguredEmpty: string;
memberPrevious: string;
memberNext: string;
memberChoicePages: string;
memberSelectedPages: string;
memberPage: (page: number, total: number) => string;
memberConfigured: string;
memberUnavailable: string;
memberSelectionHint: string;
memberSearch: string;
memberSelectAll: string;
memberValues: string;
memberCount: string;
memberVisibleSelected: string;
memberLoading: string;
memberEmpty: string;
memberLoadError: string;
engineCapabilityUnavailable: string;
memberUnsupported: string;
measureCalculation: string;
measureCalculationType: string;
measureCalculationNone: string;
measureCalculationPreserved: string;
measureCalculationAxis: string;
measureCalculationField: string;
measureCalculationChooseField: string;
measureCalculationBase: string;
measureCalculationPrevious: string;
measureCalculationNext: string;
measureCalculationOrder: string;
measureCalculationAscending: string;
measureCalculationDescending: string;
measureCalculationNames: { percentOfGrandTotal: string; percentOfRowTotal: string; percentOfColumnTotal: string; percentOfParentRowTotal: string; percentOfParentColumnTotal: string; index: string; differenceFrom: string; percentDifferenceFrom: string; runningTotal: string; percentRunningTotal: string; rank: string; };
measureCalculationReplacement: string;
measureCalculationHint: string;
measureCalculationFieldError: string;
measureCalculationCapabilityError: string;
measureSummaries: string;
measureSummaryMode: string;
measureSummaryPreserved: string;
measureSummaryReplace: string;
measureSummaryGroup: string;
measureSummaryTotal: string;
measureSummaryInherit: string;
measureSummaryHint: string;
measureSummaryRemoteError: string;
measureSummaryFormulaError: string;
measureSummaryOperationError: string;
measureSummaryReplacement: string;
measureFormat: string;
measureNumberFormat: string;
measureFormatAutomatic: string;
measureFormatNumber: string;
measureFormatCompact: string;
measureFormatCurrency: string;
measureFormatPercent: string;
measureFormatPreserved: string;
measureMinimumDecimals: string;
measureMaximumDecimals: string;
measureFormatUnspecified: string;
measureCurrencyCode: string;
measureLocaleSource: string;
measureLocaleKeep: string;
measureLocaleDefault: string;
measureLocaleOverride: string;
measureFormatReplacement: string;
measureFormatWholeReplacement: string;
measureFormatBoundsError: string;
measureFormatCurrencyError: string;
measureFormatLocaleError: string;
measureFormatIntlError: string;
measureFormatDefaults: string;
measureFormatSample: (raw: string, formatted: string) => string;
measureFormatSamplePending: string;
editMeasure: string;
editFilter: string;
editMeasureTitle: (field: string) => string;
measureLabel: string;
measureLabelHint: string;
measureSource: (field: string) => string;
measureCaptionPreview: (caption: string) => string;
measureAggregation: string;
measureCurrentUnavailable: (value: string) => string;
measureAggregationUnavailable: string;
measureConflict: string;
measureReload: string;
measureApply: string;
measureCancel: string;
addField: string;
addFieldToArea: (area: string) => string;
addFieldTo: (field: string, area: string) => string;
clearFieldArea: (area: string) => string;
fieldActions: string;
actionsForField: (field: string) => string;
actionsForFieldInstance: (field: string, area: string, ordinal: number, count: number) => string;
assignFieldArea: (move: boolean, area: string) => string;
moveFieldEarlier: string;
moveFieldLater: string;
duplicateMeasure: string;
duplicateMeasureUnavailable: string;
closeFieldActions: string;
fieldActionAlready: string;
fieldActionForbidden: string;
fieldActionUnavailable: string;
fieldActionBoundary: string;
fieldActionStale: string;
fieldActionRemovalDisabled: string;
fieldRoleUnavailable: string;
fieldNoPlacement: string;
fieldFilterOnly: string;
addToFilters: string;
axisSwapUnavailable: string;
fields: string;
fieldCount: (count: number) => string;
rows: string;
columns: string;
values: string;
filters: string;
fieldPanel: string;
rowsPanelHint: string;
columnsPanelHint: string;
valuesPanelHint: string;
filtersPanelHint: string;
dropFilterFieldsHere: string;
dragHereRows: string;
dragHereColumns: string;
dragHereValues: string;
dragHereFilters: string;
dragHere: string;
dragDimension: (label: string) => string;
dragDimensionGroup: (label: string) => string;
expandFieldGroup: (label: string) => string;
collapseFieldGroup: (label: string) => string;
searchFields: string;
selectField: (label: string) => string;
selectAllFields: string;
noFieldsFound: string;
otherFields: string;
swapRowsColumns: string;
resetLayout: string;
sortField: (label: string) => string;
filterValue: (label: string) => string;
all: string;
pivotWarnings: string;
pivotError: string;
diagnosticMessage: (message: string) => string;
remove: string;
};

Partial dictionaries retain defaults, including entries inside label maps.

/** Partial dictionaries retain defaults, including entries inside label maps. */
export type PivotConfigLocaleInput = {
[K in keyof typeof PIVOT_CONFIG_EN]?: typeof PIVOT_CONFIG_EN[K] extends Record<string, string>
? Partial<typeof PIVOT_CONFIG_EN[K]> : typeof PIVOT_CONFIG_EN[K];
};

Resolves the pixel width of the Pivot “rows” section based on current grid columns and optional live resize payload.

export function getPivotFieldPanelRowsWidth(
config: Partial<PivotConfig> | null | undefined,
columns: (ColumnGrouping | ColumnRegular)[] = [],
defaultSize = 100,
resizedColumns?: ColumnResizeDetail,
);

export type ColumnResizeDetail = Record<number, ColumnRegular> | undefined;

export function hasPivotDiagnostics(diagnostics?: PivotUiDiagnostics);

interface PivotUiDiagnostics {
warnings?: string[];
error?: string
}

PivotDiagnostics: ({ diagnostics, i18n, }: { diagnostics?: PivotUiDiagnostics | undefined; i18n?: { fieldSettingDetail: (label: string, value: string) => string; fieldSettingsSummary: (details: string[]) => string; fieldCustomSettings: (summary: string) => string; fieldSettingsHint: (action: string, summary: string) => string; aggregationStatus: string; aggregationBadge: (label: string) => string; memberIncludeAbbr: string; memberExcludeAbbr: string; memberAllAbbr: string; memberSelectionBadge: (mode: string, count: number) => string; measureConditionalFormatting: string; editPivot: string; layout: string; display: string; undo: string; redo: string; saveView: string; undoError: string; redoError: string; saveViewHint: string; savedViews: string; saveNamedView: string; viewName: string; viewNamePlaceholder: string; noSavedViews: string; savedViewsSessionHint: string; savedViewsPersistentHint: string; reloadSavedViews: string; updateNamedView: (name: string) => string; viewUpdated: string; saveViewError: string; restoreViewError: string; viewSaved: string; viewRestored: (name: string) => string; restoreView: string; saveViewName: string; closeSavedViews: string; restoreNamedView: (name: string) => string; renameNamedView: (name: string) => string; deleteNamedView: (name: string) => string; totals: string; grandTotals: string; subtotals: string; valuesOrientation: string; rowLayout: string; showRowGroupHeaders: string; compact: string; tabular: string; comfortable: string; flatHeaders: string; tableDensity: string; formattingHint: string; displayUnavailable: string; directDropHint: string; layoutHint: string; fieldTypeNames: { string: string; number: string; integer: string; decimal: string; percent: string; currency: string; date: string; time: string; boolean: string; id: string; }; aggregationNames: Record<string, string>; aggregationForField: (field: string) => string; aggregationForFieldInstance: (field: string, operation: string, ordinal: number, count: number) => string; dragGroupPreview: (field: string, count: number) => string; calculationFieldLabel: (field: string, type: "string" | "number") => string; memberReportUpdating: string; memberSourceScope: string; memberValuesUnsupported: string; memberRetry: string; memberSourceCount: (first: number, last: number, total: number) => string; memberEdit: (field: string) => string; memberClearOne: (field: string) => string; memberRemoveValue: (value: string) => string; memberBlank: string; memberEmptyString: string; memberTrue: string; memberFalse: string; memberSelectionSummary: (mode: string, count: number) => string; memberEditHint: (title: string, summary: string) => string; memberValueDetails: (caption: string) => string; memberQuickValueLabel: (value: PivotFilterScalar) => string; memberInclude: string; memberExclude: string; memberMode: string; memberActive: string; memberClearAll: string; memberClear: string; memberConfiguredEmpty: string; memberPrevious: string; memberNext: string; memberChoicePages: string; memberSelectedPages: string; memberPage: (page: number, total: number) => string; memberConfigured: string; memberUnavailable: string; memberSelectionHint: string; memberSearch: string; memberSelectAll: string; memberValues: string; memberCount: string; memberVisibleSelected: string; memberLoading: string; memberEmpty: string; memberLoadError: string; engineCapabilityUnavailable: string; memberUnsupported: string; measureCalculation: string; measureCalculationType: string; measureCalculationNone: string; measureCalculationPreserved: string; measureCalculationAxis: string; measureCalculationField: string; measureCalculationChooseField: string; measureCalculationBase: string; measureCalculationPrevious: string; measureCalculationNext: string; measureCalculationOrder: string; measureCalculationAscending: string; measureCalculationDescending: string; measureCalculationNames: { percentOfGrandTotal: string; percentOfRowTotal: string; percentOfColumnTotal: string; percentOfParentRowTotal: string; percentOfParentColumnTotal: string; index: string; differenceFrom: string; percentDifferenceFrom: string; runningTotal: string; percentRunningTotal: string; rank: string; }; measureCalculationReplacement: string; measureCalculationHint: string; measureCalculationFieldError: string; measureCalculationCapabilityError: string; measureSummaries: string; measureSummaryMode: string; measureSummaryPreserved: string; measureSummaryReplace: string; measureSummaryGroup: string; measureSummaryTotal: string; measureSummaryInherit: string; measureSummaryHint: string; measureSummaryRemoteError: string; measureSummaryFormulaError: string; measureSummaryOperationError: string; measureSummaryReplacement: string; measureFormat: string; measureNumberFormat: string; measureFormatAutomatic: string; measureFormatNumber: string; measureFormatCompact: string; measureFormatCurrency: string; measureFormatPercent: string; measureFormatPreserved: string; measureMinimumDecimals: string; measureMaximumDecimals: string; measureFormatUnspecified: string; measureCurrencyCode: string; measureLocaleSource: string; measureLocaleKeep: string; measureLocaleDefault: string; measureLocaleOverride: string; measureFormatReplacement: string; measureFormatWholeReplacement: string; measureFormatBoundsError: string; measureFormatCurrencyError: string; measureFormatLocaleError: string; measureFormatIntlError: string; measureFormatDefaults: string; measureFormatSample: (raw: string, formatted: string) => string; measureFormatSamplePending: string; editMeasure: string; editFilter: string; editMeasureTitle: (field: string) => string; measureLabel: string; measureLabelHint: string; measureSource: (field: string) => string; measureCaptionPreview: (caption: string) => string; measureAggregation: string; measureCurrentUnavailable: (value: string) => string; measureAggregationUnavailable: string; measureConflict: string; measureReload: string; measureApply: string; measureCancel: string; addField: string; addFieldToArea: (area: string) => string; addFieldTo: (field: string, area: string) => string; clearFieldArea: (area: string) => string; fieldActions: string; actionsForField: (field: string) => string; actionsForFieldInstance: (field: string, area: string, ordinal: number, count: number) => string; assignFieldArea: (move: boolean, area: string) => string; moveFieldEarlier: string; moveFieldLater: string; duplicateMeasure: string; duplicateMeasureUnavailable: string; closeFieldActions: string; fieldActionAlready: string; fieldActionForbidden: string; fieldActionUnavailable: string; fieldActionBoundary: string; fieldActionStale: string; fieldActionRemovalDisabled: string; fieldRoleUnavailable: string; fieldNoPlacement: string; fieldFilterOnly: string; addToFilters: string; axisSwapUnavailable: string; fields: string; fieldCount: (count: number) => string; rows: string; columns: string; values: string; filters: string; fieldPanel: string; rowsPanelHint: string; columnsPanelHint: string; valuesPanelHint: string; filtersPanelHint: string; dropFilterFieldsHere: string; dragHereRows: string; dragHereColumns: string; dragHereValues: string; dragHereFilters: string; dragHere: string; dragDimension: (label: string) => string; dragDimensionGroup: (label: string) => string; expandFieldGroup: (label: string) => string; collapseFieldGroup: (label: string) => string; searchFields: string; selectField: (label: string) => string; selectAllFields: string; noFieldsFound: string; otherFields: string; swapRowsColumns: string; resetLayout: string; sortField: (label: string) => string; filterValue: (label: string) => string; all: string; pivotWarnings: string; pivotError: string; diagnosticMessage: (message: string) => string; remove: string; } | undefined; }) => preact.JSX.Element | null;

See the Grid configurator API for the public configurator types.