@adaptabletools/adaptable 23.0.11 → 23.0.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "23.0.11",
3
+ "version": "23.0.13",
4
4
  "description": "Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
5
5
  "keywords": [
6
6
  "web-components",
@@ -8,7 +8,7 @@ import { EditCurrentLayoutButton } from '../View/Layout/EditCurrentLayoutButton'
8
8
  import { LayoutCloneButton } from '../View/Layout/LayoutCloneButton';
9
9
  import { LayoutWizard } from '../View/Layout/Wizard/LayoutWizard';
10
10
  import { getLayoutFilterViewItems } from './Utilities/Layout/getLayoutFilterViewItems';
11
- import { getLayoutTableColumnsViewItems, getLayoutPivotSortingViewItem } from './Utilities/Layout/columnsSummaryHelpers';
11
+ import { getLayoutTableColumnsViewItems, getLayoutPivotSortingViewItem, } from './Utilities/Layout/columnsSummaryHelpers';
12
12
  import { getLayoutPivotRowGroupViewItems, getLayoutTableRowGroupViewItems, } from './Utilities/Layout/rowGroupSummaryHelpers';
13
13
  import { getLayoutTableAggregationViewItems, getLayoutPivotAggregationViewItems, } from './Utilities/Layout/aggregationSummaryHelpers';
14
14
  import { SHOW_PIVOT_COLUMN_DETAILS } from '../View/Components/Popups/WindowPopups/windowFactory';
@@ -219,7 +219,7 @@ export class LayoutModule extends AdaptableModuleBase {
219
219
  }),
220
220
  ];
221
221
  }
222
- const data = flattenDeep(getData(menuContext.rowNode.childrenAfterFilter));
222
+ const data = flattenDeep(getData(menuContext.rowNode.childrenAfterFilter ?? []));
223
223
  const rowGroups = currentLayout.RowGroupedColumns;
224
224
  const cellValue = isPivotColumn
225
225
  ? menuContext.rowNode?.aggData?.[columnId]
@@ -5,7 +5,7 @@ import { useState } from 'react';
5
5
  import Input from '../../../components/Input';
6
6
  import { useAdaptable } from '../../AdaptableContext';
7
7
  import { getDefaultAdaptableOptions } from '../../../AdaptableOptions/DefaultAdaptableOptions';
