@adaptabletools/adaptable-cjs 23.0.0-canary.0 → 23.0.0-canary.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.
Files changed (59) hide show
  1. package/index.css +88 -67
  2. package/package.json +1 -1
  3. package/src/AdaptableOptions/ColumnMenuOptions.d.ts +3 -3
  4. package/src/AdaptableOptions/ContextMenuOptions.d.ts +3 -3
  5. package/src/AdaptableState/LayoutState.d.ts +5 -4
  6. package/src/AdaptableState/StyledColumnState.d.ts +7 -16
  7. package/src/AdaptableState/StyledColumnState.js +10 -0
  8. package/src/Strategy/ExportModule.js +13 -1
  9. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +1 -1
  10. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +1 -1
  11. package/src/View/Alert/Wizard/AlertWizard.js +2 -2
  12. package/src/View/Components/ColumnFilter/AdaptableColumnFilter.d.ts +3 -1
  13. package/src/View/Components/ColumnFilter/AdaptableColumnFilter.js +9 -2
  14. package/src/View/Components/ColumnFilter/ColumnFilter.d.ts +2 -1
  15. package/src/View/Components/ColumnFilter/ColumnFilter.js +3 -2
  16. package/src/View/Components/ColumnFilter/columnFilterLocation.d.ts +2 -0
  17. package/src/View/Components/ColumnFilter/columnFilterLocation.js +5 -0
  18. package/src/View/Components/FilterForm/ListBoxFilterForm.js +2 -1
  19. package/src/View/Export/Wizard/ExportPopupWizardRouter.js +10 -1
  20. package/src/View/Export/Wizard/ScheduledReportSettings.d.ts +3 -1
  21. package/src/View/Export/Wizard/ScheduledReportSettings.js +8 -1
  22. package/src/View/Export/Wizard/ScheduledReportWizard.js +8 -3
  23. package/src/View/Export/Wizard/isReportScheduledSettingsValid.d.ts +1 -1
  24. package/src/View/Export/Wizard/isReportScheduledSettingsValid.js +3 -0
  25. package/src/View/Layout/Wizard/LayoutWizard.js +7 -2
  26. package/src/View/Layout/Wizard/sections/ColumnsSection.js +1 -1
  27. package/src/View/Layout/Wizard/sections/RowGroupingSection.js +6 -2
  28. package/src/View/renderWithAdaptableContext.js +1 -1
  29. package/src/agGrid/AdaptableAgGrid.js +2 -2
  30. package/src/agGrid/AdaptableFrameworkComponent.d.ts +25 -3
  31. package/src/agGrid/AgGridFilterAdapter.js +3 -1
  32. package/src/components/Combobox/index.js +1 -1
  33. package/src/components/Datepicker/index.js +4 -4
  34. package/src/components/NewDropdownButton/index.js +1 -1
  35. package/src/components/NewSelect/index.js +2 -2
  36. package/src/components/NewTooltip/index.js +1 -1
  37. package/src/components/ui/button.js +1 -1
  38. package/src/components/ui/calendar.d.ts +1 -1
  39. package/src/components/ui/calendar.js +2 -2
  40. package/src/components/ui/combobox.js +3 -3
  41. package/src/components/ui/dropdown-menu.js +1 -1
  42. package/src/components/ui/input-group.d.ts +1 -1
  43. package/src/components/ui/input-group.js +4 -4
  44. package/src/components/ui/input.js +1 -1
  45. package/src/components/ui/popover.js +1 -1
  46. package/src/components/ui/select.js +1 -1
  47. package/src/components/ui/textarea.js +1 -1
  48. package/src/components/ui/tooltip.js +1 -1
  49. package/src/env.js +2 -2
  50. package/src/layout-manager/src/LayoutManagerModel.d.ts +2 -2
  51. package/src/layout-manager/src/index.js +5 -4
  52. package/src/layout-manager/src/normalizeLayoutModel.js +5 -1
  53. package/src/layout-manager/src/rowGroupDisplayType.d.ts +6 -0
  54. package/src/layout-manager/src/rowGroupDisplayType.js +29 -0
  55. package/src/metamodel/adaptable.metamodel.d.ts +12 -24
  56. package/src/metamodel/adaptable.metamodel.js +1 -1
  57. package/src/types.d.ts +1 -1
  58. package/themes/dark.css +10 -2
  59. package/tsconfig.cjs.tsbuildinfo +1 -1
@@ -24,6 +24,10 @@ const isPivotLayout_1 = require("../../../Utilities/isPivotLayout");
24
24
  const PivotRowGroupingSection_1 = require("./sections/PivotRowGroupingSection");
25
25
  const PivotAggregationsSection_1 = require("./sections/PivotAggregationsSection");
26
26
  const Flex_1 = require("../../../components/Flex");
