@xsolla/xui-context-menu 0.133.0 → 0.134.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 +62 -171
- package/web/index.js.map +1 -1
- package/web/index.mjs +10 -119
- 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.134.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.134.0",
|
|
17
|
+
"@xsolla/xui-core": "0.134.0",
|
|
18
|
+
"@xsolla/xui-divider": "0.134.0",
|
|
19
|
+
"@xsolla/xui-icons": "0.134.0",
|
|
20
|
+
"@xsolla/xui-primitives-core": "0.134.0",
|
|
21
|
+
"@xsolla/xui-radio": "0.134.0",
|
|
22
|
+
"@xsolla/xui-spinner": "0.134.0"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"react": ">=16.8.0",
|
package/web/index.js
CHANGED
|
@@ -47,120 +47,13 @@ __export(index_exports, {
|
|
|
47
47
|
module.exports = __toCommonJS(index_exports);
|
|
48
48
|
|
|
49
49
|
// src/ContextMenu.tsx
|
|
50
|
-
var
|
|
50
|
+
var import_react10 = __toESM(require("react"));
|
|
51
51
|
|
|
52
52
|
// ../primitives-web/src/Box.tsx
|
|
53
|
-
var import_react2 = __toESM(require("react"));
|
|
54
|
-
var import_styled_components = __toESM(require("styled-components"));
|
|
55
|
-
|
|
56
|
-
// ../primitives-web/src/filterDOMProps.ts
|
|
57
53
|
var import_react = __toESM(require("react"));
|
|
58
|
-
var
|
|
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
|
|
54
|
+
var import_styled_components = __toESM(require("styled-components"));
|
|
161
55
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
162
|
-
var
|
|
163
|
-
var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
|
|
56
|
+
var StyledBox = import_styled_components.default.div`
|
|
164
57
|
display: flex;
|
|
165
58
|
box-sizing: border-box;
|
|
166
59
|
background-color: ${(props) => props.backgroundColor || "transparent"};
|
|
@@ -247,7 +140,7 @@ var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
|
|
|
247
140
|
${(props) => props.pressStyle?.backgroundColor && `background-color: ${props.pressStyle.backgroundColor};`}
|
|
248
141
|
}
|
|
249
142
|
`;
|
|
250
|
-
var Box =
|
|
143
|
+
var Box = import_react.default.forwardRef(
|
|
251
144
|
({
|
|
252
145
|
children,
|
|
253
146
|
onPress,
|
|
@@ -299,7 +192,7 @@ var Box = import_react2.default.forwardRef(
|
|
|
299
192
|
StyledBox,
|
|
300
193
|
{
|
|
301
194
|
ref,
|
|
302
|
-
|
|
195
|
+
as,
|
|
303
196
|
id,
|
|
304
197
|
type: as === "button" ? type || "button" : void 0,
|
|
305
198
|
disabled: as === "button" ? disabled : void 0,
|
|
@@ -330,8 +223,7 @@ Box.displayName = "Box";
|
|
|
330
223
|
// ../primitives-web/src/Text.tsx
|
|
331
224
|
var import_styled_components2 = __toESM(require("styled-components"));
|
|
332
225
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
333
|
-
var
|
|
334
|
-
var StyledText = (0, import_styled_components2.default)(FilteredSpan)`
|
|
226
|
+
var StyledText = import_styled_components2.default.span`
|
|
335
227
|
color: ${(props) => props.color || "inherit"};
|
|
336
228
|
font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
|
|
337
229
|
font-weight: ${(props) => props.fontWeight || "normal"};
|
|
@@ -364,8 +256,7 @@ var Text = ({
|
|
|
364
256
|
// ../primitives-web/src/Icon.tsx
|
|
365
257
|
var import_styled_components3 = __toESM(require("styled-components"));
|
|
366
258
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
367
|
-
var
|
|
368
|
-
var StyledIcon = (0, import_styled_components3.default)(FilteredDiv2)`
|
|
259
|
+
var StyledIcon = import_styled_components3.default.div`
|
|
369
260
|
display: flex;
|
|
370
261
|
align-items: center;
|
|
371
262
|
justify-content: center;
|
|
@@ -385,7 +276,7 @@ var Icon = ({ children, ...props }) => {
|
|
|
385
276
|
};
|
|
386
277
|
|
|
387
278
|
// ../primitives-web/src/Input.tsx
|
|
388
|
-
var
|
|
279
|
+
var import_react2 = require("react");
|
|
389
280
|
var import_styled_components4 = __toESM(require("styled-components"));
|
|
390
281
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
391
282
|
var StyledInput = import_styled_components4.default.input`
|
|
@@ -419,7 +310,7 @@ var StyledInput = import_styled_components4.default.input`
|
|
|
419
310
|
-webkit-text-fill-color: ${(props) => props.color || "inherit"} !important;
|
|
420
311
|
}
|
|
421
312
|
`;
|
|
422
|
-
var InputPrimitive = (0,
|
|
313
|
+
var InputPrimitive = (0, import_react2.forwardRef)(
|
|
423
314
|
({
|
|
424
315
|
value,
|
|
425
316
|
placeholder,
|
|
@@ -496,14 +387,14 @@ var import_xui_core7 = require("@xsolla/xui-core");
|
|
|
496
387
|
var import_xui_spinner = require("@xsolla/xui-spinner");
|
|
497
388
|
|
|
498
389
|
// src/ContextMenuContext.tsx
|
|
499
|
-
var
|
|
500
|
-
var ContextMenuContext = (0,
|
|
390
|
+
var import_react3 = require("react");
|
|
391
|
+
var ContextMenuContext = (0, import_react3.createContext)(void 0);
|
|
501
392
|
var useContextMenu = () => {
|
|
502
|
-
const context = (0,
|
|
393
|
+
const context = (0, import_react3.useContext)(ContextMenuContext);
|
|
503
394
|
return context;
|
|
504
395
|
};
|
|
505
396
|
var useContextMenuRequired = () => {
|
|
506
|
-
const context = (0,
|
|
397
|
+
const context = (0, import_react3.useContext)(ContextMenuContext);
|
|
507
398
|
if (!context) {
|
|
508
399
|
throw new Error(
|
|
509
400
|
"useContextMenuRequired must be used within a ContextMenu component"
|
|
@@ -513,11 +404,11 @@ var useContextMenuRequired = () => {
|
|
|
513
404
|
};
|
|
514
405
|
|
|
515
406
|
// src/ContextMenuItem.tsx
|
|
516
|
-
var
|
|
407
|
+
var import_react4 = require("react");
|
|
517
408
|
var import_xui_core = require("@xsolla/xui-core");
|
|
518
409
|
var import_xui_icons = require("@xsolla/xui-icons");
|
|
519
410
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
520
|
-
var ContextMenuItem = (0,
|
|
411
|
+
var ContextMenuItem = (0, import_react4.forwardRef)(
|
|
521
412
|
({
|
|
522
413
|
children,
|
|
523
414
|
description,
|
|
@@ -538,10 +429,10 @@ var ContextMenuItem = (0, import_react5.forwardRef)(
|
|
|
538
429
|
const context = useContextMenu();
|
|
539
430
|
const size = propSize || context?.size || "md";
|
|
540
431
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
541
|
-
const itemRef = (0,
|
|
432
|
+
const itemRef = (0, import_react4.useRef)(null);
|
|
542
433
|
const brandColors = theme.colors.control.brand.primary;
|
|
543
434
|
const contentColors = theme.colors.content;
|
|
544
|
-
(0,
|
|
435
|
+
(0, import_react4.useEffect)(() => {
|
|
545
436
|
if (context && !disabled) {
|
|
546
437
|
const id = typeof children === "string" ? children : String(Math.random());
|
|
547
438
|
context.registerItem(id);
|
|
@@ -679,7 +570,7 @@ var ContextMenuItem = (0, import_react5.forwardRef)(
|
|
|
679
570
|
ContextMenuItem.displayName = "ContextMenuItem";
|
|
680
571
|
|
|
681
572
|
// src/ContextMenuCheckboxItem.tsx
|
|
682
|
-
var
|
|
573
|
+
var import_react5 = require("react");
|
|
683
574
|
var import_xui_core2 = require("@xsolla/xui-core");
|
|
684
575
|
var import_xui_icons2 = require("@xsolla/xui-icons");
|
|
685
576
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
@@ -754,7 +645,7 @@ var CheckboxIndicator = ({
|
|
|
754
645
|
}
|
|
755
646
|
);
|
|
756
647
|
};
|
|
757
|
-
var ContextMenuCheckboxItem = (0,
|
|
648
|
+
var ContextMenuCheckboxItem = (0, import_react5.forwardRef)(
|
|
758
649
|
({
|
|
759
650
|
children,
|
|
760
651
|
description,
|
|
@@ -774,8 +665,8 @@ var ContextMenuCheckboxItem = (0, import_react6.forwardRef)(
|
|
|
774
665
|
const context = useContextMenu();
|
|
775
666
|
const size = propSize || context?.size || "md";
|
|
776
667
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
777
|
-
const itemRef = (0,
|
|
778
|
-
(0,
|
|
668
|
+
const itemRef = (0, import_react5.useRef)(null);
|
|
669
|
+
(0, import_react5.useEffect)(() => {
|
|
779
670
|
if (context && !disabled) {
|
|
780
671
|
const id = typeof children === "string" ? children : String(Math.random());
|
|
781
672
|
context.registerItem(id);
|
|
@@ -888,11 +779,11 @@ var ContextMenuCheckboxItem = (0, import_react6.forwardRef)(
|
|
|
888
779
|
ContextMenuCheckboxItem.displayName = "ContextMenuCheckboxItem";
|
|
889
780
|
|
|
890
781
|
// src/ContextMenuRadioGroup.tsx
|
|
891
|
-
var
|
|
782
|
+
var import_react6 = require("react");
|
|
892
783
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
893
|
-
var RadioGroupContext = (0,
|
|
894
|
-
var useRadioGroup = () => (0,
|
|
895
|
-
var ContextMenuRadioGroup = (0,
|
|
784
|
+
var RadioGroupContext = (0, import_react6.createContext)(null);
|
|
785
|
+
var useRadioGroup = () => (0, import_react6.useContext)(RadioGroupContext);
|
|
786
|
+
var ContextMenuRadioGroup = (0, import_react6.forwardRef)(
|
|
896
787
|
({
|
|
897
788
|
children,
|
|
898
789
|
value,
|
|
@@ -905,7 +796,7 @@ var ContextMenuRadioGroup = (0, import_react7.forwardRef)(
|
|
|
905
796
|
ContextMenuRadioGroup.displayName = "ContextMenuRadioGroup";
|
|
906
797
|
|
|
907
798
|
// src/ContextMenuRadioItem.tsx
|
|
908
|
-
var
|
|
799
|
+
var import_react7 = require("react");
|
|
909
800
|
var import_xui_core3 = require("@xsolla/xui-core");
|
|
910
801
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
911
802
|
var radioSizeMap = {
|
|
@@ -971,7 +862,7 @@ var RadioIndicator = ({
|
|
|
971
862
|
}
|
|
972
863
|
);
|
|
973
864
|
};
|
|
974
|
-
var ContextMenuRadioItem = (0,
|
|
865
|
+
var ContextMenuRadioItem = (0, import_react7.forwardRef)(
|
|
975
866
|
({
|
|
976
867
|
children,
|
|
977
868
|
description,
|
|
@@ -988,9 +879,9 @@ var ContextMenuRadioItem = (0, import_react8.forwardRef)(
|
|
|
988
879
|
const radioGroup = useRadioGroup();
|
|
989
880
|
const size = propSize || context?.size || "md";
|
|
990
881
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
991
|
-
const itemRef = (0,
|
|
882
|
+
const itemRef = (0, import_react7.useRef)(null);
|
|
992
883
|
const checked = radioGroup?.value === value;
|
|
993
|
-
(0,
|
|
884
|
+
(0, import_react7.useEffect)(() => {
|
|
994
885
|
if (context && !disabled) {
|
|
995
886
|
const id = typeof children === "string" ? children : String(Math.random());
|
|
996
887
|
context.registerItem(id);
|
|
@@ -1099,10 +990,10 @@ var ContextMenuRadioItem = (0, import_react8.forwardRef)(
|
|
|
1099
990
|
ContextMenuRadioItem.displayName = "ContextMenuRadioItem";
|
|
1100
991
|
|
|
1101
992
|
// src/ContextMenuGroup.tsx
|
|
1102
|
-
var
|
|
993
|
+
var import_react8 = require("react");
|
|
1103
994
|
var import_xui_core4 = require("@xsolla/xui-core");
|
|
1104
995
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
1105
|
-
var ContextMenuGroup = (0,
|
|
996
|
+
var ContextMenuGroup = (0, import_react8.forwardRef)(
|
|
1106
997
|
({
|
|
1107
998
|
label,
|
|
1108
999
|
description,
|
|
@@ -1179,7 +1070,7 @@ var ContextMenuSeparator = ({
|
|
|
1179
1070
|
ContextMenuSeparator.displayName = "ContextMenuSeparator";
|
|
1180
1071
|
|
|
1181
1072
|
// src/ContextMenuSearch.tsx
|
|
1182
|
-
var
|
|
1073
|
+
var import_react9 = __toESM(require("react"));
|
|
1183
1074
|
var import_xui_core6 = require("@xsolla/xui-core");
|
|
1184
1075
|
|
|
1185
1076
|
// ../icons-base/dist/web/index.mjs
|
|
@@ -1620,7 +1511,7 @@ var Search = (props) => /* @__PURE__ */ (0, import_jsx_runtime384.jsx)(BaseIcon,
|
|
|
1620
1511
|
// src/ContextMenuSearch.tsx
|
|
1621
1512
|
var import_xui_divider = require("@xsolla/xui-divider");
|
|
1622
1513
|
var import_jsx_runtime398 = require("react/jsx-runtime");
|
|
1623
|
-
var ContextMenuSearch = (0,
|
|
1514
|
+
var ContextMenuSearch = (0, import_react9.forwardRef)(
|
|
1624
1515
|
({
|
|
1625
1516
|
value,
|
|
1626
1517
|
onChange,
|
|
@@ -1636,14 +1527,14 @@ var ContextMenuSearch = (0, import_react10.forwardRef)(
|
|
|
1636
1527
|
const context = useContextMenu();
|
|
1637
1528
|
const size = propSize || context?.size || "md";
|
|
1638
1529
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
1639
|
-
const inputRef = (0,
|
|
1530
|
+
const inputRef = (0, import_react9.useRef)(null);
|
|
1640
1531
|
const inputColors = theme.colors.control.input;
|
|
1641
|
-
|
|
1532
|
+
import_react9.default.useImperativeHandle(
|
|
1642
1533
|
ref,
|
|
1643
1534
|
() => inputRef.current,
|
|
1644
1535
|
[]
|
|
1645
1536
|
);
|
|
1646
|
-
(0,
|
|
1537
|
+
(0, import_react9.useEffect)(() => {
|
|
1647
1538
|
if (autoFocus && inputRef.current) {
|
|
1648
1539
|
setTimeout(() => {
|
|
1649
1540
|
inputRef.current?.focus();
|
|
@@ -1707,7 +1598,7 @@ ContextMenuSearch.displayName = "ContextMenuSearch";
|
|
|
1707
1598
|
|
|
1708
1599
|
// src/ContextMenu.tsx
|
|
1709
1600
|
var import_jsx_runtime399 = require("react/jsx-runtime");
|
|
1710
|
-
var ContextMenuRoot = (0,
|
|
1601
|
+
var ContextMenuRoot = (0, import_react10.forwardRef)(
|
|
1711
1602
|
({
|
|
1712
1603
|
children,
|
|
1713
1604
|
list,
|
|
@@ -1729,21 +1620,21 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1729
1620
|
themeProductContext
|
|
1730
1621
|
}, ref) => {
|
|
1731
1622
|
const { theme } = (0, import_xui_core7.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1732
|
-
const [internalIsOpen, setInternalIsOpen] = (0,
|
|
1733
|
-
const [activeIndex, setActiveIndex] = (0,
|
|
1734
|
-
const containerRef = (0,
|
|
1735
|
-
const menuRef = (0,
|
|
1736
|
-
const itemsRef = (0,
|
|
1623
|
+
const [internalIsOpen, setInternalIsOpen] = (0, import_react10.useState)(false);
|
|
1624
|
+
const [activeIndex, setActiveIndex] = (0, import_react10.useState)(-1);
|
|
1625
|
+
const containerRef = (0, import_react10.useRef)(null);
|
|
1626
|
+
const menuRef = (0, import_react10.useRef)(null);
|
|
1627
|
+
const itemsRef = (0, import_react10.useRef)([]);
|
|
1737
1628
|
const isOpen = propIsOpen !== void 0 ? propIsOpen : internalIsOpen;
|
|
1738
1629
|
const sizeStyles = theme.sizing.contextMenu(size);
|
|
1739
|
-
const closeMenu = (0,
|
|
1630
|
+
const closeMenu = (0, import_react10.useCallback)(() => {
|
|
1740
1631
|
if (propIsOpen === void 0) {
|
|
1741
1632
|
setInternalIsOpen(false);
|
|
1742
1633
|
}
|
|
1743
1634
|
onOpenChange?.(false);
|
|
1744
1635
|
setActiveIndex(-1);
|
|
1745
1636
|
}, [propIsOpen, onOpenChange]);
|
|
1746
|
-
const toggleMenu = (0,
|
|
1637
|
+
const toggleMenu = (0, import_react10.useCallback)(() => {
|
|
1747
1638
|
const nextOpen = !isOpen;
|
|
1748
1639
|
if (propIsOpen === void 0) {
|
|
1749
1640
|
setInternalIsOpen(nextOpen);
|
|
@@ -1753,7 +1644,7 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1753
1644
|
setActiveIndex(-1);
|
|
1754
1645
|
}
|
|
1755
1646
|
}, [isOpen, propIsOpen, onOpenChange]);
|
|
1756
|
-
(0,
|
|
1647
|
+
(0, import_react10.useEffect)(() => {
|
|
1757
1648
|
const handleClickOutside = (event) => {
|
|
1758
1649
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
1759
1650
|
closeMenu();
|
|
@@ -1766,7 +1657,7 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1766
1657
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
1767
1658
|
};
|
|
1768
1659
|
}, [isOpen, closeMenu]);
|
|
1769
|
-
(0,
|
|
1660
|
+
(0, import_react10.useEffect)(() => {
|
|
1770
1661
|
const handleEscape = (event) => {
|
|
1771
1662
|
if (event.key === "Escape") {
|
|
1772
1663
|
closeMenu();
|
|
@@ -1779,17 +1670,17 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1779
1670
|
document.removeEventListener("keydown", handleEscape);
|
|
1780
1671
|
};
|
|
1781
1672
|
}, [isOpen, closeMenu]);
|
|
1782
|
-
(0,
|
|
1673
|
+
(0, import_react10.useEffect)(() => {
|
|
1783
1674
|
if (isOpen && menuRef.current) {
|
|
1784
1675
|
menuRef.current.focus();
|
|
1785
1676
|
}
|
|
1786
1677
|
}, [isOpen]);
|
|
1787
|
-
(0,
|
|
1678
|
+
(0, import_react10.useEffect)(() => {
|
|
1788
1679
|
if (!isOpen) {
|
|
1789
1680
|
itemsRef.current = [];
|
|
1790
1681
|
}
|
|
1791
1682
|
}, [isOpen]);
|
|
1792
|
-
const registerItem = (0,
|
|
1683
|
+
const registerItem = (0, import_react10.useCallback)((id) => {
|
|
1793
1684
|
const index = itemsRef.current.indexOf(id);
|
|
1794
1685
|
if (index === -1) {
|
|
1795
1686
|
itemsRef.current.push(id);
|
|
@@ -1797,13 +1688,13 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1797
1688
|
}
|
|
1798
1689
|
return index;
|
|
1799
1690
|
}, []);
|
|
1800
|
-
const unregisterItem = (0,
|
|
1691
|
+
const unregisterItem = (0, import_react10.useCallback)((id) => {
|
|
1801
1692
|
const index = itemsRef.current.indexOf(id);
|
|
1802
1693
|
if (index !== -1) {
|
|
1803
1694
|
itemsRef.current.splice(index, 1);
|
|
1804
1695
|
}
|
|
1805
1696
|
}, []);
|
|
1806
|
-
const onItemSelect = (0,
|
|
1697
|
+
const onItemSelect = (0, import_react10.useCallback)(
|
|
1807
1698
|
(item) => {
|
|
1808
1699
|
onSelect?.(item);
|
|
1809
1700
|
if (item.variant === "checkbox") {
|
|
@@ -1819,7 +1710,7 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1819
1710
|
},
|
|
1820
1711
|
[onSelect, onCheckedChange, closeOnSelect, closeMenu]
|
|
1821
1712
|
);
|
|
1822
|
-
const handleKeyDown = (0,
|
|
1713
|
+
const handleKeyDown = (0, import_react10.useCallback)(
|
|
1823
1714
|
(event) => {
|
|
1824
1715
|
const itemCount = itemsRef.current.length;
|
|
1825
1716
|
if (itemCount === 0) return;
|
|
@@ -1851,7 +1742,7 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1851
1742
|
},
|
|
1852
1743
|
[closeMenu]
|
|
1853
1744
|
);
|
|
1854
|
-
const contextValue = (0,
|
|
1745
|
+
const contextValue = (0, import_react10.useMemo)(
|
|
1855
1746
|
() => ({
|
|
1856
1747
|
size,
|
|
1857
1748
|
closeMenu,
|
|
@@ -1929,7 +1820,7 @@ var ContextMenuRoot = (0, import_react11.forwardRef)(
|
|
|
1929
1820
|
});
|
|
1930
1821
|
};
|
|
1931
1822
|
const renderGroups = (groupsData) => {
|
|
1932
|
-
return groupsData.map((group, groupIndex) => /* @__PURE__ */ (0, import_jsx_runtime399.jsxs)(
|
|
1823
|
+
return groupsData.map((group, groupIndex) => /* @__PURE__ */ (0, import_jsx_runtime399.jsxs)(import_react10.default.Fragment, { children: [
|
|
1933
1824
|
groupIndex > 0 && /* @__PURE__ */ (0, import_jsx_runtime399.jsx)(ContextMenuSeparator, {}),
|
|
1934
1825
|
/* @__PURE__ */ (0, import_jsx_runtime399.jsx)(
|
|
1935
1826
|
ContextMenuGroup,
|
|
@@ -2038,15 +1929,15 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
|
|
|
2038
1929
|
});
|
|
2039
1930
|
|
|
2040
1931
|
// src/hooks/useContextMenuPosition.ts
|
|
2041
|
-
var
|
|
1932
|
+
var import_react11 = require("react");
|
|
2042
1933
|
var useContextMenuPosition = ({
|
|
2043
1934
|
position,
|
|
2044
1935
|
menuRef,
|
|
2045
1936
|
isOpen,
|
|
2046
1937
|
offset = 8
|
|
2047
1938
|
}) => {
|
|
2048
|
-
const [adjustedPosition, setAdjustedPosition] = (0,
|
|
2049
|
-
(0,
|
|
1939
|
+
const [adjustedPosition, setAdjustedPosition] = (0, import_react11.useState)();
|
|
1940
|
+
(0, import_react11.useEffect)(() => {
|
|
2050
1941
|
if (!isOpen || !position || !menuRef.current) {
|
|
2051
1942
|
setAdjustedPosition(void 0);
|
|
2052
1943
|
return;
|
|
@@ -2094,7 +1985,7 @@ var useContextMenuPosition = ({
|
|
|
2094
1985
|
};
|
|
2095
1986
|
|
|
2096
1987
|
// src/hooks/useKeyboardNavigation.ts
|
|
2097
|
-
var
|
|
1988
|
+
var import_react12 = require("react");
|
|
2098
1989
|
var useKeyboardNavigation = ({
|
|
2099
1990
|
isOpen,
|
|
2100
1991
|
itemCount,
|
|
@@ -2104,9 +1995,9 @@ var useKeyboardNavigation = ({
|
|
|
2104
1995
|
onClose,
|
|
2105
1996
|
loop = true
|
|
2106
1997
|
}) => {
|
|
2107
|
-
const typeaheadBuffer = (0,
|
|
2108
|
-
const typeaheadTimeout = (0,
|
|
2109
|
-
(0,
|
|
1998
|
+
const typeaheadBuffer = (0, import_react12.useRef)("");
|
|
1999
|
+
const typeaheadTimeout = (0, import_react12.useRef)(null);
|
|
2000
|
+
(0, import_react12.useEffect)(() => {
|
|
2110
2001
|
if (!isOpen) {
|
|
2111
2002
|
typeaheadBuffer.current = "";
|
|
2112
2003
|
if (typeaheadTimeout.current) {
|
|
@@ -2114,7 +2005,7 @@ var useKeyboardNavigation = ({
|
|
|
2114
2005
|
}
|
|
2115
2006
|
}
|
|
2116
2007
|
}, [isOpen]);
|
|
2117
|
-
const handleKeyDown = (0,
|
|
2008
|
+
const handleKeyDown = (0, import_react12.useCallback)(
|
|
2118
2009
|
(event) => {
|
|
2119
2010
|
if (!isOpen || itemCount === 0) return;
|
|
2120
2011
|
switch (event.key) {
|