8
- export const AdaptableDateInlineInput = React.forwardRef((props, ref) => {
8
+ export const AdaptableDateInlineInput = React.forwardRef(function AdaptableDateInlineInputCmp(props, ref) {
9
9
  const [hasFocus, setHasFocus] = useState(false);
10
10
  const adaptable = useAdaptable();
11
11
  const dateInputOptions = adaptable?.adaptableOptions.userInterfaceOptions.dateInputOptions ??
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { InputProps } from '../../../components/Input';
3
3
  export type AdaptableInputProps = InputProps & {
4
4
  showClearButton?: boolean;
5
+ showTriggerButton?: boolean;
5
6
  };
6
7
  declare const AdaptableInput: React.ForwardRefExoticComponent<Omit<AdaptableInputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
7
8
  export default AdaptableInput;
@@ -5,9 +5,9 @@ import { useAdaptable } from '../../AdaptableContext';
5
5
  import AdaptableDateInput from '../AdaptableDateInput';
6
6
  const AdaptableInput = React.forwardRef((props, ref) => {
7
7
  const useNativeInputDate = useAdaptable().adaptableOptions.userInterfaceOptions?.dateInputOptions?.useNativeInput;
8
- const { showClearButton, ...inputProps } = props;
8
+ const { showClearButton, showTriggerButton, ...inputProps } = props;
9
9
  if (props.type === 'date' && !useNativeInputDate) {
10
- return (_jsx(AdaptableDateInput, { showClearButton: showClearButton, ...inputProps, ref: ref }));
10
+ return (_jsx(AdaptableDateInput, { showClearButton: showClearButton, showTriggerButton: showTriggerButton, ...inputProps, ref: ref }));
11
11
  }
12
12
  else {
13
13
  return _jsx(Input, { ...inputProps, ref: ref });
@@ -32,7 +32,7 @@ const ColumnFilterPredicateDropdown = (props) => {
32
32
  }, items: options, placeholder: "Add Condition", value: isAndOr ? null : props.predicate?.operator }) }));
33
33
  };
34
34
  const ColumnFilterEditor = (props) => {
35
- return (_jsxs(Box, { className: "twa:mb-3 twa:overflow-x-hidden twa:p-0.5", children: [_jsxs(Flex, { className: "twa:mb-2", children: [_jsx(ColumnFilterPredicateDropdown, { columnId: props.columnId, disabled: props.disabled, predicate: props.predicate, predicateDefs: props.predicateDefs, onPredicateChange: props.onPredicateChange }), _jsx(Flex, { alignItems: "center", className: "twa:ml-2", children: _jsx(SimpleButton, { disabled: props.deleteDisabled, onClick: props.onDelete, variant: "text", icon: "delete" }) })] }), _jsx(ColumnFilterInputList, { columnId: props.columnId, disabled: props.disabled, predicate: props.predicate, onPredicateChange: props.onPredicateChange, predicateDefs: props.predicateDefs })] }));
35
+ return (_jsxs(Box, { className: "twa:mb-3 twa:overflow-x-hidden twa:p-0.5 twa:gap-1 twa:flex twa:flex-col", children: [_jsxs(Flex, { className: "twa:mb-1", children: [_jsx(ColumnFilterPredicateDropdown, { columnId: props.columnId, disabled: props.disabled, predicate: props.predicate, predicateDefs: props.predicateDefs, onPredicateChange: props.onPredicateChange }), _jsx(Flex, { alignItems: "center", className: "twa:ml-2", children: _jsx(SimpleButton, { disabled: props.deleteDisabled, onClick: props.onDelete, variant: "text", icon: "delete" }) })] }), _jsx(ColumnFilterInputList, { columnId: props.columnId, disabled: props.disabled, predicate: props.predicate, onPredicateChange: props.onPredicateChange, predicateDefs: props.predicateDefs })] }));
36
36
  };
37
37
  const AndOrInput = (props) => {
38
38
  return (_jsxs(Flex, { className: "twa:flex-1", children: [_jsx(Radio, { className: "twa:mr-2", onClick: () => props.onChange('AND'), checked: props.operator === 'AND', children: "AND" }), _jsx(Radio, { className: "twa:mr-2", onClick: () => props.onChange('OR'), checked: props.operator === 'OR', children: "OR" })] }));
@@ -1,6 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { AdaptableInputProps } from '../../AdaptableInput';
3
- import { AdaptableDateInputProps } from '../../AdaptableDateInput';
4
3
  type ColumnFilterEditorChangeProps = {
5
4
  type: 'text';
6
5
  value: string;
@@ -25,6 +24,6 @@ export declare const ColumnFilterInput: (props: {
25
24
  filterType?: "floating" | "default";
26
25
  usePrimitiveInputs?: boolean;
27
26
  columnId: string;
28
- inputProps?: AdaptableInputProps | AdaptableDateInputProps;
27
+ inputProps?: AdaptableInputProps;
29
28
  } & ColumnFilterEditorChangeProps) => React.JSX.Element;
30
29
  export {};
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { debounce } from '../../../../Utilities/Helpers/TimingHelper';
3
3
  import * as React from 'react';
4
4
  import { getOperatorMatchingInputs } from '../../../../components/ExpressionEditor/QueryBuilder/utils';
@@ -51,7 +51,7 @@ export const FloatingFilterInputList = (props) => {
51
51
  'twa:*:[input]:border-none twa:*:[[role=button]]:border-none': hasMultipleInputs,
52
52
  }), children: (matchingInputs ?? []).map((input, index) => {
53
53
  const value = props?.predicate?.args?.[index];
54
- return (_jsxs(_Fragment, { children: [index > 0 && _jsx("div", { className: "twa:border-l twa:border-input-border" }), _jsx(ColumnFilterInput, { inputProps: {
54
+ return (_jsxs(React.Fragment, { children: [index > 0 && (_jsx("div", { className: "twa:border-l twa:border-input-border" }, `${props.columnId}-${index}-divider`)), _jsx(ColumnFilterInput, { inputProps: {
55
55
  showTriggerButton: hasMultipleInputs ? false : undefined,
56
56
  }, filterType: "floating", columnId: props.columnId, usePrimitiveInputs: true, disabled: props.disabled, type: input, value: value, onKeyDown: props.onKeyDown, onClear: () => {
57
57
  const args = [...props.predicate.args];
@@ -68,6 +68,6 @@ export const FloatingFilterInputList = (props) => {
68
68
  };
69
69
  newPredicate.args[index] = value;
70
70
  debouncedPredicateChange(newPredicate);
71
- } }, index)] }));
71
+ } }, `${props.columnId}-${index}`)] }, `${props.columnId}-${index}`));
72
72
  }) }));
