@overmap-ai/blocks 1.0.40 → 1.0.41
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/dist/ButtonGroup/ButtonGroup.d.ts +1 -2
- package/dist/ButtonGroup/context.d.ts +2 -7
- package/dist/CheckboxGroup/context.d.ts +2 -6
- package/dist/CheckedIndicator/CheckedIndicator.d.ts +4 -3
- package/dist/CommandMenu/CheckboxIndicator.d.ts +2 -4
- package/dist/CommandMenu/CheckboxItem.d.ts +1 -1
- package/dist/CommandMenu/SelectedIndicator.d.ts +2 -3
- package/dist/CommandMenu/context.d.ts +2 -3
- package/dist/DayPicker/typings.d.ts +1 -1
- package/dist/Dialog/typings.d.ts +2 -2
- package/dist/Heading/cva.d.ts +1 -1
- package/dist/HoverUtility/HoverUtility.d.ts +2 -2
- package/dist/Layout/SlideOutClose.d.ts +5 -0
- package/dist/Layout/SlideOutContent.d.ts +6 -0
- package/dist/Layout/SlideOutHandle.d.ts +5 -0
- package/dist/Layout/SlideOutOverlay.d.ts +2 -5
- package/dist/Layout/SlideOutRoot.d.ts +10 -0
- package/dist/Layout/SlideOutTrigger.d.ts +2 -6
- package/dist/Layout/SlideOutViewport.d.ts +5 -0
- package/dist/Layout/context.d.ts +1 -3
- package/dist/Layout/hooks.d.ts +1 -0
- package/dist/Layout/index.d.ts +11 -3
- package/dist/Layout/typings.d.ts +3 -0
- package/dist/Link/cva.d.ts +1 -1
- package/dist/LuIcon/LuIcon.d.ts +4 -6
- package/dist/LuIcon/index.d.ts +1 -1
- package/dist/LuIcon/typings.d.ts +2 -2
- package/dist/Menu/{CheckboxItem/CheckboxItem.d.ts → CheckboxItem.d.ts} +1 -1
- package/dist/Menu/{CheckboxItemIndicator/CheckboxItemIndicator.d.ts → CheckboxItemIndicator.d.ts} +1 -1
- package/dist/Menu/{ClickTrigger/ClickTrigger.d.ts → ClickTrigger.d.ts} +1 -1
- package/dist/Menu/{Content/Content.d.ts → Content.d.ts} +1 -1
- package/dist/Menu/{ContextTrigger/ContextTrigger.d.ts → ContextTrigger.d.ts} +1 -1
- package/dist/Menu/{Group/Group.d.ts → Group.d.ts} +1 -1
- package/dist/Menu/{Input/Field.d.ts → InputField.d.ts} +1 -1
- package/dist/Menu/{Input/Root.d.ts → InputRoot.d.ts} +1 -1
- package/dist/Menu/{Input/Slot.d.ts → InputSlot.d.ts} +1 -1
- package/dist/Menu/{Item/Item.d.ts → Item.d.ts} +1 -1
- package/dist/Menu/{MultiSelectGroup/MultiSelectGroup.d.ts → MultiSelectGroup.d.ts} +1 -1
- package/dist/Menu/{MultiSelectItem/MultiSelectItem.d.ts → MultiSelectItem.d.ts} +1 -1
- package/dist/Menu/PageContent.d.ts +2 -0
- package/dist/Menu/{PageTrigger/PageTrigger.d.ts → PageTrigger.d.ts} +1 -1
- package/dist/Menu/{Pages/Pages.d.ts → Pages.d.ts} +1 -1
- package/dist/Menu/{root/Root.d.ts → Root.d.ts} +1 -1
- package/dist/Menu/{Scroll/Scroll.d.ts → Scroll.d.ts} +1 -1
- package/dist/Menu/{SelectAll/SelectAllItem.d.ts → SelectAllItem.d.ts} +1 -1
- package/dist/Menu/{SelectGroup/SelectGroup.d.ts → SelectGroup.d.ts} +1 -1
- package/dist/Menu/{SelectItem/SelectItem.d.ts → SelectItem.d.ts} +1 -1
- package/dist/Menu/SelectedIndicator.d.ts +4 -0
- package/dist/Menu/{Separator/Separator.d.ts → Separator.d.ts} +1 -1
- package/dist/Menu/{Sub/Sub.d.ts → Sub.d.ts} +1 -1
- package/dist/Menu/{SubContent/SubContent.d.ts → SubContent.d.ts} +1 -1
- package/dist/Menu/{SubTrigger/SubTrigger.d.ts → SubTrigger.d.ts} +1 -1
- package/dist/Menu/{VirtualTrigger/VirtualTrigger.d.ts → VirtualTrigger.d.ts} +1 -1
- package/dist/Menu/index.d.ts +9 -7
- package/dist/Menu/{Content/context.d.ts → menuContentContext.d.ts} +2 -2
- package/dist/Menu/{root/context.d.ts → rootContext.d.ts} +1 -1
- package/dist/Menu/{Sub/context.d.ts → subContentContext.d.ts} +1 -1
- package/dist/Menu/typings.d.ts +1 -1
- package/dist/Menu/utils.d.ts +0 -6
- package/dist/MenuV2/CheckboxItem.d.ts +6 -0
- package/dist/MenuV2/CheckboxItemIndicator.d.ts +3 -0
- package/dist/MenuV2/Group.d.ts +4 -0
- package/dist/MenuV2/GroupLabel.d.ts +4 -0
- package/dist/MenuV2/Item.d.ts +6 -0
- package/dist/MenuV2/MultiSelectAllItem.d.ts +4 -0
- package/dist/MenuV2/MultiSelectGroup.d.ts +5 -0
- package/dist/MenuV2/MultiSelectItem.d.ts +5 -0
- package/dist/MenuV2/Page.d.ts +5 -0
- package/dist/MenuV2/PageTriggerItem.d.ts +5 -0
- package/dist/MenuV2/Pages.d.ts +7 -0
- package/dist/MenuV2/Root.d.ts +6 -0
- package/dist/MenuV2/SelectGroup.d.ts +4 -0
- package/dist/MenuV2/SelectItem.d.ts +5 -0
- package/dist/MenuV2/SelectedIndicator.d.ts +3 -0
- package/dist/MenuV2/Separator.d.ts +5 -0
- package/dist/MenuV2/constants.d.ts +9 -0
- package/dist/MenuV2/context.d.ts +17 -0
- package/dist/MenuV2/cva.d.ts +14 -0
- package/dist/MenuV2/index.d.ts +36 -0
- package/dist/MenuV2/typings.d.ts +9 -0
- package/dist/MenuV2/utils.d.ts +1 -0
- package/dist/OneTimePasswordField/context.d.ts +1 -1
- package/dist/RadioCards/Item.d.ts +2 -2
- package/dist/RadioCards/Root.d.ts +2 -2
- package/dist/SegmentedControl/context.d.ts +1 -1
- package/dist/SelectContext/typings.d.ts +3 -0
- package/dist/SelectedIndicator/SelectedIndicator.d.ts +5 -0
- package/dist/{Menu/SelectedIndicator → SelectedIndicator}/context.d.ts +0 -1
- package/dist/SelectedIndicator/index.d.ts +2 -0
- package/dist/SlideOut/Close.d.ts +4 -0
- package/dist/SlideOut/Content.d.ts +11 -0
- package/dist/SlideOut/Handle.d.ts +5 -0
- package/dist/SlideOut/Overlay.d.ts +4 -0
- package/dist/SlideOut/Root.d.ts +9 -0
- package/dist/SlideOut/Trigger.d.ts +4 -0
- package/dist/SlideOut/Viewport.d.ts +4 -0
- package/dist/SlideOut/constants.d.ts +1 -0
- package/dist/SlideOut/context.d.ts +17 -0
- package/dist/SlideOut/index.d.ts +18 -1
- package/dist/SlideOut/typings.d.ts +2 -0
- package/dist/Slider/Slider.d.ts +2 -2
- package/dist/Text/cva.d.ts +1 -1
- package/dist/Toast/CustomToast.d.ts +6 -0
- package/dist/Toast/Toaster.d.ts +4 -0
- package/dist/Toast/index.d.ts +3 -4
- package/dist/Toast/toast.d.ts +12 -0
- package/dist/Toast/typings.d.ts +5 -52
- package/dist/blocks.js +1720 -1212
- package/dist/blocks.js.map +1 -1
- package/dist/blocks.umd.cjs +2042 -1534
- package/dist/blocks.umd.cjs.map +1 -1
- package/dist/hooks.d.ts +21 -0
- package/dist/index.d.ts +3 -2
- package/dist/typings.d.ts +0 -5
- package/dist/utils.d.ts +7 -30
- package/package.json +19 -45
- package/dist/CheckboxGroup/cva.d.ts +0 -0
- package/dist/CheckboxGroup/utils.d.ts +0 -1
- package/dist/CollapsibleTree/CollapsibleTree.d.ts +0 -5
- package/dist/CollapsibleTree/context.d.ts +0 -11
- package/dist/CollapsibleTree/index.d.ts +0 -2
- package/dist/CollapsibleTree/typings.d.ts +0 -58
- package/dist/CommandMenu/utils.d.ts +0 -4
- package/dist/Layout/SlideOut.d.ts +0 -20
- package/dist/Menu/ClickTrigger/index.d.ts +0 -1
- package/dist/Menu/Content/index.d.ts +0 -2
- package/dist/Menu/ContextTrigger/index.d.ts +0 -1
- package/dist/Menu/Group/index.d.ts +0 -1
- package/dist/Menu/Input/index.d.ts +0 -3
- package/dist/Menu/Item/index.d.ts +0 -1
- package/dist/Menu/Label/index.d.ts +0 -1
- package/dist/Menu/MultiSelectGroup/index.d.ts +0 -1
- package/dist/Menu/MultiSelectItem/index.d.ts +0 -1
- package/dist/Menu/PageContent/PageContent.d.ts +0 -3
- package/dist/Menu/PageContent/index.d.ts +0 -1
- package/dist/Menu/PageTrigger/index.d.ts +0 -1
- package/dist/Menu/Pages/index.d.ts +0 -2
- package/dist/Menu/SelectAll/index.d.ts +0 -1
- package/dist/Menu/SelectGroup/index.d.ts +0 -1
- package/dist/Menu/SelectItem/index.d.ts +0 -1
- package/dist/Menu/SelectedIndicator/SelectedIndicator.d.ts +0 -4
- package/dist/Menu/SelectedIndicator/index.d.ts +0 -2
- package/dist/Menu/Separator/index.d.ts +0 -1
- package/dist/Menu/Sub/index.d.ts +0 -2
- package/dist/Menu/SubContent/index.d.ts +0 -1
- package/dist/Menu/SubTrigger/index.d.ts +0 -1
- package/dist/Menu/VirtualTrigger/index.d.ts +0 -1
- package/dist/Menu/root/index.d.ts +0 -2
- package/dist/SlideOut/SlideOut.d.ts +0 -50
- package/dist/Toast/Toast.d.ts +0 -17
- package/dist/Toast/ToastContext.d.ts +0 -3
- package/dist/Toast/ToastProvider.d.ts +0 -13
- package/dist/Toast/cva.d.ts +0 -4
- /package/dist/Menu/{Label/Label.d.ts → Label.d.ts} +0 -0
- /package/dist/Menu/{Pages/context.d.ts → menuPagesContext.d.ts} +0 -0
package/dist/blocks.js
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import * as RadixAlertDialog from "@radix-ui/react-alert-dialog";
|
|
2
|
-
import { jsx, jsxs
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cva, cx } from "class-variance-authority";
|
|
4
|
-
import
|
|
5
|
-
import React__default, { createContext, useContext, memo, useMemo, useState, useCallback, useEffect, useLayoutEffect, use, useRef } from "react";
|
|
4
|
+
import { createContext, useContext, memo, useMemo, useState, useCallback, useRef, useEffect, useId, useLayoutEffect, use } from "react";
|
|
6
5
|
import * as RadixAvatar from "@radix-ui/react-avatar";
|
|
7
6
|
import * as RadixCheckbox from "@radix-ui/react-checkbox";
|
|
8
7
|
import { useMediaQuery } from "react-responsive";
|
|
9
|
-
import * as RadixPrimitiveCollapsible from "@radix-ui/react-collapsible";
|
|
10
8
|
import { CommandItem, CommandRoot, CommandEmpty, CommandGroup, CommandInput, useCommandState, CommandList, CommandSeparator } from "cmdk";
|
|
11
9
|
import * as RadixDialog from "@radix-ui/react-dialog";
|
|
12
10
|
import { DialogPortal, DialogContent as DialogContent$1, DialogTitle, DialogDescription, DialogOverlay as DialogOverlay$1, DialogTrigger } from "@radix-ui/react-dialog";
|
|
13
11
|
import { DayPicker as DayPicker$1 } from "react-day-picker";
|
|
14
|
-
import {
|
|
12
|
+
import { ChevronRight, ChevronLeft, ChevronDown, ChevronUp, AlertTriangle, RotateCcw, X, CircleAlertIcon, TriangleAlertIcon, InfoIcon, Check } from "lucide-react";
|
|
15
13
|
import * as RadixHoverCard from "@radix-ui/react-hover-card";
|
|
14
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
16
15
|
import { CSSTransition } from "react-transition-group";
|
|
16
|
+
import "react-transition-group/CSSTransition";
|
|
17
17
|
import ReactDOM from "react-dom";
|
|
18
|
-
import {
|
|
19
|
-
import { useFloatingNodeId, useFloating, offset, size, flip, shift, hide, autoUpdate, useRole, useDismiss, useClick, useListNavigation, useInteractions, FloatingTree, FloatingNode, FloatingPortal, FloatingOverlay, FloatingFocusManager, FloatingList, useHover, safePolygon, useListItem, useMergeRefs } from "@floating-ui/react";
|
|
18
|
+
import { useListItem, useMergeRefs, FloatingNode, FloatingPortal, FloatingOverlay, FloatingFocusManager, FloatingList, useFloatingNodeId, useFloating, offset, size, flip, shift, hide, autoUpdate, useRole, useDismiss, useClick, useListNavigation, useInteractions, FloatingTree, useHover, safePolygon } from "@floating-ui/react";
|
|
20
19
|
import * as RadixSeparator from "@radix-ui/react-separator";
|
|
21
20
|
import * as RadixOneTimePasswordField from "@radix-ui/react-one-time-password-field";
|
|
22
21
|
import { useErrorBoundary, ErrorBoundary } from "react-error-boundary";
|
|
@@ -27,8 +26,7 @@ import * as RadixToggleGroup from "@radix-ui/react-toggle-group";
|
|
|
27
26
|
import * as RadixTabs from "@radix-ui/react-tabs";
|
|
28
27
|
import * as RadixSlider from "@radix-ui/react-slider";
|
|
29
28
|
import * as RadixSwitch from "@radix-ui/react-switch";
|
|
30
|
-
import
|
|
31
|
-
import { ToastProvider as ToastProvider$1, ToastViewport } from "@radix-ui/react-toast";
|
|
29
|
+
import { toast as toast$1, Toaster as Toaster$1 } from "sonner";
|
|
32
30
|
import * as Toggle from "@radix-ui/react-toggle";
|
|
33
31
|
import * as RadixTooltip from "@radix-ui/react-tooltip";
|
|
34
32
|
const floating = cva(
|
|
@@ -788,82 +786,6 @@ const Checkbox = {
|
|
|
788
786
|
};
|
|
789
787
|
const SelectContext = createContext({});
|
|
790
788
|
const MultiSelectContext = createContext({});
|
|
791
|
-
const usePassiveLayoutEffect = React__default[typeof document !== "undefined" && document.createElement !== void 0 ? "useLayoutEffect" : "useEffect"];
|
|
792
|
-
const useLatest = (current) => {
|
|
793
|
-
const storedValue = React.useRef(current);
|
|
794
|
-
React.useEffect(() => {
|
|
795
|
-
storedValue.current = current;
|
|
796
|
-
});
|
|
797
|
-
return storedValue;
|
|
798
|
-
};
|
|
799
|
-
function _ref() {
|
|
800
|
-
}
|
|
801
|
-
function useResizeObserver(target, callback, options = {}) {
|
|
802
|
-
const resizeObserver = getResizeObserver(options.polyfill);
|
|
803
|
-
const storedCallback = useLatest(callback);
|
|
804
|
-
usePassiveLayoutEffect(() => {
|
|
805
|
-
let didUnsubscribe = false;
|
|
806
|
-
const targetEl = target && "current" in target ? target.current : target;
|
|
807
|
-
if (!targetEl) return _ref;
|
|
808
|
-
function cb(entry, observer) {
|
|
809
|
-
if (didUnsubscribe) return;
|
|
810
|
-
storedCallback.current(entry, observer);
|
|
811
|
-
}
|
|
812
|
-
resizeObserver.subscribe(targetEl, cb);
|
|
813
|
-
return () => {
|
|
814
|
-
didUnsubscribe = true;
|
|
815
|
-
resizeObserver.unsubscribe(targetEl, cb);
|
|
816
|
-
};
|
|
817
|
-
}, [target, resizeObserver, storedCallback]);
|
|
818
|
-
return resizeObserver.observer;
|
|
819
|
-
}
|
|
820
|
-
function createResizeObserver(polyfill) {
|
|
821
|
-
let ticking = false;
|
|
822
|
-
let allEntries = [];
|
|
823
|
-
const callbacks = /* @__PURE__ */ new Map();
|
|
824
|
-
const observer = new (polyfill || window.ResizeObserver)((entries, obs) => {
|
|
825
|
-
allEntries = allEntries.concat(entries);
|
|
826
|
-
function _ref2() {
|
|
827
|
-
const triggered = /* @__PURE__ */ new Set();
|
|
828
|
-
for (let i = 0; i < allEntries.length; i++) {
|
|
829
|
-
if (triggered.has(allEntries[i].target)) continue;
|
|
830
|
-
triggered.add(allEntries[i].target);
|
|
831
|
-
const cbs = callbacks.get(allEntries[i].target);
|
|
832
|
-
cbs === null || cbs === void 0 ? void 0 : cbs.forEach((cb) => cb(allEntries[i], obs));
|
|
833
|
-
}
|
|
834
|
-
allEntries = [];
|
|
835
|
-
ticking = false;
|
|
836
|
-
}
|
|
837
|
-
if (!ticking) {
|
|
838
|
-
window.requestAnimationFrame(_ref2);
|
|
839
|
-
}
|
|
840
|
-
ticking = true;
|
|
841
|
-
});
|
|
842
|
-
return {
|
|
843
|
-
observer,
|
|
844
|
-
subscribe(target, callback) {
|
|
845
|
-
var _callbacks$get;
|
|
846
|
-
observer.observe(target);
|
|
847
|
-
const cbs = (_callbacks$get = callbacks.get(target)) !== null && _callbacks$get !== void 0 ? _callbacks$get : [];
|
|
848
|
-
cbs.push(callback);
|
|
849
|
-
callbacks.set(target, cbs);
|
|
850
|
-
},
|
|
851
|
-
unsubscribe(target, callback) {
|
|
852
|
-
var _callbacks$get2;
|
|
853
|
-
const cbs = (_callbacks$get2 = callbacks.get(target)) !== null && _callbacks$get2 !== void 0 ? _callbacks$get2 : [];
|
|
854
|
-
if (cbs.length === 1) {
|
|
855
|
-
observer.unobserve(target);
|
|
856
|
-
callbacks.delete(target);
|
|
857
|
-
return;
|
|
858
|
-
}
|
|
859
|
-
const cbIndex = cbs.indexOf(callback);
|
|
860
|
-
if (cbIndex !== -1) cbs.splice(cbIndex, 1);
|
|
861
|
-
callbacks.set(target, cbs);
|
|
862
|
-
}
|
|
863
|
-
};
|
|
864
|
-
}
|
|
865
|
-
let _resizeObserver;
|
|
866
|
-
const getResizeObserver = (polyfill) => !_resizeObserver ? _resizeObserver = createResizeObserver(polyfill) : _resizeObserver;
|
|
867
789
|
const useViewportSize = (props) => {
|
|
868
790
|
const { xs: xsProps, sm: smProps, md: mdProps, lg: lgProps, xl: xlProps } = props;
|
|
869
791
|
const [prevSize, setPrevSize] = useState("initial");
|
|
@@ -881,33 +803,14 @@ const useViewportSize = (props) => {
|
|
|
881
803
|
}, [lg, md, sm, xl, xs]);
|
|
882
804
|
return { size: size2, prevSize, xs, sm, md, lg, xl };
|
|
883
805
|
};
|
|
884
|
-
|
|
885
|
-
return useCallback((event) => {
|
|
886
|
-
event.stopPropagation();
|
|
887
|
-
}, []);
|
|
888
|
-
};
|
|
889
|
-
function useTextFilter(values, filterFunction) {
|
|
806
|
+
function useTextFilter(items, filterFunction) {
|
|
890
807
|
const [filteredOptions, setFilteredOptions] = useState([]);
|
|
891
808
|
const [filterValue, setFilterValue] = useState("");
|
|
892
809
|
useEffect(() => {
|
|
893
|
-
setFilteredOptions(
|
|
894
|
-
}, [filterFunction, filterValue,
|
|
810
|
+
setFilteredOptions(items.filter((value) => filterFunction(value, filterValue)));
|
|
811
|
+
}, [filterFunction, filterValue, items]);
|
|
895
812
|
return [filteredOptions, filterValue, setFilterValue];
|
|
896
813
|
}
|
|
897
|
-
const useSize = (target) => {
|
|
898
|
-
const [size2, setSize] = useState();
|
|
899
|
-
useLayoutEffect(() => {
|
|
900
|
-
var _a;
|
|
901
|
-
setSize((_a = target.current) == null ? void 0 : _a.getBoundingClientRect());
|
|
902
|
-
}, [target]);
|
|
903
|
-
const handleResize = useCallback((entry) => {
|
|
904
|
-
const rect = entry.contentRect;
|
|
905
|
-
setSize(rect);
|
|
906
|
-
}, []);
|
|
907
|
-
useResizeObserver(target, handleResize);
|
|
908
|
-
return size2;
|
|
909
|
-
};
|
|
910
|
-
const genericMemo = memo;
|
|
911
814
|
function useControlledState(initialState, state, setState) {
|
|
912
815
|
const [uncontrolledState, setUncontrolledState] = useState(initialState);
|
|
913
816
|
const handleStateChange = useCallback(
|
|
@@ -924,26 +827,39 @@ function useControlledState(initialState, state, setState) {
|
|
|
924
827
|
}, [state]);
|
|
925
828
|
return [state ?? uncontrolledState, handleStateChange];
|
|
926
829
|
}
|
|
830
|
+
function useFallbackId(id) {
|
|
831
|
+
const fallbackId = useId();
|
|
832
|
+
return id ?? fallbackId;
|
|
833
|
+
}
|
|
834
|
+
function useLatest(value) {
|
|
835
|
+
const ref = useRef(value);
|
|
836
|
+
ref.current = value;
|
|
837
|
+
return ref;
|
|
838
|
+
}
|
|
839
|
+
const genericMemo = memo;
|
|
927
840
|
function mergeRefs(refs) {
|
|
928
841
|
return (value) => {
|
|
929
|
-
const cleanups = refs.reduce(
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
842
|
+
const cleanups = refs.reduce(
|
|
843
|
+
(cleanups2, ref) => {
|
|
844
|
+
if (typeof ref === "function") {
|
|
845
|
+
const cleanup = ref(value);
|
|
846
|
+
if (typeof cleanup === "function") {
|
|
847
|
+
cleanups2.push(cleanup);
|
|
848
|
+
} else {
|
|
849
|
+
cleanups2.push(() => {
|
|
850
|
+
ref(null);
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
} else if (ref != null) {
|
|
854
|
+
ref.current = value;
|
|
935
855
|
cleanups2.push(() => {
|
|
936
|
-
ref
|
|
856
|
+
ref.current = null;
|
|
937
857
|
});
|
|
938
858
|
}
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
});
|
|
944
|
-
}
|
|
945
|
-
return cleanups2;
|
|
946
|
-
}, []);
|
|
859
|
+
return cleanups2;
|
|
860
|
+
},
|
|
861
|
+
[]
|
|
862
|
+
);
|
|
947
863
|
return () => {
|
|
948
864
|
cleanups.forEach((cleanup) => {
|
|
949
865
|
cleanup();
|
|
@@ -954,10 +870,30 @@ function mergeRefs(refs) {
|
|
|
954
870
|
const stopPropagation = (e) => {
|
|
955
871
|
e.stopPropagation();
|
|
956
872
|
};
|
|
873
|
+
function getSelectedState(selected) {
|
|
874
|
+
return selected ? "selected" : "unselected";
|
|
875
|
+
}
|
|
876
|
+
function getCheckedState(checked) {
|
|
877
|
+
return checked === true ? "checked" : checked === false ? "unchecked" : "indeterminate";
|
|
878
|
+
}
|
|
879
|
+
function getActiveState(active) {
|
|
880
|
+
return active ? "active" : "inactive";
|
|
881
|
+
}
|
|
882
|
+
function getBooleanState(value) {
|
|
883
|
+
return value ? "true" : "false";
|
|
884
|
+
}
|
|
885
|
+
function getOpenState(open) {
|
|
886
|
+
return open ? "open" : "closed";
|
|
887
|
+
}
|
|
957
888
|
const MultiSelectProvider = genericMemo(function MultiSelectProvider2(props) {
|
|
958
|
-
const { children, defaultValues, values: controlledValues, onValuesChange } = props;
|
|
889
|
+
const { children, defaultValues, values: controlledValues, onValuesChange, equalityFn } = props;
|
|
890
|
+
const equalityFnRef = useLatest(equalityFn);
|
|
959
891
|
const [itemValueMapping, setItemValueMapping] = useState(/* @__PURE__ */ new Set());
|
|
960
892
|
const [values, setValues] = useControlledState(defaultValues ?? [], controlledValues, onValuesChange);
|
|
893
|
+
const isValueIncluded = useCallback(
|
|
894
|
+
(value, arr) => equalityFnRef.current ? arr.some((v) => equalityFnRef.current(v, value)) : arr.includes(value),
|
|
895
|
+
[equalityFnRef]
|
|
896
|
+
);
|
|
961
897
|
const registerValue = useCallback((value) => {
|
|
962
898
|
setItemValueMapping((prev) => {
|
|
963
899
|
const newSet = new Set(prev);
|
|
@@ -972,23 +908,25 @@ const MultiSelectProvider = genericMemo(function MultiSelectProvider2(props) {
|
|
|
972
908
|
});
|
|
973
909
|
};
|
|
974
910
|
}, []);
|
|
975
|
-
const selected = useCallback((value) =>
|
|
911
|
+
const selected = useCallback((value) => isValueIncluded(value, values), [isValueIncluded, values]);
|
|
976
912
|
const selectValue = useCallback(
|
|
977
913
|
(value) => {
|
|
978
914
|
if (selected(value)) {
|
|
979
|
-
setValues(
|
|
915
|
+
setValues(
|
|
916
|
+
values.filter((v) => equalityFnRef.current ? !equalityFnRef.current(v, value) : v !== value)
|
|
917
|
+
);
|
|
980
918
|
} else {
|
|
981
919
|
setValues([...values, value]);
|
|
982
920
|
}
|
|
983
921
|
},
|
|
984
|
-
[selected, setValues, values]
|
|
922
|
+
[equalityFnRef, selected, setValues, values]
|
|
985
923
|
);
|
|
986
924
|
const allSelected = useMemo(() => {
|
|
987
|
-
return Array.from(itemValueMapping.values()).every((value) =>
|
|
988
|
-
}, [itemValueMapping, values]);
|
|
925
|
+
return Array.from(itemValueMapping.values()).every((value) => isValueIncluded(value, values));
|
|
926
|
+
}, [isValueIncluded, itemValueMapping, values]);
|
|
989
927
|
const someSelected = useMemo(() => {
|
|
990
|
-
return Array.from(itemValueMapping.values()).some((value) =>
|
|
991
|
-
}, [itemValueMapping, values]);
|
|
928
|
+
return Array.from(itemValueMapping.values()).some((value) => isValueIncluded(value, values));
|
|
929
|
+
}, [isValueIncluded, itemValueMapping, values]);
|
|
992
930
|
const toggleSelectAll = useCallback(() => {
|
|
993
931
|
if (allSelected) {
|
|
994
932
|
setValues([]);
|
|
@@ -1003,9 +941,13 @@ const MultiSelectProvider = genericMemo(function MultiSelectProvider2(props) {
|
|
|
1003
941
|
return /* @__PURE__ */ jsx(MultiSelectContext, { value: contextValue, children });
|
|
1004
942
|
});
|
|
1005
943
|
const SingleSelectRequiredProvider = genericMemo(function SingleSelectRequiredProvider2(props) {
|
|
1006
|
-
const { children, defaultValue, value, onValueChange } = props;
|
|
944
|
+
const { children, defaultValue, value, onValueChange, equalityFn } = props;
|
|
945
|
+
const equalityFnRef = useLatest(equalityFn);
|
|
1007
946
|
const [controlledValue, setControlledValue] = useControlledState(defaultValue, value, onValueChange);
|
|
1008
|
-
const selected = useCallback(
|
|
947
|
+
const selected = useCallback(
|
|
948
|
+
(v) => equalityFnRef.current ? equalityFnRef.current(v, controlledValue) : v === controlledValue,
|
|
949
|
+
[controlledValue, equalityFnRef]
|
|
950
|
+
);
|
|
1009
951
|
const selectValue = useCallback(
|
|
1010
952
|
(v) => {
|
|
1011
953
|
if (selected(v)) return;
|
|
@@ -1017,9 +959,13 @@ const SingleSelectRequiredProvider = genericMemo(function SingleSelectRequiredPr
|
|
|
1017
959
|
return /* @__PURE__ */ jsx(SelectContext, { value: contextValue, children });
|
|
1018
960
|
});
|
|
1019
961
|
const SingleSelectNotRequiredProvider = genericMemo(function SingleSelectNotRequiredProvider2(props) {
|
|
1020
|
-
const { children, defaultValue = void 0, value: controlledValue, onValueChange } = props;
|
|
962
|
+
const { children, defaultValue = void 0, value: controlledValue, onValueChange, equalityFn } = props;
|
|
963
|
+
const equalityFnRef = useLatest(equalityFn);
|
|
1021
964
|
const [value, setValue] = useControlledState(defaultValue, controlledValue, onValueChange);
|
|
1022
|
-
const selected = useCallback(
|
|
965
|
+
const selected = useCallback(
|
|
966
|
+
(v) => value !== void 0 && (equalityFnRef.current ? equalityFnRef.current(v, value) : v === value),
|
|
967
|
+
[value, equalityFnRef]
|
|
968
|
+
);
|
|
1023
969
|
const selectValue = useCallback(
|
|
1024
970
|
(v) => {
|
|
1025
971
|
setValue(selected(v) ? void 0 : v);
|
|
@@ -1036,8 +982,8 @@ const CheckboxGroupItem = memo((props) => {
|
|
|
1036
982
|
ref,
|
|
1037
983
|
className,
|
|
1038
984
|
value,
|
|
1039
|
-
accentColor,
|
|
1040
985
|
disabled,
|
|
986
|
+
accentColor = groupContext.accentColor,
|
|
1041
987
|
variant = groupContext.variant,
|
|
1042
988
|
size: size2 = groupContext.size,
|
|
1043
989
|
radius = groupContext.radius,
|
|
@@ -1074,9 +1020,6 @@ const CheckboxGroupItemIndicator = memo((props) => {
|
|
|
1074
1020
|
return /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: cx("flex items-center justify-center", className), ref, ...rest });
|
|
1075
1021
|
});
|
|
1076
1022
|
CheckboxGroupItemIndicator.displayName = "CheckboxGroupItemIndicator";
|
|
1077
|
-
function getBooleanState$1(value) {
|
|
1078
|
-
return value ? "true" : "false";
|
|
1079
|
-
}
|
|
1080
1023
|
const CheckboxGroupRoot = memo((props) => {
|
|
1081
1024
|
const providerContext = useProvider();
|
|
1082
1025
|
const {
|
|
@@ -1099,20 +1042,22 @@ const CheckboxGroupRoot = memo((props) => {
|
|
|
1099
1042
|
name,
|
|
1100
1043
|
required,
|
|
1101
1044
|
disabled,
|
|
1045
|
+
// style props
|
|
1046
|
+
accentColor,
|
|
1102
1047
|
size: size2,
|
|
1103
1048
|
variant,
|
|
1104
1049
|
radius
|
|
1105
1050
|
}),
|
|
1106
|
-
[disabled, name, radius, required, size2, variant]
|
|
1051
|
+
[accentColor, disabled, name, radius, required, size2, variant]
|
|
1107
1052
|
);
|
|
1108
1053
|
return /* @__PURE__ */ jsx(
|
|
1109
1054
|
"div",
|
|
1110
1055
|
{
|
|
1111
1056
|
ref,
|
|
1112
1057
|
role: "group",
|
|
1113
|
-
"data-disabled": getBooleanState
|
|
1058
|
+
"data-disabled": getBooleanState(!!disabled),
|
|
1114
1059
|
"data-accent-color": accentColor,
|
|
1115
|
-
"aria-disabled": getBooleanState
|
|
1060
|
+
"aria-disabled": getBooleanState(!!disabled),
|
|
1116
1061
|
...rest,
|
|
1117
1062
|
children: /* @__PURE__ */ jsx(CheckboxGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
1118
1063
|
MultiSelectProvider,
|
|
@@ -1132,8 +1077,8 @@ const CheckboxGroupSelectAllItem = memo((props) => {
|
|
|
1132
1077
|
const {
|
|
1133
1078
|
ref,
|
|
1134
1079
|
className,
|
|
1135
|
-
accentColor,
|
|
1136
1080
|
disabled,
|
|
1081
|
+
accentColor = groupContext.accentColor,
|
|
1137
1082
|
variant = groupContext.variant,
|
|
1138
1083
|
size: size2 = groupContext.size,
|
|
1139
1084
|
radius = groupContext.radius,
|
|
@@ -1164,137 +1109,39 @@ const CheckboxGroup = {
|
|
|
1164
1109
|
SelectAllItem: CheckboxGroupSelectAllItem,
|
|
1165
1110
|
ItemIndicator: CheckboxGroupItemIndicator
|
|
1166
1111
|
};
|
|
1167
|
-
const
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
}
|
|
1173
|
-
const CollapsibleNode = genericMemo(function(props) {
|
|
1174
|
-
const { meta, nodes, level = 0, disabled } = props;
|
|
1175
|
-
const [controlledOpenState, setControlledOpenState] = useState(false);
|
|
1176
|
-
const {
|
|
1177
|
-
nodeRenderer,
|
|
1178
|
-
disabled: disabledFromContext,
|
|
1179
|
-
onNodeOpen,
|
|
1180
|
-
onNodeClose,
|
|
1181
|
-
onNodeClick,
|
|
1182
|
-
nodeStyles,
|
|
1183
|
-
nodeClassName
|
|
1184
|
-
} = useCollapsibleTreeContext();
|
|
1185
|
-
const isDisabled = disabled ?? disabledFromContext;
|
|
1186
|
-
const handleClick = useCallback(() => {
|
|
1187
|
-
if (onNodeClick) onNodeClick(meta);
|
|
1188
|
-
}, [meta, onNodeClick]);
|
|
1189
|
-
const toggleOpenState = useCallback(() => {
|
|
1190
|
-
setControlledOpenState(!controlledOpenState);
|
|
1191
|
-
if (!controlledOpenState && onNodeOpen) onNodeOpen(meta);
|
|
1192
|
-
if (controlledOpenState && onNodeClose) onNodeClose(meta);
|
|
1193
|
-
}, [meta, onNodeClose, onNodeOpen, controlledOpenState]);
|
|
1194
|
-
const { children, style, className } = useMemo(() => {
|
|
1195
|
-
return nodeRenderer({
|
|
1196
|
-
meta,
|
|
1197
|
-
toggleOpen: toggleOpenState,
|
|
1198
|
-
open: controlledOpenState,
|
|
1199
|
-
disabled: isDisabled
|
|
1200
|
-
});
|
|
1201
|
-
}, [isDisabled, meta, nodeRenderer, toggleOpenState, controlledOpenState]);
|
|
1202
|
-
const combinedStyles = useMemo(
|
|
1203
|
-
() => ({
|
|
1204
|
-
// want node specific styles to overwrite and global node styles
|
|
1205
|
-
...nodeStyles,
|
|
1206
|
-
...style
|
|
1207
|
-
}),
|
|
1208
|
-
[nodeStyles, style]
|
|
1209
|
-
);
|
|
1210
|
-
return /* @__PURE__ */ jsx(RadixPrimitiveCollapsible.Root, { asChild: true, open: controlledOpenState, disabled: isDisabled, children: /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col", children: [
|
|
1211
|
-
/* @__PURE__ */ jsx(
|
|
1212
|
-
"div",
|
|
1213
|
-
{
|
|
1214
|
-
onClick: handleClick,
|
|
1215
|
-
className: cx(nodeClassName, "flex w-full shrink-0 items-center", className),
|
|
1216
|
-
style: combinedStyles,
|
|
1217
|
-
"data-state": controlledOpenState ? "open" : "closed",
|
|
1218
|
-
"data-disabled": isDisabled,
|
|
1219
|
-
children
|
|
1220
|
-
}
|
|
1221
|
-
),
|
|
1222
|
-
nodes && nodes.length > 0 && /* @__PURE__ */ jsx(RadixPrimitiveCollapsible.Content, { asChild: true, children: /* @__PURE__ */ jsx("div", { className: "flex h-max w-full flex-col pl-2", children: nodes.map((treeNodeProps, index) => /* @__PURE__ */ jsx(
|
|
1223
|
-
CollapsibleNode,
|
|
1224
|
-
{
|
|
1225
|
-
level: level + 1,
|
|
1226
|
-
...treeNodeProps
|
|
1227
|
-
},
|
|
1228
|
-
`${level},${index}`
|
|
1229
|
-
)) }) })
|
|
1230
|
-
] }) });
|
|
1231
|
-
});
|
|
1232
|
-
const CollapsibleTree = genericMemo(function(props) {
|
|
1233
|
-
const {
|
|
1234
|
-
nodes,
|
|
1235
|
-
disabled = false,
|
|
1236
|
-
nodeClassName,
|
|
1237
|
-
nodeStyles,
|
|
1238
|
-
onNodeClick,
|
|
1239
|
-
onNodeClose,
|
|
1240
|
-
onNodeOpen,
|
|
1241
|
-
nodeRenderer,
|
|
1242
|
-
...rest
|
|
1243
|
-
} = props;
|
|
1244
|
-
return /* @__PURE__ */ jsx(
|
|
1245
|
-
CollapsibleTreeContext.Provider,
|
|
1246
|
-
{
|
|
1247
|
-
value: {
|
|
1248
|
-
nodeRenderer,
|
|
1249
|
-
nodeClassName,
|
|
1250
|
-
nodeStyles,
|
|
1251
|
-
disabled,
|
|
1252
|
-
onNodeClick,
|
|
1253
|
-
onNodeClose,
|
|
1254
|
-
onNodeOpen
|
|
1255
|
-
},
|
|
1256
|
-
children: /* @__PURE__ */ jsx("div", { className: "flex h-max w-full flex-col", ...rest, children: nodes.map((treeNodeProps, index) => /* @__PURE__ */ jsx(CollapsibleNode, { ...treeNodeProps }, `${0},${index}`)) })
|
|
1257
|
-
}
|
|
1258
|
-
);
|
|
1259
|
-
});
|
|
1260
|
-
const CommandMenuContext = createContext({});
|
|
1261
|
-
const SelectedIndicatorContext$1 = createContext(false);
|
|
1262
|
-
const CheckboxIndicatorContext = createContext(false);
|
|
1263
|
-
const CommandMenuPageContext = createContext({});
|
|
1264
|
-
const CommandMenuDialogContext = createContext({});
|
|
1265
|
-
function getSelectedState$1(selected) {
|
|
1266
|
-
return selected ? "selected" : "unselected";
|
|
1267
|
-
}
|
|
1268
|
-
function getCheckedState$1(checked) {
|
|
1269
|
-
return checked === true ? "checked" : checked === false ? "unchecked" : "indeterminate";
|
|
1270
|
-
}
|
|
1271
|
-
function getActiveState(active) {
|
|
1272
|
-
return active ? "active" : "inactive";
|
|
1273
|
-
}
|
|
1274
|
-
const CommandMenuCheckboxIndicator = memo((props) => {
|
|
1275
|
-
const { ref, className, children, ...rest } = props;
|
|
1276
|
-
const checkedState = use(CheckboxIndicatorContext);
|
|
1277
|
-
const computedChildren = useMemo(() => {
|
|
1278
|
-
return typeof children === "function" ? children(checkedState) : children;
|
|
1279
|
-
}, [checkedState, children]);
|
|
1112
|
+
const CheckedIndicatorContext = createContext({});
|
|
1113
|
+
const CheckedIndicator = memo((props) => {
|
|
1114
|
+
const { children, ref, className, ...rest } = props;
|
|
1115
|
+
const checked = useContext(CheckedIndicatorContext);
|
|
1116
|
+
const computedChildren = typeof children === "function" ? children(checked) : children;
|
|
1280
1117
|
return /* @__PURE__ */ jsx(
|
|
1281
1118
|
"span",
|
|
1282
1119
|
{
|
|
1283
1120
|
ref,
|
|
1284
|
-
"data-state": getCheckedState$1(checkedState),
|
|
1285
1121
|
className: cx(
|
|
1286
|
-
"
|
|
1122
|
+
"flex size-max items-center",
|
|
1287
1123
|
{
|
|
1288
|
-
invisible:
|
|
1124
|
+
invisible: checked === false
|
|
1289
1125
|
},
|
|
1290
1126
|
className
|
|
1291
1127
|
),
|
|
1128
|
+
"data-state": getCheckedState(checked),
|
|
1292
1129
|
...rest,
|
|
1293
1130
|
children: computedChildren
|
|
1294
1131
|
}
|
|
1295
1132
|
);
|
|
1296
1133
|
});
|
|
1134
|
+
CheckedIndicator.displayName = "CheckedIndicator";
|
|
1135
|
+
const CommandMenuCheckboxIndicator = memo((props) => {
|
|
1136
|
+
const { ref, children, ...rest } = props;
|
|
1137
|
+
return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
|
|
1138
|
+
});
|
|
1297
1139
|
CommandMenuCheckboxIndicator.displayName = "CommandMenuCheckboxIndicator";
|
|
1140
|
+
const CommandMenuContext = createContext({});
|
|
1141
|
+
const SelectedIndicatorContext$1 = createContext(false);
|
|
1142
|
+
const CheckboxIndicatorContext = createContext(false);
|
|
1143
|
+
const CommandMenuPageContext = createContext({});
|
|
1144
|
+
const CommandMenuDialogContext = createContext({});
|
|
1298
1145
|
const commandMenuContentCva = cva(
|
|
1299
1146
|
[
|
|
1300
1147
|
"ring",
|
|
@@ -1531,7 +1378,7 @@ const CommandMenuCheckboxItem = memo((props) => {
|
|
|
1531
1378
|
onSelect == null ? void 0 : onSelect();
|
|
1532
1379
|
onCheckedChange(checked !== true);
|
|
1533
1380
|
}, [checked, onCheckedChange, onSelect]);
|
|
1534
|
-
return /* @__PURE__ */ jsx(CheckboxIndicatorContext, { value: checked, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getCheckedState
|
|
1381
|
+
return /* @__PURE__ */ jsx(CheckboxIndicatorContext, { value: checked, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getCheckedState(checked), ...rest, children }) });
|
|
1535
1382
|
});
|
|
1536
1383
|
CommandMenuCheckboxItem.displayName = "CommandMenuCheckboxItem";
|
|
1537
1384
|
const CommandMenuContent = memo((props) => {
|
|
@@ -1558,9 +1405,10 @@ const CommandMenuContent = memo((props) => {
|
|
|
1558
1405
|
return {
|
|
1559
1406
|
variant,
|
|
1560
1407
|
size: size2,
|
|
1561
|
-
radius
|
|
1408
|
+
radius,
|
|
1409
|
+
accentColor
|
|
1562
1410
|
};
|
|
1563
|
-
}, [radius, size2, variant]);
|
|
1411
|
+
}, [accentColor, radius, size2, variant]);
|
|
1564
1412
|
return /* @__PURE__ */ jsx(DialogPortal, { children: /* @__PURE__ */ jsx(
|
|
1565
1413
|
DialogContent$1,
|
|
1566
1414
|
{
|
|
@@ -1647,7 +1495,7 @@ const CommandMenuMultiSelectItem = genericMemo(function(props) {
|
|
|
1647
1495
|
{
|
|
1648
1496
|
ref,
|
|
1649
1497
|
onSelect: handleSelect,
|
|
1650
|
-
"data-state": getSelectedState
|
|
1498
|
+
"data-state": getSelectedState(isSelected),
|
|
1651
1499
|
"aria-selected": isSelected,
|
|
1652
1500
|
closeOnSelect,
|
|
1653
1501
|
...rest,
|
|
@@ -1721,10 +1569,17 @@ const CommandMenuRadioItem = genericMemo(function(props) {
|
|
|
1721
1569
|
selectValue(value);
|
|
1722
1570
|
}, [onSelect, selectValue, value]);
|
|
1723
1571
|
const isSelected = selected(value);
|
|
1724
|
-
return /* @__PURE__ */ jsx(SelectedIndicatorContext$1, { value: isSelected, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getSelectedState
|
|
1572
|
+
return /* @__PURE__ */ jsx(SelectedIndicatorContext$1, { value: isSelected, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getSelectedState(isSelected), ...rest, children }) });
|
|
1725
1573
|
});
|
|
1726
1574
|
const CommandMenuRoot = memo((props) => {
|
|
1727
|
-
const {
|
|
1575
|
+
const {
|
|
1576
|
+
children,
|
|
1577
|
+
defaultOpen,
|
|
1578
|
+
open: controlledOpen,
|
|
1579
|
+
// oxlint-disable-next-line typescript/unbound-method
|
|
1580
|
+
onOpenChange,
|
|
1581
|
+
modal
|
|
1582
|
+
} = props;
|
|
1728
1583
|
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
1729
1584
|
const contextValue = useMemo(() => {
|
|
1730
1585
|
return {
|
|
@@ -1749,35 +1604,39 @@ const CommandMenuSelectAllItem = genericMemo(function(props) {
|
|
|
1749
1604
|
ref,
|
|
1750
1605
|
role: "menuitemcheckbox",
|
|
1751
1606
|
onSelect: handleSelect,
|
|
1752
|
-
"data-state": getCheckedState
|
|
1607
|
+
"data-state": getCheckedState(selectedState),
|
|
1753
1608
|
closeOnSelect,
|
|
1754
1609
|
...rest
|
|
1755
1610
|
}
|
|
1756
1611
|
) });
|
|
1757
1612
|
});
|
|
1758
|
-
const
|
|
1759
|
-
|
|
1760
|
-
const
|
|
1761
|
-
const
|
|
1762
|
-
|
|
1763
|
-
}, [isSelected, children]);
|
|
1613
|
+
const SelectedIndicatorContext = createContext(false);
|
|
1614
|
+
const SelectedIndicator = memo((props) => {
|
|
1615
|
+
const { ref, children, className, ...rest } = props;
|
|
1616
|
+
const isSelected = use(SelectedIndicatorContext);
|
|
1617
|
+
const computedChildren = typeof children === "function" ? children(isSelected) : children;
|
|
1764
1618
|
return /* @__PURE__ */ jsx(
|
|
1765
1619
|
"span",
|
|
1766
1620
|
{
|
|
1767
1621
|
ref,
|
|
1768
|
-
"data-state": getSelectedState$1(isSelected),
|
|
1769
1622
|
className: cx(
|
|
1770
|
-
"
|
|
1623
|
+
"flex size-max items-center",
|
|
1771
1624
|
{
|
|
1772
1625
|
invisible: !isSelected
|
|
1773
1626
|
},
|
|
1774
1627
|
className
|
|
1775
1628
|
),
|
|
1629
|
+
"data-state": getSelectedState(isSelected),
|
|
1776
1630
|
...rest,
|
|
1777
1631
|
children: computedChildren
|
|
1778
1632
|
}
|
|
1779
1633
|
);
|
|
1780
1634
|
});
|
|
1635
|
+
SelectedIndicator.displayName = "SelectedIndicator";
|
|
1636
|
+
const CommandMenuSelectedIndicator = memo((props) => {
|
|
1637
|
+
const { ref, children, ...rest } = props;
|
|
1638
|
+
return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
|
|
1639
|
+
});
|
|
1781
1640
|
CommandMenuSelectedIndicator.displayName = "CommandMenuSelectedIndicator";
|
|
1782
1641
|
const CommandMenuSeparator = memo((props) => {
|
|
1783
1642
|
const { className, ref, spacing = false, ...rest } = props;
|
|
@@ -1817,21 +1676,21 @@ const CommandMenu = {
|
|
|
1817
1676
|
PageTriggerItem: CommandMenuPageTriggerItem
|
|
1818
1677
|
};
|
|
1819
1678
|
const LuIcon = memo((props) => {
|
|
1820
|
-
const { ref, icon, className, size: size2 = "1em", ...rest } = props;
|
|
1821
|
-
return /* @__PURE__ */ jsx(
|
|
1679
|
+
const { ref, icon: Icon, className, size: size2 = "1em", ...rest } = props;
|
|
1680
|
+
return /* @__PURE__ */ jsx(Icon, { ref, className: cx("shrink-0", className), size: size2, ...rest });
|
|
1822
1681
|
});
|
|
1823
1682
|
LuIcon.displayName = "LuIcon";
|
|
1824
1683
|
const Chevron = (props) => {
|
|
1825
1684
|
const { orientation, ...rest } = props;
|
|
1826
1685
|
switch (orientation) {
|
|
1827
1686
|
case "up":
|
|
1828
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1687
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronUp, ...rest });
|
|
1829
1688
|
case "down":
|
|
1830
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1689
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronDown, ...rest });
|
|
1831
1690
|
case "left":
|
|
1832
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1691
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronLeft, ...rest });
|
|
1833
1692
|
default:
|
|
1834
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1693
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronRight, ...rest });
|
|
1835
1694
|
}
|
|
1836
1695
|
};
|
|
1837
1696
|
const rootCva = cva(["relative", "size-max"], {
|
|
@@ -2081,6 +1940,7 @@ const DialogRoot = memo((props) => {
|
|
|
2081
1940
|
defaultOpen,
|
|
2082
1941
|
onCloseInterrupt,
|
|
2083
1942
|
open: externalOpen,
|
|
1943
|
+
// oxlint-disable-next-line typescript/unbound-method
|
|
2084
1944
|
onOpenChange: externalOpenChange
|
|
2085
1945
|
} = props;
|
|
2086
1946
|
const [innerOpen, setInnerOpen] = useState(defaultOpen ?? false);
|
|
@@ -2254,7 +2114,7 @@ const HoverCard = {
|
|
|
2254
2114
|
Root: RadixHoverCard.Root,
|
|
2255
2115
|
Trigger: RadixHoverCard.Trigger
|
|
2256
2116
|
};
|
|
2257
|
-
const HoverUtility = memo(
|
|
2117
|
+
const HoverUtility = memo(({ children, forceHover }) => {
|
|
2258
2118
|
const [isHovered, setIsHovered] = useState(false);
|
|
2259
2119
|
const handlePointerEnter = useCallback(() => {
|
|
2260
2120
|
setIsHovered(true);
|
|
@@ -2268,6 +2128,7 @@ const HoverUtility = memo(function Root({ children, forceHover }) {
|
|
|
2268
2128
|
onPointerLeave: handlePointerLeave
|
|
2269
2129
|
});
|
|
2270
2130
|
});
|
|
2131
|
+
HoverUtility.displayName = "HoverUtility";
|
|
2271
2132
|
const InputContext = createContext({});
|
|
2272
2133
|
const inputRoot$1 = cva(
|
|
2273
2134
|
[
|
|
@@ -2344,15 +2205,14 @@ const inputSlot = cva(["peer/slot", "slot"], {
|
|
|
2344
2205
|
}
|
|
2345
2206
|
});
|
|
2346
2207
|
const InputField = memo((props) => {
|
|
2347
|
-
const { ref,
|
|
2208
|
+
const { ref, className, ...rest } = props;
|
|
2348
2209
|
const { size: size2, variant } = useContext(InputContext);
|
|
2349
2210
|
return /* @__PURE__ */ jsx(
|
|
2350
2211
|
"input",
|
|
2351
2212
|
{
|
|
2352
2213
|
className: cx(inputField({ size: size2, variant }), "grow bg-transparent outline-0", className),
|
|
2353
2214
|
ref,
|
|
2354
|
-
...rest
|
|
2355
|
-
children
|
|
2215
|
+
...rest
|
|
2356
2216
|
}
|
|
2357
2217
|
);
|
|
2358
2218
|
});
|
|
@@ -2395,9 +2255,9 @@ const Input = {
|
|
|
2395
2255
|
const LayoutContext = createContext({});
|
|
2396
2256
|
const useLayoutContext = () => useContext(LayoutContext);
|
|
2397
2257
|
const LayoutContainer = memo((props) => {
|
|
2398
|
-
const { ref, children,
|
|
2258
|
+
const { ref, children, ...rest } = props;
|
|
2399
2259
|
const { hideLayout = false } = useLayoutContext();
|
|
2400
|
-
return !hideLayout && /* @__PURE__ */ jsx("div", {
|
|
2260
|
+
return !hideLayout && /* @__PURE__ */ jsx("div", { ref, ...rest, children });
|
|
2401
2261
|
});
|
|
2402
2262
|
LayoutContainer.displayName = "LayoutContainer";
|
|
2403
2263
|
const LayoutRoot = memo((props) => {
|
|
@@ -2424,6 +2284,23 @@ const LayoutRoot = memo((props) => {
|
|
|
2424
2284
|
return /* @__PURE__ */ jsx(LayoutContext.Provider, { value: contextValue, children });
|
|
2425
2285
|
});
|
|
2426
2286
|
LayoutRoot.displayName = "LayoutRoot";
|
|
2287
|
+
const SlideOutRootContext = createContext({});
|
|
2288
|
+
const SlideOutContextContext = createContext({});
|
|
2289
|
+
const SlideOutClose = memo((props) => {
|
|
2290
|
+
const { ref, onClick, disabled, ...rest } = props;
|
|
2291
|
+
const { setOpen } = use(SlideOutRootContext);
|
|
2292
|
+
const handleClick = useCallback(
|
|
2293
|
+
(e) => {
|
|
2294
|
+
onClick == null ? void 0 : onClick(e);
|
|
2295
|
+
if (e.defaultPrevented) return;
|
|
2296
|
+
setOpen(false);
|
|
2297
|
+
},
|
|
2298
|
+
[onClick, setOpen]
|
|
2299
|
+
);
|
|
2300
|
+
return /* @__PURE__ */ jsx(Slot, { ref, onClick: handleClick, "data-disabled": disabled ?? false, ...rest });
|
|
2301
|
+
});
|
|
2302
|
+
SlideOutClose.displayName = "SlideOutClose";
|
|
2303
|
+
const TIMEOUT_DURATION = 200;
|
|
2427
2304
|
function usePointerDownOutside(onPointerDownOutside, ownerElement = globalThis == null ? void 0 : globalThis.document.body) {
|
|
2428
2305
|
const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);
|
|
2429
2306
|
const isPointerInsideReactTreeRef = useRef(false);
|
|
@@ -2485,327 +2362,392 @@ function useCallbackRef(callback) {
|
|
|
2485
2362
|
return (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef, ...args);
|
|
2486
2363
|
}, []);
|
|
2487
2364
|
}
|
|
2488
|
-
const
|
|
2489
|
-
const
|
|
2490
|
-
const
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
const
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2365
|
+
const SlideOutContent = memo((props) => {
|
|
2366
|
+
const { ref, children, style, side, type, resizeable = false, initialSize, minSize, maxSize, ...rest } = props;
|
|
2367
|
+
const internalRef = useRef(null);
|
|
2368
|
+
const { open, setOpen, parentElement, modal, hide: hide2 } = use(SlideOutRootContext);
|
|
2369
|
+
const [computedSize, setComputedSize] = useState(null);
|
|
2370
|
+
const handleClose = useCallback(() => {
|
|
2371
|
+
if (modal) setOpen(false);
|
|
2372
|
+
}, [modal, setOpen]);
|
|
2373
|
+
const { onPointerDownCapture: handlePointerDownCapture } = usePointerDownOutside(
|
|
2374
|
+
handleClose,
|
|
2375
|
+
parentElement ?? void 0
|
|
2376
|
+
);
|
|
2377
|
+
useLayoutEffect(() => {
|
|
2378
|
+
if (!open || !internalRef.current) return;
|
|
2379
|
+
const { offsetWidth, offsetHeight } = internalRef.current;
|
|
2380
|
+
switch (side) {
|
|
2381
|
+
case "left":
|
|
2382
|
+
case "right":
|
|
2383
|
+
setComputedSize(offsetWidth);
|
|
2384
|
+
break;
|
|
2385
|
+
case "top":
|
|
2386
|
+
case "bottom":
|
|
2387
|
+
setComputedSize(offsetHeight);
|
|
2388
|
+
}
|
|
2389
|
+
}, [open, side]);
|
|
2390
|
+
const computedStyle = useMemo(() => {
|
|
2391
|
+
switch (side) {
|
|
2392
|
+
case "left":
|
|
2393
|
+
return {
|
|
2394
|
+
...style,
|
|
2395
|
+
left: 0,
|
|
2396
|
+
width: computedSize ?? initialSize,
|
|
2397
|
+
maxWidth: maxSize,
|
|
2398
|
+
minWidth: minSize,
|
|
2399
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2400
|
+
"--slide-out-size": `${computedSize}px`
|
|
2401
|
+
};
|
|
2402
|
+
case "right":
|
|
2403
|
+
return {
|
|
2404
|
+
...style,
|
|
2405
|
+
right: 0,
|
|
2406
|
+
width: computedSize ?? initialSize,
|
|
2407
|
+
maxWidth: maxSize,
|
|
2408
|
+
minWidth: minSize,
|
|
2409
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2410
|
+
"--slide-out-size": `${computedSize}px`
|
|
2411
|
+
};
|
|
2412
|
+
case "top":
|
|
2413
|
+
return {
|
|
2414
|
+
...style,
|
|
2415
|
+
top: 0,
|
|
2416
|
+
height: computedSize ?? initialSize,
|
|
2417
|
+
maxHeight: maxSize,
|
|
2418
|
+
minHeight: minSize,
|
|
2419
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2420
|
+
"--slide-out-size": `${computedSize}px`
|
|
2421
|
+
};
|
|
2422
|
+
case "bottom":
|
|
2423
|
+
return {
|
|
2424
|
+
...style,
|
|
2425
|
+
bottom: 0,
|
|
2426
|
+
height: computedSize ?? initialSize,
|
|
2427
|
+
maxHeight: maxSize,
|
|
2428
|
+
minHeight: minSize,
|
|
2429
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2430
|
+
"--slide-out-size": `${computedSize}px`
|
|
2431
|
+
};
|
|
2528
2432
|
}
|
|
2529
|
-
}, []);
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2433
|
+
}, [computedSize, initialSize, maxSize, minSize, side, style, type]);
|
|
2434
|
+
const transitionClassNames = useMemo(() => {
|
|
2435
|
+
switch (side) {
|
|
2436
|
+
case "left":
|
|
2437
|
+
return {
|
|
2438
|
+
enter: "-ml-(--slide-out-size)",
|
|
2439
|
+
enterActive: "ease-linear duration-200 transition-[margin-left] ml-0",
|
|
2440
|
+
enterDone: "ml-0",
|
|
2441
|
+
exitActive: "ease-linear duration-200 transition-[margin-left] -ml-(--slide-out-size)",
|
|
2442
|
+
exitDone: "-ml-(--slide-out-size)"
|
|
2443
|
+
};
|
|
2444
|
+
case "right":
|
|
2445
|
+
return {
|
|
2446
|
+
enter: "-mr-(--slide-out-size)",
|
|
2447
|
+
enterActive: "ease-linear duration-200 transition-[margin-right] mr-0",
|
|
2448
|
+
enterDone: "mr-0",
|
|
2449
|
+
exitActive: "ease-linear duration-200 transition-[margin-right] -mr-(--slide-out-size)",
|
|
2450
|
+
exitDone: "-mr-(--slide-out-size)"
|
|
2451
|
+
};
|
|
2452
|
+
case "top":
|
|
2453
|
+
return {
|
|
2454
|
+
enter: "-mt-(--slide-out-size)",
|
|
2455
|
+
enterActive: "ease-linear duration-200 transition-[margin-top] mt-0",
|
|
2456
|
+
enterDone: "mt-0",
|
|
2457
|
+
exitActive: "ease-linear duration-200 transition-[margin-top] -mt-(--slide-out-size)",
|
|
2458
|
+
exitDone: "-mt-(--slide-out-size)"
|
|
2459
|
+
};
|
|
2460
|
+
case "bottom":
|
|
2461
|
+
return {
|
|
2462
|
+
enter: "-mb-(--slide-out-size)",
|
|
2463
|
+
enterActive: "ease-linear duration-200 transition-[margin-bottom] mb-0",
|
|
2464
|
+
enterDone: "mb-0",
|
|
2465
|
+
exitActive: "ease-linear duration-200 transition-[margin-bottom] -mb-(--slide-out-size)",
|
|
2466
|
+
exitDone: "-mb-(--slide-out-size)"
|
|
2467
|
+
};
|
|
2535
2468
|
}
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
childrenContainerRef.current.style.pointerEvents = originalParentPointerEvents;
|
|
2539
|
-
}
|
|
2540
|
-
};
|
|
2541
|
-
}, [modal, open, parentContainer.style]);
|
|
2542
|
-
const { onPointerDownCapture: handlePointerDownCapture } = usePointerDownOutside(handleDismiss, parentContainer);
|
|
2543
|
-
const CSSTransitionClassNames = useMemo(
|
|
2469
|
+
}, [side]);
|
|
2470
|
+
const contextValue = useMemo(
|
|
2544
2471
|
() => ({
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2472
|
+
side,
|
|
2473
|
+
type,
|
|
2474
|
+
resizeable,
|
|
2475
|
+
computedSize,
|
|
2476
|
+
setComputedSize
|
|
2550
2477
|
}),
|
|
2551
|
-
[
|
|
2478
|
+
[computedSize, resizeable, side, type]
|
|
2552
2479
|
);
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2480
|
+
return !hide2 ? (
|
|
2481
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2482
|
+
// @ts-ignore
|
|
2483
|
+
/* @__PURE__ */ jsx(
|
|
2484
|
+
CSSTransition,
|
|
2485
|
+
{
|
|
2486
|
+
classNames: transitionClassNames,
|
|
2487
|
+
in: open,
|
|
2488
|
+
timeout: TIMEOUT_DURATION,
|
|
2489
|
+
unmountOnExit: true,
|
|
2490
|
+
mountOnEnter: true,
|
|
2491
|
+
nodeRef: internalRef,
|
|
2492
|
+
children: /* @__PURE__ */ jsx(
|
|
2493
|
+
"div",
|
|
2494
|
+
{
|
|
2495
|
+
ref: mergeRefs([ref, internalRef]),
|
|
2496
|
+
onPointerDownCapture: handlePointerDownCapture,
|
|
2497
|
+
"data-open": open,
|
|
2498
|
+
"data-side": side,
|
|
2499
|
+
"data-type": type,
|
|
2500
|
+
style: computedStyle,
|
|
2501
|
+
...rest,
|
|
2502
|
+
children: /* @__PURE__ */ jsx(SlideOutContextContext, { value: contextValue, children })
|
|
2503
|
+
}
|
|
2504
|
+
)
|
|
2505
|
+
}
|
|
2506
|
+
)
|
|
2507
|
+
) : null;
|
|
2508
|
+
});
|
|
2509
|
+
SlideOutContent.displayName = "SlideOutContent";
|
|
2510
|
+
const SlideOutHandle = memo((props) => {
|
|
2511
|
+
const { ref, onMouseDown, disabled, ...rest } = props;
|
|
2512
|
+
const prevClientCoord = useRef(null);
|
|
2513
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
2514
|
+
const { side, resizeable, computedSize, setComputedSize } = use(SlideOutContextContext);
|
|
2515
|
+
const computedDisabled = disabled ?? !resizeable;
|
|
2516
|
+
const setPrevClientCoord = useCallback(
|
|
2517
|
+
(clientX, clientY) => {
|
|
2518
|
+
switch (side) {
|
|
2519
|
+
case "left":
|
|
2520
|
+
prevClientCoord.current = clientX;
|
|
2521
|
+
break;
|
|
2522
|
+
case "right":
|
|
2523
|
+
prevClientCoord.current = clientX;
|
|
2524
|
+
break;
|
|
2525
|
+
case "top":
|
|
2526
|
+
prevClientCoord.current = clientY;
|
|
2527
|
+
break;
|
|
2528
|
+
case "bottom":
|
|
2529
|
+
prevClientCoord.current = clientY;
|
|
2530
|
+
break;
|
|
2531
|
+
}
|
|
2532
|
+
},
|
|
2533
|
+
[side]
|
|
2534
|
+
);
|
|
2535
|
+
const handlePointerDown = useCallback(
|
|
2536
|
+
(e) => {
|
|
2537
|
+
onMouseDown == null ? void 0 : onMouseDown(e);
|
|
2538
|
+
if (e.defaultPrevented || computedDisabled) return;
|
|
2539
|
+
e.preventDefault();
|
|
2540
|
+
setPrevClientCoord(e.clientX, e.clientY);
|
|
2541
|
+
setIsResizing(true);
|
|
2542
|
+
},
|
|
2543
|
+
[computedDisabled, onMouseDown, setPrevClientCoord]
|
|
2544
|
+
);
|
|
2545
|
+
const handlePointerMove = useCallback(
|
|
2559
2546
|
(e) => {
|
|
2560
|
-
if (!isResizing) return;
|
|
2561
|
-
|
|
2562
|
-
const
|
|
2563
|
-
|
|
2564
|
-
|
|
2547
|
+
if (!isResizing || !prevClientCoord.current || computedDisabled) return;
|
|
2548
|
+
e.preventDefault();
|
|
2549
|
+
const { clientX, clientY } = e;
|
|
2550
|
+
let delta = 0;
|
|
2551
|
+
switch (side) {
|
|
2552
|
+
case "left":
|
|
2553
|
+
delta = clientX - prevClientCoord.current;
|
|
2554
|
+
break;
|
|
2555
|
+
case "right":
|
|
2556
|
+
delta = (clientX - prevClientCoord.current) * -1;
|
|
2557
|
+
break;
|
|
2558
|
+
case "top":
|
|
2559
|
+
delta = clientY - prevClientCoord.current;
|
|
2560
|
+
break;
|
|
2561
|
+
case "bottom":
|
|
2562
|
+
delta = (clientY - prevClientCoord.current) * -1;
|
|
2563
|
+
break;
|
|
2564
|
+
}
|
|
2565
|
+
setPrevClientCoord(clientX, clientY);
|
|
2566
|
+
setComputedSize(computedSize + delta);
|
|
2565
2567
|
},
|
|
2566
|
-
[
|
|
2568
|
+
[computedDisabled, computedSize, isResizing, setComputedSize, setPrevClientCoord, side]
|
|
2567
2569
|
);
|
|
2568
|
-
const
|
|
2569
|
-
if (!isResizing) return;
|
|
2570
|
-
|
|
2570
|
+
const handlePointerUp = useCallback(() => {
|
|
2571
|
+
if (!isResizing || computedDisabled) return;
|
|
2572
|
+
prevClientCoord.current = null;
|
|
2571
2573
|
setIsResizing(false);
|
|
2572
|
-
}, [isResizing]);
|
|
2574
|
+
}, [computedDisabled, isResizing]);
|
|
2573
2575
|
useEffect(() => {
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
+
document.addEventListener("pointermove", handlePointerMove);
|
|
2577
|
+
document.addEventListener("pointerup", handlePointerUp);
|
|
2576
2578
|
return () => {
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
+
document.removeEventListener("pointermove", handlePointerMove);
|
|
2580
|
+
document.removeEventListener("pointerup", handlePointerUp);
|
|
2579
2581
|
};
|
|
2580
|
-
}, [
|
|
2581
|
-
|
|
2582
|
-
if (!open) return;
|
|
2583
|
-
setComputedWidth(localRef.current.offsetWidth);
|
|
2584
|
-
}, [open]);
|
|
2585
|
-
const resizableStyle = useMemo(
|
|
2586
|
-
() => ({
|
|
2587
|
-
...style,
|
|
2588
|
-
width: computedWidth ?? initialWidth,
|
|
2589
|
-
maxWidth,
|
|
2590
|
-
minWidth,
|
|
2591
|
-
position,
|
|
2592
|
-
"--slide-out-width": `${computedWidth}${typeof computedWidth === "number" ? "px" : ""}`
|
|
2593
|
-
}),
|
|
2594
|
-
[computedWidth, initialWidth, maxWidth, minWidth, position, style]
|
|
2595
|
-
);
|
|
2596
|
-
const resizableEnable = useMemo(
|
|
2597
|
-
() => ({ left: resizeable && !isLeft, right: resizeable && isLeft }),
|
|
2598
|
-
[isLeft, resizeable]
|
|
2599
|
-
);
|
|
2600
|
-
const SlideOut2 = useMemo(
|
|
2601
|
-
() => (
|
|
2602
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2603
|
-
// @ts-ignore
|
|
2604
|
-
/* @__PURE__ */ jsx(
|
|
2605
|
-
CSSTransition,
|
|
2606
|
-
{
|
|
2607
|
-
classNames: CSSTransitionClassNames,
|
|
2608
|
-
in: open,
|
|
2609
|
-
timeout: TIMEOUT_DURATION,
|
|
2610
|
-
unmountOnExit: true,
|
|
2611
|
-
mountOnEnter: true,
|
|
2612
|
-
onEntering: onOpening,
|
|
2613
|
-
onExited: onClosed,
|
|
2614
|
-
nodeRef,
|
|
2615
|
-
children: /* @__PURE__ */ jsxs(
|
|
2616
|
-
"div",
|
|
2617
|
-
{
|
|
2618
|
-
className: cx(
|
|
2619
|
-
"top-0",
|
|
2620
|
-
"bottom-0",
|
|
2621
|
-
{
|
|
2622
|
-
"left-0": isLeft,
|
|
2623
|
-
"right-0": !isLeft,
|
|
2624
|
-
absolute: position === "absolute",
|
|
2625
|
-
relative: position === "relative"
|
|
2626
|
-
},
|
|
2627
|
-
className
|
|
2628
|
-
),
|
|
2629
|
-
ref: mergedRefs,
|
|
2630
|
-
onPointerDownCapture: handlePointerDownCapture,
|
|
2631
|
-
"data-side": side,
|
|
2632
|
-
style: resizableStyle,
|
|
2633
|
-
children: [
|
|
2634
|
-
/* @__PURE__ */ jsx(
|
|
2635
|
-
"div",
|
|
2636
|
-
{
|
|
2637
|
-
className: cx("absolute top-0 bottom-0 w-[3px]", {
|
|
2638
|
-
"right-0": isLeft,
|
|
2639
|
-
"left-0": !isLeft,
|
|
2640
|
-
"pointer-events-none": !resizableEnable
|
|
2641
|
-
}),
|
|
2642
|
-
onMouseDown: handleMouseDown,
|
|
2643
|
-
"data-resizing": isResizing ? "" : void 0
|
|
2644
|
-
}
|
|
2645
|
-
),
|
|
2646
|
-
content
|
|
2647
|
-
]
|
|
2648
|
-
}
|
|
2649
|
-
)
|
|
2650
|
-
}
|
|
2651
|
-
)
|
|
2652
|
-
),
|
|
2653
|
-
[
|
|
2654
|
-
CSSTransitionClassNames,
|
|
2655
|
-
open,
|
|
2656
|
-
onOpening,
|
|
2657
|
-
onClosed,
|
|
2658
|
-
className,
|
|
2659
|
-
isLeft,
|
|
2660
|
-
position,
|
|
2661
|
-
mergedRefs,
|
|
2662
|
-
handlePointerDownCapture,
|
|
2663
|
-
side,
|
|
2664
|
-
resizableStyle,
|
|
2665
|
-
handleMouseDown,
|
|
2666
|
-
isResizing,
|
|
2667
|
-
resizableEnable,
|
|
2668
|
-
content
|
|
2669
|
-
]
|
|
2670
|
-
);
|
|
2671
|
-
return /* @__PURE__ */ jsxs(
|
|
2582
|
+
}, [handlePointerMove, handlePointerUp]);
|
|
2583
|
+
return /* @__PURE__ */ jsx(
|
|
2672
2584
|
"div",
|
|
2673
2585
|
{
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
" ",
|
|
2681
|
-
content && SlideOut2
|
|
2682
|
-
] }),
|
|
2683
|
-
/* @__PURE__ */ jsx("div", { className: "flex h-full max-w-full grow overflow-hidden", ref: childrenContainerRef, children }),
|
|
2684
|
-
side === "right" && !hide2 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2685
|
-
open && overlayComponent,
|
|
2686
|
-
" ",
|
|
2687
|
-
content && SlideOut2
|
|
2688
|
-
] })
|
|
2689
|
-
]
|
|
2586
|
+
ref,
|
|
2587
|
+
onPointerDown: handlePointerDown,
|
|
2588
|
+
"data-resizing": isResizing,
|
|
2589
|
+
"data-side": side,
|
|
2590
|
+
"data-disabled": computedDisabled,
|
|
2591
|
+
...rest
|
|
2690
2592
|
}
|
|
2691
2593
|
);
|
|
2692
2594
|
});
|
|
2693
|
-
|
|
2694
|
-
const
|
|
2695
|
-
const
|
|
2696
|
-
const {
|
|
2595
|
+
SlideOutHandle.displayName = "SlideOutHandle";
|
|
2596
|
+
const SlideOutOverlay = memo((props) => {
|
|
2597
|
+
const { ref, ...rest } = props;
|
|
2598
|
+
const { open, hide: hide2 } = use(SlideOutRootContext);
|
|
2599
|
+
return open && !hide2 ? /* @__PURE__ */ jsx("div", { ref, "data-open": open, ...rest }) : null;
|
|
2600
|
+
});
|
|
2601
|
+
SlideOutOverlay.displayName = "SlideOutOverlay";
|
|
2602
|
+
const SlideOutRoot = memo((props) => {
|
|
2697
2603
|
const {
|
|
2698
2604
|
ref,
|
|
2699
|
-
id,
|
|
2700
2605
|
children,
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2606
|
+
defaultOpen = false,
|
|
2607
|
+
open: controlledOpen,
|
|
2608
|
+
onOpenChange,
|
|
2609
|
+
modal = false,
|
|
2610
|
+
hide: hide2 = false,
|
|
2706
2611
|
...rest
|
|
2707
2612
|
} = props;
|
|
2708
|
-
const
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
setOpen(id, defaultOpen == null ? void 0 : defaultOpen.large);
|
|
2714
|
-
}
|
|
2715
|
-
}, [defaultOpen, id, setOpen, small]);
|
|
2716
|
-
const handleDismiss = useCallback(() => {
|
|
2717
|
-
setOpen(id, false);
|
|
2718
|
-
onDismiss == null ? void 0 : onDismiss();
|
|
2719
|
-
}, [id, onDismiss, setOpen]);
|
|
2720
|
-
return !hideLayout && /* @__PURE__ */ jsx(
|
|
2721
|
-
SlideOut,
|
|
2722
|
-
{
|
|
2723
|
-
className: cx(`overmap-layout-slideOut-${side}`, className),
|
|
2724
|
-
side,
|
|
2725
|
-
ref,
|
|
2613
|
+
const [parentElement, setParentElement] = useState(null);
|
|
2614
|
+
const [open, setOpen] = useControlledState(defaultOpen, controlledOpen, onOpenChange);
|
|
2615
|
+
const contextValue = useMemo(
|
|
2616
|
+
() => ({
|
|
2617
|
+
parentElement,
|
|
2726
2618
|
open,
|
|
2727
|
-
|
|
2728
|
-
modal
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
children
|
|
2733
|
-
}
|
|
2619
|
+
setOpen,
|
|
2620
|
+
modal,
|
|
2621
|
+
hide: hide2
|
|
2622
|
+
}),
|
|
2623
|
+
[hide2, modal, open, parentElement, setOpen]
|
|
2734
2624
|
);
|
|
2625
|
+
return /* @__PURE__ */ jsx("div", { ref: mergeRefs([ref, setParentElement]), ...rest, children: /* @__PURE__ */ jsx(SlideOutRootContext, { value: contextValue, children }) });
|
|
2735
2626
|
});
|
|
2736
|
-
|
|
2737
|
-
const
|
|
2738
|
-
const { ref,
|
|
2739
|
-
const {
|
|
2740
|
-
const
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2627
|
+
SlideOutRoot.displayName = "SlideOutRoot";
|
|
2628
|
+
const SlideOutTrigger = memo((props) => {
|
|
2629
|
+
const { ref, onClick, ...rest } = props;
|
|
2630
|
+
const { open, setOpen } = use(SlideOutRootContext);
|
|
2631
|
+
const handleClick = useCallback(
|
|
2632
|
+
(e) => {
|
|
2633
|
+
onClick == null ? void 0 : onClick(e);
|
|
2634
|
+
if (e.defaultPrevented) return;
|
|
2635
|
+
setOpen(!open);
|
|
2636
|
+
},
|
|
2637
|
+
[onClick, open, setOpen]
|
|
2638
|
+
);
|
|
2639
|
+
return /* @__PURE__ */ jsx(Slot, { ref, onClick: handleClick, "data-disabled": props.disabled ?? false, ...rest });
|
|
2747
2640
|
});
|
|
2748
|
-
|
|
2749
|
-
const
|
|
2750
|
-
const
|
|
2751
|
-
const
|
|
2752
|
-
const
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2641
|
+
SlideOutTrigger.displayName = "SlideOutTrigger";
|
|
2642
|
+
const SlideOutViewport = memo((props) => {
|
|
2643
|
+
const { ref, ...rest } = props;
|
|
2644
|
+
const internalRef = useRef(null);
|
|
2645
|
+
const { open, modal, parentElement } = use(SlideOutRootContext);
|
|
2646
|
+
useEffect(() => {
|
|
2647
|
+
if (!internalRef.current) return;
|
|
2648
|
+
const internalElement = internalRef.current;
|
|
2649
|
+
const originalParentPointerEvents = internalElement.style.pointerEvents;
|
|
2650
|
+
if (open && modal) {
|
|
2651
|
+
internalElement.style.pointerEvents = "none";
|
|
2652
|
+
}
|
|
2653
|
+
return () => {
|
|
2654
|
+
internalElement.style.pointerEvents = originalParentPointerEvents;
|
|
2655
|
+
};
|
|
2656
|
+
}, [modal, open, parentElement == null ? void 0 : parentElement.style]);
|
|
2657
|
+
return /* @__PURE__ */ jsx("div", { ref: mergeRefs([ref, internalRef]), ...rest });
|
|
2658
|
+
});
|
|
2659
|
+
SlideOutViewport.displayName = "SlideOutViewport";
|
|
2660
|
+
const SlideOut = {
|
|
2661
|
+
Close: SlideOutClose,
|
|
2662
|
+
Content: SlideOutContent,
|
|
2663
|
+
Handle: SlideOutHandle,
|
|
2664
|
+
Overlay: SlideOutOverlay,
|
|
2665
|
+
Root: SlideOutRoot,
|
|
2666
|
+
Trigger: SlideOutTrigger,
|
|
2667
|
+
Viewport: SlideOutViewport
|
|
2770
2668
|
};
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
}
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
}
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2669
|
+
const LayoutSlideOutClose = memo((props) => {
|
|
2670
|
+
const { ref, ...rest } = props;
|
|
2671
|
+
return /* @__PURE__ */ jsx(SlideOutClose, { ref, ...rest });
|
|
2672
|
+
});
|
|
2673
|
+
LayoutSlideOutClose.displayName = "LayoutSlideOutClose";
|
|
2674
|
+
const LayoutSlideOutContent = memo((props) => {
|
|
2675
|
+
const { ref, type, ...rest } = props;
|
|
2676
|
+
const { small } = use(LayoutContext);
|
|
2677
|
+
return /* @__PURE__ */ jsx(SlideOutContent, { ref, type: type ?? (small ? "overlay" : "inline"), ...rest });
|
|
2678
|
+
});
|
|
2679
|
+
LayoutSlideOutContent.displayName = "LayoutSlideOutContent";
|
|
2680
|
+
const LayoutSlideOutHandle = memo((props) => {
|
|
2681
|
+
const { ref, ...rest } = props;
|
|
2682
|
+
return /* @__PURE__ */ jsx(SlideOutHandle, { ref, ...rest });
|
|
2683
|
+
});
|
|
2684
|
+
LayoutSlideOutHandle.displayName = "LayoutSlideOutHandle";
|
|
2685
|
+
const LayoutSlideOutOverlay = memo((props) => {
|
|
2686
|
+
const { ref, smallModeOnly = false, ...rest } = props;
|
|
2687
|
+
const { small, hideLayout } = useLayoutContext();
|
|
2688
|
+
const showOverlay = useMemo(() => {
|
|
2689
|
+
if (hideLayout) return false;
|
|
2690
|
+
if (smallModeOnly && !small) return false;
|
|
2691
|
+
return true;
|
|
2692
|
+
}, [hideLayout, small, smallModeOnly]);
|
|
2693
|
+
return showOverlay ? /* @__PURE__ */ jsx(SlideOutOverlay, { ref, ...rest }) : null;
|
|
2694
|
+
});
|
|
2695
|
+
LayoutSlideOutOverlay.displayName = "SlideOutOverlay";
|
|
2696
|
+
const LayoutSlideOutRoot = memo((props) => {
|
|
2697
|
+
const { ref, slideOutId, defaultOpen, hide: hide2, ...rest } = props;
|
|
2698
|
+
const { isOpen, setOpen, small, hideLayout } = use(LayoutContext);
|
|
2699
|
+
const open = isOpen(slideOutId);
|
|
2700
|
+
const handleOpenChange = useCallback(
|
|
2701
|
+
(open2) => {
|
|
2702
|
+
if (!open2) setOpen(slideOutId, false);
|
|
2703
|
+
},
|
|
2704
|
+
[setOpen, slideOutId]
|
|
2705
|
+
);
|
|
2706
|
+
useEffect(() => {
|
|
2707
|
+
if (small && (defaultOpen == null ? void 0 : defaultOpen.small) !== void 0) {
|
|
2708
|
+
setOpen(slideOutId, defaultOpen == null ? void 0 : defaultOpen.small);
|
|
2709
|
+
} else if (!small && (defaultOpen == null ? void 0 : defaultOpen.large) !== void 0) {
|
|
2710
|
+
setOpen(slideOutId, defaultOpen == null ? void 0 : defaultOpen.large);
|
|
2711
|
+
}
|
|
2712
|
+
}, [defaultOpen, slideOutId, setOpen, small]);
|
|
2713
|
+
return /* @__PURE__ */ jsx(
|
|
2714
|
+
SlideOutRoot,
|
|
2715
|
+
{
|
|
2716
|
+
ref,
|
|
2717
|
+
open,
|
|
2718
|
+
onOpenChange: handleOpenChange,
|
|
2719
|
+
modal: small,
|
|
2720
|
+
hide: hide2 ?? hideLayout,
|
|
2721
|
+
...rest
|
|
2722
|
+
}
|
|
2723
|
+
);
|
|
2724
|
+
});
|
|
2725
|
+
LayoutSlideOutRoot.displayName = "LayoutSlideOutRoot";
|
|
2793
2726
|
const LayoutSlideOutTrigger = memo((props) => {
|
|
2794
|
-
const { ref, slideOutId,
|
|
2727
|
+
const { ref, slideOutId, children, ...rest } = props;
|
|
2795
2728
|
const { isOpen, setOpen } = useLayoutContext();
|
|
2796
2729
|
const open = isOpen(slideOutId);
|
|
2797
2730
|
const handleClick = useCallback(() => {
|
|
2798
|
-
setOpen(slideOutId,
|
|
2799
|
-
}, [open, setOpen, slideOutId
|
|
2731
|
+
setOpen(slideOutId, !open);
|
|
2732
|
+
}, [open, setOpen, slideOutId]);
|
|
2800
2733
|
return /* @__PURE__ */ jsx(Slot, { "data-state": getOpenState(open), ref, onClick: handleClick, ...rest, children });
|
|
2801
2734
|
});
|
|
2802
|
-
LayoutSlideOutTrigger.displayName = "
|
|
2735
|
+
LayoutSlideOutTrigger.displayName = "LayoutSlideOutTrigger";
|
|
2736
|
+
const LayoutSlideOutViewport = memo((props) => {
|
|
2737
|
+
const { ref, ...rest } = props;
|
|
2738
|
+
return /* @__PURE__ */ jsx(SlideOutViewport, { ref, ...rest });
|
|
2739
|
+
});
|
|
2740
|
+
LayoutSlideOutViewport.displayName = "LayoutSlideOutViewport";
|
|
2803
2741
|
const Layout = {
|
|
2804
2742
|
Root: LayoutRoot,
|
|
2805
2743
|
Container: LayoutContainer,
|
|
2744
|
+
SlideOutClose: LayoutSlideOutClose,
|
|
2745
|
+
SlideOutContent: LayoutSlideOutContent,
|
|
2746
|
+
SlideOutHandle: LayoutSlideOutHandle,
|
|
2806
2747
|
SlideOutOverlay: LayoutSlideOutOverlay,
|
|
2807
|
-
|
|
2808
|
-
SlideOutTrigger: LayoutSlideOutTrigger
|
|
2748
|
+
SlideOutRoot: LayoutSlideOutRoot,
|
|
2749
|
+
SlideOutTrigger: LayoutSlideOutTrigger,
|
|
2750
|
+
SlideOutViewport: LayoutSlideOutViewport
|
|
2809
2751
|
};
|
|
2810
2752
|
const linkCva = cva(["cursor-pointer"], {
|
|
2811
2753
|
variants: {
|
|
@@ -2875,28 +2817,6 @@ const Link = memo((props) => {
|
|
|
2875
2817
|
);
|
|
2876
2818
|
});
|
|
2877
2819
|
Link.displayName = "Link";
|
|
2878
|
-
const CheckedIndicatorContext = createContext({});
|
|
2879
|
-
const CheckedIndicator = (props) => {
|
|
2880
|
-
const { children, ref, className, ...rest } = props;
|
|
2881
|
-
const checked = useContext(CheckedIndicatorContext);
|
|
2882
|
-
const computedChildren = typeof children === "function" ? children(checked === "indeterminate") : children;
|
|
2883
|
-
return /* @__PURE__ */ jsx(
|
|
2884
|
-
"span",
|
|
2885
|
-
{
|
|
2886
|
-
ref,
|
|
2887
|
-
className: cx(
|
|
2888
|
-
"flex size-max items-center",
|
|
2889
|
-
{
|
|
2890
|
-
invisible: checked === false
|
|
2891
|
-
},
|
|
2892
|
-
className
|
|
2893
|
-
),
|
|
2894
|
-
"data-state": getCheckedState$1(checked),
|
|
2895
|
-
...rest,
|
|
2896
|
-
children: computedChildren
|
|
2897
|
-
}
|
|
2898
|
-
);
|
|
2899
|
-
};
|
|
2900
2820
|
const menuItem = cva(
|
|
2901
2821
|
[
|
|
2902
2822
|
"select-none",
|
|
@@ -3042,346 +2962,55 @@ const inputRoot = cva(
|
|
|
3042
2962
|
}
|
|
3043
2963
|
}
|
|
3044
2964
|
);
|
|
3045
|
-
const MenuContext = createContext({});
|
|
3046
|
-
const useMenuContext = () => useContext(MenuContext);
|
|
3047
|
-
const DEFAULT_OFFSET = 5;
|
|
3048
|
-
const MenuRoot = memo((props) => {
|
|
3049
|
-
const {
|
|
3050
|
-
children,
|
|
3051
|
-
side = "bottom",
|
|
3052
|
-
align = "center",
|
|
3053
|
-
offset: offset$1,
|
|
3054
|
-
loop = false,
|
|
3055
|
-
modal = false,
|
|
3056
|
-
// open state related props
|
|
3057
|
-
open: controlledOpen,
|
|
3058
|
-
onOpenChange,
|
|
3059
|
-
defaultOpen
|
|
3060
|
-
} = props;
|
|
3061
|
-
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
3062
|
-
const [activeIndex, setActiveIndex] = useState(null);
|
|
3063
|
-
const [triggerType, setTriggerType] = useState(null);
|
|
3064
|
-
const elementsRef = useRef([]);
|
|
3065
|
-
const nodeId = useFloatingNodeId();
|
|
3066
|
-
const { refs, floatingStyles, context, middlewareData } = useFloating({
|
|
3067
|
-
nodeId,
|
|
3068
|
-
strategy: "fixed",
|
|
3069
|
-
placement: side + (align !== "center" ? "-" + align : ""),
|
|
3070
|
-
whileElementsMounted: autoUpdate,
|
|
3071
|
-
open,
|
|
3072
|
-
onOpenChange: setOpen,
|
|
3073
|
-
middleware: [
|
|
3074
|
-
offset({ mainAxis: offset$1 ?? DEFAULT_OFFSET }),
|
|
3075
|
-
size({
|
|
3076
|
-
apply({ availableHeight, elements }) {
|
|
3077
|
-
elements.floating.style.setProperty(
|
|
3078
|
-
"--overmap-menu-available-height",
|
|
3079
|
-
`${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
|
|
3080
|
-
);
|
|
3081
|
-
},
|
|
3082
|
-
padding: MENU_OVERFLOW_PADDING
|
|
3083
|
-
}),
|
|
3084
|
-
flip({ fallbackStrategy: "initialPlacement" }),
|
|
3085
|
-
shift({ padding: MENU_OVERFLOW_PADDING }),
|
|
3086
|
-
hide()
|
|
3087
|
-
]
|
|
3088
|
-
});
|
|
3089
|
-
const role = useRole(context, {
|
|
3090
|
-
role: "menu"
|
|
3091
|
-
});
|
|
3092
|
-
const dismiss = useDismiss(context, {
|
|
3093
|
-
capture: true,
|
|
3094
|
-
ancestorScroll: triggerType === "context" || triggerType === "virtual"
|
|
3095
|
-
});
|
|
3096
|
-
const click = useClick(context, {
|
|
3097
|
-
enabled: triggerType === "click"
|
|
3098
|
-
});
|
|
3099
|
-
const listNavigation = useListNavigation(context, {
|
|
3100
|
-
listRef: elementsRef,
|
|
3101
|
-
activeIndex,
|
|
3102
|
-
onNavigate: setActiveIndex,
|
|
3103
|
-
loop
|
|
3104
|
-
});
|
|
3105
|
-
const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
|
|
3106
|
-
dismiss,
|
|
3107
|
-
listNavigation,
|
|
3108
|
-
click,
|
|
3109
|
-
role
|
|
3110
|
-
]);
|
|
3111
|
-
return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(
|
|
3112
|
-
MenuContext.Provider,
|
|
3113
|
-
{
|
|
3114
|
-
value: {
|
|
3115
|
-
open,
|
|
3116
|
-
setOpen,
|
|
3117
|
-
refs,
|
|
3118
|
-
context,
|
|
3119
|
-
floatingStyles,
|
|
3120
|
-
elementsRef,
|
|
3121
|
-
getFloatingProps,
|
|
3122
|
-
getItemProps,
|
|
3123
|
-
getReferenceProps,
|
|
3124
|
-
nodeId,
|
|
3125
|
-
activeIndex,
|
|
3126
|
-
setActiveIndex,
|
|
3127
|
-
middlewareData,
|
|
3128
|
-
side,
|
|
3129
|
-
modal,
|
|
3130
|
-
setTriggerType
|
|
3131
|
-
},
|
|
3132
|
-
children
|
|
3133
|
-
}
|
|
3134
|
-
) });
|
|
3135
|
-
});
|
|
3136
|
-
MenuRoot.displayName = "Root";
|
|
3137
2965
|
const MenuContentContext = createContext({});
|
|
3138
|
-
const
|
|
3139
|
-
const
|
|
3140
|
-
|
|
3141
|
-
|
|
2966
|
+
const MenuContext = createContext({});
|
|
2967
|
+
const SubContext = createContext({});
|
|
2968
|
+
const TRIGGER_SELECT_KEYS = ["Enter", " "];
|
|
2969
|
+
const MenuItem = memo((props) => {
|
|
2970
|
+
const rootMenuContext = use(MenuContext);
|
|
2971
|
+
const { getItemProps, activeIndex, setOpen, size: size2, variant, radius } = use(MenuContentContext);
|
|
2972
|
+
const { closeRoot } = use(SubContext);
|
|
3142
2973
|
const {
|
|
3143
2974
|
ref: forwardedRef,
|
|
3144
2975
|
className,
|
|
3145
2976
|
children,
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
2977
|
+
onSelect,
|
|
2978
|
+
onClick,
|
|
2979
|
+
onKeyDown,
|
|
2980
|
+
closeOnSelect = true,
|
|
2981
|
+
disabled = false,
|
|
3150
2982
|
...rest
|
|
3151
2983
|
} = props;
|
|
3152
|
-
const {
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
middlewareData,
|
|
3156
|
-
elementsRef,
|
|
3157
|
-
activeIndex,
|
|
3158
|
-
setActiveIndex,
|
|
3159
|
-
getItemProps,
|
|
3160
|
-
open,
|
|
3161
|
-
setOpen,
|
|
3162
|
-
nodeId,
|
|
3163
|
-
context,
|
|
3164
|
-
floatingStyles,
|
|
3165
|
-
modal,
|
|
3166
|
-
side
|
|
3167
|
-
} = useMenuContext();
|
|
3168
|
-
const computedFloatingStyles = useMemo(() => {
|
|
3169
|
-
var _a2;
|
|
3170
|
-
return {
|
|
3171
|
-
...floatingStyles,
|
|
3172
|
-
visibility: ((_a2 = middlewareData.hide) == null ? void 0 : _a2.referenceHidden) ? "hidden" : "visible"
|
|
3173
|
-
};
|
|
3174
|
-
}, [floatingStyles, (_a = middlewareData.hide) == null ? void 0 : _a.referenceHidden]);
|
|
3175
|
-
const handleOverlayPointerDown = useCallback(
|
|
2984
|
+
const { ref, index } = useListItem();
|
|
2985
|
+
const mergeRefs2 = useMergeRefs([ref, forwardedRef]);
|
|
2986
|
+
const handleClick = useCallback(
|
|
3176
2987
|
(e) => {
|
|
3177
|
-
|
|
2988
|
+
e.stopPropagation();
|
|
2989
|
+
if (disabled) return;
|
|
2990
|
+
onClick == null ? void 0 : onClick(e);
|
|
2991
|
+
onSelect == null ? void 0 : onSelect();
|
|
2992
|
+
if (closeOnSelect) setOpen(false);
|
|
2993
|
+
if (closeRoot) rootMenuContext.setOpen(false);
|
|
3178
2994
|
},
|
|
3179
|
-
[
|
|
2995
|
+
[closeOnSelect, closeRoot, disabled, rootMenuContext, onClick, onSelect, setOpen]
|
|
3180
2996
|
);
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
setActiveIndex,
|
|
3199
|
-
size: size2,
|
|
3200
|
-
variant,
|
|
3201
|
-
accentColor,
|
|
3202
|
-
radius
|
|
3203
|
-
},
|
|
3204
|
-
children: /* @__PURE__ */ jsx(
|
|
3205
|
-
"div",
|
|
3206
|
-
{
|
|
3207
|
-
className: "border-box w-max outline-none",
|
|
3208
|
-
ref: refs.setFloating,
|
|
3209
|
-
tabIndex: -1,
|
|
3210
|
-
style: computedFloatingStyles,
|
|
3211
|
-
"data-floating-content": "",
|
|
3212
|
-
...getFloatingProps(),
|
|
3213
|
-
children: /* @__PURE__ */ jsx(
|
|
3214
|
-
"ul",
|
|
3215
|
-
{
|
|
3216
|
-
className: cx(
|
|
3217
|
-
menuContent({ size: size2 }),
|
|
3218
|
-
floating({ side, shadow: "3" }),
|
|
3219
|
-
radiusCva({ radius, maxLarge: true }),
|
|
3220
|
-
"max-h-(--overmap-menu-available-height)",
|
|
3221
|
-
className
|
|
3222
|
-
),
|
|
3223
|
-
ref: forwardedRef,
|
|
3224
|
-
"data-state": getOpenState(open),
|
|
3225
|
-
"data-side": side,
|
|
3226
|
-
"data-accent-color": accentColor,
|
|
3227
|
-
...rest,
|
|
3228
|
-
children
|
|
3229
|
-
}
|
|
3230
|
-
)
|
|
3231
|
-
}
|
|
3232
|
-
)
|
|
3233
|
-
}
|
|
3234
|
-
) }) })
|
|
3235
|
-
}
|
|
3236
|
-
) }) });
|
|
3237
|
-
});
|
|
3238
|
-
MenuContent.displayName = "Menu.Content";
|
|
3239
|
-
const SubContext = createContext({});
|
|
3240
|
-
const useSubContext = () => useContext(SubContext);
|
|
3241
|
-
const MenuSub = memo((props) => {
|
|
3242
|
-
const {
|
|
3243
|
-
children,
|
|
3244
|
-
disabled = false,
|
|
3245
|
-
side = "right",
|
|
3246
|
-
align = "start",
|
|
3247
|
-
closeRoot = false,
|
|
3248
|
-
loop = false,
|
|
3249
|
-
modal = false,
|
|
3250
|
-
// open state related props
|
|
3251
|
-
open: controlledOpen,
|
|
3252
|
-
onOpenChange,
|
|
3253
|
-
defaultOpen
|
|
3254
|
-
} = props;
|
|
3255
|
-
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
3256
|
-
const nodeId = useFloatingNodeId();
|
|
3257
|
-
const { refs, floatingStyles, context } = useFloating({
|
|
3258
|
-
nodeId,
|
|
3259
|
-
strategy: "fixed",
|
|
3260
|
-
whileElementsMounted: autoUpdate,
|
|
3261
|
-
open,
|
|
3262
|
-
onOpenChange: (open2, _event, reason) => {
|
|
3263
|
-
if (reason) setOpen(open2);
|
|
3264
|
-
},
|
|
3265
|
-
placement: side + (align !== "center" ? "-" + align : ""),
|
|
3266
|
-
middleware: [
|
|
3267
|
-
offset({ ...computeOffsets(side, align) }),
|
|
3268
|
-
size({
|
|
3269
|
-
padding: MENU_OVERFLOW_PADDING,
|
|
3270
|
-
apply({ availableHeight, elements }) {
|
|
3271
|
-
elements.floating.style.setProperty(
|
|
3272
|
-
"--overmap-menu-available-height",
|
|
3273
|
-
`${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
|
|
3274
|
-
);
|
|
3275
|
-
}
|
|
3276
|
-
}),
|
|
3277
|
-
flip(),
|
|
3278
|
-
shift({ padding: MENU_OVERFLOW_PADDING }),
|
|
3279
|
-
hide()
|
|
3280
|
-
]
|
|
3281
|
-
});
|
|
3282
|
-
const dismiss = useDismiss(context, {
|
|
3283
|
-
bubbles: closeRoot,
|
|
3284
|
-
outsidePress: closeRoot
|
|
3285
|
-
});
|
|
3286
|
-
const hover = useHover(context, {
|
|
3287
|
-
restMs: 50,
|
|
3288
|
-
handleClose: safePolygon({
|
|
3289
|
-
blockPointerEvents: true,
|
|
3290
|
-
requireIntent: false
|
|
3291
|
-
}),
|
|
3292
|
-
enabled: !disabled
|
|
3293
|
-
});
|
|
3294
|
-
const click = useClick(context, {
|
|
3295
|
-
enabled: !disabled
|
|
3296
|
-
});
|
|
3297
|
-
const elementsRef = useRef([]);
|
|
3298
|
-
const [activeIndex, setActiveIndex] = useState(null);
|
|
3299
|
-
const listNavigation = useListNavigation(context, {
|
|
3300
|
-
listRef: elementsRef,
|
|
3301
|
-
nested: true,
|
|
3302
|
-
activeIndex,
|
|
3303
|
-
onNavigate: setActiveIndex,
|
|
3304
|
-
loop,
|
|
3305
|
-
rtl: side === "left"
|
|
3306
|
-
});
|
|
3307
|
-
const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
|
|
3308
|
-
listNavigation,
|
|
3309
|
-
dismiss,
|
|
3310
|
-
hover,
|
|
3311
|
-
click
|
|
3312
|
-
]);
|
|
3313
|
-
return /* @__PURE__ */ jsx(
|
|
3314
|
-
SubContext.Provider,
|
|
3315
|
-
{
|
|
3316
|
-
value: {
|
|
3317
|
-
open,
|
|
3318
|
-
setOpen,
|
|
3319
|
-
nodeId,
|
|
3320
|
-
refs,
|
|
3321
|
-
floatingStyles,
|
|
3322
|
-
context,
|
|
3323
|
-
elementsRef,
|
|
3324
|
-
activeIndex,
|
|
3325
|
-
setActiveIndex,
|
|
3326
|
-
getFloatingProps,
|
|
3327
|
-
getItemProps,
|
|
3328
|
-
getReferenceProps,
|
|
3329
|
-
disabled,
|
|
3330
|
-
side,
|
|
3331
|
-
closeRoot,
|
|
3332
|
-
modal
|
|
3333
|
-
},
|
|
3334
|
-
children
|
|
3335
|
-
}
|
|
3336
|
-
);
|
|
3337
|
-
});
|
|
3338
|
-
MenuSub.displayName = "SubMenu";
|
|
3339
|
-
const TRIGGER_SELECT_KEYS = ["Enter", " "];
|
|
3340
|
-
const MenuItem = memo((props) => {
|
|
3341
|
-
const rootMenuContext = useMenuContext();
|
|
3342
|
-
const { getItemProps, activeIndex, setOpen, size: size2, variant, radius } = useMenuContentContext();
|
|
3343
|
-
const { closeRoot } = useSubContext();
|
|
3344
|
-
const {
|
|
3345
|
-
ref: forwardedRef,
|
|
3346
|
-
className,
|
|
3347
|
-
children,
|
|
3348
|
-
onSelect,
|
|
3349
|
-
onClick,
|
|
3350
|
-
onKeyDown,
|
|
3351
|
-
closeOnSelect = true,
|
|
3352
|
-
disabled = false,
|
|
3353
|
-
...rest
|
|
3354
|
-
} = props;
|
|
3355
|
-
const { ref, index } = useListItem();
|
|
3356
|
-
const mergeRefs2 = useMergeRefs([ref, forwardedRef]);
|
|
3357
|
-
const handleClick = useCallback(
|
|
3358
|
-
(e) => {
|
|
3359
|
-
e.stopPropagation();
|
|
3360
|
-
if (disabled) return;
|
|
3361
|
-
onClick == null ? void 0 : onClick(e);
|
|
3362
|
-
onSelect == null ? void 0 : onSelect();
|
|
3363
|
-
if (closeOnSelect) setOpen(false);
|
|
3364
|
-
if (closeRoot) rootMenuContext.setOpen(false);
|
|
3365
|
-
},
|
|
3366
|
-
[closeOnSelect, closeRoot, disabled, rootMenuContext, onClick, onSelect, setOpen]
|
|
3367
|
-
);
|
|
3368
|
-
const handleKeyDown = useCallback(
|
|
3369
|
-
(e) => {
|
|
3370
|
-
if (disabled) return;
|
|
3371
|
-
onKeyDown == null ? void 0 : onKeyDown(e);
|
|
3372
|
-
if (TRIGGER_SELECT_KEYS.includes(e.key)) {
|
|
3373
|
-
onSelect == null ? void 0 : onSelect();
|
|
3374
|
-
if (closeOnSelect) setOpen(false);
|
|
3375
|
-
}
|
|
3376
|
-
},
|
|
3377
|
-
[closeOnSelect, disabled, onKeyDown, onSelect, setOpen]
|
|
3378
|
-
);
|
|
3379
|
-
const isActive = useMemo(() => index === activeIndex, [activeIndex, index]);
|
|
3380
|
-
const computedChildren = useMemo(() => {
|
|
3381
|
-
return typeof children === "function" ? children({ active: isActive, selected: false }) : children;
|
|
3382
|
-
}, [children, isActive]);
|
|
3383
|
-
return /* @__PURE__ */ jsx(
|
|
3384
|
-
"li",
|
|
2997
|
+
const handleKeyDown = useCallback(
|
|
2998
|
+
(e) => {
|
|
2999
|
+
if (disabled) return;
|
|
3000
|
+
onKeyDown == null ? void 0 : onKeyDown(e);
|
|
3001
|
+
if (TRIGGER_SELECT_KEYS.includes(e.key)) {
|
|
3002
|
+
onSelect == null ? void 0 : onSelect();
|
|
3003
|
+
if (closeOnSelect) setOpen(false);
|
|
3004
|
+
}
|
|
3005
|
+
},
|
|
3006
|
+
[closeOnSelect, disabled, onKeyDown, onSelect, setOpen]
|
|
3007
|
+
);
|
|
3008
|
+
const isActive = useMemo(() => index === activeIndex, [activeIndex, index]);
|
|
3009
|
+
const computedChildren = useMemo(() => {
|
|
3010
|
+
return typeof children === "function" ? children({ active: isActive, selected: false }) : children;
|
|
3011
|
+
}, [children, isActive]);
|
|
3012
|
+
return /* @__PURE__ */ jsx(
|
|
3013
|
+
"li",
|
|
3385
3014
|
{
|
|
3386
3015
|
className: cx(menuItem({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
|
|
3387
3016
|
ref: mergeRefs2,
|
|
@@ -3424,7 +3053,7 @@ const MenuCheckboxItemIndicator = memo((props) => {
|
|
|
3424
3053
|
MenuCheckboxItemIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
3425
3054
|
const MenuClickTrigger = memo((props) => {
|
|
3426
3055
|
const { ref: forwardedRef, children, disabled = false } = props;
|
|
3427
|
-
const { getReferenceProps, refs, setTriggerType, open } =
|
|
3056
|
+
const { getReferenceProps, refs, setTriggerType, open } = use(MenuContext);
|
|
3428
3057
|
const mergedRefs = useMergeRefs([refs.setReference, forwardedRef]);
|
|
3429
3058
|
useEffect(() => {
|
|
3430
3059
|
setTriggerType("click");
|
|
@@ -3439,13 +3068,113 @@ const MenuClickTrigger = memo((props) => {
|
|
|
3439
3068
|
...getReferenceProps({ disabled }),
|
|
3440
3069
|
children
|
|
3441
3070
|
}
|
|
3442
|
-
);
|
|
3071
|
+
);
|
|
3072
|
+
});
|
|
3073
|
+
MenuClickTrigger.displayName = "MenuClickTrigger";
|
|
3074
|
+
const MenuContent = memo((props) => {
|
|
3075
|
+
var _a;
|
|
3076
|
+
const providerContext = useProvider();
|
|
3077
|
+
const {
|
|
3078
|
+
ref: forwardedRef,
|
|
3079
|
+
className,
|
|
3080
|
+
children,
|
|
3081
|
+
size: size2 = "md",
|
|
3082
|
+
variant = "soft",
|
|
3083
|
+
radius = providerContext.radius,
|
|
3084
|
+
accentColor = "base",
|
|
3085
|
+
...rest
|
|
3086
|
+
} = props;
|
|
3087
|
+
const {
|
|
3088
|
+
refs,
|
|
3089
|
+
getFloatingProps,
|
|
3090
|
+
middlewareData,
|
|
3091
|
+
elementsRef,
|
|
3092
|
+
activeIndex,
|
|
3093
|
+
setActiveIndex,
|
|
3094
|
+
getItemProps,
|
|
3095
|
+
open,
|
|
3096
|
+
setOpen,
|
|
3097
|
+
nodeId,
|
|
3098
|
+
context,
|
|
3099
|
+
floatingStyles,
|
|
3100
|
+
modal,
|
|
3101
|
+
side
|
|
3102
|
+
} = use(MenuContext);
|
|
3103
|
+
const computedFloatingStyles = useMemo(() => {
|
|
3104
|
+
var _a2;
|
|
3105
|
+
return {
|
|
3106
|
+
...floatingStyles,
|
|
3107
|
+
visibility: ((_a2 = middlewareData.hide) == null ? void 0 : _a2.referenceHidden) ? "hidden" : "visible"
|
|
3108
|
+
};
|
|
3109
|
+
}, [floatingStyles, (_a = middlewareData.hide) == null ? void 0 : _a.referenceHidden]);
|
|
3110
|
+
const handleOverlayPointerDown = useCallback(
|
|
3111
|
+
(e) => {
|
|
3112
|
+
if (modal) stopPropagation(e);
|
|
3113
|
+
},
|
|
3114
|
+
[modal]
|
|
3115
|
+
);
|
|
3116
|
+
return /* @__PURE__ */ jsx(FloatingNode, { id: nodeId, children: open && /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsx(
|
|
3117
|
+
FloatingOverlay,
|
|
3118
|
+
{
|
|
3119
|
+
className: menuOverlay({ modal }),
|
|
3120
|
+
onClick: handleOverlayPointerDown,
|
|
3121
|
+
lockScroll: true,
|
|
3122
|
+
"data-floating-content": "",
|
|
3123
|
+
children: /* @__PURE__ */ jsx(FloatingFocusManager, { context, children: /* @__PURE__ */ jsx(FloatingList, { elementsRef, children: /* @__PURE__ */ jsx(
|
|
3124
|
+
MenuContentContext.Provider,
|
|
3125
|
+
{
|
|
3126
|
+
value: {
|
|
3127
|
+
getItemProps,
|
|
3128
|
+
activeIndex,
|
|
3129
|
+
elementsRef,
|
|
3130
|
+
open,
|
|
3131
|
+
setOpen,
|
|
3132
|
+
refs,
|
|
3133
|
+
setActiveIndex,
|
|
3134
|
+
size: size2,
|
|
3135
|
+
variant,
|
|
3136
|
+
accentColor,
|
|
3137
|
+
radius
|
|
3138
|
+
},
|
|
3139
|
+
children: /* @__PURE__ */ jsx(
|
|
3140
|
+
"div",
|
|
3141
|
+
{
|
|
3142
|
+
className: "border-box w-max outline-none",
|
|
3143
|
+
ref: refs.setFloating,
|
|
3144
|
+
tabIndex: -1,
|
|
3145
|
+
style: computedFloatingStyles,
|
|
3146
|
+
"data-floating-content": "",
|
|
3147
|
+
...getFloatingProps(),
|
|
3148
|
+
children: /* @__PURE__ */ jsx(
|
|
3149
|
+
"ul",
|
|
3150
|
+
{
|
|
3151
|
+
className: cx(
|
|
3152
|
+
menuContent({ size: size2 }),
|
|
3153
|
+
floating({ side, shadow: "3" }),
|
|
3154
|
+
radiusCva({ radius, maxLarge: true }),
|
|
3155
|
+
"max-h-(--overmap-menu-available-height)",
|
|
3156
|
+
className
|
|
3157
|
+
),
|
|
3158
|
+
ref: forwardedRef,
|
|
3159
|
+
"data-state": getOpenState(open),
|
|
3160
|
+
"data-side": side,
|
|
3161
|
+
"data-accent-color": accentColor,
|
|
3162
|
+
...rest,
|
|
3163
|
+
children
|
|
3164
|
+
}
|
|
3165
|
+
)
|
|
3166
|
+
}
|
|
3167
|
+
)
|
|
3168
|
+
}
|
|
3169
|
+
) }) })
|
|
3170
|
+
}
|
|
3171
|
+
) }) });
|
|
3443
3172
|
});
|
|
3444
|
-
|
|
3173
|
+
MenuContent.displayName = "Menu.Content";
|
|
3445
3174
|
const MenuContextTrigger = memo((props) => {
|
|
3446
3175
|
const { ref: forwardedRef, children, disabled = false } = props;
|
|
3447
3176
|
const ref = useRef(null);
|
|
3448
|
-
const { setOpen, refs, setTriggerType, open } =
|
|
3177
|
+
const { setOpen, refs, setTriggerType, open } = use(MenuContext);
|
|
3449
3178
|
const mergedRefs = useMergeRefs([forwardedRef, ref]);
|
|
3450
3179
|
useEffect(() => {
|
|
3451
3180
|
setTriggerType("context");
|
|
@@ -3496,7 +3225,7 @@ const MenuGroup = memo((props) => {
|
|
|
3496
3225
|
MenuGroup.displayName = "MenuGroup";
|
|
3497
3226
|
const MenuInputField = memo((props) => {
|
|
3498
3227
|
const { ref: forwardedRef, className, onValueChange, onChange, disabled = false, ...rest } = props;
|
|
3499
|
-
const { activeIndex, getItemProps } =
|
|
3228
|
+
const { activeIndex, getItemProps } = use(MenuContentContext);
|
|
3500
3229
|
const { index, ref } = useListItem();
|
|
3501
3230
|
const mergedRefs = useMergeRefs([ref, forwardedRef]);
|
|
3502
3231
|
const handleChange = useCallback(
|
|
@@ -3529,7 +3258,7 @@ const MenuInputField = memo((props) => {
|
|
|
3529
3258
|
MenuInputField.displayName = "MenuInputField";
|
|
3530
3259
|
const MenuInputRoot = memo((props) => {
|
|
3531
3260
|
const { ref, className, ...rest } = props;
|
|
3532
|
-
const { size: size2 } =
|
|
3261
|
+
const { size: size2 } = use(MenuContentContext);
|
|
3533
3262
|
return /* @__PURE__ */ jsx("div", { className: cx(inputRoot({ size: size2 }), className), ref, ...rest });
|
|
3534
3263
|
});
|
|
3535
3264
|
MenuInputRoot.displayName = "MenuInputRoot";
|
|
@@ -3540,7 +3269,7 @@ const MenuInputSlot = memo((props) => {
|
|
|
3540
3269
|
MenuInputSlot.displayName = "MenuInputSlot";
|
|
3541
3270
|
const MenuLabel = memo((props) => {
|
|
3542
3271
|
const { ref, className, ...rest } = props;
|
|
3543
|
-
const { size: size2 } =
|
|
3272
|
+
const { size: size2 } = use(MenuContentContext);
|
|
3544
3273
|
return /* @__PURE__ */ jsx("div", { ref, className: cx(menuLabelCva({ size: size2 }), className), ...rest });
|
|
3545
3274
|
});
|
|
3546
3275
|
MenuLabel.displayName = "MenuLabel";
|
|
@@ -3548,29 +3277,6 @@ const MenuMultiSelectGroup = genericMemo(function MenuMultiSelectGroup2(props) {
|
|
|
3548
3277
|
const { ref, children, defaultValues, values, onValuesChange, ...rest } = props;
|
|
3549
3278
|
return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: /* @__PURE__ */ jsx(MultiSelectProvider, { defaultValues, values, onValuesChange, children }) });
|
|
3550
3279
|
});
|
|
3551
|
-
const SelectedIndicatorContext = createContext(false);
|
|
3552
|
-
const useSelectedIndicatorContext = () => useContext(SelectedIndicatorContext);
|
|
3553
|
-
const MenuSelectedIndicator = memo((props) => {
|
|
3554
|
-
const { ref, children, className, ...rest } = props;
|
|
3555
|
-
const isSelected = useSelectedIndicatorContext();
|
|
3556
|
-
return /* @__PURE__ */ jsx(
|
|
3557
|
-
"span",
|
|
3558
|
-
{
|
|
3559
|
-
ref,
|
|
3560
|
-
className: cx(
|
|
3561
|
-
"flex size-max items-center",
|
|
3562
|
-
{
|
|
3563
|
-
invisible: !isSelected
|
|
3564
|
-
},
|
|
3565
|
-
className
|
|
3566
|
-
),
|
|
3567
|
-
"data-state": getSelectedState(isSelected),
|
|
3568
|
-
...rest,
|
|
3569
|
-
children
|
|
3570
|
-
}
|
|
3571
|
-
);
|
|
3572
|
-
});
|
|
3573
|
-
MenuSelectedIndicator.displayName = "SelectedIndicator";
|
|
3574
3280
|
const MenuMultiSelectItem = genericMemo(function(props) {
|
|
3575
3281
|
const { ref, onSelect, children, closeOnSelect = false, value, ...rest } = props;
|
|
3576
3282
|
const { selected, selectValue, registerValue } = use(MultiSelectContext);
|
|
@@ -3599,7 +3305,12 @@ const MenuMultiSelectItem = genericMemo(function(props) {
|
|
|
3599
3305
|
) });
|
|
3600
3306
|
});
|
|
3601
3307
|
const PagesContext = createContext({});
|
|
3602
|
-
const
|
|
3308
|
+
const MenuPageContent = memo((props) => {
|
|
3309
|
+
const { page, children } = props;
|
|
3310
|
+
const { activePage } = use(PagesContext);
|
|
3311
|
+
return activePage === page ? children : null;
|
|
3312
|
+
});
|
|
3313
|
+
MenuPageContent.displayName = "PageContent";
|
|
3603
3314
|
const MenuPages = memo((props) => {
|
|
3604
3315
|
const { children, defaultPage, page, onPageChange } = props;
|
|
3605
3316
|
const [activePage, setActivePage] = useControlledState(defaultPage ?? "", page, onPageChange);
|
|
@@ -3607,16 +3318,10 @@ const MenuPages = memo((props) => {
|
|
|
3607
3318
|
return /* @__PURE__ */ jsx(PagesContext.Provider, { value: contextValue, children });
|
|
3608
3319
|
});
|
|
3609
3320
|
MenuPages.displayName = "MenuPages";
|
|
3610
|
-
const MenuPageContent = (props) => {
|
|
3611
|
-
const { page, children } = props;
|
|
3612
|
-
const { activePage } = usePagesContext();
|
|
3613
|
-
return activePage === page ? children : null;
|
|
3614
|
-
};
|
|
3615
|
-
MenuPageContent.displayName = "PageContent";
|
|
3616
3321
|
const MenuPageTrigger = memo((props) => {
|
|
3617
3322
|
const { ref, onSelect, page, ...rest } = props;
|
|
3618
|
-
const { refs, setActiveIndex } =
|
|
3619
|
-
const { setActivePage } =
|
|
3323
|
+
const { refs, setActiveIndex } = use(MenuContentContext);
|
|
3324
|
+
const { setActivePage } = use(PagesContext);
|
|
3620
3325
|
const handleSelect = useCallback(() => {
|
|
3621
3326
|
var _a;
|
|
3622
3327
|
onSelect == null ? void 0 : onSelect();
|
|
@@ -3627,6 +3332,100 @@ const MenuPageTrigger = memo((props) => {
|
|
|
3627
3332
|
return /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, closeOnSelect: false, ...rest });
|
|
3628
3333
|
});
|
|
3629
3334
|
MenuPageTrigger.displayName = "MenuPageTrigger";
|
|
3335
|
+
const MENU_OVERFLOW_PADDING = 20;
|
|
3336
|
+
const MENU_CONTENT_PADDING = 8;
|
|
3337
|
+
const MENU_MINIMUM_MAX_HEIGHT = 250;
|
|
3338
|
+
const DEFAULT_OFFSET = 5;
|
|
3339
|
+
const MenuRoot = memo((props) => {
|
|
3340
|
+
const {
|
|
3341
|
+
children,
|
|
3342
|
+
side = "bottom",
|
|
3343
|
+
align = "center",
|
|
3344
|
+
offset: offset$1,
|
|
3345
|
+
loop = false,
|
|
3346
|
+
modal = false,
|
|
3347
|
+
// open state related props
|
|
3348
|
+
open: controlledOpen,
|
|
3349
|
+
onOpenChange,
|
|
3350
|
+
defaultOpen
|
|
3351
|
+
} = props;
|
|
3352
|
+
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
3353
|
+
const [activeIndex, setActiveIndex] = useState(null);
|
|
3354
|
+
const [triggerType, setTriggerType] = useState(null);
|
|
3355
|
+
const elementsRef = useRef([]);
|
|
3356
|
+
const nodeId = useFloatingNodeId();
|
|
3357
|
+
const { refs, floatingStyles, context, middlewareData } = useFloating({
|
|
3358
|
+
nodeId,
|
|
3359
|
+
strategy: "fixed",
|
|
3360
|
+
// TODO: probably some way with template string types to not need the "as Placement"
|
|
3361
|
+
placement: side + (align !== "center" ? "-" + align : ""),
|
|
3362
|
+
whileElementsMounted: autoUpdate,
|
|
3363
|
+
open,
|
|
3364
|
+
onOpenChange: setOpen,
|
|
3365
|
+
middleware: [
|
|
3366
|
+
offset({ mainAxis: offset$1 ?? DEFAULT_OFFSET }),
|
|
3367
|
+
size({
|
|
3368
|
+
apply({ availableHeight, elements }) {
|
|
3369
|
+
elements.floating.style.setProperty(
|
|
3370
|
+
"--overmap-menu-available-height",
|
|
3371
|
+
`${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
|
|
3372
|
+
);
|
|
3373
|
+
},
|
|
3374
|
+
padding: MENU_OVERFLOW_PADDING
|
|
3375
|
+
}),
|
|
3376
|
+
flip({ fallbackStrategy: "initialPlacement" }),
|
|
3377
|
+
shift({ padding: MENU_OVERFLOW_PADDING }),
|
|
3378
|
+
hide()
|
|
3379
|
+
]
|
|
3380
|
+
});
|
|
3381
|
+
const role = useRole(context, {
|
|
3382
|
+
role: "menu"
|
|
3383
|
+
});
|
|
3384
|
+
const dismiss = useDismiss(context, {
|
|
3385
|
+
capture: true,
|
|
3386
|
+
ancestorScroll: triggerType === "context" || triggerType === "virtual"
|
|
3387
|
+
});
|
|
3388
|
+
const click = useClick(context, {
|
|
3389
|
+
enabled: triggerType === "click"
|
|
3390
|
+
});
|
|
3391
|
+
const listNavigation = useListNavigation(context, {
|
|
3392
|
+
listRef: elementsRef,
|
|
3393
|
+
activeIndex,
|
|
3394
|
+
onNavigate: setActiveIndex,
|
|
3395
|
+
loop
|
|
3396
|
+
});
|
|
3397
|
+
const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
|
|
3398
|
+
dismiss,
|
|
3399
|
+
listNavigation,
|
|
3400
|
+
click,
|
|
3401
|
+
role
|
|
3402
|
+
]);
|
|
3403
|
+
return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(
|
|
3404
|
+
MenuContext.Provider,
|
|
3405
|
+
{
|
|
3406
|
+
value: {
|
|
3407
|
+
open,
|
|
3408
|
+
setOpen,
|
|
3409
|
+
refs,
|
|
3410
|
+
context,
|
|
3411
|
+
floatingStyles,
|
|
3412
|
+
elementsRef,
|
|
3413
|
+
getFloatingProps,
|
|
3414
|
+
getItemProps,
|
|
3415
|
+
getReferenceProps,
|
|
3416
|
+
nodeId,
|
|
3417
|
+
activeIndex,
|
|
3418
|
+
setActiveIndex,
|
|
3419
|
+
middlewareData,
|
|
3420
|
+
side,
|
|
3421
|
+
modal,
|
|
3422
|
+
setTriggerType
|
|
3423
|
+
},
|
|
3424
|
+
children
|
|
3425
|
+
}
|
|
3426
|
+
) });
|
|
3427
|
+
});
|
|
3428
|
+
MenuRoot.displayName = "Root";
|
|
3630
3429
|
const MenuScroll = memo((props) => {
|
|
3631
3430
|
const { ref, className, ...rest } = props;
|
|
3632
3431
|
return /* @__PURE__ */ jsx(
|
|
@@ -3665,6 +3464,11 @@ const MenuSelectAllItem = genericMemo((props) => {
|
|
|
3665
3464
|
}
|
|
3666
3465
|
) });
|
|
3667
3466
|
});
|
|
3467
|
+
const MenuSelectedIndicator = memo((props) => {
|
|
3468
|
+
const { ref, children, ...rest } = props;
|
|
3469
|
+
return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
|
|
3470
|
+
});
|
|
3471
|
+
MenuSelectedIndicator.displayName = "MenuSelectedIndicator";
|
|
3668
3472
|
const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
|
|
3669
3473
|
const { ref, children, required, defaultValue, value, onValueChange, ...rest } = props;
|
|
3670
3474
|
return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
|
|
@@ -3680,7 +3484,7 @@ const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
|
|
|
3680
3484
|
const MenuSelectItem = genericMemo(function(props) {
|
|
3681
3485
|
const { ref, value, onSelect, children, closeOnSelect = true, ...rest } = props;
|
|
3682
3486
|
const { selected, selectValue } = use(SelectContext);
|
|
3683
|
-
const isSelected =
|
|
3487
|
+
const isSelected = selected(value);
|
|
3684
3488
|
const handleSelect = useCallback(() => {
|
|
3685
3489
|
onSelect == null ? void 0 : onSelect();
|
|
3686
3490
|
selectValue(value);
|
|
@@ -3691,27 +3495,144 @@ const MenuSelectItem = genericMemo(function(props) {
|
|
|
3691
3495
|
return /* @__PURE__ */ jsx(SelectedIndicatorContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsx(
|
|
3692
3496
|
MenuItem,
|
|
3693
3497
|
{
|
|
3694
|
-
ref,
|
|
3695
|
-
role: "menuitemcheckbox",
|
|
3696
|
-
onSelect: handleSelect,
|
|
3697
|
-
closeOnSelect,
|
|
3698
|
-
"data-state": getSelectedState(isSelected),
|
|
3699
|
-
...rest,
|
|
3700
|
-
children: computedChildren
|
|
3498
|
+
ref,
|
|
3499
|
+
role: "menuitemcheckbox",
|
|
3500
|
+
onSelect: handleSelect,
|
|
3501
|
+
closeOnSelect,
|
|
3502
|
+
"data-state": getSelectedState(isSelected),
|
|
3503
|
+
...rest,
|
|
3504
|
+
children: computedChildren
|
|
3505
|
+
}
|
|
3506
|
+
) });
|
|
3507
|
+
});
|
|
3508
|
+
const MenuSeparator = memo((props) => {
|
|
3509
|
+
const { ref, className, ...rest } = props;
|
|
3510
|
+
const { size: size2 } = use(MenuContentContext);
|
|
3511
|
+
return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparator({ size: size2 }), className), ref, ...rest });
|
|
3512
|
+
});
|
|
3513
|
+
MenuSeparator.displayName = "MenuSeparator";
|
|
3514
|
+
const computeOffsets = (side, alignment) => {
|
|
3515
|
+
switch (side) {
|
|
3516
|
+
case "right":
|
|
3517
|
+
if (alignment === "start") {
|
|
3518
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
|
|
3519
|
+
} else if (alignment === "end") {
|
|
3520
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
|
|
3521
|
+
}
|
|
3522
|
+
break;
|
|
3523
|
+
case "left":
|
|
3524
|
+
if (alignment === "start") {
|
|
3525
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
|
|
3526
|
+
} else if (alignment === "end") {
|
|
3527
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
|
|
3528
|
+
}
|
|
3529
|
+
break;
|
|
3530
|
+
}
|
|
3531
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: 0 };
|
|
3532
|
+
};
|
|
3533
|
+
const MenuSub = memo((props) => {
|
|
3534
|
+
const {
|
|
3535
|
+
children,
|
|
3536
|
+
disabled = false,
|
|
3537
|
+
side = "right",
|
|
3538
|
+
align = "start",
|
|
3539
|
+
closeRoot = false,
|
|
3540
|
+
loop = false,
|
|
3541
|
+
modal = false,
|
|
3542
|
+
// open state related props
|
|
3543
|
+
open: controlledOpen,
|
|
3544
|
+
onOpenChange,
|
|
3545
|
+
defaultOpen
|
|
3546
|
+
} = props;
|
|
3547
|
+
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
3548
|
+
const nodeId = useFloatingNodeId();
|
|
3549
|
+
const { refs, floatingStyles, context } = useFloating({
|
|
3550
|
+
nodeId,
|
|
3551
|
+
strategy: "fixed",
|
|
3552
|
+
whileElementsMounted: autoUpdate,
|
|
3553
|
+
open,
|
|
3554
|
+
onOpenChange: (open2, _event, reason) => {
|
|
3555
|
+
if (reason) setOpen(open2);
|
|
3556
|
+
},
|
|
3557
|
+
placement: side + (align !== "center" ? "-" + align : ""),
|
|
3558
|
+
middleware: [
|
|
3559
|
+
offset({ ...computeOffsets(side, align) }),
|
|
3560
|
+
size({
|
|
3561
|
+
padding: MENU_OVERFLOW_PADDING,
|
|
3562
|
+
apply({ availableHeight, elements }) {
|
|
3563
|
+
elements.floating.style.setProperty(
|
|
3564
|
+
"--overmap-menu-available-height",
|
|
3565
|
+
`${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
|
|
3566
|
+
);
|
|
3567
|
+
}
|
|
3568
|
+
}),
|
|
3569
|
+
flip(),
|
|
3570
|
+
shift({ padding: MENU_OVERFLOW_PADDING }),
|
|
3571
|
+
hide()
|
|
3572
|
+
]
|
|
3573
|
+
});
|
|
3574
|
+
const dismiss = useDismiss(context, {
|
|
3575
|
+
bubbles: closeRoot,
|
|
3576
|
+
outsidePress: closeRoot
|
|
3577
|
+
});
|
|
3578
|
+
const hover = useHover(context, {
|
|
3579
|
+
restMs: 50,
|
|
3580
|
+
handleClose: safePolygon({
|
|
3581
|
+
blockPointerEvents: true,
|
|
3582
|
+
requireIntent: false
|
|
3583
|
+
}),
|
|
3584
|
+
enabled: !disabled
|
|
3585
|
+
});
|
|
3586
|
+
const click = useClick(context, {
|
|
3587
|
+
enabled: !disabled
|
|
3588
|
+
});
|
|
3589
|
+
const elementsRef = useRef([]);
|
|
3590
|
+
const [activeIndex, setActiveIndex] = useState(null);
|
|
3591
|
+
const listNavigation = useListNavigation(context, {
|
|
3592
|
+
listRef: elementsRef,
|
|
3593
|
+
nested: true,
|
|
3594
|
+
activeIndex,
|
|
3595
|
+
onNavigate: setActiveIndex,
|
|
3596
|
+
loop,
|
|
3597
|
+
rtl: side === "left"
|
|
3598
|
+
});
|
|
3599
|
+
const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
|
|
3600
|
+
listNavigation,
|
|
3601
|
+
dismiss,
|
|
3602
|
+
hover,
|
|
3603
|
+
click
|
|
3604
|
+
]);
|
|
3605
|
+
return /* @__PURE__ */ jsx(
|
|
3606
|
+
SubContext.Provider,
|
|
3607
|
+
{
|
|
3608
|
+
value: {
|
|
3609
|
+
open,
|
|
3610
|
+
setOpen,
|
|
3611
|
+
nodeId,
|
|
3612
|
+
refs,
|
|
3613
|
+
floatingStyles,
|
|
3614
|
+
context,
|
|
3615
|
+
elementsRef,
|
|
3616
|
+
activeIndex,
|
|
3617
|
+
setActiveIndex,
|
|
3618
|
+
getFloatingProps,
|
|
3619
|
+
getItemProps,
|
|
3620
|
+
getReferenceProps,
|
|
3621
|
+
disabled,
|
|
3622
|
+
side,
|
|
3623
|
+
closeRoot,
|
|
3624
|
+
modal
|
|
3625
|
+
},
|
|
3626
|
+
children
|
|
3701
3627
|
}
|
|
3702
|
-
)
|
|
3703
|
-
});
|
|
3704
|
-
const MenuSeparator = memo((props) => {
|
|
3705
|
-
const { ref, className, ...rest } = props;
|
|
3706
|
-
const { size: size2 } = useMenuContentContext();
|
|
3707
|
-
return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparator({ size: size2 }), className), ref, ...rest });
|
|
3628
|
+
);
|
|
3708
3629
|
});
|
|
3709
|
-
|
|
3630
|
+
MenuSub.displayName = "SubMenu";
|
|
3710
3631
|
const MenuSubContent = memo((props) => {
|
|
3711
3632
|
var _a;
|
|
3712
3633
|
const { ref: forwardedRef, children, ...rest } = props;
|
|
3713
|
-
const { middlewareData } =
|
|
3714
|
-
const { accentColor, radius, variant, size: size2 } =
|
|
3634
|
+
const { middlewareData } = use(MenuContext);
|
|
3635
|
+
const { accentColor, radius, variant, size: size2 } = use(MenuContentContext);
|
|
3715
3636
|
const {
|
|
3716
3637
|
open,
|
|
3717
3638
|
nodeId,
|
|
@@ -3725,7 +3646,7 @@ const MenuSubContent = memo((props) => {
|
|
|
3725
3646
|
floatingStyles,
|
|
3726
3647
|
setOpen,
|
|
3727
3648
|
side
|
|
3728
|
-
} =
|
|
3649
|
+
} = use(SubContext);
|
|
3729
3650
|
const wrapperRef = useRef(null);
|
|
3730
3651
|
const mergeRefs2 = useMergeRefs([refs.setFloating, wrapperRef]);
|
|
3731
3652
|
const computedFloatingStyles = useMemo(() => {
|
|
@@ -3777,83 +3698,634 @@ const MenuSubContent = memo((props) => {
|
|
|
3777
3698
|
}
|
|
3778
3699
|
)
|
|
3779
3700
|
}
|
|
3780
|
-
)
|
|
3701
|
+
)
|
|
3702
|
+
}
|
|
3703
|
+
) }) }) }) });
|
|
3704
|
+
});
|
|
3705
|
+
MenuSubContent.displayName = "MenuSubContent";
|
|
3706
|
+
const MenuSubTrigger = memo((props) => {
|
|
3707
|
+
const { ref: forwardedRef, children, ...rest } = props;
|
|
3708
|
+
const { refs, getReferenceProps, open, disabled } = use(SubContext);
|
|
3709
|
+
const mergedRefs = useMergeRefs([forwardedRef, refs.setReference]);
|
|
3710
|
+
return /* @__PURE__ */ jsx(
|
|
3711
|
+
MenuItem,
|
|
3712
|
+
{
|
|
3713
|
+
ref: mergedRefs,
|
|
3714
|
+
closeOnSelect: false,
|
|
3715
|
+
"aria-haspopup": "menu",
|
|
3716
|
+
"data-state": getOpenState(open),
|
|
3717
|
+
disabled,
|
|
3718
|
+
...getReferenceProps(rest),
|
|
3719
|
+
children
|
|
3720
|
+
}
|
|
3721
|
+
);
|
|
3722
|
+
});
|
|
3723
|
+
MenuSubTrigger.displayName = "MenuSubTrigger";
|
|
3724
|
+
const MenuVirtualTrigger = memo((props) => {
|
|
3725
|
+
const { virtualElement, disabled } = props;
|
|
3726
|
+
const { refs, setTriggerType, setOpen } = use(MenuContext);
|
|
3727
|
+
useEffect(() => {
|
|
3728
|
+
setTriggerType("virtual");
|
|
3729
|
+
}, [setTriggerType]);
|
|
3730
|
+
useEffect(() => {
|
|
3731
|
+
if (!disabled && virtualElement) {
|
|
3732
|
+
refs.setPositionReference(virtualElement);
|
|
3733
|
+
setOpen(true);
|
|
3734
|
+
} else {
|
|
3735
|
+
refs.setPositionReference(null);
|
|
3736
|
+
setOpen(false);
|
|
3737
|
+
}
|
|
3738
|
+
}, [disabled, refs, setOpen, virtualElement]);
|
|
3739
|
+
return null;
|
|
3740
|
+
});
|
|
3741
|
+
MenuVirtualTrigger.displayName = "VirtualTrigger";
|
|
3742
|
+
const Menu = {
|
|
3743
|
+
Root: MenuRoot,
|
|
3744
|
+
Content: MenuContent,
|
|
3745
|
+
// sub
|
|
3746
|
+
Sub: MenuSub,
|
|
3747
|
+
SubContent: MenuSubContent,
|
|
3748
|
+
SubTrigger: MenuSubTrigger,
|
|
3749
|
+
// pages
|
|
3750
|
+
Pages: MenuPages,
|
|
3751
|
+
PageContent: MenuPageContent,
|
|
3752
|
+
PageTrigger: MenuPageTrigger,
|
|
3753
|
+
// triggers
|
|
3754
|
+
ClickTrigger: MenuClickTrigger,
|
|
3755
|
+
ContextTrigger: MenuContextTrigger,
|
|
3756
|
+
VirtualTrigger: MenuVirtualTrigger,
|
|
3757
|
+
// groups
|
|
3758
|
+
Group: MenuGroup,
|
|
3759
|
+
SelectGroup: MenuSelectGroup,
|
|
3760
|
+
MultiSelectGroup: MenuMultiSelectGroup,
|
|
3761
|
+
// items
|
|
3762
|
+
Item: MenuItem,
|
|
3763
|
+
SelectItem: MenuSelectItem,
|
|
3764
|
+
MultiSelectItem: MenuMultiSelectItem,
|
|
3765
|
+
SelectAllItem: MenuSelectAllItem,
|
|
3766
|
+
CheckboxItem: MenuCheckboxItem,
|
|
3767
|
+
// indicators
|
|
3768
|
+
SelectedIndicator: MenuSelectedIndicator,
|
|
3769
|
+
CheckboxItemIndicator: MenuCheckboxItemIndicator,
|
|
3770
|
+
// input
|
|
3771
|
+
InputRoot: MenuInputRoot,
|
|
3772
|
+
InputField: MenuInputField,
|
|
3773
|
+
InputSlot: MenuInputSlot,
|
|
3774
|
+
// others
|
|
3775
|
+
Label: MenuLabel,
|
|
3776
|
+
Separator: MenuSeparator,
|
|
3777
|
+
Scroll: MenuScroll
|
|
3778
|
+
};
|
|
3779
|
+
const KEY_MAPPING = {
|
|
3780
|
+
next: "ArrowDown",
|
|
3781
|
+
prev: "ArrowUp",
|
|
3782
|
+
first: "PageUp",
|
|
3783
|
+
last: "PageDown",
|
|
3784
|
+
selectItem: "Enter"
|
|
3785
|
+
};
|
|
3786
|
+
const ITEM_SELECTOR = "menu-item";
|
|
3787
|
+
const GROUP_SELECTOR = "menu-group";
|
|
3788
|
+
const MenuRootContext = createContext({});
|
|
3789
|
+
const MenuGroupContext = createContext({});
|
|
3790
|
+
const MenuPageContext = createContext({});
|
|
3791
|
+
const menuRootCva = cva(["w-full", "outline-none"], {
|
|
3792
|
+
variants: {
|
|
3793
|
+
size: {
|
|
3794
|
+
xs: ["p-0.5", "text-xs", "min-w-30"],
|
|
3795
|
+
sm: ["p-0.75", "text-sm", "min-w-35"],
|
|
3796
|
+
md: ["p-1", "text-md", "min-w-40"],
|
|
3797
|
+
lg: ["p-1.25", "text-lg", "min-w-45"],
|
|
3798
|
+
xl: ["p-1.5", "text-xl", "min-w-50"]
|
|
3799
|
+
},
|
|
3800
|
+
radius: {
|
|
3801
|
+
none: ["rounded-none"],
|
|
3802
|
+
xs: ["rounded-xs"],
|
|
3803
|
+
sm: ["rounded-sm"],
|
|
3804
|
+
md: ["rounded-md"],
|
|
3805
|
+
lg: ["rounded-lg"],
|
|
3806
|
+
xl: ["rounded-lg"],
|
|
3807
|
+
full: ["rounded-lg"]
|
|
3808
|
+
}
|
|
3809
|
+
}
|
|
3810
|
+
});
|
|
3811
|
+
const menuItemCva = cva(
|
|
3812
|
+
[
|
|
3813
|
+
"select-none",
|
|
3814
|
+
"relative",
|
|
3815
|
+
"flex",
|
|
3816
|
+
"items-center",
|
|
3817
|
+
"outline-none",
|
|
3818
|
+
"data-[disabled=true]:text-(--base-a8)",
|
|
3819
|
+
"data-[disabled=true]:pointer-events-none",
|
|
3820
|
+
"shrink-0",
|
|
3821
|
+
"py-1",
|
|
3822
|
+
"text-(--base-12)"
|
|
3823
|
+
],
|
|
3824
|
+
{
|
|
3825
|
+
variants: {
|
|
3826
|
+
size: {
|
|
3827
|
+
xs: ["gap-1.5", "px-3"],
|
|
3828
|
+
sm: ["gap-1.75", "px-3.5"],
|
|
3829
|
+
md: ["gap-2", "px-4"],
|
|
3830
|
+
lg: ["gap-2.25", "px-4.5"],
|
|
3831
|
+
xl: ["gap-2.5", "px-5"]
|
|
3832
|
+
},
|
|
3833
|
+
variant: {
|
|
3834
|
+
solid: [
|
|
3835
|
+
"data-[active=true]:not-[data-[disabled=true]]:text-(--accent-contrast)",
|
|
3836
|
+
"data-[active=true]:not-[data-[disabled=true]]:bg-(--accent-a9)",
|
|
3837
|
+
"data-[active=true]:not-[data-[disabled=true]]:active:brightness-110"
|
|
3838
|
+
],
|
|
3839
|
+
soft: [
|
|
3840
|
+
"data-[active=true]:not-[data-[disabled=true]]:bg-(--accent-a3)",
|
|
3841
|
+
"data-[active=true]:not-[data-[disabled=true]]:active:bg-(--accent-a4)"
|
|
3842
|
+
]
|
|
3843
|
+
}
|
|
3844
|
+
}
|
|
3845
|
+
}
|
|
3846
|
+
);
|
|
3847
|
+
const menuGroupLabelCva = cva(["text-(--base-a11)", "flex", "items-center", "select-none", "py-1"], {
|
|
3848
|
+
variants: {
|
|
3849
|
+
size: {
|
|
3850
|
+
xs: ["gap-1.5", "px-3", "text-xs"],
|
|
3851
|
+
sm: ["gap-1.75", "px-3.5", "text-xs"],
|
|
3852
|
+
md: ["gap-2", "px-4", "text-sm"],
|
|
3853
|
+
lg: ["gap-2.25", "px-4.5", "text-base"],
|
|
3854
|
+
xl: ["gap-2.5", "px-5", "text-lg"]
|
|
3855
|
+
}
|
|
3856
|
+
}
|
|
3857
|
+
});
|
|
3858
|
+
const menuSeparatorCva = cva(["h-px", "bg-(--base-a6)", "w-auto", "shrink-0"], {
|
|
3859
|
+
variants: {
|
|
3860
|
+
size: {
|
|
3861
|
+
xs: ["-mx-0.5", "my-0.5"],
|
|
3862
|
+
sm: ["-mx-0.75", "my-0.75"],
|
|
3863
|
+
md: ["-mx-1", "my-1"],
|
|
3864
|
+
lg: ["-mx-1.25", "my-1.25"],
|
|
3865
|
+
xl: ["-mx-1.5", "my-1.5"]
|
|
3866
|
+
}
|
|
3867
|
+
}
|
|
3868
|
+
});
|
|
3869
|
+
const MenuV2Item = memo((props) => {
|
|
3870
|
+
const {
|
|
3871
|
+
ref,
|
|
3872
|
+
children,
|
|
3873
|
+
className,
|
|
3874
|
+
disabled = false,
|
|
3875
|
+
onClick,
|
|
3876
|
+
onSelect,
|
|
3877
|
+
onPointerEnter,
|
|
3878
|
+
onPointerLeave,
|
|
3879
|
+
onPointerMove,
|
|
3880
|
+
...rest
|
|
3881
|
+
} = props;
|
|
3882
|
+
const internalRef = useRef(null);
|
|
3883
|
+
const itemId = useId();
|
|
3884
|
+
const { activeItemId, setActiveItemId, size: size2, variant, radius } = use(MenuRootContext);
|
|
3885
|
+
const isActive = itemId === activeItemId;
|
|
3886
|
+
const handleSelect = useCallback(
|
|
3887
|
+
(e) => {
|
|
3888
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
3889
|
+
},
|
|
3890
|
+
[onSelect]
|
|
3891
|
+
);
|
|
3892
|
+
const handleClick = useCallback(
|
|
3893
|
+
(e) => {
|
|
3894
|
+
onClick == null ? void 0 : onClick(e);
|
|
3895
|
+
handleSelect(new Event("menu-select"));
|
|
3896
|
+
},
|
|
3897
|
+
[handleSelect, onClick]
|
|
3898
|
+
);
|
|
3899
|
+
const handlePointerEnter = useCallback(
|
|
3900
|
+
(e) => {
|
|
3901
|
+
onPointerEnter == null ? void 0 : onPointerEnter(e);
|
|
3902
|
+
if (e.defaultPrevented) return;
|
|
3903
|
+
setActiveItemId(itemId);
|
|
3904
|
+
},
|
|
3905
|
+
[onPointerEnter, setActiveItemId, itemId]
|
|
3906
|
+
);
|
|
3907
|
+
const handlePointerLeave = useCallback(
|
|
3908
|
+
(e) => {
|
|
3909
|
+
onPointerLeave == null ? void 0 : onPointerLeave(e);
|
|
3910
|
+
if (e.defaultPrevented) return;
|
|
3911
|
+
setActiveItemId(null);
|
|
3912
|
+
},
|
|
3913
|
+
[onPointerLeave, setActiveItemId]
|
|
3914
|
+
);
|
|
3915
|
+
const handlePointerMove = useCallback(
|
|
3916
|
+
(e) => {
|
|
3917
|
+
onPointerMove == null ? void 0 : onPointerMove(e);
|
|
3918
|
+
if (e.defaultPrevented) return;
|
|
3919
|
+
setActiveItemId(itemId);
|
|
3920
|
+
},
|
|
3921
|
+
[onPointerMove, itemId, setActiveItemId]
|
|
3922
|
+
);
|
|
3923
|
+
useEffect(() => {
|
|
3924
|
+
if (!internalRef.current) return;
|
|
3925
|
+
const element = internalRef.current;
|
|
3926
|
+
element.addEventListener("menu-select", handleSelect);
|
|
3927
|
+
return () => {
|
|
3928
|
+
element.removeEventListener("menu-select", handleSelect);
|
|
3929
|
+
};
|
|
3930
|
+
}, [handleSelect]);
|
|
3931
|
+
return /* @__PURE__ */ jsx(
|
|
3932
|
+
"div",
|
|
3933
|
+
{
|
|
3934
|
+
ref: mergeRefs([ref, internalRef]),
|
|
3935
|
+
className: cx(menuItemCva({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
|
|
3936
|
+
role: "menuitem",
|
|
3937
|
+
onClick: handleClick,
|
|
3938
|
+
onPointerEnter: handlePointerEnter,
|
|
3939
|
+
onPointerLeave: handlePointerLeave,
|
|
3940
|
+
onPointerMove: handlePointerMove,
|
|
3941
|
+
...{ [ITEM_SELECTOR]: itemId },
|
|
3942
|
+
"data-active": getBooleanState(isActive),
|
|
3943
|
+
"data-disabled": getBooleanState(disabled),
|
|
3944
|
+
"aria-disabled": getBooleanState(disabled),
|
|
3945
|
+
...rest,
|
|
3946
|
+
children
|
|
3947
|
+
}
|
|
3948
|
+
);
|
|
3949
|
+
});
|
|
3950
|
+
MenuV2Item.displayName = "MenuItem";
|
|
3951
|
+
const MenuV2CheckboxItem = memo((props) => {
|
|
3952
|
+
const { ref, checked, onCheckedChange, onSelect, ...rest } = props;
|
|
3953
|
+
const handleSelect = useCallback(
|
|
3954
|
+
(e) => {
|
|
3955
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
3956
|
+
if (e.defaultPrevented) return;
|
|
3957
|
+
switch (checked) {
|
|
3958
|
+
case true:
|
|
3959
|
+
onCheckedChange(false);
|
|
3960
|
+
break;
|
|
3961
|
+
case "indeterminate":
|
|
3962
|
+
onCheckedChange(true);
|
|
3963
|
+
break;
|
|
3964
|
+
case false:
|
|
3965
|
+
onCheckedChange(true);
|
|
3966
|
+
break;
|
|
3967
|
+
}
|
|
3968
|
+
},
|
|
3969
|
+
[checked, onCheckedChange, onSelect]
|
|
3970
|
+
);
|
|
3971
|
+
return /* @__PURE__ */ jsx(CheckedIndicatorContext.Provider, { value: checked, children: /* @__PURE__ */ jsx(MenuV2Item, { ref, onSelect: handleSelect, ...rest }) });
|
|
3972
|
+
});
|
|
3973
|
+
MenuV2CheckboxItem.displayName = "MenuCheckboxItem";
|
|
3974
|
+
const MenuV2CheckedIndicator = memo((props) => {
|
|
3975
|
+
const { ref, children, ...rest } = props;
|
|
3976
|
+
return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
|
|
3977
|
+
});
|
|
3978
|
+
MenuV2CheckedIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
3979
|
+
const MenuV2Group = memo((props) => {
|
|
3980
|
+
const { ref, children, ...rest } = props;
|
|
3981
|
+
const groupId = useId();
|
|
3982
|
+
const [labelId, setLabelId] = useState(null);
|
|
3983
|
+
const contextValue = useMemo(
|
|
3984
|
+
() => ({
|
|
3985
|
+
labelId,
|
|
3986
|
+
setLabelId
|
|
3987
|
+
}),
|
|
3988
|
+
[labelId]
|
|
3989
|
+
);
|
|
3990
|
+
return /* @__PURE__ */ jsx("div", { ref, role: "group", ...{ [GROUP_SELECTOR]: groupId }, "aria-labelledby": labelId ?? void 0, ...rest, children: /* @__PURE__ */ jsx(MenuGroupContext, { value: contextValue, children }) });
|
|
3991
|
+
});
|
|
3992
|
+
MenuV2Group.displayName = "MenuGroup";
|
|
3993
|
+
const MenuV2GroupLabel = memo((props) => {
|
|
3994
|
+
const { ref, children, id, className, ...rest } = props;
|
|
3995
|
+
const labelId = useFallbackId(id);
|
|
3996
|
+
const { size: size2 } = use(MenuRootContext);
|
|
3997
|
+
const { setLabelId } = use(MenuGroupContext);
|
|
3998
|
+
useEffect(() => {
|
|
3999
|
+
setLabelId(labelId);
|
|
4000
|
+
}, [labelId, setLabelId]);
|
|
4001
|
+
return /* @__PURE__ */ jsx("div", { ref, id: labelId, className: cx(menuGroupLabelCva({ size: size2 }), className), ...rest, children });
|
|
4002
|
+
});
|
|
4003
|
+
MenuV2GroupLabel.displayName = "MenuGroupLabel";
|
|
4004
|
+
const MenuV2SelectAllItem = genericMemo((props) => {
|
|
4005
|
+
const { ref, children, onSelect, ...rest } = props;
|
|
4006
|
+
const { allSelected, someSelected, toggleSelectAll } = use(MultiSelectContext);
|
|
4007
|
+
const selectedState = allSelected ? true : someSelected ? "indeterminate" : false;
|
|
4008
|
+
const handleSelect = useCallback(
|
|
4009
|
+
(e) => {
|
|
4010
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
4011
|
+
if (e.defaultPrevented) return;
|
|
4012
|
+
toggleSelectAll();
|
|
4013
|
+
},
|
|
4014
|
+
[onSelect, toggleSelectAll]
|
|
4015
|
+
);
|
|
4016
|
+
return /* @__PURE__ */ jsx(MenuV2Item, { onSelect: handleSelect, ref, "data-state": getCheckedState(selectedState), ...rest, children: /* @__PURE__ */ jsx(CheckedIndicatorContext, { value: selectedState, children }) });
|
|
4017
|
+
});
|
|
4018
|
+
const MenuV2MultiSelectGroup = genericMemo(function MenuMultiSelectGroup3(props) {
|
|
4019
|
+
const { ref, children, defaultValues, values, onValuesChange, ...rest } = props;
|
|
4020
|
+
return /* @__PURE__ */ jsx(MenuV2Group, { ref, ...rest, children: /* @__PURE__ */ jsx(MultiSelectProvider, { defaultValues, values, onValuesChange, children }) });
|
|
4021
|
+
});
|
|
4022
|
+
const MenuV2MultiSelectItem = genericMemo(function(props) {
|
|
4023
|
+
const { ref, onSelect, children, value, ...rest } = props;
|
|
4024
|
+
const { selected, selectValue, registerValue } = use(MultiSelectContext);
|
|
4025
|
+
useLayoutEffect(() => {
|
|
4026
|
+
return registerValue(value);
|
|
4027
|
+
}, [registerValue, value]);
|
|
4028
|
+
const isSelected = selected(value);
|
|
4029
|
+
const handleSelect = useCallback(
|
|
4030
|
+
(e) => {
|
|
4031
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
4032
|
+
if (e.defaultPrevented) return;
|
|
4033
|
+
selectValue(value);
|
|
4034
|
+
},
|
|
4035
|
+
[onSelect, selectValue, value]
|
|
4036
|
+
);
|
|
4037
|
+
return /* @__PURE__ */ jsx(
|
|
4038
|
+
MenuV2Item,
|
|
4039
|
+
{
|
|
4040
|
+
ref,
|
|
4041
|
+
role: "menuitemcheckbox",
|
|
4042
|
+
onSelect: handleSelect,
|
|
4043
|
+
"data-state": getSelectedState(isSelected),
|
|
4044
|
+
...rest,
|
|
4045
|
+
children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isSelected, children })
|
|
4046
|
+
}
|
|
4047
|
+
);
|
|
4048
|
+
});
|
|
4049
|
+
const MenuV2Page = memo((props) => {
|
|
4050
|
+
const { children, ref, page, ...rest } = props;
|
|
4051
|
+
const { page: activePage } = use(MenuPageContext);
|
|
4052
|
+
const isActive = page === activePage;
|
|
4053
|
+
return /* @__PURE__ */ jsx("div", { ref, "data-active": getActiveState(isActive), hidden: !isActive, ...rest, children: isActive ? children : null });
|
|
4054
|
+
});
|
|
4055
|
+
MenuV2Page.displayName = "MenuPage";
|
|
4056
|
+
const MenuV2Pages = memo((props) => {
|
|
4057
|
+
const { children, defaultPage = "", page: controlledPage, onPageChange } = props;
|
|
4058
|
+
const [page, setPage] = useControlledState(defaultPage, controlledPage, onPageChange);
|
|
4059
|
+
const contextValue = useMemo(
|
|
4060
|
+
() => ({
|
|
4061
|
+
page,
|
|
4062
|
+
setPage
|
|
4063
|
+
}),
|
|
4064
|
+
[page, setPage]
|
|
4065
|
+
);
|
|
4066
|
+
return /* @__PURE__ */ jsx(MenuPageContext, { value: contextValue, children });
|
|
4067
|
+
});
|
|
4068
|
+
MenuV2Pages.displayName = "MenuPages";
|
|
4069
|
+
const MenuV2PageTriggerItem = memo((props) => {
|
|
4070
|
+
const { ref, children, page, onSelect, ...rest } = props;
|
|
4071
|
+
const { page: activePage, setPage } = use(MenuPageContext);
|
|
4072
|
+
const isActive = page === activePage;
|
|
4073
|
+
const handleSelect = useCallback(
|
|
4074
|
+
(e) => {
|
|
4075
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
4076
|
+
if (e.defaultPrevented) return;
|
|
4077
|
+
setPage(page);
|
|
4078
|
+
},
|
|
4079
|
+
[onSelect, page, setPage]
|
|
4080
|
+
);
|
|
4081
|
+
return /* @__PURE__ */ jsx(MenuV2Item, { ref, onSelect: handleSelect, "data-state": getActiveState(isActive), ...rest, children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isActive, children }) });
|
|
4082
|
+
});
|
|
4083
|
+
MenuV2PageTriggerItem.displayName = "CommandMenuPageTriggerItem";
|
|
4084
|
+
const computeNextIndex = (index, length, direction, loop) => {
|
|
4085
|
+
switch (direction) {
|
|
4086
|
+
case "next":
|
|
4087
|
+
return index === length - 1 ? loop ? 0 : index : index + 1;
|
|
4088
|
+
case "prev":
|
|
4089
|
+
return index === 0 ? loop ? length - 1 : index : index - 1;
|
|
4090
|
+
}
|
|
4091
|
+
};
|
|
4092
|
+
const MenuV2Root = memo((props) => {
|
|
4093
|
+
const providerContext = useProvider();
|
|
4094
|
+
const {
|
|
4095
|
+
ref,
|
|
4096
|
+
children,
|
|
4097
|
+
className,
|
|
4098
|
+
onKeyDown,
|
|
4099
|
+
loop = false,
|
|
4100
|
+
// style props
|
|
4101
|
+
radius = providerContext.radius,
|
|
4102
|
+
accentColor = "base",
|
|
4103
|
+
size: size2 = "md",
|
|
4104
|
+
variant = "soft",
|
|
4105
|
+
...rest
|
|
4106
|
+
} = props;
|
|
4107
|
+
const internalRef = useRef(null);
|
|
4108
|
+
const [activeItemId, setActiveItemId] = useState(null);
|
|
4109
|
+
const getItems = useCallback((element) => {
|
|
4110
|
+
return Array.from(element.querySelectorAll(`[${ITEM_SELECTOR}]:not([data-disabled=true]`));
|
|
4111
|
+
}, []);
|
|
4112
|
+
const getFirstItem = useCallback(
|
|
4113
|
+
(element) => {
|
|
4114
|
+
return getItems(element).at(0);
|
|
4115
|
+
},
|
|
4116
|
+
[getItems]
|
|
4117
|
+
);
|
|
4118
|
+
const getLastItem = useCallback(
|
|
4119
|
+
(element) => {
|
|
4120
|
+
return getItems(element).at(-1);
|
|
4121
|
+
},
|
|
4122
|
+
[getItems]
|
|
4123
|
+
);
|
|
4124
|
+
const getActiveItem = useCallback(
|
|
4125
|
+
(element) => {
|
|
4126
|
+
return getItems(element).find((itemEle) => itemEle.getAttribute(ITEM_SELECTOR) === activeItemId);
|
|
4127
|
+
},
|
|
4128
|
+
[activeItemId, getItems]
|
|
4129
|
+
);
|
|
4130
|
+
const getNextItem = useCallback(
|
|
4131
|
+
(element, direction) => {
|
|
4132
|
+
const items = getItems(element);
|
|
4133
|
+
const activeItem = getActiveItem(element);
|
|
4134
|
+
const activeItemIndex = items.findIndex((itemEle) => itemEle === activeItem);
|
|
4135
|
+
const nextItemIndex = computeNextIndex(activeItemIndex, items.length, direction, loop);
|
|
4136
|
+
return items[nextItemIndex];
|
|
4137
|
+
},
|
|
4138
|
+
[getActiveItem, getItems, loop]
|
|
4139
|
+
);
|
|
4140
|
+
const getGroups = useCallback(() => {
|
|
4141
|
+
if (!internalRef.current) return [];
|
|
4142
|
+
return Array.from(internalRef.current.querySelectorAll(`[${GROUP_SELECTOR}]`));
|
|
4143
|
+
}, []);
|
|
4144
|
+
const getActiveGroup = useCallback(() => {
|
|
4145
|
+
var _a;
|
|
4146
|
+
return ((_a = getActiveItem(internalRef.current)) == null ? void 0 : _a.closest(`[${GROUP_SELECTOR}]`)) ?? void 0;
|
|
4147
|
+
}, [getActiveItem]);
|
|
4148
|
+
const getNextGroup = useCallback(
|
|
4149
|
+
(direction) => {
|
|
4150
|
+
const groups = getGroups();
|
|
4151
|
+
const activeGroup = getActiveGroup();
|
|
4152
|
+
const activeGroupIndex = groups.findIndex((groupEle) => groupEle === activeGroup);
|
|
4153
|
+
const nextGroupIndex = computeNextIndex(activeGroupIndex, groups.length, direction, loop);
|
|
4154
|
+
return groups[nextGroupIndex];
|
|
4155
|
+
},
|
|
4156
|
+
[getActiveGroup, getGroups, loop]
|
|
4157
|
+
);
|
|
4158
|
+
const getFirstGroup = useCallback(() => {
|
|
4159
|
+
return getGroups().at(0);
|
|
4160
|
+
}, [getGroups]);
|
|
4161
|
+
const getLastGroup = useCallback(() => {
|
|
4162
|
+
return getGroups().at(-1);
|
|
4163
|
+
}, [getGroups]);
|
|
4164
|
+
const handleKeyDown = useCallback(
|
|
4165
|
+
(e) => {
|
|
4166
|
+
onKeyDown == null ? void 0 : onKeyDown(e);
|
|
4167
|
+
if (e.defaultPrevented) return;
|
|
4168
|
+
switch (e.code) {
|
|
4169
|
+
case KEY_MAPPING.selectItem: {
|
|
4170
|
+
const activeItem = getActiveItem(internalRef.current);
|
|
4171
|
+
if (activeItem) activeItem.dispatchEvent(new Event("menu-select"));
|
|
4172
|
+
break;
|
|
4173
|
+
}
|
|
4174
|
+
case KEY_MAPPING.next: {
|
|
4175
|
+
let nextItem;
|
|
4176
|
+
if (e.shiftKey) {
|
|
4177
|
+
const nextGroup = getNextGroup("next");
|
|
4178
|
+
if (!nextGroup) return;
|
|
4179
|
+
nextItem = getFirstItem(nextGroup);
|
|
4180
|
+
} else {
|
|
4181
|
+
nextItem = getNextItem(internalRef.current, "next");
|
|
4182
|
+
}
|
|
4183
|
+
if (!nextItem) return;
|
|
4184
|
+
setActiveItemId(nextItem.getAttribute(ITEM_SELECTOR));
|
|
4185
|
+
break;
|
|
4186
|
+
}
|
|
4187
|
+
case KEY_MAPPING.prev: {
|
|
4188
|
+
let prevItem;
|
|
4189
|
+
if (e.shiftKey) {
|
|
4190
|
+
const prevGroup = getNextGroup("prev");
|
|
4191
|
+
if (!prevGroup) return;
|
|
4192
|
+
prevItem = getFirstItem(prevGroup);
|
|
4193
|
+
} else {
|
|
4194
|
+
prevItem = getNextItem(internalRef.current, "prev");
|
|
4195
|
+
}
|
|
4196
|
+
if (!prevItem) return;
|
|
4197
|
+
setActiveItemId(prevItem.getAttribute(ITEM_SELECTOR));
|
|
4198
|
+
break;
|
|
4199
|
+
}
|
|
4200
|
+
case KEY_MAPPING.first: {
|
|
4201
|
+
let firstItem;
|
|
4202
|
+
if (e.shiftKey) {
|
|
4203
|
+
const firstGroup = getFirstGroup();
|
|
4204
|
+
if (!firstGroup) return;
|
|
4205
|
+
firstItem = getFirstItem(firstGroup);
|
|
4206
|
+
} else {
|
|
4207
|
+
firstItem = getFirstItem(internalRef.current);
|
|
4208
|
+
}
|
|
4209
|
+
if (!firstItem) return;
|
|
4210
|
+
setActiveItemId(firstItem.getAttribute(ITEM_SELECTOR));
|
|
4211
|
+
break;
|
|
4212
|
+
}
|
|
4213
|
+
case KEY_MAPPING.last: {
|
|
4214
|
+
let lastItem;
|
|
4215
|
+
if (e.shiftKey) {
|
|
4216
|
+
const lastGroup = getLastGroup();
|
|
4217
|
+
if (!lastGroup) return;
|
|
4218
|
+
lastItem = getFirstItem(lastGroup);
|
|
4219
|
+
} else {
|
|
4220
|
+
lastItem = getLastItem(internalRef.current);
|
|
4221
|
+
}
|
|
4222
|
+
if (!lastItem) return;
|
|
4223
|
+
setActiveItemId(lastItem.getAttribute(ITEM_SELECTOR));
|
|
4224
|
+
break;
|
|
4225
|
+
}
|
|
4226
|
+
}
|
|
4227
|
+
},
|
|
4228
|
+
[getActiveItem, getFirstGroup, getFirstItem, getLastGroup, getLastItem, getNextGroup, getNextItem, onKeyDown]
|
|
4229
|
+
);
|
|
4230
|
+
useEffect(() => {
|
|
4231
|
+
var _a;
|
|
4232
|
+
const firstItem = getFirstItem(internalRef.current);
|
|
4233
|
+
if (!firstItem) return;
|
|
4234
|
+
(_a = internalRef.current) == null ? void 0 : _a.focus();
|
|
4235
|
+
setActiveItemId(firstItem.getAttribute(ITEM_SELECTOR));
|
|
4236
|
+
}, [getFirstItem]);
|
|
4237
|
+
const contextValue = useMemo(
|
|
4238
|
+
() => ({
|
|
4239
|
+
activeItemId,
|
|
4240
|
+
setActiveItemId,
|
|
4241
|
+
// style props
|
|
4242
|
+
accentColor,
|
|
4243
|
+
radius,
|
|
4244
|
+
variant,
|
|
4245
|
+
size: size2
|
|
4246
|
+
}),
|
|
4247
|
+
[accentColor, activeItemId, radius, size2, variant]
|
|
4248
|
+
);
|
|
4249
|
+
return /* @__PURE__ */ jsx(
|
|
4250
|
+
"div",
|
|
4251
|
+
{
|
|
4252
|
+
ref: mergeRefs([ref, internalRef]),
|
|
4253
|
+
className: cx(menuRootCva({ size: size2 }), radiusCva({ radius, maxLarge: true }), className),
|
|
4254
|
+
role: "menu",
|
|
4255
|
+
onKeyDown: handleKeyDown,
|
|
4256
|
+
tabIndex: 0,
|
|
4257
|
+
"aria-activedescendant": activeItemId ?? void 0,
|
|
4258
|
+
"data-accent-color": accentColor,
|
|
4259
|
+
...rest,
|
|
4260
|
+
children: /* @__PURE__ */ jsx(MenuRootContext, { value: contextValue, children })
|
|
3781
4261
|
}
|
|
3782
|
-
)
|
|
4262
|
+
);
|
|
3783
4263
|
});
|
|
3784
|
-
|
|
3785
|
-
const
|
|
3786
|
-
const { ref
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
4264
|
+
MenuV2Root.displayName = "MenuRoot";
|
|
4265
|
+
const MenuV2SelectedIndicator = memo((props) => {
|
|
4266
|
+
const { ref, children, ...rest } = props;
|
|
4267
|
+
return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
|
|
4268
|
+
});
|
|
4269
|
+
MenuV2SelectedIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
4270
|
+
const MenuV2SelectGroup = genericMemo(function MenuSelectGroup3(props) {
|
|
4271
|
+
const { ref, children, required, defaultValue, value, onValueChange, ...rest } = props;
|
|
4272
|
+
return /* @__PURE__ */ jsx(MenuV2Group, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
|
|
4273
|
+
SingleSelectNotRequiredProvider,
|
|
3791
4274
|
{
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
"data-state": getOpenState(open),
|
|
3796
|
-
disabled,
|
|
3797
|
-
...getReferenceProps(rest),
|
|
4275
|
+
defaultValue,
|
|
4276
|
+
value,
|
|
4277
|
+
onValueChange,
|
|
3798
4278
|
children
|
|
3799
4279
|
}
|
|
3800
|
-
);
|
|
4280
|
+
) });
|
|
3801
4281
|
});
|
|
3802
|
-
|
|
3803
|
-
const
|
|
3804
|
-
const {
|
|
3805
|
-
const
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
4282
|
+
const MenuV2SelectItem = genericMemo(function(props) {
|
|
4283
|
+
const { ref, value, onSelect, children, ...rest } = props;
|
|
4284
|
+
const { selected, selectValue } = use(SelectContext);
|
|
4285
|
+
const isSelected = selected(value);
|
|
4286
|
+
const handleSelect = useCallback(
|
|
4287
|
+
(e) => {
|
|
4288
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
4289
|
+
if (e.defaultPrevented) return;
|
|
4290
|
+
selectValue(value);
|
|
4291
|
+
},
|
|
4292
|
+
[onSelect, selectValue, value]
|
|
4293
|
+
);
|
|
4294
|
+
return /* @__PURE__ */ jsx(
|
|
4295
|
+
MenuV2Item,
|
|
4296
|
+
{
|
|
4297
|
+
ref,
|
|
4298
|
+
role: "menuitemcheckbox",
|
|
4299
|
+
onSelect: handleSelect,
|
|
4300
|
+
"data-state": getSelectedState(isSelected),
|
|
4301
|
+
...rest,
|
|
4302
|
+
children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isSelected, children })
|
|
3816
4303
|
}
|
|
3817
|
-
|
|
3818
|
-
return null;
|
|
4304
|
+
);
|
|
3819
4305
|
});
|
|
3820
|
-
|
|
3821
|
-
const
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
3832
|
-
|
|
3833
|
-
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
MultiSelectItem: MenuMultiSelectItem,
|
|
3844
|
-
SelectAllItem: MenuSelectAllItem,
|
|
3845
|
-
CheckboxItem: MenuCheckboxItem,
|
|
3846
|
-
// indicators
|
|
3847
|
-
SelectedIndicator: MenuSelectedIndicator,
|
|
3848
|
-
CheckboxItemIndicator: MenuCheckboxItemIndicator,
|
|
3849
|
-
// input
|
|
3850
|
-
InputRoot: MenuInputRoot,
|
|
3851
|
-
InputField: MenuInputField,
|
|
3852
|
-
InputSlot: MenuInputSlot,
|
|
3853
|
-
// others
|
|
3854
|
-
Label: MenuLabel,
|
|
3855
|
-
Separator: MenuSeparator,
|
|
3856
|
-
Scroll: MenuScroll
|
|
4306
|
+
const MenuV2Separator = memo((props) => {
|
|
4307
|
+
const { ref, className, ...rest } = props;
|
|
4308
|
+
const { size: size2 } = use(MenuRootContext);
|
|
4309
|
+
return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparatorCva({ size: size2 }), className), ref, ...rest });
|
|
4310
|
+
});
|
|
4311
|
+
MenuV2Separator.displayName = "MenuSeparator";
|
|
4312
|
+
const MenuV2 = {
|
|
4313
|
+
Root: MenuV2Root,
|
|
4314
|
+
Group: MenuV2Group,
|
|
4315
|
+
GroupLabel: MenuV2GroupLabel,
|
|
4316
|
+
Item: MenuV2Item,
|
|
4317
|
+
Separator: MenuV2Separator,
|
|
4318
|
+
SelectGroup: MenuV2SelectGroup,
|
|
4319
|
+
SelectItem: MenuV2SelectItem,
|
|
4320
|
+
MultiSelectGroup: MenuV2MultiSelectGroup,
|
|
4321
|
+
MultiSelectItem: MenuV2MultiSelectItem,
|
|
4322
|
+
SelectAllItem: MenuV2SelectAllItem,
|
|
4323
|
+
SelectedIndicator: MenuV2SelectedIndicator,
|
|
4324
|
+
CheckboxItem: MenuV2CheckboxItem,
|
|
4325
|
+
CheckedIndicator: MenuV2CheckedIndicator,
|
|
4326
|
+
Pages: MenuV2Pages,
|
|
4327
|
+
Page: MenuV2Page,
|
|
4328
|
+
PageTriggerItem: MenuV2PageTriggerItem
|
|
3857
4329
|
};
|
|
3858
4330
|
const OneTimePasswordFieldHiddenInput = memo((props) => {
|
|
3859
4331
|
return /* @__PURE__ */ jsx(RadixOneTimePasswordField.HiddenInput, { ...props });
|
|
@@ -4022,9 +4494,9 @@ const ErrorFallback = memo((props) => {
|
|
|
4022
4494
|
}, [onRetry, resetBoundary]);
|
|
4023
4495
|
return /* @__PURE__ */ jsxs("div", { className: "flex w-full gap-2", style: outerFlexStyles, children: [
|
|
4024
4496
|
/* @__PURE__ */ jsx("div", { style: { flexGrow: 1 } }),
|
|
4025
|
-
/* @__PURE__ */ jsx(LuIcon, { icon:
|
|
4497
|
+
/* @__PURE__ */ jsx(LuIcon, { icon: AlertTriangle, size: height, style: centerStyles }),
|
|
4026
4498
|
/* @__PURE__ */ jsx("span", { style: { lineHeight: height, ...centerStyles }, children: message }),
|
|
4027
|
-
/* @__PURE__ */ jsx(IconButton, { "aria-label": "Try again", variant: "soft", onClick: handleRetry, style: centerStyles, children: /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
4499
|
+
/* @__PURE__ */ jsx(IconButton, { "aria-label": "Try again", variant: "soft", onClick: handleRetry, style: centerStyles, children: /* @__PURE__ */ jsx(LuIcon, { icon: RotateCcw, size: height }) }),
|
|
4028
4500
|
/* @__PURE__ */ jsx("div", { style: { flexGrow: 1 } })
|
|
4029
4501
|
] });
|
|
4030
4502
|
});
|
|
@@ -4032,8 +4504,8 @@ ErrorFallback.displayName = "ErrorFallback";
|
|
|
4032
4504
|
const OvermapErrorBoundary = memo((props) => {
|
|
4033
4505
|
const { absoluteCentering, message } = props;
|
|
4034
4506
|
const [attempt, setAttempt] = useState(0);
|
|
4035
|
-
const logError = useCallback((
|
|
4036
|
-
console.error("Error in OvermapErrorBoundary:",
|
|
4507
|
+
const logError = useCallback((error2, info2) => {
|
|
4508
|
+
console.error("Error in OvermapErrorBoundary:", error2, info2);
|
|
4037
4509
|
setAttempt((prev) => prev + 1);
|
|
4038
4510
|
}, []);
|
|
4039
4511
|
const handleRetry = useCallback(() => {
|
|
@@ -5387,7 +5859,7 @@ const TableRowHeaderCell = memo((props) => {
|
|
|
5387
5859
|
const { size: size2, border, variant } = useContext(TableContext);
|
|
5388
5860
|
return /* @__PURE__ */ jsx("th", { ref, className: cx(tableCellCva({ size: size2, border, cell: true, variant }), className), ...rest });
|
|
5389
5861
|
});
|
|
5390
|
-
TableRowHeaderCell.displayName = "
|
|
5862
|
+
TableRowHeaderCell.displayName = "TableRowHeaderCell";
|
|
5391
5863
|
const Table = {
|
|
5392
5864
|
Root: TableRoot,
|
|
5393
5865
|
Header: TableHeader,
|
|
@@ -5620,170 +6092,184 @@ const TextArea = memo((props) => {
|
|
|
5620
6092
|
);
|
|
5621
6093
|
});
|
|
5622
6094
|
TextArea.displayName = "TextArea";
|
|
5623
|
-
const
|
|
5624
|
-
|
|
5625
|
-
|
|
5626
|
-
|
|
5627
|
-
|
|
5628
|
-
|
|
5629
|
-
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
"data-[state='closed']:zoom-out-95"
|
|
5633
|
-
],
|
|
5634
|
-
{
|
|
5635
|
-
variants: {
|
|
5636
|
-
variant: {
|
|
5637
|
-
surface: ["bg-(--accent-1)", "text-(--accent-11)", "ring-1", "ring-inset", "ring-(--accent-6)"],
|
|
5638
|
-
soft: ["bg-(--accent-1)", "text-(--accent-11)"]
|
|
5639
|
-
},
|
|
5640
|
-
size: {
|
|
5641
|
-
xs: ["text-xs", "p-2"],
|
|
5642
|
-
sm: ["text-sm", "p-3"],
|
|
5643
|
-
md: ["text-base", "p-4"],
|
|
5644
|
-
lg: ["text-lg", "p-5"],
|
|
5645
|
-
xl: ["text-xl", "p-6"]
|
|
5646
|
-
}
|
|
5647
|
-
},
|
|
5648
|
-
defaultVariants: {
|
|
5649
|
-
variant: "surface",
|
|
5650
|
-
size: "md"
|
|
5651
|
-
}
|
|
5652
|
-
}
|
|
5653
|
-
);
|
|
5654
|
-
const _Toast = function Toast2(props) {
|
|
5655
|
-
const { radius, ...restProviderContext } = useProvider();
|
|
5656
|
-
const {
|
|
5657
|
-
ref,
|
|
5658
|
-
title,
|
|
5659
|
-
description,
|
|
5660
|
-
icon,
|
|
5661
|
-
size: size2 = "md",
|
|
5662
|
-
accentColor = restProviderContext.accentColor,
|
|
5663
|
-
variant,
|
|
5664
|
-
onClose,
|
|
5665
|
-
sensitivity,
|
|
5666
|
-
action,
|
|
5667
|
-
...rest
|
|
5668
|
-
} = props;
|
|
5669
|
-
const [open, setOpen] = useState(true);
|
|
5670
|
-
const handleOpenChange = useCallback(
|
|
5671
|
-
(open2) => {
|
|
5672
|
-
if (!open2 && onClose) onClose();
|
|
5673
|
-
setOpen(open2);
|
|
5674
|
-
},
|
|
5675
|
-
[onClose]
|
|
5676
|
-
);
|
|
6095
|
+
const CustomToast = memo((props) => {
|
|
6096
|
+
const { toastId, title, description, icon, accentColor, closeButton, action } = props;
|
|
6097
|
+
const { radius } = useProvider();
|
|
6098
|
+
const handleAction = useCallback(() => {
|
|
6099
|
+
toast$1.dismiss(toastId);
|
|
6100
|
+
}, [toastId]);
|
|
6101
|
+
const handleClose = useCallback(() => {
|
|
6102
|
+
toast$1.dismiss(toastId);
|
|
6103
|
+
}, [toastId]);
|
|
5677
6104
|
return /* @__PURE__ */ jsxs(
|
|
5678
|
-
|
|
6105
|
+
"div",
|
|
5679
6106
|
{
|
|
5680
6107
|
className: cx(
|
|
5681
|
-
"flex
|
|
5682
|
-
toastCva({ size: size2, variant }),
|
|
6108
|
+
"flex items-center gap-2 bg-(--base-2) p-4 ring ring-(--base-6) shadow-md max-w-full max-h-full",
|
|
5683
6109
|
radiusCva({ radius, maxLarge: true })
|
|
5684
6110
|
),
|
|
5685
|
-
ref,
|
|
5686
|
-
open,
|
|
5687
|
-
type: sensitivity,
|
|
5688
|
-
onOpenChange: handleOpenChange,
|
|
5689
6111
|
"data-accent-color": accentColor,
|
|
5690
|
-
"data-floating-content": "",
|
|
5691
|
-
...rest,
|
|
5692
6112
|
children: [
|
|
5693
|
-
/* @__PURE__ */ jsxs("div", { className: "flex
|
|
6113
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 grow min-w-0", children: [
|
|
5694
6114
|
icon,
|
|
5695
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col
|
|
5696
|
-
/* @__PURE__ */
|
|
5697
|
-
|
|
5698
|
-
/* @__PURE__ */ jsx(RadixToast.Description, { children: description })
|
|
5699
|
-
] }),
|
|
5700
|
-
action && /* @__PURE__ */ jsx(RadixToast.Action, { className: "w-max", altText: action.altText, asChild: true, children: action.content })
|
|
6115
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col min-w-0 select-none", children: [
|
|
6116
|
+
/* @__PURE__ */ jsx(Text, { className: "truncate", children: title }),
|
|
6117
|
+
description && /* @__PURE__ */ jsx(Text, { accentColor: "base", size: "sm", weight: "regular", children: description })
|
|
5701
6118
|
] })
|
|
5702
6119
|
] }),
|
|
5703
|
-
/* @__PURE__ */ jsx(
|
|
6120
|
+
/* @__PURE__ */ jsx(Slot, { onClick: handleAction, children: action }),
|
|
6121
|
+
closeButton && /* @__PURE__ */ jsx(
|
|
6122
|
+
IconButton,
|
|
6123
|
+
{
|
|
6124
|
+
type: "button",
|
|
6125
|
+
onClick: handleClose,
|
|
6126
|
+
"aria-label": "Close",
|
|
6127
|
+
accentColor: "base",
|
|
6128
|
+
variant: "ghost",
|
|
6129
|
+
size: "xs",
|
|
6130
|
+
children: /* @__PURE__ */ jsx(LuIcon, { icon: X })
|
|
6131
|
+
}
|
|
6132
|
+
)
|
|
5704
6133
|
]
|
|
5705
6134
|
}
|
|
5706
6135
|
);
|
|
6136
|
+
});
|
|
6137
|
+
const basic = (options) => {
|
|
6138
|
+
const { icon, description, title, closeButton, action, ...rest } = options;
|
|
6139
|
+
return toast$1.custom(
|
|
6140
|
+
(id) => /* @__PURE__ */ jsx(
|
|
6141
|
+
CustomToast,
|
|
6142
|
+
{
|
|
6143
|
+
toastId: id,
|
|
6144
|
+
icon,
|
|
6145
|
+
description,
|
|
6146
|
+
title,
|
|
6147
|
+
closeButton,
|
|
6148
|
+
action
|
|
6149
|
+
}
|
|
6150
|
+
),
|
|
6151
|
+
rest
|
|
6152
|
+
);
|
|
5707
6153
|
};
|
|
5708
|
-
const
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
5712
|
-
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5716
|
-
|
|
6154
|
+
const success = (options) => {
|
|
6155
|
+
const {
|
|
6156
|
+
icon = /* @__PURE__ */ jsx(LuIcon, { icon: Check, color: "var(--accent-9)" }),
|
|
6157
|
+
description,
|
|
6158
|
+
title,
|
|
6159
|
+
closeButton,
|
|
6160
|
+
action,
|
|
6161
|
+
...rest
|
|
6162
|
+
} = options;
|
|
6163
|
+
return toast$1.custom(
|
|
6164
|
+
(id) => /* @__PURE__ */ jsx(
|
|
6165
|
+
CustomToast,
|
|
6166
|
+
{
|
|
6167
|
+
accentColor: "success",
|
|
6168
|
+
toastId: id,
|
|
6169
|
+
icon,
|
|
6170
|
+
description,
|
|
6171
|
+
title,
|
|
6172
|
+
closeButton,
|
|
6173
|
+
action
|
|
6174
|
+
}
|
|
6175
|
+
),
|
|
6176
|
+
rest
|
|
6177
|
+
);
|
|
6178
|
+
};
|
|
6179
|
+
const info = (options) => {
|
|
6180
|
+
const {
|
|
6181
|
+
icon = /* @__PURE__ */ jsx(LuIcon, { icon: InfoIcon, color: "var(--base-11)" }),
|
|
6182
|
+
description,
|
|
6183
|
+
title,
|
|
6184
|
+
closeButton,
|
|
6185
|
+
action,
|
|
6186
|
+
...rest
|
|
6187
|
+
} = options;
|
|
6188
|
+
return toast$1.custom(
|
|
6189
|
+
(id) => /* @__PURE__ */ jsx(
|
|
6190
|
+
CustomToast,
|
|
6191
|
+
{
|
|
6192
|
+
accentColor: "base",
|
|
6193
|
+
toastId: id,
|
|
6194
|
+
icon,
|
|
6195
|
+
description,
|
|
6196
|
+
title,
|
|
6197
|
+
closeButton,
|
|
6198
|
+
action
|
|
6199
|
+
}
|
|
6200
|
+
),
|
|
6201
|
+
rest
|
|
6202
|
+
);
|
|
5717
6203
|
};
|
|
5718
|
-
const
|
|
5719
|
-
const
|
|
5720
|
-
|
|
5721
|
-
|
|
5722
|
-
|
|
5723
|
-
|
|
6204
|
+
const warning = (options) => {
|
|
6205
|
+
const {
|
|
6206
|
+
icon = /* @__PURE__ */ jsx(LuIcon, { icon: TriangleAlertIcon, color: "var(--accent-9)" }),
|
|
6207
|
+
description,
|
|
6208
|
+
title,
|
|
6209
|
+
closeButton,
|
|
6210
|
+
action,
|
|
6211
|
+
...rest
|
|
6212
|
+
} = options;
|
|
6213
|
+
return toast$1.custom(
|
|
6214
|
+
(id) => /* @__PURE__ */ jsx(
|
|
6215
|
+
CustomToast,
|
|
6216
|
+
{
|
|
6217
|
+
accentColor: "warning",
|
|
6218
|
+
toastId: id,
|
|
6219
|
+
icon,
|
|
6220
|
+
description,
|
|
6221
|
+
title,
|
|
6222
|
+
closeButton,
|
|
6223
|
+
action
|
|
6224
|
+
}
|
|
6225
|
+
),
|
|
6226
|
+
rest
|
|
6227
|
+
);
|
|
5724
6228
|
};
|
|
5725
|
-
|
|
5726
|
-
const
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
if (toast && reason === 0) clearTimeout(toast.timeout);
|
|
5738
|
-
return prevToasts.filter((toast2) => toast2.id !== id);
|
|
5739
|
-
});
|
|
5740
|
-
if (callback) callback();
|
|
5741
|
-
}, []);
|
|
5742
|
-
const toastContextValue = useMemo(() => {
|
|
5743
|
-
let counter = 0;
|
|
5744
|
-
const showToast = (toastProps) => {
|
|
5745
|
-
const duration = calculatedDuration(toastProps);
|
|
5746
|
-
const id = counter.toString();
|
|
5747
|
-
counter += 1;
|
|
5748
|
-
const pending = setTimeout(() => handleCloseToast(id, 1, toastProps.onClose), duration);
|
|
5749
|
-
setToasts((prevToasts) => [...prevToasts, { ...toastProps, timeout: pending, duration, id }]);
|
|
5750
|
-
};
|
|
5751
|
-
const showPrimary = (toastProps) => showToast(toastProps);
|
|
5752
|
-
const showSuccess = (toastProps) => showToast({ ...toastProps, accentColor: "success" });
|
|
5753
|
-
const showError = (toastProps) => showToast({ ...toastProps, accentColor: "danger" });
|
|
5754
|
-
const showInfo = (toastProps) => showToast({ ...toastProps, accentColor: "base" });
|
|
5755
|
-
const showWarning = (toastProps) => showToast({ ...toastProps, accentColor: "warning" });
|
|
5756
|
-
unsafeShowToast = showToast;
|
|
5757
|
-
return {
|
|
5758
|
-
showToast,
|
|
5759
|
-
showPrimary,
|
|
5760
|
-
showSuccess,
|
|
5761
|
-
showError,
|
|
5762
|
-
showInfo,
|
|
5763
|
-
showWarning
|
|
5764
|
-
};
|
|
5765
|
-
}, [handleCloseToast]);
|
|
5766
|
-
useEffect(() => {
|
|
5767
|
-
return () => {
|
|
5768
|
-
for (const { timeout } of toasts) clearTimeout(timeout);
|
|
5769
|
-
};
|
|
5770
|
-
}, []);
|
|
5771
|
-
return /* @__PURE__ */ jsx(ToastContext.Provider, { value: toastContextValue, children: /* @__PURE__ */ jsxs(ToastProvider$1, { ...rest, children: [
|
|
5772
|
-
children,
|
|
5773
|
-
/* @__PURE__ */ jsx(
|
|
5774
|
-
ToastViewport,
|
|
6229
|
+
const error = (options) => {
|
|
6230
|
+
const {
|
|
6231
|
+
icon = /* @__PURE__ */ jsx(LuIcon, { icon: CircleAlertIcon, color: "var(--accent-9)" }),
|
|
6232
|
+
description,
|
|
6233
|
+
title,
|
|
6234
|
+
closeButton,
|
|
6235
|
+
action,
|
|
6236
|
+
...rest
|
|
6237
|
+
} = options;
|
|
6238
|
+
return toast$1.custom(
|
|
6239
|
+
(id) => /* @__PURE__ */ jsx(
|
|
6240
|
+
CustomToast,
|
|
5775
6241
|
{
|
|
5776
|
-
|
|
5777
|
-
|
|
5778
|
-
|
|
5779
|
-
|
|
5780
|
-
|
|
6242
|
+
accentColor: "danger",
|
|
6243
|
+
toastId: id,
|
|
6244
|
+
icon,
|
|
6245
|
+
description,
|
|
6246
|
+
title,
|
|
6247
|
+
closeButton,
|
|
6248
|
+
action
|
|
5781
6249
|
}
|
|
5782
6250
|
),
|
|
5783
|
-
|
|
5784
|
-
|
|
6251
|
+
rest
|
|
6252
|
+
);
|
|
6253
|
+
};
|
|
6254
|
+
const toast = Object.assign(
|
|
6255
|
+
basic,
|
|
6256
|
+
{
|
|
6257
|
+
success,
|
|
6258
|
+
info,
|
|
6259
|
+
warning,
|
|
6260
|
+
error,
|
|
6261
|
+
custom: toast$1.custom,
|
|
6262
|
+
dismiss: toast$1.dismiss
|
|
6263
|
+
},
|
|
6264
|
+
{ getHistory: toast$1.getHistory, getToasts: toast$1.getToasts }
|
|
6265
|
+
);
|
|
6266
|
+
const TOAST_OPTIONS = {
|
|
6267
|
+
unstyled: true
|
|
6268
|
+
};
|
|
6269
|
+
const Toaster = memo((props) => {
|
|
6270
|
+
return /* @__PURE__ */ jsx(Toaster$1, { toastOptions: TOAST_OPTIONS, richColors: false, closeButton: false, theme: "system", ...props });
|
|
5785
6271
|
});
|
|
5786
|
-
|
|
6272
|
+
Toaster.displayName = "Toaster";
|
|
5787
6273
|
const toggleButtonCva = cva(
|
|
5788
6274
|
[
|
|
5789
6275
|
"flex",
|
|
@@ -6209,7 +6695,6 @@ export {
|
|
|
6209
6695
|
CheckboxGroupSelectAllItem,
|
|
6210
6696
|
CheckboxIndicator,
|
|
6211
6697
|
CheckboxRoot,
|
|
6212
|
-
CollapsibleTree,
|
|
6213
6698
|
CommandMenu,
|
|
6214
6699
|
CommandMenuCheckboxIndicator,
|
|
6215
6700
|
CommandMenuCheckboxItem,
|
|
@@ -6250,10 +6735,12 @@ export {
|
|
|
6250
6735
|
InputSlot,
|
|
6251
6736
|
Layout,
|
|
6252
6737
|
LayoutContainer,
|
|
6253
|
-
LayoutContext,
|
|
6254
6738
|
LayoutRoot,
|
|
6255
|
-
|
|
6739
|
+
LayoutSlideOutClose,
|
|
6740
|
+
LayoutSlideOutContent,
|
|
6741
|
+
LayoutSlideOutHandle,
|
|
6256
6742
|
LayoutSlideOutOverlay,
|
|
6743
|
+
LayoutSlideOutRoot,
|
|
6257
6744
|
LayoutSlideOutTrigger,
|
|
6258
6745
|
Link,
|
|
6259
6746
|
LuIcon,
|
|
@@ -6284,6 +6771,23 @@ export {
|
|
|
6284
6771
|
MenuSub,
|
|
6285
6772
|
MenuSubContent,
|
|
6286
6773
|
MenuSubTrigger,
|
|
6774
|
+
MenuV2,
|
|
6775
|
+
MenuV2CheckboxItem,
|
|
6776
|
+
MenuV2CheckedIndicator,
|
|
6777
|
+
MenuV2Group,
|
|
6778
|
+
MenuV2GroupLabel,
|
|
6779
|
+
MenuV2Item,
|
|
6780
|
+
MenuV2MultiSelectGroup,
|
|
6781
|
+
MenuV2MultiSelectItem,
|
|
6782
|
+
MenuV2Page,
|
|
6783
|
+
MenuV2PageTriggerItem,
|
|
6784
|
+
MenuV2Pages,
|
|
6785
|
+
MenuV2Root,
|
|
6786
|
+
MenuV2SelectAllItem,
|
|
6787
|
+
MenuV2SelectGroup,
|
|
6788
|
+
MenuV2SelectItem,
|
|
6789
|
+
MenuV2SelectedIndicator,
|
|
6790
|
+
MenuV2Separator,
|
|
6287
6791
|
MenuVirtualTrigger,
|
|
6288
6792
|
OneTimePasswordField,
|
|
6289
6793
|
OneTimePasswordFieldHiddenInput,
|
|
@@ -6320,9 +6824,15 @@ export {
|
|
|
6320
6824
|
SegmentedTabsList,
|
|
6321
6825
|
SegmentedTabsRoot,
|
|
6322
6826
|
SegmentedTabsTrigger,
|
|
6323
|
-
SelectedIndicatorContext,
|
|
6324
6827
|
Separator,
|
|
6325
6828
|
SlideOut,
|
|
6829
|
+
SlideOutClose,
|
|
6830
|
+
SlideOutContent,
|
|
6831
|
+
SlideOutHandle,
|
|
6832
|
+
SlideOutOverlay,
|
|
6833
|
+
SlideOutRoot,
|
|
6834
|
+
SlideOutTrigger,
|
|
6835
|
+
SlideOutViewport,
|
|
6326
6836
|
Slider,
|
|
6327
6837
|
Spinner,
|
|
6328
6838
|
Switch,
|
|
@@ -6343,9 +6853,7 @@ export {
|
|
|
6343
6853
|
TabsTrigger,
|
|
6344
6854
|
Text,
|
|
6345
6855
|
TextArea,
|
|
6346
|
-
|
|
6347
|
-
ToastContext,
|
|
6348
|
-
ToastProvider,
|
|
6856
|
+
Toaster,
|
|
6349
6857
|
ToggleButton,
|
|
6350
6858
|
ToggleGroup,
|
|
6351
6859
|
ToggleGroupIconItem,
|
|
@@ -6357,24 +6865,24 @@ export {
|
|
|
6357
6865
|
badge,
|
|
6358
6866
|
buttonCva,
|
|
6359
6867
|
floating,
|
|
6868
|
+
genericMemo,
|
|
6869
|
+
getActiveState,
|
|
6870
|
+
getBooleanState,
|
|
6871
|
+
getCheckedState,
|
|
6872
|
+
getOpenState,
|
|
6873
|
+
getSelectedState,
|
|
6360
6874
|
mergeRefs,
|
|
6361
6875
|
radiusCva,
|
|
6362
6876
|
stopPropagation,
|
|
6363
|
-
|
|
6877
|
+
toast,
|
|
6364
6878
|
useAlertDialog,
|
|
6365
6879
|
useButtonGroup,
|
|
6366
6880
|
useControlledState,
|
|
6881
|
+
useFallbackId,
|
|
6882
|
+
useLatest,
|
|
6367
6883
|
useLayoutContext,
|
|
6368
|
-
useMenuContentContext,
|
|
6369
|
-
useMenuContext,
|
|
6370
|
-
usePagesContext,
|
|
6371
6884
|
useProvider,
|
|
6372
|
-
useSelectedIndicatorContext,
|
|
6373
|
-
useSize,
|
|
6374
|
-
useStopEventPropagation,
|
|
6375
|
-
useSubContext,
|
|
6376
6885
|
useTextFilter,
|
|
6377
|
-
useToast,
|
|
6378
6886
|
useViewportSize
|
|
6379
6887
|
};
|
|
6380
6888
|
//# sourceMappingURL=blocks.js.map
|