@adaptabletools/adaptable-cjs 22.0.10 → 22.1.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/index.css +33 -1
  2. package/index.css.map +1 -1
  3. package/package.json +3 -4
  4. package/src/AdaptableState/Common/AdaptablePredicate.js +1 -1
  5. package/src/AdaptableState/InitialState.d.ts +2 -2
  6. package/src/AdaptableState/LayoutState.d.ts +47 -0
  7. package/src/Api/CalendarApi.d.ts +15 -0
  8. package/src/Api/ColumnScopeApi.d.ts +5 -0
  9. package/src/Api/DataChangeHistoryApi.d.ts +7 -2
  10. package/src/Api/Implementation/CalendarApiImpl.d.ts +3 -0
  11. package/src/Api/Implementation/CalendarApiImpl.js +10 -0
  12. package/src/Api/Implementation/ColumnScopeApiImpl.d.ts +1 -0
  13. package/src/Api/Implementation/ColumnScopeApiImpl.js +12 -0
  14. package/src/Api/Implementation/DataChangeHistoryApiImpl.d.ts +2 -1
  15. package/src/Api/Implementation/DataChangeHistoryApiImpl.js +7 -0
  16. package/src/Api/Implementation/LayoutHelpers.js +12 -0
  17. package/src/Api/Internal/AlertInternalApi.js +4 -1
  18. package/src/Api/Internal/FormatColumnInternalApi.js +3 -3
  19. package/src/Strategy/FlashingCellModule.js +1 -0
  20. package/src/Strategy/PlusMinusModule.js +3 -3
  21. package/src/Utilities/Constants/GeneralConstants.js +2 -1
  22. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.d.ts +1 -1
  23. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +41 -2
  24. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.d.ts +1 -1
  25. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +31 -2
  26. package/src/Utilities/Helpers/AdaptableHelper.js +30 -4
  27. package/src/Utilities/Services/Interface/IQueryLanguageService.d.ts +1 -0
  28. package/src/Utilities/Services/MetamodelService.js +18 -18
  29. package/src/Utilities/Services/QueryLanguageService.d.ts +2 -0
  30. package/src/Utilities/Services/QueryLanguageService.js +20 -8
  31. package/src/Utilities/Services/ValidationService.js +3 -1
  32. package/src/View/Components/EntityRulesEditor/index.js +1 -1
  33. package/src/View/Components/ModuleValueSelector/index.js +9 -1
  34. package/src/View/Components/ReorderDraggable/index.js +21 -35
  35. package/src/View/Components/ValueSelector/index.js +45 -49
  36. package/src/View/Dashboard/PinnedToolbarsSelector.js +1 -1
  37. package/src/View/Layout/Wizard/LayoutWizard.js +16 -1
  38. package/src/View/Layout/Wizard/sections/RowSelectionSection.d.ts +8 -0
  39. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +147 -0
  40. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +0 -1
  41. package/src/agGrid/AdaptableAgGrid.js +10 -0
  42. package/src/components/Dashboard/Dashboard.js +1 -1
  43. package/src/components/DragAndDropContext/ModuleManager.d.ts +1 -0
  44. package/src/components/DragAndDropContext/ModuleManager.js +11 -36
  45. package/src/components/DragAndDropContext/TabList.d.ts +11 -6
  46. package/src/components/DragAndDropContext/TabList.js +77 -35
  47. package/src/components/DragAndDropContext/UnusedPanel.js +9 -20
  48. package/src/components/ExpressionEditor/BaseEditorInput.d.ts +2 -0
  49. package/src/components/ExpressionEditor/BaseEditorInput.js +4 -0
  50. package/src/components/ExpressionEditor/EditorInput.d.ts +3 -1
  51. package/src/components/ExpressionEditor/EditorInput.js +20 -9
  52. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.d.ts +2 -1
  53. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.js +1 -10
  54. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +16 -18
  55. package/src/components/ExpressionEditor/index.d.ts +2 -1
  56. package/src/components/ExpressionEditor/index.js +1 -1
  57. package/src/components/Tree/TreeDropdown/index.js +37 -26
  58. package/src/components/dnd/index.d.ts +3 -13
  59. package/src/components/dnd/index.js +11 -59
  60. package/src/env.js +2 -2
  61. package/src/layout-manager/src/LayoutManagerModel.d.ts +2 -1
  62. package/src/layout-manager/src/index.d.ts +9 -0
  63. package/src/layout-manager/src/index.js +97 -1
  64. package/src/layout-manager/src/normalizeLayoutModel.js +8 -0
  65. package/src/layout-manager/src/simplifyLayoutModel.js +6 -0
  66. package/src/metamodel/adaptable-metamodel-model.d.ts +22 -13
  67. package/src/metamodel/adaptable.metamodel.d.ts +3773 -5143
  68. package/src/metamodel/adaptable.metamodel.js +1 -1
  69. package/src/parser/src/parser.js +55 -1218
  70. package/src/parser/src/types.d.ts +5 -0
  71. package/tsconfig.cjs.tsbuildinfo +1 -1
@@ -11,62 +11,104 @@ const icons_1 = require("../icons");
11
11
  const SimpleButton_1 = tslib_1.__importDefault(require("../SimpleButton"));
12
12
  const DragAndDropContext_1 = require("./DragAndDropContext");
13
13
  const Flex_1 = require("../Flex");
