@overmap-ai/blocks 1.0.40-overlay.1 → 1.0.40-slide-out-resize-handle.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/SelectedIndicator.d.ts +2 -3
- package/dist/CommandMenu/context.d.ts +2 -3
- 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 +0 -1
- 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/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/Rating/Item.d.ts +6 -0
- package/dist/Rating/ItemIndicator.d.ts +5 -0
- package/dist/Rating/Root.d.ts +8 -0
- package/dist/Rating/context.d.ts +9 -0
- package/dist/Rating/index.d.ts +9 -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 +12 -0
- package/dist/SlideOut/Handle.d.ts +5 -0
- package/dist/SlideOut/Overlay.d.ts +4 -0
- package/dist/SlideOut/Root.d.ts +8 -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 +16 -0
- package/dist/SlideOut/index.d.ts +18 -1
- package/dist/SlideOut/typings.d.ts +2 -0
- package/dist/Text/cva.d.ts +1 -1
- package/dist/blocks.js +1637 -1124
- package/dist/blocks.js.map +1 -1
- package/dist/blocks.umd.cjs +1748 -1236
- package/dist/blocks.umd.cjs.map +1 -1
- package/dist/hooks.d.ts +20 -0
- package/dist/index.d.ts +4 -2
- package/dist/typings.d.ts +0 -5
- package/dist/utils.d.ts +7 -30
- package/package.json +1 -1
- 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/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, useEffect, useId, useLayoutEffect, use, useRef } 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 } 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";
|
|
@@ -788,82 +787,6 @@ const Checkbox = {
|
|
|
788
787
|
};
|
|
789
788
|
const SelectContext = createContext({});
|
|
790
789
|
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
790
|
const useViewportSize = (props) => {
|
|
868
791
|
const { xs: xsProps, sm: smProps, md: mdProps, lg: lgProps, xl: xlProps } = props;
|
|
869
792
|
const [prevSize, setPrevSize] = useState("initial");
|
|
@@ -881,33 +804,14 @@ const useViewportSize = (props) => {
|
|
|
881
804
|
}, [lg, md, sm, xl, xs]);
|
|
882
805
|
return { size: size2, prevSize, xs, sm, md, lg, xl };
|
|
883
806
|
};
|
|
884
|
-
|
|
885
|
-
return useCallback((event) => {
|
|
886
|
-
event.stopPropagation();
|
|
887
|
-
}, []);
|
|
888
|
-
};
|
|
889
|
-
function useTextFilter(values, filterFunction) {
|
|
807
|
+
function useTextFilter(items, filterFunction) {
|
|
890
808
|
const [filteredOptions, setFilteredOptions] = useState([]);
|
|
891
809
|
const [filterValue, setFilterValue] = useState("");
|
|
892
810
|
useEffect(() => {
|
|
893
|
-
setFilteredOptions(
|
|
894
|
-
}, [filterFunction, filterValue,
|
|
811
|
+
setFilteredOptions(items.filter((value) => filterFunction(value, filterValue)));
|
|
812
|
+
}, [filterFunction, filterValue, items]);
|
|
895
813
|
return [filteredOptions, filterValue, setFilterValue];
|
|
896
814
|
}
|
|
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
815
|
function useControlledState(initialState, state, setState) {
|
|
912
816
|
const [uncontrolledState, setUncontrolledState] = useState(initialState);
|
|
913
817
|
const handleStateChange = useCallback(
|
|
@@ -924,26 +828,34 @@ function useControlledState(initialState, state, setState) {
|
|
|
924
828
|
}, [state]);
|
|
925
829
|
return [state ?? uncontrolledState, handleStateChange];
|
|
926
830
|
}
|
|
831
|
+
function useFallbackId(id) {
|
|
832
|
+
const fallbackId = useId();
|
|
833
|
+
return id ?? fallbackId;
|
|
834
|
+
}
|
|
835
|
+
const genericMemo = memo;
|
|
927
836
|
function mergeRefs(refs) {
|
|
928
837
|
return (value) => {
|
|
929
|
-
const cleanups = refs.reduce(
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
838
|
+
const cleanups = refs.reduce(
|
|
839
|
+
(cleanups2, ref) => {
|
|
840
|
+
if (typeof ref === "function") {
|
|
841
|
+
const cleanup = ref(value);
|
|
842
|
+
if (typeof cleanup === "function") {
|
|
843
|
+
cleanups2.push(cleanup);
|
|
844
|
+
} else {
|
|
845
|
+
cleanups2.push(() => {
|
|
846
|
+
ref(null);
|
|
847
|
+
});
|
|
848
|
+
}
|
|
849
|
+
} else if (ref != null) {
|
|
850
|
+
ref.current = value;
|
|
935
851
|
cleanups2.push(() => {
|
|
936
|
-
ref
|
|
852
|
+
ref.current = null;
|
|
937
853
|
});
|
|
938
854
|
}
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
});
|
|
944
|
-
}
|
|
945
|
-
return cleanups2;
|
|
946
|
-
}, []);
|
|
855
|
+
return cleanups2;
|
|
856
|
+
},
|
|
857
|
+
[]
|
|
858
|
+
);
|
|
947
859
|
return () => {
|
|
948
860
|
cleanups.forEach((cleanup) => {
|
|
949
861
|
cleanup();
|
|
@@ -954,6 +866,21 @@ function mergeRefs(refs) {
|
|
|
954
866
|
const stopPropagation = (e) => {
|
|
955
867
|
e.stopPropagation();
|
|
956
868
|
};
|
|
869
|
+
function getSelectedState(selected) {
|
|
870
|
+
return selected ? "selected" : "unselected";
|
|
871
|
+
}
|
|
872
|
+
function getCheckedState(checked) {
|
|
873
|
+
return checked === true ? "checked" : checked === false ? "unchecked" : "indeterminate";
|
|
874
|
+
}
|
|
875
|
+
function getActiveState(active) {
|
|
876
|
+
return active ? "active" : "inactive";
|
|
877
|
+
}
|
|
878
|
+
function getBooleanState(value) {
|
|
879
|
+
return value ? "true" : "false";
|
|
880
|
+
}
|
|
881
|
+
function getOpenState(open) {
|
|
882
|
+
return open ? "open" : "closed";
|
|
883
|
+
}
|
|
957
884
|
const MultiSelectProvider = genericMemo(function MultiSelectProvider2(props) {
|
|
958
885
|
const { children, defaultValues, values: controlledValues, onValuesChange } = props;
|
|
959
886
|
const [itemValueMapping, setItemValueMapping] = useState(/* @__PURE__ */ new Set());
|
|
@@ -1036,8 +963,8 @@ const CheckboxGroupItem = memo((props) => {
|
|
|
1036
963
|
ref,
|
|
1037
964
|
className,
|
|
1038
965
|
value,
|
|
1039
|
-
accentColor,
|
|
1040
966
|
disabled,
|
|
967
|
+
accentColor = groupContext.accentColor,
|
|
1041
968
|
variant = groupContext.variant,
|
|
1042
969
|
size: size2 = groupContext.size,
|
|
1043
970
|
radius = groupContext.radius,
|
|
@@ -1074,9 +1001,6 @@ const CheckboxGroupItemIndicator = memo((props) => {
|
|
|
1074
1001
|
return /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: cx("flex items-center justify-center", className), ref, ...rest });
|
|
1075
1002
|
});
|
|
1076
1003
|
CheckboxGroupItemIndicator.displayName = "CheckboxGroupItemIndicator";
|
|
1077
|
-
function getBooleanState$1(value) {
|
|
1078
|
-
return value ? "true" : "false";
|
|
1079
|
-
}
|
|
1080
1004
|
const CheckboxGroupRoot = memo((props) => {
|
|
1081
1005
|
const providerContext = useProvider();
|
|
1082
1006
|
const {
|
|
@@ -1099,20 +1023,22 @@ const CheckboxGroupRoot = memo((props) => {
|
|
|
1099
1023
|
name,
|
|
1100
1024
|
required,
|
|
1101
1025
|
disabled,
|
|
1026
|
+
// style props
|
|
1027
|
+
accentColor,
|
|
1102
1028
|
size: size2,
|
|
1103
1029
|
variant,
|
|
1104
1030
|
radius
|
|
1105
1031
|
}),
|
|
1106
|
-
[disabled, name, radius, required, size2, variant]
|
|
1032
|
+
[accentColor, disabled, name, radius, required, size2, variant]
|
|
1107
1033
|
);
|
|
1108
1034
|
return /* @__PURE__ */ jsx(
|
|
1109
1035
|
"div",
|
|
1110
1036
|
{
|
|
1111
1037
|
ref,
|
|
1112
1038
|
role: "group",
|
|
1113
|
-
"data-disabled": getBooleanState
|
|
1039
|
+
"data-disabled": getBooleanState(!!disabled),
|
|
1114
1040
|
"data-accent-color": accentColor,
|
|
1115
|
-
"aria-disabled": getBooleanState
|
|
1041
|
+
"aria-disabled": getBooleanState(!!disabled),
|
|
1116
1042
|
...rest,
|
|
1117
1043
|
children: /* @__PURE__ */ jsx(CheckboxGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
1118
1044
|
MultiSelectProvider,
|
|
@@ -1132,8 +1058,8 @@ const CheckboxGroupSelectAllItem = memo((props) => {
|
|
|
1132
1058
|
const {
|
|
1133
1059
|
ref,
|
|
1134
1060
|
className,
|
|
1135
|
-
accentColor,
|
|
1136
1061
|
disabled,
|
|
1062
|
+
accentColor = groupContext.accentColor,
|
|
1137
1063
|
variant = groupContext.variant,
|
|
1138
1064
|
size: size2 = groupContext.size,
|
|
1139
1065
|
radius = groupContext.radius,
|
|
@@ -1164,137 +1090,39 @@ const CheckboxGroup = {
|
|
|
1164
1090
|
SelectAllItem: CheckboxGroupSelectAllItem,
|
|
1165
1091
|
ItemIndicator: CheckboxGroupItemIndicator
|
|
1166
1092
|
};
|
|
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]);
|
|
1093
|
+
const CheckedIndicatorContext = createContext({});
|
|
1094
|
+
const CheckedIndicator = memo((props) => {
|
|
1095
|
+
const { children, ref, className, ...rest } = props;
|
|
1096
|
+
const checked = useContext(CheckedIndicatorContext);
|
|
1097
|
+
const computedChildren = typeof children === "function" ? children(checked) : children;
|
|
1280
1098
|
return /* @__PURE__ */ jsx(
|
|
1281
1099
|
"span",
|
|
1282
1100
|
{
|
|
1283
1101
|
ref,
|
|
1284
|
-
"data-state": getCheckedState$1(checkedState),
|
|
1285
1102
|
className: cx(
|
|
1286
|
-
"
|
|
1103
|
+
"flex size-max items-center",
|
|
1287
1104
|
{
|
|
1288
|
-
invisible:
|
|
1105
|
+
invisible: checked === false
|
|
1289
1106
|
},
|
|
1290
1107
|
className
|
|
1291
1108
|
),
|
|
1109
|
+
"data-state": getCheckedState(checked),
|
|
1292
1110
|
...rest,
|
|
1293
1111
|
children: computedChildren
|
|
1294
1112
|
}
|
|
1295
1113
|
);
|
|
1296
1114
|
});
|
|
1115
|
+
CheckedIndicator.displayName = "CheckedIndicator";
|
|
1116
|
+
const CommandMenuCheckboxIndicator = memo((props) => {
|
|
1117
|
+
const { ref, children, ...rest } = props;
|
|
1118
|
+
return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
|
|
1119
|
+
});
|
|
1297
1120
|
CommandMenuCheckboxIndicator.displayName = "CommandMenuCheckboxIndicator";
|
|
1121
|
+
const CommandMenuContext = createContext({});
|
|
1122
|
+
const SelectedIndicatorContext$1 = createContext(false);
|
|
1123
|
+
const CheckboxIndicatorContext = createContext(false);
|
|
1124
|
+
const CommandMenuPageContext = createContext({});
|
|
1125
|
+
const CommandMenuDialogContext = createContext({});
|
|
1298
1126
|
const commandMenuContentCva = cva(
|
|
1299
1127
|
[
|
|
1300
1128
|
"ring",
|
|
@@ -1531,7 +1359,7 @@ const CommandMenuCheckboxItem = memo((props) => {
|
|
|
1531
1359
|
onSelect == null ? void 0 : onSelect();
|
|
1532
1360
|
onCheckedChange(checked !== true);
|
|
1533
1361
|
}, [checked, onCheckedChange, onSelect]);
|
|
1534
|
-
return /* @__PURE__ */ jsx(CheckboxIndicatorContext, { value: checked, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getCheckedState
|
|
1362
|
+
return /* @__PURE__ */ jsx(CheckboxIndicatorContext, { value: checked, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getCheckedState(checked), ...rest, children }) });
|
|
1535
1363
|
});
|
|
1536
1364
|
CommandMenuCheckboxItem.displayName = "CommandMenuCheckboxItem";
|
|
1537
1365
|
const CommandMenuContent = memo((props) => {
|
|
@@ -1558,9 +1386,10 @@ const CommandMenuContent = memo((props) => {
|
|
|
1558
1386
|
return {
|
|
1559
1387
|
variant,
|
|
1560
1388
|
size: size2,
|
|
1561
|
-
radius
|
|
1389
|
+
radius,
|
|
1390
|
+
accentColor
|
|
1562
1391
|
};
|
|
1563
|
-
}, [radius, size2, variant]);
|
|
1392
|
+
}, [accentColor, radius, size2, variant]);
|
|
1564
1393
|
return /* @__PURE__ */ jsx(DialogPortal, { children: /* @__PURE__ */ jsx(
|
|
1565
1394
|
DialogContent$1,
|
|
1566
1395
|
{
|
|
@@ -1647,7 +1476,7 @@ const CommandMenuMultiSelectItem = genericMemo(function(props) {
|
|
|
1647
1476
|
{
|
|
1648
1477
|
ref,
|
|
1649
1478
|
onSelect: handleSelect,
|
|
1650
|
-
"data-state": getSelectedState
|
|
1479
|
+
"data-state": getSelectedState(isSelected),
|
|
1651
1480
|
"aria-selected": isSelected,
|
|
1652
1481
|
closeOnSelect,
|
|
1653
1482
|
...rest,
|
|
@@ -1721,7 +1550,7 @@ const CommandMenuRadioItem = genericMemo(function(props) {
|
|
|
1721
1550
|
selectValue(value);
|
|
1722
1551
|
}, [onSelect, selectValue, value]);
|
|
1723
1552
|
const isSelected = selected(value);
|
|
1724
|
-
return /* @__PURE__ */ jsx(SelectedIndicatorContext$1, { value: isSelected, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getSelectedState
|
|
1553
|
+
return /* @__PURE__ */ jsx(SelectedIndicatorContext$1, { value: isSelected, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getSelectedState(isSelected), ...rest, children }) });
|
|
1725
1554
|
});
|
|
1726
1555
|
const CommandMenuRoot = memo((props) => {
|
|
1727
1556
|
const { children, defaultOpen, open: controlledOpen, onOpenChange, modal } = props;
|
|
@@ -1749,35 +1578,39 @@ const CommandMenuSelectAllItem = genericMemo(function(props) {
|
|
|
1749
1578
|
ref,
|
|
1750
1579
|
role: "menuitemcheckbox",
|
|
1751
1580
|
onSelect: handleSelect,
|
|
1752
|
-
"data-state": getCheckedState
|
|
1581
|
+
"data-state": getCheckedState(selectedState),
|
|
1753
1582
|
closeOnSelect,
|
|
1754
1583
|
...rest
|
|
1755
1584
|
}
|
|
1756
1585
|
) });
|
|
1757
1586
|
});
|
|
1758
|
-
const
|
|
1759
|
-
|
|
1760
|
-
const
|
|
1761
|
-
const
|
|
1762
|
-
|
|
1763
|
-
}, [isSelected, children]);
|
|
1587
|
+
const SelectedIndicatorContext = createContext(false);
|
|
1588
|
+
const SelectedIndicator = memo((props) => {
|
|
1589
|
+
const { ref, children, className, ...rest } = props;
|
|
1590
|
+
const isSelected = use(SelectedIndicatorContext);
|
|
1591
|
+
const computedChildren = typeof children === "function" ? children(isSelected) : children;
|
|
1764
1592
|
return /* @__PURE__ */ jsx(
|
|
1765
1593
|
"span",
|
|
1766
1594
|
{
|
|
1767
1595
|
ref,
|
|
1768
|
-
"data-state": getSelectedState$1(isSelected),
|
|
1769
1596
|
className: cx(
|
|
1770
|
-
"
|
|
1597
|
+
"flex size-max items-center",
|
|
1771
1598
|
{
|
|
1772
1599
|
invisible: !isSelected
|
|
1773
1600
|
},
|
|
1774
1601
|
className
|
|
1775
1602
|
),
|
|
1603
|
+
"data-state": getSelectedState(isSelected),
|
|
1776
1604
|
...rest,
|
|
1777
1605
|
children: computedChildren
|
|
1778
1606
|
}
|
|
1779
1607
|
);
|
|
1780
1608
|
});
|
|
1609
|
+
SelectedIndicator.displayName = "SelectedIndicator";
|
|
1610
|
+
const CommandMenuSelectedIndicator = memo((props) => {
|
|
1611
|
+
const { ref, children, ...rest } = props;
|
|
1612
|
+
return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
|
|
1613
|
+
});
|
|
1781
1614
|
CommandMenuSelectedIndicator.displayName = "CommandMenuSelectedIndicator";
|
|
1782
1615
|
const CommandMenuSeparator = memo((props) => {
|
|
1783
1616
|
const { className, ref, spacing = false, ...rest } = props;
|
|
@@ -1817,21 +1650,21 @@ const CommandMenu = {
|
|
|
1817
1650
|
PageTriggerItem: CommandMenuPageTriggerItem
|
|
1818
1651
|
};
|
|
1819
1652
|
const LuIcon = memo((props) => {
|
|
1820
|
-
const { ref, icon, className, size: size2 = "1em", ...rest } = props;
|
|
1821
|
-
return /* @__PURE__ */ jsx(
|
|
1653
|
+
const { ref, icon: Icon, className, size: size2 = "1em", ...rest } = props;
|
|
1654
|
+
return /* @__PURE__ */ jsx(Icon, { ref, className: cx("shrink-0", className), size: size2, ...rest });
|
|
1822
1655
|
});
|
|
1823
1656
|
LuIcon.displayName = "LuIcon";
|
|
1824
1657
|
const Chevron = (props) => {
|
|
1825
1658
|
const { orientation, ...rest } = props;
|
|
1826
1659
|
switch (orientation) {
|
|
1827
1660
|
case "up":
|
|
1828
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1661
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronUp, ...rest });
|
|
1829
1662
|
case "down":
|
|
1830
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1663
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronDown, ...rest });
|
|
1831
1664
|
case "left":
|
|
1832
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1665
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronLeft, ...rest });
|
|
1833
1666
|
default:
|
|
1834
|
-
return /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
1667
|
+
return /* @__PURE__ */ jsx(LuIcon, { icon: ChevronRight, ...rest });
|
|
1835
1668
|
}
|
|
1836
1669
|
};
|
|
1837
1670
|
const rootCva = cva(["relative", "size-max"], {
|
|
@@ -2254,7 +2087,7 @@ const HoverCard = {
|
|
|
2254
2087
|
Root: RadixHoverCard.Root,
|
|
2255
2088
|
Trigger: RadixHoverCard.Trigger
|
|
2256
2089
|
};
|
|
2257
|
-
const HoverUtility = memo(
|
|
2090
|
+
const HoverUtility = memo(({ children, forceHover }) => {
|
|
2258
2091
|
const [isHovered, setIsHovered] = useState(false);
|
|
2259
2092
|
const handlePointerEnter = useCallback(() => {
|
|
2260
2093
|
setIsHovered(true);
|
|
@@ -2268,6 +2101,7 @@ const HoverUtility = memo(function Root({ children, forceHover }) {
|
|
|
2268
2101
|
onPointerLeave: handlePointerLeave
|
|
2269
2102
|
});
|
|
2270
2103
|
});
|
|
2104
|
+
HoverUtility.displayName = "HoverUtility";
|
|
2271
2105
|
const InputContext = createContext({});
|
|
2272
2106
|
const inputRoot$1 = cva(
|
|
2273
2107
|
[
|
|
@@ -2395,9 +2229,9 @@ const Input = {
|
|
|
2395
2229
|
const LayoutContext = createContext({});
|
|
2396
2230
|
const useLayoutContext = () => useContext(LayoutContext);
|
|
2397
2231
|
const LayoutContainer = memo((props) => {
|
|
2398
|
-
const { ref, children,
|
|
2232
|
+
const { ref, children, ...rest } = props;
|
|
2399
2233
|
const { hideLayout = false } = useLayoutContext();
|
|
2400
|
-
return !hideLayout && /* @__PURE__ */ jsx("div", {
|
|
2234
|
+
return !hideLayout && /* @__PURE__ */ jsx("div", { ref, ...rest, children });
|
|
2401
2235
|
});
|
|
2402
2236
|
LayoutContainer.displayName = "LayoutContainer";
|
|
2403
2237
|
const LayoutRoot = memo((props) => {
|
|
@@ -2424,6 +2258,23 @@ const LayoutRoot = memo((props) => {
|
|
|
2424
2258
|
return /* @__PURE__ */ jsx(LayoutContext.Provider, { value: contextValue, children });
|
|
2425
2259
|
});
|
|
2426
2260
|
LayoutRoot.displayName = "LayoutRoot";
|
|
2261
|
+
const SlideOutRootContext = createContext({});
|
|
2262
|
+
const SlideOutContextContext = createContext({});
|
|
2263
|
+
const SlideOutClose = memo((props) => {
|
|
2264
|
+
const { ref, onClick, disabled, ...rest } = props;
|
|
2265
|
+
const { setOpen } = use(SlideOutRootContext);
|
|
2266
|
+
const handleClick = useCallback(
|
|
2267
|
+
(e) => {
|
|
2268
|
+
onClick == null ? void 0 : onClick(e);
|
|
2269
|
+
if (e.defaultPrevented) return;
|
|
2270
|
+
setOpen(false);
|
|
2271
|
+
},
|
|
2272
|
+
[onClick, setOpen]
|
|
2273
|
+
);
|
|
2274
|
+
return /* @__PURE__ */ jsx(Slot, { ref, onClick: handleClick, "data-disabled": disabled ?? false, ...rest });
|
|
2275
|
+
});
|
|
2276
|
+
SlideOutClose.displayName = "SlideOutClose";
|
|
2277
|
+
const TIMEOUT_DURATION = 200;
|
|
2427
2278
|
function usePointerDownOutside(onPointerDownOutside, ownerElement = globalThis == null ? void 0 : globalThis.document.body) {
|
|
2428
2279
|
const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);
|
|
2429
2280
|
const isPointerInsideReactTreeRef = useRef(false);
|
|
@@ -2485,327 +2336,372 @@ function useCallbackRef(callback) {
|
|
|
2485
2336
|
return (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef, ...args);
|
|
2486
2337
|
}, []);
|
|
2487
2338
|
}
|
|
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
|
-
|
|
2339
|
+
const SlideOutContent = memo((props) => {
|
|
2340
|
+
const { ref, children, style, side, type, resizeable = false, initialSize, minSize, maxSize, hide: hide2, ...rest } = props;
|
|
2341
|
+
const internalRef = useRef(null);
|
|
2342
|
+
const { open, setOpen, parentElement, modal } = use(SlideOutRootContext);
|
|
2343
|
+
const [computedSize, setComputedSize] = useState(null);
|
|
2344
|
+
const handleClose = useCallback(() => {
|
|
2345
|
+
if (modal) setOpen(false);
|
|
2346
|
+
}, [modal, setOpen]);
|
|
2347
|
+
const { onPointerDownCapture: handlePointerDownCapture } = usePointerDownOutside(
|
|
2348
|
+
handleClose,
|
|
2349
|
+
parentElement ?? void 0
|
|
2350
|
+
);
|
|
2351
|
+
useLayoutEffect(() => {
|
|
2352
|
+
if (!open || !internalRef.current) return;
|
|
2353
|
+
const { offsetWidth, offsetHeight } = internalRef.current;
|
|
2354
|
+
switch (side) {
|
|
2355
|
+
case "left":
|
|
2356
|
+
case "right":
|
|
2357
|
+
setComputedSize(offsetWidth);
|
|
2358
|
+
break;
|
|
2359
|
+
case "top":
|
|
2360
|
+
case "bottom":
|
|
2361
|
+
setComputedSize(offsetHeight);
|
|
2362
|
+
}
|
|
2363
|
+
}, [open, side]);
|
|
2364
|
+
const computedStyle = useMemo(() => {
|
|
2365
|
+
switch (side) {
|
|
2366
|
+
case "left":
|
|
2367
|
+
return {
|
|
2368
|
+
...style,
|
|
2369
|
+
left: 0,
|
|
2370
|
+
width: computedSize ?? initialSize,
|
|
2371
|
+
maxWidth: maxSize,
|
|
2372
|
+
minWidth: minSize,
|
|
2373
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2374
|
+
"--slide-out-size": `${computedSize}px`
|
|
2375
|
+
};
|
|
2376
|
+
case "right":
|
|
2377
|
+
return {
|
|
2378
|
+
...style,
|
|
2379
|
+
right: 0,
|
|
2380
|
+
width: computedSize ?? initialSize,
|
|
2381
|
+
maxWidth: maxSize,
|
|
2382
|
+
minWidth: minSize,
|
|
2383
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2384
|
+
"--slide-out-size": `${computedSize}px`
|
|
2385
|
+
};
|
|
2386
|
+
case "top":
|
|
2387
|
+
return {
|
|
2388
|
+
...style,
|
|
2389
|
+
top: 0,
|
|
2390
|
+
height: computedSize ?? initialSize,
|
|
2391
|
+
maxHeight: maxSize,
|
|
2392
|
+
minHeight: minSize,
|
|
2393
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2394
|
+
"--slide-out-size": `${computedSize}px`
|
|
2395
|
+
};
|
|
2396
|
+
case "bottom":
|
|
2397
|
+
return {
|
|
2398
|
+
...style,
|
|
2399
|
+
bottom: 0,
|
|
2400
|
+
height: computedSize ?? initialSize,
|
|
2401
|
+
maxHeight: maxSize,
|
|
2402
|
+
minHeight: minSize,
|
|
2403
|
+
position: type === "inline" ? "relative" : "absolute",
|
|
2404
|
+
"--slide-out-size": `${computedSize}px`
|
|
2405
|
+
};
|
|
2528
2406
|
}
|
|
2529
|
-
}, []);
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2407
|
+
}, [computedSize, initialSize, maxSize, minSize, side, style, type]);
|
|
2408
|
+
const transitionClassNames = useMemo(() => {
|
|
2409
|
+
switch (side) {
|
|
2410
|
+
case "left":
|
|
2411
|
+
return {
|
|
2412
|
+
enter: "-ml-(--slide-out-size)",
|
|
2413
|
+
enterActive: "ease-linear duration-200 transition-[margin-left] ml-0",
|
|
2414
|
+
enterDone: "ml-0",
|
|
2415
|
+
exitActive: "ease-linear duration-200 transition-[margin-left] -ml-(--slide-out-size)",
|
|
2416
|
+
exitDone: "-ml-(--slide-out-size)"
|
|
2417
|
+
};
|
|
2418
|
+
case "right":
|
|
2419
|
+
return {
|
|
2420
|
+
enter: "-mr-(--slide-out-size)",
|
|
2421
|
+
enterActive: "ease-linear duration-200 transition-[margin-right] mr-0",
|
|
2422
|
+
enterDone: "mr-0",
|
|
2423
|
+
exitActive: "ease-linear duration-200 transition-[margin-right] -mr-(--slide-out-size)",
|
|
2424
|
+
exitDone: "-mr-(--slide-out-size)"
|
|
2425
|
+
};
|
|
2426
|
+
case "top":
|
|
2427
|
+
return {
|
|
2428
|
+
enter: "-mt-(--slide-out-size)",
|
|
2429
|
+
enterActive: "ease-linear duration-200 transition-[margin-top] mt-0",
|
|
2430
|
+
enterDone: "mt-0",
|
|
2431
|
+
exitActive: "ease-linear duration-200 transition-[margin-top] -mt-(--slide-out-size)",
|
|
2432
|
+
exitDone: "-mt-(--slide-out-size)"
|
|
2433
|
+
};
|
|
2434
|
+
case "bottom":
|
|
2435
|
+
return {
|
|
2436
|
+
enter: "-mb-(--slide-out-size)",
|
|
2437
|
+
enterActive: "ease-linear duration-200 transition-[margin-bottom] mb-0",
|
|
2438
|
+
enterDone: "mb-0",
|
|
2439
|
+
exitActive: "ease-linear duration-200 transition-[margin-bottom] -mb-(--slide-out-size)",
|
|
2440
|
+
exitDone: "-mb-(--slide-out-size)"
|
|
2441
|
+
};
|
|
2535
2442
|
}
|
|
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(
|
|
2443
|
+
}, [side]);
|
|
2444
|
+
const contextValue = useMemo(
|
|
2544
2445
|
() => ({
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2446
|
+
side,
|
|
2447
|
+
type,
|
|
2448
|
+
resizeable,
|
|
2449
|
+
computedSize,
|
|
2450
|
+
setComputedSize
|
|
2550
2451
|
}),
|
|
2551
|
-
[
|
|
2452
|
+
[computedSize, resizeable, side, type]
|
|
2552
2453
|
);
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2454
|
+
return !hide2 ? (
|
|
2455
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2456
|
+
// @ts-ignore
|
|
2457
|
+
/* @__PURE__ */ jsx(
|
|
2458
|
+
CSSTransition,
|
|
2459
|
+
{
|
|
2460
|
+
classNames: transitionClassNames,
|
|
2461
|
+
in: open,
|
|
2462
|
+
timeout: TIMEOUT_DURATION,
|
|
2463
|
+
unmountOnExit: true,
|
|
2464
|
+
mountOnEnter: true,
|
|
2465
|
+
nodeRef: internalRef,
|
|
2466
|
+
children: /* @__PURE__ */ jsx(
|
|
2467
|
+
"div",
|
|
2468
|
+
{
|
|
2469
|
+
ref: mergeRefs([ref, internalRef]),
|
|
2470
|
+
onPointerDownCapture: handlePointerDownCapture,
|
|
2471
|
+
"data-open": open,
|
|
2472
|
+
"data-side": side,
|
|
2473
|
+
"data-type": type,
|
|
2474
|
+
style: computedStyle,
|
|
2475
|
+
...rest,
|
|
2476
|
+
children: /* @__PURE__ */ jsx(SlideOutContextContext, { value: contextValue, children })
|
|
2477
|
+
}
|
|
2478
|
+
)
|
|
2479
|
+
}
|
|
2480
|
+
)
|
|
2481
|
+
) : null;
|
|
2482
|
+
});
|
|
2483
|
+
SlideOutContent.displayName = "SlideOutContent";
|
|
2484
|
+
const SlideOutHandle = memo((props) => {
|
|
2485
|
+
const { ref, onMouseDown, disabled, ...rest } = props;
|
|
2486
|
+
const prevClientCoord = useRef(null);
|
|
2487
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
2488
|
+
const { side, resizeable, computedSize, setComputedSize } = use(SlideOutContextContext);
|
|
2489
|
+
const computedDisabled = disabled ?? !resizeable;
|
|
2490
|
+
const setPrevClientCoord = useCallback(
|
|
2491
|
+
(clientX, clientY) => {
|
|
2492
|
+
switch (side) {
|
|
2493
|
+
case "left":
|
|
2494
|
+
prevClientCoord.current = clientX;
|
|
2495
|
+
break;
|
|
2496
|
+
case "right":
|
|
2497
|
+
prevClientCoord.current = clientX;
|
|
2498
|
+
break;
|
|
2499
|
+
case "top":
|
|
2500
|
+
prevClientCoord.current = clientY;
|
|
2501
|
+
break;
|
|
2502
|
+
case "bottom":
|
|
2503
|
+
prevClientCoord.current = clientY;
|
|
2504
|
+
break;
|
|
2505
|
+
}
|
|
2506
|
+
},
|
|
2507
|
+
[side]
|
|
2508
|
+
);
|
|
2509
|
+
const handlePointerDown = useCallback(
|
|
2510
|
+
(e) => {
|
|
2511
|
+
onMouseDown == null ? void 0 : onMouseDown(e);
|
|
2512
|
+
if (e.defaultPrevented || computedDisabled) return;
|
|
2513
|
+
e.preventDefault();
|
|
2514
|
+
setPrevClientCoord(e.clientX, e.clientY);
|
|
2515
|
+
setIsResizing(true);
|
|
2516
|
+
},
|
|
2517
|
+
[computedDisabled, onMouseDown, setPrevClientCoord]
|
|
2518
|
+
);
|
|
2519
|
+
const handlePointerMove = useCallback(
|
|
2559
2520
|
(e) => {
|
|
2560
|
-
if (!isResizing) return;
|
|
2561
|
-
|
|
2562
|
-
const
|
|
2563
|
-
|
|
2564
|
-
|
|
2521
|
+
if (!isResizing || !prevClientCoord.current || computedDisabled) return;
|
|
2522
|
+
e.preventDefault();
|
|
2523
|
+
const { clientX, clientY } = e;
|
|
2524
|
+
let delta = 0;
|
|
2525
|
+
switch (side) {
|
|
2526
|
+
case "left":
|
|
2527
|
+
delta = clientX - prevClientCoord.current;
|
|
2528
|
+
break;
|
|
2529
|
+
case "right":
|
|
2530
|
+
delta = (clientX - prevClientCoord.current) * -1;
|
|
2531
|
+
break;
|
|
2532
|
+
case "top":
|
|
2533
|
+
delta = clientY - prevClientCoord.current;
|
|
2534
|
+
break;
|
|
2535
|
+
case "bottom":
|
|
2536
|
+
delta = (clientY - prevClientCoord.current) * -1;
|
|
2537
|
+
break;
|
|
2538
|
+
}
|
|
2539
|
+
setPrevClientCoord(clientX, clientY);
|
|
2540
|
+
setComputedSize(computedSize + delta);
|
|
2565
2541
|
},
|
|
2566
|
-
[
|
|
2542
|
+
[computedDisabled, computedSize, isResizing, setComputedSize, setPrevClientCoord, side]
|
|
2567
2543
|
);
|
|
2568
|
-
const
|
|
2569
|
-
if (!isResizing) return;
|
|
2570
|
-
|
|
2544
|
+
const handlePointerUp = useCallback(() => {
|
|
2545
|
+
if (!isResizing || computedDisabled) return;
|
|
2546
|
+
prevClientCoord.current = null;
|
|
2571
2547
|
setIsResizing(false);
|
|
2572
|
-
}, [isResizing]);
|
|
2548
|
+
}, [computedDisabled, isResizing]);
|
|
2573
2549
|
useEffect(() => {
|
|
2574
|
-
|
|
2575
|
-
|
|
2550
|
+
document.addEventListener("pointermove", handlePointerMove);
|
|
2551
|
+
document.addEventListener("pointerup", handlePointerUp);
|
|
2576
2552
|
return () => {
|
|
2577
|
-
|
|
2578
|
-
|
|
2553
|
+
document.removeEventListener("pointermove", handlePointerMove);
|
|
2554
|
+
document.removeEventListener("pointerup", handlePointerUp);
|
|
2579
2555
|
};
|
|
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(
|
|
2556
|
+
}, [handlePointerMove, handlePointerUp]);
|
|
2557
|
+
return /* @__PURE__ */ jsx(
|
|
2672
2558
|
"div",
|
|
2673
2559
|
{
|
|
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
|
-
]
|
|
2560
|
+
ref,
|
|
2561
|
+
onPointerDown: handlePointerDown,
|
|
2562
|
+
"data-resizing": isResizing,
|
|
2563
|
+
"data-side": side,
|
|
2564
|
+
"data-disabled": computedDisabled,
|
|
2565
|
+
...rest
|
|
2690
2566
|
}
|
|
2691
2567
|
);
|
|
2692
2568
|
});
|
|
2693
|
-
|
|
2694
|
-
const
|
|
2695
|
-
const
|
|
2696
|
-
const {
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
} = props;
|
|
2708
|
-
const open = isOpen(id);
|
|
2709
|
-
useEffect(() => {
|
|
2710
|
-
if (small && (defaultOpen == null ? void 0 : defaultOpen.small) !== void 0) {
|
|
2711
|
-
setOpen(id, defaultOpen == null ? void 0 : defaultOpen.small);
|
|
2712
|
-
} else if (!small && (defaultOpen == null ? void 0 : defaultOpen.large) !== void 0) {
|
|
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,
|
|
2569
|
+
SlideOutHandle.displayName = "SlideOutHandle";
|
|
2570
|
+
const SlideOutOverlay = memo((props) => {
|
|
2571
|
+
const { ref, ...rest } = props;
|
|
2572
|
+
const { open } = use(SlideOutRootContext);
|
|
2573
|
+
return open ? /* @__PURE__ */ jsx("div", { ref, "data-open": open, ...rest }) : null;
|
|
2574
|
+
});
|
|
2575
|
+
SlideOutOverlay.displayName = "SlideOutOverlay";
|
|
2576
|
+
const SlideOutRoot = memo((props) => {
|
|
2577
|
+
const { ref, children, defaultOpen = false, open: controlledOpen, onOpenChange, modal = false, ...rest } = props;
|
|
2578
|
+
const [parentElement, setParentElement] = useState(null);
|
|
2579
|
+
const [open, setOpen] = useControlledState(defaultOpen, controlledOpen, onOpenChange);
|
|
2580
|
+
const contextValue = useMemo(
|
|
2581
|
+
() => ({
|
|
2582
|
+
parentElement,
|
|
2726
2583
|
open,
|
|
2727
|
-
|
|
2728
|
-
modal
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2584
|
+
setOpen,
|
|
2585
|
+
modal
|
|
2586
|
+
}),
|
|
2587
|
+
[modal, open, parentElement, setOpen]
|
|
2588
|
+
);
|
|
2589
|
+
return /* @__PURE__ */ jsx("div", { ref: mergeRefs([ref, setParentElement]), ...rest, children: /* @__PURE__ */ jsx(SlideOutRootContext, { value: contextValue, children }) });
|
|
2590
|
+
});
|
|
2591
|
+
SlideOutRoot.displayName = "SlideOutRoot";
|
|
2592
|
+
const SlideOutTrigger = memo((props) => {
|
|
2593
|
+
const { ref, onClick, ...rest } = props;
|
|
2594
|
+
const { open, setOpen } = use(SlideOutRootContext);
|
|
2595
|
+
const handleClick = useCallback(
|
|
2596
|
+
(e) => {
|
|
2597
|
+
onClick == null ? void 0 : onClick(e);
|
|
2598
|
+
if (e.defaultPrevented) return;
|
|
2599
|
+
setOpen(!open);
|
|
2600
|
+
},
|
|
2601
|
+
[onClick, open, setOpen]
|
|
2734
2602
|
);
|
|
2603
|
+
return /* @__PURE__ */ jsx(Slot, { ref, onClick: handleClick, "data-disabled": props.disabled ?? false, ...rest });
|
|
2604
|
+
});
|
|
2605
|
+
SlideOutTrigger.displayName = "SlideOutTrigger";
|
|
2606
|
+
const SlideOutViewport = memo((props) => {
|
|
2607
|
+
const { ref, ...rest } = props;
|
|
2608
|
+
const internalRef = useRef(null);
|
|
2609
|
+
const { open, modal, parentElement } = use(SlideOutRootContext);
|
|
2610
|
+
useEffect(() => {
|
|
2611
|
+
if (!internalRef.current) return;
|
|
2612
|
+
const internalElement = internalRef.current;
|
|
2613
|
+
const originalParentPointerEvents = internalElement.style.pointerEvents;
|
|
2614
|
+
if (open && modal) {
|
|
2615
|
+
internalElement.style.pointerEvents = "none";
|
|
2616
|
+
}
|
|
2617
|
+
return () => {
|
|
2618
|
+
internalElement.style.pointerEvents = originalParentPointerEvents;
|
|
2619
|
+
};
|
|
2620
|
+
}, [modal, open, parentElement == null ? void 0 : parentElement.style]);
|
|
2621
|
+
return /* @__PURE__ */ jsx("div", { ref: mergeRefs([ref, internalRef]), ...rest });
|
|
2622
|
+
});
|
|
2623
|
+
SlideOutViewport.displayName = "SlideOutViewport";
|
|
2624
|
+
const SlideOut = {
|
|
2625
|
+
Close: SlideOutClose,
|
|
2626
|
+
Content: SlideOutContent,
|
|
2627
|
+
Handle: SlideOutHandle,
|
|
2628
|
+
Overlay: SlideOutOverlay,
|
|
2629
|
+
Root: SlideOutRoot,
|
|
2630
|
+
Trigger: SlideOutTrigger,
|
|
2631
|
+
Viewport: SlideOutViewport
|
|
2632
|
+
};
|
|
2633
|
+
const LayoutSlideOutClose = memo((props) => {
|
|
2634
|
+
const { ref, ...rest } = props;
|
|
2635
|
+
return /* @__PURE__ */ jsx(SlideOutClose, { ref, ...rest });
|
|
2735
2636
|
});
|
|
2736
|
-
|
|
2637
|
+
LayoutSlideOutClose.displayName = "LayoutSlideOutClose";
|
|
2638
|
+
const LayoutSlideOutContent = memo((props) => {
|
|
2639
|
+
const { ref, type, hide: hide2, ...rest } = props;
|
|
2640
|
+
const { small, hideLayout } = use(LayoutContext);
|
|
2641
|
+
return /* @__PURE__ */ jsx(SlideOutContent, { ref, type: type ?? (small ? "overlay" : "inline"), hide: hide2 ?? hideLayout, ...rest });
|
|
2642
|
+
});
|
|
2643
|
+
LayoutSlideOutContent.displayName = "LayoutSlideOutContent";
|
|
2644
|
+
const LayoutSlideOutHandle = memo((props) => {
|
|
2645
|
+
const { ref, ...rest } = props;
|
|
2646
|
+
return /* @__PURE__ */ jsx(SlideOutHandle, { ref, ...rest });
|
|
2647
|
+
});
|
|
2648
|
+
LayoutSlideOutHandle.displayName = "LayoutSlideOutHandle";
|
|
2737
2649
|
const LayoutSlideOutOverlay = memo((props) => {
|
|
2738
|
-
const { ref,
|
|
2739
|
-
const { small, hideLayout
|
|
2650
|
+
const { ref, smallModeOnly = false, ...rest } = props;
|
|
2651
|
+
const { small, hideLayout } = useLayoutContext();
|
|
2740
2652
|
const showOverlay = useMemo(() => {
|
|
2741
|
-
if (active !== void 0) return active;
|
|
2742
2653
|
if (hideLayout) return false;
|
|
2743
2654
|
if (smallModeOnly && !small) return false;
|
|
2744
|
-
return
|
|
2745
|
-
}, [
|
|
2746
|
-
return showOverlay
|
|
2655
|
+
return true;
|
|
2656
|
+
}, [hideLayout, small, smallModeOnly]);
|
|
2657
|
+
return showOverlay ? /* @__PURE__ */ jsx(SlideOutOverlay, { ref, ...rest }) : null;
|
|
2747
2658
|
});
|
|
2748
2659
|
LayoutSlideOutOverlay.displayName = "SlideOutOverlay";
|
|
2749
|
-
const
|
|
2750
|
-
const
|
|
2751
|
-
const
|
|
2752
|
-
const
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
if (
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: 0 };
|
|
2770
|
-
};
|
|
2771
|
-
function getSelectedState(selected) {
|
|
2772
|
-
return selected ? "selected" : "unselected";
|
|
2773
|
-
}
|
|
2774
|
-
function getCheckedState(checked) {
|
|
2775
|
-
return checked === true ? "checked" : checked === false ? "unchecked" : "indeterminate";
|
|
2776
|
-
}
|
|
2777
|
-
function getBooleanState(value) {
|
|
2778
|
-
return value ? "true" : "false";
|
|
2779
|
-
}
|
|
2780
|
-
function getOpenState(open) {
|
|
2781
|
-
return open ? "open" : "closed";
|
|
2782
|
-
}
|
|
2783
|
-
function nextStateBasedOnType(open, type) {
|
|
2784
|
-
switch (type) {
|
|
2785
|
-
case "toggle":
|
|
2786
|
-
return !open;
|
|
2787
|
-
case "open":
|
|
2788
|
-
return true;
|
|
2789
|
-
case "close":
|
|
2790
|
-
return false;
|
|
2791
|
-
}
|
|
2792
|
-
}
|
|
2660
|
+
const LayoutSlideOutRoot = memo((props) => {
|
|
2661
|
+
const { ref, slideOutId, defaultOpen, ...rest } = props;
|
|
2662
|
+
const { isOpen, setOpen, small } = use(LayoutContext);
|
|
2663
|
+
const open = isOpen(slideOutId);
|
|
2664
|
+
const handleOpenChange = useCallback(
|
|
2665
|
+
(open2) => {
|
|
2666
|
+
if (!open2) setOpen(slideOutId, false);
|
|
2667
|
+
},
|
|
2668
|
+
[setOpen, slideOutId]
|
|
2669
|
+
);
|
|
2670
|
+
useEffect(() => {
|
|
2671
|
+
if (small && (defaultOpen == null ? void 0 : defaultOpen.small) !== void 0) {
|
|
2672
|
+
setOpen(slideOutId, defaultOpen == null ? void 0 : defaultOpen.small);
|
|
2673
|
+
} else if (!small && (defaultOpen == null ? void 0 : defaultOpen.large) !== void 0) {
|
|
2674
|
+
setOpen(slideOutId, defaultOpen == null ? void 0 : defaultOpen.large);
|
|
2675
|
+
}
|
|
2676
|
+
}, [defaultOpen, slideOutId, setOpen, small]);
|
|
2677
|
+
return /* @__PURE__ */ jsx(SlideOutRoot, { ref, open, onOpenChange: handleOpenChange, modal: small, ...rest });
|
|
2678
|
+
});
|
|
2679
|
+
LayoutSlideOutRoot.displayName = "LayoutSlideOutRoot";
|
|
2793
2680
|
const LayoutSlideOutTrigger = memo((props) => {
|
|
2794
|
-
const { ref, slideOutId,
|
|
2681
|
+
const { ref, slideOutId, children, ...rest } = props;
|
|
2795
2682
|
const { isOpen, setOpen } = useLayoutContext();
|
|
2796
2683
|
const open = isOpen(slideOutId);
|
|
2797
2684
|
const handleClick = useCallback(() => {
|
|
2798
|
-
setOpen(slideOutId,
|
|
2799
|
-
}, [open, setOpen, slideOutId
|
|
2685
|
+
setOpen(slideOutId, !open);
|
|
2686
|
+
}, [open, setOpen, slideOutId]);
|
|
2800
2687
|
return /* @__PURE__ */ jsx(Slot, { "data-state": getOpenState(open), ref, onClick: handleClick, ...rest, children });
|
|
2801
2688
|
});
|
|
2802
|
-
LayoutSlideOutTrigger.displayName = "
|
|
2689
|
+
LayoutSlideOutTrigger.displayName = "LayoutSlideOutTrigger";
|
|
2690
|
+
const LayoutSlideOutViewport = memo((props) => {
|
|
2691
|
+
const { ref, ...rest } = props;
|
|
2692
|
+
return /* @__PURE__ */ jsx(SlideOutViewport, { ref, ...rest });
|
|
2693
|
+
});
|
|
2694
|
+
LayoutSlideOutViewport.displayName = "LayoutSlideOutViewport";
|
|
2803
2695
|
const Layout = {
|
|
2804
2696
|
Root: LayoutRoot,
|
|
2805
2697
|
Container: LayoutContainer,
|
|
2698
|
+
SlideOutClose: LayoutSlideOutClose,
|
|
2699
|
+
SlideOutContent: LayoutSlideOutContent,
|
|
2700
|
+
SlideOutHandle: LayoutSlideOutHandle,
|
|
2806
2701
|
SlideOutOverlay: LayoutSlideOutOverlay,
|
|
2807
|
-
|
|
2808
|
-
SlideOutTrigger: LayoutSlideOutTrigger
|
|
2702
|
+
SlideOutRoot: LayoutSlideOutRoot,
|
|
2703
|
+
SlideOutTrigger: LayoutSlideOutTrigger,
|
|
2704
|
+
SlideOutViewport: LayoutSlideOutViewport
|
|
2809
2705
|
};
|
|
2810
2706
|
const linkCva = cva(["cursor-pointer"], {
|
|
2811
2707
|
variants: {
|
|
@@ -2875,28 +2771,6 @@ const Link = memo((props) => {
|
|
|
2875
2771
|
);
|
|
2876
2772
|
});
|
|
2877
2773
|
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
2774
|
const menuItem = cva(
|
|
2901
2775
|
[
|
|
2902
2776
|
"select-none",
|
|
@@ -3042,100 +2916,115 @@ const inputRoot = cva(
|
|
|
3042
2916
|
}
|
|
3043
2917
|
}
|
|
3044
2918
|
);
|
|
2919
|
+
const MenuContentContext = createContext({});
|
|
3045
2920
|
const MenuContext = createContext({});
|
|
3046
|
-
const
|
|
3047
|
-
const
|
|
3048
|
-
const
|
|
2921
|
+
const SubContext = createContext({});
|
|
2922
|
+
const TRIGGER_SELECT_KEYS = ["Enter", " "];
|
|
2923
|
+
const MenuItem = memo((props) => {
|
|
2924
|
+
const rootMenuContext = use(MenuContext);
|
|
2925
|
+
const { getItemProps, activeIndex, setOpen, size: size2, variant, radius } = use(MenuContentContext);
|
|
2926
|
+
const { closeRoot } = use(SubContext);
|
|
3049
2927
|
const {
|
|
2928
|
+
ref: forwardedRef,
|
|
2929
|
+
className,
|
|
3050
2930
|
children,
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
open: controlledOpen,
|
|
3058
|
-
onOpenChange,
|
|
3059
|
-
defaultOpen
|
|
2931
|
+
onSelect,
|
|
2932
|
+
onClick,
|
|
2933
|
+
onKeyDown,
|
|
2934
|
+
closeOnSelect = true,
|
|
2935
|
+
disabled = false,
|
|
2936
|
+
...rest
|
|
3060
2937
|
} = props;
|
|
3061
|
-
const
|
|
3062
|
-
const [
|
|
3063
|
-
const
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
2938
|
+
const { ref, index } = useListItem();
|
|
2939
|
+
const mergeRefs2 = useMergeRefs([ref, forwardedRef]);
|
|
2940
|
+
const handleClick = useCallback(
|
|
2941
|
+
(e) => {
|
|
2942
|
+
e.stopPropagation();
|
|
2943
|
+
if (disabled) return;
|
|
2944
|
+
onClick == null ? void 0 : onClick(e);
|
|
2945
|
+
onSelect == null ? void 0 : onSelect();
|
|
2946
|
+
if (closeOnSelect) setOpen(false);
|
|
2947
|
+
if (closeRoot) rootMenuContext.setOpen(false);
|
|
2948
|
+
},
|
|
2949
|
+
[closeOnSelect, closeRoot, disabled, rootMenuContext, onClick, onSelect, setOpen]
|
|
2950
|
+
);
|
|
2951
|
+
const handleKeyDown = useCallback(
|
|
2952
|
+
(e) => {
|
|
2953
|
+
if (disabled) return;
|
|
2954
|
+
onKeyDown == null ? void 0 : onKeyDown(e);
|
|
2955
|
+
if (TRIGGER_SELECT_KEYS.includes(e.key)) {
|
|
2956
|
+
onSelect == null ? void 0 : onSelect();
|
|
2957
|
+
if (closeOnSelect) setOpen(false);
|
|
2958
|
+
}
|
|
2959
|
+
},
|
|
2960
|
+
[closeOnSelect, disabled, onKeyDown, onSelect, setOpen]
|
|
2961
|
+
);
|
|
2962
|
+
const isActive = useMemo(() => index === activeIndex, [activeIndex, index]);
|
|
2963
|
+
const computedChildren = useMemo(() => {
|
|
2964
|
+
return typeof children === "function" ? children({ active: isActive, selected: false }) : children;
|
|
2965
|
+
}, [children, isActive]);
|
|
2966
|
+
return /* @__PURE__ */ jsx(
|
|
2967
|
+
"li",
|
|
2968
|
+
{
|
|
2969
|
+
className: cx(menuItem({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
|
|
2970
|
+
ref: mergeRefs2,
|
|
2971
|
+
role: "menuitem",
|
|
2972
|
+
"data-disabled": getBooleanState(disabled),
|
|
2973
|
+
"aria-disabled": disabled,
|
|
2974
|
+
"data-highlighted": isActive ? "" : void 0,
|
|
2975
|
+
...getItemProps({
|
|
2976
|
+
onClick: handleClick,
|
|
2977
|
+
onKeyDown: handleKeyDown,
|
|
2978
|
+
tabIndex: isActive ? 0 : -1,
|
|
2979
|
+
...rest
|
|
3083
2980
|
}),
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
2981
|
+
children: computedChildren
|
|
2982
|
+
}
|
|
2983
|
+
);
|
|
2984
|
+
});
|
|
2985
|
+
MenuItem.displayName = "MenuItem";
|
|
2986
|
+
const MenuCheckboxItem = memo((props) => {
|
|
2987
|
+
const { ref, checked, onCheckedChange, onSelect, ...rest } = props;
|
|
2988
|
+
const handleSelect = useCallback(() => {
|
|
2989
|
+
onSelect == null ? void 0 : onSelect();
|
|
2990
|
+
switch (checked) {
|
|
2991
|
+
case true:
|
|
2992
|
+
onCheckedChange(false);
|
|
2993
|
+
break;
|
|
2994
|
+
case "indeterminate":
|
|
2995
|
+
case false:
|
|
2996
|
+
onCheckedChange(true);
|
|
2997
|
+
break;
|
|
2998
|
+
}
|
|
2999
|
+
}, [checked, onCheckedChange, onSelect]);
|
|
3000
|
+
return /* @__PURE__ */ jsx(CheckedIndicatorContext.Provider, { value: checked, children: /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, ...rest }) });
|
|
3001
|
+
});
|
|
3002
|
+
MenuCheckboxItem.displayName = "MenuCheckboxItem";
|
|
3003
|
+
const MenuCheckboxItemIndicator = memo((props) => {
|
|
3004
|
+
const { ref, children, ...rest } = props;
|
|
3005
|
+
return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
|
|
3006
|
+
});
|
|
3007
|
+
MenuCheckboxItemIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
3008
|
+
const MenuClickTrigger = memo((props) => {
|
|
3009
|
+
const { ref: forwardedRef, children, disabled = false } = props;
|
|
3010
|
+
const { getReferenceProps, refs, setTriggerType, open } = use(MenuContext);
|
|
3011
|
+
const mergedRefs = useMergeRefs([refs.setReference, forwardedRef]);
|
|
3012
|
+
useEffect(() => {
|
|
3013
|
+
setTriggerType("click");
|
|
3014
|
+
}, [setTriggerType]);
|
|
3015
|
+
return /* @__PURE__ */ jsx(
|
|
3016
|
+
Slot,
|
|
3113
3017
|
{
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
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
|
-
},
|
|
3018
|
+
ref: mergedRefs,
|
|
3019
|
+
"aria-disabled": disabled,
|
|
3020
|
+
"data-disabled": getBooleanState(disabled),
|
|
3021
|
+
"data-state": getOpenState(open),
|
|
3022
|
+
...getReferenceProps({ disabled }),
|
|
3132
3023
|
children
|
|
3133
3024
|
}
|
|
3134
|
-
)
|
|
3025
|
+
);
|
|
3135
3026
|
});
|
|
3136
|
-
|
|
3137
|
-
const MenuContentContext = createContext({});
|
|
3138
|
-
const useMenuContentContext = () => useContext(MenuContentContext);
|
|
3027
|
+
MenuClickTrigger.displayName = "MenuClickTrigger";
|
|
3139
3028
|
const MenuContent = memo((props) => {
|
|
3140
3029
|
var _a;
|
|
3141
3030
|
const providerContext = useProvider();
|
|
@@ -3164,7 +3053,7 @@ const MenuContent = memo((props) => {
|
|
|
3164
3053
|
floatingStyles,
|
|
3165
3054
|
modal,
|
|
3166
3055
|
side
|
|
3167
|
-
} =
|
|
3056
|
+
} = use(MenuContext);
|
|
3168
3057
|
const computedFloatingStyles = useMemo(() => {
|
|
3169
3058
|
var _a2;
|
|
3170
3059
|
return {
|
|
@@ -3236,216 +3125,10 @@ const MenuContent = memo((props) => {
|
|
|
3236
3125
|
) }) });
|
|
3237
3126
|
});
|
|
3238
3127
|
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",
|
|
3385
|
-
{
|
|
3386
|
-
className: cx(menuItem({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
|
|
3387
|
-
ref: mergeRefs2,
|
|
3388
|
-
role: "menuitem",
|
|
3389
|
-
"data-disabled": getBooleanState(disabled),
|
|
3390
|
-
"aria-disabled": disabled,
|
|
3391
|
-
"data-highlighted": isActive ? "" : void 0,
|
|
3392
|
-
...getItemProps({
|
|
3393
|
-
onClick: handleClick,
|
|
3394
|
-
onKeyDown: handleKeyDown,
|
|
3395
|
-
tabIndex: isActive ? 0 : -1,
|
|
3396
|
-
...rest
|
|
3397
|
-
}),
|
|
3398
|
-
children: computedChildren
|
|
3399
|
-
}
|
|
3400
|
-
);
|
|
3401
|
-
});
|
|
3402
|
-
MenuItem.displayName = "MenuItem";
|
|
3403
|
-
const MenuCheckboxItem = memo((props) => {
|
|
3404
|
-
const { ref, checked, onCheckedChange, onSelect, ...rest } = props;
|
|
3405
|
-
const handleSelect = useCallback(() => {
|
|
3406
|
-
onSelect == null ? void 0 : onSelect();
|
|
3407
|
-
switch (checked) {
|
|
3408
|
-
case true:
|
|
3409
|
-
onCheckedChange(false);
|
|
3410
|
-
break;
|
|
3411
|
-
case "indeterminate":
|
|
3412
|
-
case false:
|
|
3413
|
-
onCheckedChange(true);
|
|
3414
|
-
break;
|
|
3415
|
-
}
|
|
3416
|
-
}, [checked, onCheckedChange, onSelect]);
|
|
3417
|
-
return /* @__PURE__ */ jsx(CheckedIndicatorContext.Provider, { value: checked, children: /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, ...rest }) });
|
|
3418
|
-
});
|
|
3419
|
-
MenuCheckboxItem.displayName = "MenuCheckboxItem";
|
|
3420
|
-
const MenuCheckboxItemIndicator = memo((props) => {
|
|
3421
|
-
const { ref, children, ...rest } = props;
|
|
3422
|
-
return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
|
|
3423
|
-
});
|
|
3424
|
-
MenuCheckboxItemIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
3425
|
-
const MenuClickTrigger = memo((props) => {
|
|
3426
|
-
const { ref: forwardedRef, children, disabled = false } = props;
|
|
3427
|
-
const { getReferenceProps, refs, setTriggerType, open } = useMenuContext();
|
|
3428
|
-
const mergedRefs = useMergeRefs([refs.setReference, forwardedRef]);
|
|
3429
|
-
useEffect(() => {
|
|
3430
|
-
setTriggerType("click");
|
|
3431
|
-
}, [setTriggerType]);
|
|
3432
|
-
return /* @__PURE__ */ jsx(
|
|
3433
|
-
Slot,
|
|
3434
|
-
{
|
|
3435
|
-
ref: mergedRefs,
|
|
3436
|
-
"aria-disabled": disabled,
|
|
3437
|
-
"data-disabled": getBooleanState(disabled),
|
|
3438
|
-
"data-state": getOpenState(open),
|
|
3439
|
-
...getReferenceProps({ disabled }),
|
|
3440
|
-
children
|
|
3441
|
-
}
|
|
3442
|
-
);
|
|
3443
|
-
});
|
|
3444
|
-
MenuClickTrigger.displayName = "MenuClickTrigger";
|
|
3445
3128
|
const MenuContextTrigger = memo((props) => {
|
|
3446
3129
|
const { ref: forwardedRef, children, disabled = false } = props;
|
|
3447
3130
|
const ref = useRef(null);
|
|
3448
|
-
const { setOpen, refs, setTriggerType, open } =
|
|
3131
|
+
const { setOpen, refs, setTriggerType, open } = use(MenuContext);
|
|
3449
3132
|
const mergedRefs = useMergeRefs([forwardedRef, ref]);
|
|
3450
3133
|
useEffect(() => {
|
|
3451
3134
|
setTriggerType("context");
|
|
@@ -3496,7 +3179,7 @@ const MenuGroup = memo((props) => {
|
|
|
3496
3179
|
MenuGroup.displayName = "MenuGroup";
|
|
3497
3180
|
const MenuInputField = memo((props) => {
|
|
3498
3181
|
const { ref: forwardedRef, className, onValueChange, onChange, disabled = false, ...rest } = props;
|
|
3499
|
-
const { activeIndex, getItemProps } =
|
|
3182
|
+
const { activeIndex, getItemProps } = use(MenuContentContext);
|
|
3500
3183
|
const { index, ref } = useListItem();
|
|
3501
3184
|
const mergedRefs = useMergeRefs([ref, forwardedRef]);
|
|
3502
3185
|
const handleChange = useCallback(
|
|
@@ -3529,7 +3212,7 @@ const MenuInputField = memo((props) => {
|
|
|
3529
3212
|
MenuInputField.displayName = "MenuInputField";
|
|
3530
3213
|
const MenuInputRoot = memo((props) => {
|
|
3531
3214
|
const { ref, className, ...rest } = props;
|
|
3532
|
-
const { size: size2 } =
|
|
3215
|
+
const { size: size2 } = use(MenuContentContext);
|
|
3533
3216
|
return /* @__PURE__ */ jsx("div", { className: cx(inputRoot({ size: size2 }), className), ref, ...rest });
|
|
3534
3217
|
});
|
|
3535
3218
|
MenuInputRoot.displayName = "MenuInputRoot";
|
|
@@ -3540,7 +3223,7 @@ const MenuInputSlot = memo((props) => {
|
|
|
3540
3223
|
MenuInputSlot.displayName = "MenuInputSlot";
|
|
3541
3224
|
const MenuLabel = memo((props) => {
|
|
3542
3225
|
const { ref, className, ...rest } = props;
|
|
3543
|
-
const { size: size2 } =
|
|
3226
|
+
const { size: size2 } = use(MenuContentContext);
|
|
3544
3227
|
return /* @__PURE__ */ jsx("div", { ref, className: cx(menuLabelCva({ size: size2 }), className), ...rest });
|
|
3545
3228
|
});
|
|
3546
3229
|
MenuLabel.displayName = "MenuLabel";
|
|
@@ -3548,29 +3231,6 @@ const MenuMultiSelectGroup = genericMemo(function MenuMultiSelectGroup2(props) {
|
|
|
3548
3231
|
const { ref, children, defaultValues, values, onValuesChange, ...rest } = props;
|
|
3549
3232
|
return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: /* @__PURE__ */ jsx(MultiSelectProvider, { defaultValues, values, onValuesChange, children }) });
|
|
3550
3233
|
});
|
|
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
3234
|
const MenuMultiSelectItem = genericMemo(function(props) {
|
|
3575
3235
|
const { ref, onSelect, children, closeOnSelect = false, value, ...rest } = props;
|
|
3576
3236
|
const { selected, selectValue, registerValue } = use(MultiSelectContext);
|
|
@@ -3599,7 +3259,12 @@ const MenuMultiSelectItem = genericMemo(function(props) {
|
|
|
3599
3259
|
) });
|
|
3600
3260
|
});
|
|
3601
3261
|
const PagesContext = createContext({});
|
|
3602
|
-
const
|
|
3262
|
+
const MenuPageContent = memo((props) => {
|
|
3263
|
+
const { page, children } = props;
|
|
3264
|
+
const { activePage } = use(PagesContext);
|
|
3265
|
+
return activePage === page ? children : null;
|
|
3266
|
+
});
|
|
3267
|
+
MenuPageContent.displayName = "PageContent";
|
|
3603
3268
|
const MenuPages = memo((props) => {
|
|
3604
3269
|
const { children, defaultPage, page, onPageChange } = props;
|
|
3605
3270
|
const [activePage, setActivePage] = useControlledState(defaultPage ?? "", page, onPageChange);
|
|
@@ -3607,67 +3272,958 @@ const MenuPages = memo((props) => {
|
|
|
3607
3272
|
return /* @__PURE__ */ jsx(PagesContext.Provider, { value: contextValue, children });
|
|
3608
3273
|
});
|
|
3609
3274
|
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
3275
|
const MenuPageTrigger = memo((props) => {
|
|
3617
3276
|
const { ref, onSelect, page, ...rest } = props;
|
|
3618
|
-
const { refs, setActiveIndex } =
|
|
3619
|
-
const { setActivePage } =
|
|
3277
|
+
const { refs, setActiveIndex } = use(MenuContentContext);
|
|
3278
|
+
const { setActivePage } = use(PagesContext);
|
|
3620
3279
|
const handleSelect = useCallback(() => {
|
|
3621
3280
|
var _a;
|
|
3622
|
-
onSelect == null ? void 0 : onSelect();
|
|
3623
|
-
setActivePage(page);
|
|
3624
|
-
(_a = refs.floating.current) == null ? void 0 : _a.focus();
|
|
3625
|
-
setActiveIndex(null);
|
|
3626
|
-
}, [onSelect, page, refs.floating, setActiveIndex, setActivePage]);
|
|
3627
|
-
return /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, closeOnSelect: false, ...rest });
|
|
3628
|
-
});
|
|
3629
|
-
MenuPageTrigger.displayName = "MenuPageTrigger";
|
|
3630
|
-
const
|
|
3631
|
-
|
|
3281
|
+
onSelect == null ? void 0 : onSelect();
|
|
3282
|
+
setActivePage(page);
|
|
3283
|
+
(_a = refs.floating.current) == null ? void 0 : _a.focus();
|
|
3284
|
+
setActiveIndex(null);
|
|
3285
|
+
}, [onSelect, page, refs.floating, setActiveIndex, setActivePage]);
|
|
3286
|
+
return /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, closeOnSelect: false, ...rest });
|
|
3287
|
+
});
|
|
3288
|
+
MenuPageTrigger.displayName = "MenuPageTrigger";
|
|
3289
|
+
const MENU_OVERFLOW_PADDING = 20;
|
|
3290
|
+
const MENU_CONTENT_PADDING = 8;
|
|
3291
|
+
const MENU_MINIMUM_MAX_HEIGHT = 250;
|
|
3292
|
+
const DEFAULT_OFFSET = 5;
|
|
3293
|
+
const MenuRoot = memo((props) => {
|
|
3294
|
+
const {
|
|
3295
|
+
children,
|
|
3296
|
+
side = "bottom",
|
|
3297
|
+
align = "center",
|
|
3298
|
+
offset: offset$1,
|
|
3299
|
+
loop = false,
|
|
3300
|
+
modal = false,
|
|
3301
|
+
// open state related props
|
|
3302
|
+
open: controlledOpen,
|
|
3303
|
+
onOpenChange,
|
|
3304
|
+
defaultOpen
|
|
3305
|
+
} = props;
|
|
3306
|
+
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
3307
|
+
const [activeIndex, setActiveIndex] = useState(null);
|
|
3308
|
+
const [triggerType, setTriggerType] = useState(null);
|
|
3309
|
+
const elementsRef = useRef([]);
|
|
3310
|
+
const nodeId = useFloatingNodeId();
|
|
3311
|
+
const { refs, floatingStyles, context, middlewareData } = useFloating({
|
|
3312
|
+
nodeId,
|
|
3313
|
+
strategy: "fixed",
|
|
3314
|
+
// TODO: probably some way with template string types to not need the "as Placement"
|
|
3315
|
+
placement: side + (align !== "center" ? "-" + align : ""),
|
|
3316
|
+
whileElementsMounted: autoUpdate,
|
|
3317
|
+
open,
|
|
3318
|
+
onOpenChange: setOpen,
|
|
3319
|
+
middleware: [
|
|
3320
|
+
offset({ mainAxis: offset$1 ?? DEFAULT_OFFSET }),
|
|
3321
|
+
size({
|
|
3322
|
+
apply({ availableHeight, elements }) {
|
|
3323
|
+
elements.floating.style.setProperty(
|
|
3324
|
+
"--overmap-menu-available-height",
|
|
3325
|
+
`${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
|
|
3326
|
+
);
|
|
3327
|
+
},
|
|
3328
|
+
padding: MENU_OVERFLOW_PADDING
|
|
3329
|
+
}),
|
|
3330
|
+
flip({ fallbackStrategy: "initialPlacement" }),
|
|
3331
|
+
shift({ padding: MENU_OVERFLOW_PADDING }),
|
|
3332
|
+
hide()
|
|
3333
|
+
]
|
|
3334
|
+
});
|
|
3335
|
+
const role = useRole(context, {
|
|
3336
|
+
role: "menu"
|
|
3337
|
+
});
|
|
3338
|
+
const dismiss = useDismiss(context, {
|
|
3339
|
+
capture: true,
|
|
3340
|
+
ancestorScroll: triggerType === "context" || triggerType === "virtual"
|
|
3341
|
+
});
|
|
3342
|
+
const click = useClick(context, {
|
|
3343
|
+
enabled: triggerType === "click"
|
|
3344
|
+
});
|
|
3345
|
+
const listNavigation = useListNavigation(context, {
|
|
3346
|
+
listRef: elementsRef,
|
|
3347
|
+
activeIndex,
|
|
3348
|
+
onNavigate: setActiveIndex,
|
|
3349
|
+
loop
|
|
3350
|
+
});
|
|
3351
|
+
const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
|
|
3352
|
+
dismiss,
|
|
3353
|
+
listNavigation,
|
|
3354
|
+
click,
|
|
3355
|
+
role
|
|
3356
|
+
]);
|
|
3357
|
+
return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(
|
|
3358
|
+
MenuContext.Provider,
|
|
3359
|
+
{
|
|
3360
|
+
value: {
|
|
3361
|
+
open,
|
|
3362
|
+
setOpen,
|
|
3363
|
+
refs,
|
|
3364
|
+
context,
|
|
3365
|
+
floatingStyles,
|
|
3366
|
+
elementsRef,
|
|
3367
|
+
getFloatingProps,
|
|
3368
|
+
getItemProps,
|
|
3369
|
+
getReferenceProps,
|
|
3370
|
+
nodeId,
|
|
3371
|
+
activeIndex,
|
|
3372
|
+
setActiveIndex,
|
|
3373
|
+
middlewareData,
|
|
3374
|
+
side,
|
|
3375
|
+
modal,
|
|
3376
|
+
setTriggerType
|
|
3377
|
+
},
|
|
3378
|
+
children
|
|
3379
|
+
}
|
|
3380
|
+
) });
|
|
3381
|
+
});
|
|
3382
|
+
MenuRoot.displayName = "Root";
|
|
3383
|
+
const MenuScroll = memo((props) => {
|
|
3384
|
+
const { ref, className, ...rest } = props;
|
|
3385
|
+
return /* @__PURE__ */ jsx(
|
|
3386
|
+
"div",
|
|
3387
|
+
{
|
|
3388
|
+
ref,
|
|
3389
|
+
className: cx(
|
|
3390
|
+
"h-full overflow-x-hidden overflow-y-auto [scrollbar-color:var(--base-6)_transparent] [scrollbar-width:thin]",
|
|
3391
|
+
className
|
|
3392
|
+
),
|
|
3393
|
+
...rest
|
|
3394
|
+
}
|
|
3395
|
+
);
|
|
3396
|
+
});
|
|
3397
|
+
MenuScroll.displayName = "MenuScroll";
|
|
3398
|
+
const MenuSelectAllItem = genericMemo((props) => {
|
|
3399
|
+
const { ref, children, onSelect, closeOnSelect = false, ...rest } = props;
|
|
3400
|
+
const { allSelected, someSelected, toggleSelectAll } = use(MultiSelectContext);
|
|
3401
|
+
const selectedState = allSelected ? true : someSelected ? "indeterminate" : false;
|
|
3402
|
+
const handleSelect = useCallback(() => {
|
|
3403
|
+
onSelect == null ? void 0 : onSelect();
|
|
3404
|
+
toggleSelectAll();
|
|
3405
|
+
}, [onSelect, toggleSelectAll]);
|
|
3406
|
+
const computedChildren = useMemo(() => {
|
|
3407
|
+
return typeof children === "function" ? ({ active }) => children({ selected: selectedState, active }) : children;
|
|
3408
|
+
}, [children, selectedState]);
|
|
3409
|
+
return /* @__PURE__ */ jsx(CheckedIndicatorContext, { value: selectedState, children: /* @__PURE__ */ jsx(
|
|
3410
|
+
MenuItem,
|
|
3411
|
+
{
|
|
3412
|
+
onSelect: handleSelect,
|
|
3413
|
+
ref,
|
|
3414
|
+
"data-state": getCheckedState(selectedState),
|
|
3415
|
+
closeOnSelect,
|
|
3416
|
+
...rest,
|
|
3417
|
+
children: computedChildren
|
|
3418
|
+
}
|
|
3419
|
+
) });
|
|
3420
|
+
});
|
|
3421
|
+
const MenuSelectedIndicator = memo((props) => {
|
|
3422
|
+
const { ref, children, ...rest } = props;
|
|
3423
|
+
return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
|
|
3424
|
+
});
|
|
3425
|
+
MenuSelectedIndicator.displayName = "MenuSelectedIndicator";
|
|
3426
|
+
const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
|
|
3427
|
+
const { ref, children, required, defaultValue, value, onValueChange, ...rest } = props;
|
|
3428
|
+
return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
|
|
3429
|
+
SingleSelectNotRequiredProvider,
|
|
3430
|
+
{
|
|
3431
|
+
defaultValue,
|
|
3432
|
+
value,
|
|
3433
|
+
onValueChange,
|
|
3434
|
+
children
|
|
3435
|
+
}
|
|
3436
|
+
) });
|
|
3437
|
+
});
|
|
3438
|
+
const MenuSelectItem = genericMemo(function(props) {
|
|
3439
|
+
const { ref, value, onSelect, children, closeOnSelect = true, ...rest } = props;
|
|
3440
|
+
const { selected, selectValue } = use(SelectContext);
|
|
3441
|
+
const isSelected = selected(value);
|
|
3442
|
+
const handleSelect = useCallback(() => {
|
|
3443
|
+
onSelect == null ? void 0 : onSelect();
|
|
3444
|
+
selectValue(value);
|
|
3445
|
+
}, [onSelect, selectValue, value]);
|
|
3446
|
+
const computedChildren = useMemo(() => {
|
|
3447
|
+
return typeof children === "function" ? ({ active }) => children({ selected: isSelected, active }) : children;
|
|
3448
|
+
}, [children, isSelected]);
|
|
3449
|
+
return /* @__PURE__ */ jsx(SelectedIndicatorContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsx(
|
|
3450
|
+
MenuItem,
|
|
3451
|
+
{
|
|
3452
|
+
ref,
|
|
3453
|
+
role: "menuitemcheckbox",
|
|
3454
|
+
onSelect: handleSelect,
|
|
3455
|
+
closeOnSelect,
|
|
3456
|
+
"data-state": getSelectedState(isSelected),
|
|
3457
|
+
...rest,
|
|
3458
|
+
children: computedChildren
|
|
3459
|
+
}
|
|
3460
|
+
) });
|
|
3461
|
+
});
|
|
3462
|
+
const MenuSeparator = memo((props) => {
|
|
3463
|
+
const { ref, className, ...rest } = props;
|
|
3464
|
+
const { size: size2 } = use(MenuContentContext);
|
|
3465
|
+
return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparator({ size: size2 }), className), ref, ...rest });
|
|
3466
|
+
});
|
|
3467
|
+
MenuSeparator.displayName = "MenuSeparator";
|
|
3468
|
+
const computeOffsets = (side, alignment) => {
|
|
3469
|
+
switch (side) {
|
|
3470
|
+
case "right":
|
|
3471
|
+
if (alignment === "start") {
|
|
3472
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
|
|
3473
|
+
} else if (alignment === "end") {
|
|
3474
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
|
|
3475
|
+
}
|
|
3476
|
+
break;
|
|
3477
|
+
case "left":
|
|
3478
|
+
if (alignment === "start") {
|
|
3479
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
|
|
3480
|
+
} else if (alignment === "end") {
|
|
3481
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
|
|
3482
|
+
}
|
|
3483
|
+
break;
|
|
3484
|
+
}
|
|
3485
|
+
return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: 0 };
|
|
3486
|
+
};
|
|
3487
|
+
const MenuSub = memo((props) => {
|
|
3488
|
+
const {
|
|
3489
|
+
children,
|
|
3490
|
+
disabled = false,
|
|
3491
|
+
side = "right",
|
|
3492
|
+
align = "start",
|
|
3493
|
+
closeRoot = false,
|
|
3494
|
+
loop = false,
|
|
3495
|
+
modal = false,
|
|
3496
|
+
// open state related props
|
|
3497
|
+
open: controlledOpen,
|
|
3498
|
+
onOpenChange,
|
|
3499
|
+
defaultOpen
|
|
3500
|
+
} = props;
|
|
3501
|
+
const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
|
|
3502
|
+
const nodeId = useFloatingNodeId();
|
|
3503
|
+
const { refs, floatingStyles, context } = useFloating({
|
|
3504
|
+
nodeId,
|
|
3505
|
+
strategy: "fixed",
|
|
3506
|
+
whileElementsMounted: autoUpdate,
|
|
3507
|
+
open,
|
|
3508
|
+
onOpenChange: (open2, _event, reason) => {
|
|
3509
|
+
if (reason) setOpen(open2);
|
|
3510
|
+
},
|
|
3511
|
+
placement: side + (align !== "center" ? "-" + align : ""),
|
|
3512
|
+
middleware: [
|
|
3513
|
+
offset({ ...computeOffsets(side, align) }),
|
|
3514
|
+
size({
|
|
3515
|
+
padding: MENU_OVERFLOW_PADDING,
|
|
3516
|
+
apply({ availableHeight, elements }) {
|
|
3517
|
+
elements.floating.style.setProperty(
|
|
3518
|
+
"--overmap-menu-available-height",
|
|
3519
|
+
`${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
|
|
3520
|
+
);
|
|
3521
|
+
}
|
|
3522
|
+
}),
|
|
3523
|
+
flip(),
|
|
3524
|
+
shift({ padding: MENU_OVERFLOW_PADDING }),
|
|
3525
|
+
hide()
|
|
3526
|
+
]
|
|
3527
|
+
});
|
|
3528
|
+
const dismiss = useDismiss(context, {
|
|
3529
|
+
bubbles: closeRoot,
|
|
3530
|
+
outsidePress: closeRoot
|
|
3531
|
+
});
|
|
3532
|
+
const hover = useHover(context, {
|
|
3533
|
+
restMs: 50,
|
|
3534
|
+
handleClose: safePolygon({
|
|
3535
|
+
blockPointerEvents: true,
|
|
3536
|
+
requireIntent: false
|
|
3537
|
+
}),
|
|
3538
|
+
enabled: !disabled
|
|
3539
|
+
});
|
|
3540
|
+
const click = useClick(context, {
|
|
3541
|
+
enabled: !disabled
|
|
3542
|
+
});
|
|
3543
|
+
const elementsRef = useRef([]);
|
|
3544
|
+
const [activeIndex, setActiveIndex] = useState(null);
|
|
3545
|
+
const listNavigation = useListNavigation(context, {
|
|
3546
|
+
listRef: elementsRef,
|
|
3547
|
+
nested: true,
|
|
3548
|
+
activeIndex,
|
|
3549
|
+
onNavigate: setActiveIndex,
|
|
3550
|
+
loop,
|
|
3551
|
+
rtl: side === "left"
|
|
3552
|
+
});
|
|
3553
|
+
const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
|
|
3554
|
+
listNavigation,
|
|
3555
|
+
dismiss,
|
|
3556
|
+
hover,
|
|
3557
|
+
click
|
|
3558
|
+
]);
|
|
3559
|
+
return /* @__PURE__ */ jsx(
|
|
3560
|
+
SubContext.Provider,
|
|
3561
|
+
{
|
|
3562
|
+
value: {
|
|
3563
|
+
open,
|
|
3564
|
+
setOpen,
|
|
3565
|
+
nodeId,
|
|
3566
|
+
refs,
|
|
3567
|
+
floatingStyles,
|
|
3568
|
+
context,
|
|
3569
|
+
elementsRef,
|
|
3570
|
+
activeIndex,
|
|
3571
|
+
setActiveIndex,
|
|
3572
|
+
getFloatingProps,
|
|
3573
|
+
getItemProps,
|
|
3574
|
+
getReferenceProps,
|
|
3575
|
+
disabled,
|
|
3576
|
+
side,
|
|
3577
|
+
closeRoot,
|
|
3578
|
+
modal
|
|
3579
|
+
},
|
|
3580
|
+
children
|
|
3581
|
+
}
|
|
3582
|
+
);
|
|
3583
|
+
});
|
|
3584
|
+
MenuSub.displayName = "SubMenu";
|
|
3585
|
+
const MenuSubContent = memo((props) => {
|
|
3586
|
+
var _a;
|
|
3587
|
+
const { ref: forwardedRef, children, ...rest } = props;
|
|
3588
|
+
const { middlewareData } = use(MenuContext);
|
|
3589
|
+
const { accentColor, radius, variant, size: size2 } = use(MenuContentContext);
|
|
3590
|
+
const {
|
|
3591
|
+
open,
|
|
3592
|
+
nodeId,
|
|
3593
|
+
refs,
|
|
3594
|
+
context,
|
|
3595
|
+
getFloatingProps,
|
|
3596
|
+
getItemProps,
|
|
3597
|
+
activeIndex,
|
|
3598
|
+
setActiveIndex,
|
|
3599
|
+
elementsRef,
|
|
3600
|
+
floatingStyles,
|
|
3601
|
+
setOpen,
|
|
3602
|
+
side
|
|
3603
|
+
} = use(SubContext);
|
|
3604
|
+
const wrapperRef = useRef(null);
|
|
3605
|
+
const mergeRefs2 = useMergeRefs([refs.setFloating, wrapperRef]);
|
|
3606
|
+
const computedFloatingStyles = useMemo(() => {
|
|
3607
|
+
var _a2;
|
|
3608
|
+
return {
|
|
3609
|
+
...floatingStyles,
|
|
3610
|
+
visibility: ((_a2 = middlewareData.hide) == null ? void 0 : _a2.referenceHidden) ? "hidden" : "visible"
|
|
3611
|
+
};
|
|
3612
|
+
}, [floatingStyles, (_a = middlewareData.hide) == null ? void 0 : _a.referenceHidden]);
|
|
3613
|
+
return /* @__PURE__ */ jsx(FloatingNode, { id: nodeId, children: open && /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsx(FloatingFocusManager, { context, initialFocus: wrapperRef, children: /* @__PURE__ */ jsx(FloatingList, { elementsRef, children: /* @__PURE__ */ jsx(
|
|
3614
|
+
MenuContentContext.Provider,
|
|
3615
|
+
{
|
|
3616
|
+
value: {
|
|
3617
|
+
getItemProps,
|
|
3618
|
+
activeIndex,
|
|
3619
|
+
setActiveIndex,
|
|
3620
|
+
elementsRef,
|
|
3621
|
+
open,
|
|
3622
|
+
setOpen,
|
|
3623
|
+
refs,
|
|
3624
|
+
size: size2,
|
|
3625
|
+
radius,
|
|
3626
|
+
accentColor,
|
|
3627
|
+
variant
|
|
3628
|
+
},
|
|
3629
|
+
children: /* @__PURE__ */ jsx(
|
|
3630
|
+
"div",
|
|
3631
|
+
{
|
|
3632
|
+
className: "outline-none",
|
|
3633
|
+
ref: mergeRefs2,
|
|
3634
|
+
style: computedFloatingStyles,
|
|
3635
|
+
...getFloatingProps(),
|
|
3636
|
+
children: /* @__PURE__ */ jsx(
|
|
3637
|
+
"ul",
|
|
3638
|
+
{
|
|
3639
|
+
className: cx(
|
|
3640
|
+
"overmap-menu-sub-content",
|
|
3641
|
+
menuContent({ size: size2 }),
|
|
3642
|
+
floating({ side, shadow: "3" }),
|
|
3643
|
+
radiusCva({ radius, maxLarge: true }),
|
|
3644
|
+
"max-h-(--overmap-menu-available-height)"
|
|
3645
|
+
),
|
|
3646
|
+
ref: forwardedRef,
|
|
3647
|
+
"data-state": getOpenState(open),
|
|
3648
|
+
"data-side": side,
|
|
3649
|
+
"data-accent-color": accentColor,
|
|
3650
|
+
...rest,
|
|
3651
|
+
children
|
|
3652
|
+
}
|
|
3653
|
+
)
|
|
3654
|
+
}
|
|
3655
|
+
)
|
|
3656
|
+
}
|
|
3657
|
+
) }) }) }) });
|
|
3658
|
+
});
|
|
3659
|
+
MenuSubContent.displayName = "MenuSubContent";
|
|
3660
|
+
const MenuSubTrigger = memo((props) => {
|
|
3661
|
+
const { ref: forwardedRef, children, ...rest } = props;
|
|
3662
|
+
const { refs, getReferenceProps, open, disabled } = use(SubContext);
|
|
3663
|
+
const mergedRefs = useMergeRefs([forwardedRef, refs.setReference]);
|
|
3664
|
+
return /* @__PURE__ */ jsx(
|
|
3665
|
+
MenuItem,
|
|
3666
|
+
{
|
|
3667
|
+
ref: mergedRefs,
|
|
3668
|
+
closeOnSelect: false,
|
|
3669
|
+
"aria-haspopup": "menu",
|
|
3670
|
+
"data-state": getOpenState(open),
|
|
3671
|
+
disabled,
|
|
3672
|
+
...getReferenceProps(rest),
|
|
3673
|
+
children
|
|
3674
|
+
}
|
|
3675
|
+
);
|
|
3676
|
+
});
|
|
3677
|
+
MenuSubTrigger.displayName = "MenuSubTrigger";
|
|
3678
|
+
const MenuVirtualTrigger = memo((props) => {
|
|
3679
|
+
const { virtualElement, disabled } = props;
|
|
3680
|
+
const { refs, setTriggerType, setOpen } = use(MenuContext);
|
|
3681
|
+
useEffect(() => {
|
|
3682
|
+
setTriggerType("virtual");
|
|
3683
|
+
}, [setTriggerType]);
|
|
3684
|
+
useEffect(() => {
|
|
3685
|
+
if (!disabled && virtualElement) {
|
|
3686
|
+
refs.setPositionReference(virtualElement);
|
|
3687
|
+
setOpen(true);
|
|
3688
|
+
} else {
|
|
3689
|
+
refs.setPositionReference(null);
|
|
3690
|
+
setOpen(false);
|
|
3691
|
+
}
|
|
3692
|
+
}, [disabled, refs, setOpen, virtualElement]);
|
|
3693
|
+
return null;
|
|
3694
|
+
});
|
|
3695
|
+
MenuVirtualTrigger.displayName = "VirtualTrigger";
|
|
3696
|
+
const Menu = {
|
|
3697
|
+
Root: MenuRoot,
|
|
3698
|
+
Content: MenuContent,
|
|
3699
|
+
// sub
|
|
3700
|
+
Sub: MenuSub,
|
|
3701
|
+
SubContent: MenuSubContent,
|
|
3702
|
+
SubTrigger: MenuSubTrigger,
|
|
3703
|
+
// pages
|
|
3704
|
+
Pages: MenuPages,
|
|
3705
|
+
PageContent: MenuPageContent,
|
|
3706
|
+
PageTrigger: MenuPageTrigger,
|
|
3707
|
+
// triggers
|
|
3708
|
+
ClickTrigger: MenuClickTrigger,
|
|
3709
|
+
ContextTrigger: MenuContextTrigger,
|
|
3710
|
+
VirtualTrigger: MenuVirtualTrigger,
|
|
3711
|
+
// groups
|
|
3712
|
+
Group: MenuGroup,
|
|
3713
|
+
SelectGroup: MenuSelectGroup,
|
|
3714
|
+
MultiSelectGroup: MenuMultiSelectGroup,
|
|
3715
|
+
// items
|
|
3716
|
+
Item: MenuItem,
|
|
3717
|
+
SelectItem: MenuSelectItem,
|
|
3718
|
+
MultiSelectItem: MenuMultiSelectItem,
|
|
3719
|
+
SelectAllItem: MenuSelectAllItem,
|
|
3720
|
+
CheckboxItem: MenuCheckboxItem,
|
|
3721
|
+
// indicators
|
|
3722
|
+
SelectedIndicator: MenuSelectedIndicator,
|
|
3723
|
+
CheckboxItemIndicator: MenuCheckboxItemIndicator,
|
|
3724
|
+
// input
|
|
3725
|
+
InputRoot: MenuInputRoot,
|
|
3726
|
+
InputField: MenuInputField,
|
|
3727
|
+
InputSlot: MenuInputSlot,
|
|
3728
|
+
// others
|
|
3729
|
+
Label: MenuLabel,
|
|
3730
|
+
Separator: MenuSeparator,
|
|
3731
|
+
Scroll: MenuScroll
|
|
3732
|
+
};
|
|
3733
|
+
const KEY_MAPPING = {
|
|
3734
|
+
next: "ArrowDown",
|
|
3735
|
+
prev: "ArrowUp",
|
|
3736
|
+
first: "PageUp",
|
|
3737
|
+
last: "PageDown",
|
|
3738
|
+
selectItem: "Enter"
|
|
3739
|
+
};
|
|
3740
|
+
const ITEM_SELECTOR = "menu-item";
|
|
3741
|
+
const GROUP_SELECTOR = "menu-group";
|
|
3742
|
+
const MenuRootContext = createContext({});
|
|
3743
|
+
const MenuGroupContext = createContext({});
|
|
3744
|
+
const MenuPageContext = createContext({});
|
|
3745
|
+
const menuRootCva = cva(["w-full", "outline-none"], {
|
|
3746
|
+
variants: {
|
|
3747
|
+
size: {
|
|
3748
|
+
xs: ["p-0.5", "text-xs", "min-w-30"],
|
|
3749
|
+
sm: ["p-0.75", "text-sm", "min-w-35"],
|
|
3750
|
+
md: ["p-1", "text-md", "min-w-40"],
|
|
3751
|
+
lg: ["p-1.25", "text-lg", "min-w-45"],
|
|
3752
|
+
xl: ["p-1.5", "text-xl", "min-w-50"]
|
|
3753
|
+
},
|
|
3754
|
+
radius: {
|
|
3755
|
+
none: ["rounded-none"],
|
|
3756
|
+
xs: ["rounded-xs"],
|
|
3757
|
+
sm: ["rounded-sm"],
|
|
3758
|
+
md: ["rounded-md"],
|
|
3759
|
+
lg: ["rounded-lg"],
|
|
3760
|
+
xl: ["rounded-lg"],
|
|
3761
|
+
full: ["rounded-lg"]
|
|
3762
|
+
}
|
|
3763
|
+
}
|
|
3764
|
+
});
|
|
3765
|
+
const menuItemCva = cva(
|
|
3766
|
+
[
|
|
3767
|
+
"select-none",
|
|
3768
|
+
"relative",
|
|
3769
|
+
"flex",
|
|
3770
|
+
"items-center",
|
|
3771
|
+
"outline-none",
|
|
3772
|
+
"data-[disabled=true]:text-(--base-a8)",
|
|
3773
|
+
"data-[disabled=true]:pointer-events-none",
|
|
3774
|
+
"shrink-0",
|
|
3775
|
+
"py-1",
|
|
3776
|
+
"text-(--base-12)"
|
|
3777
|
+
],
|
|
3778
|
+
{
|
|
3779
|
+
variants: {
|
|
3780
|
+
size: {
|
|
3781
|
+
xs: ["gap-1.5", "px-3"],
|
|
3782
|
+
sm: ["gap-1.75", "px-3.5"],
|
|
3783
|
+
md: ["gap-2", "px-4"],
|
|
3784
|
+
lg: ["gap-2.25", "px-4.5"],
|
|
3785
|
+
xl: ["gap-2.5", "px-5"]
|
|
3786
|
+
},
|
|
3787
|
+
variant: {
|
|
3788
|
+
solid: [
|
|
3789
|
+
"data-[active=true]:not-[data-[disabled=true]]:text-(--accent-contrast)",
|
|
3790
|
+
"data-[active=true]:not-[data-[disabled=true]]:bg-(--accent-a9)",
|
|
3791
|
+
"data-[active=true]:not-[data-[disabled=true]]:active:brightness-110"
|
|
3792
|
+
],
|
|
3793
|
+
soft: [
|
|
3794
|
+
"data-[active=true]:not-[data-[disabled=true]]:bg-(--accent-a3)",
|
|
3795
|
+
"data-[active=true]:not-[data-[disabled=true]]:active:bg-(--accent-a4)"
|
|
3796
|
+
]
|
|
3797
|
+
}
|
|
3798
|
+
}
|
|
3799
|
+
}
|
|
3800
|
+
);
|
|
3801
|
+
const menuGroupLabelCva = cva(["text-(--base-a11)", "flex", "items-center", "select-none", "py-1"], {
|
|
3802
|
+
variants: {
|
|
3803
|
+
size: {
|
|
3804
|
+
xs: ["gap-1.5", "px-3", "text-xs"],
|
|
3805
|
+
sm: ["gap-1.75", "px-3.5", "text-xs"],
|
|
3806
|
+
md: ["gap-2", "px-4", "text-sm"],
|
|
3807
|
+
lg: ["gap-2.25", "px-4.5", "text-base"],
|
|
3808
|
+
xl: ["gap-2.5", "px-5", "text-lg"]
|
|
3809
|
+
}
|
|
3810
|
+
}
|
|
3811
|
+
});
|
|
3812
|
+
const menuSeparatorCva = cva(["h-px", "bg-(--base-a6)", "w-auto", "shrink-0"], {
|
|
3813
|
+
variants: {
|
|
3814
|
+
size: {
|
|
3815
|
+
xs: ["-mx-0.5", "my-0.5"],
|
|
3816
|
+
sm: ["-mx-0.75", "my-0.75"],
|
|
3817
|
+
md: ["-mx-1", "my-1"],
|
|
3818
|
+
lg: ["-mx-1.25", "my-1.25"],
|
|
3819
|
+
xl: ["-mx-1.5", "my-1.5"]
|
|
3820
|
+
}
|
|
3821
|
+
}
|
|
3822
|
+
});
|
|
3823
|
+
const MenuV2Item = memo((props) => {
|
|
3824
|
+
const {
|
|
3825
|
+
ref,
|
|
3826
|
+
children,
|
|
3827
|
+
className,
|
|
3828
|
+
disabled = false,
|
|
3829
|
+
onClick,
|
|
3830
|
+
onSelect,
|
|
3831
|
+
onPointerEnter,
|
|
3832
|
+
onPointerLeave,
|
|
3833
|
+
onPointerMove,
|
|
3834
|
+
...rest
|
|
3835
|
+
} = props;
|
|
3836
|
+
const internalRef = useRef(null);
|
|
3837
|
+
const itemId = useId();
|
|
3838
|
+
const { activeItemId, setActiveItemId, size: size2, variant, radius } = use(MenuRootContext);
|
|
3839
|
+
const isActive = itemId === activeItemId;
|
|
3840
|
+
const handleSelect = useCallback(
|
|
3841
|
+
(e) => {
|
|
3842
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
3843
|
+
},
|
|
3844
|
+
[onSelect]
|
|
3845
|
+
);
|
|
3846
|
+
const handleClick = useCallback(
|
|
3847
|
+
(e) => {
|
|
3848
|
+
onClick == null ? void 0 : onClick(e);
|
|
3849
|
+
handleSelect(new Event("menu-select"));
|
|
3850
|
+
},
|
|
3851
|
+
[handleSelect, onClick]
|
|
3852
|
+
);
|
|
3853
|
+
const handlePointerEnter = useCallback(
|
|
3854
|
+
(e) => {
|
|
3855
|
+
onPointerEnter == null ? void 0 : onPointerEnter(e);
|
|
3856
|
+
if (e.defaultPrevented) return;
|
|
3857
|
+
setActiveItemId(itemId);
|
|
3858
|
+
},
|
|
3859
|
+
[onPointerEnter, setActiveItemId, itemId]
|
|
3860
|
+
);
|
|
3861
|
+
const handlePointerLeave = useCallback(
|
|
3862
|
+
(e) => {
|
|
3863
|
+
onPointerLeave == null ? void 0 : onPointerLeave(e);
|
|
3864
|
+
if (e.defaultPrevented) return;
|
|
3865
|
+
setActiveItemId(null);
|
|
3866
|
+
},
|
|
3867
|
+
[onPointerLeave, setActiveItemId]
|
|
3868
|
+
);
|
|
3869
|
+
const handlePointerMove = useCallback(
|
|
3870
|
+
(e) => {
|
|
3871
|
+
onPointerMove == null ? void 0 : onPointerMove(e);
|
|
3872
|
+
if (e.defaultPrevented) return;
|
|
3873
|
+
setActiveItemId(itemId);
|
|
3874
|
+
},
|
|
3875
|
+
[onPointerMove, itemId, setActiveItemId]
|
|
3876
|
+
);
|
|
3877
|
+
useEffect(() => {
|
|
3878
|
+
if (!internalRef.current) return;
|
|
3879
|
+
const element = internalRef.current;
|
|
3880
|
+
element.addEventListener("menu-select", handleSelect);
|
|
3881
|
+
return () => {
|
|
3882
|
+
element.removeEventListener("menu-select", handleSelect);
|
|
3883
|
+
};
|
|
3884
|
+
}, [handleSelect]);
|
|
3885
|
+
return /* @__PURE__ */ jsx(
|
|
3886
|
+
"div",
|
|
3887
|
+
{
|
|
3888
|
+
ref: mergeRefs([ref, internalRef]),
|
|
3889
|
+
className: cx(menuItemCva({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
|
|
3890
|
+
role: "menuitem",
|
|
3891
|
+
onClick: handleClick,
|
|
3892
|
+
onPointerEnter: handlePointerEnter,
|
|
3893
|
+
onPointerLeave: handlePointerLeave,
|
|
3894
|
+
onPointerMove: handlePointerMove,
|
|
3895
|
+
...{ [ITEM_SELECTOR]: itemId },
|
|
3896
|
+
"data-active": getBooleanState(isActive),
|
|
3897
|
+
"data-disabled": getBooleanState(disabled),
|
|
3898
|
+
"aria-disabled": getBooleanState(disabled),
|
|
3899
|
+
...rest,
|
|
3900
|
+
children
|
|
3901
|
+
}
|
|
3902
|
+
);
|
|
3903
|
+
});
|
|
3904
|
+
MenuV2Item.displayName = "MenuItem";
|
|
3905
|
+
const MenuV2CheckboxItem = memo((props) => {
|
|
3906
|
+
const { ref, checked, onCheckedChange, onSelect, ...rest } = props;
|
|
3907
|
+
const handleSelect = useCallback(
|
|
3908
|
+
(e) => {
|
|
3909
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
3910
|
+
if (e.defaultPrevented) return;
|
|
3911
|
+
switch (checked) {
|
|
3912
|
+
case true:
|
|
3913
|
+
onCheckedChange(false);
|
|
3914
|
+
break;
|
|
3915
|
+
case "indeterminate":
|
|
3916
|
+
onCheckedChange(true);
|
|
3917
|
+
break;
|
|
3918
|
+
case false:
|
|
3919
|
+
onCheckedChange(true);
|
|
3920
|
+
break;
|
|
3921
|
+
}
|
|
3922
|
+
},
|
|
3923
|
+
[checked, onCheckedChange, onSelect]
|
|
3924
|
+
);
|
|
3925
|
+
return /* @__PURE__ */ jsx(CheckedIndicatorContext.Provider, { value: checked, children: /* @__PURE__ */ jsx(MenuV2Item, { ref, onSelect: handleSelect, ...rest }) });
|
|
3926
|
+
});
|
|
3927
|
+
MenuV2CheckboxItem.displayName = "MenuCheckboxItem";
|
|
3928
|
+
const MenuV2CheckedIndicator = memo((props) => {
|
|
3929
|
+
const { ref, children, ...rest } = props;
|
|
3930
|
+
return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
|
|
3931
|
+
});
|
|
3932
|
+
MenuV2CheckedIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
3933
|
+
const MenuV2Group = memo((props) => {
|
|
3934
|
+
const { ref, children, ...rest } = props;
|
|
3935
|
+
const groupId = useId();
|
|
3936
|
+
const [labelId, setLabelId] = useState(null);
|
|
3937
|
+
const contextValue = useMemo(
|
|
3938
|
+
() => ({
|
|
3939
|
+
labelId,
|
|
3940
|
+
setLabelId
|
|
3941
|
+
}),
|
|
3942
|
+
[labelId]
|
|
3943
|
+
);
|
|
3944
|
+
return /* @__PURE__ */ jsx("div", { ref, role: "group", ...{ [GROUP_SELECTOR]: groupId }, "aria-labelledby": labelId ?? void 0, ...rest, children: /* @__PURE__ */ jsx(MenuGroupContext, { value: contextValue, children }) });
|
|
3945
|
+
});
|
|
3946
|
+
MenuV2Group.displayName = "MenuGroup";
|
|
3947
|
+
const MenuV2GroupLabel = memo((props) => {
|
|
3948
|
+
const { ref, children, id, className, ...rest } = props;
|
|
3949
|
+
const labelId = useFallbackId(id);
|
|
3950
|
+
const { size: size2 } = use(MenuRootContext);
|
|
3951
|
+
const { setLabelId } = use(MenuGroupContext);
|
|
3952
|
+
useEffect(() => {
|
|
3953
|
+
setLabelId(labelId);
|
|
3954
|
+
}, [labelId, setLabelId]);
|
|
3955
|
+
return /* @__PURE__ */ jsx("div", { ref, id: labelId, className: cx(menuGroupLabelCva({ size: size2 }), className), ...rest, children });
|
|
3956
|
+
});
|
|
3957
|
+
MenuV2GroupLabel.displayName = "MenuGroupLabel";
|
|
3958
|
+
const MenuV2SelectAllItem = genericMemo((props) => {
|
|
3959
|
+
const { ref, children, onSelect, ...rest } = props;
|
|
3960
|
+
const { allSelected, someSelected, toggleSelectAll } = use(MultiSelectContext);
|
|
3961
|
+
const selectedState = allSelected ? true : someSelected ? "indeterminate" : false;
|
|
3962
|
+
const handleSelect = useCallback(
|
|
3963
|
+
(e) => {
|
|
3964
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
3965
|
+
if (e.defaultPrevented) return;
|
|
3966
|
+
toggleSelectAll();
|
|
3967
|
+
},
|
|
3968
|
+
[onSelect, toggleSelectAll]
|
|
3969
|
+
);
|
|
3970
|
+
return /* @__PURE__ */ jsx(MenuV2Item, { onSelect: handleSelect, ref, "data-state": getCheckedState(selectedState), ...rest, children: /* @__PURE__ */ jsx(CheckedIndicatorContext, { value: selectedState, children }) });
|
|
3971
|
+
});
|
|
3972
|
+
const MenuV2MultiSelectGroup = genericMemo(function MenuMultiSelectGroup3(props) {
|
|
3973
|
+
const { ref, children, defaultValues, values, onValuesChange, ...rest } = props;
|
|
3974
|
+
return /* @__PURE__ */ jsx(MenuV2Group, { ref, ...rest, children: /* @__PURE__ */ jsx(MultiSelectProvider, { defaultValues, values, onValuesChange, children }) });
|
|
3975
|
+
});
|
|
3976
|
+
const MenuV2MultiSelectItem = genericMemo(function(props) {
|
|
3977
|
+
const { ref, onSelect, children, value, ...rest } = props;
|
|
3978
|
+
const { selected, selectValue, registerValue } = use(MultiSelectContext);
|
|
3979
|
+
useLayoutEffect(() => {
|
|
3980
|
+
return registerValue(value);
|
|
3981
|
+
}, [registerValue, value]);
|
|
3982
|
+
const isSelected = selected(value);
|
|
3983
|
+
const handleSelect = useCallback(
|
|
3984
|
+
(e) => {
|
|
3985
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
3986
|
+
if (e.defaultPrevented) return;
|
|
3987
|
+
selectValue(value);
|
|
3988
|
+
},
|
|
3989
|
+
[onSelect, selectValue, value]
|
|
3990
|
+
);
|
|
3991
|
+
return /* @__PURE__ */ jsx(
|
|
3992
|
+
MenuV2Item,
|
|
3993
|
+
{
|
|
3994
|
+
ref,
|
|
3995
|
+
role: "menuitemcheckbox",
|
|
3996
|
+
onSelect: handleSelect,
|
|
3997
|
+
"data-state": getSelectedState(isSelected),
|
|
3998
|
+
...rest,
|
|
3999
|
+
children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isSelected, children })
|
|
4000
|
+
}
|
|
4001
|
+
);
|
|
4002
|
+
});
|
|
4003
|
+
const MenuV2Page = memo((props) => {
|
|
4004
|
+
const { children, ref, page, ...rest } = props;
|
|
4005
|
+
const { page: activePage } = use(MenuPageContext);
|
|
4006
|
+
const isActive = page === activePage;
|
|
4007
|
+
return /* @__PURE__ */ jsx("div", { ref, "data-active": getActiveState(isActive), hidden: !isActive, ...rest, children: isActive ? children : null });
|
|
4008
|
+
});
|
|
4009
|
+
MenuV2Page.displayName = "MenuPage";
|
|
4010
|
+
const MenuV2Pages = memo((props) => {
|
|
4011
|
+
const { children, defaultPage = "", page: controlledPage, onPageChange } = props;
|
|
4012
|
+
const [page, setPage] = useControlledState(defaultPage, controlledPage, onPageChange);
|
|
4013
|
+
const contextValue = useMemo(
|
|
4014
|
+
() => ({
|
|
4015
|
+
page,
|
|
4016
|
+
setPage
|
|
4017
|
+
}),
|
|
4018
|
+
[page, setPage]
|
|
4019
|
+
);
|
|
4020
|
+
return /* @__PURE__ */ jsx(MenuPageContext, { value: contextValue, children });
|
|
4021
|
+
});
|
|
4022
|
+
MenuV2Pages.displayName = "MenuPages";
|
|
4023
|
+
const MenuV2PageTriggerItem = memo((props) => {
|
|
4024
|
+
const { ref, children, page, onSelect, ...rest } = props;
|
|
4025
|
+
const { page: activePage, setPage } = use(MenuPageContext);
|
|
4026
|
+
const isActive = page === activePage;
|
|
4027
|
+
const handleSelect = useCallback(
|
|
4028
|
+
(e) => {
|
|
4029
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
4030
|
+
if (e.defaultPrevented) return;
|
|
4031
|
+
setPage(page);
|
|
4032
|
+
},
|
|
4033
|
+
[onSelect, page, setPage]
|
|
4034
|
+
);
|
|
4035
|
+
return /* @__PURE__ */ jsx(MenuV2Item, { ref, onSelect: handleSelect, "data-state": getActiveState(isActive), ...rest, children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isActive, children }) });
|
|
4036
|
+
});
|
|
4037
|
+
MenuV2PageTriggerItem.displayName = "CommandMenuPageTriggerItem";
|
|
4038
|
+
const computeNextIndex = (index, length, direction, loop) => {
|
|
4039
|
+
switch (direction) {
|
|
4040
|
+
case "next":
|
|
4041
|
+
return index === length - 1 ? loop ? 0 : index : index + 1;
|
|
4042
|
+
case "prev":
|
|
4043
|
+
return index === 0 ? loop ? length - 1 : index : index - 1;
|
|
4044
|
+
}
|
|
4045
|
+
};
|
|
4046
|
+
const MenuV2Root = memo((props) => {
|
|
4047
|
+
const providerContext = useProvider();
|
|
4048
|
+
const {
|
|
4049
|
+
ref,
|
|
4050
|
+
children,
|
|
4051
|
+
className,
|
|
4052
|
+
onKeyDown,
|
|
4053
|
+
loop = false,
|
|
4054
|
+
// style props
|
|
4055
|
+
radius = providerContext.radius,
|
|
4056
|
+
accentColor = "base",
|
|
4057
|
+
size: size2 = "md",
|
|
4058
|
+
variant = "soft",
|
|
4059
|
+
...rest
|
|
4060
|
+
} = props;
|
|
4061
|
+
const internalRef = useRef(null);
|
|
4062
|
+
const [activeItemId, setActiveItemId] = useState(null);
|
|
4063
|
+
const getItems = useCallback((element) => {
|
|
4064
|
+
return Array.from(element.querySelectorAll(`[${ITEM_SELECTOR}]:not([data-disabled=true]`));
|
|
4065
|
+
}, []);
|
|
4066
|
+
const getFirstItem = useCallback(
|
|
4067
|
+
(element) => {
|
|
4068
|
+
return getItems(element).at(0);
|
|
4069
|
+
},
|
|
4070
|
+
[getItems]
|
|
4071
|
+
);
|
|
4072
|
+
const getLastItem = useCallback(
|
|
4073
|
+
(element) => {
|
|
4074
|
+
return getItems(element).at(-1);
|
|
4075
|
+
},
|
|
4076
|
+
[getItems]
|
|
4077
|
+
);
|
|
4078
|
+
const getActiveItem = useCallback(
|
|
4079
|
+
(element) => {
|
|
4080
|
+
return getItems(element).find((itemEle) => itemEle.getAttribute(ITEM_SELECTOR) === activeItemId);
|
|
4081
|
+
},
|
|
4082
|
+
[activeItemId, getItems]
|
|
4083
|
+
);
|
|
4084
|
+
const getNextItem = useCallback(
|
|
4085
|
+
(element, direction) => {
|
|
4086
|
+
const items = getItems(element);
|
|
4087
|
+
const activeItem = getActiveItem(element);
|
|
4088
|
+
const activeItemIndex = items.findIndex((itemEle) => itemEle === activeItem);
|
|
4089
|
+
const nextItemIndex = computeNextIndex(activeItemIndex, items.length, direction, loop);
|
|
4090
|
+
return items[nextItemIndex];
|
|
4091
|
+
},
|
|
4092
|
+
[getActiveItem, getItems, loop]
|
|
4093
|
+
);
|
|
4094
|
+
const getGroups = useCallback(() => {
|
|
4095
|
+
if (!internalRef.current) return [];
|
|
4096
|
+
return Array.from(internalRef.current.querySelectorAll(`[${GROUP_SELECTOR}]`));
|
|
4097
|
+
}, []);
|
|
4098
|
+
const getActiveGroup = useCallback(() => {
|
|
4099
|
+
var _a;
|
|
4100
|
+
return ((_a = getActiveItem(internalRef.current)) == null ? void 0 : _a.closest(`[${GROUP_SELECTOR}]`)) ?? void 0;
|
|
4101
|
+
}, [getActiveItem]);
|
|
4102
|
+
const getNextGroup = useCallback(
|
|
4103
|
+
(direction) => {
|
|
4104
|
+
const groups = getGroups();
|
|
4105
|
+
const activeGroup = getActiveGroup();
|
|
4106
|
+
const activeGroupIndex = groups.findIndex((groupEle) => groupEle === activeGroup);
|
|
4107
|
+
const nextGroupIndex = computeNextIndex(activeGroupIndex, groups.length, direction, loop);
|
|
4108
|
+
return groups[nextGroupIndex];
|
|
4109
|
+
},
|
|
4110
|
+
[getActiveGroup, getGroups, loop]
|
|
4111
|
+
);
|
|
4112
|
+
const getFirstGroup = useCallback(() => {
|
|
4113
|
+
return getGroups().at(0);
|
|
4114
|
+
}, [getGroups]);
|
|
4115
|
+
const getLastGroup = useCallback(() => {
|
|
4116
|
+
return getGroups().at(-1);
|
|
4117
|
+
}, [getGroups]);
|
|
4118
|
+
const handleKeyDown = useCallback(
|
|
4119
|
+
(e) => {
|
|
4120
|
+
onKeyDown == null ? void 0 : onKeyDown(e);
|
|
4121
|
+
if (e.defaultPrevented) return;
|
|
4122
|
+
switch (e.code) {
|
|
4123
|
+
case KEY_MAPPING.selectItem: {
|
|
4124
|
+
const activeItem = getActiveItem(internalRef.current);
|
|
4125
|
+
if (activeItem) activeItem.dispatchEvent(new Event("menu-select"));
|
|
4126
|
+
break;
|
|
4127
|
+
}
|
|
4128
|
+
case KEY_MAPPING.next: {
|
|
4129
|
+
let nextItem;
|
|
4130
|
+
if (e.shiftKey) {
|
|
4131
|
+
const nextGroup = getNextGroup("next");
|
|
4132
|
+
if (!nextGroup) return;
|
|
4133
|
+
nextItem = getFirstItem(nextGroup);
|
|
4134
|
+
} else {
|
|
4135
|
+
nextItem = getNextItem(internalRef.current, "next");
|
|
4136
|
+
}
|
|
4137
|
+
if (!nextItem) return;
|
|
4138
|
+
setActiveItemId(nextItem.getAttribute(ITEM_SELECTOR));
|
|
4139
|
+
break;
|
|
4140
|
+
}
|
|
4141
|
+
case KEY_MAPPING.prev: {
|
|
4142
|
+
let prevItem;
|
|
4143
|
+
if (e.shiftKey) {
|
|
4144
|
+
const prevGroup = getNextGroup("prev");
|
|
4145
|
+
if (!prevGroup) return;
|
|
4146
|
+
prevItem = getFirstItem(prevGroup);
|
|
4147
|
+
} else {
|
|
4148
|
+
prevItem = getNextItem(internalRef.current, "prev");
|
|
4149
|
+
}
|
|
4150
|
+
if (!prevItem) return;
|
|
4151
|
+
setActiveItemId(prevItem.getAttribute(ITEM_SELECTOR));
|
|
4152
|
+
break;
|
|
4153
|
+
}
|
|
4154
|
+
case KEY_MAPPING.first: {
|
|
4155
|
+
let firstItem;
|
|
4156
|
+
if (e.shiftKey) {
|
|
4157
|
+
const firstGroup = getFirstGroup();
|
|
4158
|
+
if (!firstGroup) return;
|
|
4159
|
+
firstItem = getFirstItem(firstGroup);
|
|
4160
|
+
} else {
|
|
4161
|
+
firstItem = getFirstItem(internalRef.current);
|
|
4162
|
+
}
|
|
4163
|
+
if (!firstItem) return;
|
|
4164
|
+
setActiveItemId(firstItem.getAttribute(ITEM_SELECTOR));
|
|
4165
|
+
break;
|
|
4166
|
+
}
|
|
4167
|
+
case KEY_MAPPING.last: {
|
|
4168
|
+
let lastItem;
|
|
4169
|
+
if (e.shiftKey) {
|
|
4170
|
+
const lastGroup = getLastGroup();
|
|
4171
|
+
if (!lastGroup) return;
|
|
4172
|
+
lastItem = getFirstItem(lastGroup);
|
|
4173
|
+
} else {
|
|
4174
|
+
lastItem = getLastItem(internalRef.current);
|
|
4175
|
+
}
|
|
4176
|
+
if (!lastItem) return;
|
|
4177
|
+
setActiveItemId(lastItem.getAttribute(ITEM_SELECTOR));
|
|
4178
|
+
break;
|
|
4179
|
+
}
|
|
4180
|
+
}
|
|
4181
|
+
},
|
|
4182
|
+
[getActiveItem, getFirstGroup, getFirstItem, getLastGroup, getLastItem, getNextGroup, getNextItem, onKeyDown]
|
|
4183
|
+
);
|
|
4184
|
+
useEffect(() => {
|
|
4185
|
+
var _a;
|
|
4186
|
+
const firstItem = getFirstItem(internalRef.current);
|
|
4187
|
+
if (!firstItem) return;
|
|
4188
|
+
(_a = internalRef.current) == null ? void 0 : _a.focus();
|
|
4189
|
+
setActiveItemId(firstItem.getAttribute(ITEM_SELECTOR));
|
|
4190
|
+
}, [getFirstItem]);
|
|
4191
|
+
const contextValue = useMemo(
|
|
4192
|
+
() => ({
|
|
4193
|
+
activeItemId,
|
|
4194
|
+
setActiveItemId,
|
|
4195
|
+
// style props
|
|
4196
|
+
accentColor,
|
|
4197
|
+
radius,
|
|
4198
|
+
variant,
|
|
4199
|
+
size: size2
|
|
4200
|
+
}),
|
|
4201
|
+
[accentColor, activeItemId, radius, size2, variant]
|
|
4202
|
+
);
|
|
3632
4203
|
return /* @__PURE__ */ jsx(
|
|
3633
4204
|
"div",
|
|
3634
4205
|
{
|
|
3635
|
-
ref,
|
|
3636
|
-
className: cx(
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
4206
|
+
ref: mergeRefs([ref, internalRef]),
|
|
4207
|
+
className: cx(menuRootCva({ size: size2 }), radiusCva({ radius, maxLarge: true }), className),
|
|
4208
|
+
role: "menu",
|
|
4209
|
+
onKeyDown: handleKeyDown,
|
|
4210
|
+
tabIndex: 0,
|
|
4211
|
+
"aria-activedescendant": activeItemId ?? void 0,
|
|
4212
|
+
"data-accent-color": accentColor,
|
|
4213
|
+
...rest,
|
|
4214
|
+
children: /* @__PURE__ */ jsx(MenuRootContext, { value: contextValue, children })
|
|
3641
4215
|
}
|
|
3642
4216
|
);
|
|
3643
4217
|
});
|
|
3644
|
-
|
|
3645
|
-
const
|
|
3646
|
-
const { ref, children,
|
|
3647
|
-
|
|
3648
|
-
const selectedState = allSelected ? true : someSelected ? "indeterminate" : false;
|
|
3649
|
-
const handleSelect = useCallback(() => {
|
|
3650
|
-
onSelect == null ? void 0 : onSelect();
|
|
3651
|
-
toggleSelectAll();
|
|
3652
|
-
}, [onSelect, toggleSelectAll]);
|
|
3653
|
-
const computedChildren = useMemo(() => {
|
|
3654
|
-
return typeof children === "function" ? ({ active }) => children({ selected: selectedState, active }) : children;
|
|
3655
|
-
}, [children, selectedState]);
|
|
3656
|
-
return /* @__PURE__ */ jsx(CheckedIndicatorContext, { value: selectedState, children: /* @__PURE__ */ jsx(
|
|
3657
|
-
MenuItem,
|
|
3658
|
-
{
|
|
3659
|
-
onSelect: handleSelect,
|
|
3660
|
-
ref,
|
|
3661
|
-
"data-state": getCheckedState(selectedState),
|
|
3662
|
-
closeOnSelect,
|
|
3663
|
-
...rest,
|
|
3664
|
-
children: computedChildren
|
|
3665
|
-
}
|
|
3666
|
-
) });
|
|
4218
|
+
MenuV2Root.displayName = "MenuRoot";
|
|
4219
|
+
const MenuV2SelectedIndicator = memo((props) => {
|
|
4220
|
+
const { ref, children, ...rest } = props;
|
|
4221
|
+
return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
|
|
3667
4222
|
});
|
|
3668
|
-
|
|
4223
|
+
MenuV2SelectedIndicator.displayName = "MenuCheckboxItemIndicator";
|
|
4224
|
+
const MenuV2SelectGroup = genericMemo(function MenuSelectGroup3(props) {
|
|
3669
4225
|
const { ref, children, required, defaultValue, value, onValueChange, ...rest } = props;
|
|
3670
|
-
return /* @__PURE__ */ jsx(
|
|
4226
|
+
return /* @__PURE__ */ jsx(MenuV2Group, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
|
|
3671
4227
|
SingleSelectNotRequiredProvider,
|
|
3672
4228
|
{
|
|
3673
4229
|
defaultValue,
|
|
@@ -3677,183 +4233,53 @@ const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
|
|
|
3677
4233
|
}
|
|
3678
4234
|
) });
|
|
3679
4235
|
});
|
|
3680
|
-
const
|
|
3681
|
-
const { ref, value, onSelect, children,
|
|
4236
|
+
const MenuV2SelectItem = genericMemo(function(props) {
|
|
4237
|
+
const { ref, value, onSelect, children, ...rest } = props;
|
|
3682
4238
|
const { selected, selectValue } = use(SelectContext);
|
|
3683
|
-
const isSelected =
|
|
3684
|
-
const handleSelect = useCallback(
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
4239
|
+
const isSelected = selected(value);
|
|
4240
|
+
const handleSelect = useCallback(
|
|
4241
|
+
(e) => {
|
|
4242
|
+
onSelect == null ? void 0 : onSelect(e);
|
|
4243
|
+
if (e.defaultPrevented) return;
|
|
4244
|
+
selectValue(value);
|
|
4245
|
+
},
|
|
4246
|
+
[onSelect, selectValue, value]
|
|
4247
|
+
);
|
|
4248
|
+
return /* @__PURE__ */ jsx(
|
|
4249
|
+
MenuV2Item,
|
|
3693
4250
|
{
|
|
3694
4251
|
ref,
|
|
3695
4252
|
role: "menuitemcheckbox",
|
|
3696
4253
|
onSelect: handleSelect,
|
|
3697
|
-
closeOnSelect,
|
|
3698
4254
|
"data-state": getSelectedState(isSelected),
|
|
3699
4255
|
...rest,
|
|
3700
|
-
children:
|
|
3701
|
-
}
|
|
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 });
|
|
3708
|
-
});
|
|
3709
|
-
MenuSeparator.displayName = "MenuSeparator";
|
|
3710
|
-
const MenuSubContent = memo((props) => {
|
|
3711
|
-
var _a;
|
|
3712
|
-
const { ref: forwardedRef, children, ...rest } = props;
|
|
3713
|
-
const { middlewareData } = useMenuContext();
|
|
3714
|
-
const { accentColor, radius, variant, size: size2 } = useMenuContentContext();
|
|
3715
|
-
const {
|
|
3716
|
-
open,
|
|
3717
|
-
nodeId,
|
|
3718
|
-
refs,
|
|
3719
|
-
context,
|
|
3720
|
-
getFloatingProps,
|
|
3721
|
-
getItemProps,
|
|
3722
|
-
activeIndex,
|
|
3723
|
-
setActiveIndex,
|
|
3724
|
-
elementsRef,
|
|
3725
|
-
floatingStyles,
|
|
3726
|
-
setOpen,
|
|
3727
|
-
side
|
|
3728
|
-
} = useSubContext();
|
|
3729
|
-
const wrapperRef = useRef(null);
|
|
3730
|
-
const mergeRefs2 = useMergeRefs([refs.setFloating, wrapperRef]);
|
|
3731
|
-
const computedFloatingStyles = useMemo(() => {
|
|
3732
|
-
var _a2;
|
|
3733
|
-
return {
|
|
3734
|
-
...floatingStyles,
|
|
3735
|
-
visibility: ((_a2 = middlewareData.hide) == null ? void 0 : _a2.referenceHidden) ? "hidden" : "visible"
|
|
3736
|
-
};
|
|
3737
|
-
}, [floatingStyles, (_a = middlewareData.hide) == null ? void 0 : _a.referenceHidden]);
|
|
3738
|
-
return /* @__PURE__ */ jsx(FloatingNode, { id: nodeId, children: open && /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsx(FloatingFocusManager, { context, initialFocus: wrapperRef, children: /* @__PURE__ */ jsx(FloatingList, { elementsRef, children: /* @__PURE__ */ jsx(
|
|
3739
|
-
MenuContentContext.Provider,
|
|
3740
|
-
{
|
|
3741
|
-
value: {
|
|
3742
|
-
getItemProps,
|
|
3743
|
-
activeIndex,
|
|
3744
|
-
setActiveIndex,
|
|
3745
|
-
elementsRef,
|
|
3746
|
-
open,
|
|
3747
|
-
setOpen,
|
|
3748
|
-
refs,
|
|
3749
|
-
size: size2,
|
|
3750
|
-
radius,
|
|
3751
|
-
accentColor,
|
|
3752
|
-
variant
|
|
3753
|
-
},
|
|
3754
|
-
children: /* @__PURE__ */ jsx(
|
|
3755
|
-
"div",
|
|
3756
|
-
{
|
|
3757
|
-
className: "outline-none",
|
|
3758
|
-
ref: mergeRefs2,
|
|
3759
|
-
style: computedFloatingStyles,
|
|
3760
|
-
...getFloatingProps(),
|
|
3761
|
-
children: /* @__PURE__ */ jsx(
|
|
3762
|
-
"ul",
|
|
3763
|
-
{
|
|
3764
|
-
className: cx(
|
|
3765
|
-
"overmap-menu-sub-content",
|
|
3766
|
-
menuContent({ size: size2 }),
|
|
3767
|
-
floating({ side, shadow: "3" }),
|
|
3768
|
-
radiusCva({ radius, maxLarge: true }),
|
|
3769
|
-
"max-h-(--overmap-menu-available-height)"
|
|
3770
|
-
),
|
|
3771
|
-
ref: forwardedRef,
|
|
3772
|
-
"data-state": getOpenState(open),
|
|
3773
|
-
"data-side": side,
|
|
3774
|
-
"data-accent-color": accentColor,
|
|
3775
|
-
...rest,
|
|
3776
|
-
children
|
|
3777
|
-
}
|
|
3778
|
-
)
|
|
3779
|
-
}
|
|
3780
|
-
)
|
|
3781
|
-
}
|
|
3782
|
-
) }) }) }) });
|
|
3783
|
-
});
|
|
3784
|
-
MenuSubContent.displayName = "MenuSubContent";
|
|
3785
|
-
const MenuSubTrigger = memo((props) => {
|
|
3786
|
-
const { ref: forwardedRef, children, ...rest } = props;
|
|
3787
|
-
const { refs, getReferenceProps, open, disabled } = useSubContext();
|
|
3788
|
-
const mergedRefs = useMergeRefs([forwardedRef, refs.setReference]);
|
|
3789
|
-
return /* @__PURE__ */ jsx(
|
|
3790
|
-
MenuItem,
|
|
3791
|
-
{
|
|
3792
|
-
ref: mergedRefs,
|
|
3793
|
-
closeOnSelect: false,
|
|
3794
|
-
"aria-haspopup": "menu",
|
|
3795
|
-
"data-state": getOpenState(open),
|
|
3796
|
-
disabled,
|
|
3797
|
-
...getReferenceProps(rest),
|
|
3798
|
-
children
|
|
4256
|
+
children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isSelected, children })
|
|
3799
4257
|
}
|
|
3800
4258
|
);
|
|
3801
4259
|
});
|
|
3802
|
-
|
|
3803
|
-
const
|
|
3804
|
-
const {
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
Sub: MenuSub,
|
|
3826
|
-
SubContent: MenuSubContent,
|
|
3827
|
-
SubTrigger: MenuSubTrigger,
|
|
3828
|
-
// pages
|
|
3829
|
-
Pages: MenuPages,
|
|
3830
|
-
PageContent: MenuPageContent,
|
|
3831
|
-
PageTrigger: MenuPageTrigger,
|
|
3832
|
-
// triggers
|
|
3833
|
-
ClickTrigger: MenuClickTrigger,
|
|
3834
|
-
ContextTrigger: MenuContextTrigger,
|
|
3835
|
-
VirtualTrigger: MenuVirtualTrigger,
|
|
3836
|
-
// groups
|
|
3837
|
-
Group: MenuGroup,
|
|
3838
|
-
SelectGroup: MenuSelectGroup,
|
|
3839
|
-
MultiSelectGroup: MenuMultiSelectGroup,
|
|
3840
|
-
// items
|
|
3841
|
-
Item: MenuItem,
|
|
3842
|
-
SelectItem: MenuSelectItem,
|
|
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
|
|
4260
|
+
const MenuV2Separator = memo((props) => {
|
|
4261
|
+
const { ref, className, ...rest } = props;
|
|
4262
|
+
const { size: size2 } = use(MenuRootContext);
|
|
4263
|
+
return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparatorCva({ size: size2 }), className), ref, ...rest });
|
|
4264
|
+
});
|
|
4265
|
+
MenuV2Separator.displayName = "MenuSeparator";
|
|
4266
|
+
const MenuV2 = {
|
|
4267
|
+
Root: MenuV2Root,
|
|
4268
|
+
Group: MenuV2Group,
|
|
4269
|
+
GroupLabel: MenuV2GroupLabel,
|
|
4270
|
+
Item: MenuV2Item,
|
|
4271
|
+
Separator: MenuV2Separator,
|
|
4272
|
+
SelectGroup: MenuV2SelectGroup,
|
|
4273
|
+
SelectItem: MenuV2SelectItem,
|
|
4274
|
+
MultiSelectGroup: MenuV2MultiSelectGroup,
|
|
4275
|
+
MultiSelectItem: MenuV2MultiSelectItem,
|
|
4276
|
+
SelectAllItem: MenuV2SelectAllItem,
|
|
4277
|
+
SelectedIndicator: MenuV2SelectedIndicator,
|
|
4278
|
+
CheckboxItem: MenuV2CheckboxItem,
|
|
4279
|
+
CheckedIndicator: MenuV2CheckedIndicator,
|
|
4280
|
+
Pages: MenuV2Pages,
|
|
4281
|
+
Page: MenuV2Page,
|
|
4282
|
+
PageTriggerItem: MenuV2PageTriggerItem
|
|
3857
4283
|
};
|
|
3858
4284
|
const OneTimePasswordFieldHiddenInput = memo((props) => {
|
|
3859
4285
|
return /* @__PURE__ */ jsx(RadixOneTimePasswordField.HiddenInput, { ...props });
|
|
@@ -4022,9 +4448,9 @@ const ErrorFallback = memo((props) => {
|
|
|
4022
4448
|
}, [onRetry, resetBoundary]);
|
|
4023
4449
|
return /* @__PURE__ */ jsxs("div", { className: "flex w-full gap-2", style: outerFlexStyles, children: [
|
|
4024
4450
|
/* @__PURE__ */ jsx("div", { style: { flexGrow: 1 } }),
|
|
4025
|
-
/* @__PURE__ */ jsx(LuIcon, { icon:
|
|
4451
|
+
/* @__PURE__ */ jsx(LuIcon, { icon: AlertTriangle, size: height, style: centerStyles }),
|
|
4026
4452
|
/* @__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:
|
|
4453
|
+
/* @__PURE__ */ jsx(IconButton, { "aria-label": "Try again", variant: "soft", onClick: handleRetry, style: centerStyles, children: /* @__PURE__ */ jsx(LuIcon, { icon: RotateCcw, size: height }) }),
|
|
4028
4454
|
/* @__PURE__ */ jsx("div", { style: { flexGrow: 1 } })
|
|
4029
4455
|
] });
|
|
4030
4456
|
});
|
|
@@ -4373,6 +4799,65 @@ const RadioGroup = {
|
|
|
4373
4799
|
Item: RadioGroupItem,
|
|
4374
4800
|
Root: RadioGroupRoot
|
|
4375
4801
|
};
|
|
4802
|
+
const RatingRootContext = createContext({});
|
|
4803
|
+
const RatingItemContext = createContext({});
|
|
4804
|
+
const RatingItem = memo((props) => {
|
|
4805
|
+
const { ref, children, value, ...rest } = props;
|
|
4806
|
+
const { value: activeValue } = use(RatingRootContext);
|
|
4807
|
+
const active = !!activeValue && value <= activeValue;
|
|
4808
|
+
const contextValue = useMemo(() => ({ value }), [value]);
|
|
4809
|
+
return /* @__PURE__ */ jsx(RadixRadioGroup.Item, { ref, value: value.toString(), "data-active": active, ...rest, children: /* @__PURE__ */ jsx(RatingItemContext, { value: contextValue, children }) });
|
|
4810
|
+
});
|
|
4811
|
+
RatingItem.displayName = "RatingItem";
|
|
4812
|
+
const RatingItemIndicator = memo((props) => {
|
|
4813
|
+
const { ref, children, forceMount, ...rest } = props;
|
|
4814
|
+
const { value: activeValue } = use(RatingRootContext);
|
|
4815
|
+
const { value } = use(RatingItemContext);
|
|
4816
|
+
const active = !!activeValue && value <= activeValue;
|
|
4817
|
+
return /* @__PURE__ */ jsx(
|
|
4818
|
+
RadixRadioGroup.Indicator,
|
|
4819
|
+
{
|
|
4820
|
+
ref,
|
|
4821
|
+
forceMount: forceMount ?? (active || void 0),
|
|
4822
|
+
"data-active": active,
|
|
4823
|
+
...rest,
|
|
4824
|
+
children
|
|
4825
|
+
}
|
|
4826
|
+
);
|
|
4827
|
+
});
|
|
4828
|
+
RatingItemIndicator.displayName = "RatingItemIndicator";
|
|
4829
|
+
const RatingRoot = memo((props) => {
|
|
4830
|
+
const { ref, children, defaultValue, value: controlledValue, onValueChange, ...rest } = props;
|
|
4831
|
+
const [value, setValue] = useControlledState(defaultValue ?? null, controlledValue, onValueChange);
|
|
4832
|
+
const handleValueChange = useCallback(
|
|
4833
|
+
(value2) => {
|
|
4834
|
+
setValue(parseInt(value2));
|
|
4835
|
+
},
|
|
4836
|
+
[setValue]
|
|
4837
|
+
);
|
|
4838
|
+
const contextValue = useMemo(
|
|
4839
|
+
() => ({
|
|
4840
|
+
value
|
|
4841
|
+
}),
|
|
4842
|
+
[value]
|
|
4843
|
+
);
|
|
4844
|
+
return /* @__PURE__ */ jsx(
|
|
4845
|
+
RadixRadioGroup.Root,
|
|
4846
|
+
{
|
|
4847
|
+
ref,
|
|
4848
|
+
value: value ? value.toString() : null,
|
|
4849
|
+
onValueChange: handleValueChange,
|
|
4850
|
+
...rest,
|
|
4851
|
+
children: /* @__PURE__ */ jsx(RatingRootContext, { value: contextValue, children })
|
|
4852
|
+
}
|
|
4853
|
+
);
|
|
4854
|
+
});
|
|
4855
|
+
RatingRoot.displayName = "RatingRoot";
|
|
4856
|
+
const Rating = {
|
|
4857
|
+
Item: RatingItem,
|
|
4858
|
+
ItemIndicator: RatingItemIndicator,
|
|
4859
|
+
Root: RatingRoot
|
|
4860
|
+
};
|
|
4376
4861
|
const segmentedControlRootCva = cva(
|
|
4377
4862
|
["shrink-0", "transition-colors", "inline-flex", "box-border", "min-w-max", "text-center"],
|
|
4378
4863
|
{
|
|
@@ -5641,7 +6126,7 @@ const _Toast = function Toast2(props) {
|
|
|
5641
6126
|
action && /* @__PURE__ */ jsx(RadixToast.Action, { className: "w-max", altText: action.altText, asChild: true, children: action.content })
|
|
5642
6127
|
] })
|
|
5643
6128
|
] }),
|
|
5644
|
-
/* @__PURE__ */ jsx(RadixToast.Close, { asChild: true, children: /* @__PURE__ */ jsx(IconButton, { size: size2, "aria-label": "Close", variant: "ghost", accentColor, children: /* @__PURE__ */ jsx(LuIcon, { icon:
|
|
6129
|
+
/* @__PURE__ */ jsx(RadixToast.Close, { asChild: true, children: /* @__PURE__ */ jsx(IconButton, { size: size2, "aria-label": "Close", variant: "ghost", accentColor, children: /* @__PURE__ */ jsx(LuIcon, { icon: X }) }) })
|
|
5645
6130
|
]
|
|
5646
6131
|
}
|
|
5647
6132
|
);
|
|
@@ -6150,7 +6635,6 @@ export {
|
|
|
6150
6635
|
CheckboxGroupSelectAllItem,
|
|
6151
6636
|
CheckboxIndicator,
|
|
6152
6637
|
CheckboxRoot,
|
|
6153
|
-
CollapsibleTree,
|
|
6154
6638
|
CommandMenu,
|
|
6155
6639
|
CommandMenuCheckboxIndicator,
|
|
6156
6640
|
CommandMenuCheckboxItem,
|
|
@@ -6191,10 +6675,12 @@ export {
|
|
|
6191
6675
|
InputSlot,
|
|
6192
6676
|
Layout,
|
|
6193
6677
|
LayoutContainer,
|
|
6194
|
-
LayoutContext,
|
|
6195
6678
|
LayoutRoot,
|
|
6196
|
-
|
|
6679
|
+
LayoutSlideOutClose,
|
|
6680
|
+
LayoutSlideOutContent,
|
|
6681
|
+
LayoutSlideOutHandle,
|
|
6197
6682
|
LayoutSlideOutOverlay,
|
|
6683
|
+
LayoutSlideOutRoot,
|
|
6198
6684
|
LayoutSlideOutTrigger,
|
|
6199
6685
|
Link,
|
|
6200
6686
|
LuIcon,
|
|
@@ -6225,6 +6711,23 @@ export {
|
|
|
6225
6711
|
MenuSub,
|
|
6226
6712
|
MenuSubContent,
|
|
6227
6713
|
MenuSubTrigger,
|
|
6714
|
+
MenuV2,
|
|
6715
|
+
MenuV2CheckboxItem,
|
|
6716
|
+
MenuV2CheckedIndicator,
|
|
6717
|
+
MenuV2Group,
|
|
6718
|
+
MenuV2GroupLabel,
|
|
6719
|
+
MenuV2Item,
|
|
6720
|
+
MenuV2MultiSelectGroup,
|
|
6721
|
+
MenuV2MultiSelectItem,
|
|
6722
|
+
MenuV2Page,
|
|
6723
|
+
MenuV2PageTriggerItem,
|
|
6724
|
+
MenuV2Pages,
|
|
6725
|
+
MenuV2Root,
|
|
6726
|
+
MenuV2SelectAllItem,
|
|
6727
|
+
MenuV2SelectGroup,
|
|
6728
|
+
MenuV2SelectItem,
|
|
6729
|
+
MenuV2SelectedIndicator,
|
|
6730
|
+
MenuV2Separator,
|
|
6228
6731
|
MenuVirtualTrigger,
|
|
6229
6732
|
OneTimePasswordField,
|
|
6230
6733
|
OneTimePasswordFieldHiddenInput,
|
|
@@ -6250,6 +6753,10 @@ export {
|
|
|
6250
6753
|
RadioGroupIndicator,
|
|
6251
6754
|
RadioGroupItem,
|
|
6252
6755
|
RadioGroupRoot,
|
|
6756
|
+
Rating,
|
|
6757
|
+
RatingItem,
|
|
6758
|
+
RatingItemIndicator,
|
|
6759
|
+
RatingRoot,
|
|
6253
6760
|
SegmentedControl,
|
|
6254
6761
|
SegmentedControlItem,
|
|
6255
6762
|
SegmentedControlRoot,
|
|
@@ -6257,9 +6764,15 @@ export {
|
|
|
6257
6764
|
SegmentedTabsList,
|
|
6258
6765
|
SegmentedTabsRoot,
|
|
6259
6766
|
SegmentedTabsTrigger,
|
|
6260
|
-
SelectedIndicatorContext,
|
|
6261
6767
|
Separator,
|
|
6262
6768
|
SlideOut,
|
|
6769
|
+
SlideOutClose,
|
|
6770
|
+
SlideOutContent,
|
|
6771
|
+
SlideOutHandle,
|
|
6772
|
+
SlideOutOverlay,
|
|
6773
|
+
SlideOutRoot,
|
|
6774
|
+
SlideOutTrigger,
|
|
6775
|
+
SlideOutViewport,
|
|
6263
6776
|
Slider,
|
|
6264
6777
|
Spinner,
|
|
6265
6778
|
Switch,
|
|
@@ -6294,6 +6807,12 @@ export {
|
|
|
6294
6807
|
badge,
|
|
6295
6808
|
buttonCva,
|
|
6296
6809
|
floating,
|
|
6810
|
+
genericMemo,
|
|
6811
|
+
getActiveState,
|
|
6812
|
+
getBooleanState,
|
|
6813
|
+
getCheckedState,
|
|
6814
|
+
getOpenState,
|
|
6815
|
+
getSelectedState,
|
|
6297
6816
|
mergeRefs,
|
|
6298
6817
|
radiusCva,
|
|
6299
6818
|
stopPropagation,
|
|
@@ -6301,15 +6820,9 @@ export {
|
|
|
6301
6820
|
useAlertDialog,
|
|
6302
6821
|
useButtonGroup,
|
|
6303
6822
|
useControlledState,
|
|
6823
|
+
useFallbackId,
|
|
6304
6824
|
useLayoutContext,
|
|
6305
|
-
useMenuContentContext,
|
|
6306
|
-
useMenuContext,
|
|
6307
|
-
usePagesContext,
|
|
6308
6825
|
useProvider,
|
|
6309
|
-
useSelectedIndicatorContext,
|
|
6310
|
-
useSize,
|
|
6311
|
-
useStopEventPropagation,
|
|
6312
|
-
useSubContext,
|
|
6313
6826
|
useTextFilter,
|
|
6314
6827
|
useToast,
|
|
6315
6828
|
useViewportSize
|