@gooddata/sdk-ui-pivot 11.65.0-alpha.0 → 11.65.0-alpha.2
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/esm/impl/tableFacade.d.ts +5 -0
- package/esm/impl/tableFacade.d.ts.map +1 -1
- package/esm/impl/tableFacade.js +9 -3
- package/esm/next/components/Header/AttributeHeader.d.ts.map +1 -1
- package/esm/next/components/Header/AttributeHeader.js +1 -8
- package/esm/next/components/Header/HeaderCell/HeaderMenu.d.ts +1 -6
- package/esm/next/components/Header/HeaderCell/HeaderMenu.d.ts.map +1 -1
- package/esm/next/components/Header/HeaderCell/HeaderMenu.js +8 -3
- package/esm/next/components/Header/MeasureGroupHeader.d.ts.map +1 -1
- package/esm/next/components/Header/MeasureGroupHeader.js +1 -8
- package/esm/next/components/Header/MeasureHeader.d.ts.map +1 -1
- package/esm/next/components/Header/MeasureHeader.js +1 -8
- package/esm/next/components/Header/PivotGroupHeader.d.ts.map +1 -1
- package/esm/next/components/Header/PivotGroupHeader.js +1 -8
- package/esm/next/features/data/valueFormatter.d.ts +5 -1
- package/esm/next/features/data/valueFormatter.d.ts.map +1 -1
- package/esm/next/features/data/valueFormatter.js +24 -21
- package/package.json +13 -13
|
@@ -68,6 +68,11 @@ export declare class TableFacade {
|
|
|
68
68
|
private columnApi;
|
|
69
69
|
private destroyed;
|
|
70
70
|
private onPageLoadedCallback;
|
|
71
|
+
/**
|
|
72
|
+
* Gives element values of attributes with a number format their formatted name; applied to the
|
|
73
|
+
* initial data view and to every page loaded later so the table shows them consistently.
|
|
74
|
+
*/
|
|
75
|
+
private readonly formatDataView;
|
|
71
76
|
private onExecutionTransformedCallback;
|
|
72
77
|
constructor(result: IExecutionResult, dataView: IDataView, tableMethods: TableDataCallbacks & TableConfigAccessors, props: Readonly<ICorePivotTableInternalProps>, getCurrentAbortController: () => AbortController | undefined);
|
|
73
78
|
finishInitialization: (gridApi: GridApi, columnApi: GridApi) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tableFacade.d.ts","sourceRoot":"","sources":["../../src/impl/tableFacade.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAI9D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACH,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"tableFacade.d.ts","sourceRoot":"","sources":["../../src/impl/tableFacade.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAI9D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACH,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EAKvB,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EAEjC,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EAC1B,MAAM,mBAAmB,CAAC;AAqB3B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOjE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAW;IAgEhB,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IA/D9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IAEjC,SAAgB,eAAe,EAAE,eAAe,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAE3C;;;;;;;;;OASG;IACH,OAAO,CAAC,OAAO,CAAsB;IAErC;;;;OAIG;IACH,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO,CAAC,oBAAoB,CAAiE;IAC7F;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,8BAA8B,CAAqC;IAE3E,YACI,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,SAAS,EACnB,YAAY,EAAE,kBAAkB,GAAG,oBAAoB,EACvD,KAAK,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC5B,yBAAyB,EAAE,MAAM,eAAe,GAAG,SAAS,EA4BhF;IAEM,oBAAoB,YAAa,OAAO,aAAa,OAAO,KAAG,IAAI,CAOxE;IAEK,WAAW,QAAO,IAAI,CAU3B;IAEF;;;;;;;;;;;;OAYG;IACI,OAAO,QAAO,IAAI,CAMvB;IAEK,kBAAkB,QAAO,OAAO,CAErC;IAEF;;;;OAIG;IACI,cAAc,QAAO,OAAO,CAEjC;IAEK,kBAAkB,QAAO,IAAI,CAElC;IAEF;;;;;OAKG;IACH,OAAO,CAAC,YAAY,CAQlB;IAEF,OAAO,CAAC,kBAAkB,CAWxB;IAEF,OAAO,CAAC,gBAAgB,CAsBtB;IAEF,OAAO,CAAC,sBAAsB,CAK5B;IAEF,OAAO,CAAC,4BAA4B,CAElC;IAEF,OAAO,CAAC,YAAY,CAQlB;IAEK,oBAAoB,UAAW,MAAM,GAAG,SAAS,KAAG,eAAe,CAExE;IAEK,wBAAwB,QAAO,sBAAsB,CAM1D;IAEK,aAAa,QAAO,IAAI,CAQ7B;IAIK,SAAS,mBAAoB,oBAAoB,KAAG,IAAI,CAsC7D;IAEF,OAAO,CAAC,gBAAgB,CAatB;IAEK,0BAA0B,mBAAoB,oBAAoB,WAAW,MAAM,EAAE,KAAG,IAAI,CAUjG;IAEK,gBAAgB,mBAAoB,oBAAoB,KAAG,IAAI,CAcpE;IAEK,iBAAiB,mBACJ,oBAAoB,UAC7B,OAAO,KACf,OAAO,CAAC,OAAO,CAAC,CAqCjB;IAEF,OAAO,CAAC,oBAAoB,CAuB1B;IAEF,OAAO,CAAC,wBAAwB,CAwB9B;IAEK,WAAW,QAAO,QAAQ,EAAE,CAWjC;IAEK,iBAAiB,QAAO,OAAO,CA2BpC;IAEF,OAAO,CAAC,uBAAuB,CAW7B;IAEF,OAAO,CAAC,mBAAmB,CAEzB;IAEK,kBAAkB,WAAY,MAAM,KAAG,IAAI,CAoBhD;IAEF,OAAO,CAAC,2BAA2B,CAMjC;IAEK,oBAAoB,mBAAoB,oBAAoB,WAAW,MAAM,EAAE,KAAG,IAAI,CA6B3F;IAEF,OAAO,CAAC,8BAA8B,CAKpC;IAEF,OAAO,CAAC,oBAAoB,CAK1B;IAEF,OAAO,CAAC,2CAA2C;IAWnD,OAAO,CAAC,4BAA4B;IAIpC;;;;;;;;;;;;OAYG;IACI,kCAAkC,CAAC,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAyEpF;IAED,OAAO,CAAC,oBAAoB;IAIrB,sBAAsB,mBAAoB,oBAAoB,WAAW,MAAM,EAAE,KAAG,IAAI,CAiB7F;IAEK,oBAAoB,mBACP,oBAAoB,WAC3B,MAAM,EAAE,KAClB,OAAO,CAAC,IAAI,CAAC,CAWd;IAEF,OAAO,CAAC,oBAAoB,CAO1B;IAEK,mBAAmB,QAAO,iBAAiB,CAIhD;IAEK,eAAe,YAAa,MAAM,EAAE,KAAG,SAAS,EAAE,CAEvD;IAEK,YAAY,QAAO,SAAS,EAAE,CAEnC;IAEF;;;;;;;;;;;;;OAaG;IACI,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CA8B7D;IAEM,kBAAkB,QAAO,MAAM,CA0BpC;IAEK,sBAAsB,cAAe,eAAe,KAAG,IAAI,CAchE;IAEK,uBAAuB,QAAO,IAAI,CAQvC;IAEF;;;OAGG;IACI,mBAAmB,QAAO,IAAI,CAQnC;IAEF;;OAEG;IACI,cAAc,QAAO,IAAI,CAG9B;IAEK,eAAe,QAAO,OAAO,CAQlC;IAEK,WAAW,QAAO,MAAM,CAa7B;IAEK,OAAO,QAAO,OAAO,CAE1B;IAEK,mBAAmB,QAAO,cAAc,CAE7C;IAEK,UAAU,QAAO,OAAO,CAE7B;IAEK,gBAAgB,QAAO,IAAI,CAShC;CACL"}
|
package/esm/impl/tableFacade.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// (C) 2007-2026 GoodData Corporation
|
|
2
2
|
import { invariant } from "ts-invariant";
|
|
3
3
|
import { defFingerprint } from "@gooddata/sdk-model";
|
|
4
|
-
import { DataViewFacade, createExportFunction, emptyHeaderTitleFromIntl, } from "@gooddata/sdk-ui";
|
|
4
|
+
import { DataViewFacade, createExportFunction, createNumberFormatter, emptyHeaderTitleFromIntl, formatAttributeHeaderValues, } from "@gooddata/sdk-ui";
|
|
5
5
|
import { UIClick } from "../columnWidths.js";
|
|
6
6
|
import { getHeaderHeight } from "./base/agApiWrapper.js";
|
|
7
7
|
import { setColumnMaxWidth, setColumnMaxWidthIf } from "./base/agColumnWrapper.js";
|
|
@@ -78,12 +78,18 @@ export class TableFacade {
|
|
|
78
78
|
columnApi;
|
|
79
79
|
destroyed = false;
|
|
80
80
|
onPageLoadedCallback;
|
|
81
|
+
/**
|
|
82
|
+
* Gives element values of attributes with a number format their formatted name; applied to the
|
|
83
|
+
* initial data view and to every page loaded later so the table shows them consistently.
|
|
84
|
+
*/
|
|
85
|
+
formatDataView;
|
|
81
86
|
onExecutionTransformedCallback;
|
|
82
87
|
constructor(result, dataView, tableMethods, props, getCurrentAbortController) {
|
|
83
88
|
this.getCurrentAbortController = getCurrentAbortController;
|
|
84
89
|
this.intl = props.intl;
|
|
85
90
|
this.currentResult = result;
|
|
86
|
-
this.
|
|
91
|
+
this.formatDataView = (view) => formatAttributeHeaderValues(view, createNumberFormatter(props.config?.separators));
|
|
92
|
+
this.visibleData = DataViewFacade.for(this.formatDataView(dataView));
|
|
87
93
|
this.currentFingerprint = defFingerprint(this.currentResult.definition);
|
|
88
94
|
this.tableDescriptor = TableDescriptor.for(this.visibleData, emptyHeaderTitleFromIntl(props.intl), props.config, props.intl);
|
|
89
95
|
this.autoResizedColumns = {};
|
|
@@ -176,7 +182,7 @@ export class TableFacade {
|
|
|
176
182
|
onPageLoaded: this.onPageLoaded,
|
|
177
183
|
onExecutionTransformed: this.onExecutionTransformed,
|
|
178
184
|
onTransformedExecutionFailed: this.onTransformedExecutionFailed,
|
|
179
|
-
dataViewTransform:
|
|
185
|
+
dataViewTransform: this.formatDataView,
|
|
180
186
|
}, this.visibleData, this.gridApiGuard, this.intl, this.getCurrentAbortController);
|
|
181
187
|
};
|
|
182
188
|
onExecutionTransformed = (newExecution) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/AttributeHeader.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAMtF;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"AttributeHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/AttributeHeader.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAMtF;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,2CAgGzD"}
|
|
@@ -15,7 +15,6 @@ import { SortIndicator } from "./SortIndicator.js";
|
|
|
15
15
|
*/
|
|
16
16
|
export function AttributeHeader(params) {
|
|
17
17
|
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
18
|
-
const [isKeyboardTriggered, setIsKeyboardTriggered] = useState(false);
|
|
19
18
|
const colDef = params.column.getColDef();
|
|
20
19
|
const columnDefinition = colDef.context?.columnDefinition;
|
|
21
20
|
// Checks if this is a transposed value column under a pivot group
|
|
@@ -36,17 +35,11 @@ export function AttributeHeader(params) {
|
|
|
36
35
|
}, { measureIdentifiers: [], pivotAttributeDescriptors: [] }, params);
|
|
37
36
|
useHeaderSpaceKey(params, handleHeaderClick);
|
|
38
37
|
useHeaderMenuKeyboard(params, () => {
|
|
39
|
-
setIsKeyboardTriggered(true);
|
|
40
38
|
setIsMenuOpen(true);
|
|
41
39
|
}, hasMenuItems);
|
|
42
40
|
useHeaderCellAriaLabel(params.eGridHeader, headerCellAriaLabel);
|
|
43
41
|
return (_jsx(HeaderKeyboardHint, { eGridHeader: params.eGridHeader, enabled: isFirstDisplayedColumn(params), canSort: allowSorting, canOpenMenu: hasMenuItems, children: _jsxs("div", { className: e("header-cell", {
|
|
44
42
|
"is-menu-open": isMenuOpen,
|
|
45
43
|
drillable: isDrillable,
|
|
46
|
-
}), ...getPivotHeaderTestIdProps({ drillable: isDrillable }), children: [_jsxs("div", { className: "gd-header-content", "aria-hidden": "true", children: [_jsx("span", { className: "gd-header-text", ...getPivotHeaderTextTestIdProps(), children: params.displayName }), !!colDef.sortable && sortDirection ? (_jsx(SortIndicator, { sortDirection: sortDirection, sortIndex: sortIndex })) : null] }), !!colDef.sortable || !!isDrillable ? (_jsx("div", { className: "gd-header-cell-clickable-area", "aria-hidden": "true", ...getPivotHeaderClickableAreaTestIdProps(), onClick: handleHeaderClick })) : null, hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange:
|
|
47
|
-
setIsMenuOpen(opened);
|
|
48
|
-
if (!opened) {
|
|
49
|
-
setIsKeyboardTriggered(false);
|
|
50
|
-
}
|
|
51
|
-
}, isKeyboardTriggered: isKeyboardTriggered })) : null] }) }));
|
|
44
|
+
}), ...getPivotHeaderTestIdProps({ drillable: isDrillable }), children: [_jsxs("div", { className: "gd-header-content", "aria-hidden": "true", children: [_jsx("span", { className: "gd-header-text", ...getPivotHeaderTextTestIdProps(), children: params.displayName }), !!colDef.sortable && sortDirection ? (_jsx(SortIndicator, { sortDirection: sortDirection, sortIndex: sortIndex })) : null] }), !!colDef.sortable || !!isDrillable ? (_jsx("div", { className: "gd-header-cell-clickable-area", "aria-hidden": "true", ...getPivotHeaderClickableAreaTestIdProps(), onClick: handleHeaderClick })) : null, hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange: setIsMenuOpen })) : null] }) }));
|
|
52
45
|
}
|
|
@@ -8,11 +8,6 @@ export interface IHeaderMenuProps {
|
|
|
8
8
|
onSortingItemClick: (item: ISortingMenuItem) => void;
|
|
9
9
|
isMenuOpened: boolean;
|
|
10
10
|
onMenuOpenedChange: (opened: boolean) => void;
|
|
11
|
-
/**
|
|
12
|
-
* Whether the menu was opened via keyboard (Alt + Down Arrow).
|
|
13
|
-
* When true, the menu will autofocus on open.
|
|
14
|
-
*/
|
|
15
|
-
isKeyboardTriggered?: boolean;
|
|
16
11
|
}
|
|
17
|
-
export declare function HeaderMenu({ aggregationsItems, textWrappingItems, sortingItems, onAggregationsItemClick, onTextWrappingItemClick, onSortingItemClick, isMenuOpened, onMenuOpenedChange,
|
|
12
|
+
export declare function HeaderMenu({ aggregationsItems, textWrappingItems, sortingItems, onAggregationsItemClick, onTextWrappingItemClick, onSortingItemClick, isMenuOpened, onMenuOpenedChange, }: IHeaderMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
18
13
|
//# sourceMappingURL=HeaderMenu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderMenu.d.ts","sourceRoot":"","sources":["../../../../../src/next/components/Header/HeaderCell/HeaderMenu.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC7B,MAAM,wBAAwB,CAAC;AAQhC,MAAM,WAAW,gBAAgB;IAC7B,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAC3C,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAC3C,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,uBAAuB,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClE,uBAAuB,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC/D,kBAAkB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"HeaderMenu.d.ts","sourceRoot":"","sources":["../../../../../src/next/components/Header/HeaderCell/HeaderMenu.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC7B,MAAM,wBAAwB,CAAC;AAQhC,MAAM,WAAW,gBAAgB;IAC7B,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAC3C,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAC3C,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,uBAAuB,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClE,uBAAuB,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC/D,kBAAkB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAyBD,wBAAgB,UAAU,CAAC,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACrB,EAAE,gBAAgB,2CAsGlB"}
|
|
@@ -10,9 +10,14 @@ import { getPivotHeaderMenuButtonTestIdProps } from "../../../testing/dataTestId
|
|
|
10
10
|
import { HeaderInteractiveItem, buildUiMenuItems, } from "./HeaderMenuComponents.js";
|
|
11
11
|
function MenuToggler({ onClick }) {
|
|
12
12
|
const intl = useIntl();
|
|
13
|
-
return (_jsxs("button", { type: "button", className: e("header-cell-menu-button"), onClick: onClick,
|
|
13
|
+
return (_jsxs("button", { type: "button", className: e("header-cell-menu-button"), onClick: onClick, onKeyDownCapture: (event) => {
|
|
14
|
+
// Keep AG Grid's native header listener from sorting when activating this button.
|
|
15
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
16
|
+
event.stopPropagation();
|
|
17
|
+
}
|
|
18
|
+
}, "aria-label": intl.formatMessage(messages["openHeaderMenuAria"]), ...getPivotHeaderMenuButtonTestIdProps(), children: [_jsx(UiIcon, { type: "ellipsisVertical" }), _jsx("span", { className: e("header-cell-menu-clickable-area") })] }));
|
|
14
19
|
}
|
|
15
|
-
export function HeaderMenu({ aggregationsItems, textWrappingItems, sortingItems, onAggregationsItemClick, onTextWrappingItemClick, onSortingItemClick, isMenuOpened, onMenuOpenedChange,
|
|
20
|
+
export function HeaderMenu({ aggregationsItems, textWrappingItems, sortingItems, onAggregationsItemClick, onTextWrappingItemClick, onSortingItemClick, isMenuOpened, onMenuOpenedChange, }) {
|
|
16
21
|
const intl = useIntl();
|
|
17
22
|
const toggleDropdownRef = useRef(null);
|
|
18
23
|
const prevIsMenuOpenedRef = useRef(isMenuOpened);
|
|
@@ -59,7 +64,7 @@ export function HeaderMenu({ aggregationsItems, textWrappingItems, sortingItems,
|
|
|
59
64
|
return (_jsx("div", { className: e("header-cell-menu-button-wrapper"), children: _jsx(Dropdown, { isOpen: isMenuOpened, onToggle: handleToggle, closeOnEscape: true, closeOnOutsideClick: true, closeOnParentScroll: true, overlayPositionType: "sameAsTarget", alignPoints: [
|
|
60
65
|
{ align: "bl tl", offset: { x: -10, y: 16 } },
|
|
61
66
|
{ align: "br tr", offset: { x: -10, y: 16 } },
|
|
62
|
-
], accessibilityConfig: { triggerRole: "button", popupRole: "dialog" }, overlayZIndex: overlayZIndex, autofocusOnOpen:
|
|
67
|
+
], accessibilityConfig: { triggerRole: "button", popupRole: "dialog" }, overlayZIndex: overlayZIndex, autofocusOnOpen: true, renderButton: ({ toggleDropdown }) => {
|
|
63
68
|
toggleDropdownRef.current = toggleDropdown;
|
|
64
69
|
return _jsx(MenuToggler, { onClick: handleButtonClick });
|
|
65
70
|
}, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiMenu, { items: uiMenuItems, onSelect: handleSelect, onClose: closeDropdown, shouldCloseOnSelect: false, containerBottomPadding: "small", ariaAttributes: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasureGroupHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/MeasureGroupHeader.tsx"],"names":[],"mappings":"AAYA,OAAO,EACH,KAAK,wBAAwB,EAE7B,KAAK,kBAAkB,EAC1B,MAAM,uBAAuB,CAAC;AAW/B;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"MeasureGroupHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/MeasureGroupHeader.tsx"],"names":[],"mappings":"AAYA,OAAO,EACH,KAAK,wBAAwB,EAE7B,KAAK,kBAAkB,EAC1B,MAAM,uBAAuB,CAAC;AAW/B;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,2CAgGvF"}
|
|
@@ -20,7 +20,6 @@ import { getColumnMeasureIdentifier, getPivotAttributeDescriptorsForMeasureGroup
|
|
|
20
20
|
*/
|
|
21
21
|
export function MeasureGroupHeader(params) {
|
|
22
22
|
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
23
|
-
const [isKeyboardTriggered, setIsKeyboardTriggered] = useState(false);
|
|
24
23
|
const { isPivoted } = useColumnDefs();
|
|
25
24
|
const { config } = usePivotTableProps();
|
|
26
25
|
const { columnHeadersPosition } = config;
|
|
@@ -52,7 +51,6 @@ export function MeasureGroupHeader(params) {
|
|
|
52
51
|
}, { measureIdentifiers: measureIdentifier ? [measureIdentifier] : [], pivotAttributeDescriptors }, isHeader ? params : null);
|
|
53
52
|
const hasMenuItems = aggregationsItems.length > 0 || textWrappingItems.length > 0;
|
|
54
53
|
useHeaderMenuKeyboard(isHeader ? params : { eGridHeader: undefined }, () => {
|
|
55
|
-
setIsKeyboardTriggered(true);
|
|
56
54
|
setIsMenuOpen(true);
|
|
57
55
|
}, isHeader && hasMenuItems);
|
|
58
56
|
useHeaderCellAriaLabel(isHeader ? params.eGridHeader : undefined, headerCellAriaLabel);
|
|
@@ -65,12 +63,7 @@ export function MeasureGroupHeader(params) {
|
|
|
65
63
|
: (effectiveMeasure?.descriptor.measureHeaderItem.name ?? params.value);
|
|
66
64
|
return (_jsx(HeaderKeyboardHint, { eGridHeader: isHeader ? params.eGridHeader : undefined, enabled: isHeader && isFirstDisplayedColumn(params), canOpenMenu: hasMenuItems, children: _jsxs("div", { className: e("header-cell", {
|
|
67
65
|
"is-menu-open": isMenuOpen,
|
|
68
|
-
}), children: [_jsx("div", { className: "gd-header-content", "aria-hidden": "true", children: _jsx("span", { className: "gd-header-text", children: displayName }) }), hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange:
|
|
69
|
-
setIsMenuOpen(opened);
|
|
70
|
-
if (!opened) {
|
|
71
|
-
setIsKeyboardTriggered(false);
|
|
72
|
-
}
|
|
73
|
-
}, isKeyboardTriggered: isKeyboardTriggered })) : null] }) }));
|
|
66
|
+
}), children: [_jsx("div", { className: "gd-header-content", "aria-hidden": "true", children: _jsx("span", { className: "gd-header-text", children: displayName }) }), hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange: setIsMenuOpen })) : null] }) }));
|
|
74
67
|
}
|
|
75
68
|
// Distinguish between header params and cell params here
|
|
76
69
|
function isHeaderParams(p) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasureHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/MeasureHeader.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYtF;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"MeasureHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/MeasureHeader.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYtF;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,2CAyHvD"}
|
|
@@ -21,7 +21,6 @@ import { getColumnMeasureIdentifier, getColumnScope, getPivotAttributeDescriptor
|
|
|
21
21
|
*/
|
|
22
22
|
export function MeasureHeader(params) {
|
|
23
23
|
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
24
|
-
const [isKeyboardTriggered, setIsKeyboardTriggered] = useState(false);
|
|
25
24
|
const isTransposed = useIsTransposed();
|
|
26
25
|
const { isPivoted } = useColumnDefs();
|
|
27
26
|
const colDef = params.column.getColDef();
|
|
@@ -64,16 +63,10 @@ export function MeasureHeader(params) {
|
|
|
64
63
|
}, params);
|
|
65
64
|
useHeaderSpaceKey(params, handleTotalLabelClick ?? handleHeaderClick);
|
|
66
65
|
useHeaderMenuKeyboard(params, () => {
|
|
67
|
-
setIsKeyboardTriggered(true);
|
|
68
66
|
setIsMenuOpen(true);
|
|
69
67
|
}, hasMenuItems);
|
|
70
68
|
useHeaderCellAriaLabel(params.eGridHeader, headerCellAriaLabel, params.displayName);
|
|
71
69
|
return (_jsx(HeaderKeyboardHint, { eGridHeader: params.eGridHeader, enabled: isFirstDisplayedColumn(params), canSort: allowSorting, canOpenMenu: hasMenuItems, children: _jsxs("div", { className: e("header-cell", {
|
|
72
70
|
"is-menu-open": isMenuOpen,
|
|
73
|
-
}), onClick: handleTotalLabelClick, ...getPivotHeaderTestIdProps({ isTotal, isSubtotal }), children: [_jsxs("div", { className: "gd-header-content", "aria-hidden": "true", children: [_jsx("span", { className: "gd-header-text", ...getPivotHeaderTextTestIdProps(), children: customTotalLabel ?? params.displayName }), !!colDef.sortable && sortDirection ? (_jsx(SortIndicator, { sortDirection: sortDirection, sortIndex: sortIndex })) : null] }), !!colDef.sortable && (_jsx("div", { className: "gd-header-cell-clickable-area", "aria-hidden": "true", ...getPivotHeaderClickableAreaTestIdProps(), onClick: handleHeaderClick })), hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange:
|
|
74
|
-
setIsMenuOpen(opened);
|
|
75
|
-
if (!opened) {
|
|
76
|
-
setIsKeyboardTriggered(false);
|
|
77
|
-
}
|
|
78
|
-
}, isKeyboardTriggered: isKeyboardTriggered })) : null] }) }));
|
|
71
|
+
}), onClick: handleTotalLabelClick, ...getPivotHeaderTestIdProps({ isTotal, isSubtotal }), children: [_jsxs("div", { className: "gd-header-content", "aria-hidden": "true", children: [_jsx("span", { className: "gd-header-text", ...getPivotHeaderTextTestIdProps(), children: customTotalLabel ?? params.displayName }), !!colDef.sortable && sortDirection ? (_jsx(SortIndicator, { sortDirection: sortDirection, sortIndex: sortIndex })) : null] }), !!colDef.sortable && (_jsx("div", { className: "gd-header-cell-clickable-area", "aria-hidden": "true", ...getPivotHeaderClickableAreaTestIdProps(), onClick: handleHeaderClick })), hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange: setIsMenuOpen })) : null] }) }));
|
|
79
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotGroupHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/PivotGroupHeader.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAKhG,UAAU,qBAAsB,SAAQ,uBAAuB;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"PivotGroupHeader.d.ts","sourceRoot":"","sources":["../../../../src/next/components/Header/PivotGroupHeader.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAKhG,UAAU,qBAAsB,SAAQ,uBAAuB;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,2CA+I7D"}
|
|
@@ -19,7 +19,6 @@ import { getColumnScope, getPivotAttributeDescriptors, isValueColumnDef } from "
|
|
|
19
19
|
*/
|
|
20
20
|
export function PivotGroupHeader(params) {
|
|
21
21
|
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
22
|
-
const [isKeyboardTriggered, setIsKeyboardTriggered] = useState(false);
|
|
23
22
|
const isTransposed = useIsTransposed();
|
|
24
23
|
const colGroupDef = params.columnGroup.getColGroupDef();
|
|
25
24
|
const columnDefinition = colGroupDef?.context?.columnDefinition;
|
|
@@ -79,7 +78,6 @@ export function PivotGroupHeader(params) {
|
|
|
79
78
|
}, [isDrillable, handleHeaderDrill]);
|
|
80
79
|
useHeaderSpaceKey(params, handleTotalLabelClick ?? handleHeaderClick);
|
|
81
80
|
useHeaderMenuKeyboard(params, () => {
|
|
82
|
-
setIsKeyboardTriggered(true);
|
|
83
81
|
setIsMenuOpen(true);
|
|
84
82
|
}, hasMenuItems);
|
|
85
83
|
useHeaderCellAriaLabel(params.eGridHeader, headerCellAriaLabel, params.displayName);
|
|
@@ -90,10 +88,5 @@ export function PivotGroupHeader(params) {
|
|
|
90
88
|
drillable: isDrillable,
|
|
91
89
|
isTotal: isTotalHeader,
|
|
92
90
|
isSubtotal: isSubtotalHeader,
|
|
93
|
-
}), children: [_jsx("div", { className: "gd-header-content", "aria-hidden": "true", children: _jsx("span", { className: "gd-header-text", ...(ownsTotalLabel ? getPivotHeaderTextTestIdProps() : {}), children: visibleHeaderText }) }), isDrillable ? (_jsx("div", { className: "gd-header-cell-clickable-area", "aria-hidden": "true", ...getPivotHeaderClickableAreaTestIdProps(), onClick: handleHeaderClick })) : null, hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange:
|
|
94
|
-
setIsMenuOpen(opened);
|
|
95
|
-
if (!opened) {
|
|
96
|
-
setIsKeyboardTriggered(false);
|
|
97
|
-
}
|
|
98
|
-
}, isKeyboardTriggered: isKeyboardTriggered })) : null] }));
|
|
91
|
+
}), children: [_jsx("div", { className: "gd-header-content", "aria-hidden": "true", children: _jsx("span", { className: "gd-header-text", ...(ownsTotalLabel ? getPivotHeaderTextTestIdProps() : {}), children: visibleHeaderText }) }), isDrillable ? (_jsx("div", { className: "gd-header-cell-clickable-area", "aria-hidden": "true", ...getPivotHeaderClickableAreaTestIdProps(), onClick: handleHeaderClick })) : null, hasMenuItems ? (_jsx(HeaderMenu, { aggregationsItems: aggregationsItems, textWrappingItems: textWrappingItems, sortingItems: sortingItems, onAggregationsItemClick: handleAggregationsItemClick, onTextWrappingItemClick: handleTextWrappingItemClick, onSortingItemClick: handleSortingItemClick, isMenuOpened: isMenuOpen, onMenuOpenedChange: setIsMenuOpen })) : null] }));
|
|
99
92
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ISeparators } from "@gooddata/sdk-model";
|
|
2
|
-
import {
|
|
2
|
+
import { DataViewFacade, type ITableData } from "@gooddata/sdk-ui";
|
|
3
3
|
/**
|
|
4
4
|
* Returns table data from a DataViewFacade with consistent value formatting.
|
|
5
5
|
*
|
|
@@ -7,6 +7,10 @@ import { type DataViewFacade, type ITableData } from "@gooddata/sdk-ui";
|
|
|
7
7
|
* This ensures all access to table data uses the same formatter without HTML escaping.
|
|
8
8
|
* The DataViewFacade caches dataAccessMethods, so all calls must use the same formatter.
|
|
9
9
|
*
|
|
10
|
+
* Element values of attributes with a number format (numeric computed attributes) are formatted with the
|
|
11
|
+
* same formatter before the table data is built. This happens once per data view and separators; later
|
|
12
|
+
* calls for the same data view with the same separators return the cached table data.
|
|
13
|
+
*
|
|
10
14
|
* @param dataView - The data view facade
|
|
11
15
|
* @param separators - Number separators to use for formatting
|
|
12
16
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../../src/next/features/data/valueFormatter.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"valueFormatter.d.ts","sourceRoot":"","sources":["../../../../src/next/features/data/valueFormatter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACH,cAAc,EACd,KAAK,UAAU,EAGlB,MAAM,kBAAkB,CAAC;AAa1B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,UAAU,CAe3F"}
|
|
@@ -1,25 +1,13 @@
|
|
|
1
|
-
// (C) 2025 GoodData Corporation
|
|
2
|
-
import {
|
|
1
|
+
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
import { DataViewFacade, createNumberFormatter, formatAttributeHeaderValues, } from "@gooddata/sdk-ui";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Data views with formatted attribute element values, by the data view they were made from, together with
|
|
5
|
+
* the separators they were formatted with. Reusing the formatted view reuses its facade together with the
|
|
6
|
+
* table data the facade caches.
|
|
5
7
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Creates a value formatter that formats measure values without HTML escaping.
|
|
12
|
-
*
|
|
13
|
-
* @remarks
|
|
14
|
-
* This mirrors the old pivot table behavior.
|
|
15
|
-
*
|
|
16
|
-
* @param separators - number separators to use
|
|
17
|
-
*/
|
|
18
|
-
function createValueFormatter(separators) {
|
|
19
|
-
return (value, format) => {
|
|
20
|
-
const { formattedValue } = getFormattedNumber(value, format, separators);
|
|
21
|
-
return formattedValue;
|
|
22
|
-
};
|
|
8
|
+
const formattedDataViews = new WeakMap();
|
|
9
|
+
function separatorsKey(separators) {
|
|
10
|
+
return JSON.stringify([separators?.thousand, separators?.decimal]);
|
|
23
11
|
}
|
|
24
12
|
/**
|
|
25
13
|
* Returns table data from a DataViewFacade with consistent value formatting.
|
|
@@ -28,10 +16,25 @@ function createValueFormatter(separators) {
|
|
|
28
16
|
* This ensures all access to table data uses the same formatter without HTML escaping.
|
|
29
17
|
* The DataViewFacade caches dataAccessMethods, so all calls must use the same formatter.
|
|
30
18
|
*
|
|
19
|
+
* Element values of attributes with a number format (numeric computed attributes) are formatted with the
|
|
20
|
+
* same formatter before the table data is built. This happens once per data view and separators; later
|
|
21
|
+
* calls for the same data view with the same separators return the cached table data.
|
|
22
|
+
*
|
|
31
23
|
* @param dataView - The data view facade
|
|
32
24
|
* @param separators - Number separators to use for formatting
|
|
33
25
|
* @internal
|
|
34
26
|
*/
|
|
35
27
|
export function getTableData(dataView, separators) {
|
|
36
|
-
|
|
28
|
+
const valueFormatter = createNumberFormatter(separators);
|
|
29
|
+
const sourceDataView = dataView.dataView;
|
|
30
|
+
const key = separatorsKey(separators);
|
|
31
|
+
let cached = formattedDataViews.get(sourceDataView);
|
|
32
|
+
if (cached?.separatorsKey !== key) {
|
|
33
|
+
cached = {
|
|
34
|
+
separatorsKey: key,
|
|
35
|
+
dataView: formatAttributeHeaderValues(sourceDataView, valueFormatter),
|
|
36
|
+
};
|
|
37
|
+
formattedDataViews.set(sourceDataView, cached);
|
|
38
|
+
}
|
|
39
|
+
return DataViewFacade.for(cached.dataView).data({ valueFormatter }).asTable();
|
|
37
40
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-pivot",
|
|
3
|
-
"version": "11.65.0-alpha.
|
|
3
|
+
"version": "11.65.0-alpha.2",
|
|
4
4
|
"description": "GoodData.UI SDK - Pivot Table",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
"ts-invariant": "0.10.3",
|
|
43
43
|
"tslib": "2.8.1",
|
|
44
44
|
"uuid": "11.1.1",
|
|
45
|
-
"@gooddata/sdk-
|
|
46
|
-
"@gooddata/sdk-
|
|
47
|
-
"@gooddata/sdk-
|
|
48
|
-
"@gooddata/sdk-ui-kit": "11.65.0-alpha.
|
|
49
|
-
"@gooddata/sdk-ui-theme-provider": "11.65.0-alpha.
|
|
50
|
-
"@gooddata/sdk-ui-vis-commons": "11.65.0-alpha.
|
|
45
|
+
"@gooddata/sdk-model": "11.65.0-alpha.2",
|
|
46
|
+
"@gooddata/sdk-backend-spi": "11.65.0-alpha.2",
|
|
47
|
+
"@gooddata/sdk-ui": "11.65.0-alpha.2",
|
|
48
|
+
"@gooddata/sdk-ui-kit": "11.65.0-alpha.2",
|
|
49
|
+
"@gooddata/sdk-ui-theme-provider": "11.65.0-alpha.2",
|
|
50
|
+
"@gooddata/sdk-ui-vis-commons": "11.65.0-alpha.2"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@microsoft/api-documenter": "7.30.16",
|
|
@@ -85,12 +85,12 @@
|
|
|
85
85
|
"stylelint": "16.26.1",
|
|
86
86
|
"typescript": "7.0.2",
|
|
87
87
|
"vitest": "5.0.4",
|
|
88
|
-
"@gooddata/eslint-config": "11.65.0-alpha.
|
|
89
|
-
"@gooddata/oxlint-config": "11.65.0-alpha.
|
|
90
|
-
"@gooddata/
|
|
91
|
-
"@gooddata/sdk-backend-base": "11.65.0-alpha.
|
|
92
|
-
"@gooddata/
|
|
93
|
-
"@gooddata/
|
|
88
|
+
"@gooddata/eslint-config": "11.65.0-alpha.2",
|
|
89
|
+
"@gooddata/oxlint-config": "11.65.0-alpha.2",
|
|
90
|
+
"@gooddata/stylelint-config": "11.65.0-alpha.2",
|
|
91
|
+
"@gooddata/sdk-backend-base": "11.65.0-alpha.2",
|
|
92
|
+
"@gooddata/reference-workspace": "11.65.0-alpha.2",
|
|
93
|
+
"@gooddata/sdk-backend-mockingbird": "11.65.0-alpha.2"
|
|
94
94
|
},
|
|
95
95
|
"peerDependencies": {
|
|
96
96
|
"react": "^18.0.0 || ^19.0.0",
|