14
- function TabList({ tabs, onRemoveTab, onRemoveToolbar, onChangeTabName, disabled, onNewTab, }) {
15
- return (React.createElement(dnd_1.Droppable, { droppableId: "MAIN", type: "TAB", direction: "horizontal" }, (provided) => (React.createElement("div", { ...provided.droppableProps, className: "ab-ModuleSelector__TabList twa:flex twa:flex-1 twa:overflow-auto", ref: provided.innerRef, "data-name": "dashboard-tabs" },
16
- tabs.map((tab, tabIndex) => (React.createElement(TabItem, { disabled: disabled, key: tabIndex, tabIndex: tabIndex, tab: tab, onRemove: () => onRemoveTab(tabIndex), onRemoveToolbar: (toolbarIndex) => onRemoveToolbar(tabIndex, toolbarIndex), onChangeTabName: (tabName) => onChangeTabName(tabIndex, tabName) }))),
14
+ const clsx_1 = tslib_1.__importDefault(require("clsx"));
15
+ function TabList({ tabs, onTabsChange, onRemoveTab, onRemoveToolbar, onChangeTabName, disabled, onNewTab, }) {
16
+ const tabIdsRef = React.useRef(new WeakMap());
17
+ const nextTabIdRef = React.useRef(0);
18
+ const getTabStableId = React.useCallback((tab) => {
19
+ const existingId = tabIdsRef.current.get(tab);
20
+ if (existingId) {
21
+ return existingId;
22
+ }
23
+ const newId = `dashboard-tab-${String(nextTabIdRef.current++)}`;
24
+ tabIdsRef.current.set(tab, newId);
25
+ return newId;
26
+ }, []);
27
+ return (React.createElement(dnd_1.DragList, { dragListId: "TABS", orientation: "horizontal", dragStrategy: "proxy", preserveDragSpace: true, onDragProxyMove: dnd_1.defaultDragProxyMove, onDrop: (sortedIndexes) => {
28
+ const newTabs = sortedIndexes.map((i) => tabs[i]);
29
+ onTabsChange(newTabs);
30
+ } }, (listDomProps) => (React.createElement("div", { ...listDomProps, className: (0, clsx_1.default)('ab-ModuleSelector__TabList twa:flex twa:flex-1 twa:overflow-auto', listDomProps.className), "data-name": "dashboard-tabs" },
31
+ tabs.map((tab, tabIndex) => {
32
+ const tabId = getTabStableId(tab);
33
+ return (React.createElement(TabItem, { disabled: disabled, key: tabIndex, tabId: tabId, tabIndex: tabIndex, tabs: tabs, onTabsChange: onTabsChange, tab: tab, onRemove: () => onRemoveTab(tabIndex), onRemoveToolbar: (toolbarIndex) => onRemoveToolbar(tabIndex, toolbarIndex), onChangeTabName: (tabName) => onChangeTabName(tabIndex, tabName) }));
34
+ }),
17
35
  !disabled && onNewTab ? (React.createElement(Flex_1.Flex, { alignItems: "center", justifyContent: "center", className: "ab-ModuleSelector__TabItem twa:min-w-32 twa:border-dashed twa:cursor-pointer twa:bg-primarylight twa:text-primary-foreground twa:hover:bg-primary", onClick: onNewTab },
18
36
  React.createElement("div", { className: "twa:text-8 twa:flex twa:flex-col twa:gap-4 twa:items-center twa:italic" },
19
37
  React.createElement(icons_1.Icon, { name: "plus", size: 32 }),
20
- "Click to add tab"))) : null,
21
- provided.placeholder))));
38
+ "Click to add tab"))) : null))));
22
39
  }
