@overmap-ai/blocks 1.0.40-overlay.1 → 1.0.40-phone-input.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.
Files changed (121) hide show
  1. package/dist/ButtonGroup/ButtonGroup.d.ts +1 -2
  2. package/dist/ButtonGroup/context.d.ts +2 -7
  3. package/dist/CheckboxGroup/context.d.ts +2 -6
  4. package/dist/CheckedIndicator/CheckedIndicator.d.ts +4 -3
  5. package/dist/CommandMenu/CheckboxIndicator.d.ts +2 -4
  6. package/dist/CommandMenu/SelectedIndicator.d.ts +2 -3
  7. package/dist/CommandMenu/context.d.ts +2 -3
  8. package/dist/Heading/cva.d.ts +1 -1
  9. package/dist/HoverUtility/HoverUtility.d.ts +2 -2
  10. package/dist/Link/cva.d.ts +1 -1
  11. package/dist/Menu/{CheckboxItem/CheckboxItem.d.ts → CheckboxItem.d.ts} +1 -1
  12. package/dist/Menu/{CheckboxItemIndicator/CheckboxItemIndicator.d.ts → CheckboxItemIndicator.d.ts} +1 -1
  13. package/dist/Menu/{ClickTrigger/ClickTrigger.d.ts → ClickTrigger.d.ts} +1 -1
  14. package/dist/Menu/{Content/Content.d.ts → Content.d.ts} +1 -1
  15. package/dist/Menu/{ContextTrigger/ContextTrigger.d.ts → ContextTrigger.d.ts} +1 -1
  16. package/dist/Menu/{Group/Group.d.ts → Group.d.ts} +1 -1
  17. package/dist/Menu/{Input/Field.d.ts → InputField.d.ts} +1 -1
  18. package/dist/Menu/{Input/Root.d.ts → InputRoot.d.ts} +1 -1
  19. package/dist/Menu/{Input/Slot.d.ts → InputSlot.d.ts} +1 -1
  20. package/dist/Menu/{Item/Item.d.ts → Item.d.ts} +1 -1
  21. package/dist/Menu/{MultiSelectGroup/MultiSelectGroup.d.ts → MultiSelectGroup.d.ts} +1 -1
  22. package/dist/Menu/{MultiSelectItem/MultiSelectItem.d.ts → MultiSelectItem.d.ts} +1 -1
  23. package/dist/Menu/PageContent.d.ts +2 -0
  24. package/dist/Menu/{PageTrigger/PageTrigger.d.ts → PageTrigger.d.ts} +1 -1
  25. package/dist/Menu/{Pages/Pages.d.ts → Pages.d.ts} +1 -1
  26. package/dist/Menu/{root/Root.d.ts → Root.d.ts} +1 -1
  27. package/dist/Menu/{Scroll/Scroll.d.ts → Scroll.d.ts} +1 -1
  28. package/dist/Menu/{SelectAll/SelectAllItem.d.ts → SelectAllItem.d.ts} +1 -1
  29. package/dist/Menu/{SelectGroup/SelectGroup.d.ts → SelectGroup.d.ts} +1 -1
  30. package/dist/Menu/{SelectItem/SelectItem.d.ts → SelectItem.d.ts} +1 -1
  31. package/dist/Menu/SelectedIndicator.d.ts +4 -0
  32. package/dist/Menu/{Separator/Separator.d.ts → Separator.d.ts} +1 -1
  33. package/dist/Menu/{Sub/Sub.d.ts → Sub.d.ts} +1 -1
  34. package/dist/Menu/{SubContent/SubContent.d.ts → SubContent.d.ts} +1 -1
  35. package/dist/Menu/{SubTrigger/SubTrigger.d.ts → SubTrigger.d.ts} +1 -1
  36. package/dist/Menu/{VirtualTrigger/VirtualTrigger.d.ts → VirtualTrigger.d.ts} +1 -1
  37. package/dist/Menu/index.d.ts +9 -7
  38. package/dist/Menu/{Content/context.d.ts → menuContentContext.d.ts} +2 -2
  39. package/dist/Menu/{root/context.d.ts → rootContext.d.ts} +1 -1
  40. package/dist/Menu/{Sub/context.d.ts → subContentContext.d.ts} +1 -1
  41. package/dist/Menu/utils.d.ts +0 -6
  42. package/dist/MenuV2/CheckboxItem.d.ts +6 -0
  43. package/dist/MenuV2/CheckboxItemIndicator.d.ts +3 -0
  44. package/dist/MenuV2/Group.d.ts +4 -0
  45. package/dist/MenuV2/GroupLabel.d.ts +4 -0
  46. package/dist/MenuV2/Item.d.ts +6 -0
  47. package/dist/MenuV2/MultiSelectAllItem.d.ts +4 -0
  48. package/dist/MenuV2/MultiSelectGroup.d.ts +5 -0
  49. package/dist/MenuV2/MultiSelectItem.d.ts +5 -0
  50. package/dist/MenuV2/Page.d.ts +5 -0
  51. package/dist/MenuV2/PageTriggerItem.d.ts +5 -0
  52. package/dist/MenuV2/Pages.d.ts +7 -0
  53. package/dist/MenuV2/Root.d.ts +6 -0
  54. package/dist/MenuV2/SelectGroup.d.ts +4 -0
  55. package/dist/MenuV2/SelectItem.d.ts +5 -0
  56. package/dist/MenuV2/SelectedIndicator.d.ts +3 -0
  57. package/dist/MenuV2/Separator.d.ts +5 -0
  58. package/dist/MenuV2/constants.d.ts +9 -0
  59. package/dist/MenuV2/context.d.ts +17 -0
  60. package/dist/MenuV2/cva.d.ts +14 -0
  61. package/dist/MenuV2/index.d.ts +36 -0
  62. package/dist/MenuV2/typings.d.ts +9 -0
  63. package/dist/MenuV2/utils.d.ts +1 -0
  64. package/dist/PhoneNumberInput/CountrySelect.d.ts +11 -0
  65. package/dist/PhoneNumberInput/FlagComponent.d.ts +2 -0
  66. package/dist/PhoneNumberInput/InputComponent.d.ts +5 -0
  67. package/dist/PhoneNumberInput/PhoneNumberInput.d.ts +6 -0
  68. package/dist/PhoneNumberInput/context.d.ts +4 -0
  69. package/dist/PhoneNumberInput/index.d.ts +2 -0
  70. package/dist/PhoneNumberInput/typings.d.ts +9 -0
  71. package/dist/Rating/Item.d.ts +6 -0
  72. package/dist/Rating/ItemIndicator.d.ts +5 -0
  73. package/dist/Rating/Root.d.ts +8 -0
  74. package/dist/Rating/context.d.ts +9 -0
  75. package/dist/Rating/index.d.ts +9 -0
  76. package/dist/SelectedIndicator/SelectedIndicator.d.ts +5 -0
  77. package/dist/{Menu/SelectedIndicator → SelectedIndicator}/context.d.ts +0 -1
  78. package/dist/SelectedIndicator/index.d.ts +2 -0
  79. package/dist/SlideOut/SlideOut.d.ts +1 -2
  80. package/dist/Text/cva.d.ts +1 -1
  81. package/dist/blocks.js +1364 -864
  82. package/dist/blocks.js.map +1 -1
  83. package/dist/blocks.umd.cjs +1652 -1155
  84. package/dist/blocks.umd.cjs.map +1 -1
  85. package/dist/hooks.d.ts +20 -0
  86. package/dist/index.d.ts +5 -2
  87. package/dist/typings.d.ts +0 -5
  88. package/dist/utils.d.ts +7 -30
  89. package/package.json +2 -1
  90. package/dist/CheckboxGroup/utils.d.ts +0 -1
  91. package/dist/CollapsibleTree/CollapsibleTree.d.ts +0 -5
  92. package/dist/CollapsibleTree/context.d.ts +0 -11
  93. package/dist/CollapsibleTree/index.d.ts +0 -2
  94. package/dist/CollapsibleTree/typings.d.ts +0 -58
  95. package/dist/CommandMenu/utils.d.ts +0 -4
  96. package/dist/Menu/ClickTrigger/index.d.ts +0 -1
  97. package/dist/Menu/Content/index.d.ts +0 -2
  98. package/dist/Menu/ContextTrigger/index.d.ts +0 -1
  99. package/dist/Menu/Group/index.d.ts +0 -1
  100. package/dist/Menu/Input/index.d.ts +0 -3
  101. package/dist/Menu/Item/index.d.ts +0 -1
  102. package/dist/Menu/Label/index.d.ts +0 -1
  103. package/dist/Menu/MultiSelectGroup/index.d.ts +0 -1
  104. package/dist/Menu/MultiSelectItem/index.d.ts +0 -1
  105. package/dist/Menu/PageContent/PageContent.d.ts +0 -3
  106. package/dist/Menu/PageContent/index.d.ts +0 -1
  107. package/dist/Menu/PageTrigger/index.d.ts +0 -1
  108. package/dist/Menu/Pages/index.d.ts +0 -2
  109. package/dist/Menu/SelectAll/index.d.ts +0 -1
  110. package/dist/Menu/SelectGroup/index.d.ts +0 -1
  111. package/dist/Menu/SelectItem/index.d.ts +0 -1
  112. package/dist/Menu/SelectedIndicator/SelectedIndicator.d.ts +0 -4
  113. package/dist/Menu/SelectedIndicator/index.d.ts +0 -2
  114. package/dist/Menu/Separator/index.d.ts +0 -1
  115. package/dist/Menu/Sub/index.d.ts +0 -2
  116. package/dist/Menu/SubContent/index.d.ts +0 -1
  117. package/dist/Menu/SubTrigger/index.d.ts +0 -1
  118. package/dist/Menu/VirtualTrigger/index.d.ts +0 -1
  119. package/dist/Menu/root/index.d.ts +0 -2
  120. /package/dist/Menu/{Label/Label.d.ts → Label.d.ts} +0 -0
  121. /package/dist/Menu/{Pages/context.d.ts → menuPagesContext.d.ts} +0 -0
package/dist/blocks.js CHANGED
@@ -1,12 +1,10 @@
1
1
  import * as RadixAlertDialog from "@radix-ui/react-alert-dialog";
2
2
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
3
  import { cva, cx } from "class-variance-authority";
4
- import * as React from "react";
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";
@@ -16,10 +14,13 @@ import * as RadixHoverCard from "@radix-ui/react-hover-card";
16
14
  import { CSSTransition } from "react-transition-group";
17
15
  import ReactDOM from "react-dom";
18
16
  import { Slot } from "@radix-ui/react-slot";
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";
17
+ 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
18
  import * as RadixSeparator from "@radix-ui/react-separator";
21
19
  import * as RadixOneTimePasswordField from "@radix-ui/react-one-time-password-field";
22
20
  import { useErrorBoundary, ErrorBoundary } from "react-error-boundary";
21
+ import PhoneInput from "react-phone-number-input";
22
+ import { PhoneIcon, ChevronDownIcon } from "lucide-react";
23
+ import { getCountryCallingCode } from "react-phone-number-input/min";
23
24
  import * as RadixPopover from "@radix-ui/react-popover";
24
25
  import * as RadixProgress from "@radix-ui/react-progress";
25
26
  import * as RadixRadioGroup from "@radix-ui/react-radio-group";
@@ -788,82 +789,6 @@ const Checkbox = {
788
789
  };
789
790
  const SelectContext = createContext({});
790
791
  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
792
  const useViewportSize = (props) => {
868
793
  const { xs: xsProps, sm: smProps, md: mdProps, lg: lgProps, xl: xlProps } = props;
869
794
  const [prevSize, setPrevSize] = useState("initial");
@@ -881,33 +806,14 @@ const useViewportSize = (props) => {
881
806
  }, [lg, md, sm, xl, xs]);
882
807
  return { size: size2, prevSize, xs, sm, md, lg, xl };
883
808
  };
884
- const useStopEventPropagation = () => {
885
- return useCallback((event) => {
886
- event.stopPropagation();
887
- }, []);
888
- };
889
- function useTextFilter(values, filterFunction) {
809
+ function useTextFilter(items, filterFunction) {
890
810
  const [filteredOptions, setFilteredOptions] = useState([]);
891
811
  const [filterValue, setFilterValue] = useState("");
892
812
  useEffect(() => {
893
- setFilteredOptions(values.filter((value) => filterFunction(value, filterValue)));
894
- }, [filterFunction, filterValue, values]);
813
+ setFilteredOptions(items.filter((value) => filterFunction(value, filterValue)));
814
+ }, [filterFunction, filterValue, items]);
895
815
  return [filteredOptions, filterValue, setFilterValue];
