@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/index.css +159 -339
- package/package.json +1 -1
- package/src/Strategy/LayoutModule.js +2 -2
- package/src/View/Components/AdaptableInput/AdaptableDateInlineInput.js +1 -1
- package/src/View/Components/AdaptableInput/index.d.ts +1 -0
- package/src/View/Components/AdaptableInput/index.js +2 -2
- package/src/View/Components/ColumnFilter/ColumnFilter.js +1 -1
- package/src/View/Components/ColumnFilter/components/ColumnFilterInput.d.ts +1 -2
- package/src/View/Components/ColumnFilter/components/FloatingFilterInputList.js +3 -3
- package/src/components/Combobox/VirtualizedList.js +7 -1
- package/src/components/Combobox/comboboxUtils.d.ts +8 -0
- package/src/components/Combobox/index.js +9 -7
- package/src/components/Datepicker/index.js +5 -0
- package/src/components/NewSelect/index.js +4 -4
- package/src/components/Tree/TreeDropdown/index.js +1 -0
- package/src/components/ui/combobox.js +45 -15
- package/src/env.js +2 -2
- package/tsconfig.esm.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -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-
|
|
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
|
|
27
|
+
inputProps?: AdaptableInputProps;
|
|
29
28
|
} & ColumnFilterEditorChangeProps) => React.JSX.Element;
|
|
30
29
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
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(
|
|
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
|
-
|
|
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 +
|
|
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' &&
|
|
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))`,
|
|
@@ -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
|
|
30
|
-
const
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
43
|
-
|
|
44
|
-
|
|
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, ...
|
|
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:
|
|
4
|
-
VERSION: "23.0.
|
|
3
|
+
PUBLISH_TIMESTAMP: 1784558212103 || Date.now(),
|
|
4
|
+
VERSION: "23.0.13" || '--current-version--',
|
|
5
5
|
};
|