@keboola/design 13.2.0 → 14.0.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.
- package/AGENTS.md +5 -1
- package/CHANGELOG.md +161 -0
- package/COMPONENT-API.md +52 -42
- package/dist/{AIKit-C5FbKjwa.js → AIKit-BRSZ3nY7.js} +2216 -302
- package/dist/AIKit-BRSZ3nY7.js.map +1 -0
- package/dist/{Alert-DuAGeYyM.js → Alert-CZ0dDsuk.js} +2 -2
- package/dist/{Alert-DuAGeYyM.js.map → Alert-CZ0dDsuk.js.map} +1 -1
- package/dist/{BrandEditor-Dq168RJc.js → BrandEditor-CN2HJ_12.js} +5 -5
- package/dist/{BrandEditor-Dq168RJc.js.map → BrandEditor-CN2HJ_12.js.map} +1 -1
- package/dist/{Breadcrumb-CUyYu5Bi.js → Breadcrumb-BnIlsoIH.js} +54 -12
- package/dist/Breadcrumb-BnIlsoIH.js.map +1 -0
- package/dist/{Checkbox-D9rafoKh.js → Checkbox-uFE8XLT_.js} +2 -2
- package/dist/{Checkbox-D9rafoKh.js.map → Checkbox-uFE8XLT_.js.map} +1 -1
- package/dist/{Clipboard-BHWUodAx.js → Clipboard-D-9XOqy4.js} +2 -2
- package/dist/{Clipboard-BHWUodAx.js.map → Clipboard-D-9XOqy4.js.map} +1 -1
- package/dist/{ClipboardButton-Urg-kZbh.js → ClipboardButton-DxvZG_H0.js} +2 -2
- package/dist/{ClipboardButton-Urg-kZbh.js.map → ClipboardButton-DxvZG_H0.js.map} +1 -1
- package/dist/{CodeEditor-Y0iE-SwV.js → CodeEditor-BfRSCKEs.js} +5 -5
- package/dist/{CodeEditor-Y0iE-SwV.js.map → CodeEditor-BfRSCKEs.js.map} +1 -1
- package/dist/{ColorInput-D1nC0X6i.js → ColorInput-CDKH8q_f.js} +2 -2
- package/dist/{ColorInput-D1nC0X6i.js.map → ColorInput-CDKH8q_f.js.map} +1 -1
- package/dist/{ColorModeSwitch-Cxee8jnB.js → ColorModeSwitch-DR6J2U6M.js} +2 -2
- package/dist/{ColorModeSwitch-Cxee8jnB.js.map → ColorModeSwitch-DR6J2U6M.js.map} +1 -1
- package/dist/{Combobox-B1Kjoy5J.js → Combobox-CEesMe2M.js} +240 -38
- package/dist/Combobox-CEesMe2M.js.map +1 -0
- package/dist/{Command-BuOA3V18.js → Command-T3MLRaen.js} +8 -4
- package/dist/Command-T3MLRaen.js.map +1 -0
- package/dist/{CopyField-DsOVtV2Q.js → CopyField-CNbCHw9a.js} +2 -2
- package/dist/{CopyField-DsOVtV2Q.js.map → CopyField-CNbCHw9a.js.map} +1 -1
- package/dist/{DateInput-BlKkequE.js → DateInput-ClK1lCxz.js} +2 -2
- package/dist/{DateInput-BlKkequE.js.map → DateInput-ClK1lCxz.js.map} +1 -1
- package/dist/{DateRangeInput-DOxJHw8V.js → DateRangeInput-DtlAffS1.js} +2 -2
- package/dist/{DateRangeInput-DOxJHw8V.js.map → DateRangeInput-DtlAffS1.js.map} +1 -1
- package/dist/{DropdownMenu-DtRYcKEx.js → DropdownMenu-B1gGvZoh.js} +2 -2
- package/dist/{DropdownMenu-DtRYcKEx.js.map → DropdownMenu-B1gGvZoh.js.map} +1 -1
- package/dist/{FieldItem-Cf1E3rfQ.js → FieldItem-CYvJyjiI.js} +3 -3
- package/dist/{FieldItem-Cf1E3rfQ.js.map → FieldItem-CYvJyjiI.js.map} +1 -1
- package/dist/{Form-CuaAn-lR.js → Form-CD55zJiy.js} +5 -5
- package/dist/{Form-CuaAn-lR.js.map → Form-CD55zJiy.js.map} +1 -1
- package/dist/{FormGroup-D4O96YPm.js → FormGroup-DiYFdEhH.js} +3 -3
- package/dist/{FormGroup-D4O96YPm.js.map → FormGroup-DiYFdEhH.js.map} +1 -1
- package/dist/{HoverCard-Cy6nhg4u.js → HoverCard-BBdPYqEf.js} +2 -2
- package/dist/HoverCard-BBdPYqEf.js.map +1 -0
- package/dist/{InlineEdit-DSMIEUUa.js → InlineEdit-D5RdunZo.js} +3 -3
- package/dist/{InlineEdit-DSMIEUUa.js.map → InlineEdit-D5RdunZo.js.map} +1 -1
- package/dist/{Kbd-Du93F3o4.js → Kbd-3YM7NQO4.js} +2 -2
- package/dist/{Kbd-Du93F3o4.js.map → Kbd-3YM7NQO4.js.map} +1 -1
- package/dist/MermaidDiagram-CeiOkI60.js +199 -0
- package/dist/MermaidDiagram-CeiOkI60.js.map +1 -0
- package/dist/{Modal-DQIauzar.js → Modal-DMZRswk4.js} +4 -3
- package/dist/Modal-DMZRswk4.js.map +1 -0
- package/dist/{MultiActionButtonGroup-xKqiucAN.js → MultiActionButtonGroup-CEv_txvz.js} +2 -2
- package/dist/{MultiActionButtonGroup-xKqiucAN.js.map → MultiActionButtonGroup-CEv_txvz.js.map} +1 -1
- package/dist/{RadioGroup-C2vk5acr.js → RadioGroup-C8EC3fqO.js} +2 -2
- package/dist/{RadioGroup-C2vk5acr.js.map → RadioGroup-C8EC3fqO.js.map} +1 -1
- package/dist/{Search-CVrv3hqf.js → Search-aaUMI4ix.js} +2 -2
- package/dist/{Search-CVrv3hqf.js.map → Search-aaUMI4ix.js.map} +1 -1
- package/dist/{SearchInput-BnU6YHgT.js → SearchInput-Dxi2GK4n.js} +2 -2
- package/dist/{SearchInput-BnU6YHgT.js.map → SearchInput-Dxi2GK4n.js.map} +1 -1
- package/dist/{SectionNav-XlhvXXdF.js → SectionNav-BnHOMLtE.js} +3 -3
- package/dist/{SectionNav-XlhvXXdF.js.map → SectionNav-BnHOMLtE.js.map} +1 -1
- package/dist/Sheet-utw4_rUa.js.map +1 -1
- package/dist/{Sidebar-CKaxOPwY.js → Sidebar-BAmux2Uj.js} +5 -5
- package/dist/{Sidebar-CKaxOPwY.js.map → Sidebar-BAmux2Uj.js.map} +1 -1
- package/dist/{Slider-Rcc2qVct.js → Slider-DbzzSDRV.js} +2 -2
- package/dist/{Slider-Rcc2qVct.js.map → Slider-DbzzSDRV.js.map} +1 -1
- package/dist/{Table-CgSC-fSo.js → Table-CilEvpMq.js} +62 -3
- package/dist/Table-CilEvpMq.js.map +1 -0
- package/dist/{TextInput-B5TDDOty.js → TextInput-K2DSDs5O.js} +2 -2
- package/dist/{TextInput-B5TDDOty.js.map → TextInput-K2DSDs5O.js.map} +1 -1
- package/dist/{ThemeProvider-Dt9b67sW.js → ThemeProvider-C8yaKlM1.js} +2 -2
- package/dist/{ThemeProvider-Dt9b67sW.js.map → ThemeProvider-C8yaKlM1.js.map} +1 -1
- package/dist/ToggleAllTooltip-Dlmq-yqS.js +37 -0
- package/dist/ToggleAllTooltip-Dlmq-yqS.js.map +1 -0
- package/dist/{ZoomableSvg-D8sXKpoV.js → ZoomableSvg-Dh1OstPN.js} +84 -80
- package/dist/ZoomableSvg-Dh1OstPN.js.map +1 -0
- package/dist/editors.js +3 -3
- package/dist/flint.js +10 -45
- package/dist/flint.js.map +1 -1
- package/dist/highlightCode-D354tCXO.js +81 -0
- package/dist/highlightCode-D354tCXO.js.map +1 -0
- package/dist/index.d.ts +792 -346
- package/dist/index.js +35 -35
- package/dist/internal/blocks/AIKit.js +2 -2
- package/dist/internal/blocks/BrandEditor.js +1 -1
- package/dist/internal/blocks/ChipEditor.js +1 -1
- package/dist/internal/blocks/ClipboardButton.js +1 -1
- package/dist/internal/blocks/ColorInput.js +1 -1
- package/dist/internal/blocks/ColorModeSwitch.js +1 -1
- package/dist/internal/blocks/Command.js +1 -1
- package/dist/internal/blocks/CopyField.js +1 -1
- package/dist/internal/blocks/DateInput.js +1 -1
- package/dist/internal/blocks/DateRangeInput.js +1 -1
- package/dist/internal/blocks/DiagramShared/DiagramSkeleton.js.map +1 -1
- package/dist/internal/blocks/ExportMenu.js +2 -2
- package/dist/internal/blocks/Form/connectors/ComboboxField.js +2 -2
- package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +1 -1
- package/dist/internal/blocks/Form.js +1 -1
- package/dist/internal/blocks/FormGroup.js +1 -1
- package/dist/internal/blocks/InlineEdit.js +1 -1
- package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
- package/dist/internal/blocks/MultiCombobox.js +204 -68
- package/dist/internal/blocks/MultiCombobox.js.map +1 -1
- package/dist/internal/blocks/PasswordInput.js +1 -1
- package/dist/internal/blocks/SearchInput.js +1 -1
- package/dist/internal/blocks/SearchInputWithNavigation.js +2 -2
- package/dist/internal/blocks/SectionNav.js +1 -1
- package/dist/internal/blocks/SplitButton.js +1 -1
- package/dist/internal/blocks/TextInput.js +1 -1
- package/dist/internal/blocks/TimeInput.js +1 -1
- package/dist/internal/components/Alert.js +1 -1
- package/dist/internal/components/Avatar.js +1 -1
- package/dist/internal/components/Breadcrumb.js +1 -1
- package/dist/internal/components/Checkbox.js +1 -1
- package/dist/internal/components/Clipboard.js +1 -1
- package/dist/internal/components/CollapsiblePanel.js +1 -1
- package/dist/internal/components/Combobox.js +1 -1
- package/dist/internal/components/DropdownMenu.js +1 -1
- package/dist/internal/components/HoverCard.js +1 -1
- package/dist/internal/components/Kbd.js +1 -1
- package/dist/internal/components/Modal.js +1 -1
- package/dist/internal/components/RadioGroup.js +1 -1
- package/dist/internal/components/Search.js +1 -1
- package/dist/internal/components/Sidebar.js +1 -1
- package/dist/internal/components/Skeleton/Skeleton.js +1 -1
- package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/internal/components/Slider.js +1 -1
- package/dist/internal/components/Table.js +1 -1
- package/dist/internal/components/ThemeProvider.js +1 -1
- package/dist/internal/components/Tooltip.js +1 -1
- package/dist/internal/components/Truncated.js +1 -1
- package/dist/internal/components/ZoomableSvg.js +1 -1
- package/dist/internal/utils.js +1 -1
- package/dist/markdown-editor.js +6 -6
- package/dist/mermaid.d.ts +1 -2
- package/dist/mermaid.js +1 -1
- package/dist/rjsf.js +98 -11
- package/dist/rjsf.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/svgCache-Dhmbe-7i.js +26 -0
- package/dist/svgCache-Dhmbe-7i.js.map +1 -0
- package/dist/svgTransforms-Hnvev3Vs.js +38 -0
- package/dist/svgTransforms-Hnvev3Vs.js.map +1 -0
- package/dist/testing.js +1 -1
- package/dist/{themeTokens-7DEab0kp.js → themeTokens-l2Fsfcs7.js} +3 -12
- package/dist/themeTokens-l2Fsfcs7.js.map +1 -0
- package/dist/{utils-p6tjltbX.js → utils-LQ4jJA-9.js} +18 -2
- package/dist/utils-LQ4jJA-9.js.map +1 -0
- package/dist/vega.js +1 -1
- package/dist/vegaTheme-BrmVoPEz.js +49 -0
- package/dist/vegaTheme-BrmVoPEz.js.map +1 -0
- package/dist/{vegaTheme-VQMWTlBw.js → vegaTokens-Ce07C0DH.js} +36 -44
- package/dist/vegaTokens-Ce07C0DH.js.map +1 -0
- package/package.json +3 -4
- package/src/styles.css +4 -4
- package/dist/AIKit-C5FbKjwa.js.map +0 -1
- package/dist/Breadcrumb-CUyYu5Bi.js.map +0 -1
- package/dist/Combobox-B1Kjoy5J.js.map +0 -1
- package/dist/Command-BuOA3V18.js.map +0 -1
- package/dist/DiagramSource-jTwmmi9g.js +0 -11
- package/dist/DiagramSource-jTwmmi9g.js.map +0 -1
- package/dist/HoverCard-Cy6nhg4u.js.map +0 -1
- package/dist/MermaidDiagram-D2ThT8Q-.js +0 -302
- package/dist/MermaidDiagram-D2ThT8Q-.js.map +0 -1
- package/dist/Modal-DQIauzar.js.map +0 -1
- package/dist/Table-CgSC-fSo.js.map +0 -1
- package/dist/ZoomableSvg-D8sXKpoV.js.map +0 -1
- package/dist/svgTransforms-Dw2hRA-i.js +0 -51
- package/dist/svgTransforms-Dw2hRA-i.js.map +0 -1
- package/dist/themeTokens-7DEab0kp.js.map +0 -1
- package/dist/utils-p6tjltbX.js.map +0 -1
- package/dist/vegaTheme-VQMWTlBw.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cn } from "./classNames-DcGnTh2N.js";
|
|
2
|
-
import { Tooltip, TooltipProvider, noop } from "./utils-
|
|
2
|
+
import { Tooltip, TooltipProvider, noop } from "./utils-LQ4jJA-9.js";
|
|
3
3
|
import { useArgoDesign } from "./context-U293r3v-.js";
|
|
4
4
|
import { Check, ChevronDown, ChevronRight, Loader2, Minus, Plus, X } from "./icons-ZIeZXXS7.js";
|
|
5
5
|
import { hasTruncationOverflow } from "./internal/components/Truncated.js";
|
|
@@ -7,8 +7,9 @@ import { useStableCallback } from "./internal/hooks/useStableCallback.js";
|
|
|
7
7
|
import { InputGroup } from "./InputGroup-Dm014ruw.js";
|
|
8
8
|
import { forwardAccessibleName } from "./internal/utils/accessibleName.js";
|
|
9
9
|
import { Badge } from "./Badge-Ba3epgcI.js";
|
|
10
|
+
import { ToggleAllTooltip, isToggleAllClick } from "./ToggleAllTooltip-Dlmq-yqS.js";
|
|
10
11
|
import { useElement } from "./useElement-D-RjrGa4.js";
|
|
11
|
-
import { Fragment, createContext, isValidElement, use, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
|
|
12
|
+
import { Fragment, createContext, isValidElement, use, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
12
13
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
13
14
|
import { Combobox } from "@base-ui/react/combobox";
|
|
14
15
|
import { DismissableLayer } from "@radix-ui/react-dismissable-layer";
|
|
@@ -276,6 +277,7 @@ const ComboboxContent = ({ ref, align = "start", side = "bottom", sideOffset = 4
|
|
|
276
277
|
className: "tw:isolate tw:z-[1055] tailwindcss-preflight",
|
|
277
278
|
children: /* @__PURE__ */ jsx(Combobox.Popup, {
|
|
278
279
|
ref,
|
|
280
|
+
"data-slot": "combobox-content",
|
|
279
281
|
"data-chips": !!anchor,
|
|
280
282
|
"data-variant": effectiveVariant,
|
|
281
283
|
className: cn("tw:!pointer-events-auto", "tw:group/combobox-content", "tw:relative", "tw:flex tw:flex-col tw:overflow-hidden", "tw:max-h-[var(--available-height)]", "tw:w-[var(--anchor-width)]", "tw:max-w-[var(--available-width)]", "tw:origin-[var(--transform-origin)]", "tw:data-[chips=true]:min-w-[var(--anchor-width)]", "tw:rounded-lg", "tw:data-[variant=default]:rounded", "tw:bg-popover", "tw:text-popover-foreground", "tw:shadow-md", "tw:ring-1", "tw:ring-foreground/10", "tw:duration-100", "data-open:animate-in", "data-open:fade-in-0", "data-open:zoom-in-95", "data-closed:animate-out", "data-closed:fade-out-0", "data-closed:zoom-out-95", "tw:data-[side=bottom]:slide-in-from-top-2", "tw:data-[side=top]:slide-in-from-bottom-2", "tw:data-[side=left]:slide-in-from-right-2", "tw:data-[side=right]:slide-in-from-left-2", "tw:data-[side=inline-start]:slide-in-from-right-2", "tw:data-[side=inline-end]:slide-in-from-left-2", className),
|
|
@@ -362,17 +364,19 @@ const useVirtualList = (items, virtualized) => {
|
|
|
362
364
|
};
|
|
363
365
|
//#endregion
|
|
364
366
|
//#region src/components/Combobox/ComboboxItem.tsx
|
|
365
|
-
const ComboboxItem = ({ ref, className, children, icon, indicator: variant = "check", ...props }) => /* @__PURE__ */ jsxs(Combobox.Item, {
|
|
367
|
+
const ComboboxItem = ({ ref, className, children, icon, indicator: variant = "check", locked, ...props }) => /* @__PURE__ */ jsxs(Combobox.Item, {
|
|
366
368
|
...props,
|
|
367
369
|
...use(VirtualRowContext),
|
|
368
370
|
ref,
|
|
369
371
|
"data-slot": "combobox-item",
|
|
370
|
-
|
|
372
|
+
"data-locked": locked || void 0,
|
|
373
|
+
className: cn("tw:group/combobox-item", "tw:relative", "tw:flex", "tw:flex-1", "tw:items-center", "tw:gap-2", "tw:py-2", "tw:px-2", "tw:group-data-[variant=default]/combobox-content:px-4", "tw:rounded-lg", "tw:group-data-[variant=default]/combobox-content:rounded-none", "tw:text-sm", "tw:select-none", "tw:cursor-default", "tw:outline-hidden", "tw:data-[highlighted]:bg-hover", "tw:group-data-[variant=default]/combobox-content:data-[highlighted]:bg-secondary", "tw:data-[highlighted]:text-hover-foreground", "tw:group-data-[variant=default]/combobox-content:data-[highlighted]:text-secondary-foreground", "tw:data-disabled:pointer-events-none", "tw:data-disabled:opacity-disabled", "tw:data-locked:opacity-disabled", "tw:[&_svg]:pointer-events-none", "tw:[&_svg]:shrink-0", "tw:[&_svg]:text-muted-foreground", "tw:[&_svg:not([class*='size-'])]:size-4", className),
|
|
371
374
|
children: [
|
|
372
375
|
variant !== "none" && /* @__PURE__ */ jsx(ComboboxItemIndicator, { variant }),
|
|
373
376
|
icon,
|
|
374
377
|
/* @__PURE__ */ jsx("span", {
|
|
375
|
-
|
|
378
|
+
"data-slot": "combobox-item-label",
|
|
379
|
+
className: "tw:min-w-0 tw:flex-1 tw:wrap-anywhere",
|
|
376
380
|
children
|
|
377
381
|
})
|
|
378
382
|
]
|
|
@@ -400,38 +404,39 @@ const ComboboxOpenButton = ({ disabled, isLoading }) => /* @__PURE__ */ jsx(Inpu
|
|
|
400
404
|
"aria-label": "Open combobox",
|
|
401
405
|
children: /* @__PURE__ */ jsx(Combobox.Trigger, { children: isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "tw:size-4 tw:animate-spin" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "tw:size-4" }) })
|
|
402
406
|
});
|
|
403
|
-
//#endregion
|
|
404
|
-
//#region src/components/Combobox/Group/ComboboxGroupHeader.tsx
|
|
405
|
-
/** Indent of a header's children (chevron + gap); the legacy variant pads its rows wider. */
|
|
406
|
-
const GROUP_CHILD_INDENT = "tw:pl-8 tw:group-data-[variant=default]/combobox-content:pl-10";
|
|
407
407
|
/**
|
|
408
408
|
* A group's own row, standing for the whole group.
|
|
409
409
|
*
|
|
410
410
|
* - Keyboard-navigable like any other row.
|
|
411
|
-
* - The chevron toggles by pointer
|
|
411
|
+
* - The chevron toggles by pointer, Cmd- or Ctrl-click toggles every group; its tooltip says so.
|
|
412
|
+
* - `ArrowRight` / `ArrowLeft` are handled by the owning control.
|
|
412
413
|
*/
|
|
413
|
-
const ComboboxGroupHeader = ({ value, children, expanded, onToggle, checked, indicator = "check", disabled }) => {
|
|
414
|
+
const ComboboxGroupHeader = ({ value, children, expanded, onToggle, checked, indicator = "check", disabled, locked }) => {
|
|
414
415
|
const toggleFromChevron = (event) => {
|
|
415
416
|
event.stopPropagation();
|
|
416
|
-
onToggle();
|
|
417
|
+
onToggle(isToggleAllClick(event), event.currentTarget);
|
|
417
418
|
};
|
|
418
419
|
return /* @__PURE__ */ jsx(ComboboxItem, {
|
|
419
420
|
value,
|
|
420
421
|
disabled,
|
|
422
|
+
locked,
|
|
421
423
|
"aria-description": expanded === void 0 ? void 0 : expanded ? "Expanded" : "Collapsed",
|
|
422
424
|
...checked !== void 0 && { "aria-selected": checked === true },
|
|
423
425
|
indicator: "none",
|
|
424
426
|
className: "tw:font-medium",
|
|
425
427
|
onClick: checked !== void 0 ? void 0 : (event) => {
|
|
426
428
|
event.preventBaseUIHandler();
|
|
427
|
-
onToggle();
|
|
429
|
+
onToggle(isToggleAllClick(event), event.currentTarget);
|
|
428
430
|
},
|
|
429
|
-
icon: /* @__PURE__ */ jsxs(Fragment$1, { children: [expanded !== void 0 && /* @__PURE__ */ jsx(
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
431
|
+
icon: /* @__PURE__ */ jsxs(Fragment$1, { children: [expanded !== void 0 && /* @__PURE__ */ jsx(ToggleAllTooltip, {
|
|
432
|
+
expanded,
|
|
433
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
434
|
+
"aria-hidden": true,
|
|
435
|
+
"data-slot": "combobox-group-toggle",
|
|
436
|
+
className: "tw:pointer-events-auto tw:-m-1 tw:inline-flex tw:shrink-0 tw:cursor-pointer tw:rounded tw:p-1 tw:transition-colors tw:hover:bg-foreground/10",
|
|
437
|
+
onClick: toggleFromChevron,
|
|
438
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { className: cn("tw:transition-transform", expanded && "tw:rotate-90") })
|
|
439
|
+
})
|
|
435
440
|
}), checked !== void 0 && /* @__PURE__ */ jsx(GroupIndicator, {
|
|
436
441
|
checked,
|
|
437
442
|
variant: indicator
|
|
@@ -516,7 +521,21 @@ const ComboboxLoadingEmpty = () => /* @__PURE__ */ jsxs("span", {
|
|
|
516
521
|
//#region src/components/Combobox/ComboboxVirtualList.tsx
|
|
517
522
|
/** Rows rendered past each edge of the viewport, so a fast scroll does not paint blank. */
|
|
518
523
|
const OVERSCAN = 12;
|
|
519
|
-
const
|
|
524
|
+
const isGroupLast = (row) => row.type === "item" && row.group !== void 0 && row.posInSet === row.setSize;
|
|
525
|
+
const kindOf = (row) => row.type === "label" ? "label" : `${row.padded ? "padded" : "plain"}${isGroupLast(row) ? "-last" : ""}`;
|
|
526
|
+
/** A row's React key: its group and its place in it, so a fold leaves other rows mounted. */
|
|
527
|
+
const placeOf = (row, index) => {
|
|
528
|
+
if (!row) return String(index);
|
|
529
|
+
if (row.type === "label") return `${row.group}:label`;
|
|
530
|
+
return `${row.group ?? "loose"}:${row.posInSet}`;
|
|
531
|
+
};
|
|
532
|
+
/**
|
|
533
|
+
* A row's key for the virtualizer, which keeps measured heights by it.
|
|
534
|
+
*
|
|
535
|
+
* - Folding one group leaves every other row's height in place.
|
|
536
|
+
* - A row that becomes its group's last is estimated afresh, its element kept.
|
|
537
|
+
*/
|
|
538
|
+
const keyOf = (row, index) => `${placeOf(row, index)}${row && isGroupLast(row) ? ":last" : ""}`;
|
|
520
539
|
/**
|
|
521
540
|
* Base UI's filtered entries as one row per option or group label, in list order.
|
|
522
541
|
*
|
|
@@ -601,11 +620,14 @@ const ComboboxVirtualList = ({ renderItem, renderGroupItem, groupToLabel, ref })
|
|
|
601
620
|
const [rem] = useState(() => Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 0);
|
|
602
621
|
const virtualizer = useVirtualizer({
|
|
603
622
|
count: rows.length,
|
|
623
|
+
getItemKey: (index) => keyOf(rows[index], index),
|
|
604
624
|
getScrollElement: () => listElement,
|
|
605
625
|
estimateSize: (index) => {
|
|
606
626
|
const row = rows[index];
|
|
607
627
|
const measured = sizesRef.current;
|
|
608
|
-
|
|
628
|
+
const kind = row && kindOf(row);
|
|
629
|
+
const lastKinds = kind?.endsWith("-last") ? [measured["plain-last"], measured["padded-last"]] : [];
|
|
630
|
+
return (kind && measured[kind]) ?? lastKinds.find((size) => size !== void 0) ?? measured.plain ?? measured.padded ?? rem;
|
|
609
631
|
},
|
|
610
632
|
measureElement: (element, entry, instance) => {
|
|
611
633
|
const size = measureElement(element, entry, instance);
|
|
@@ -645,7 +667,7 @@ const ComboboxVirtualList = ({ renderItem, renderGroupItem, groupToLabel, ref })
|
|
|
645
667
|
width: "100%",
|
|
646
668
|
transform: `translateY(${start - scrollMargin}px)`
|
|
647
669
|
});
|
|
648
|
-
const renderRow = ({
|
|
670
|
+
const renderRow = ({ index, start }) => {
|
|
649
671
|
const row = rows[index];
|
|
650
672
|
if (!row) return null;
|
|
651
673
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -653,6 +675,7 @@ const ComboboxVirtualList = ({ renderItem, renderGroupItem, groupToLabel, ref })
|
|
|
653
675
|
ref: virtualizer.measureElement,
|
|
654
676
|
className: row.padded ? "tw:pt-0.5" : void 0,
|
|
655
677
|
style: row.group === void 0 ? placeAt(start) : void 0,
|
|
678
|
+
"data-group-last": isGroupLast(row) ? "" : void 0,
|
|
656
679
|
children: row.type === "label" ? /* @__PURE__ */ jsx(ComboboxGroupLabel, { children: labels.get(row.group ?? "") }) : /* @__PURE__ */ jsx(VirtualRowContext, {
|
|
657
680
|
value: {
|
|
658
681
|
index: row.index,
|
|
@@ -661,7 +684,7 @@ const ComboboxVirtualList = ({ renderItem, renderGroupItem, groupToLabel, ref })
|
|
|
661
684
|
},
|
|
662
685
|
children: row.group === void 0 ? renderItem(row.item) : renderGroupItem(row.item)
|
|
663
686
|
})
|
|
664
|
-
},
|
|
687
|
+
}, placeOf(row, index));
|
|
665
688
|
};
|
|
666
689
|
return /* @__PURE__ */ jsx(ComboboxList, {
|
|
667
690
|
ref: attachList,
|
|
@@ -689,12 +712,17 @@ const ComboboxVirtualList = ({ renderItem, renderGroupItem, groupToLabel, ref })
|
|
|
689
712
|
};
|
|
690
713
|
//#endregion
|
|
691
714
|
//#region src/components/Combobox/ComboboxOptions.tsx
|
|
715
|
+
/** A group's items fade and slide in as it unfolds and out as it folds; nothing under reduced motion. */
|
|
716
|
+
const ITEM_MOTION = {
|
|
717
|
+
entering: "tw:motion-safe:animate-in tw:motion-safe:fade-in-0 tw:motion-safe:slide-in-from-top-1 tw:motion-safe:duration-150 tw:motion-safe:ease-out",
|
|
718
|
+
leaving: "tw:motion-safe:animate-out tw:motion-safe:fade-out-0 tw:motion-safe:slide-out-to-top-1 tw:motion-safe:duration-100 tw:motion-safe:ease-in tw:motion-safe:fill-mode-forwards"
|
|
719
|
+
};
|
|
692
720
|
/**
|
|
693
721
|
* What a combobox popup lists: every row, the empty slot, and the loading text in it.
|
|
694
722
|
*
|
|
695
723
|
* - The list is windowed while `virtualized`, fully rendered otherwise.
|
|
696
724
|
*/
|
|
697
|
-
const ComboboxOptions = ({ isLoading, empty, virtualized, listRef, groupHeaders, groupToLabel, indicator, itemToLabel, itemToIcon, itemToDisabled, createLabel, groupRowState }) => {
|
|
725
|
+
const ComboboxOptions = ({ isLoading, empty, virtualized, listRef, groupHeaders, groupToLabel, indicator, itemToLabel, itemToIcon, itemToDisabled, itemToLocked, createLabel, groupRowState }) => {
|
|
698
726
|
const renderItem = (item, className) => {
|
|
699
727
|
if (isSelectAllItem(item)) return /* @__PURE__ */ jsx(ComboboxItem, {
|
|
700
728
|
value: item,
|
|
@@ -711,21 +739,26 @@ const ComboboxOptions = ({ isLoading, empty, virtualized, listRef, groupHeaders,
|
|
|
711
739
|
indicator,
|
|
712
740
|
icon: itemToIcon(item),
|
|
713
741
|
disabled: itemToDisabled(item),
|
|
742
|
+
locked: itemToLocked?.(item),
|
|
714
743
|
className,
|
|
715
744
|
children: itemToLabel(item)
|
|
716
745
|
});
|
|
717
746
|
};
|
|
718
747
|
const renderGroupItem = (item) => {
|
|
719
748
|
const header = groupHeaders.headerOf(item);
|
|
720
|
-
if (!header)
|
|
749
|
+
if (!header) {
|
|
750
|
+
const motion = groupHeaders.motionOf(item);
|
|
751
|
+
return renderItem(item, cn(groupHeaders.collapsible && "tw:pl-8 tw:group-data-[variant=default]/combobox-content:pl-10", motion && ITEM_MOTION[motion]));
|
|
752
|
+
}
|
|
721
753
|
const state = groupRowState?.(item);
|
|
722
754
|
return /* @__PURE__ */ jsx(ComboboxGroupHeader, {
|
|
723
755
|
value: item,
|
|
724
756
|
expanded: groupHeaders.collapsible ? !header.collapsed : void 0,
|
|
725
|
-
onToggle: () => groupHeaders.toggle(header.index),
|
|
757
|
+
onToggle: (all, from) => all ? groupHeaders.setAllCollapsed(!header.collapsed, from) : groupHeaders.toggle(header.index, from),
|
|
726
758
|
checked: state?.checked,
|
|
727
759
|
indicator,
|
|
728
760
|
disabled: state?.disabled ?? false,
|
|
761
|
+
locked: state?.locked,
|
|
729
762
|
children: groupToLabel(header.group)
|
|
730
763
|
});
|
|
731
764
|
};
|
|
@@ -759,22 +792,114 @@ const ComboboxSeparator = ({ ref, className, ...props }) => /* @__PURE__ */ jsx(
|
|
|
759
792
|
*/
|
|
760
793
|
const useWithCreated = (list, created) => useMemo(() => created.length === 0 ? list : [...list, ...toEntries(list, created)], [list, created]);
|
|
761
794
|
//#endregion
|
|
795
|
+
//#region src/components/Combobox/groupFlip.ts
|
|
796
|
+
/** How long the groups under a fold take to slide to their new place. */
|
|
797
|
+
const SLIDE_MS = 150;
|
|
798
|
+
/** A capture no commit moved anything for in this long is dropped. */
|
|
799
|
+
const STALE_MS = 500;
|
|
800
|
+
const listOf = (from) => from.closest("[role=listbox]") ?? from.ownerDocument.getElementById(from.getAttribute("aria-controls") ?? "");
|
|
801
|
+
const topIn = (list, element) => element.getBoundingClientRect().top - list.getBoundingClientRect().top + list.scrollTop;
|
|
802
|
+
/**
|
|
803
|
+
* Slides a list's groups from where they sat before a fold to where it puts them.
|
|
804
|
+
*
|
|
805
|
+
* - `capture` records each group's place; the next commit that moves one plays the slide.
|
|
806
|
+
* - A group the windowed list only now renders slides by the move of the group above it.
|
|
807
|
+
* - The caller skips `capture` under reduced motion; nothing plays without Web Animations.
|
|
808
|
+
*/
|
|
809
|
+
const useGroupFlip = (enabled) => {
|
|
810
|
+
const captureRef = useRef(null);
|
|
811
|
+
const slidesRef = useRef(/* @__PURE__ */ new WeakMap());
|
|
812
|
+
const settledTop = (list, group) => {
|
|
813
|
+
const slide = slidesRef.current.get(group);
|
|
814
|
+
const progress = slide?.animation.effect?.getComputedTiming().progress;
|
|
815
|
+
const offset = slide && typeof progress === "number" ? slide.shift * (1 - progress) : 0;
|
|
816
|
+
return topIn(list, group) - offset;
|
|
817
|
+
};
|
|
818
|
+
useLayoutEffect(() => {
|
|
819
|
+
const capture = captureRef.current;
|
|
820
|
+
if (!capture) return;
|
|
821
|
+
if (performance.now() - capture.at > STALE_MS) {
|
|
822
|
+
captureRef.current = null;
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
const groups = [...capture.list.querySelectorAll("[role=group]")];
|
|
826
|
+
let lastShift = 0;
|
|
827
|
+
const shifts = groups.map((group) => {
|
|
828
|
+
const before = capture.tops.get(group);
|
|
829
|
+
const shift = before === void 0 ? lastShift : before - settledTop(capture.list, group);
|
|
830
|
+
lastShift = shift;
|
|
831
|
+
return shift;
|
|
832
|
+
});
|
|
833
|
+
if (shifts.every((shift) => Math.abs(shift) < .5)) return;
|
|
834
|
+
captureRef.current = null;
|
|
835
|
+
groups.forEach((group, index) => {
|
|
836
|
+
const shift = shifts[index] ?? 0;
|
|
837
|
+
slidesRef.current.get(group)?.animation.cancel();
|
|
838
|
+
if (Math.abs(shift) < .5) return;
|
|
839
|
+
const animation = group.animate([{ transform: `translateY(${shift}px)` }, { transform: "translateY(0)" }], {
|
|
840
|
+
duration: SLIDE_MS,
|
|
841
|
+
easing: "ease-out",
|
|
842
|
+
composite: "add"
|
|
843
|
+
});
|
|
844
|
+
slidesRef.current.set(group, {
|
|
845
|
+
animation,
|
|
846
|
+
shift
|
|
847
|
+
});
|
|
848
|
+
});
|
|
849
|
+
});
|
|
850
|
+
return {
|
|
851
|
+
/** Records where the groups of the list `from` belongs to sit now. */
|
|
852
|
+
capture: (from) => {
|
|
853
|
+
const list = from && listOf(from);
|
|
854
|
+
if (!enabled || !list || typeof list.animate !== "function") return;
|
|
855
|
+
const tops = /* @__PURE__ */ new Map();
|
|
856
|
+
for (const group of list.querySelectorAll("[role=group]")) tops.set(group, topIn(list, group));
|
|
857
|
+
captureRef.current = {
|
|
858
|
+
list,
|
|
859
|
+
tops,
|
|
860
|
+
at: performance.now()
|
|
861
|
+
};
|
|
862
|
+
} };
|
|
863
|
+
};
|
|
864
|
+
//#endregion
|
|
762
865
|
//#region src/components/Combobox/groupHeaders.ts
|
|
866
|
+
/** How long a folding group's items fade out before they leave the list. */
|
|
867
|
+
const FOLD_MS = 100;
|
|
868
|
+
/** How long an unfolding group's items animate in; their marker clears after it. */
|
|
869
|
+
const ENTER_MS = 150;
|
|
870
|
+
const NO_FOLDS = /* @__PURE__ */ new Set();
|
|
871
|
+
const hasMotion = () => typeof window.matchMedia === "function" && !window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
763
872
|
/**
|
|
764
873
|
* Gives each group a row (rendered with `ComboboxGroupHeader`) and collapses groups on request.
|
|
765
874
|
*
|
|
766
875
|
* - The row is the group's first item, so Base UI navigates, filters and presses it.
|
|
767
876
|
* - A collapsed group hands Base UI only its row: Base UI never filters an empty query.
|
|
768
|
-
* - A query
|
|
877
|
+
* - A query opens every group with a match; a fold made under it lasts until the query changes.
|
|
878
|
+
* - A row shows only while its group matches.
|
|
769
879
|
* - Collapse state is keyed by a group's position in `items`.
|
|
770
880
|
*/
|
|
771
|
-
const useGroupHeaders = ({ items, collapsible, selectable, query, matches, groupToValue, isItemEqualToValue }) => {
|
|
772
|
-
const [collapsedIndexes, setCollapsedIndexes] = useState(() => /* @__PURE__ */ new Set());
|
|
881
|
+
const useGroupHeaders = ({ items, collapsible, selectable, query, matches, groupToValue, isItemEqualToValue, startsCollapsed, startsOpen = false }) => {
|
|
882
|
+
const [collapsedIndexes, setCollapsedIndexes] = useState(() => startsOpen && collapsible && startsCollapsed && isGroupItems(items) ? new Set(items.flatMap((group, index) => startsCollapsed(group) ? [index] : [])) : /* @__PURE__ */ new Set());
|
|
883
|
+
const [searchFolds, setSearchFolds] = useState({
|
|
884
|
+
query: "",
|
|
885
|
+
indexes: /* @__PURE__ */ new Set()
|
|
886
|
+
});
|
|
887
|
+
/** The folds that apply now: those made without a query, or under this very query. */
|
|
888
|
+
const folded = query === "" ? collapsedIndexes : searchFolds.query === query ? searchFolds.indexes : NO_FOLDS;
|
|
889
|
+
const queryRef = useRef(query);
|
|
890
|
+
useLayoutEffect(() => {
|
|
891
|
+
queryRef.current = query;
|
|
892
|
+
}, [query]);
|
|
773
893
|
const highlightedRef = useRef(void 0);
|
|
894
|
+
/** The groups animating, and the query their fold belongs to. */
|
|
895
|
+
const [motion, setMotion] = useState(null);
|
|
896
|
+
const foldTimerRef = useRef(void 0);
|
|
897
|
+
useEffect(() => () => clearTimeout(foldTimerRef.current), []);
|
|
898
|
+
const flip = useGroupFlip(collapsible);
|
|
774
899
|
const enabled = (collapsible || selectable) && isGroupItems(items);
|
|
775
900
|
const headers = /* @__PURE__ */ new Map();
|
|
776
901
|
const listItems = !enabled ? items : items.map((group, index) => {
|
|
777
|
-
const collapsed = collapsible &&
|
|
902
|
+
const collapsed = collapsible && folded.has(index);
|
|
778
903
|
const matching = query === "" ? group.items : group.items.filter(matches);
|
|
779
904
|
const row = groupToValue ? groupToValue(group) : createGroupHeaderItem(index);
|
|
780
905
|
headers.set(row, {
|
|
@@ -788,11 +913,78 @@ const useGroupHeaders = ({ items, collapsible, selectable, query, matches, group
|
|
|
788
913
|
items: collapsed ? [row] : [row, ...group.items]
|
|
789
914
|
};
|
|
790
915
|
});
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
916
|
+
/**
|
|
917
|
+
* Folds or unfolds groups under `scope`, the query the toggle was made under.
|
|
918
|
+
*
|
|
919
|
+
* - A fold made without a query always lands.
|
|
920
|
+
* - A fold made under a query the input no longer holds is dropped: it would never show.
|
|
921
|
+
*/
|
|
922
|
+
const setCollapsed = (indexes, collapsed, scope = query) => {
|
|
923
|
+
const apply = (prev) => {
|
|
924
|
+
const next = new Set(prev);
|
|
925
|
+
for (const index of indexes) if (collapsed) next.add(index);
|
|
926
|
+
else next.delete(index);
|
|
927
|
+
return next.size === prev.size && [...next].every((index) => prev.has(index)) ? prev : next;
|
|
928
|
+
};
|
|
929
|
+
if (scope === "") setCollapsedIndexes(apply);
|
|
930
|
+
else if (scope === queryRef.current) setSearchFolds((prev) => {
|
|
931
|
+
const base = prev.query === scope ? prev.indexes : NO_FOLDS;
|
|
932
|
+
const next = apply(base);
|
|
933
|
+
return next === base && prev.query === scope ? prev : {
|
|
934
|
+
query: scope,
|
|
935
|
+
indexes: next
|
|
936
|
+
};
|
|
937
|
+
});
|
|
938
|
+
};
|
|
939
|
+
const endMotionAfter = (ms, then) => {
|
|
940
|
+
clearTimeout(foldTimerRef.current);
|
|
941
|
+
foldTimerRef.current = setTimeout(() => {
|
|
942
|
+
then?.();
|
|
943
|
+
setMotion(null);
|
|
944
|
+
}, ms);
|
|
945
|
+
};
|
|
946
|
+
const folding = motion?.folding ? motion.indexes : /* @__PURE__ */ new Set();
|
|
947
|
+
/** A group still fading out counts as folded. */
|
|
948
|
+
const isCollapsed = (index) => folded.has(index) || folding.has(index);
|
|
949
|
+
/**
|
|
950
|
+
* Unfolds groups with their items animating in, or fades them out, then folds them.
|
|
951
|
+
*
|
|
952
|
+
* - The groups under them slide to their new place.
|
|
953
|
+
* - Folds still fading out finish at once, except those this call unfolds again.
|
|
954
|
+
*/
|
|
955
|
+
const animate = (indexes, collapse, from) => {
|
|
956
|
+
clearTimeout(foldTimerRef.current);
|
|
957
|
+
const animated = hasMotion();
|
|
958
|
+
const finishing = [...folding].filter((index) => collapse || !indexes.includes(index));
|
|
959
|
+
const changing = indexes.filter((index) => isCollapsed(index) !== collapse);
|
|
960
|
+
if (animated && (finishing.length > 0 || changing.length > 0)) flip.capture(from);
|
|
961
|
+
if (motion) setCollapsed(finishing, true, motion.scope);
|
|
962
|
+
if (!animated || changing.length === 0) {
|
|
963
|
+
setCollapsed(changing, collapse);
|
|
964
|
+
setMotion(null);
|
|
965
|
+
return;
|
|
966
|
+
}
|
|
967
|
+
const scope = query;
|
|
968
|
+
setMotion({
|
|
969
|
+
indexes: new Set(changing),
|
|
970
|
+
folding: collapse,
|
|
971
|
+
scope
|
|
972
|
+
});
|
|
973
|
+
if (collapse) endMotionAfter(FOLD_MS, () => setCollapsed(changing, true, scope));
|
|
974
|
+
else {
|
|
975
|
+
setCollapsed(changing, false);
|
|
976
|
+
endMotionAfter(ENTER_MS);
|
|
977
|
+
}
|
|
978
|
+
};
|
|
979
|
+
/** Unfolds a folded group, folds an open one. */
|
|
980
|
+
const toggle = (index, from) => animate([index], !isCollapsed(index), from);
|
|
981
|
+
/** Folds or unfolds every group. */
|
|
982
|
+
const setAllCollapsed = (collapse, from) => {
|
|
983
|
+
if (!isGroupItems(items)) return;
|
|
984
|
+
animate(items.map((_, index) => index), collapse, from);
|
|
985
|
+
};
|
|
986
|
+
const groupIndexOf = /* @__PURE__ */ new Map();
|
|
987
|
+
if (motion && enabled && isGroupItems(items)) for (const index of motion.indexes) for (const item of items[index]?.items ?? []) groupIndexOf.set(item, index);
|
|
796
988
|
const headerOf = (item) => headers.get(item);
|
|
797
989
|
const highlightedHeader = () => {
|
|
798
990
|
const item = highlightedRef.current;
|
|
@@ -808,6 +1000,12 @@ const useGroupHeaders = ({ items, collapsible, selectable, query, matches, group
|
|
|
808
1000
|
collapsible,
|
|
809
1001
|
headerOf,
|
|
810
1002
|
toggle,
|
|
1003
|
+
setAllCollapsed,
|
|
1004
|
+
/** `entering` / `leaving` for an item of the group that last unfolded / is folding. */
|
|
1005
|
+
motionOf: (item) => {
|
|
1006
|
+
if (!motion || !groupIndexOf.has(item)) return void 0;
|
|
1007
|
+
return motion.folding ? "leaving" : "entering";
|
|
1008
|
+
},
|
|
811
1009
|
/** `filter` verdict for a group row (matches while its group does); `undefined` otherwise. */
|
|
812
1010
|
filterHeader: (item) => {
|
|
813
1011
|
const header = headerOf(item);
|
|
@@ -817,9 +1015,13 @@ const useGroupHeaders = ({ items, collapsible, selectable, query, matches, group
|
|
|
817
1015
|
onItemHighlighted: (item) => {
|
|
818
1016
|
highlightedRef.current = item;
|
|
819
1017
|
},
|
|
820
|
-
/** For the root's `onOpenChange`:
|
|
1018
|
+
/** For the root's `onOpenChange`: clears the highlight on close, folds `startsCollapsed` on open. */
|
|
821
1019
|
onOpenChange: (open) => {
|
|
822
1020
|
if (!open) highlightedRef.current = void 0;
|
|
1021
|
+
clearTimeout(foldTimerRef.current);
|
|
1022
|
+
if (motion?.folding) setCollapsed(motion.indexes, true, motion.scope);
|
|
1023
|
+
setMotion(null);
|
|
1024
|
+
if (open && collapsible && startsCollapsed && isGroupItems(items)) setCollapsedIndexes(new Set(items.flatMap((group, index) => startsCollapsed(group) ? [index] : [])));
|
|
823
1025
|
},
|
|
824
1026
|
/**
|
|
825
1027
|
* For the input's `onKeyDown`: `ArrowRight` / `ArrowLeft` expand / collapse the highlighted row.
|
|
@@ -832,7 +1034,7 @@ const useGroupHeaders = ({ items, collapsible, selectable, query, matches, group
|
|
|
832
1034
|
if (!header) return;
|
|
833
1035
|
event.preventDefault();
|
|
834
1036
|
event.preventBaseUIHandler();
|
|
835
|
-
if (header.
|
|
1037
|
+
if (isCollapsed(header.index) === (event.key === "ArrowRight")) toggle(header.index, event.currentTarget);
|
|
836
1038
|
}
|
|
837
1039
|
};
|
|
838
1040
|
};
|
|
@@ -1078,4 +1280,4 @@ const filterByWords = (item, query, itemToString) => matchByWords(itemToString?.
|
|
|
1078
1280
|
//#endregion
|
|
1079
1281
|
export { BLANK_VALUES, Combobox$1 as Combobox, ComboboxClearButton, ComboboxOpenButton, ComboboxOptions, createCreatableItem, defaultGroupToLabel, defaultItemToDisabled, defaultItemToIcon, defaultQueryToCreateLabel, defaultRowLabel, defaultToCreateValue, filterByWords, flatItems, isCreatableItem, isGroupHeaderItem, isSelectAllItem, matchByWords, namedLabel, sanitizeTypedInput, selectAllItem, toEntries, toLabel, useCreatableStringValue, useGroupHeaders, useItemEquality, useQueryReporter, useVirtualList, useWithCreated, withBlankValues };
|
|
1080
1282
|
|
|
1081
|
-
//# sourceMappingURL=Combobox-
|
|
1283
|
+
//# sourceMappingURL=Combobox-CEesMe2M.js.map
|