896
816
  }
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
817
  function useControlledState(initialState, state, setState) {
912
818
  const [uncontrolledState, setUncontrolledState] = useState(initialState);
913
819
  const handleStateChange = useCallback(
@@ -924,26 +830,34 @@ function useControlledState(initialState, state, setState) {
924
830
  }, [state]);
925
831
  return [state ?? uncontrolledState, handleStateChange];
926
832
  }
833
+ function useFallbackId(id) {
834
+ const fallbackId = useId();
835
+ return id ?? fallbackId;
836
+ }
837
+ const genericMemo = memo;
927
838
  function mergeRefs(refs) {
928
839
  return (value) => {
929
- const cleanups = refs.reduce((cleanups2, ref) => {
930
- if (typeof ref === "function") {
931
- const cleanup = ref(value);
932
- if (typeof cleanup === "function") {
933
- cleanups2.push(cleanup);
934
- } else {
840
+ const cleanups = refs.reduce(
841
+ (cleanups2, ref) => {
842
+ if (typeof ref === "function") {
843
+ const cleanup = ref(value);
844
+ if (typeof cleanup === "function") {
845
+ cleanups2.push(cleanup);
846
+ } else {
847
+ cleanups2.push(() => {
848
+ ref(null);
849
+ });
850
+ }
851
+ } else if (ref != null) {
852
+ ref.current = value;
935
853
  cleanups2.push(() => {
936
- ref(null);
854
+ ref.current = null;
937
855
  });
938
856
  }
939
- } else if (ref != null) {
940
- ref.current = value;
941
- cleanups2.push(() => {
942
- ref.current = null;
943
- });
944
- }
945
- return cleanups2;
946
- }, []);
857
+ return cleanups2;
858
+ },
859
+ []
860
+ );
947
861
  return () => {
948
862
  cleanups.forEach((cleanup) => {
949
863
  cleanup();
@@ -954,6 +868,21 @@ function mergeRefs(refs) {
954
868
  const stopPropagation = (e) => {
955
869
  e.stopPropagation();
956
870
  };
871
+ function getSelectedState(selected) {
872
+ return selected ? "selected" : "unselected";
873
+ }
874
+ function getCheckedState(checked) {
875
+ return checked === true ? "checked" : checked === false ? "unchecked" : "indeterminate";
876
+ }
877
+ function getActiveState(active) {
878
+ return active ? "active" : "inactive";
879
+ }
880
+ function getBooleanState(value) {
881
+ return value ? "true" : "false";
882
+ }
883
+ function getOpenState(open) {
884
+ return open ? "open" : "closed";
885
+ }
957
886
  const MultiSelectProvider = genericMemo(function MultiSelectProvider2(props) {
958
887
  const { children, defaultValues, values: controlledValues, onValuesChange } = props;
959
888
  const [itemValueMapping, setItemValueMapping] = useState(/* @__PURE__ */ new Set());
@@ -1036,8 +965,8 @@ const CheckboxGroupItem = memo((props) => {
1036
965
  ref,
1037
966
  className,
1038
967
  value,
1039
- accentColor,
1040
968
  disabled,
969
+ accentColor = groupContext.accentColor,
1041
970
  variant = groupContext.variant,
1042
971
  size: size2 = groupContext.size,
1043
972
  radius = groupContext.radius,
@@ -1074,9 +1003,6 @@ const CheckboxGroupItemIndicator = memo((props) => {
1074
1003
  return /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: cx("flex items-center justify-center", className), ref, ...rest });
1075
1004
  });
1076
1005
  CheckboxGroupItemIndicator.displayName = "CheckboxGroupItemIndicator";
1077
- function getBooleanState$1(value) {
1078
- return value ? "true" : "false";
1079
- }
1080
1006
  const CheckboxGroupRoot = memo((props) => {
1081
1007
  const providerContext = useProvider();
1082
1008
  const {
@@ -1099,20 +1025,22 @@ const CheckboxGroupRoot = memo((props) => {
1099
1025
  name,
1100
1026
  required,
1101
1027
  disabled,
1028
+ // style props
1029
+ accentColor,
1102
1030
  size: size2,
1103
1031
  variant,
1104
1032
  radius
1105
1033
  }),
1106
- [disabled, name, radius, required, size2, variant]
1034
+ [accentColor, disabled, name, radius, required, size2, variant]
1107
1035
  );
1108
1036
  return /* @__PURE__ */ jsx(
1109
1037
  "div",
1110
1038
  {
1111
1039
  ref,
1112
1040
  role: "group",
1113
- "data-disabled": getBooleanState$1(!!disabled),
1041
+ "data-disabled": getBooleanState(!!disabled),
1114
1042
  "data-accent-color": accentColor,
1115
- "aria-disabled": getBooleanState$1(!!disabled),
1043
+ "aria-disabled": getBooleanState(!!disabled),
1116
1044
  ...rest,
1117
1045
  children: /* @__PURE__ */ jsx(CheckboxGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
1118
1046
  MultiSelectProvider,
@@ -1132,8 +1060,8 @@ const CheckboxGroupSelectAllItem = memo((props) => {
1132
1060
  const {
1133
1061
  ref,
1134
1062
  className,
1135
- accentColor,
1136
1063
  disabled,
1064
+ accentColor = groupContext.accentColor,
1137
1065
  variant = groupContext.variant,
1138
1066
  size: size2 = groupContext.size,
1139
1067
  radius = groupContext.radius,
@@ -1164,137 +1092,39 @@ const CheckboxGroup = {
1164
1092
  SelectAllItem: CheckboxGroupSelectAllItem,
1165
1093
  ItemIndicator: CheckboxGroupItemIndicator
1166
1094
  };
1167
- const CollapsibleTreeContext = createContext(
1168
- {}
1169
- );
1170
- function useCollapsibleTreeContext() {
1171
- return useContext(CollapsibleTreeContext);
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]);
1095
+ const CheckedIndicatorContext = createContext({});
1096
+ const CheckedIndicator = memo((props) => {
1097
+ const { children, ref, className, ...rest } = props;
1098
+ const checked = useContext(CheckedIndicatorContext);
1099
+ const computedChildren = typeof children === "function" ? children(checked) : children;
1280
1100
  return /* @__PURE__ */ jsx(
1281
1101
  "span",
1282
1102
  {
1283
1103
  ref,
1284
- "data-state": getCheckedState$1(checkedState),
1285
1104
  className: cx(
1286
- "inline-block size-max",
1105
+ "flex size-max items-center",
1287
1106
  {
1288
- invisible: checkedState === false
1107
+ invisible: checked === false
1289
1108
  },
1290
1109
  className
1291
1110
  ),
1111
+ "data-state": getCheckedState(checked),
1292
1112
  ...rest,
1293
1113
  children: computedChildren
1294
1114
  }
1295
1115
  );
1296
1116
  });
1117
+ CheckedIndicator.displayName = "CheckedIndicator";
1118
+ const CommandMenuCheckboxIndicator = memo((props) => {
1119
+ const { ref, children, ...rest } = props;
1120
+ return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
1121
+ });
1297
1122
  CommandMenuCheckboxIndicator.displayName = "CommandMenuCheckboxIndicator";
1123
+ const CommandMenuContext = createContext({});
1124
+ const SelectedIndicatorContext$1 = createContext(false);
1125
+ const CheckboxIndicatorContext = createContext(false);
1126
+ const CommandMenuPageContext = createContext({});
1127
+ const CommandMenuDialogContext = createContext({});
1298
1128
  const commandMenuContentCva = cva(
1299
1129
  [
1300
1130
  "ring",
@@ -1531,7 +1361,7 @@ const CommandMenuCheckboxItem = memo((props) => {
1531
1361
  onSelect == null ? void 0 : onSelect();
1532
1362
  onCheckedChange(checked !== true);
1533
1363
  }, [checked, onCheckedChange, onSelect]);
1534
- return /* @__PURE__ */ jsx(CheckboxIndicatorContext, { value: checked, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getCheckedState$1(checked), ...rest, children }) });
1364
+ return /* @__PURE__ */ jsx(CheckboxIndicatorContext, { value: checked, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getCheckedState(checked), ...rest, children }) });
1535
1365
  });
1536
1366
  CommandMenuCheckboxItem.displayName = "CommandMenuCheckboxItem";
1537
1367
  const CommandMenuContent = memo((props) => {
@@ -1558,9 +1388,10 @@ const CommandMenuContent = memo((props) => {
1558
1388
  return {
1559
1389
  variant,
1560
1390
  size: size2,
1561
- radius
1391
+ radius,
1392
+ accentColor
1562
1393
  };
1563
- }, [radius, size2, variant]);
1394
+ }, [accentColor, radius, size2, variant]);
1564
1395
  return /* @__PURE__ */ jsx(DialogPortal, { children: /* @__PURE__ */ jsx(
1565
1396
  DialogContent$1,
1566
1397
  {
@@ -1647,7 +1478,7 @@ const CommandMenuMultiSelectItem = genericMemo(function(props) {
1647
1478
  {
1648
1479
  ref,
1649
1480
  onSelect: handleSelect,
1650
- "data-state": getSelectedState$1(isSelected),
1481
+ "data-state": getSelectedState(isSelected),
1651
1482
  "aria-selected": isSelected,
1652
1483
  closeOnSelect,
1653
1484
  ...rest,
@@ -1721,7 +1552,7 @@ const CommandMenuRadioItem = genericMemo(function(props) {
1721
1552
  selectValue(value);
1722
1553
  }, [onSelect, selectValue, value]);
1723
1554
  const isSelected = selected(value);
1724
- return /* @__PURE__ */ jsx(SelectedIndicatorContext$1, { value: isSelected, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getSelectedState$1(isSelected), ...rest, children }) });
1555
+ return /* @__PURE__ */ jsx(SelectedIndicatorContext$1, { value: isSelected, children: /* @__PURE__ */ jsx(CommandMenuItem, { ref, onSelect: handleSelect, "data-state": getSelectedState(isSelected), ...rest, children }) });
1725
1556
  });
1726
1557
  const CommandMenuRoot = memo((props) => {
1727
1558
  const { children, defaultOpen, open: controlledOpen, onOpenChange, modal } = props;
@@ -1749,35 +1580,39 @@ const CommandMenuSelectAllItem = genericMemo(function(props) {
1749
1580
  ref,
1750
1581
  role: "menuitemcheckbox",
1751
1582
  onSelect: handleSelect,
1752
- "data-state": getCheckedState$1(selectedState),
1583
+ "data-state": getCheckedState(selectedState),
1753
1584
  closeOnSelect,
1754
1585
  ...rest
1755
1586
  }
1756
1587
  ) });
1757
1588
  });
1758
- const CommandMenuSelectedIndicator = memo((props) => {
1759
- const { ref, className, children, ...rest } = props;
1760
- const isSelected = use(SelectedIndicatorContext$1);
1761
- const computedChildren = useMemo(() => {
1762
- return typeof children === "function" ? children(isSelected) : children;
1763
- }, [isSelected, children]);
1589
+ const SelectedIndicatorContext = createContext(false);
1590
+ const SelectedIndicator = memo((props) => {
1591
+ const { ref, children, className, ...rest } = props;
1592
+ const isSelected = use(SelectedIndicatorContext);
1593
+ const computedChildren = typeof children === "function" ? children(isSelected) : children;
1764
1594
  return /* @__PURE__ */ jsx(
1765
1595
  "span",
1766
1596
  {
1767
1597
  ref,
1768
- "data-state": getSelectedState$1(isSelected),
1769
1598
  className: cx(
1770
- "inline-block size-max",
1599
+ "flex size-max items-center",
1771
1600
  {
1772
1601
  invisible: !isSelected
1773
1602
  },
1774
1603
  className
1775
1604
  ),
1605
+ "data-state": getSelectedState(isSelected),
1776
1606
  ...rest,
1777
1607
  children: computedChildren
1778
1608
  }
1779
1609
  );
1780
1610
  });
1611
+ SelectedIndicator.displayName = "SelectedIndicator";
1612
+ const CommandMenuSelectedIndicator = memo((props) => {
1613
+ const { ref, children, ...rest } = props;
1614
+ return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
1615
+ });
1781
1616
  CommandMenuSelectedIndicator.displayName = "CommandMenuSelectedIndicator";
1782
1617
  const CommandMenuSeparator = memo((props) => {
1783
1618
  const { className, ref, spacing = false, ...rest } = props;
@@ -2254,7 +2089,7 @@ const HoverCard = {
2254
2089
  Root: RadixHoverCard.Root,
2255
2090
  Trigger: RadixHoverCard.Trigger
2256
2091
  };
2257
- const HoverUtility = memo(function Root({ children, forceHover }) {
2092
+ const HoverUtility = memo(({ children, forceHover }) => {
2258
2093
  const [isHovered, setIsHovered] = useState(false);
2259
2094
  const handlePointerEnter = useCallback(() => {
2260
2095
  setIsHovered(true);
@@ -2268,6 +2103,7 @@ const HoverUtility = memo(function Root({ children, forceHover }) {
2268
2103
  onPointerLeave: handlePointerLeave
2269
2104
  });
2270
2105
  });
2106
+ HoverUtility.displayName = "HoverUtility";
2271
2107
  const InputContext = createContext({});
2272
2108
  const inputRoot$1 = cva(
2273
2109
  [
@@ -2746,40 +2582,6 @@ const LayoutSlideOutOverlay = memo((props) => {
2746
2582
  return showOverlay && /* @__PURE__ */ jsx("div", { className: cx("overmap-layout-overlay", "fixed inset-0", className), ref, ...rest, children });
2747
2583
  });
2748
2584
  LayoutSlideOutOverlay.displayName = "SlideOutOverlay";
2749
- const MENU_OVERFLOW_PADDING = 20;
2750
- const MENU_CONTENT_PADDING = 8;
2751
- const MENU_MINIMUM_MAX_HEIGHT = 250;
2752
- const computeOffsets = (side, alignment) => {
2753
- switch (side) {
2754
- case "right":
2755
- if (alignment === "start") {
2756
- return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
2757
- } else if (alignment === "end") {
2758
- return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
2759
- }
2760
- break;
2761
- case "left":
2762
- if (alignment === "start") {
2763
- return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
2764
- } else if (alignment === "end") {
2765
- return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
2766
- }
2767
- break;
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
2585
  function nextStateBasedOnType(open, type) {
2784
2586
  switch (type) {
2785
2587
  case "toggle":
@@ -2875,28 +2677,6 @@ const Link = memo((props) => {
2875
2677
  );
2876
2678
  });
2877
2679
  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
2680
  const menuItem = cva(
2901
2681
  [
2902
2682
  "select-none",
@@ -3042,100 +2822,115 @@ const inputRoot = cva(
3042
2822
  }
3043
2823
  }
3044
2824
  );
2825
+ const MenuContentContext = createContext({});
3045
2826
  const MenuContext = createContext({});
3046
- const useMenuContext = () => useContext(MenuContext);
3047
- const DEFAULT_OFFSET = 5;
3048
- const MenuRoot = memo((props) => {
2827
+ const SubContext = createContext({});
2828
+ const TRIGGER_SELECT_KEYS = ["Enter", " "];
2829
+ const MenuItem = memo((props) => {
2830
+ const rootMenuContext = use(MenuContext);
2831
+ const { getItemProps, activeIndex, setOpen, size: size2, variant, radius } = use(MenuContentContext);
2832
+ const { closeRoot } = use(SubContext);
3049
2833
  const {
2834
+ ref: forwardedRef,
2835
+ className,
3050
2836
  children,
3051
- side = "bottom",
3052
- align = "center",
3053
- offset: offset$1,
3054
- loop = false,
3055
- modal = false,
3056
- // open state related props
3057
- open: controlledOpen,
3058
- onOpenChange,
3059
- defaultOpen
2837
+ onSelect,
2838
+ onClick,
2839
+ onKeyDown,
2840
+ closeOnSelect = true,
2841
+ disabled = false,
2842
+ ...rest
3060
2843
  } = props;
3061
- const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
3062
- const [activeIndex, setActiveIndex] = useState(null);
3063
- const [triggerType, setTriggerType] = useState(null);
3064
- const elementsRef = useRef([]);
3065
- const nodeId = useFloatingNodeId();
3066
- const { refs, floatingStyles, context, middlewareData } = useFloating({
3067
- nodeId,
3068
- strategy: "fixed",
3069
- placement: side + (align !== "center" ? "-" + align : ""),
3070
- whileElementsMounted: autoUpdate,
3071
- open,
3072
- onOpenChange: setOpen,
3073
- middleware: [
3074
- offset({ mainAxis: offset$1 ?? DEFAULT_OFFSET }),
3075
- size({
3076
- apply({ availableHeight, elements }) {
3077
- elements.floating.style.setProperty(
3078
- "--overmap-menu-available-height",
3079
- `${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
3080
- );
3081
- },
3082
- padding: MENU_OVERFLOW_PADDING
3083
- }),
3084
- flip({ fallbackStrategy: "initialPlacement" }),
3085
- shift({ padding: MENU_OVERFLOW_PADDING }),
3086
- hide()
3087
- ]
3088
- });
3089
- const role = useRole(context, {
3090
- role: "menu"
3091
- });
3092
- const dismiss = useDismiss(context, {
3093
- capture: true,
3094
- ancestorScroll: triggerType === "context" || triggerType === "virtual"
3095
- });
3096
- const click = useClick(context, {
3097
- enabled: triggerType === "click"
3098
- });
3099
- const listNavigation = useListNavigation(context, {
3100
- listRef: elementsRef,
3101
- activeIndex,
3102
- onNavigate: setActiveIndex,
3103
- loop
3104
- });
3105
- const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
3106
- dismiss,
3107
- listNavigation,
3108
- click,
3109
- role
3110
- ]);
3111
- return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(
3112
- MenuContext.Provider,
3113
- {
3114
- value: {
3115
- open,
3116
- setOpen,
3117
- refs,
3118
- context,
3119
- floatingStyles,
3120
- elementsRef,
3121
- getFloatingProps,
3122
- getItemProps,
3123
- getReferenceProps,
3124
- nodeId,
3125
- activeIndex,
3126
- setActiveIndex,
3127
- middlewareData,
3128
- side,
3129
- modal,
3130
- setTriggerType
3131
- },
2844
+ const { ref, index } = useListItem();
2845
+ const mergeRefs2 = useMergeRefs([ref, forwardedRef]);
2846
+ const handleClick = useCallback(
2847
+ (e) => {
2848
+ e.stopPropagation();
2849
+ if (disabled) return;
2850
+ onClick == null ? void 0 : onClick(e);
2851
+ onSelect == null ? void 0 : onSelect();
2852
+ if (closeOnSelect) setOpen(false);
2853
+ if (closeRoot) rootMenuContext.setOpen(false);
2854
+ },
2855
+ [closeOnSelect, closeRoot, disabled, rootMenuContext, onClick, onSelect, setOpen]
2856
+ );
2857
+ const handleKeyDown = useCallback(
2858
+ (e) => {
2859
+ if (disabled) return;
2860
+ onKeyDown == null ? void 0 : onKeyDown(e);
2861
+ if (TRIGGER_SELECT_KEYS.includes(e.key)) {
2862
+ onSelect == null ? void 0 : onSelect();
2863
+ if (closeOnSelect) setOpen(false);
2864
+ }
2865
+ },
2866
+ [closeOnSelect, disabled, onKeyDown, onSelect, setOpen]
2867
+ );
2868
+ const isActive = useMemo(() => index === activeIndex, [activeIndex, index]);
2869
+ const computedChildren = useMemo(() => {
2870
+ return typeof children === "function" ? children({ active: isActive, selected: false }) : children;
2871
+ }, [children, isActive]);
2872
+ return /* @__PURE__ */ jsx(
2873
+ "li",
2874
+ {
2875
+ className: cx(menuItem({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
2876
+ ref: mergeRefs2,
2877
+ role: "menuitem",
2878
+ "data-disabled": getBooleanState(disabled),
2879
+ "aria-disabled": disabled,
2880
+ "data-highlighted": isActive ? "" : void 0,
2881
+ ...getItemProps({
2882
+ onClick: handleClick,
2883
+ onKeyDown: handleKeyDown,
2884
+ tabIndex: isActive ? 0 : -1,
2885
+ ...rest
2886
+ }),
2887
+ children: computedChildren
2888
+ }
2889
+ );
2890
+ });
2891
+ MenuItem.displayName = "MenuItem";
2892
+ const MenuCheckboxItem = memo((props) => {
2893
+ const { ref, checked, onCheckedChange, onSelect, ...rest } = props;
2894
+ const handleSelect = useCallback(() => {
2895
+ onSelect == null ? void 0 : onSelect();
2896
+ switch (checked) {
2897
+ case true:
2898
+ onCheckedChange(false);
2899
+ break;
2900
+ case "indeterminate":
2901
+ case false:
2902
+ onCheckedChange(true);
2903
+ break;
2904
+ }
2905
+ }, [checked, onCheckedChange, onSelect]);
2906
+ return /* @__PURE__ */ jsx(CheckedIndicatorContext.Provider, { value: checked, children: /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, ...rest }) });
2907
+ });
2908
+ MenuCheckboxItem.displayName = "MenuCheckboxItem";
2909
+ const MenuCheckboxItemIndicator = memo((props) => {
2910
+ const { ref, children, ...rest } = props;
2911
+ return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
2912
+ });
2913
+ MenuCheckboxItemIndicator.displayName = "MenuCheckboxItemIndicator";
2914
+ const MenuClickTrigger = memo((props) => {
2915
+ const { ref: forwardedRef, children, disabled = false } = props;
2916
+ const { getReferenceProps, refs, setTriggerType, open } = use(MenuContext);
2917
+ const mergedRefs = useMergeRefs([refs.setReference, forwardedRef]);
2918
+ useEffect(() => {
2919
+ setTriggerType("click");
2920
+ }, [setTriggerType]);
2921
+ return /* @__PURE__ */ jsx(
2922
+ Slot,
2923
+ {
2924
+ ref: mergedRefs,
2925
+ "aria-disabled": disabled,
2926
+ "data-disabled": getBooleanState(disabled),
2927
+ "data-state": getOpenState(open),
2928
+ ...getReferenceProps({ disabled }),
3132
2929
  children
3133
2930
  }
3134
- ) });
2931
+ );
3135
2932
  });
3136
- MenuRoot.displayName = "Root";
3137
- const MenuContentContext = createContext({});
3138
- const useMenuContentContext = () => useContext(MenuContentContext);
2933
+ MenuClickTrigger.displayName = "MenuClickTrigger";
3139
2934
  const MenuContent = memo((props) => {
3140
2935
  var _a;
3141
2936
  const providerContext = useProvider();
@@ -3164,7 +2959,7 @@ const MenuContent = memo((props) => {
3164
2959
  floatingStyles,
3165
2960
  modal,
3166
2961
  side
3167
- } = useMenuContext();
2962
+ } = use(MenuContext);
3168
2963
  const computedFloatingStyles = useMemo(() => {
3169
2964
  var _a2;
3170
2965
  return {
@@ -3236,254 +3031,48 @@ const MenuContent = memo((props) => {
3236
3031
  ) }) });
3237
3032
  });
3238
3033
  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);
3034
+ const MenuContextTrigger = memo((props) => {
3035
+ const { ref: forwardedRef, children, disabled = false } = props;
3036
+ const ref = useRef(null);
3037
+ const { setOpen, refs, setTriggerType, open } = use(MenuContext);
3038
+ const mergedRefs = useMergeRefs([forwardedRef, ref]);
3039
+ useEffect(() => {
3040
+ setTriggerType("context");
3041
+ }, [setTriggerType]);
3042
+ const handleContextMenu = useCallback(
3043
+ (e) => {
3044
+ const { clientY, clientX } = e;
3045
+ if (!disabled && ref.current) {
3046
+ e.preventDefault();
3047
+ refs.setPositionReference({
3048
+ getBoundingClientRect() {
3049
+ return {
3050
+ x: clientX,
3051
+ y: clientY,
3052
+ top: clientY,
3053
+ left: clientX,
3054
+ height: 0,
3055
+ width: 0,
3056
+ bottom: clientY,
3057
+ right: clientX
3058
+ };
3059
+ },
3060
+ contextElement: ref.current
3061
+ });
3062
+ setOpen(true);
3063
+ }
3264
3064
  },
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
- ]);
3065
+ [disabled, refs, setOpen]
3066
+ );
3313
3067
  return /* @__PURE__ */ jsx(
3314
- SubContext.Provider,
3068
+ Slot,
3315
3069
  {
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
- const MenuContextTrigger = memo((props) => {
3446
- const { ref: forwardedRef, children, disabled = false } = props;
3447
- const ref = useRef(null);
3448
- const { setOpen, refs, setTriggerType, open } = useMenuContext();
3449
- const mergedRefs = useMergeRefs([forwardedRef, ref]);
3450
- useEffect(() => {
3451
- setTriggerType("context");
3452
- }, [setTriggerType]);
3453
- const handleContextMenu = useCallback(
3454
- (e) => {
3455
- const { clientY, clientX } = e;
3456
- if (!disabled && ref.current) {
3457
- e.preventDefault();
3458
- refs.setPositionReference({
3459
- getBoundingClientRect() {
3460
- return {
3461
- x: clientX,
3462
- y: clientY,
3463
- top: clientY,
3464
- left: clientX,
3465
- height: 0,
3466
- width: 0,
3467
- bottom: clientY,
3468
- right: clientX
3469
- };
3470
- },
3471
- contextElement: ref.current
3472
- });
3473
- setOpen(true);
3474
- }
3475
- },
3476
- [disabled, refs, setOpen]
3477
- );
3478
- return /* @__PURE__ */ jsx(
3479
- Slot,
3480
- {
3481
- ref: mergedRefs,
3482
- style: { WebkitTouchCallout: disabled ? "none" : "unset" },
3483
- "aria-disabled": disabled,
3484
- "data-disabled": getBooleanState(disabled),
3485
- "data-state": getOpenState(open),
3486
- onContextMenu: handleContextMenu,
3070
+ ref: mergedRefs,
3071
+ style: { WebkitTouchCallout: disabled ? "none" : "unset" },
3072
+ "aria-disabled": disabled,
3073
+ "data-disabled": getBooleanState(disabled),
3074
+ "data-state": getOpenState(open),
3075
+ onContextMenu: handleContextMenu,
3487
3076
  children
3488
3077
  }
3489
3078
  );
@@ -3496,7 +3085,7 @@ const MenuGroup = memo((props) => {
3496
3085
  MenuGroup.displayName = "MenuGroup";
3497
3086
  const MenuInputField = memo((props) => {
3498
3087
  const { ref: forwardedRef, className, onValueChange, onChange, disabled = false, ...rest } = props;
3499
- const { activeIndex, getItemProps } = useMenuContentContext();
3088
+ const { activeIndex, getItemProps } = use(MenuContentContext);
3500
3089
  const { index, ref } = useListItem();
3501
3090
  const mergedRefs = useMergeRefs([ref, forwardedRef]);
3502
3091
  const handleChange = useCallback(
@@ -3529,7 +3118,7 @@ const MenuInputField = memo((props) => {
3529
3118
  MenuInputField.displayName = "MenuInputField";
3530
3119
  const MenuInputRoot = memo((props) => {
3531
3120
  const { ref, className, ...rest } = props;
3532
- const { size: size2 } = useMenuContentContext();
3121
+ const { size: size2 } = use(MenuContentContext);
3533
3122
  return /* @__PURE__ */ jsx("div", { className: cx(inputRoot({ size: size2 }), className), ref, ...rest });
3534
3123
  });
3535
3124
  MenuInputRoot.displayName = "MenuInputRoot";
@@ -3540,7 +3129,7 @@ const MenuInputSlot = memo((props) => {
3540
3129
  MenuInputSlot.displayName = "MenuInputSlot";
3541
3130
  const MenuLabel = memo((props) => {
3542
3131
  const { ref, className, ...rest } = props;
3543
- const { size: size2 } = useMenuContentContext();
3132
+ const { size: size2 } = use(MenuContentContext);
3544
3133
  return /* @__PURE__ */ jsx("div", { ref, className: cx(menuLabelCva({ size: size2 }), className), ...rest });
3545
3134
  });
3546
3135
  MenuLabel.displayName = "MenuLabel";
@@ -3548,29 +3137,6 @@ const MenuMultiSelectGroup = genericMemo(function MenuMultiSelectGroup2(props) {
3548
3137
  const { ref, children, defaultValues, values, onValuesChange, ...rest } = props;
3549
3138
  return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: /* @__PURE__ */ jsx(MultiSelectProvider, { defaultValues, values, onValuesChange, children }) });
3550
3139
  });
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
3140
  const MenuMultiSelectItem = genericMemo(function(props) {
3575
3141
  const { ref, onSelect, children, closeOnSelect = false, value, ...rest } = props;
3576
3142
  const { selected, selectValue, registerValue } = use(MultiSelectContext);
@@ -3599,7 +3165,12 @@ const MenuMultiSelectItem = genericMemo(function(props) {
3599
3165
  ) });
3600
3166
  });
3601
3167
  const PagesContext = createContext({});
3602
- const usePagesContext = () => useContext(PagesContext);
3168
+ const MenuPageContent = memo((props) => {
3169
+ const { page, children } = props;
3170
+ const { activePage } = use(PagesContext);
3171
+ return activePage === page ? children : null;
3172
+ });
3173
+ MenuPageContent.displayName = "PageContent";
3603
3174
  const MenuPages = memo((props) => {
3604
3175
  const { children, defaultPage, page, onPageChange } = props;
3605
3176
  const [activePage, setActivePage] = useControlledState(defaultPage ?? "", page, onPageChange);
@@ -3607,16 +3178,10 @@ const MenuPages = memo((props) => {
3607
3178
  return /* @__PURE__ */ jsx(PagesContext.Provider, { value: contextValue, children });
3608
3179
  });
3609
3180
  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
3181
  const MenuPageTrigger = memo((props) => {
3617
3182
  const { ref, onSelect, page, ...rest } = props;
3618
- const { refs, setActiveIndex } = useMenuContentContext();
3619
- const { setActivePage } = usePagesContext();
3183
+ const { refs, setActiveIndex } = use(MenuContentContext);
3184
+ const { setActivePage } = use(PagesContext);
3620
3185
  const handleSelect = useCallback(() => {
3621
3186
  var _a;
3622
3187
  onSelect == null ? void 0 : onSelect();
@@ -3627,6 +3192,100 @@ const MenuPageTrigger = memo((props) => {
3627
3192
  return /* @__PURE__ */ jsx(MenuItem, { ref, onSelect: handleSelect, closeOnSelect: false, ...rest });
3628
3193
  });
3629
3194
  MenuPageTrigger.displayName = "MenuPageTrigger";
3195
+ const MENU_OVERFLOW_PADDING = 20;
3196
+ const MENU_CONTENT_PADDING = 8;
3197
+ const MENU_MINIMUM_MAX_HEIGHT = 250;
3198
+ const DEFAULT_OFFSET = 5;
3199
+ const MenuRoot = memo((props) => {
3200
+ const {
3201
+ children,
3202
+ side = "bottom",
3203
+ align = "center",
3204
+ offset: offset$1,
3205
+ loop = false,
3206
+ modal = false,
3207
+ // open state related props
3208
+ open: controlledOpen,
3209
+ onOpenChange,
3210
+ defaultOpen
3211
+ } = props;
3212
+ const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
3213
+ const [activeIndex, setActiveIndex] = useState(null);
3214
+ const [triggerType, setTriggerType] = useState(null);
3215
+ const elementsRef = useRef([]);
3216
+ const nodeId = useFloatingNodeId();
3217
+ const { refs, floatingStyles, context, middlewareData } = useFloating({
3218
+ nodeId,
3219
+ strategy: "fixed",
3220
+ // TODO: probably some way with template string types to not need the "as Placement"
3221
+ placement: side + (align !== "center" ? "-" + align : ""),
3222
+ whileElementsMounted: autoUpdate,
3223
+ open,
3224
+ onOpenChange: setOpen,
3225
+ middleware: [
3226
+ offset({ mainAxis: offset$1 ?? DEFAULT_OFFSET }),
3227
+ size({
3228
+ apply({ availableHeight, elements }) {
3229
+ elements.floating.style.setProperty(
3230
+ "--overmap-menu-available-height",
3231
+ `${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
3232
+ );
3233
+ },
3234
+ padding: MENU_OVERFLOW_PADDING
3235
+ }),
3236
+ flip({ fallbackStrategy: "initialPlacement" }),
3237
+ shift({ padding: MENU_OVERFLOW_PADDING }),
3238
+ hide()
3239
+ ]
3240
+ });
3241
+ const role = useRole(context, {
3242
+ role: "menu"
3243
+ });
3244
+ const dismiss = useDismiss(context, {
3245
+ capture: true,
3246
+ ancestorScroll: triggerType === "context" || triggerType === "virtual"
3247
+ });
3248
+ const click = useClick(context, {
3249
+ enabled: triggerType === "click"
3250
+ });
3251
+ const listNavigation = useListNavigation(context, {
3252
+ listRef: elementsRef,
3253
+ activeIndex,
3254
+ onNavigate: setActiveIndex,
3255
+ loop
3256
+ });
3257
+ const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
3258
+ dismiss,
3259
+ listNavigation,
3260
+ click,
3261
+ role
3262
+ ]);
3263
+ return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(
3264
+ MenuContext.Provider,
3265
+ {
3266
+ value: {
3267
+ open,
3268
+ setOpen,
3269
+ refs,
3270
+ context,
3271
+ floatingStyles,
3272
+ elementsRef,
3273
+ getFloatingProps,
3274
+ getItemProps,
3275
+ getReferenceProps,
3276
+ nodeId,
3277
+ activeIndex,
3278
+ setActiveIndex,
3279
+ middlewareData,
3280
+ side,
3281
+ modal,
3282
+ setTriggerType
3283
+ },
3284
+ children
3285
+ }
3286
+ ) });
3287
+ });
3288
+ MenuRoot.displayName = "Root";
3630
3289
  const MenuScroll = memo((props) => {
3631
3290
  const { ref, className, ...rest } = props;
3632
3291
  return /* @__PURE__ */ jsx(
@@ -3656,18 +3315,821 @@ const MenuSelectAllItem = genericMemo((props) => {
3656
3315
  return /* @__PURE__ */ jsx(CheckedIndicatorContext, { value: selectedState, children: /* @__PURE__ */ jsx(
3657
3316
  MenuItem,
3658
3317
  {
3659
- onSelect: handleSelect,
3660
- ref,
3661
- "data-state": getCheckedState(selectedState),
3662
- closeOnSelect,
3318
+ onSelect: handleSelect,
3319
+ ref,
3320
+ "data-state": getCheckedState(selectedState),
3321
+ closeOnSelect,
3322
+ ...rest,
3323
+ children: computedChildren
3324
+ }
3325
+ ) });
3326
+ });
3327
+ const MenuSelectedIndicator = memo((props) => {
3328
+ const { ref, children, ...rest } = props;
3329
+ return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
3330
+ });
3331
+ MenuSelectedIndicator.displayName = "MenuSelectedIndicator";
3332
+ const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
3333
+ const { ref, children, required, defaultValue, value, onValueChange, ...rest } = props;
3334
+ return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
3335
+ SingleSelectNotRequiredProvider,
3336
+ {
3337
+ defaultValue,
3338
+ value,
3339
+ onValueChange,
3340
+ children
3341
+ }
3342
+ ) });
3343
+ });
3344
+ const MenuSelectItem = genericMemo(function(props) {
3345
+ const { ref, value, onSelect, children, closeOnSelect = true, ...rest } = props;
3346
+ const { selected, selectValue } = use(SelectContext);
3347
+ const isSelected = selected(value);
3348
+ const handleSelect = useCallback(() => {
3349
+ onSelect == null ? void 0 : onSelect();
3350
+ selectValue(value);
3351
+ }, [onSelect, selectValue, value]);
3352
+ const computedChildren = useMemo(() => {
3353
+ return typeof children === "function" ? ({ active }) => children({ selected: isSelected, active }) : children;
3354
+ }, [children, isSelected]);
3355
+ return /* @__PURE__ */ jsx(SelectedIndicatorContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsx(
3356
+ MenuItem,
3357
+ {
3358
+ ref,
3359
+ role: "menuitemcheckbox",
3360
+ onSelect: handleSelect,
3361
+ closeOnSelect,
3362
+ "data-state": getSelectedState(isSelected),
3363
+ ...rest,
3364
+ children: computedChildren
3365
+ }
3366
+ ) });
3367
+ });
3368
+ const MenuSeparator = memo((props) => {
3369
+ const { ref, className, ...rest } = props;
3370
+ const { size: size2 } = use(MenuContentContext);
3371
+ return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparator({ size: size2 }), className), ref, ...rest });
3372
+ });
3373
+ MenuSeparator.displayName = "MenuSeparator";
3374
+ const computeOffsets = (side, alignment) => {
3375
+ switch (side) {
3376
+ case "right":
3377
+ if (alignment === "start") {
3378
+ return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
3379
+ } else if (alignment === "end") {
3380
+ return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
3381
+ }
3382
+ break;
3383
+ case "left":
3384
+ if (alignment === "start") {
3385
+ return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: -MENU_CONTENT_PADDING };
3386
+ } else if (alignment === "end") {
3387
+ return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: MENU_CONTENT_PADDING };
3388
+ }
3389
+ break;
3390
+ }
3391
+ return { mainAxis: MENU_CONTENT_PADDING + 1, crossAxis: 0 };
3392
+ };
3393
+ const MenuSub = memo((props) => {
3394
+ const {
3395
+ children,
3396
+ disabled = false,
3397
+ side = "right",
3398
+ align = "start",
3399
+ closeRoot = false,
3400
+ loop = false,
3401
+ modal = false,
3402
+ // open state related props
3403
+ open: controlledOpen,
3404
+ onOpenChange,
3405
+ defaultOpen
3406
+ } = props;
3407
+ const [open, setOpen] = useControlledState(defaultOpen ?? false, controlledOpen, onOpenChange);
3408
+ const nodeId = useFloatingNodeId();
3409
+ const { refs, floatingStyles, context } = useFloating({
3410
+ nodeId,
3411
+ strategy: "fixed",
3412
+ whileElementsMounted: autoUpdate,
3413
+ open,
3414
+ onOpenChange: (open2, _event, reason) => {
3415
+ if (reason) setOpen(open2);
3416
+ },
3417
+ placement: side + (align !== "center" ? "-" + align : ""),
3418
+ middleware: [
3419
+ offset({ ...computeOffsets(side, align) }),
3420
+ size({
3421
+ padding: MENU_OVERFLOW_PADDING,
3422
+ apply({ availableHeight, elements }) {
3423
+ elements.floating.style.setProperty(
3424
+ "--overmap-menu-available-height",
3425
+ `${Math.max(availableHeight, MENU_MINIMUM_MAX_HEIGHT)}px`
3426
+ );
3427
+ }
3428
+ }),
3429
+ flip(),
3430
+ shift({ padding: MENU_OVERFLOW_PADDING }),
3431
+ hide()
3432
+ ]
3433
+ });
3434
+ const dismiss = useDismiss(context, {
3435
+ bubbles: closeRoot,
3436
+ outsidePress: closeRoot
3437
+ });
3438
+ const hover = useHover(context, {
3439
+ restMs: 50,
3440
+ handleClose: safePolygon({
3441
+ blockPointerEvents: true,
3442
+ requireIntent: false
3443
+ }),
3444
+ enabled: !disabled
3445
+ });
3446
+ const click = useClick(context, {
3447
+ enabled: !disabled
3448
+ });
3449
+ const elementsRef = useRef([]);
3450
+ const [activeIndex, setActiveIndex] = useState(null);
3451
+ const listNavigation = useListNavigation(context, {
3452
+ listRef: elementsRef,
3453
+ nested: true,
3454
+ activeIndex,
3455
+ onNavigate: setActiveIndex,
3456
+ loop,
3457
+ rtl: side === "left"
3458
+ });
3459
+ const { getFloatingProps, getItemProps, getReferenceProps } = useInteractions([
3460
+ listNavigation,
3461
+ dismiss,
3462
+ hover,
3463
+ click
3464
+ ]);
3465
+ return /* @__PURE__ */ jsx(
3466
+ SubContext.Provider,
3467
+ {
3468
+ value: {
3469
+ open,
3470
+ setOpen,
3471
+ nodeId,
3472
+ refs,
3473
+ floatingStyles,
3474
+ context,
3475
+ elementsRef,
3476
+ activeIndex,
3477
+ setActiveIndex,
3478
+ getFloatingProps,
3479
+ getItemProps,
3480
+ getReferenceProps,
3481
+ disabled,
3482
+ side,
3483
+ closeRoot,
3484
+ modal
3485
+ },
3486
+ children
3487
+ }
3488
+ );
3489
+ });
3490
+ MenuSub.displayName = "SubMenu";
3491
+ const MenuSubContent = memo((props) => {
3492
+ var _a;
3493
+ const { ref: forwardedRef, children, ...rest } = props;
3494
+ const { middlewareData } = use(MenuContext);
3495
+ const { accentColor, radius, variant, size: size2 } = use(MenuContentContext);
3496
+ const {
3497
+ open,
3498
+ nodeId,
3499
+ refs,
3500
+ context,
3501
+ getFloatingProps,
3502
+ getItemProps,
3503
+ activeIndex,
3504
+ setActiveIndex,
3505
+ elementsRef,
3506
+ floatingStyles,
3507
+ setOpen,
3508
+ side
3509
+ } = use(SubContext);
3510
+ const wrapperRef = useRef(null);
3511
+ const mergeRefs2 = useMergeRefs([refs.setFloating, wrapperRef]);
3512
+ const computedFloatingStyles = useMemo(() => {
3513
+ var _a2;
3514
+ return {
3515
+ ...floatingStyles,
3516
+ visibility: ((_a2 = middlewareData.hide) == null ? void 0 : _a2.referenceHidden) ? "hidden" : "visible"
3517
+ };
3518
+ }, [floatingStyles, (_a = middlewareData.hide) == null ? void 0 : _a.referenceHidden]);
3519
+ 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(
3520
+ MenuContentContext.Provider,
3521
+ {
3522
+ value: {
3523
+ getItemProps,
3524
+ activeIndex,
3525
+ setActiveIndex,
3526
+ elementsRef,
3527
+ open,
3528
+ setOpen,
3529
+ refs,
3530
+ size: size2,
3531
+ radius,
3532
+ accentColor,
3533
+ variant
3534
+ },
3535
+ children: /* @__PURE__ */ jsx(
3536
+ "div",
3537
+ {
3538
+ className: "outline-none",
3539
+ ref: mergeRefs2,
3540
+ style: computedFloatingStyles,
3541
+ ...getFloatingProps(),
3542
+ children: /* @__PURE__ */ jsx(
3543
+ "ul",
3544
+ {
3545
+ className: cx(
3546
+ "overmap-menu-sub-content",
3547
+ menuContent({ size: size2 }),
3548
+ floating({ side, shadow: "3" }),
3549
+ radiusCva({ radius, maxLarge: true }),
3550
+ "max-h-(--overmap-menu-available-height)"
3551
+ ),
3552
+ ref: forwardedRef,
3553
+ "data-state": getOpenState(open),
3554
+ "data-side": side,
3555
+ "data-accent-color": accentColor,
3556
+ ...rest,
3557
+ children
3558
+ }
3559
+ )
3560
+ }
3561
+ )
3562
+ }
3563
+ ) }) }) }) });
3564
+ });
3565
+ MenuSubContent.displayName = "MenuSubContent";
3566
+ const MenuSubTrigger = memo((props) => {
3567
+ const { ref: forwardedRef, children, ...rest } = props;
3568
+ const { refs, getReferenceProps, open, disabled } = use(SubContext);
3569
+ const mergedRefs = useMergeRefs([forwardedRef, refs.setReference]);
3570
+ return /* @__PURE__ */ jsx(
3571
+ MenuItem,
3572
+ {
3573
+ ref: mergedRefs,
3574
+ closeOnSelect: false,
3575
+ "aria-haspopup": "menu",
3576
+ "data-state": getOpenState(open),
3577
+ disabled,
3578
+ ...getReferenceProps(rest),
3579
+ children
3580
+ }
3581
+ );
3582
+ });
3583
+ MenuSubTrigger.displayName = "MenuSubTrigger";
3584
+ const MenuVirtualTrigger = memo((props) => {
3585
+ const { virtualElement, disabled } = props;
3586
+ const { refs, setTriggerType, setOpen } = use(MenuContext);
3587
+ useEffect(() => {
3588
+ setTriggerType("virtual");
3589
+ }, [setTriggerType]);
3590
+ useEffect(() => {
3591
+ if (!disabled && virtualElement) {
3592
+ refs.setPositionReference(virtualElement);
3593
+ setOpen(true);
3594
+ } else {
3595
+ refs.setPositionReference(null);
3596
+ setOpen(false);
3597
+ }
3598
+ }, [disabled, refs, setOpen, virtualElement]);
3599
+ return null;
3600
+ });
3601
+ MenuVirtualTrigger.displayName = "VirtualTrigger";
3602
+ const Menu = {
3603
+ Root: MenuRoot,
3604
+ Content: MenuContent,
3605
+ // sub
3606
+ Sub: MenuSub,
3607
+ SubContent: MenuSubContent,
3608
+ SubTrigger: MenuSubTrigger,
3609
+ // pages
3610
+ Pages: MenuPages,
3611
+ PageContent: MenuPageContent,
3612
+ PageTrigger: MenuPageTrigger,
3613
+ // triggers
3614
+ ClickTrigger: MenuClickTrigger,
3615
+ ContextTrigger: MenuContextTrigger,
3616
+ VirtualTrigger: MenuVirtualTrigger,
3617
+ // groups
3618
+ Group: MenuGroup,
3619
+ SelectGroup: MenuSelectGroup,
3620
+ MultiSelectGroup: MenuMultiSelectGroup,
3621
+ // items
3622
+ Item: MenuItem,
3623
+ SelectItem: MenuSelectItem,
3624
+ MultiSelectItem: MenuMultiSelectItem,
3625
+ SelectAllItem: MenuSelectAllItem,
3626
+ CheckboxItem: MenuCheckboxItem,
3627
+ // indicators
3628
+ SelectedIndicator: MenuSelectedIndicator,
3629
+ CheckboxItemIndicator: MenuCheckboxItemIndicator,
3630
+ // input
3631
+ InputRoot: MenuInputRoot,
3632
+ InputField: MenuInputField,
3633
+ InputSlot: MenuInputSlot,
3634
+ // others
3635
+ Label: MenuLabel,
3636
+ Separator: MenuSeparator,
3637
+ Scroll: MenuScroll
3638
+ };
3639
+ const KEY_MAPPING = {
3640
+ next: "ArrowDown",
3641
+ prev: "ArrowUp",
3642
+ first: "PageUp",
3643
+ last: "PageDown",
3644
+ selectItem: "Enter"
3645
+ };
3646
+ const ITEM_SELECTOR = "menu-item";
3647
+ const GROUP_SELECTOR = "menu-group";
3648
+ const MenuRootContext = createContext({});
3649
+ const MenuGroupContext = createContext({});
3650
+ const MenuPageContext = createContext({});
3651
+ const menuRootCva = cva(["w-full", "outline-none"], {
3652
+ variants: {
3653
+ size: {
3654
+ xs: ["p-0.5", "text-xs", "min-w-30"],
3655
+ sm: ["p-0.75", "text-sm", "min-w-35"],
3656
+ md: ["p-1", "text-md", "min-w-40"],
3657
+ lg: ["p-1.25", "text-lg", "min-w-45"],
3658
+ xl: ["p-1.5", "text-xl", "min-w-50"]
3659
+ },
3660
+ radius: {
3661
+ none: ["rounded-none"],
3662
+ xs: ["rounded-xs"],
3663
+ sm: ["rounded-sm"],
3664
+ md: ["rounded-md"],
3665
+ lg: ["rounded-lg"],
3666
+ xl: ["rounded-lg"],
3667
+ full: ["rounded-lg"]
3668
+ }
3669
+ }
3670
+ });
3671
+ const menuItemCva = cva(
3672
+ [
3673
+ "select-none",
3674
+ "relative",
3675
+ "flex",
3676
+ "items-center",
3677
+ "outline-none",
3678
+ "data-[disabled=true]:text-(--base-a8)",
3679
+ "data-[disabled=true]:pointer-events-none",
3680
+ "shrink-0",
3681
+ "py-1",
3682
+ "text-(--base-12)"
3683
+ ],
3684
+ {
3685
+ variants: {
3686
+ size: {
3687
+ xs: ["gap-1.5", "px-3"],
3688
+ sm: ["gap-1.75", "px-3.5"],
3689
+ md: ["gap-2", "px-4"],
3690
+ lg: ["gap-2.25", "px-4.5"],
3691
+ xl: ["gap-2.5", "px-5"]
3692
+ },
3693
+ variant: {
3694
+ solid: [
3695
+ "data-[active=true]:not-[data-[disabled=true]]:text-(--accent-contrast)",
3696
+ "data-[active=true]:not-[data-[disabled=true]]:bg-(--accent-a9)",
3697
+ "data-[active=true]:not-[data-[disabled=true]]:active:brightness-110"
3698
+ ],
3699
+ soft: [
3700
+ "data-[active=true]:not-[data-[disabled=true]]:bg-(--accent-a3)",
3701
+ "data-[active=true]:not-[data-[disabled=true]]:active:bg-(--accent-a4)"
3702
+ ]
3703
+ }
3704
+ }
3705
+ }
3706
+ );
3707
+ const menuGroupLabelCva = cva(["text-(--base-a11)", "flex", "items-center", "select-none", "py-1"], {
3708
+ variants: {
3709
+ size: {
3710
+ xs: ["gap-1.5", "px-3", "text-xs"],
3711
+ sm: ["gap-1.75", "px-3.5", "text-xs"],
3712
+ md: ["gap-2", "px-4", "text-sm"],
3713
+ lg: ["gap-2.25", "px-4.5", "text-base"],
3714
+ xl: ["gap-2.5", "px-5", "text-lg"]
3715
+ }
3716
+ }
3717
+ });
3718
+ const menuSeparatorCva = cva(["h-px", "bg-(--base-a6)", "w-auto", "shrink-0"], {
3719
+ variants: {
3720
+ size: {
3721
+ xs: ["-mx-0.5", "my-0.5"],
3722
+ sm: ["-mx-0.75", "my-0.75"],
3723
+ md: ["-mx-1", "my-1"],
3724
+ lg: ["-mx-1.25", "my-1.25"],
3725
+ xl: ["-mx-1.5", "my-1.5"]
3726
+ }
3727
+ }
3728
+ });
3729
+ const MenuV2Item = memo((props) => {
3730
+ const {
3731
+ ref,
3732
+ children,
3733
+ className,
3734
+ disabled = false,
3735
+ onClick,
3736
+ onSelect,
3737
+ onPointerEnter,
3738
+ onPointerLeave,
3739
+ onPointerMove,
3740
+ ...rest
3741
+ } = props;
3742
+ const internalRef = useRef(null);
3743
+ const itemId = useId();
3744
+ const { activeItemId, setActiveItemId, size: size2, variant, radius } = use(MenuRootContext);
3745
+ const isActive = itemId === activeItemId;
3746
+ const handleSelect = useCallback(
3747
+ (e) => {
3748
+ onSelect == null ? void 0 : onSelect(e);
3749
+ },
3750
+ [onSelect]
3751
+ );
3752
+ const handleClick = useCallback(
3753
+ (e) => {
3754
+ onClick == null ? void 0 : onClick(e);
3755
+ handleSelect(new Event("menu-select"));
3756
+ },
3757
+ [handleSelect, onClick]
3758
+ );
3759
+ const handlePointerEnter = useCallback(
3760
+ (e) => {
3761
+ onPointerEnter == null ? void 0 : onPointerEnter(e);
3762
+ if (e.defaultPrevented) return;
3763
+ setActiveItemId(itemId);
3764
+ },
3765
+ [onPointerEnter, setActiveItemId, itemId]
3766
+ );
3767
+ const handlePointerLeave = useCallback(
3768
+ (e) => {
3769
+ onPointerLeave == null ? void 0 : onPointerLeave(e);
3770
+ if (e.defaultPrevented) return;
3771
+ setActiveItemId(null);
3772
+ },
3773
+ [onPointerLeave, setActiveItemId]
3774
+ );
3775
+ const handlePointerMove = useCallback(
3776
+ (e) => {
3777
+ onPointerMove == null ? void 0 : onPointerMove(e);
3778
+ if (e.defaultPrevented) return;
3779
+ setActiveItemId(itemId);
3780
+ },
3781
+ [onPointerMove, itemId, setActiveItemId]
3782
+ );
3783
+ useEffect(() => {
3784
+ if (!internalRef.current) return;
3785
+ const element = internalRef.current;
3786
+ element.addEventListener("menu-select", handleSelect);
3787
+ return () => {
3788
+ element.removeEventListener("menu-select", handleSelect);
3789
+ };
3790
+ }, [handleSelect]);
3791
+ return /* @__PURE__ */ jsx(
3792
+ "div",
3793
+ {
3794
+ ref: mergeRefs([ref, internalRef]),
3795
+ className: cx(menuItemCva({ size: size2, variant }), radiusCva({ radius, maxLarge: true }), className),
3796
+ role: "menuitem",
3797
+ onClick: handleClick,
3798
+ onPointerEnter: handlePointerEnter,
3799
+ onPointerLeave: handlePointerLeave,
3800
+ onPointerMove: handlePointerMove,
3801
+ ...{ [ITEM_SELECTOR]: itemId },
3802
+ "data-active": getBooleanState(isActive),
3803
+ "data-disabled": getBooleanState(disabled),
3804
+ "aria-disabled": getBooleanState(disabled),
3805
+ ...rest,
3806
+ children
3807
+ }
3808
+ );
3809
+ });
3810
+ MenuV2Item.displayName = "MenuItem";
3811
+ const MenuV2CheckboxItem = memo((props) => {
3812
+ const { ref, checked, onCheckedChange, onSelect, ...rest } = props;
3813
+ const handleSelect = useCallback(
3814
+ (e) => {
3815
+ onSelect == null ? void 0 : onSelect(e);
3816
+ if (e.defaultPrevented) return;
3817
+ switch (checked) {
3818
+ case true:
3819
+ onCheckedChange(false);
3820
+ break;
3821
+ case "indeterminate":
3822
+ onCheckedChange(true);
3823
+ break;
3824
+ case false:
3825
+ onCheckedChange(true);
3826
+ break;
3827
+ }
3828
+ },
3829
+ [checked, onCheckedChange, onSelect]
3830
+ );
3831
+ return /* @__PURE__ */ jsx(CheckedIndicatorContext.Provider, { value: checked, children: /* @__PURE__ */ jsx(MenuV2Item, { ref, onSelect: handleSelect, ...rest }) });
3832
+ });
3833
+ MenuV2CheckboxItem.displayName = "MenuCheckboxItem";
3834
+ const MenuV2CheckedIndicator = memo((props) => {
3835
+ const { ref, children, ...rest } = props;
3836
+ return /* @__PURE__ */ jsx(CheckedIndicator, { ref, ...rest, children });
3837
+ });
3838
+ MenuV2CheckedIndicator.displayName = "MenuCheckboxItemIndicator";
3839
+ const MenuV2Group = memo((props) => {
3840
+ const { ref, children, ...rest } = props;
3841
+ const groupId = useId();
3842
+ const [labelId, setLabelId] = useState(null);
3843
+ const contextValue = useMemo(
3844
+ () => ({
3845
+ labelId,
3846
+ setLabelId
3847
+ }),
3848
+ [labelId]
3849
+ );
3850
+ return /* @__PURE__ */ jsx("div", { ref, role: "group", ...{ [GROUP_SELECTOR]: groupId }, "aria-labelledby": labelId ?? void 0, ...rest, children: /* @__PURE__ */ jsx(MenuGroupContext, { value: contextValue, children }) });
3851
+ });
3852
+ MenuV2Group.displayName = "MenuGroup";
3853
+ const MenuV2GroupLabel = memo((props) => {
3854
+ const { ref, children, id, className, ...rest } = props;
3855
+ const labelId = useFallbackId(id);
3856
+ const { size: size2 } = use(MenuRootContext);
3857
+ const { setLabelId } = use(MenuGroupContext);
3858
+ useEffect(() => {
3859
+ setLabelId(labelId);
3860
+ }, [labelId, setLabelId]);
3861
+ return /* @__PURE__ */ jsx("div", { ref, id: labelId, className: cx(menuGroupLabelCva({ size: size2 }), className), ...rest, children });
3862
+ });
3863
+ MenuV2GroupLabel.displayName = "MenuGroupLabel";
3864
+ const MenuV2SelectAllItem = genericMemo((props) => {
3865
+ const { ref, children, onSelect, ...rest } = props;
3866
+ const { allSelected, someSelected, toggleSelectAll } = use(MultiSelectContext);
3867
+ const selectedState = allSelected ? true : someSelected ? "indeterminate" : false;
3868
+ const handleSelect = useCallback(
3869
+ (e) => {
3870
+ onSelect == null ? void 0 : onSelect(e);
3871
+ if (e.defaultPrevented) return;
3872
+ toggleSelectAll();
3873
+ },
3874
+ [onSelect, toggleSelectAll]
3875
+ );
3876
+ return /* @__PURE__ */ jsx(MenuV2Item, { onSelect: handleSelect, ref, "data-state": getCheckedState(selectedState), ...rest, children: /* @__PURE__ */ jsx(CheckedIndicatorContext, { value: selectedState, children }) });
3877
+ });
3878
+ const MenuV2MultiSelectGroup = genericMemo(function MenuMultiSelectGroup3(props) {
3879
+ const { ref, children, defaultValues, values, onValuesChange, ...rest } = props;
3880
+ return /* @__PURE__ */ jsx(MenuV2Group, { ref, ...rest, children: /* @__PURE__ */ jsx(MultiSelectProvider, { defaultValues, values, onValuesChange, children }) });
3881
+ });
3882
+ const MenuV2MultiSelectItem = genericMemo(function(props) {
3883
+ const { ref, onSelect, children, value, ...rest } = props;
3884
+ const { selected, selectValue, registerValue } = use(MultiSelectContext);
3885
+ useLayoutEffect(() => {
3886
+ return registerValue(value);
3887
+ }, [registerValue, value]);
3888
+ const isSelected = selected(value);
3889
+ const handleSelect = useCallback(
3890
+ (e) => {
3891
+ onSelect == null ? void 0 : onSelect(e);
3892
+ if (e.defaultPrevented) return;
3893
+ selectValue(value);
3894
+ },
3895
+ [onSelect, selectValue, value]
3896
+ );
3897
+ return /* @__PURE__ */ jsx(
3898
+ MenuV2Item,
3899
+ {
3900
+ ref,
3901
+ role: "menuitemcheckbox",
3902
+ onSelect: handleSelect,
3903
+ "data-state": getSelectedState(isSelected),
3904
+ ...rest,
3905
+ children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isSelected, children })
3906
+ }
3907
+ );
3908
+ });
3909
+ const MenuV2Page = memo((props) => {
3910
+ const { children, ref, page, ...rest } = props;
3911
+ const { page: activePage } = use(MenuPageContext);
3912
+ const isActive = page === activePage;
3913
+ return /* @__PURE__ */ jsx("div", { ref, "data-active": getActiveState(isActive), hidden: !isActive, ...rest, children: isActive ? children : null });
3914
+ });
3915
+ MenuV2Page.displayName = "MenuPage";
3916
+ const MenuV2Pages = memo((props) => {
3917
+ const { children, defaultPage = "", page: controlledPage, onPageChange } = props;
3918
+ const [page, setPage] = useControlledState(defaultPage, controlledPage, onPageChange);
3919
+ const contextValue = useMemo(
3920
+ () => ({
3921
+ page,
3922
+ setPage
3923
+ }),
3924
+ [page, setPage]
3925
+ );
3926
+ return /* @__PURE__ */ jsx(MenuPageContext, { value: contextValue, children });
3927
+ });
3928
+ MenuV2Pages.displayName = "MenuPages";
3929
+ const MenuV2PageTriggerItem = memo((props) => {
3930
+ const { ref, children, page, onSelect, ...rest } = props;
3931
+ const { page: activePage, setPage } = use(MenuPageContext);
3932
+ const isActive = page === activePage;
3933
+ const handleSelect = useCallback(
3934
+ (e) => {
3935
+ onSelect == null ? void 0 : onSelect(e);
3936
+ if (e.defaultPrevented) return;
3937
+ setPage(page);
3938
+ },
3939
+ [onSelect, page, setPage]
3940
+ );
3941
+ return /* @__PURE__ */ jsx(MenuV2Item, { ref, onSelect: handleSelect, "data-state": getActiveState(isActive), ...rest, children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isActive, children }) });
3942
+ });
3943
+ MenuV2PageTriggerItem.displayName = "CommandMenuPageTriggerItem";
3944
+ const computeNextIndex = (index, length, direction, loop) => {
3945
+ switch (direction) {
3946
+ case "next":
3947
+ return index === length - 1 ? loop ? 0 : index : index + 1;
3948
+ case "prev":
3949
+ return index === 0 ? loop ? length - 1 : index : index - 1;
3950
+ }
3951
+ };
3952
+ const MenuV2Root = memo((props) => {
3953
+ const providerContext = useProvider();
3954
+ const {
3955
+ ref,
3956
+ children,
3957
+ className,
3958
+ onKeyDown,
3959
+ loop = false,
3960
+ // style props
3961
+ radius = providerContext.radius,
3962
+ accentColor = "base",
3963
+ size: size2 = "md",
3964
+ variant = "soft",
3965
+ ...rest
3966
+ } = props;
3967
+ const internalRef = useRef(null);
3968
+ const [activeItemId, setActiveItemId] = useState(null);
3969
+ const getItems = useCallback((element) => {
3970
+ return Array.from(element.querySelectorAll(`[${ITEM_SELECTOR}]:not([data-disabled=true]`));
3971
+ }, []);
3972
+ const getFirstItem = useCallback(
3973
+ (element) => {
3974
+ return getItems(element).at(0);
3975
+ },
3976
+ [getItems]
3977
+ );
3978
+ const getLastItem = useCallback(
3979
+ (element) => {
3980
+ return getItems(element).at(-1);
3981
+ },
3982
+ [getItems]
3983
+ );
3984
+ const getActiveItem = useCallback(
3985
+ (element) => {
3986
+ return getItems(element).find((itemEle) => itemEle.getAttribute(ITEM_SELECTOR) === activeItemId);
3987
+ },
3988
+ [activeItemId, getItems]
3989
+ );
3990
+ const getNextItem = useCallback(
3991
+ (element, direction) => {
3992
+ const items = getItems(element);
3993
+ const activeItem = getActiveItem(element);
3994
+ const activeItemIndex = items.findIndex((itemEle) => itemEle === activeItem);
3995
+ const nextItemIndex = computeNextIndex(activeItemIndex, items.length, direction, loop);
3996
+ return items[nextItemIndex];
3997
+ },
3998
+ [getActiveItem, getItems, loop]
3999
+ );
4000
+ const getGroups = useCallback(() => {
4001
+ if (!internalRef.current) return [];
4002
+ return Array.from(internalRef.current.querySelectorAll(`[${GROUP_SELECTOR}]`));
4003
+ }, []);
4004
+ const getActiveGroup = useCallback(() => {
4005
+ var _a;
4006
+ return ((_a = getActiveItem(internalRef.current)) == null ? void 0 : _a.closest(`[${GROUP_SELECTOR}]`)) ?? void 0;
4007
+ }, [getActiveItem]);
4008
+ const getNextGroup = useCallback(
4009
+ (direction) => {
4010
+ const groups = getGroups();
4011
+ const activeGroup = getActiveGroup();
4012
+ const activeGroupIndex = groups.findIndex((groupEle) => groupEle === activeGroup);
4013
+ const nextGroupIndex = computeNextIndex(activeGroupIndex, groups.length, direction, loop);
4014
+ return groups[nextGroupIndex];
4015
+ },
4016
+ [getActiveGroup, getGroups, loop]
4017
+ );
4018
+ const getFirstGroup = useCallback(() => {
4019
+ return getGroups().at(0);
4020
+ }, [getGroups]);
4021
+ const getLastGroup = useCallback(() => {
4022
+ return getGroups().at(-1);
4023
+ }, [getGroups]);
4024
+ const handleKeyDown = useCallback(
4025
+ (e) => {
4026
+ onKeyDown == null ? void 0 : onKeyDown(e);
4027
+ if (e.defaultPrevented) return;
4028
+ switch (e.code) {
4029
+ case KEY_MAPPING.selectItem: {
4030
+ const activeItem = getActiveItem(internalRef.current);
4031
+ if (activeItem) activeItem.dispatchEvent(new Event("menu-select"));
4032
+ break;
4033
+ }
4034
+ case KEY_MAPPING.next: {
4035
+ let nextItem;
4036
+ if (e.shiftKey) {
4037
+ const nextGroup = getNextGroup("next");
4038
+ if (!nextGroup) return;
4039
+ nextItem = getFirstItem(nextGroup);
4040
+ } else {
4041
+ nextItem = getNextItem(internalRef.current, "next");
4042
+ }
4043
+ if (!nextItem) return;
4044
+ setActiveItemId(nextItem.getAttribute(ITEM_SELECTOR));
4045
+ break;
4046
+ }
4047
+ case KEY_MAPPING.prev: {
4048
+ let prevItem;
4049
+ if (e.shiftKey) {
4050
+ const prevGroup = getNextGroup("prev");
4051
+ if (!prevGroup) return;
4052
+ prevItem = getFirstItem(prevGroup);
4053
+ } else {
4054
+ prevItem = getNextItem(internalRef.current, "prev");
4055
+ }
4056
+ if (!prevItem) return;
4057
+ setActiveItemId(prevItem.getAttribute(ITEM_SELECTOR));
4058
+ break;
4059
+ }
4060
+ case KEY_MAPPING.first: {
4061
+ let firstItem;
4062
+ if (e.shiftKey) {
4063
+ const firstGroup = getFirstGroup();
4064
+ if (!firstGroup) return;
4065
+ firstItem = getFirstItem(firstGroup);
4066
+ } else {
4067
+ firstItem = getFirstItem(internalRef.current);
4068
+ }
4069
+ if (!firstItem) return;
4070
+ setActiveItemId(firstItem.getAttribute(ITEM_SELECTOR));
4071
+ break;
4072
+ }
4073
+ case KEY_MAPPING.last: {
4074
+ let lastItem;
4075
+ if (e.shiftKey) {
4076
+ const lastGroup = getLastGroup();
4077
+ if (!lastGroup) return;
4078
+ lastItem = getFirstItem(lastGroup);
4079
+ } else {
4080
+ lastItem = getLastItem(internalRef.current);
4081
+ }
4082
+ if (!lastItem) return;
4083
+ setActiveItemId(lastItem.getAttribute(ITEM_SELECTOR));
4084
+ break;
4085
+ }
4086
+ }
4087
+ },
4088
+ [getActiveItem, getFirstGroup, getFirstItem, getLastGroup, getLastItem, getNextGroup, getNextItem, onKeyDown]
4089
+ );
4090
+ useEffect(() => {
4091
+ var _a;
4092
+ const firstItem = getFirstItem(internalRef.current);
4093
+ if (!firstItem) return;
4094
+ (_a = internalRef.current) == null ? void 0 : _a.focus();
4095
+ setActiveItemId(firstItem.getAttribute(ITEM_SELECTOR));
4096
+ }, [getFirstItem]);
4097
+ const contextValue = useMemo(
4098
+ () => ({
4099
+ activeItemId,
4100
+ setActiveItemId,
4101
+ // style props
4102
+ accentColor,
4103
+ radius,
4104
+ variant,
4105
+ size: size2
4106
+ }),
4107
+ [accentColor, activeItemId, radius, size2, variant]
4108
+ );
4109
+ return /* @__PURE__ */ jsx(
4110
+ "div",
4111
+ {
4112
+ ref: mergeRefs([ref, internalRef]),
4113
+ className: cx(menuRootCva({ size: size2 }), radiusCva({ radius, maxLarge: true }), className),
4114
+ role: "menu",
4115
+ onKeyDown: handleKeyDown,
4116
+ tabIndex: 0,
4117
+ "aria-activedescendant": activeItemId ?? void 0,
4118
+ "data-accent-color": accentColor,
3663
4119
  ...rest,
3664
- children: computedChildren
4120
+ children: /* @__PURE__ */ jsx(MenuRootContext, { value: contextValue, children })
3665
4121
  }
3666
- ) });
4122
+ );
3667
4123
  });
3668
- const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
4124
+ MenuV2Root.displayName = "MenuRoot";
4125
+ const MenuV2SelectedIndicator = memo((props) => {
4126
+ const { ref, children, ...rest } = props;
4127
+ return /* @__PURE__ */ jsx(SelectedIndicator, { ref, ...rest, children });
4128
+ });
4129
+ MenuV2SelectedIndicator.displayName = "MenuCheckboxItemIndicator";
4130
+ const MenuV2SelectGroup = genericMemo(function MenuSelectGroup3(props) {
3669
4131
  const { ref, children, required, defaultValue, value, onValueChange, ...rest } = props;
3670
- return /* @__PURE__ */ jsx(MenuGroup, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
4132
+ return /* @__PURE__ */ jsx(MenuV2Group, { ref, ...rest, children: required ? /* @__PURE__ */ jsx(SingleSelectRequiredProvider, { defaultValue, value, onValueChange, children }) : /* @__PURE__ */ jsx(
3671
4133
  SingleSelectNotRequiredProvider,
3672
4134
  {
3673
4135
  defaultValue,
@@ -3677,183 +4139,53 @@ const MenuSelectGroup = genericMemo(function MenuSelectGroup2(props) {
3677
4139
  }
3678
4140
  ) });
3679
4141
  });
3680
- const MenuSelectItem = genericMemo(function(props) {
3681
- const { ref, value, onSelect, children, closeOnSelect = true, ...rest } = props;
4142
+ const MenuV2SelectItem = genericMemo(function(props) {
4143
+ const { ref, value, onSelect, children, ...rest } = props;
3682
4144
  const { selected, selectValue } = use(SelectContext);
3683
- const isSelected = useMemo(() => selected(value), [selected, value]);
3684
- const handleSelect = useCallback(() => {
3685
- onSelect == null ? void 0 : onSelect();
3686
- selectValue(value);
3687
- }, [onSelect, selectValue, value]);
3688
- const computedChildren = useMemo(() => {
3689
- return typeof children === "function" ? ({ active }) => children({ selected: isSelected, active }) : children;
3690
- }, [children, isSelected]);
3691
- return /* @__PURE__ */ jsx(SelectedIndicatorContext.Provider, { value: isSelected, children: /* @__PURE__ */ jsx(
3692
- MenuItem,
4145
+ const isSelected = selected(value);
4146
+ const handleSelect = useCallback(
4147
+ (e) => {
4148
+ onSelect == null ? void 0 : onSelect(e);
4149
+ if (e.defaultPrevented) return;
4150
+ selectValue(value);
4151
+ },
4152
+ [onSelect, selectValue, value]
4153
+ );
4154
+ return /* @__PURE__ */ jsx(
4155
+ MenuV2Item,
3693
4156
  {
3694
4157
  ref,
3695
4158
  role: "menuitemcheckbox",
3696
4159
  onSelect: handleSelect,
3697
- closeOnSelect,
3698
4160
  "data-state": getSelectedState(isSelected),
3699
4161
  ...rest,
3700
- children: computedChildren
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
4162
+ children: /* @__PURE__ */ jsx(SelectedIndicatorContext, { value: isSelected, children })
3799
4163
  }
3800
4164
  );
3801
4165
  });
3802
- MenuSubTrigger.displayName = "MenuSubTrigger";
3803
- const MenuVirtualTrigger = memo((props) => {
3804
- const { virtualElement, disabled } = props;
3805
- const { refs, setTriggerType, setOpen } = useMenuContext();
3806
- useEffect(() => {
3807
- setTriggerType("virtual");
3808
- }, [setTriggerType]);
3809
- useEffect(() => {
3810
- if (!disabled && virtualElement) {
3811
- refs.setPositionReference(virtualElement);
3812
- setOpen(true);
3813
- } else {
3814
- refs.setPositionReference(null);
3815
- setOpen(false);
3816
- }
3817
- }, [disabled, refs, setOpen, virtualElement]);
3818
- return null;
3819
- });
3820
- MenuVirtualTrigger.displayName = "VirtualTrigger";
3821
- const Menu = {
3822
- Root: MenuRoot,
3823
- Content: MenuContent,
3824
- // sub
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
4166
+ const MenuV2Separator = memo((props) => {
4167
+ const { ref, className, ...rest } = props;
4168
+ const { size: size2 } = use(MenuRootContext);
4169
+ return /* @__PURE__ */ jsx(RadixSeparator.Root, { className: cx(menuSeparatorCva({ size: size2 }), className), ref, ...rest });
4170
+ });
4171
+ MenuV2Separator.displayName = "MenuSeparator";
4172
+ const MenuV2 = {
4173
+ Root: MenuV2Root,
4174
+ Group: MenuV2Group,
4175
+ GroupLabel: MenuV2GroupLabel,
4176
+ Item: MenuV2Item,
4177
+ Separator: MenuV2Separator,
4178
+ SelectGroup: MenuV2SelectGroup,
4179
+ SelectItem: MenuV2SelectItem,
4180
+ MultiSelectGroup: MenuV2MultiSelectGroup,
4181
+ MultiSelectItem: MenuV2MultiSelectItem,
4182
+ SelectAllItem: MenuV2SelectAllItem,
4183
+ SelectedIndicator: MenuV2SelectedIndicator,
4184
+ CheckboxItem: MenuV2CheckboxItem,
4185
+ CheckedIndicator: MenuV2CheckedIndicator,
4186
+ Pages: MenuV2Pages,
4187
+ Page: MenuV2Page,
4188
+ PageTriggerItem: MenuV2PageTriggerItem
3857
4189
  };
3858
4190
  const OneTimePasswordFieldHiddenInput = memo((props) => {
3859
4191
  return /* @__PURE__ */ jsx(RadixOneTimePasswordField.HiddenInput, { ...props });
@@ -4050,6 +4382,95 @@ const OvermapErrorBoundary = memo((props) => {
4050
4382
  );
4051
4383
  });
4052
4384
  OvermapErrorBoundary.displayName = "OvermapErrorBoundary";
4385
+ const PhoneNumberInputContext = createContext({});
4386
+ const FlagComponent = memo((props) => {
4387
+ const { country } = props;
4388
+ return country ? country : /* @__PURE__ */ jsx(PhoneIcon, { size: 16 });
4389
+ });
4390
+ FlagComponent.displayName = "FlagComponent";
4391
+ const CountrySelect = memo((props) => {
4392
+ const { disabled, value, onChange, options } = props;
4393
+ const { radius, size: size2, variant, accentColor } = use(PhoneNumberInputContext);
4394
+ const handleSelect = useCallback(
4395
+ (e) => {
4396
+ onChange(e.target.value);
4397
+ },
4398
+ [onChange]
4399
+ );
4400
+ return /* @__PURE__ */ jsxs(
4401
+ Button,
4402
+ {
4403
+ className: "relative",
4404
+ accentColor,
4405
+ radius,
4406
+ size: size2,
4407
+ variant,
4408
+ disabled,
4409
+ children: [
4410
+ /* @__PURE__ */ jsx(FlagComponent, { country: value, countryName: value, "aria-hidden": "true" }),
4411
+ /* @__PURE__ */ jsx(ChevronDownIcon, { size: 16, "aria-hidden": "true" }),
4412
+ /* @__PURE__ */ jsxs(
4413
+ "select",
4414
+ {
4415
+ disabled,
4416
+ value,
4417
+ onChange: handleSelect,
4418
+ className: "absolute inset-0 text-sm opacity-0",
4419
+ "aria-label": "Select country",
4420
+ children: [
4421
+ /* @__PURE__ */ jsx("option", { value: "", children: "Select a country" }, "default"),
4422
+ options.filter((x) => x.value).map((option, i) => /* @__PURE__ */ jsxs("option", { value: option.value, children: [
4423
+ option.label,
4424
+ " ",
4425
+ option.value && `+${getCountryCallingCode(option.value)}`
4426
+ ] }, option.value ?? `empty-${i}`))
4427
+ ]
4428
+ }
4429
+ )
4430
+ ]
4431
+ }
4432
+ );
4433
+ });
4434
+ CountrySelect.displayName = "CountrySelect";
4435
+ const InputComponent = memo((props) => {
4436
+ const { accentColor, radius, size: size2, variant } = use(PhoneNumberInputContext);
4437
+ return /* @__PURE__ */ jsx(Input.Root, { variant, size: size2, radius, accentColor, children: /* @__PURE__ */ jsx(Input.Field, { ...props }) });
4438
+ });
4439
+ InputComponent.displayName = "InputComponent";
4440
+ const PhoneNumberInput = memo((props) => {
4441
+ const providerContext = useProvider();
4442
+ const {
4443
+ ref,
4444
+ className,
4445
+ size: size2 = "md",
4446
+ variant = "outline",
4447
+ radius = providerContext.radius,
4448
+ accentColor = providerContext.accentColor,
4449
+ ...rest
4450
+ } = props;
4451
+ const contextValue = useMemo(
4452
+ () => ({
4453
+ size: size2,
4454
+ variant,
4455
+ radius,
4456
+ accentColor
4457
+ }),
4458
+ [accentColor, radius, size2, variant]
4459
+ );
4460
+ return /* @__PURE__ */ jsx(PhoneNumberInputContext, { value: contextValue, children: /* @__PURE__ */ jsx(
4461
+ PhoneInput,
4462
+ {
4463
+ ref,
4464
+ className: cx(className, "flex gap-1"),
4465
+ flagComponent: FlagComponent,
4466
+ countrySelectComponent: CountrySelect,
4467
+ inputComponent: InputComponent,
4468
+ "data-accent-color": accentColor,
4469
+ ...rest
4470
+ }
4471
+ ) });
4472
+ });
4473
+ PhoneNumberInput.displayName = "PhoneNumberInput";
4053
4474
  const PopoverArrow = memo((props) => {
4054
4475
  const { ref, children, className, ...rest } = props;
4055
4476
  return /* @__PURE__ */ jsx(RadixPopover.Arrow, { className: cx("fill-(--base-6)", className), ref, ...rest, children });
@@ -4373,6 +4794,65 @@ const RadioGroup = {
4373
4794
  Item: RadioGroupItem,
4374
4795
  Root: RadioGroupRoot
4375
4796
  };
4797
+ const RatingRootContext = createContext({});
4798
+ const RatingItemContext = createContext({});
4799
+ const RatingItem = memo((props) => {
4800
+ const { ref, children, value, ...rest } = props;
4801
+ const { value: activeValue } = use(RatingRootContext);
4802
+ const active = !!activeValue && value <= activeValue;
4803
+ const contextValue = useMemo(() => ({ value }), [value]);
4804
+ return /* @__PURE__ */ jsx(RadixRadioGroup.Item, { ref, value: value.toString(), "data-active": active, ...rest, children: /* @__PURE__ */ jsx(RatingItemContext, { value: contextValue, children }) });
4805
+ });
4806
+ RatingItem.displayName = "RatingItem";
4807
+ const RatingItemIndicator = memo((props) => {
4808
+ const { ref, children, forceMount, ...rest } = props;
4809
+ const { value: activeValue } = use(RatingRootContext);
4810
+ const { value } = use(RatingItemContext);
4811
+ const active = !!activeValue && value <= activeValue;
4812
+ return /* @__PURE__ */ jsx(
4813
+ RadixRadioGroup.Indicator,
4814
+ {
4815
+ ref,
4816
+ forceMount: forceMount ?? (active || void 0),
4817
+ "data-active": active,
4818
+ ...rest,
4819
+ children
4820
+ }
4821
+ );
4822
+ });
4823
+ RatingItemIndicator.displayName = "RatingItemIndicator";
4824
+ const RatingRoot = memo((props) => {
4825
+ const { ref, children, defaultValue, value: controlledValue, onValueChange, ...rest } = props;
4826
+ const [value, setValue] = useControlledState(defaultValue ?? null, controlledValue, onValueChange);
4827
+ const handleValueChange = useCallback(
4828
+ (value2) => {
4829
+ setValue(parseInt(value2));
4830
+ },
4831
+ [setValue]
4832
+ );
4833
+ const contextValue = useMemo(
4834
+ () => ({
4835
+ value
4836
+ }),
4837
+ [value]
4838
+ );
4839
+ return /* @__PURE__ */ jsx(
4840
+ RadixRadioGroup.Root,
4841
+ {
4842
+ ref,
4843
+ value: value ? value.toString() : null,
4844
+ onValueChange: handleValueChange,
4845
+ ...rest,
4846
+ children: /* @__PURE__ */ jsx(RatingRootContext, { value: contextValue, children })
4847
+ }
4848
+ );
4849
+ });
4850
+ RatingRoot.displayName = "RatingRoot";
4851
+ const Rating = {
4852
+ Item: RatingItem,
4853
+ ItemIndicator: RatingItemIndicator,
4854
+ Root: RatingRoot
4855
+ };
4376
4856
  const segmentedControlRootCva = cva(
4377
4857
  ["shrink-0", "transition-colors", "inline-flex", "box-border", "min-w-max", "text-center"],
4378
4858
  {
@@ -6150,7 +6630,6 @@ export {
6150
6630
  CheckboxGroupSelectAllItem,
6151
6631
  CheckboxIndicator,
6152
6632
  CheckboxRoot,
6153
- CollapsibleTree,
6154
6633
  CommandMenu,
6155
6634
  CommandMenuCheckboxIndicator,
6156
6635
  CommandMenuCheckboxItem,
@@ -6225,6 +6704,23 @@ export {
6225
6704
  MenuSub,
6226
6705
  MenuSubContent,
6227
6706
  MenuSubTrigger,
6707
+ MenuV2,
6708
+ MenuV2CheckboxItem,
6709
+ MenuV2CheckedIndicator,
6710
+ MenuV2Group,
6711
+ MenuV2GroupLabel,
6712
+ MenuV2Item,
6713
+ MenuV2MultiSelectGroup,
6714
+ MenuV2MultiSelectItem,
6715
+ MenuV2Page,
6716
+ MenuV2PageTriggerItem,
6717
+ MenuV2Pages,
6718
+ MenuV2Root,
6719
+ MenuV2SelectAllItem,
6720
+ MenuV2SelectGroup,
6721
+ MenuV2SelectItem,
6722
+ MenuV2SelectedIndicator,
6723
+ MenuV2Separator,
6228
6724
  MenuVirtualTrigger,
6229
6725
  OneTimePasswordField,
6230
6726
  OneTimePasswordFieldHiddenInput,
@@ -6238,6 +6734,7 @@ export {
6238
6734
  OverlayTitle,
6239
6735
  OverlayTrigger,
6240
6736
  OvermapErrorBoundary,
6737
+ PhoneNumberInput,
6241
6738
  Popover,
6242
6739
  PopoverArrow,
6243
6740
  PopoverContent,
@@ -6250,6 +6747,10 @@ export {
6250
6747
  RadioGroupIndicator,
6251
6748
  RadioGroupItem,
6252
6749
  RadioGroupRoot,
6750
+ Rating,
6751
+ RatingItem,
6752
+ RatingItemIndicator,
6753
+ RatingRoot,
6253
6754
  SegmentedControl,
6254
6755
  SegmentedControlItem,
6255
6756
  SegmentedControlRoot,
@@ -6257,7 +6758,6 @@ export {
6257
6758
  SegmentedTabsList,
6258
6759
  SegmentedTabsRoot,
6259
6760
  SegmentedTabsTrigger,
6260
- SelectedIndicatorContext,
6261
6761
  Separator,
6262
6762
  SlideOut,
6263
6763
  Slider,
@@ -6294,6 +6794,12 @@ export {
6294
6794
  badge,
6295
6795
  buttonCva,
6296
6796
  floating,
6797
+ genericMemo,
6798
+ getActiveState,
6799
+ getBooleanState,
6800
+ getCheckedState,
6801
+ getOpenState,
6802
+ getSelectedState,
6297
6803
  mergeRefs,
6298
6804
  radiusCva,
6299
6805
  stopPropagation,
@@ -6301,15 +6807,9 @@ export {
6301
6807
  useAlertDialog,
6302
6808
  useButtonGroup,
6303
6809
  useControlledState,
6810
+ useFallbackId,
6304
6811
  useLayoutContext,
6305
- useMenuContentContext,
6306
- useMenuContext,
6307
- usePagesContext,
6308
6812
  useProvider,
6309
- useSelectedIndicatorContext,
6310
- useSize,
6311
- useStopEventPropagation,
6312
- useSubContext,
6313
6813
  useTextFilter,
6314
6814
  useToast,
6315
6815
  useViewportSize