23
- function TabItem({ tab, tabIndex, onRemove, onRemoveToolbar, onChangeTabName, disabled, }) {
40
+ function TabItem({ tab, tabId, tabIndex, tabs, onTabsChange, onRemove, onRemoveToolbar, onChangeTabName, disabled, }) {
24
41
  const context = React.useContext(DragAndDropContext_1.DragAndDropContext);
25
42
  const isDragDisabled = disabled || !context.permittedActions.dragAndDropTab;
26
- return (React.createElement(dnd_1.Draggable, { isDragDisabled: isDragDisabled, draggableId: String(tabIndex), index: tabIndex }, (provided) => {
43
+ return (React.createElement(dnd_1.DragList.DraggableItem, { dragListId: "TABS", id: tabId }, (itemDomProps) => {
44
+ const { onPointerDown, ...restDomProps } = itemDomProps;
27
45
  let showHeader = true;
28
46
  if (tab.Name === '' &&
29
47
  !context.permittedActions.editTabName &&
30
48
  !context.permittedActions.deleteTab) {
31
49
  showHeader = false;
32
50
  }
33
- return (React.createElement("div", { className: "ab-ModuleSelector__TabItem twa:min-w-32", "data-name": "dashboard-tab", ref: provided.innerRef, ...provided.draggableProps, style: {
34
- ...(isDragDisabled ? {} : provided.draggableProps.style),
35
- } },
51
+ return (React.createElement("div", { ...restDomProps, className: (0, clsx_1.default)('twa:bg-defaultbackground', 'twa:select-none', 'ab-ModuleSelector__TabItem twa:min-w-32', restDomProps.className), "data-name": "dashboard-tab" },
36
52
  showHeader ? (React.createElement("div", { className: "ab-ModuleSelector__TabItem__header" },
37
- React.createElement("div", { ...(disabled ? {} : provided.dragHandleProps), style: context.permittedActions.dragAndDropTab
38
- ? {}
39
- : {
40
- display: 'none',
41
- } },
53
+ React.createElement("div", { ...(!isDragDisabled ? { onPointerDown } : {}), style: context.permittedActions.dragAndDropTab ? {} : { display: 'none' } },
42
54
  React.createElement(icons_1.Icon, { name: "drag" })),
43
55
  context.permittedActions.editTabName ? (React.createElement("input", { className: "ab-ModuleSelector__TabItem__header-input", type: "text", disabled: disabled, value: tab.Name, onChange: (event) => {
44
56
  onChangeTabName(event.target.value);
45
57
  } })) : (tab.Name),
46
58
  context.permittedActions.deleteTab && (React.createElement(SimpleButton_1.default, { disabled: disabled, icon: "delete", variant: "text", onClick: onRemove })))) : null,
47
- React.createElement(ToolbarList, { disabled: disabled, toolbars: tab.Items, droppableId: String(tabIndex), onRemove: onRemoveToolbar })));
59
+ React.createElement(ToolbarList, { disabled: disabled, toolbars: tab.Items, tabIndex: tabIndex, tabs: tabs, onTabsChange: onTabsChange, onRemove: onRemoveToolbar })));
48
60
  }));
49
61
  }
50
- function ToolbarList({ toolbars, droppableId, onRemove, disabled, }) {
51
- return (React.createElement(dnd_1.Droppable, { droppableId: droppableId, type: "TOOLBAR" }, (provided, snapshot) => (React.createElement(Flex_1.Box, { className: "ab-ModuleSelector__ToolbarList", ref: provided.innerRef, ...(disabled ? {} : provided.droppableProps), "data-name": "dashboard-toolbar-drop-target", style: {
52
- backgroundColor: snapshot.isDraggingOver
53
- ? 'var(--ab-dashboard-tab-drop-target__background)'
54
- : '',
55
- } },
56
- toolbars?.map((toolbar, toolbarIndex) => (React.createElement(ToolbarItem, { disabled: disabled, key: toolbar, toolbar: toolbar, toolbarIndex: toolbarIndex, onRemove: () => onRemove(toolbarIndex) }))),
57
- toolbars.length === 0 ? (React.createElement("div", { className: "ab-ModuleSelector__ToolbarList__placeholder twa:flex twa:items-center twa:justify-center twa:h-full twa:italic twa:text-center" }, "Drag and drop toolbar here")) : null,
58
- provided.placeholder))));
62
+ function ToolbarList({ toolbars, tabIndex, tabs, onTabsChange, onRemove, disabled, }) {
63
+ const acceptDropsFrom = React.useMemo(() => {
64
+ const sources = ['UNUSED'];
65
+ tabs.forEach((_, i) => {
66
+ if (i !== tabIndex)
67
+ sources.push(String(i));
68
+ });
69
+ return sources;
70
+ }, [tabIndex, tabs]);
71
+ return (React.createElement(dnd_1.DragList, { dragListId: String(tabIndex), orientation: "vertical", acceptDropsFrom: [...acceptDropsFrom, String(tabIndex)], onDragProxyMove: dnd_1.defaultDragProxyMove,
72
+ // this is called when reordering inside the same list
73
+ onDrop: (sortedIndexes) => {
74
+ const newItems = sortedIndexes.map((i) => toolbars[i]);
75
+ onTabsChange(tabs.map((t, i) => (i === tabIndex ? { ...t, Items: newItems } : t)));
76
+ }, shouldAcceptDrop: ({ dragItem, dragSourceListId }) => {
77
+ const dragItemId = dragItem.id;
78
+ // if the tab contains an item with the same id, don't accept the drop
79
+ if (dragSourceListId != String(tabIndex) && tabs[tabIndex].Items.includes(dragItemId)) {
80
+ return false;
81
+ }
82
+ return true;
83
+ },
84
+ // this is called when dropping an item from a different list
85
+ onAcceptDrop: ({ dragItemId, dragSourceListId, dropIndex }) => {
86
+ const newTabs = tabs.map((tab, i) => {
87
+ let items = [...tab.Items];
88
+ if (dragSourceListId !== 'UNUSED' && i === Number(dragSourceListId)) {
89
+ items = items.filter((item) => item !== dragItemId);
90
+ }
91
+ if (i === tabIndex) {
92
+ items.splice(dropIndex, 0, dragItemId);
93
+ }
94
+ return { ...tab, Items: items };
95
+ });
96
+ onTabsChange(newTabs);
97
+ } }, (listDomProps, context) => (React.createElement(Flex_1.Box, { ...listDomProps, className: (0, clsx_1.default)('ab-ModuleSelector__ToolbarList', listDomProps.className, {
98
+ 'twa:bg-(--ab-dashboard-tab-drop-target__background) ab-ModuleSelector__ToolbarList--accent-drop': context.dropTargetListId === String(tabIndex) && context.status === 'accepted',
99
+ 'twa:bg-error/30 ab-ModuleSelector__ToolbarList--reject-drop': context.dropTargetListId === String(tabIndex) && context.status === 'rejected',
100
+ }), "data-name": "dashboard-toolbar-drop-target" },
101
+ toolbars?.map((toolbar, toolbarIndex) => (React.createElement(ToolbarItem, { disabled: disabled, key: toolbar, toolbar: toolbar, onRemove: () => onRemove(toolbarIndex) }))),
102
+ toolbars.length === 0 ? (React.createElement("div", { className: "ab-ModuleSelector__ToolbarList__placeholder twa:flex twa:items-center twa:justify-center twa:h-full twa:italic twa:text-center" }, "Drag and drop toolbar here")) : null))));
59
103
  }
60
- function ToolbarItem({ toolbar, toolbarIndex, onRemove, disabled, }) {
104
+ function ToolbarItem({ toolbar, onRemove, disabled, }) {
61
105
  const { availableItems } = React.useContext(DragAndDropContext_1.DragAndDropContext);
62
- let currentItem = availableItems.find((t) => t.Id === toolbar);
106
+ const currentItem = availableItems.find((t) => t.Id === toolbar);
63
107
  const title = currentItem ? currentItem.Title : toolbar;
64
- return (React.createElement(dnd_1.Draggable, { isDragDisabled: disabled, draggableId: toolbar, index: toolbarIndex }, (provided, snapshot) => (React.createElement(Flex_1.Flex, { className: `ab-ModuleSelector__ToolbarItem twa:mb-1 twa:pl-1`, alignItems: "center", ref: provided.innerRef, ...provided.draggableProps, ...provided.dragHandleProps, style: {
65
- ...provided.draggableProps.style,
66
- backgroundColor: snapshot.isDragging
67
- ? 'var(--ab-dashboard-toolbar-drag__background)'
68
- : 'var(--ab-color-primarylight)',
69
- } },
70
- React.createElement("div", { className: "twa:flex-1" }, title),
71
- React.createElement(SimpleButton_1.default, { disabled: disabled, icon: "close", variant: "text", className: "twa:p-1", onClick: onRemove })))));
108
+ return (React.createElement(dnd_1.DragList.DraggableItem, { id: toolbar }, (itemDomProps) => {
109
+ const { onPointerDown, ...restDomProps } = itemDomProps;
110
+ return (React.createElement(Flex_1.Flex, { ...restDomProps, ...(disabled ? {} : { onPointerDown }), className: (0, clsx_1.default)('ab-ModuleSelector__ToolbarItem twa:mb-1 twa:pl-1 twa:text-3', 'twa:bg-primarylight', restDomProps.className), alignItems: "center" },
111
+ React.createElement("div", { className: "twa:flex-1" }, title),
112
+ React.createElement(SimpleButton_1.default, { disabled: disabled, icon: "close", variant: "text", className: "twa:p-1", onClick: onRemove })));
113
+ }));
72
114
  }
@@ -16,29 +16,18 @@ function UnusedPanel({ items, disabled, title, dragItemText, }) {
16
16
  ")"),
17
17
  React.createElement(UnusedItemList, { disabled: disabled, items: items })));
18
18
  }
19
+ const EMPTY_ARRAY = [];
19
20
  function UnusedItemList({ items, disabled }) {
20
- return (React.createElement(dnd_1.Droppable, { droppableId: "UNUSED", type: "TOOLBAR", isDropDisabled: true, direction: "horizontal" }, (provided) => (React.createElement("div", { ref: provided.innerRef, "data-name": "unusedpanel-items-list", ...provided.droppableProps, className: 'twa:px-2 twa:flex-wrap twa:flex twa:flex-row twa:gap-1' },
21
- items.map((unusedItem, unusedItemIndex) => (React.createElement(UnusedItem, { disabled: disabled, key: unusedItem, unusedItem: unusedItem, unusedItemIndex: unusedItemIndex }))),
22
- provided.placeholder))));
21
+ return (React.createElement(dnd_1.DragList, { dragStrategy: "proxy", preserveDragSpace: true, dragListId: "UNUSED", orientation: "horizontal", onDragProxyMove: dnd_1.defaultDragProxyMove, acceptDropsFrom: EMPTY_ARRAY, onDragProxySetup: ({ proxyElement }) => {
22
+ proxyElement.classList.add('twa:shadow-md');
23
+ }, onDrop: () => { } }, (listDomProps) => (React.createElement("div", { ...listDomProps, "data-name": "unusedpanel-items-list", className: (0, clsx_1.default)('twa:px-2 twa:flex-wrap twa:flex twa:flex-row twa:gap-1', listDomProps.className) }, items.map((unusedItem) => (React.createElement(UnusedItem, { disabled: disabled, key: unusedItem, unusedItem: unusedItem })))))));
23
24
  }
24
- function UnusedItem({ unusedItem, unusedItemIndex, disabled, }) {
25
+ function UnusedItem({ unusedItem, disabled }) {
25
26
  const { availableItems } = React.useContext(DragAndDropContext_1.DragAndDropContext);
26
- let currentItem = availableItems.find((t) => t.Id === unusedItem);
27
+ const currentItem = availableItems.find((t) => t.Id === unusedItem);
27
28
  const title = currentItem ? currentItem.Title : unusedItem;
28
- return (React.createElement(dnd_1.Draggable, { isDragDisabled: disabled, draggableId: unusedItem, index: unusedItemIndex }, (provided, snapshot) => {
29
- const eventHandlers = disabled
30
- ? {}
31
- : {
32
- ...provided.draggableProps,
33
- ...provided.dragHandleProps,
34
- };
35
- const dragStyle = disabled ? {} : provided.draggableProps.style;
36
- return (React.createElement("div", { "data-name": "unused-item", ref: provided.innerRef, ...eventHandlers, className: (0, clsx_1.default)('twa:rounded-md twa:text-sm twa:text-text-on-primary twa:p-2'), style: {
37
- ...dragStyle,
38
- border: '1px solid var(--ab-color-primary)',
39
- backgroundColor: snapshot.isDragging
40
- ? 'var(--ab-dashboard-toolbar-drag__background)'
41
- : 'var(--ab-color-primary)',
42
- } }, title));
29
+ return (React.createElement(dnd_1.DragList.DraggableItem, { id: unusedItem }, (itemDomProps) => {
30
+ const { onPointerDown, ...restDomProps } = itemDomProps;
31
+ return (React.createElement("div", { "data-name": "unused-item", ...restDomProps, ...(disabled ? {} : { onPointerDown }), className: (0, clsx_1.default)('twa:rounded-md twa:text-sm twa:text-text-on-primary twa:p-2 twa:select-none', 'twa:bg-primary', restDomProps.className) }, title));
43
32
  }));
44
33
  }
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { ExpressionFunction, ExpressionFunctionMap } from '../../parser/src/types';
3
3
  import { AdaptableApi } from '../../Api/AdaptableApi';
4
4
  import { CSSProperties } from 'react';
5
+ import { ColumnScope } from '../../types';
5
6
  interface BaseEditorInputProps {
6
7
  type: 'main' | 'secondary';
7
8
  value: string;
@@ -16,6 +17,7 @@ interface BaseEditorInputProps {
16
17
  hideResultPreview?: boolean;
17
18
  api: AdaptableApi;
18
19
  style?: CSSProperties;
20
+ columnScope?: ColumnScope;
19
21
  }
20
22
  export interface OperatorEditorButton {
21
23
  functionName: string;
@@ -206,6 +206,9 @@ function BaseEditorInput(props) {
206
206
  // clone the class instance to still keep the prototype methods
207
207
  return Object.assign(Object.create(Object.getPrototypeOf(firstRowNode)), firstRowNode);
208
208
  }, []);
209
+ const scopeColumnId = (0, react_1.useMemo)(() => {
210
+ return props.api.columnScopeApi.getAnyColumnIdForScope(props.columnScope);
211
+ }, [props.columnScope]);
209
212
  try {
210
213
  // explicitly parsing & evaluating the expression because we need full control of the resulted AST
211
214
  const expr = parser.parse(props.value || '');
@@ -222,6 +225,7 @@ function BaseEditorInput(props) {
222
225
  functions: expressionFunctions,
223
226
  evaluateCustomQueryVariable: props.api.internalApi.getQueryLanguageService().evaluateCustomQueryVariable,
224
227
  dataChangedEvent,
228
+ columnScope: scopeColumnId,
225
229
  ...props.api.internalApi.buildBaseContext(),
226
230
  });
227
231
  }
@@ -1,14 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { AdaptableApi } from '../../Api/AdaptableApi';
3
3
  import { AdaptableModule } from '../../AdaptableState/Common/Types';
4
+ import { ColumnScope } from '../../AdaptableState/Common/ColumnScope';
4
5
  interface EditorInputProps {
5
6
  type: 'boolean' | 'scalar' | 'aggregatedScalar' | 'cumulativeAggregatedScalar' | 'quantileAggregatedScalar';
6
7
  module: AdaptableModule;
7
8
  value: string;
8
9
  onChange: (value: string) => void;
10
+ api: AdaptableApi;
9
11
  testData: any;
10
12
  isFullExpression?: boolean;
11
- api: AdaptableApi;
13
+ columnScope?: ColumnScope;
12
14
  }
13
15
  declare function EditorInput(props: EditorInputProps): React.JSX.Element;
14
16
  export default EditorInput;
@@ -41,15 +41,26 @@ function EditorInput(props) {
41
41
  }, {});
42
42
  };
43
43
  const expressionFunctions = (0, react_1.useMemo)(() => {
44
- return props.type === 'aggregatedScalar' ||
44
+ if (props.type === 'aggregatedScalar' ||
45
45
  props.type === 'cumulativeAggregatedScalar' ||
46
- props.type === 'quantileAggregatedScalar'
47
- ? getFilteredAggregatedExpressionFunctions(moduleExpressionFunctions.aggregatedScalarFunctions, props.type)
48
- : {
49
- ...moduleExpressionFunctions.booleanFunctions,
50
- ...moduleExpressionFunctions.scalarFunctions,
51
- };
52
- }, [props.type]);
46
+ props.type === 'quantileAggregatedScalar') {
47
+ return getFilteredAggregatedExpressionFunctions(moduleExpressionFunctions.aggregatedScalarFunctions, props.type);
48
+ }
49
+ let booleanAndScalarFunctions = {
50
+ ...moduleExpressionFunctions.booleanFunctions,
51
+ ...moduleExpressionFunctions.scalarFunctions,
52
+ };
53
+ if (!props.columnScope) {
54
+ // filter out $SCOPE function if no columnScope is provided
55
+ booleanAndScalarFunctions = Object.keys(booleanAndScalarFunctions)
56
+ .filter((key) => key !== '$SCOPE')
57
+ .reduce((obj, key) => {
58
+ obj[key] = booleanAndScalarFunctions[key];
59
+ return obj;
60
+ }, {});
61
+ }
62
+ return booleanAndScalarFunctions;
63
+ }, [props.type, props.columnScope]);
53
64
  const { setSelectedFunction } = (0, EditorContext_1.useExpressionEditor)();
54
65
  let queryName;
55
66
  switch (props.type) {
@@ -77,6 +88,6 @@ function EditorInput(props) {
77
88
  ? editorButtonsQuantileAggregatedScalar_1.editorButtonsQuantileAggregatedScalar
78
89
  : editorButtonsSearch_1.editorButtonsSearch, testData: props.testData, isFullExpression: props.isFullExpression, hideResultPreview: props.type === 'aggregatedScalar' ||
79
90
  props.type === 'cumulativeAggregatedScalar' ||
80
- props.type === 'quantileAggregatedScalar', api: props.api }));
91
+ props.type === 'quantileAggregatedScalar', api: props.api, columnScope: props.columnScope }));
81
92
  }
