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.
FieldsPanel
Section titled “FieldsPanel”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;});DimensionsPanel
Section titled “DimensionsPanel”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;filterPivotDimensions
Section titled “filterPivotDimensions”export function filterPivotDimensions( dimensions: PivotConfigDimension[], query = '', options: PivotFieldSearchOptions = {},);PivotFieldSearchOptions
Section titled “PivotFieldSearchOptions”interface PivotFieldSearchOptions { /** Include dimensions marked hidden in the returned field list. */ showHidden?: boolean}PivotDisplayPatch
Section titled “PivotDisplayPatch”export type PivotDisplayPatch = Pick<Partial<PivotConfig>, 'totals' | 'valuesOnRows' | 'rowAxisLayout' | 'showRowGroupHeaders' | 'flatHeaders' | 'rowTree'>;PivotNamedView
Section titled “PivotNamedView”interface PivotNamedView { readonly id: string; readonly name: string}PivotViewManager
Section titled “PivotViewManager”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>}pivotConfigUiDependencies
Section titled “pivotConfigUiDependencies”Dependencies
Section titled “Dependencies”- 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[];definePivotConfigurator
Section titled “definePivotConfigurator”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
PivotConfiguratorand pass in the required dimensions, columns, rows, and values as props. - Optionally, provide callbacks for
onUpdateColumns,onUpdateRows, andonUpdateValuesto handle configuration changes.
Example
Section titled “Example”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;disposePivotConfigurator
Section titled “disposePivotConfigurator”Unmounts a standalone configurator and removes classes added by its mount helper.
disposePivotConfigurator: (el: HTMLElement) => void;definePivotFieldPanel
Section titled “definePivotFieldPanel”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;disposePivotFieldPanel
Section titled “disposePivotFieldPanel”Unmounts a compact field panel and removes mount-helper presentation state.
disposePivotFieldPanel: (el: HTMLElement) => void;PivotConfigurator
Section titled “PivotConfigurator”export function PivotConfigurator(props: PivotConfiguratorProps = {});usePivotConfiguratorBehavior
Section titled “usePivotConfiguratorBehavior”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; };PivotConfigurationActions
Section titled “PivotConfigurationActions”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}PivotConfigurationPatch
Section titled “PivotConfigurationPatch”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}PivotFilterValuesInput
Section titled “PivotFilterValuesInput”interface PivotFilterValuesInput { field: ColumnProp; search?: string; offset: number; limit: number; signal?: AbortSignal}PivotFilterValuesContext
Section titled “PivotFilterValuesContext”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}PivotFilterValuesLoader
Section titled “PivotFilterValuesLoader”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;};PivotEditorRequest
Section titled “PivotEditorRequest”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 };PivotEditorBridge
Section titled “PivotEditorBridge”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}PivotEditorRegistrar
Section titled “PivotEditorRegistrar”export type PivotEditorRegistrar = (bridge: PivotEditorBridge) => () => void;PivotFieldPanel
Section titled “PivotFieldPanel”PivotFieldPanel: (props?: Partial<PivotFieldPanelProps>) => preact.JSX.Element;DropZone
Section titled “DropZone”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
Section titled “ValueSelector”ValueSelector: ({ value, aggregators, ariaLabel, labels, unavailableLabel, onUpdateValue, }: ValueSelectorProps) => preact.JSX.Element;FilterSelector
Section titled “FilterSelector”FilterSelector: ({ i18n, allLabel, ariaLabel, options, selected, dropdown, disabled, onUpdateSelection, }: FilterSelectorProps) => preact.JSX.Element;PIVOT_DIMENSION_DRAG_MIME
Section titled “PIVOT_DIMENSION_DRAG_MIME”PIVOT_DIMENSION_DRAG_MIME: string;DraggingItem
Section titled “DraggingItem”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}resolvePivotConfigLocale
Section titled “resolvePivotConfigLocale”export function resolvePivotConfigLocale(...overrides: Array<PivotConfigLocaleInput | undefined>): typeof PIVOT_CONFIG_EN;getPivotAggregationLabel
Section titled “getPivotAggregationLabel”export function getPivotAggregationLabel(operation: string, labels?: Record<string, string>);PIVOT_CONFIG_EN
Section titled “PIVOT_CONFIG_EN”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;};PivotConfigLocaleInput
Section titled “PivotConfigLocaleInput”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];};getPivotFieldPanelRowsWidth
Section titled “getPivotFieldPanelRowsWidth”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,);ColumnResizeDetail
Section titled “ColumnResizeDetail”export type ColumnResizeDetail = Record<number, ColumnRegular> | undefined;hasPivotDiagnostics
Section titled “hasPivotDiagnostics”export function hasPivotDiagnostics(diagnostics?: PivotUiDiagnostics);PivotUiDiagnostics
Section titled “PivotUiDiagnostics”interface PivotUiDiagnostics { warnings?: string[]; error?: string}PivotDiagnostics
Section titled “PivotDiagnostics”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.