27
+ const getLayoutWizardTitle = (layout, moduleFriendlyName) => {
28
+ const layoutName = layout.Name?.trim();
29
+ return layoutName ? `${moduleFriendlyName} (${layoutName})` : moduleFriendlyName;
30
+ };
27
31
  const LayoutWizard = (props) => {
28
32
  const dispatch = (0, react_redux_1.useDispatch)();
29
33
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
@@ -77,7 +81,8 @@ const LayoutWizard = (props) => {
77
81
  props.onFinishWizard(layout);
78
82
  };
79
83
  const layoutSupportedFeatures = adaptable.api.layoutApi.internalApi.getLayoutSupportedFeatures();
80
- return (0, isPivotLayout_1.isPivotLayout)(layout) ? ((0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: layout, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
84
+ const wizardTitle = getLayoutWizardTitle(layout, props.moduleInfo.FriendlyName);
85
+ return (0, isPivotLayout_1.isPivotLayout)(layout) ? ((0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, moduleName: wizardTitle, data: layout, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
81
86
  {
82
87
  title: 'Settings',
83
88
  details: 'Configure Pivot Layout',
@@ -155,7 +160,7 @@ const LayoutWizard = (props) => {
155
160
  render: () => ((0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:p-2", children: (0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageWizardSummary, {}) })),
156
161
  title: 'Summary',
157
162
  },
158
- ] })) : ((0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: layout, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
163
+ ] })) : ((0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, moduleName: wizardTitle, data: layout, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
159
164
  {
160
165
  title: 'Settings',
161
166
  details: 'Configure Table Layout',
@@ -194,7 +194,7 @@ const ColumnsSection = (props) => {
194
194
  if (layout.RowGroupDisplayType === 'single') {
195
195
  allColumns.unshift((0, ColumnApiImpl_1.generateAutoRowGroupSingleColumn)());
196
196
  }
197
- else {
197
+ else if (layout.RowGroupDisplayType === 'multi') {
198
198
  [...layout.RowGroupedColumns].reverse().forEach((col) => {
199
199
  const groupCol = (0, ColumnApiImpl_1.generateAutoRowGroupColumnForColumn)(adaptable.api.columnApi.getColumnWithColumnId(col));
200
200
  allColumns.unshift(groupCol);
@@ -79,10 +79,14 @@ const RowGroupingSection = (props) => {
79
79
  if (RowGroupDisplayType === 'single') {
80
80
  newLayout.TableColumns = (newLayout.TableColumns || []).filter((colId) => !adaptable.api.columnApi.isAutoRowGroupColumnForMulti(colId));
81
81
  }
82
- else {
82
+ else if (RowGroupDisplayType === 'multi') {
83
83
  newLayout.TableColumns = (newLayout.TableColumns || []).filter((colId) => !adaptable.api.columnApi.isAutoRowGroupColumnForSingle(colId));
84
84
  }
85
+ else {
86
+ newLayout.TableColumns = (newLayout.TableColumns || []).filter((colId) => !adaptable.api.columnApi.isAutoRowGroupColumnForSingle(colId) &&
87
+ !adaptable.api.columnApi.isAutoRowGroupColumnForMulti(colId));
88
+ }
85
89
  onChange(newLayout);
86
- }, children: [(0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { value: "single", text: "Single Column", description: "All Row Grouped Columns display in one hierarchical Column" }), (0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { value: "multi", text: "Multiple Columns", description: "Each Row Grouped Column displays in its own, separate, Column" })] }) }) })] }), (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { className: "twa:mt-2", children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Row Grouped Columns" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: rowGroupsText }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(ValueSelector_1.ValueSelector, { showFilterInput: true, filter: Utilities_1.columnFilter, toIdentifier: (option) => `${option.columnId}`, toLabel: (option) => option.friendlyName ?? option.columnId, toListLabel: (option) => ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { alignItems: "center", children: [option.friendlyName ?? option.columnId, (0, jsx_runtime_1.jsx)(ColumnGroupTag_1.ColumnGroupTag, { column: option })] })), options: sortedGroupableColumns, value: layout.RowGroupedColumns ?? [], allowReorder: true, onChange: handleColumnsChange }) }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(exports.RowGroupBehaviorSection, { layout: layout, onChange: onChange }) })] })] }));
90
+ }, children: [(0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { value: "single", text: "Single Column", description: "All Row Grouped Columns display in one hierarchical Column" }), (0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { value: "multi", text: "Multiple Columns", description: "Each Row Grouped Column displays in its own, separate, Column" }), (0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { value: "groupRows", text: "Full Width Group Rows", description: "Row groups display as full-width rows (no group column and no aggregations)" })] }) }) })] }), (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { className: "twa:mt-2", children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Row Grouped Columns" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: rowGroupsText }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(ValueSelector_1.ValueSelector, { showFilterInput: true, filter: Utilities_1.columnFilter, toIdentifier: (option) => `${option.columnId}`, toLabel: (option) => option.friendlyName ?? option.columnId, toListLabel: (option) => ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { alignItems: "center", children: [option.friendlyName ?? option.columnId, (0, jsx_runtime_1.jsx)(ColumnGroupTag_1.ColumnGroupTag, { column: option })] })), options: sortedGroupableColumns, value: layout.RowGroupedColumns ?? [], allowReorder: true, onChange: handleColumnsChange }) }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(exports.RowGroupBehaviorSection, { layout: layout, onChange: onChange }) })] })] }));
87
91
  };
88
92
  exports.RowGroupingSection = RowGroupingSection;
@@ -6,7 +6,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const react_redux_1 = require("react-redux");
7
7
  const AdaptableContext_1 = tslib_1.__importDefault(require("./AdaptableContext"));
8
8
  const AdaptableComputedCSSVarsContext_1 = require("./AdaptableComputedCSSVarsContext");
9
- const tooltip_1 = require("~/components/ui/tooltip");
9
+ const tooltip_1 = require("../components/ui/tooltip");
10
10
  const renderWithAdaptableContext = (children, adaptable) => {
11
11
  return ((0, jsx_runtime_1.jsx)(tooltip_1.TooltipProvider, { delay: 300, children: (0, jsx_runtime_1.jsx)(react_redux_1.Provider, { store: adaptable.adaptableStore.TheStore, children: (0, jsx_runtime_1.jsx)(AdaptableComputedCSSVarsContext_1.WithAdaptableComputedCSSVars, { children: (0, jsx_runtime_1.jsx)(AdaptableContext_1.default.Provider, { value: adaptable, children: children }) }) }) }));
12
12
  };
@@ -100,6 +100,7 @@ const FlashingCellService_1 = require("../Utilities/Services/FlashingCellService
100
100
  const AgGridExportAdapter_1 = require("./AgGridExportAdapter");
101
101
  const LayoutHelpers_1 = require("../Api/Implementation/LayoutHelpers");
102
102
  const src_1 = require("../layout-manager/src");
103
+ const rowGroupDisplayType_1 = require("../layout-manager/src/rowGroupDisplayType");
103
104
  const isPivotLayoutModel_1 = require("../layout-manager/src/isPivotLayoutModel");
104
105
  const AdaptableColumn_1 = require("../AdaptableState/Common/AdaptableColumn");
105
106
  const agGridDataTypeDefinitions_1 = require("./agGridDataTypeDefinitions");
@@ -465,8 +466,7 @@ class AdaptableAgGrid {
465
466
  if ((0, isPivotLayoutModel_1.isPivotLayoutModel)(layoutModel)) {
466
467
  gridOptions.pivotDefaultExpanded = layoutModel.PivotExpandLevel;
467
468
  }
468
- gridOptions.groupDisplayType =
469
- layoutModel.RowGroupDisplayType === 'multi' ? 'multipleColumns' : 'singleColumn';
469
+ gridOptions.groupDisplayType = (0, rowGroupDisplayType_1.rowGroupDisplayTypeToGridOption)(layoutModel.RowGroupDisplayType);
470
470
  // fixes issue #3053
471
471
  gridOptions.suppressAggFuncInHeader = !!layoutModel.SuppressAggFuncInHeader;
472
472
  if (!(0, isPivotLayoutModel_1.isPivotLayoutModel)(layoutModel) &&
@@ -1,5 +1,5 @@
1
1
  import { AdaptableApi } from '../Api/AdaptableApi';
2
- import { ReactElement } from 'react';
2
+ import { ComponentType, ReactElement } from 'react';
3
3
  import { BaseContext } from '../types';
4
4
  /**
5
5
  * Base Component for Bespoke Components: can be Angular, React or Vue
@@ -21,12 +21,34 @@ export type AngularFrameworkComponent<T = unknown> = {
21
21
  }) => Partial<T>;
22
22
  };
23
23
  /**
24
- *
25
- * A function that returns a ReactNode
24
+ * A function that returns a ReactNode (toolbars, settings panels, tool panels, etc.).
25
+ * For custom Column / Context menu rows, use `ReactMenuItemFrameworkComponent` instead.
26
26
  */
27
27
  export type ReactFrameworkComponent = ({ adaptableApi, }: {
28
28
  adaptableApi: AdaptableApi;
29
29
  }) => ReactElement;
30
+ /** AdapTable extras passed on AG Grid `menuItemParams` for custom menu items. */
31
+ export interface AdaptableMenuItemParams<TMenuContext = unknown> {
32
+ adaptableApi: AdaptableApi;
33
+ menuContext: TMenuContext;
34
+ }
35
+ /**
36
+ * Props AG Grid passes to React custom menu item components, with AdapTable
37
+ * `menuItemParams` (see `AgGridMenuAdapter.mapCustomMenuItemToAgGridMenuDefinition`).
38
+ */
39
+ export interface AdaptableReactMenuItemProps<TMenuContext = unknown> {
40
+ name: string;
41
+ menuItemParams: AdaptableMenuItemParams<TMenuContext> & Record<string, unknown>;
42
+ }
43
+ /**
44
+ * React component for custom Column / Context menu rows (AG Grid `menuItem`).
45
+ * Unlike `ReactFrameworkComponent`, receives `name` and `menuItemParams`, not only `adaptableApi`.
46
+ */
47
+ export type ReactMenuItemFrameworkComponent<TMenuContext = unknown> = ComponentType<AdaptableReactMenuItemProps<TMenuContext>>;
48
+ /**
49
+ * Framework component for a custom menu item (Column Menu or Context Menu).
50
+ */
51
+ export type MenuItemFrameworkComponent<TMenuContext = unknown> = AngularFrameworkComponent | VueFrameworkComponent | ReactMenuItemFrameworkComponent<TMenuContext>;
30
52
  /**
31
53
  * Creates a Vue Component to be used in AdapTable UI controls
32
54
  */
@@ -42,10 +42,12 @@ const AgGridFilterAdapterFactory = (adaptable) => {
42
42
  const columnId = this.column.getColId();
43
43
  let column = adaptable.api.columnApi.getColumnWithColumnId(columnId);
44
44
  if (column) {
45
+ const isFiltersToolPanel = typeof params?.hidePopup !== 'function';
46
+ const location = isFiltersToolPanel ? 'filtersToolPanel' : 'columnMenu';
45
47
  this.unmountReactRoot = adaptable.renderReactRoot((0, renderWithAdaptableContext_1.renderWithAdaptableContext)(React.createElement(AdaptableColumnFilter_1.AdaptableColumnFilter, {
46
48
  columnId,
47
49
  wrapperProps: { className: 'twa:p-2' },
48
- location: 'columnMenu',
50
+ location,
49
51
  }), adaptable), this.filterContainer);
50
52
  }
51
53
  }
@@ -4,7 +4,7 @@ exports.GridFilterCombobox = exports.MultiCombobox = exports.SingleCombobox = vo
4
4
  const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
- const combobox_1 = require("~/components/ui/combobox");
7
+ const combobox_1 = require("../ui/combobox");
8
8
  const utils_1 = require("../../lib/utils");
9
9
  const lucide_react_1 = require("lucide-react");
10
10
  const react_1 = require("react");
@@ -13,10 +13,10 @@ const DatepickerContext_1 = require("./DatepickerContext");
13
13
  const AdaptableDateInlineInput_1 = require("../../View/Components/AdaptableInput/AdaptableDateInlineInput");
14
14
  const date_fns_1 = require("date-fns");
15
15
  const Flex_1 = require("../Flex");
16
- const utils_1 = require("~/lib/utils");
17
- const popover_1 = require("~/components/ui/popover");
18
- const calendar_1 = require("~/components/ui/calendar");
19
- const input_group_1 = require("~/components/ui/input-group");
16
+ const utils_1 = require("../../lib/utils");
17
+ const popover_1 = require("../ui/popover");
18
+ const calendar_1 = require("../ui/calendar");
19
+ const input_group_1 = require("../ui/input-group");
20
20
  const NewSelect_1 = require("../NewSelect");
21
21
  const twUtils_1 = require("../twUtils");
22
22
  // ── Caption dropdown components (month/year) ──────────────────────────
@@ -4,7 +4,7 @@ exports.NewDropdownButton = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
- const dropdown_menu_1 = require("~/components/ui/dropdown-menu");
7
+ const dropdown_menu_1 = require("../ui/dropdown-menu");
8
8
  const NewTooltip_1 = require("../NewTooltip");
9
9
  const utils_1 = require("../../lib/utils");
10
10
  const lucide_react_1 = require("lucide-react");
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MultiSelect = exports.SingleSelect = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
- const select_1 = require("~/components/ui/select");
7
- const tooltip_1 = require("~/components/ui/tooltip");
6
+ const select_1 = require("../ui/select");
7
+ const tooltip_1 = require("../ui/tooltip");
8
8
  const utils_1 = require("../../lib/utils");
9
9
  const react_1 = tslib_1.__importDefault(require("react"));
10
10
  const getItemTitle = (label, value) => {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NewTooltip = NewTooltip;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const tooltip_1 = require("~/components/ui/tooltip");
5
+ const tooltip_1 = require("../ui/tooltip");
6
6
  function NewTooltip({ label, children, side, align }) {
7
7
  if (!label) {
8
8
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
@@ -5,7 +5,7 @@ exports.Button = Button;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const button_1 = require("@base-ui/react/button");
7
7
  const class_variance_authority_1 = require("class-variance-authority");
8
- const utils_1 = require("~/lib/utils");
8
+ const utils_1 = require("../../lib/utils");
9
9
  const buttonVariants = (0, class_variance_authority_1.cva)('twa:group/button twa:inline-flex twa:shrink-0 twa:items-center twa:justify-center twa:rounded-button twa:border twa:border-transparent twa:bg-clip-padding twa:text-sm twa:font-medium twa:whitespace-nowrap twa:transition-all twa:outline-none twa:select-none twa:focus-visible:border-ring twa:focus-visible:ring-3 twa:focus-visible:ring-ring/50 twa:active:translate-y-px twa:disabled:pointer-events-none twa:disabled:opacity-50 twa:aria-invalid:border-destructive twa:aria-invalid:ring-3 twa:aria-invalid:ring-destructive/20 twa:dark:aria-invalid:border-destructive/50 twa:dark:aria-invalid:ring-destructive/40 twa:[&_svg]:pointer-events-none twa:[&_svg]:shrink-0 twa:[&_svg:not([class*=size-])]:size-4', {
10
10
  variants: {
11
11
  variant: {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { DayPicker } from 'react-day-picker';
3
- import { Button } from '~/components/ui/button';
3
+ import { Button } from './button';
4
4
  declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, locale, formatters, components, ...props }: React.ComponentProps<typeof DayPicker> & {
5
5
  buttonVariant?: React.ComponentProps<typeof Button>['variant'];
6
6
  }): React.JSX.Element;
@@ -5,8 +5,8 @@ const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const react_day_picker_1 = require("react-day-picker");
8
- const utils_1 = require("~/lib/utils");
9
- const button_1 = require("~/components/ui/button");
8
+ const utils_1 = require("../../lib/utils");
9
+ const button_1 = require("./button");
10
10
  const lucide_react_1 = require("lucide-react");
11
11
  const CalendarRoot = ({ className, rootRef, ...props }) => {
12
12
  return (0, jsx_runtime_1.jsx)("div", { "data-slot": "calendar", ref: rootRef, className: (0, utils_1.cn)(className), ...props });
@@ -22,9 +22,9 @@ const jsx_runtime_1 = require("react/jsx-runtime");
22
22
  const React = tslib_1.__importStar(require("react"));
23
23
  const react_1 = require("@base-ui/react");
24
24
  Object.defineProperty(exports, "ComboboxPrimitive", { enumerable: true, get: function () { return react_1.Combobox; } });
25
- const utils_1 = require("~/lib/utils");
26
- const button_1 = require("~/components/ui/button");
27
- const input_group_1 = require("~/components/ui/input-group");
25
+ const utils_1 = require("../../lib/utils");
26
+ const button_1 = require("./button");
27
+ const input_group_1 = require("./input-group");
28
28
  const lucide_react_1 = require("lucide-react");
29
29
  const CheckBox_1 = require("../CheckBox");
30
30
  const useFilteredItems = react_1.Combobox.useFilteredItems;
@@ -17,7 +17,7 @@ exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
17
17
  exports.DropdownMenuSubContent = DropdownMenuSubContent;
18
18
  const jsx_runtime_1 = require("react/jsx-runtime");
19
19
  const menu_1 = require("@base-ui/react/menu");
20
- const utils_1 = require("~/lib/utils");
20
+ const utils_1 = require("../../lib/utils");
21
21
  const lucide_react_1 = require("lucide-react");
22
22
  function DropdownMenu({ ...props }) {
23
23
  return (0, jsx_runtime_1.jsx)(menu_1.Menu.Root, { "data-slot": "dropdown-menu", ...props });
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
- import { Button } from '~/components/ui/button';
3
+ import { Button } from './button';
4
4
  declare function InputGroup({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
5
5
  declare const inputGroupAddonVariants: (props?: {
6
6
  align?: "inline-end" | "inline-start" | "block-end" | "block-start";
@@ -9,10 +9,10 @@ exports.InputGroupInput = InputGroupInput;
9
9
  exports.InputGroupTextarea = InputGroupTextarea;
10
10
  const jsx_runtime_1 = require("react/jsx-runtime");
11
11
  const class_variance_authority_1 = require("class-variance-authority");
12
- const utils_1 = require("~/lib/utils");
13
- const button_1 = require("~/components/ui/button");
14
- const input_1 = require("~/components/ui/input");
15
- const textarea_1 = require("~/components/ui/textarea");
12
+ const utils_1 = require("../../lib/utils");
13
+ const button_1 = require("./button");
14
+ const input_1 = require("./input");
15
+ const textarea_1 = require("./textarea");
16
16
  function InputGroup({ className, ...props }) {
17
17
  return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "input-group", role: "group", className: (0, utils_1.cn)('twa:group/input-group twa:relative twa:flex twa:h-input twa:w-full twa:min-w-0 twa:items-center twa:rounded-input twa:border twa:border-input twa:shadow-xs twa:transition-[color,box-shadow] twa:outline-none twa:in-data-[slot=combobox-content]:focus-within:border-inherit twa:in-data-[slot=combobox-content]:focus-within:ring-0 twa:has-[[data-slot=input-group-control]:focus-visible]:border-ring twa:has-[[data-slot=input-group-control]:focus-visible]:ring-3 twa:has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 twa:has-[[data-slot][aria-invalid=true]]:border-destructive twa:has-[[data-slot][aria-invalid=true]]:ring-3 twa:has-[[data-slot][aria-invalid=true]]:ring-destructive/20 twa:has-[>[data-align=block-end]]:h-auto twa:has-[>[data-align=block-end]]:flex-col twa:has-[>[data-align=block-start]]:h-auto twa:has-[>[data-align=block-start]]:flex-col twa:has-[>textarea]:h-auto twa:dark:bg-input/30 twa:dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 twa:has-[>[data-align=block-end]]:[&>input]:pt-3 twa:has-[>[data-align=block-start]]:[&>input]:pb-3 twa:has-[>[data-align=inline-end]]:[&>input]:pr-1.5 twa:has-[>[data-align=inline-start]]:[&>input]:pl-1.5', className), ...props }));
18
18
  }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Input = Input;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const input_1 = require("@base-ui/react/input");
6
- const utils_1 = require("~/lib/utils");
6
+ const utils_1 = require("../../lib/utils");
7
7
  function Input({ className, type, ...props }) {
8
8
  return ((0, jsx_runtime_1.jsx)(input_1.Input, { type: type, "data-slot": "input", className: (0, utils_1.cn)("twa:h-9 twa:w-full twa:min-w-0 twa:rounded-md twa:border twa:border-input twa:bg-transparent twa:px-2.5 twa:py-1 twa:text-base twa:shadow-xs twa:transition-[color,box-shadow] twa:outline-none twa:file:inline-flex twa:file:h-7 twa:file:border-0 twa:file:bg-transparent twa:file:text-sm twa:file:font-medium twa:file:text-foreground twa:placeholder:text-muted-foreground twa:focus-visible:border-ring twa:focus-visible:ring-3 twa:focus-visible:ring-ring/50 twa:disabled:pointer-events-none twa:disabled:cursor-not-allowed twa:disabled:opacity-50 twa:aria-invalid:border-destructive twa:aria-invalid:ring-3 twa:aria-invalid:ring-destructive/20 twa:md:text-sm twa:dark:bg-input/30 twa:dark:aria-invalid:border-destructive/50 twa:dark:aria-invalid:ring-destructive/40", className), ...props }));
9
9
  }
@@ -8,7 +8,7 @@ exports.PopoverTitle = PopoverTitle;
8
8
  exports.PopoverTrigger = PopoverTrigger;
9
9
  const jsx_runtime_1 = require("react/jsx-runtime");
10
10
  const popover_1 = require("@base-ui/react/popover");
11
- const utils_1 = require("~/lib/utils");
11
+ const utils_1 = require("../../lib/utils");
12
12
  function Popover({ ...props }) {
13
13
  return (0, jsx_runtime_1.jsx)(popover_1.Popover.Root, { "data-slot": "popover", ...props });
14
14
  }
@@ -12,7 +12,7 @@ exports.SelectTrigger = SelectTrigger;
12
12
  exports.SelectValue = SelectValue;
13
13
  const jsx_runtime_1 = require("react/jsx-runtime");
14
14
  const select_1 = require("@base-ui/react/select");
15
- const utils_1 = require("~/lib/utils");
15
+ const utils_1 = require("../../lib/utils");
16
16
  const lucide_react_1 = require("lucide-react");
17
17
  const Select = select_1.Select.Root;
18
18
  exports.Select = Select;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Textarea = Textarea;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const utils_1 = require("~/lib/utils");
5
+ const utils_1 = require("../../lib/utils");
6
6
  function Textarea({ className, ...props }) {
7
7
  return ((0, jsx_runtime_1.jsx)("textarea", { "data-slot": "textarea", className: (0, utils_1.cn)("twa:flex twa:field-sizing-content twa:min-h-16 twa:w-full twa:rounded-md twa:border twa:border-input twa:bg-transparent twa:px-2.5 twa:py-2 twa:text-base twa:shadow-xs twa:transition-[color,box-shadow] twa:outline-none twa:placeholder:text-muted-foreground twa:focus-visible:border-ring twa:focus-visible:ring-3 twa:focus-visible:ring-ring/50 twa:disabled:cursor-not-allowed twa:disabled:opacity-50 twa:aria-invalid:border-destructive twa:aria-invalid:ring-3 twa:aria-invalid:ring-destructive/20 twa:md:text-sm twa:dark:bg-input/30 twa:dark:aria-invalid:border-destructive/50 twa:dark:aria-invalid:ring-destructive/40", className), ...props }));
8
8
  }
@@ -6,7 +6,7 @@ exports.TooltipContent = TooltipContent;
6
6
  exports.TooltipProvider = TooltipProvider;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const tooltip_1 = require("@base-ui/react/tooltip");
9
- const utils_1 = require("~/lib/utils");
9
+ const utils_1 = require("../../lib/utils");
10
10
  function TooltipProvider({ delay = 0, ...props }) {
11
11
  return ((0, jsx_runtime_1.jsx)(tooltip_1.Tooltip.Provider, { "data-slot": "tooltip-provider", delay: delay, ...props }));
12
12
  }
package/src/env.js CHANGED
@@ -2,6 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = {
4
4
  NEXT_PUBLIC_INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
5
- PUBLISH_TIMESTAMP: 1780392719013 || Date.now(),
6
- VERSION: "23.0.0-canary.0" || '--current-version--',
5
+ PUBLISH_TIMESTAMP: 1780405607097 || Date.now(),
6
+ VERSION: "23.0.0-canary.2" || '--current-version--',
7
7
  };
@@ -1,4 +1,4 @@
1
- import { ColumnSizingMap, LayoutRowSelection } from '../../AdaptableState/LayoutState';
1
+ import { ColumnSizingMap, LayoutRowSelection, RowGroupDisplayType } from '../../AdaptableState/LayoutState';
2
2
  import { XOR } from '../../Utilities/Extensions/TypeExtensions';
3
3
  /**
4
4
  * Defines how a Column is sorted
@@ -17,7 +17,7 @@ export interface BaseLayoutModel {
17
17
  /**
18
18
  * @defaultValue 'single'
19
19
  */
20
- RowGroupDisplayType?: 'single' | 'multi';
20
+ RowGroupDisplayType?: RowGroupDisplayType;
21
21
  /**
22
22
  * Those are not actually used by the LayoutManager,
23
23
  * but we need to keep them here so we can give the layout
@@ -5,6 +5,7 @@ const infinite_react_1 = require("@infinite-table/infinite-react");
5
5
  const isPivotLayoutModel_1 = require("./isPivotLayoutModel");
6
6
  const LMEmitter_1 = require("./LMEmitter");
7
7
  const normalizeLayoutModel_1 = require("./normalizeLayoutModel");
8
+ const rowGroupDisplayType_1 = require("./rowGroupDisplayType");
8
9
  const isLayoutEqual_1 = require("./isLayoutEqual");
9
10
  const simplifyLayoutModel_1 = require("./simplifyLayoutModel");
10
11
  const sortColumnIdsByOrder_1 = require("./sortColumnIdsByOrder");
@@ -555,7 +556,7 @@ class LayoutManager extends LMEmitter_1.LMEmitter {
555
556
  if (groupDisplayType === 'singleColumn') {
556
557
  colsInLayout.add(normalizeLayoutModel_1.AUTO_GROUP_COLUMN_ID__SINGLE);
557
558
  }
558
- else {
559
+ else if (groupDisplayType === 'multipleColumns') {
559
560
  this.currentLayout.RowGroupedColumns.forEach((colId) => {
560
561
  colsInLayout.add(`${normalizeLayoutModel_1.AUTO_GROUP_COLUMN_ID__MULTI_PREFIX}${colId}`);
561
562
  });
@@ -763,7 +764,7 @@ class LayoutManager extends LMEmitter_1.LMEmitter {
763
764
  ColumnGroupValues,
764
765
  GrandTotalRow: this.gridApi.getGridOption('grandTotalRow'),
765
766
  SuppressAggFuncInHeader: this.gridApi.getGridOption('suppressAggFuncInHeader'),
766
- RowGroupDisplayType: this.gridApi.getGridOption('groupDisplayType') === 'multipleColumns' ? 'multi' : 'single',
767
+ RowGroupDisplayType: (0, rowGroupDisplayType_1.gridOptionToRowGroupDisplayType)(this.gridApi.getGridOption('groupDisplayType')),
767
768
  RowSelection: this.getRowSelectionFromGrid(),
768
769
  });
769
770
  return layout;
@@ -1317,7 +1318,7 @@ class LayoutManager extends LMEmitter_1.LMEmitter {
1317
1318
  // this.gridApi.applyColumnState(state);
1318
1319
  const hasGroupedColumns = layout.RowGroupedColumns && layout.RowGroupedColumns.length;
1319
1320
  if (hasGroupedColumns) {
1320
- const displayTypeFromLayout = layout.RowGroupDisplayType === 'multi' ? 'multipleColumns' : 'singleColumn';
1321
+ const displayTypeFromLayout = (0, rowGroupDisplayType_1.rowGroupDisplayTypeToGridOption)(layout.RowGroupDisplayType);
1321
1322
  const groupDisplayType = this.gridApi.getGridOption('groupDisplayType');
1322
1323
  if (groupDisplayType !== displayTypeFromLayout) {
1323
1324
  this.gridApi.setGridOption('groupDisplayType', displayTypeFromLayout);
@@ -1680,7 +1681,7 @@ class LayoutManager extends LMEmitter_1.LMEmitter {
1680
1681
  this.applyPivotTotals(layout);
1681
1682
  const hasGroupedColumns = layout.PivotGroupedColumns && !!layout.PivotGroupedColumns.length;
1682
1683
  if (hasGroupedColumns) {
1683
- const displayTypeFromLayout = layout.RowGroupDisplayType === 'multi' ? 'multipleColumns' : 'singleColumn';
1684
+ const displayTypeFromLayout = (0, rowGroupDisplayType_1.rowGroupDisplayTypeToGridOption)(layout.RowGroupDisplayType);
1684
1685
  const groupDisplayType = this.gridApi.getGridOption('groupDisplayType');
1685
1686
  if (groupDisplayType !== displayTypeFromLayout) {
1686
1687
  this.gridApi.setGridOption('groupDisplayType', displayTypeFromLayout);
@@ -5,6 +5,7 @@ exports.normalizeTableLayoutModel = normalizeTableLayoutModel;
5
5
  exports.normalizePivotLayoutModel = normalizePivotLayoutModel;
6
6
  exports.normalizeLayoutModel = normalizeLayoutModel;
7
7
  const isPivotLayoutModel_1 = require("./isPivotLayoutModel");
8
+ const rowGroupDisplayType_1 = require("./rowGroupDisplayType");
8
9
  exports.AUTO_GROUP_COLUMN_ID__SINGLE = 'ag-Grid-AutoColumn';
9
10
  exports.AUTO_GROUP_COLUMN_ID__MULTI_PREFIX = 'ag-Grid-AutoColumn-';
10
11
  function normalizeTableLayoutModel(layout, options) {
@@ -66,7 +67,10 @@ function normalizeTableLayoutModel(layout, options) {
66
67
  displayType = displayType || 'single';
67
68
  layout.RowGroupDisplayType = displayType;
68
69
  }
69
- if (displayType === 'single') {
70
+ if (displayType === 'groupRows') {
71
+ layout.TableColumns = layout.TableColumns.filter((colId) => !(0, rowGroupDisplayType_1.isRowGroupAutoColumnId)(colId));
72
+ }
73
+ else if (displayType === 'single') {
70
74
  if (!ColumnOrderSet.has(exports.AUTO_GROUP_COLUMN_ID__SINGLE)) {
71
75
  layout.TableColumns = [exports.AUTO_GROUP_COLUMN_ID__SINGLE, ...layout.TableColumns];
72
76
  }
@@ -0,0 +1,6 @@
1
+ import { GridOptions } from 'ag-grid-enterprise';
2
+ import { RowGroupDisplayType } from '../../AdaptableState/LayoutState';
3
+ export type { RowGroupDisplayType };
4
+ export declare function rowGroupDisplayTypeToGridOption(displayType: RowGroupDisplayType | undefined): GridOptions['groupDisplayType'];
5
+ export declare function gridOptionToRowGroupDisplayType(groupDisplayType: GridOptions['groupDisplayType'] | undefined): RowGroupDisplayType;
6
+ export declare function isRowGroupAutoColumnId(colId: string): boolean;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rowGroupDisplayTypeToGridOption = rowGroupDisplayTypeToGridOption;
4
+ exports.gridOptionToRowGroupDisplayType = gridOptionToRowGroupDisplayType;
5
+ exports.isRowGroupAutoColumnId = isRowGroupAutoColumnId;
6
+ const normalizeLayoutModel_1 = require("./normalizeLayoutModel");
7
+ function rowGroupDisplayTypeToGridOption(displayType) {
8
+ switch (displayType ?? 'single') {
9
+ case 'multi':
10
+ return 'multipleColumns';
11
+ case 'groupRows':
12
+ return 'groupRows';
13
+ case 'single':
14
+ default:
15
+ return 'singleColumn';
16
+ }
17
+ }
18
+ function gridOptionToRowGroupDisplayType(groupDisplayType) {
19
+ if (groupDisplayType === 'multipleColumns') {
20
+ return 'multi';
21
+ }
22
+ if (groupDisplayType === 'groupRows') {
23
+ return 'groupRows';
24
+ }
25
+ return 'single';
26
+ }
27
+ function isRowGroupAutoColumnId(colId) {
28
+ return colId === normalizeLayoutModel_1.AUTO_GROUP_COLUMN_ID__SINGLE || colId.startsWith(normalizeLayoutModel_1.AUTO_GROUP_COLUMN_ID__MULTI_PREFIX);
29
+ }
@@ -482,6 +482,9 @@ export declare const ADAPTABLE_METAMODEL: {
482
482
  r?: undefined;
483
483
  })[];
484
484
  };
485
+ AdaptableMenuItemParams: {
486
+ k: string;
487
+ };
485
488
  AdaptableMessageType: {
486
489
  k: string;
487
490
  };
@@ -636,6 +639,9 @@ export declare const ADAPTABLE_METAMODEL: {
636
639
  AdaptableQuery: {
637
640
  k: string;
638
641
  };
642
+ AdaptableReactMenuItemProps: {
643
+ k: string;
644
+ };
639
645
  AdaptableReadyInfo: {
640
646
  k: string;
641
647
  p: {
@@ -1132,11 +1138,6 @@ export declare const ADAPTABLE_METAMODEL: {
1132
1138
  };
1133
1139
  BadgePillStyle: {
1134
1140
  k: string;
1135
- p: {
1136
- n: string;
1137
- k: string;
1138
- o: boolean;
1139
- }[];
1140
1141
  };
1141
1142
  BadgeShape: {
1142
1143
  k: string;
@@ -3546,25 +3547,6 @@ export declare const ADAPTABLE_METAMODEL: {
3546
3547
  LayoutArray: {
3547
3548
  k: string;
3548
3549
  };
3549
- LayoutBase: {
3550
- k: string;
3551
- p: ({
3552
- n: string;
3553
- k: string;
3554
- o: boolean;
3555
- r?: undefined;
3556
- } | {
3557
- n: string;
3558
- k: string;
3559
- o: boolean;
3560
- r: string;
3561
- } | {
3562
- n: string;
3563
- k: string;
3564
- o?: undefined;
3565
- r?: undefined;
3566
- })[];
3567
- };
3568
3550
  LayoutChangedAction: {
3569
3551
  k: string;
3570
3552
  };
@@ -3727,6 +3709,9 @@ export declare const ADAPTABLE_METAMODEL: {
3727
3709
  MenuCategory: {
3728
3710
  k: string;
3729
3711
  };
3712
+ MenuItemFrameworkComponent: {
3713
+ k: string;
3714
+ };
3730
3715
  MenuSeparator: {
3731
3716
  k: string;
3732
3717
  };
@@ -4249,6 +4234,9 @@ export declare const ADAPTABLE_METAMODEL: {
4249
4234
  ReactFrameworkComponent: {
4250
4235
  k: string;
4251
4236
  };
4237
+ ReactMenuItemFrameworkComponent: {
4238
+ k: string;
4239
+ };
4252
4240
  Report: {
4253
4241
  k: string;
4254
4242
  p: ({