82
93
  exports.default = EditorInput;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { AdaptableColumnDataType, AdaptableModule, BooleanFunctionName } from '../../../types';
2
+ import { AdaptableColumnDataType, AdaptableModule, BooleanFunctionName, ColumnScope } from '../../../types';
3
3
  interface QueryBuilderProps {
4
4
  query: string;
5
5
  getColumns: (type?: AdaptableColumnDataType) => {
@@ -14,6 +14,7 @@ interface QueryBuilderProps {
14
14
  }[];
15
15
  onChange: (query: string) => void;
16
16
  module: AdaptableModule;
17
+ columnScope?: ColumnScope;
17
18
  }
18
19
  export declare function useQueryBuilderContext(): {
19
20
  getColumns: QueryBuilderProps["getColumns"];
@@ -91,7 +91,6 @@ const QueryBuilder = (props) => {
91
91
  }
92
92
  else if (qlPredicate && !('errorMessage' in qlPredicate)) {
93
93
  errorOrEditor = (React.createElement(QueryPredicateBuilder_1.QueryPredicateBuilder, { isRoot: true, index: 0, id: "0", predicate: qlPredicate, onNewPredicate: (type) => {
94
- // add to its children
95
94
  const newPredicate = {
96
95
  operator: type === 'filter' ? undefined : 'AND',
97
96
  args: [],
@@ -104,15 +103,7 @@ const QueryBuilder = (props) => {
104
103
  handleQlPredicateChange(predicate);
105
104
  } }));
106
105
  }
107
- return (React.createElement(dnd_1.DragDropContext, { onDragEnd: (result) => {
108
- if (!result.destination) {
109
- return;
110
- }
111
- const toPath = `${result.destination.droppableId}/${result.destination.index}`;
112
- const fromPath = result.draggableId;
113
- const predicate = (0, utils_1.reorder)(qlPredicate, fromPath, toPath);
114
- handleQlPredicateChange(predicate);
115
- } },
106
+ return (React.createElement(dnd_1.DragDropProvider, null,
116
107
  React.createElement(QueryBuilderContext.Provider, { value: context },
117
108
  React.createElement(Flex_1.Box, { className: QUERY_BUILDER_CLASSNAME },
118
109
  React.createElement(HelpBlock_1.default, { "data-name": "query-builder-help", className: "twa:my-2 twa:p-2 twa:text-3" }, "Build the Grid Filter by adding Column Conditions and AND / OR Groups as required"),
@@ -15,6 +15,7 @@ const SimpleButton_1 = tslib_1.__importDefault(require("../../SimpleButton"));
15
15
  const QueryBuilderInputs_1 = require("./QueryBuilderInputs");
16
16
  const utils_1 = require("./utils");
17
17
  const Flex_1 = require("../../Flex");
18
+ const clsx_1 = tslib_1.__importDefault(require("clsx"));
18
19
  const ITEM_HEIGHT = 40;
19
20
  const BASE_CLASS_NAME = 'ab-QueryBuilder-predicate-editor';
20
21
  const Handle = (props) => (react_1.default.createElement(Flex_1.Flex, { className: `${BASE_CLASS_NAME}__handle twa:mr-1`, style: { height: ITEM_HEIGHT }, alignItems: "center", ...props },
@@ -39,8 +40,12 @@ const LogicalFunctionEditor = (props) => {
39
40
  ${props.lastChild ? `${BASE_CLASS_NAME}--last-child` : ''}
40
41
  ${props.isRoot ? `${BASE_CLASS_NAME}--root` : `${BASE_CLASS_NAME}--child`}
41
42
  `;
42
- const getCombinatorEl = (handleProps, className) => (react_1.default.createElement(dnd_1.Droppable, { droppableId: props.id, type: props.id }, (provided, snapshot) => {
43
- return (react_1.default.createElement("div", { ...provided.droppableProps, ref: provided.innerRef, className: className },
43
+ const handleDrop = (sortedIndexes) => {
44
+ const newArgs = sortedIndexes.map((i) => props.predicate.args[i]);
45
+ props.onChange({ ...props.predicate, args: newArgs });
46
+ };
47
+ const getCombinatorEl = (handleProps) => (react_1.default.createElement(dnd_1.DragList, { dragListId: props.id, orientation: "vertical", onDrop: handleDrop, onDragProxyMove: dnd_1.defaultDragProxyMove }, (listDomProps) => {
48
+ return (react_1.default.createElement("div", { ...listDomProps, className: (0, clsx_1.default)(listDomProps.className) },
44
49
  react_1.default.createElement(Flex_1.Flex, null,
45
50
  props.isRoot ? null : react_1.default.createElement(Handle, { ...handleProps }),
46
51
  react_1.default.createElement(Flex_1.Flex, { className: "twa:flex-1", alignItems: "center", height: ITEM_HEIGHT },
@@ -98,21 +103,18 @@ const LogicalFunctionEditor = (props) => {
98
103
  });
99
104
  } }));
100
105
  }),
101
- provided.placeholder,
102
106
  react_1.default.createElement("div", { className: `${BASE_CLASS_NAME}__root-actions` },
103
107
  react_1.default.createElement(QueryPredicateButtons, { ...props, hideDelete: true })))));
104
108
  }));
105
109
  if (props.isRoot) {
106
- return getCombinatorEl({ className: className });
107
- }
108
- else {
109
- return (react_1.default.createElement(dnd_1.Draggable, { key: props.id, draggableId: props.id, index: props.index }, (provided, snapshot) => {
110
- return (react_1.default.createElement("div", { ...provided.draggableProps, ref: provided.innerRef, className: className }, getCombinatorEl(provided.dragHandleProps)));
111
- }));
110
+ return getCombinatorEl({ className });
112
111
  }
112
+ return (react_1.default.createElement(dnd_1.DragList.DraggableItem, { id: props.id }, (itemDomProps) => {
113
+ const { onPointerDown, ...restDomProps } = itemDomProps;
114
+ return (react_1.default.createElement("div", { ...restDomProps, className: (0, clsx_1.default)(className, restDomProps.className) }, getCombinatorEl({ onPointerDown })));
115
+ }));
113
116
  };
114
117
  const PrimitiveFunctionEditor = (props) => {
115
- // [handle] [column] [operator-dropdown] [...args] [delete-button] [plus-button]
116
118
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
117
119
  const [columnOrFieldExpression, ...restOfArgs] = props.predicate.args;
118
120
  const columnOrField = columnOrFieldExpression;
@@ -120,15 +122,12 @@ const PrimitiveFunctionEditor = (props) => {
120
122
  let columnOrFieldDataType = null;
121
123
  let columnInputDataType = null;
122
124
  let functionInputInputDataTypes = null;
123
- // Thsese are the type of inputs ommiting the column
124
- // [[column-data-type], number, number]
125
125
  let restOfFunctionInputDataTypes = [];
126
126
  if (columnOrField) {
127
127
  if (!(0, predicate_1.isArgumentColumnOrField)(columnOrField)) {
128
128
  return react_1.default.createElement(ErrorBox_1.default, null, "Expression must start with a column or a filed!");
129
129
  }
130
130
  if (columnOrField.includes('FIELD')) {
131
- // we let the full expression so we can difirienciate between column and field
132
131
  columnOrFieldId = columnOrField;
133
132
  const fieldValue = (0, utils_1.mapExpressionToFieldValue)(columnOrField);
134
133
  columnOrFieldDataType = adaptable.api.expressionApi.internalApi.getFieldType(fieldValue);
@@ -145,9 +144,10 @@ const PrimitiveFunctionEditor = (props) => {
145
144
  : [];
146
145
  }
147
146
  const level = props.id.split('/').length - 1;
148
- return (react_1.default.createElement(dnd_1.Draggable, { key: props.id, draggableId: props.id, index: props.index }, (provided) => {
149
- return (react_1.default.createElement(Flex_1.Flex, { className: `twa:pb-2 ${BASE_CLASS_NAME} ${BASE_CLASS_NAME}-level-${level} ${BASE_CLASS_NAME}-primitive ${props.lastChild ? `${BASE_CLASS_NAME}--last-child` : ''} `, ref: provided.innerRef, ...provided.draggableProps, style: { ...provided.draggableProps.style, minHeight: ITEM_HEIGHT } },
150
- react_1.default.createElement(Handle, { ...provided.dragHandleProps }),
147
+ return (react_1.default.createElement(dnd_1.DragList.DraggableItem, { id: props.id }, (itemDomProps) => {
148
+ const { onPointerDown, ...restDomProps } = itemDomProps;
149
+ return (react_1.default.createElement(Flex_1.Flex, { ...restDomProps, className: (0, clsx_1.default)(`twa:pb-2 ${BASE_CLASS_NAME} ${BASE_CLASS_NAME}-level-${level} ${BASE_CLASS_NAME}-primitive ${props.lastChild ? `${BASE_CLASS_NAME}--last-child` : ''}`, restDomProps.className), style: { minHeight: ITEM_HEIGHT } },
150
+ react_1.default.createElement(Handle, { onPointerDown: onPointerDown }),
151
151
  react_1.default.createElement(Flex_1.Flex, { alignItems: "center", style: { height: ITEM_HEIGHT } },
152
152
  react_1.default.createElement(Flex_1.Box, { className: "twa:mr-2" },
153
153
  react_1.default.createElement(QueryBuilderInputs_1.PrimitiveColumnOrFieldSelector, { onChange: (colOrField) => {
@@ -165,7 +165,6 @@ const PrimitiveFunctionEditor = (props) => {
165
165
  props.onChange({
166
166
  ...props.predicate,
167
167
  operator,
168
- // discard arguments
169
168
  args,
170
169
  });
171
170
  }, value: props.predicate.operator })),
@@ -186,7 +185,6 @@ const PrimitiveFunctionEditor = (props) => {
186
185
  }
187
186
  return (react_1.default.createElement(QueryBuilderInputs_1.PrimitiveValueInput, { ...commonProps, key: key, value: restOfArgs[index] ?? null, onChange: (value) => {
188
187
  const args = [...props.predicate.args];
189
- // +1 because col is the first argument
190
188
  args[index + 1] = value;
191
189
  props.onChange({
192
190
  ...props.predicate,
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { AdaptableApi, AdaptableColumn, AdaptableField, AdaptableModule, NamedQuery } from '../../types';
2
+ import { AdaptableApi, AdaptableColumn, AdaptableField, AdaptableModule, ColumnScope, NamedQuery } from '../../types';
3
3
  export type ExpressionEditorType = 'boolean' | 'scalar' | 'observable' | 'aggregatedBoolean' | 'aggregatedScalar' | 'cumulativeAggregatedScalar' | 'quantileAggregatedScalar';
4
4
  interface ExpressionEditorProps {
5
5
  value: string;
@@ -19,6 +19,7 @@ interface ExpressionEditorProps {
19
19
  api: AdaptableApi;
20
20
  showQueryBuilder?: boolean;
21
21
  showExpressionEditor?: boolean;
22
+ columnScope?: ColumnScope;
22
23
  }
23
24
  export declare const baseClassName = "ab-ExpressionEditor";
24
25
  export declare function ExpressionEditor(props: ExpressionEditorProps): React.JSX.Element;
@@ -40,7 +40,7 @@ function ExpressionEditor(props) {
40
40
  // 'boolean','scalar','aggregatedScalar'/'cumulativeAggregatedScalar'/'quantileAggregatedScalar'
41
41
  (React.createElement(
42
42
  EditorInput_1.default,
43
- { type: type, module: module, value: props.value, onChange: (value) => {
43
+ { type: type, module: module, columnScope: props.columnScope, value: props.value, onChange: (value) => {
44
44
  setExpressionText(value);
45
45
  props.onChange(value);
46
46
  }, testData: props.initialData, isFullExpression: props.isFullExpression, api: props.api }
@@ -65,35 +65,46 @@ const getLabelColumn = (field, { includeExpandCollapseButton }) => {
65
65
  } }));
66
66
  },
67
67
  renderHeader: ({ dataSourceApi, api, allRowsSelected, someRowsSelected }) => {
68
- const { treeApi } = dataSourceApi;
69
- const allFirstLevelCollapsed = dataSourceApi
70
- .getOriginalDataArray()
71
- .every((item) => !treeApi.isNodeExpanded([item.id]));
72
- return (React.createElement(Flex_1.Flex, { flexDirection: 'row', alignItems: 'center', className: "twa:w-full", onMouseDown: (e) => {
73
- // so we can keep the focus on the Grid
74
- e.preventDefault();
75
- } },
76
- React.createElement(CheckBox_1.CheckBox, { checked: someRowsSelected && !allRowsSelected ? null : allRowsSelected, className: "twa:mr-2", onChange: () => {
77
- if (allRowsSelected) {
78
- dataSourceApi.treeApi.deselectAll();
79
- }
80
- else {
81
- dataSourceApi.treeApi.selectAll();
82
- }
83
- api.focus();
84
- } }, allRowsSelected ? '(Deselect All)' : '(Select All)'),
85
- React.createElement(Flex_1.Flex, { className: "twa:flex-1" }),
86
- includeExpandCollapseButton ? (React.createElement(SimpleButton_1.default, { label: "toggle-expand-collapse", icon: allFirstLevelCollapsed ? 'expand-all' : 'collapse-all', onMouseDown: () => {
87
- if (allFirstLevelCollapsed) {
88
- dataSourceApi.treeApi.expandAll();
89
- }
90
- else {
91
- dataSourceApi.treeApi.collapseAll();
92
- }
93
- }, iconPosition: "end" })) : null));
68
+ return (React.createElement(CustomHeader, { dataSourceApi: dataSourceApi, api: api, allRowsSelected: allRowsSelected, someRowsSelected: someRowsSelected, includeExpandCollapseButton: includeExpandCollapseButton }));
94
69
  },
95
70
  };
96
71
  };
72
+ function useAllFirstLevelCollapsed(treeApi) {
73
+ const { originalDataArray } = (0, InfiniteTable_1.useDataSourceState)((state) => {
74
+ return {
75
+ originalDataArray: state.originalDataArray,
76
+ treeExpandState: state.treeExpandState,
77
+ };
78
+ });
79
+ return originalDataArray.every((item) => !treeApi.isNodeExpanded([item.id]));
80
+ }
81
+ function CustomHeader({ dataSourceApi, api, allRowsSelected, someRowsSelected, includeExpandCollapseButton, }) {
82
+ const { treeApi } = dataSourceApi;
83
+ const allFirstLevelCollapsed = useAllFirstLevelCollapsed(treeApi);
84
+ const checked = someRowsSelected && !allRowsSelected ? null : allRowsSelected;
85
+ return (React.createElement(Flex_1.Flex, { flexDirection: 'row', alignItems: 'center', className: "twa:w-full", onMouseDown: (e) => {
86
+ // so we can keep the focus on the Grid
87
+ e.preventDefault();
88
+ } },
89
+ React.createElement(CheckBox_1.CheckBox, { checked: checked, className: "twa:mr-2", onChange: () => {
90
+ if (allRowsSelected) {
91
+ dataSourceApi.treeApi.deselectAll();
92
+ }
93
+ else {
94
+ dataSourceApi.treeApi.selectAll();
95
+ }
96
+ api.focus();
97
+ } }, allRowsSelected ? '(Deselect All)' : '(Select All)'),
98
+ React.createElement(Flex_1.Flex, { className: "twa:flex-1" }),
99
+ includeExpandCollapseButton ? (React.createElement(SimpleButton_1.default, { label: "toggle-expand-collapse", icon: allFirstLevelCollapsed ? 'expand-all' : 'collapse-all', onMouseDown: () => {
100
+ if (allFirstLevelCollapsed) {
101
+ dataSourceApi.treeApi.expandAll();
102
+ }
103
+ else {
104
+ dataSourceApi.treeApi.collapseAll();
105
+ }
106
+ }, iconPosition: "end" })) : null));
107
+ }
97
108
  const sizeFull = {
98
109
  width: '100%',
99
110
  height: '100%',
@@ -1,13 +1,3 @@
1
- import * as React from 'react';
2
- import { DropResult, Draggable, DroppableProps, DragDropContextProps } from '@adaptabletools/react-beautiful-dnd';
3
- /**
4
- * We're doing all this because the placeholder is not correctly displayed in react-beautiful-dnd
5
- * with React 19.
6
- * So we make sure it properly occupies the space of the dragged item, so the
7
- * container won't flicker when we're dragging an item (as the drag item receives
8
- * position: fixed while dragging, so content does not have the initial height anymore, therefore,
9
- * the placeholder is included, with the computed height of the dragging element)
10
- */
11
- declare const Droppable: (props: DroppableProps) => React.JSX.Element;
12
- declare const DragDropContext: (props: DragDropContextProps) => React.JSX.Element;
13
- export { type DropResult, Draggable, Droppable, DragDropContext };
1
+ import { DragProxyMoveParams } from '@infinite-table/infinite-react';
2
+ export { DragDropProvider, DragList, useDragDropProvider, useDragListContext, DRAG_ITEM_ATTRIBUTE, type DragListProps, type DragDropSourceAndTarget, } from '@infinite-table/infinite-react';
3
+ export declare function defaultDragProxyMove({ proxyElement, dx, dy }: DragProxyMoveParams): void;
@@ -1,61 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DragDropContext = exports.Droppable = exports.Draggable = void 0;
4
- const tslib_1 = require("tslib");
5
- const React = tslib_1.__importStar(require("react"));
6
- const react_beautiful_dnd_1 = require("@adaptabletools/react-beautiful-dnd");
7
- Object.defineProperty(exports, "Draggable", { enumerable: true, get: function () { return react_beautiful_dnd_1.Draggable; } });
8
- const react_1 = require("react");
9
- /**
10
- * We're doing all this because the placeholder is not correctly displayed in react-beautiful-dnd
11
- * with React 19.
12
- * So we make sure it properly occupies the space of the dragged item, so the
13
- * container won't flicker when we're dragging an item (as the drag item receives
14
- * position: fixed while dragging, so content does not have the initial height anymore, therefore,
15
- * the placeholder is included, with the computed height of the dragging element)
16
- */
17
- const Droppable = (props) => {
18
- const children = props.children;
19
- const { placeholderStyle } = React.useContext(AdaptableDDContext);
20
- return (React.createElement(react_beautiful_dnd_1.Droppable, { ...props }, (provided, snapshot) => {
21
- provided.placeholder = (React.createElement("div", { key: "placeholder", style: placeholderStyle || {
22
- visibility: 'hidden',
23
- pointerEvents: 'none',
24
- height: 0,
25
- } }));
26
- return children(provided, snapshot);
27
- }));
28
- };
29
- exports.Droppable = Droppable;
30
- const queryAttr = 'data-rbd-draggable-id';
31
- const AdaptableDDContext = React.createContext({
32
- placeholderStyle: null,
33
- });
34
- const DragDropContext = (props) => {
35
- const getDraggedDom = (draggableId) => {
36
- const domQuery = `[${queryAttr}='${draggableId}']`;
37
- const draggedDOM = document.querySelector(domQuery);
38
- return draggedDOM;
39
- };
40
- const [placeholderStyle, setPlaceholderStyle] = (0, react_1.useState)(null);
41
- const handleDragStart = (initial, provided) => {
42
- props.onDragStart?.(initial, provided);
43
- const draggedDOM = getDraggedDom(initial.draggableId);
44
- if (!draggedDOM) {
45
- return;
46
- }
47
- const { clientHeight, clientWidth } = draggedDOM;
48
- const computedStyle = window.getComputedStyle(draggedDOM);
49
- setPlaceholderStyle({
50
- height: clientHeight + parseFloat(computedStyle.marginTop) + parseFloat(computedStyle.marginBottom),
51
- width: clientWidth,
52
- });
53
- };
54
- const handleDragEnd = (result, provided) => {
55
- props.onDragEnd?.(result, provided);
56
- setPlaceholderStyle(null);
57
- };
58
- return (React.createElement(AdaptableDDContext.Provider, { value: { placeholderStyle } },
59
- React.createElement(react_beautiful_dnd_1.DragDropContext, { ...props, onDragStart: handleDragStart, onDragEnd: handleDragEnd })));
60
- };
61
- exports.DragDropContext = DragDropContext;
3
+ exports.DRAG_ITEM_ATTRIBUTE = exports.useDragListContext = exports.useDragDropProvider = exports.DragList = exports.DragDropProvider = void 0;
4
+ exports.defaultDragProxyMove = defaultDragProxyMove;
5
+ var infinite_react_1 = require("@infinite-table/infinite-react");
6
+ Object.defineProperty(exports, "DragDropProvider", { enumerable: true, get: function () { return infinite_react_1.DragDropProvider; } });
7
+ Object.defineProperty(exports, "DragList", { enumerable: true, get: function () { return infinite_react_1.DragList; } });
8
+ Object.defineProperty(exports, "useDragDropProvider", { enumerable: true, get: function () { return infinite_react_1.useDragDropProvider; } });
9
+ Object.defineProperty(exports, "useDragListContext", { enumerable: true, get: function () { return infinite_react_1.useDragListContext; } });
10
+ Object.defineProperty(exports, "DRAG_ITEM_ATTRIBUTE", { enumerable: true, get: function () { return infinite_react_1.DRAG_ITEM_ATTRIBUTE; } });
11
+ function defaultDragProxyMove({ proxyElement, dx, dy }) {
12
+ proxyElement.style.transform = `translate3d(${Math.round(dx)}px, ${Math.round(dy)}px, 0)`;
13
+ }
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: 1775746156657 || Date.now(),
6
- VERSION: "22.0.10" || '--current-version--',
5
+ PUBLISH_TIMESTAMP: 1776278148216 || Date.now(),
6
+ VERSION: "22.1.0-canary.0" || '--current-version--',
7
7
  };