@xsolla/xui-context-menu 0.132.0 → 0.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -8
- package/web/index.js +171 -62
- package/web/index.js.map +1 -1
- package/web/index.mjs +119 -10
- package/web/index.mjs.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsolla/xui-context-menu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.133.0",
|
|
4
4
|
"main": "./web/index.js",
|
|
5
5
|
"module": "./web/index.mjs",
|
|
6
6
|
"types": "./web/index.d.ts",
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
"test:coverage": "vitest run --coverage"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@xsolla/xui-checkbox": "0.
|
|
17
|
-
"@xsolla/xui-core": "0.
|
|
18
|
-
"@xsolla/xui-divider": "0.
|
|
19
|
-
"@xsolla/xui-icons": "0.
|
|
20
|
-
"@xsolla/xui-primitives-core": "0.
|
|
21
|
-
"@xsolla/xui-radio": "0.
|
|
22
|
-
"@xsolla/xui-spinner": "0.
|
|
16
|
+
"@xsolla/xui-checkbox": "0.133.0",
|
|
17
|
+
"@xsolla/xui-core": "0.133.0",
|
|
18
|
+
"@xsolla/xui-divider": "0.133.0",
|
|
19
|
+
"@xsolla/xui-icons": "0.133.0",
|
|
20
|
+
"@xsolla/xui-primitives-core": "0.133.0",
|
|
21
|
+
"@xsolla/xui-radio": "0.133.0",
|
|
22
|
+
"@xsolla/xui-spinner": "0.133.0"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"react": ">=16.8.0",
|
package/web/index.js
CHANGED
|
@@ -47,13 +47,120 @@ __export(index_exports, {
|
|
|
47
47
|
module.exports = __toCommonJS(index_exports);
|
|
48
48
|
|
|
49
49
|
// src/ContextMenu.tsx
|
|
50
|
-
var
|
|
50
|
+
var import_react11 = __toESM(require("react"));
|
|
51
51
|
|
|
52
52
|
// ../primitives-web/src/Box.tsx
|
|
53
|
-
var
|
|
53
|
+
var import_react2 = __toESM(require("react"));
|
|
54
54
|
var import_styled_components = __toESM(require("styled-components"));
|
|
55
|
+
|
|
56
|
+
// ../primitives-web/src/filterDOMProps.ts
|
|
57
|
+
var import_react = __toESM(require("react"));
|
|
58
|
+
var NON_HTML_PROPS = /* @__PURE__ */ new Set([
|
|
59
|
+
// BoxProps — layout & styling
|
|
60
|
+
"backgroundColor",
|
|
61
|
+
"borderColor",
|
|
62
|
+
"borderWidth",
|
|
63
|
+
"borderBottomWidth",
|
|
64
|
+
"borderBottomColor",
|
|
65
|
+
"borderTopWidth",
|
|
66
|
+
"borderTopColor",
|
|
67
|
+
"borderLeftWidth",
|
|
68
|
+
"borderLeftColor",
|
|
69
|
+
"borderRightWidth",
|
|
70
|
+
"borderRightColor",
|
|
71
|
+
"borderRadius",
|
|
72
|
+
"borderStyle",
|
|
73
|
+
"flexDirection",
|
|
74
|
+
"flexWrap",
|
|
75
|
+
"alignItems",
|
|
76
|
+
"justifyContent",
|
|
77
|
+
"alignSelf",
|
|
78
|
+
"flex",
|
|
79
|
+
"flexShrink",
|
|
80
|
+
"gap",
|
|
81
|
+
"position",
|
|
82
|
+
"top",
|
|
83
|
+
"bottom",
|
|
84
|
+
"left",
|
|
85
|
+
"right",
|
|
86
|
+
"outline",
|
|
87
|
+
"overflow",
|
|
88
|
+
"overflowX",
|
|
89
|
+
"overflowY",
|
|
90
|
+
"zIndex",
|
|
91
|
+
"cursor",
|
|
92
|
+
"padding",
|
|
93
|
+
"paddingHorizontal",
|
|
94
|
+
"paddingVertical",
|
|
95
|
+
"paddingTop",
|
|
96
|
+
"paddingBottom",
|
|
97
|
+
"paddingLeft",
|
|
98
|
+
"paddingRight",
|
|
99
|
+
"margin",
|
|
100
|
+
"marginTop",
|
|
101
|
+
"marginBottom",
|
|
102
|
+
"marginLeft",
|
|
103
|
+
"marginRight",
|
|
104
|
+
"minWidth",
|
|
105
|
+
"minHeight",
|
|
106
|
+
"maxWidth",
|
|
107
|
+
"maxHeight",
|
|
108
|
+
"hoverStyle",
|
|
109
|
+
"pressStyle",
|
|
110
|
+
"focusStyle",
|
|
111
|
+
"outlineColor",
|
|
112
|
+
"outlineWidth",
|
|
113
|
+
"outlineOffset",
|
|
114
|
+
"outlineStyle",
|
|
115
|
+
// BoxProps — RN-only
|
|
116
|
+
"onPress",
|
|
117
|
+
"onLayout",
|
|
118
|
+
"onMoveShouldSetResponder",
|
|
119
|
+
"onResponderGrant",
|
|
120
|
+
"onResponderMove",
|
|
121
|
+
"onResponderRelease",
|
|
122
|
+
"onResponderTerminate",
|
|
123
|
+
"testID",
|
|
124
|
+
// Box — custom element type
|
|
125
|
+
"elementType",
|
|
126
|
+
// TextProps
|
|
127
|
+
"fontSize",
|
|
128
|
+
"fontWeight",
|
|
129
|
+
"fontFamily",
|
|
130
|
+
"lineHeight",
|
|
131
|
+
"whiteSpace",
|
|
132
|
+
"textAlign",
|
|
133
|
+
"textDecoration",
|
|
134
|
+
"numberOfLines",
|
|
135
|
+
"letterSpacing",
|
|
136
|
+
"textTransform",
|
|
137
|
+
// SpinnerProps
|
|
138
|
+
"strokeWidth",
|
|
139
|
+
// DividerProps
|
|
140
|
+
"vertical",
|
|
141
|
+
"dashStroke"
|
|
142
|
+
]);
|
|
143
|
+
function createFilteredElement(defaultTag) {
|
|
144
|
+
const Component = import_react.default.forwardRef(
|
|
145
|
+
({ children, elementType, ...props }, ref) => {
|
|
146
|
+
const Tag = elementType || defaultTag;
|
|
147
|
+
const htmlProps = {};
|
|
148
|
+
for (const key of Object.keys(props)) {
|
|
149
|
+
if (!NON_HTML_PROPS.has(key)) {
|
|
150
|
+
htmlProps[key] = props[key];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return import_react.default.createElement(Tag, { ref, ...htmlProps }, children);
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
Component.displayName = `Filtered(${defaultTag})`;
|
|
157
|
+
return Component;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// ../primitives-web/src/Box.tsx
|
|
55
161
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
56
|
-
var
|
|
162
|
+
var FilteredDiv = createFilteredElement("div");
|
|
163
|
+
var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
|
|
57
164
|
display: flex;
|
|
58
165
|
box-sizing: border-box;
|
|
59
166
|
background-color: ${(props) => props.backgroundColor || "transparent"};
|
|
@@ -140,7 +247,7 @@ var StyledBox = import_styled_components.default.div`
|
|
|
140
247
|
${(props) => props.pressStyle?.backgroundColor && `background-color: ${props.pressStyle.backgroundColor};`}
|
|
141
248
|
}
|
|
142
249
|
`;
|
|
143
|
-
var Box =
|
|
250
|
+
var Box = import_react2.default.forwardRef(
|
|
144
251
|
({
|
|
145
252
|
children,
|
|
146
253
|
onPress,
|
|
@@ -192,7 +299,7 @@ var Box = import_react.default.forwardRef(
|
|
|
192
299
|
StyledBox,
|
|
193
300
|
{
|
|
194
301
|
ref,
|
|
195
|
-
as,
|
|
302
|
+
elementType: as,
|
|
196
303
|
id,
|
|
197
304
|
type: as === "button" ? type || "button" : void 0,
|
|
198
305
|
disabled: as === "button" ? disabled : void 0,
|
|
@@ -223,7 +330,8 @@ Box.displayName = "Box";
|
|
|
223
330
|
// ../primitives-web/src/Text.tsx
|
|
224
331
|
var import_styled_components2 = __toESM(require("styled-components"));
|
|
225
332
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
226
|
-
var
|
|
333
|
+
var FilteredSpan = createFilteredElement("span");
|
|
334
|
+
var StyledText = (0, import_styled_components2.default)(FilteredSpan)`
|
|
227
335
|
color: ${(props) => props.color || "inherit"};
|
|
228
336
|
font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
|
|
229
337
|
font-weight: ${(props) => props.fontWeight || "normal"};
|
|
@@ -256,7 +364,8 @@ var Text = ({
|
|
|
256
364
|
// ../primitives-web/src/Icon.tsx
|
|
257
365
|
var import_styled_components3 = __toESM(require("styled-components"));
|
|
258
366
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
259
|
-
var
|
|
367
|
+
var FilteredDiv2 = createFilteredElement("div");
|
|
368
|
+
var StyledIcon = (0, import_styled_components3.default)(FilteredDiv2)`
|
|
260
369
|
display: flex;
|
|
261
370
|
align-items: center;
|
|
262
371
|
justify-content: center;
|
|
@@ -276,7 +385,7 @@ var Icon = ({ children, ...props }) => {
|
|
|
276
385
|
};
|
|
277
386
|
|
|
278
387
|
// ../primitives-web/src/Input.tsx
|
|
279
|
-
var
|
|
388
|
+
var import_react3 = require("react");
|
|
280
389
|
var import_styled_components4 = __toESM(require("styled-components"));
|
|
281
390
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
282
391
|
var StyledInput = import_styled_components4.default.input`
|
|
@@ -310,7 +419,7 @@ var StyledInput = import_styled_components4.default.input`
|
|
|
310
419
|
-webkit-text-fill-color: ${(props) => props.color || "inherit"} !important;
|
|
311
420
|
}
|
|
312
421
|
`;
|
|
313
|
-
var InputPrimitive = (0,
|
|
422
|
+
var InputPrimitive = (0, import_react3.forwardRef)(
|
|
314
423
|
({
|
|
315
424
|
value,
|
|
316
425
|
placeholder,
|
|
@@ -387,14 +496,14 @@ var import_xui_core7 = require("@xsolla/xui-core");
|
|
|
387
496
|
var import_xui_spinner = require("@xsolla/xui-spinner");
|
|
388
497
|
|
|
389
498
|
// src/ContextMenuContext.tsx
|
|
390
|
-
var
|
|
391
|
-
var ContextMenuContext = (0,
|
|
499
|
+
var import_react4 = require("react");
|
|
500
|
+
var ContextMenuContext = (0, import_react4.createContext)(void 0);
|
|
392
501
|
var useContextMenu = () => {
|
|
393
|
-
const context = (0,
|
|
502
|
+
const context = (0, import_react4.useContext)(ContextMenuContext);
|
|
394
503
|
return context;
|
|
395
504
|
};
|
|
396
505
|
var useContextMenuRequired = () => {
|
|
397
|
-
const context = (0,
|
|
506
|
+
const context = (0, import_react4.useContext)(ContextMenuContext);
|
|
398
507
|
if (!context) {
|
|
399
508
|
throw new Error(
|
|
400
509
|
"useContextMenuRequired must be used within a ContextMenu component"
|
|
@@ -404,11 +513,11 @@ var useContextMenuRequired = () => {
|
|
|
404
513
|
};
|
|
405
514
|
|
|
406
515
|
// src/ContextMenuItem.tsx
|
|
407
|
-
var
|
|
516
|
+
var import_react5 = require("react");
|
|
408
517
|
var import_xui_core = require("@xsolla/xui-core");
|
|
409
518
|
var import_xui_icons = require("@xsolla/xui-icons");
|
|
410
519
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
411
|
-
var ContextMenuItem = (0,
|
|
520
|
+
var ContextMenuItem = (0, import_react5.forwardRef)(
|
|
412
521
|
({
|
|
413
522
|
children,
|
|
414
523
|
description,
|
|
@@ -429,10 +538,10 @@ var ContextMenuItem = (0, import_react4.forwardRef)(
|
|
|
429
538
|
const context = useContextMenu();
|
|
430
539
|
const size = propSize || context?.size || "md";
|
|
431
540
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
432
|
-
const itemRef = (0,
|
|
541
|
+
const itemRef = (0, import_react5.useRef)(null);
|
|
433
542
|
const brandColors = theme.colors.control.brand.primary;
|
|
434
543
|
const contentColors = theme.colors.content;
|
|
435
|
-
(0,
|
|
544
|
+
(0, import_react5.useEffect)(() => {
|
|
436
545
|
if (context && !disabled) {
|
|
437
546
|
const id = typeof children === "string" ? children : String(Math.random());
|
|
438
547
|
context.registerItem(id);
|
|
@@ -570,7 +679,7 @@ var ContextMenuItem = (0, import_react4.forwardRef)(
|
|
|
570
679
|
ContextMenuItem.displayName = "ContextMenuItem";
|
|
571
680
|
|
|
572
681
|
// src/ContextMenuCheckboxItem.tsx
|
|
573
|
-
var
|
|
682
|
+
var import_react6 = require("react");
|
|
574
683
|
var import_xui_core2 = require("@xsolla/xui-core");
|
|
575
684
|
var import_xui_icons2 = require("@xsolla/xui-icons");
|
|
576
685
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
@@ -645,7 +754,7 @@ var CheckboxIndicator = ({
|
|
|
645
754
|
}
|
|
646
755
|
);
|
|
647
756
|
};
|
|
648
|
-
var ContextMenuCheckboxItem = (0,
|
|
757
|
+
var ContextMenuCheckboxItem = (0, import_react6.forwardRef)(
|
|
649
758
|
({
|
|
650
759
|
children,
|
|
651
760
|
description,
|
|
@@ -665,8 +774,8 @@ var ContextMenuCheckboxItem = (0, import_react5.forwardRef)(
|
|
|
665
774
|
const context = useContextMenu();
|
|
666
775
|
const size = propSize || context?.size || "md";
|
|
667
776
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
668
|
-
const itemRef = (0,
|
|
669
|
-
(0,
|
|
777
|
+
const itemRef = (0, import_react6.useRef)(null);
|
|
778
|
+
(0, import_react6.useEffect)(() => {
|
|
670
779
|
if (context && !disabled) {
|
|
671
780
|
const id = typeof children === "string" ? children : String(Math.random());
|
|
672
781
|
context.registerItem(id);
|
|
@@ -779,11 +888,11 @@ var ContextMenuCheckboxItem = (0, import_react5.forwardRef)(
|
|
|
779
888
|
ContextMenuCheckboxItem.displayName = "ContextMenuCheckboxItem";
|
|
780
889
|
|
|
781
890
|
// src/ContextMenuRadioGroup.tsx
|
|
782
|
-
var
|
|
891
|
+
var import_react7 = require("react");
|
|
783
892
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
784
|
-
var RadioGroupContext = (0,
|
|
785
|
-
var useRadioGroup = () => (0,
|
|
786
|
-
var ContextMenuRadioGroup = (0,
|
|
893
|
+
var RadioGroupContext = (0, import_react7.createContext)(null);
|
|
894
|
+
var useRadioGroup = () => (0, import_react7.useContext)(RadioGroupContext);
|
|
895
|
+
var ContextMenuRadioGroup = (0, import_react7.forwardRef)(
|
|
787
896
|
({
|
|
788
897
|
children,
|
|
789
898
|
value,
|
|
@@ -796,7 +905,7 @@ var ContextMenuRadioGroup = (0, import_react6.forwardRef)(
|
|
|
796
905
|
ContextMenuRadioGroup.displayName = "ContextMenuRadioGroup";
|
|
797
906
|
|
|
798
907
|
// src/ContextMenuRadioItem.tsx
|
|
799
|
-
var
|
|
908
|
+
var import_react8 = require("react");
|
|
800
909
|
var import_xui_core3 = require("@xsolla/xui-core");
|
|
801
910
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
802
911
|
var radioSizeMap = {
|
|
@@ -862,7 +971,7 @@ var RadioIndicator = ({
|
|
|
862
971
|
}
|
|
863
972
|
);
|
|
864
973
|
};
|
|
865
|
-
var ContextMenuRadioItem = (0,
|
|
974
|
+
var ContextMenuRadioItem = (0, import_react8.forwardRef)(
|
|
866
975
|
({
|
|
867
976
|
children,
|
|
868
977
|
description,
|
|
@@ -879,9 +988,9 @@ var ContextMenuRadioItem = (0, import_react7.forwardRef)(
|
|
|
879
988
|
const radioGroup = useRadioGroup();
|
|
880
989
|
const size = propSize || context?.size || "md";
|
|
881
990
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
882
|
-
const itemRef = (0,
|
|
991
|
+
const itemRef = (0, import_react8.useRef)(null);
|
|
883
992
|
const checked = radioGroup?.value === value;
|
|
884
|
-
(0,
|
|
993
|
+
(0, import_react8.useEffect)(() => {
|
|
885
994
|
if (context && !disabled) {
|
|
886
995
|
const id = typeof children === "string" ? children : String(Math.random());
|
|
887
996
|
context.registerItem(id);
|
|
@@ -990,10 +1099,10 @@ var ContextMenuRadioItem = (0, import_react7.forwardRef)(
|
|
|
990
1099
|
ContextMenuRadioItem.displayName = "ContextMenuRadioItem";
|
|
991
1100
|
|
|
992
1101
|
// src/ContextMenuGroup.tsx
|
|
993
|
-
var
|
|
1102
|
+
var import_react9 = require("react");
|
|
994
1103
|
var import_xui_core4 = require("@xsolla/xui-core");
|
|
995
1104
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
996
|
-
var ContextMenuGroup = (0,
|
|
1105
|
+
var ContextMenuGroup = (0, import_react9.forwardRef)(
|
|
997
1106
|
({
|
|
998
1107
|
label,
|
|
999
1108
|
description,
|
|
@@ -1070,7 +1179,7 @@ var ContextMenuSeparator = ({
|
|
|
1070
1179
|
ContextMenuSeparator.displayName = "ContextMenuSeparator";
|
|
1071
1180
|
|
|
1072
1181
|
// src/ContextMenuSearch.tsx
|
|
1073
|
-
var
|
|
1182
|
+
var import_react10 = __toESM(require("react"));
|
|
1074
1183
|
var import_xui_core6 = require("@xsolla/xui-core");
|
|
1075
1184
|
|
|
1076
1185
|
// ../icons-base/dist/web/index.mjs
|
|
@@ -1511,7 +1620,7 @@ var Search = (props) => /* @__PURE__ */ (0, import_jsx_runtime384.jsx)(BaseIcon,
|
|
|
1511
1620
|
// src/ContextMenuSearch.tsx
|
|
1512
1621
|
var import_xui_divider = require("@xsolla/xui-divider");
|
|
1513
1622
|
var import_jsx_runtime398 = require("react/jsx-runtime");
|
|
1514
|
-
var ContextMenuSearch = (0,
|
|
1623
|
+
var ContextMenuSearch = (0, import_react10.forwardRef)(
|
|
1515
1624
|
({
|
|
1516
1625
|
value,
|
|
1517
1626
|
onChange,
|
|
@@ -1527,14 +1636,14 @@ var ContextMenuSearch = (0, import_react9.forwardRef)(
|
|
|
1527
1636
|
const context = useContextMenu();
|
|
1528
1637
|
const size = propSize || context?.size || "md";
|
|
1529
1638
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
1530
|
-
const inputRef = (0,
|
|
1639
|
+
const inputRef = (0, import_react10.useRef)(null);
|
|
1531
1640
|
const inputColors = theme.colors.control.input;
|
|
1532
|
-
|
|
1641
|
+
import_react10.default.useImperativeHandle(
|
|
1533
1642
|
ref,
|
|
1534
1643
|
() => inputRef.current,
|
|
1535
1644
|
[]
|
|
1536
1645
|
);
|
|
1537
|
-
(0,
|
|
1646
|
+
(0, import_react10.useEffect)(() => {
|
|
1538
1647
|
if (autoFocus && inputRef.current) {
|
|
1539
1648
|
setTimeout(() => {
|
|
1540
1649
|
inputRef.current?.focus();
|
|
@@ -1598,7 +1707,7 @@ ContextMenuSearch.displayName = "ContextMenuSearch";
|
|
|
1598
1707
|
|
|
1599
1708
|
// src/ContextMenu.tsx
|
|
1600
1709
|
var import_jsx_runtime399 = require("react/jsx-runtime");
|
|
1601
|
-
var ContextMenuRoot = (0,
|
|
1710
|
+
var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
1602
1711
|
({
|
|
1603
1712
|
children,
|
|
1604
1713
|
list,
|
|
@@ -1620,21 +1729,21 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1620
1729
|
themeProductContext
|
|
1621
1730
|
}, ref) => {
|
|
1622
1731
|
const { theme } = (0, import_xui_core7.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1623
|
-
const [internalIsOpen, setInternalIsOpen] = (0,
|
|
1624
|
-
const [activeIndex, setActiveIndex] = (0,
|
|
1625
|
-
const containerRef = (0,
|
|
1626
|
-
const menuRef = (0,
|
|
1627
|
-
const itemsRef = (0,
|
|
1732
|
+
const [internalIsOpen, setInternalIsOpen] = (0, import_react11.useState)(false);
|
|
1733
|
+
const [activeIndex, setActiveIndex] = (0, import_react11.useState)(-1);
|
|
1734
|
+
const containerRef = (0, import_react11.useRef)(null);
|
|
1735
|
+
const menuRef = (0, import_react11.useRef)(null);
|
|
1736
|
+
const itemsRef = (0, import_react11.useRef)([]);
|
|
1628
1737
|
const isOpen = propIsOpen !== void 0 ? propIsOpen : internalIsOpen;
|
|
1629
1738
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
1630
|
-
const closeMenu = (0,
|
|
1739
|
+
const closeMenu = (0, import_react11.useCallback)(() => {
|
|
1631
1740
|
if (propIsOpen === void 0) {
|
|
1632
1741
|
setInternalIsOpen(false);
|
|
1633
1742
|
}
|
|
1634
1743
|
onOpenChange?.(false);
|
|
1635
1744
|
setActiveIndex(-1);
|
|
1636
1745
|
}, [propIsOpen, onOpenChange]);
|
|
1637
|
-
const toggleMenu = (0,
|
|
1746
|
+
const toggleMenu = (0, import_react11.useCallback)(() => {
|
|
1638
1747
|
const nextOpen = !isOpen;
|
|
1639
1748
|
if (propIsOpen === void 0) {
|
|
1640
1749
|
setInternalIsOpen(nextOpen);
|
|
@@ -1644,7 +1753,7 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1644
1753
|
setActiveIndex(-1);
|
|
1645
1754
|
}
|
|
1646
1755
|
}, [isOpen, propIsOpen, onOpenChange]);
|
|
1647
|
-
(0,
|
|
1756
|
+
(0, import_react11.useEffect)(() => {
|
|
1648
1757
|
const handleClickOutside = (event) => {
|
|
1649
1758
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
1650
1759
|
closeMenu();
|
|
@@ -1657,7 +1766,7 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1657
1766
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
1658
1767
|
};
|
|
1659
1768
|
}, [isOpen, closeMenu]);
|
|
1660
|
-
(0,
|
|
1769
|
+
(0, import_react11.useEffect)(() => {
|
|
1661
1770
|
const handleEscape = (event) => {
|
|
1662
1771
|
if (event.key === "Escape") {
|
|
1663
1772
|
closeMenu();
|
|
@@ -1670,17 +1779,17 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1670
1779
|
document.removeEventListener("keydown", handleEscape);
|
|
1671
1780
|
};
|
|
1672
1781
|
}, [isOpen, closeMenu]);
|
|
1673
|
-
(0,
|
|
1782
|
+
(0, import_react11.useEffect)(() => {
|
|
1674
1783
|
if (isOpen && menuRef.current) {
|
|
1675
1784
|
menuRef.current.focus();
|
|
1676
1785
|
}
|
|
1677
1786
|
}, [isOpen]);
|
|
1678
|
-
(0,
|
|
1787
|
+
(0, import_react11.useEffect)(() => {
|
|
1679
1788
|
if (!isOpen) {
|
|
1680
1789
|
itemsRef.current = [];
|
|
1681
1790
|
}
|
|
1682
1791
|
}, [isOpen]);
|
|
1683
|
-
const registerItem = (0,
|
|
1792
|
+
const registerItem = (0, import_react11.useCallback)((id) => {
|
|
1684
1793
|
const index = itemsRef.current.indexOf(id);
|
|
1685
1794
|
if (index === -1) {
|
|
1686
1795
|
itemsRef.current.push(id);
|
|
@@ -1688,13 +1797,13 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1688
1797
|
}
|
|
1689
1798
|
return index;
|
|
1690
1799
|
}, []);
|
|
1691
|
-
const unregisterItem = (0,
|
|
1800
|
+
const unregisterItem = (0, import_react11.useCallback)((id) => {
|
|
1692
1801
|
const index = itemsRef.current.indexOf(id);
|
|
1693
1802
|
if (index !== -1) {
|
|
1694
1803
|
itemsRef.current.splice(index, 1);
|
|
1695
1804
|
}
|
|
1696
1805
|
}, []);
|
|
1697
|
-
const onItemSelect = (0,
|
|
1806
|
+
const onItemSelect = (0, import_react11.useCallback)(
|
|
1698
1807
|
(item) => {
|
|
1699
1808
|
onSelect?.(item);
|
|
1700
1809
|
if (item.variant === "checkbox") {
|
|
@@ -1710,7 +1819,7 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1710
1819
|
},
|
|
1711
1820
|
[onSelect, onCheckedChange, closeOnSelect, closeMenu]
|
|
1712
1821
|
);
|
|
1713
|
-
const handleKeyDown = (0,
|
|
1822
|
+
const handleKeyDown = (0, import_react11.useCallback)(
|
|
1714
1823
|
(event) => {
|
|
1715
1824
|
const itemCount = itemsRef.current.length;
|
|
1716
1825
|
if (itemCount === 0) return;
|
|
@@ -1742,7 +1851,7 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1742
1851
|
},
|
|
1743
1852
|
[closeMenu]
|
|
1744
1853
|
);
|
|
1745
|
-
const contextValue = (0,
|
|
1854
|
+
const contextValue = (0, import_react11.useMemo)(
|
|
1746
1855
|
() => ({
|
|
1747
1856
|
size,
|
|
1748
1857
|
closeMenu,
|
|
@@ -1820,7 +1929,7 @@ var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
|
1820
1929
|
});
|
|
1821
1930
|
};
|
|
1822
1931
|
const renderGroups = (groupsData) => {
|
|
1823
|
-
return groupsData.map((group, groupIndex) => /* @__PURE__ */ (0, import_jsx_runtime399.jsxs)(
|
|
1932
|
+
return groupsData.map((group, groupIndex) => /* @__PURE__ */ (0, import_jsx_runtime399.jsxs)(import_react11.default.Fragment, { children: [
|
|
1824
1933
|
groupIndex > 0 && /* @__PURE__ */ (0, import_jsx_runtime399.jsx)(ContextMenuSeparator, {}),
|
|
1825
1934
|
/* @__PURE__ */ (0, import_jsx_runtime399.jsx)(
|
|
1826
1935
|
ContextMenuGroup,
|
|
@@ -1929,15 +2038,15 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
|
|
|
1929
2038
|
});
|
|
1930
2039
|
|
|
1931
2040
|
// src/hooks/useContextMenuPosition.ts
|
|
1932
|
-
var
|
|
2041
|
+
var import_react12 = require("react");
|
|
1933
2042
|
var useContextMenuPosition = ({
|
|
1934
2043
|
position,
|
|
1935
2044
|
menuRef,
|
|
1936
2045
|
isOpen,
|
|
1937
2046
|
offset = 8
|
|
1938
2047
|
}) => {
|
|
1939
|
-
const [adjustedPosition, setAdjustedPosition] = (0,
|
|
1940
|
-
(0,
|
|
2048
|
+
const [adjustedPosition, setAdjustedPosition] = (0, import_react12.useState)();
|
|
2049
|
+
(0, import_react12.useEffect)(() => {
|
|
1941
2050
|
if (!isOpen || !position || !menuRef.current) {
|
|
1942
2051
|
setAdjustedPosition(void 0);
|
|
1943
2052
|
return;
|
|
@@ -1985,7 +2094,7 @@ var useContextMenuPosition = ({
|
|
|
1985
2094
|
};
|
|
1986
2095
|
|
|
1987
2096
|
// src/hooks/useKeyboardNavigation.ts
|
|
1988
|
-
var
|
|
2097
|
+
var import_react13 = require("react");
|
|
1989
2098
|
var useKeyboardNavigation = ({
|
|
1990
2099
|
isOpen,
|
|
1991
2100
|
itemCount,
|
|
@@ -1995,9 +2104,9 @@ var useKeyboardNavigation = ({
|
|
|
1995
2104
|
onClose,
|
|
1996
2105
|
loop = true
|
|
1997
2106
|
}) => {
|
|
1998
|
-
const typeaheadBuffer = (0,
|
|
1999
|
-
const typeaheadTimeout = (0,
|
|
2000
|
-
(0,
|
|
2107
|
+
const typeaheadBuffer = (0, import_react13.useRef)("");
|
|
2108
|
+
const typeaheadTimeout = (0, import_react13.useRef)(null);
|
|
2109
|
+
(0, import_react13.useEffect)(() => {
|
|
2001
2110
|
if (!isOpen) {
|
|
2002
2111
|
typeaheadBuffer.current = "";
|
|
2003
2112
|
if (typeaheadTimeout.current) {
|
|
@@ -2005,7 +2114,7 @@ var useKeyboardNavigation = ({
|
|
|
2005
2114
|
}
|
|
2006
2115
|
}
|
|
2007
2116
|
}, [isOpen]);
|
|
2008
|
-
const handleKeyDown = (0,
|
|
2117
|
+
const handleKeyDown = (0, import_react13.useCallback)(
|
|
2009
2118
|
(event) => {
|
|
2010
2119
|
if (!isOpen || itemCount === 0) return;
|
|
2011
2120
|
switch (event.key) {
|