73
73
  };
@@ -42,7 +42,13 @@ export function VirtualizedList({ open, virtualizerRef, showItemTooltip, renderC
42
42
  ? `Create "${itemText}"`
43
43
  : itemText
44
44
  : undefined;
45
- const label = isUncreatedCreatable ? `Create "${item.label}"` : item.label;
45
+ let label = isUncreatedCreatable ? `Create "${item.label}"` : item.label;
46
+ if (label && typeof label === 'object') {
47
+ if (Object.prototype.hasOwnProperty.call(label, 'toString') &&
48
+ typeof label.toString === 'function') {
49
+ label = label.toString();
50
+ }
51
+ }
46
52
  const itemLabel = renderItemLabel ? (renderItemLabel(label, item)) : (_jsx("span", { className: "twa:min-w-0 twa:flex-1 twa:truncate", children: label }));
47
53
  const itemContent = isUncreatedCreatable ? (_jsxs(_Fragment, { children: [_jsx(PlusIcon, {}), itemLabel] })) : (itemLabel);
48
54
  return (_jsx(ComboboxItem, { index: virtualItem.index, "data-index": virtualItem.index, ref: virtualizer.measureElement, value: item, renderCheckboxIndicator: renderCheckboxIndicator, "aria-setsize": filteredItems.length, "aria-posinset": virtualItem.index + 1, "aria-label": itemText ?? undefined, style: {
@@ -49,6 +49,14 @@ export type ComboboxCommonProps<T extends ComboboxItemType> = {
49
49
  showClear?: boolean;
50
50
  clearOnEscape?: boolean;
51
51
  searchable?: boolean | 'inline' | 'menulist';
52
+ /**
53
+ * Only applies when `searchable === 'menulist'` and the search input is
54
+ * uncontrolled (no `inputValue` prop): when true, the text typed in the
55
+ * in-popup search input survives closing the popup, so reopening it shows
56
+ * the list filtered by the previous query. Defaults to false — the filter
57
+ * is cleared on close and every open starts from the full list.
58
+ */
59
+ persistFilterOnReopen?: boolean;
52
60
  /**
53
61
  * Custom filter function, or `null` to disable built-in filtering
54
62
  * (e.g. when options are already filtered server-side).
@@ -10,9 +10,9 @@ import { VirtualizedList } from './VirtualizedList';
10
10
  import { CheckBox } from '../CheckBox';
11
11
  import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';
12
12
  const getContentStyle = ({ maxLabelLength }) => {
13
- const labelWidth = `${maxLabelLength + 3}ch`;
13
+ const labelWidth = `${maxLabelLength + 6}ch`;
14
14
  return {
15
- width: labelWidth,
15
+ width: `max(${labelWidth}, calc(var(--ab-base-space) * 25), var(--anchor-width))`,
16
16
  minWidth: `min(var(--anchor-width), var(--available-width), 80vw)`,
17
17
  };
18
18
  };
@@ -104,7 +104,9 @@ const AdaptableCombobox_Root = (props) => {
104
104
  eventDetails.cancel?.();
105
105
  return;
106
106
  }
107
- if (props.searchable === 'menulist' && eventDetails?.reason === 'input-clear' && props.open) {
107
+ if (props.searchable === 'menulist' &&
108
+ eventDetails?.reason === 'input-clear' &&
109
+ (props.open || props.persistFilterOnReopen)) {
108
110
  eventDetails.cancel?.();
109
111
  return;
110
112
  }
@@ -164,10 +166,10 @@ const useGetAllItems = (props) => {
164
166
  onInputValueChange,
165
167
  onValueChange,
166
168
  allItems,
167
- maxLabelLength: allItems.reduce((max, item) => Math.max(max, typeof item.label === 'string'
168
- ? item.label.length
169
- : typeof item.textLabel === 'string'
170
- ? item.textLabel.length
169
+ maxLabelLength: allItems.reduce((max, item) => Math.max(max, typeof item.label === 'string' || typeof item.label === 'number'
170
+ ? String(item.label).length
171
+ : typeof item.textLabel === 'string' || typeof item.textLabel === 'number'
172
+ ? String(item.textLabel).length
171
173
  : 0), 0),
172
174
  };
173
175
  };
@@ -188,6 +188,11 @@ export const Datepicker = React.forwardRef((props, ref) => {
188
188
  if (isValid(date)) {
189
189
  updateValue(date);
190
190
  }
191
+ }, onKeyDown: (e) => {
192
+ if (e.key === 'Enter' && !open && !disabled) {
193
+ e.preventDefault();
194
+ setPopoverOpen(true);
195
+ }
191
196
  }, className: "twa:h-auto twa:min-w-0 twa:outline-none twa:min-h-auto twa:py-0 twa:flex-1 twa:rounded-none twa:border-0 twa:bg-transparent twa:shadow-none twa:ring-0 twa:focus-visible:ring-0 twa:dark:bg-transparent", style: style, disabled: disabled }), _jsxs(InputGroupAddon, { align: "inline-end", children: [inputValue ? clearButton : null, calendarButton] })] }) }), _jsx(PopoverContent, { className: "twa:w-auto twa:p-0", align: "start", sideOffset: 8, children: _jsx("div", { ref: popupRefCallback, tabIndex: -1, role: "region", "aria-label": "Calendar", className: cn('twa:relative twa:isolate twa:overflow-visible twa:outline-none twa:rounded-standard', targetOwn.focusWithinOutline), onKeyDown: () => {
192
197
  }, children: _jsx(DatepickerSelectPortalContext.Provider, { value: selectPortalRoot, children: _jsx(Calendar, { fixedWeeks: true, autoFocus: !!autoFocus, showWeekNumber: showWeekNumber, showOutsideDays: showOutsideDays, mode: "single", captionLayout: "dropdown", month: month && !isNaN(month.getTime()) ? month : new Date(), selected: value, onMonthChange: setMonth, onSelect: updateValue, startMonth: START_MONTH, endMonth: END_MONTH, locale: dateProps.locale, components: captionComponents, footer: _jsx(Flex, { justifyContent: "space-between", className: "twa:mt-2", flexWrap: 'wrap', children: footerButtons }) }) }) }) })] }));
193
198
  });
@@ -30,10 +30,10 @@ const NewSelect = (props) => {
30
30
  ];
31
31
  allItems = props.items;
32
32
  }
33
- const maxLabelLength = allItems.reduce((max, item) => Math.max(max, typeof item.label === 'string'
34
- ? item.label.length
35
- : typeof item.tooltip === 'string'
36
- ? item.tooltip.length
33
+ const maxLabelLength = allItems.reduce((max, item) => Math.max(max, typeof item.label === 'string' || typeof item.label === 'number'
34
+ ? String(item.label).length
35
+ : typeof item.tooltip === 'string' || typeof item.tooltip === 'number'
36
+ ? String(item.tooltip).length
37
37
  : 0), 0);
38
38
  const contentStyle = {
39
39
  width: `max(${maxLabelLength + (props.extraWidthChars ?? 3)}ch, calc(var(--ab-base-space) * 20), var(--anchor-width))`,
@@ -362,6 +362,7 @@ export function TreeDropdown(props) {
362
362
  return defaultLabel;
363
363
  },
364
364
  filter,
365
+ inputValue: searchQuery,
365
366
  onInputValueChange: handleSearchInputChange,
366
367
  onOpenChange: (open) => {
367
368
  if (!open) {
@@ -26,28 +26,58 @@ const ComboboxInput = React.forwardRef(function ComboboxInput({ className, child
26
26
  return (_jsxs(InputGroup, { ref: groupRef, className: cn('twa:w-auto', className), "aria-label": ariaLabel, children: [_jsx(ComboboxPrimitive.Input, { ref: ref, render: _jsx(InputGroupInput, { disabled: disabled }), ...rest }), _jsxs(InputGroupAddon, { align: "inline-end", children: [isLoading && (_jsx(Loader2Icon, { className: "twa:size-4 twa:text-muted-foreground twa:animate-spin" })), showTrigger && (_jsx(InputGroupButton, { size: "icon-xs", variant: "ghost", render: _jsx(ComboboxTrigger, {}), "data-slot": "combobox-toggle", className: "twa:group-has-data-[slot=combobox-clear]/input-group:hidden twa:data-pressed:bg-transparent twa:min-h-auto!", disabled: disabled })), showClear && _jsx(ComboboxClear, { disabled: disabled })] }), children] }));
27
27
  });
28
28
  function ComboboxContent({ className, side = 'bottom', sideOffset = 6, align = 'start', alignOffset = 0, anchor, resizable = false, contentRef, style, ...props }) {
29
- const sizeRef = React.useRef(null);
30
- const popupElRef = React.useRef(null);
29
+ const [userSize, setUserSize] = React.useState(null);
30
+ const styleObject = typeof style === 'function' ? undefined : style;
31
+ const expectedSizeRef = React.useRef({});
32
+ expectedSizeRef.current = {
33
+ width: userSize?.width ?? styleObject?.width,
34
+ height: userSize?.height ?? styleObject?.height,
35
+ };
36
+ const styleObserverRef = React.useRef(null);
37
+ const pendingUserSizeRef = React.useRef(null);
38
+ const pinTimerRef = React.useRef(null);
39
+ const flushPendingUserSize = React.useCallback(() => {
40
+ if (pinTimerRef.current) {
41
+ clearTimeout(pinTimerRef.current);
42
+ pinTimerRef.current = null;
43
+ }
44
+ if (pendingUserSizeRef.current) {
45
+ setUserSize(pendingUserSizeRef.current);
46
+ pendingUserSizeRef.current = null;
47
+ }
48
+ }, []);
31
49
  const popupRef = React.useCallback((el) => {
32
- if (!el && popupElRef.current && resizable) {
33
- const prev = popupElRef.current;
34
- const w = prev.style.width;
35
- const h = prev.style.height;
36
- if (w && h) {
37
- sizeRef.current = { width: w, height: h };
38
- }
50
+ styleObserverRef.current?.disconnect();
51
+ styleObserverRef.current = null;
52
+ if (!el) {
53
+ flushPendingUserSize();
39
54
  }
40
- popupElRef.current = el;
41
55
  contentRef?.(el);
42
- if (el && resizable && sizeRef.current) {
43
- el.style.width = sizeRef.current.width;
44
- el.style.height = sizeRef.current.height;
56
+ if (el && resizable) {
57
+ const observer = new MutationObserver(() => {
58
+ const { width, height } = el.style;
59
+ const expected = expectedSizeRef.current;
60
+ const isUserSize = (actual, expectedValue) => !!actual && actual !== expectedValue && actual.endsWith('px');
61
+ if (!isUserSize(width, expected.width) && !isUserSize(height, expected.height)) {
62
+ return;
63
+ }
64
+ pendingUserSizeRef.current = {
65
+ width: width || `${el.offsetWidth}px`,
66
+ height: height || `${el.offsetHeight}px`,
67
+ };
68
+ if (pinTimerRef.current) {
69
+ clearTimeout(pinTimerRef.current);
70
+ }
71
+ pinTimerRef.current = setTimeout(flushPendingUserSize, 150);
72
+ });
73
+ observer.observe(el, { attributes: true, attributeFilter: ['style'] });
74
+ styleObserverRef.current = observer;
45
75
  }
46
- }, [resizable, contentRef]);
76
+ }, [resizable, contentRef, flushPendingUserSize]);
47
77
  const resizableStyle = resizable
48
78
  ? { resize: 'both' }
49
79
  : undefined;
50
- return (_jsx(ComboboxPrimitive.Portal, { children: _jsx(ComboboxPrimitive.Positioner, { side: side, sideOffset: sideOffset, align: align, alignOffset: alignOffset, anchor: anchor, className: `twa:isolate ${POPUP_Z_INDEX}`, children: _jsx(ComboboxPrimitive.Popup, { ref: popupRef, "data-slot": "combobox-content", "data-chips": !!anchor, "data-resizable": resizable || undefined, style: { ...resizableStyle, ...style }, className: cn('twa:group/combobox-content twa:relative twa:origin-(--transform-origin) twa:overflow-hidden twa:rounded-input twa:bg-popover twa:text-popover-foreground twa:shadow-md twa:ring-1 twa:ring-foreground/10 twa:duration-100 twa:data-[side=bottom]:slide-in-from-top-2 twa:data-[side=inline-end]:slide-in-from-left-2 twa:data-[side=inline-start]:slide-in-from-right-2 twa:data-[side=left]:slide-in-from-right-2 twa:data-[side=right]:slide-in-from-left-2 twa:data-[side=top]:slide-in-from-bottom-2 twa:*:data-[slot=input-group]:m-1 twa:*:data-[slot=input-group]:mb-0 twa:*:data-[slot=input-group]:h-8 twa:*:data-[slot=input-group]:border-input/30 twa:*:data-[slot=input-group]:bg-input/30 twa:*:data-[slot=input-group]:shadow-none twa:data-open:animate-in twa:data-open:fade-in-0 twa:data-open:zoom-in-95 twa:data-closed:animate-out twa:data-closed:fade-out-0 twa:data-closed:zoom-out-95', 'twa:max-h-[min(var(--available-height,80vh),80vh)]', 'twa:max-w-[min(var(--available-width,80vw),80vw)]', 'twa:min-w-[min(calc(var(--anchor-width)+--spacing(7)),var(--available-width),80vw)]', resizable ? 'twa:flex twa:flex-col twa:min-h-24' : 'twa:w-(--anchor-width)', className), ...props }) }) }));
80
+ return (_jsx(ComboboxPrimitive.Portal, { children: _jsx(ComboboxPrimitive.Positioner, { side: side, sideOffset: sideOffset, align: align, alignOffset: alignOffset, anchor: anchor, className: `twa:isolate ${POPUP_Z_INDEX}`, children: _jsx(ComboboxPrimitive.Popup, { ref: popupRef, "data-slot": "combobox-content", "data-chips": !!anchor, "data-resizable": resizable || undefined, style: { ...resizableStyle, ...styleObject, ...userSize }, className: cn('twa:group/combobox-content twa:relative twa:origin-(--transform-origin) twa:overflow-hidden twa:rounded-input twa:bg-popover twa:text-popover-foreground twa:shadow-md twa:ring-1 twa:ring-foreground/10 twa:duration-100 twa:data-[side=bottom]:slide-in-from-top-2 twa:data-[side=inline-end]:slide-in-from-left-2 twa:data-[side=inline-start]:slide-in-from-right-2 twa:data-[side=left]:slide-in-from-right-2 twa:data-[side=right]:slide-in-from-left-2 twa:data-[side=top]:slide-in-from-bottom-2 twa:*:data-[slot=input-group]:m-1 twa:*:data-[slot=input-group]:mb-0 twa:*:data-[slot=input-group]:h-8 twa:*:data-[slot=input-group]:border-input/30 twa:*:data-[slot=input-group]:bg-input/30 twa:*:data-[slot=input-group]:shadow-none twa:data-open:animate-in twa:data-open:fade-in-0 twa:data-open:zoom-in-95 twa:data-closed:animate-out twa:data-closed:fade-out-0 twa:data-closed:zoom-out-95', 'twa:max-h-[min(var(--available-height,80vh),80vh)]', 'twa:max-w-[min(var(--available-width,80vw),80vw)]', 'twa:min-w-[min(calc(var(--anchor-width)+--spacing(7)),var(--available-width),80vw)]', resizable ? 'twa:flex twa:flex-col twa:min-h-24' : 'twa:w-(--anchor-width)', className), ...props }) }) }));
51
81
  }
52
82
  const ComboboxList = React.forwardRef(function ComboboxList({ className, ...props }, ref) {
53
83
  return (_jsx(ComboboxPrimitive.List, { "data-slot": "combobox-list", className: cn('twa:no-scrollbar twa:max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] twa:scroll-py-1 twa:overflow-y-auto twa:overscroll-contain twa:p-1 twa:data-empty:p-0', RESIZABLE_LIST_CLASS, className), ref: ref, ...props }));
package/src/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  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" || '',
3
- PUBLISH_TIMESTAMP: 1784037600986 || Date.now(),
4
- VERSION: "23.0.11" || '--current-version--',
3
+ PUBLISH_TIMESTAMP: 1784558212103 || Date.now(),
4
+ VERSION: "23.0.13" || '--current-version--',
5
5
  };