@zentauri-ui/zentauri-components 2.1.1 → 2.1.3
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/README.md +17 -16
- package/cli/cli.integration.test.ts +115 -0
- package/cli/index.mjs +254 -5
- package/cli/registry.json +84 -0
- package/dist/{chunk-TYBQZO6Y.mjs → chunk-2P4WPYC3.mjs} +3 -3
- package/dist/{chunk-TYBQZO6Y.mjs.map → chunk-2P4WPYC3.mjs.map} +1 -1
- package/dist/{chunk-ZMFRJHO6.mjs → chunk-3BL5PO3K.mjs} +3 -3
- package/dist/{chunk-ZMFRJHO6.mjs.map → chunk-3BL5PO3K.mjs.map} +1 -1
- package/dist/{chunk-TT33BIIT.js → chunk-BJDT7P2I.js} +35 -35
- package/dist/{chunk-TT33BIIT.js.map → chunk-BJDT7P2I.js.map} +1 -1
- package/dist/{chunk-7N2UYQBJ.mjs → chunk-BOTDQV6U.mjs} +4 -4
- package/dist/{chunk-7N2UYQBJ.mjs.map → chunk-BOTDQV6U.mjs.map} +1 -1
- package/dist/{chunk-3N575QVC.mjs → chunk-BPSW3SRE.mjs} +3 -3
- package/dist/{chunk-3N575QVC.mjs.map → chunk-BPSW3SRE.mjs.map} +1 -1
- package/dist/{chunk-5TVBPPS6.js → chunk-DKBMNS6F.js} +11 -11
- package/dist/{chunk-5TVBPPS6.js.map → chunk-DKBMNS6F.js.map} +1 -1
- package/dist/{chunk-4LCH4OJ5.js → chunk-E7P4O3ET.js} +10 -10
- package/dist/{chunk-4LCH4OJ5.js.map → chunk-E7P4O3ET.js.map} +1 -1
- package/dist/{chunk-VHYUH5OH.js → chunk-GNQH247A.js} +6 -6
- package/dist/{chunk-VHYUH5OH.js.map → chunk-GNQH247A.js.map} +1 -1
- package/dist/{chunk-42ZSQNDF.mjs → chunk-NIVJFG5Z.mjs} +35 -35
- package/dist/{chunk-42ZSQNDF.mjs.map → chunk-NIVJFG5Z.mjs.map} +1 -1
- package/dist/{chunk-BIQZC26Q.js → chunk-OH5VOGNW.js} +4 -4
- package/dist/chunk-OH5VOGNW.js.map +1 -0
- package/dist/chunk-SOYCLBHK.js +19 -0
- package/dist/{chunk-R4D5V7NT.js.map → chunk-SOYCLBHK.js.map} +1 -1
- package/dist/{chunk-V2LI5QZD.js → chunk-UJPB5NHW.js} +18 -18
- package/dist/{chunk-V2LI5QZD.js.map → chunk-UJPB5NHW.js.map} +1 -1
- package/dist/{chunk-TVEK6PKH.mjs → chunk-XY3TKIIH.mjs} +4 -4
- package/dist/chunk-XY3TKIIH.mjs.map +1 -0
- package/dist/{chunk-GOH2THVW.mjs → chunk-ZNI3AB3W.mjs} +3 -3
- package/dist/{chunk-GOH2THVW.mjs.map → chunk-ZNI3AB3W.mjs.map} +1 -1
- package/dist/design-system/alert.d.ts +33 -33
- package/dist/design-system/facade.js +4 -4
- package/dist/design-system/facade.mjs +3 -3
- package/dist/design-system/tabs.d.ts +2 -2
- package/dist/ui/alert/animated.js +3 -3
- package/dist/ui/alert/animated.mjs +2 -2
- package/dist/ui/alert.js +11 -11
- package/dist/ui/alert.mjs +3 -3
- package/dist/ui/buttons/animated.js +6 -6
- package/dist/ui/buttons/animated.mjs +4 -4
- package/dist/ui/buttons.js +7 -7
- package/dist/ui/buttons.mjs +5 -5
- package/dist/ui/context-menu/context-menu.d.ts.map +1 -1
- package/dist/ui/context-menu/types.d.ts +3 -1
- package/dist/ui/context-menu/types.d.ts.map +1 -1
- package/dist/ui/context-menu.js +17 -0
- package/dist/ui/context-menu.js.map +1 -1
- package/dist/ui/context-menu.mjs +17 -0
- package/dist/ui/context-menu.mjs.map +1 -1
- package/dist/ui/dropdown/dropdown.d.ts +1 -1
- package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
- package/dist/ui/dropdown.js +43 -2
- package/dist/ui/dropdown.js.map +1 -1
- package/dist/ui/dropdown.mjs +44 -3
- package/dist/ui/dropdown.mjs.map +1 -1
- package/dist/ui/dynamic-stepper.js +16 -16
- package/dist/ui/dynamic-stepper.mjs +5 -5
- package/dist/ui/pagination.js +12 -12
- package/dist/ui/pagination.mjs +4 -4
- package/dist/ui/tabs/animated.js +3 -3
- package/dist/ui/tabs/animated.mjs +2 -2
- package/dist/ui/tabs.js +10 -10
- package/dist/ui/tabs.mjs +2 -2
- package/package.json +10 -3
- package/src/design-system/alert.ts +33 -33
- package/src/design-system/tabs.ts +2 -2
- package/src/hooks/useTableFilter/useTableFilter.test.ts +12 -2
- package/src/ui/context-menu/context-menu.test.tsx +38 -0
- package/src/ui/context-menu/context-menu.tsx +17 -1
- package/src/ui/context-menu/types.ts +3 -0
- package/src/ui/dropdown/dropdown.tsx +59 -2
- package/dist/chunk-BIQZC26Q.js.map +0 -1
- package/dist/chunk-R4D5V7NT.js +0 -19
- package/dist/chunk-TVEK6PKH.mjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../../chunk-
|
|
4
|
+
var chunkSOYCLBHK_js = require('../../chunk-SOYCLBHK.js');
|
|
5
|
+
require('../../chunk-UJPB5NHW.js');
|
|
6
6
|
require('../../chunk-FBUY6K6S.js');
|
|
7
7
|
require('../../chunk-USLNTKVQ.js');
|
|
8
8
|
require('../../chunk-D7ATXPVI.js');
|
|
@@ -12,7 +12,7 @@ require('../../chunk-3EJCQXGV.js');
|
|
|
12
12
|
require('../../chunk-NNGL2AFQ.js');
|
|
13
13
|
require('../../chunk-L7W4NRK6.js');
|
|
14
14
|
require('../../chunk-KWBGLH7G.js');
|
|
15
|
-
require('../../chunk-
|
|
15
|
+
require('../../chunk-OH5VOGNW.js');
|
|
16
16
|
require('../../chunk-Y7BU5RC4.js');
|
|
17
17
|
require('../../chunk-6Q4EOLKN.js');
|
|
18
18
|
require('../../chunk-UG3GF2BD.js');
|
|
@@ -38,7 +38,7 @@ require('../../chunk-7DVECOO7.js');
|
|
|
38
38
|
require('../../chunk-KJMW7S5X.js');
|
|
39
39
|
require('../../chunk-YPYPWALR.js');
|
|
40
40
|
require('../../chunk-PP3L6M62.js');
|
|
41
|
-
require('../../chunk-
|
|
41
|
+
require('../../chunk-BJDT7P2I.js');
|
|
42
42
|
require('../../chunk-NFUOJMNI.js');
|
|
43
43
|
require('../../chunk-UT6QG35L.js');
|
|
44
44
|
require('../../chunk-IR5SJ7AQ.js');
|
|
@@ -102,7 +102,7 @@ var ButtonAnimated = (props) => {
|
|
|
102
102
|
target,
|
|
103
103
|
rel: target === "_blank" ? "noopener noreferrer" : void 0,
|
|
104
104
|
"data-slot": "button",
|
|
105
|
-
className: chunkZS5756ZC_js.cn(
|
|
105
|
+
className: chunkZS5756ZC_js.cn(chunkSOYCLBHK_js.buttonVariants({ appearance: appearance2, size: size2 }), className2),
|
|
106
106
|
initial: false,
|
|
107
107
|
...motionProps2,
|
|
108
108
|
...rest2,
|
|
@@ -127,7 +127,7 @@ var ButtonAnimated = (props) => {
|
|
|
127
127
|
ref,
|
|
128
128
|
type,
|
|
129
129
|
"data-slot": "button",
|
|
130
|
-
className: chunkZS5756ZC_js.cn(
|
|
130
|
+
className: chunkZS5756ZC_js.cn(chunkSOYCLBHK_js.buttonVariants({ appearance, size }), className),
|
|
131
131
|
initial: false,
|
|
132
132
|
...motionProps,
|
|
133
133
|
...rest,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { buttonVariants } from '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
2
|
+
import { buttonVariants } from '../../chunk-BPSW3SRE.mjs';
|
|
3
|
+
import '../../chunk-BOTDQV6U.mjs';
|
|
4
4
|
import '../../chunk-2NQKFH26.mjs';
|
|
5
5
|
import '../../chunk-4ZBMDWWY.mjs';
|
|
6
6
|
import '../../chunk-YH6MOKHR.mjs';
|
|
@@ -10,7 +10,7 @@ import '../../chunk-LRYKMXKI.mjs';
|
|
|
10
10
|
import '../../chunk-COVTMJIQ.mjs';
|
|
11
11
|
import '../../chunk-4WG3VNVL.mjs';
|
|
12
12
|
import '../../chunk-YPTHTFVF.mjs';
|
|
13
|
-
import '../../chunk-
|
|
13
|
+
import '../../chunk-XY3TKIIH.mjs';
|
|
14
14
|
import '../../chunk-FX5KR2GP.mjs';
|
|
15
15
|
import '../../chunk-WIKNEHPJ.mjs';
|
|
16
16
|
import '../../chunk-EE53BIXR.mjs';
|
|
@@ -36,7 +36,7 @@ import '../../chunk-U64ISRUX.mjs';
|
|
|
36
36
|
import '../../chunk-SS3T3BUL.mjs';
|
|
37
37
|
import '../../chunk-TKAOHMVA.mjs';
|
|
38
38
|
import '../../chunk-HFQJRAG7.mjs';
|
|
39
|
-
import '../../chunk-
|
|
39
|
+
import '../../chunk-NIVJFG5Z.mjs';
|
|
40
40
|
import '../../chunk-ZJWOSRAS.mjs';
|
|
41
41
|
import '../../chunk-JOLSS7UY.mjs';
|
|
42
42
|
import '../../chunk-NGZTAVQO.mjs';
|
package/dist/ui/buttons.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
4
|
+
var chunkGNQH247A_js = require('../chunk-GNQH247A.js');
|
|
5
|
+
var chunkSOYCLBHK_js = require('../chunk-SOYCLBHK.js');
|
|
6
|
+
require('../chunk-UJPB5NHW.js');
|
|
7
7
|
require('../chunk-FBUY6K6S.js');
|
|
8
8
|
require('../chunk-USLNTKVQ.js');
|
|
9
9
|
require('../chunk-D7ATXPVI.js');
|
|
@@ -13,7 +13,7 @@ require('../chunk-3EJCQXGV.js');
|
|
|
13
13
|
require('../chunk-NNGL2AFQ.js');
|
|
14
14
|
require('../chunk-L7W4NRK6.js');
|
|
15
15
|
require('../chunk-KWBGLH7G.js');
|
|
16
|
-
require('../chunk-
|
|
16
|
+
require('../chunk-OH5VOGNW.js');
|
|
17
17
|
require('../chunk-Y7BU5RC4.js');
|
|
18
18
|
require('../chunk-6Q4EOLKN.js');
|
|
19
19
|
require('../chunk-UG3GF2BD.js');
|
|
@@ -39,7 +39,7 @@ require('../chunk-7DVECOO7.js');
|
|
|
39
39
|
require('../chunk-KJMW7S5X.js');
|
|
40
40
|
require('../chunk-YPYPWALR.js');
|
|
41
41
|
require('../chunk-PP3L6M62.js');
|
|
42
|
-
require('../chunk-
|
|
42
|
+
require('../chunk-BJDT7P2I.js');
|
|
43
43
|
require('../chunk-NFUOJMNI.js');
|
|
44
44
|
require('../chunk-UT6QG35L.js');
|
|
45
45
|
require('../chunk-IR5SJ7AQ.js');
|
|
@@ -51,11 +51,11 @@ require('../chunk-PZ5AY32C.js');
|
|
|
51
51
|
|
|
52
52
|
Object.defineProperty(exports, "Button", {
|
|
53
53
|
enumerable: true,
|
|
54
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunkGNQH247A_js.Button; }
|
|
55
55
|
});
|
|
56
56
|
Object.defineProperty(exports, "buttonVariants", {
|
|
57
57
|
enumerable: true,
|
|
58
|
-
get: function () { return
|
|
58
|
+
get: function () { return chunkSOYCLBHK_js.buttonVariants; }
|
|
59
59
|
});
|
|
60
60
|
//# sourceMappingURL=buttons.js.map
|
|
61
61
|
//# sourceMappingURL=buttons.js.map
|
package/dist/ui/buttons.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { Button } from '../chunk-
|
|
3
|
-
export { buttonVariants } from '../chunk-
|
|
4
|
-
import '../chunk-
|
|
2
|
+
export { Button } from '../chunk-2P4WPYC3.mjs';
|
|
3
|
+
export { buttonVariants } from '../chunk-BPSW3SRE.mjs';
|
|
4
|
+
import '../chunk-BOTDQV6U.mjs';
|
|
5
5
|
import '../chunk-2NQKFH26.mjs';
|
|
6
6
|
import '../chunk-4ZBMDWWY.mjs';
|
|
7
7
|
import '../chunk-YH6MOKHR.mjs';
|
|
@@ -11,7 +11,7 @@ import '../chunk-LRYKMXKI.mjs';
|
|
|
11
11
|
import '../chunk-COVTMJIQ.mjs';
|
|
12
12
|
import '../chunk-4WG3VNVL.mjs';
|
|
13
13
|
import '../chunk-YPTHTFVF.mjs';
|
|
14
|
-
import '../chunk-
|
|
14
|
+
import '../chunk-XY3TKIIH.mjs';
|
|
15
15
|
import '../chunk-FX5KR2GP.mjs';
|
|
16
16
|
import '../chunk-WIKNEHPJ.mjs';
|
|
17
17
|
import '../chunk-EE53BIXR.mjs';
|
|
@@ -37,7 +37,7 @@ import '../chunk-U64ISRUX.mjs';
|
|
|
37
37
|
import '../chunk-SS3T3BUL.mjs';
|
|
38
38
|
import '../chunk-TKAOHMVA.mjs';
|
|
39
39
|
import '../chunk-HFQJRAG7.mjs';
|
|
40
|
-
import '../chunk-
|
|
40
|
+
import '../chunk-NIVJFG5Z.mjs';
|
|
41
41
|
import '../chunk-ZJWOSRAS.mjs';
|
|
42
42
|
import '../chunk-JOLSS7UY.mjs';
|
|
43
43
|
import '../chunk-NGZTAVQO.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../src/ui/context-menu/context-menu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../src/ui/context-menu/context-menu.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,uBAAuB,EAEvB,oBAAoB,EACpB,qBAAqB,EAErB,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAE1B,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EAGxB,MAAM,SAAS,CAAC;AAiEjB,eAAO,MAAM,WAAW,GAAI,oGAOzB,gBAAgB,4CAuFlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,oCAIhC,uBAAuB,4CAuEzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,4EAQhC,uBAAuB,mDA8DzB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,+HAa7B,oBAAoB,4CAqDtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,0CAK9B,qBAAqB,4CASvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,yBAGlC,yBAAyB,4CAQ3B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,4BAG5B,mBAAmB,4CAWrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,4GAWnC,0BAA0B,4CA+C5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,4CAKnC,0BAA0B,mDAqB5B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VariantProps } from "class-variance-authority";
|
|
2
|
-
import type { ComponentPropsWithRef, HTMLAttributes, MouseEvent, ReactElement, ReactNode, Ref, RefObject } from "react";
|
|
2
|
+
import type { ComponentPropsWithRef, HTMLAttributes, KeyboardEvent, MouseEvent, ReactElement, ReactNode, Ref, RefObject } from "react";
|
|
3
3
|
import type { contextMenuContentVariants, contextMenuItemVariants } from "./variants";
|
|
4
4
|
export type ContextMenuPosition = {
|
|
5
5
|
x: number;
|
|
@@ -73,9 +73,11 @@ export type ReactChildSoleCandidate = ReactElement<{
|
|
|
73
73
|
className?: string;
|
|
74
74
|
ref?: Ref<HTMLElement>;
|
|
75
75
|
onContextMenu?: (event: MouseEvent<HTMLElement>) => void;
|
|
76
|
+
onKeyDown?: (event: KeyboardEvent<HTMLElement>) => void;
|
|
76
77
|
tabIndex?: number;
|
|
77
78
|
"aria-controls"?: string;
|
|
78
79
|
"aria-expanded"?: boolean;
|
|
79
80
|
"aria-haspopup"?: string;
|
|
81
|
+
role?: string;
|
|
80
82
|
}>;
|
|
81
83
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/context-menu/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/context-menu/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACT,GAAG,EACH,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC1C,UAAU,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAChE,YAAY,CAAC,OAAO,0BAA0B,CAAC,GAAG;IAChD,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEJ,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,GAC/D,YAAY,CAAC,OAAO,uBAAuB,CAAC,GAAG;IAC7C,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEJ,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,oBAAoB,CAAC,GAAG;IACzE,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEvE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,cAAc,CAAC,cAAc,CAAC,GACrE,YAAY,CAAC,OAAO,uBAAuB,CAAC,GAAG;IAC7C,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEJ,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,KAAK,CAAC,GACnE,YAAY,CAAC,OAAO,0BAA0B,CAAC,GAAG;IAChD,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEJ,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACzD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC"}
|
package/dist/ui/context-menu.js
CHANGED
|
@@ -177,6 +177,14 @@ var ContextMenuTrigger = ({
|
|
|
177
177
|
openAt({ x: event.clientX, y: event.clientY });
|
|
178
178
|
}
|
|
179
179
|
};
|
|
180
|
+
const handleKeyboardTrigger = (event) => {
|
|
181
|
+
if (disabled || event.key !== "Enter" && event.key !== " ") {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
186
|
+
openAt({ x: rect.left, y: rect.bottom });
|
|
187
|
+
};
|
|
180
188
|
const childList = react.Children.toArray(children).filter(
|
|
181
189
|
(node) => node !== null && node !== void 0 && typeof node !== "boolean"
|
|
182
190
|
);
|
|
@@ -190,8 +198,15 @@ var ContextMenuTrigger = ({
|
|
|
190
198
|
handleContextMenu(event);
|
|
191
199
|
}
|
|
192
200
|
},
|
|
201
|
+
onKeyDown: (event) => {
|
|
202
|
+
soleCandidate.props.onKeyDown?.(event);
|
|
203
|
+
if (!event.defaultPrevented) {
|
|
204
|
+
handleKeyboardTrigger(event);
|
|
205
|
+
}
|
|
206
|
+
},
|
|
193
207
|
className: chunkZS5756ZC_js.cn(className, soleCandidate.props.className),
|
|
194
208
|
tabIndex: soleCandidate.props.tabIndex ?? 0,
|
|
209
|
+
role: soleCandidate.props.role ?? "button",
|
|
195
210
|
"aria-controls": open ? contentId : void 0,
|
|
196
211
|
"aria-expanded": open,
|
|
197
212
|
"aria-haspopup": "menu"
|
|
@@ -202,8 +217,10 @@ var ContextMenuTrigger = ({
|
|
|
202
217
|
{
|
|
203
218
|
ref: triggerRef,
|
|
204
219
|
className,
|
|
220
|
+
role: "button",
|
|
205
221
|
tabIndex: 0,
|
|
206
222
|
onContextMenu: handleContextMenu,
|
|
223
|
+
onKeyDown: handleKeyboardTrigger,
|
|
207
224
|
"aria-controls": open ? contentId : void 0,
|
|
208
225
|
"aria-expanded": open,
|
|
209
226
|
"aria-haspopup": "menu",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/context-menu/variants.ts","../../src/ui/context-menu/context-menu.tsx"],"names":["cva","zuiContextMenuContentBase","zuiContextMenuSpacing","zuiContextMenuItemBase","zuiContextMenuItemVariants","createContext","useContext","useState","useId","useRef","useCallback","useEffect","useMemo","jsx","Children","isValidElement","cloneElement","cn","useLayoutEffect","jsxs","zuiContextMenuLabelBase","zuiContextMenuSeparatorBase","FiChevronRight"],"mappings":"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","file":"context-menu.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiContextMenuContentBase,\n zuiContextMenuItemBase,\n zuiContextMenuItemVariants,\n zuiContextMenuSpacing,\n} from \"../../design-system/context-menu\";\n\nexport const contextMenuContentVariants = cva(zuiContextMenuContentBase, {\n variants: {\n spacing: zuiContextMenuSpacing,\n },\n defaultVariants: {\n spacing: \"default\",\n },\n});\n\nexport const contextMenuItemVariants = cva(zuiContextMenuItemBase, {\n variants: {\n variant: zuiContextMenuItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type Ref,\n type RefObject,\n} from \"react\";\nimport { FiChevronRight } from \"react-icons/fi\";\n\nimport {\n zuiContextMenuLabelBase,\n zuiContextMenuSeparatorBase,\n} from \"../../design-system/context-menu\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n ContextMenuContentProps,\n ContextMenuContextType,\n ContextMenuItemProps,\n ContextMenuLabelProps,\n ContextMenuPosition,\n ContextMenuProps,\n ContextMenuSeparatorProps,\n ContextMenuSubContentProps,\n ContextMenuSubContextType,\n ContextMenuSubProps,\n ContextMenuSubTriggerProps,\n ContextMenuTriggerProps,\n GetSafePositionProps,\n ReactChildSoleCandidate,\n} from \"./types\";\nimport {\n contextMenuContentVariants,\n contextMenuItemVariants,\n} from \"./variants\";\n\nconst ContextMenuContext = createContext<ContextMenuContextType | null>(null);\nconst ContextMenuSubContext = createContext<ContextMenuSubContextType | null>(\n null,\n);\n\nconst useContextMenu = () => {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error(\"ContextMenu components must be used within ContextMenu\");\n }\n return context;\n};\n\nconst useContextMenuSub = () => {\n const context = useContext(ContextMenuSubContext);\n if (!context) {\n throw new Error(\n \"ContextMenuSub components must be used within ContextMenuSub\",\n );\n }\n return context;\n};\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as RefObject<T | null>).current = node;\n }\n }\n };\n}\n\nconst getSafePosition = ({\n position,\n width,\n height,\n collisionPadding,\n}: GetSafePositionProps) => {\n const fallback = position ?? { x: collisionPadding, y: collisionPadding };\n\n if (typeof window === \"undefined\") {\n return fallback;\n }\n\n return {\n x: Math.max(\n collisionPadding,\n Math.min(fallback.x, window.innerWidth - width - collisionPadding),\n ),\n y: Math.max(\n collisionPadding,\n Math.min(fallback.y, window.innerHeight - height - collisionPadding),\n ),\n };\n};\n\nexport const ContextMenu = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n closeOnEscape = true,\n closeOnOutsideClick = true,\n}: ContextMenuProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [position, setPosition] = useState<ContextMenuPosition | null>(null);\n const contentId = `${useId()}-context-menu`;\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const openAt = useCallback(\n (nextPosition: ContextMenuPosition) => {\n setPosition(nextPosition);\n setOpen(true);\n },\n [setOpen],\n );\n\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!closeOnOutsideClick) {\n return;\n }\n const target = event.target as Node;\n if (contentRef.current?.contains(target)) {\n return;\n }\n if (triggerRef.current?.contains(target) && event.button !== 0) {\n return;\n }\n setOpen(false);\n };\n\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n const onScroll = () => {\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"scroll\", onScroll, { capture: true });\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"scroll\", onScroll, { capture: true });\n };\n }, [closeOnEscape, closeOnOutsideClick, open, setOpen]);\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen,\n openAt,\n contentId,\n triggerRef,\n contentRef,\n position,\n }),\n [contentId, open, openAt, setOpen, position],\n );\n\n return (\n <ContextMenuContext.Provider value={contextValue}>\n <div className=\"contents\">{children}</div>\n </ContextMenuContext.Provider>\n );\n};\n\nexport const ContextMenuTrigger = ({\n children,\n className,\n disabled = false,\n}: ContextMenuTriggerProps) => {\n const { open, openAt, contentId, triggerRef } = useContextMenu();\n\n const handleContextMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const isKeyboardTrigger = event.clientX === 0 && event.clientY === 0;\n if (isKeyboardTrigger) {\n const rect = event.currentTarget.getBoundingClientRect();\n openAt({ x: rect.left, y: rect.bottom });\n } else {\n openAt({ x: event.clientX, y: event.clientY });\n }\n };\n const childList = Children.toArray(children).filter(\n (node) => node !== null && node !== undefined && typeof node !== \"boolean\",\n );\n const soleCandidate =\n childList.length === 1 && isValidElement(childList[0])\n ? (childList[0] as ReactChildSoleCandidate)\n : undefined;\n\n if (soleCandidate) {\n return cloneElement(soleCandidate, {\n ref: mergeRefs(triggerRef, soleCandidate.props.ref),\n onContextMenu: (event) => {\n soleCandidate.props.onContextMenu?.(event);\n if (!event.defaultPrevented) {\n handleContextMenu(event);\n }\n },\n className: cn(className, soleCandidate.props.className),\n tabIndex: soleCandidate.props.tabIndex ?? 0,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n });\n }\n\n return (\n <span\n ref={triggerRef as Ref<HTMLSpanElement>}\n className={className}\n tabIndex={0}\n onContextMenu={handleContextMenu}\n aria-controls={open ? contentId : undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n >\n {children}\n </span>\n );\n};\n\nexport const ContextMenuContent = ({\n children,\n className,\n collisionPadding = 8,\n spacing,\n style,\n width = 220,\n ...props\n}: ContextMenuContentProps) => {\n const { open, contentId, contentRef, position } = useContextMenu();\n const [menuSize, setMenuSize] = useState({ width, height: 0 });\n\n useLayoutEffect(() => {\n if (!open || !contentRef.current) {\n return;\n }\n\n const rect = contentRef.current.getBoundingClientRect();\n const nextSize = {\n width: Math.max(width, rect.width),\n height: rect.height,\n };\n\n setMenuSize((currentSize) =>\n currentSize.width === nextSize.width &&\n currentSize.height === nextSize.height\n ? currentSize\n : nextSize,\n );\n });\n\n useEffect(() => {\n if (!open) {\n setMenuSize({ width, height: 0 });\n }\n }, [open, width]);\n\n if (!open) {\n return null;\n }\n\n const safePosition = getSafePosition({\n position,\n width: menuSize.width,\n height: menuSize.height,\n collisionPadding,\n });\n\n return (\n <div\n ref={contentRef}\n id={contentId}\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"fixed z-50\",\n className,\n )}\n style={{\n left: safePosition.x,\n top: safePosition.y,\n minWidth: width,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport const ContextMenuItem = ({\n children,\n className,\n closeOnSelect = true,\n disabled = false,\n inset = false,\n leftIcon,\n onClick,\n onKeyDown,\n onSelect,\n rightIcon,\n variant,\n ...props\n}: ContextMenuItemProps) => {\n const { setOpen } = useContextMenu();\n\n const handleSelect = () => {\n if (disabled) {\n return;\n }\n onSelect?.();\n if (closeOnSelect) {\n setOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSelect();\n }\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleSelect();\n }\n }}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {leftIcon}\n <span className=\"truncate\">{children}</span>\n </div>\n {rightIcon ? (\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n ) : null}\n </div>\n );\n};\n\nexport const ContextMenuLabel = ({\n children,\n className,\n inset = false,\n ...props\n}: ContextMenuLabelProps) => {\n return (\n <p\n className={cn(zuiContextMenuLabelBase, inset && \"pl-8\", className)}\n {...props}\n >\n {children}\n </p>\n );\n};\n\nexport const ContextMenuSeparator = ({\n className,\n ...props\n}: ContextMenuSeparatorProps) => {\n return (\n <div\n role=\"separator\"\n className={cn(zuiContextMenuSeparatorBase, className)}\n {...props}\n />\n );\n};\n\nexport const ContextMenuSub = ({\n children,\n defaultOpen = false,\n}: ContextMenuSubProps) => {\n const [open, setOpen] = useState(defaultOpen);\n const value = useMemo(() => ({ open, setOpen }), [open]);\n\n return (\n <ContextMenuSubContext.Provider value={value}>\n <div className=\"relative\" onPointerLeave={() => setOpen(false)}>\n {children}\n </div>\n </ContextMenuSubContext.Provider>\n );\n};\n\nexport const ContextMenuSubTrigger = ({\n children,\n className,\n disabled = false,\n inset = false,\n onFocus,\n onKeyDown,\n onPointerEnter,\n rightIcon = <FiChevronRight aria-hidden=\"true\" />,\n variant,\n ...props\n}: ContextMenuSubTriggerProps) => {\n const { open, setOpen } = useContextMenuSub();\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onPointerEnter={(event) => {\n onPointerEnter?.(event);\n if (!disabled) {\n setOpen(true);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"ArrowRight\" || event.key === \"Enter\") {\n event.preventDefault();\n setOpen(true);\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setOpen(false);\n }\n }}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{children}</span>\n </div>\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n </div>\n );\n};\n\nexport const ContextMenuSubContent = ({\n children,\n className,\n spacing,\n ...props\n}: ContextMenuSubContentProps) => {\n const { open } = useContextMenuSub();\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"absolute left-full top-0 z-50 ml-2\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/context-menu/variants.ts","../../src/ui/context-menu/context-menu.tsx"],"names":["cva","zuiContextMenuContentBase","zuiContextMenuSpacing","zuiContextMenuItemBase","zuiContextMenuItemVariants","createContext","useContext","useState","useId","useRef","useCallback","useEffect","useMemo","jsx","Children","isValidElement","cloneElement","cn","useLayoutEffect","jsxs","zuiContextMenuLabelBase","zuiContextMenuSeparatorBase","FiChevronRight"],"mappings":"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","file":"context-menu.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiContextMenuContentBase,\n zuiContextMenuItemBase,\n zuiContextMenuItemVariants,\n zuiContextMenuSpacing,\n} from \"../../design-system/context-menu\";\n\nexport const contextMenuContentVariants = cva(zuiContextMenuContentBase, {\n variants: {\n spacing: zuiContextMenuSpacing,\n },\n defaultVariants: {\n spacing: \"default\",\n },\n});\n\nexport const contextMenuItemVariants = cva(zuiContextMenuItemBase, {\n variants: {\n variant: zuiContextMenuItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type Ref,\n type RefObject,\n} from \"react\";\nimport { FiChevronRight } from \"react-icons/fi\";\n\nimport {\n zuiContextMenuLabelBase,\n zuiContextMenuSeparatorBase,\n} from \"../../design-system/context-menu\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n ContextMenuContentProps,\n ContextMenuContextType,\n ContextMenuItemProps,\n ContextMenuLabelProps,\n ContextMenuPosition,\n ContextMenuProps,\n ContextMenuSeparatorProps,\n ContextMenuSubContentProps,\n ContextMenuSubContextType,\n ContextMenuSubProps,\n ContextMenuSubTriggerProps,\n ContextMenuTriggerProps,\n GetSafePositionProps,\n ReactChildSoleCandidate,\n} from \"./types\";\nimport {\n contextMenuContentVariants,\n contextMenuItemVariants,\n} from \"./variants\";\n\nconst ContextMenuContext = createContext<ContextMenuContextType | null>(null);\nconst ContextMenuSubContext = createContext<ContextMenuSubContextType | null>(\n null,\n);\n\nconst useContextMenu = () => {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error(\"ContextMenu components must be used within ContextMenu\");\n }\n return context;\n};\n\nconst useContextMenuSub = () => {\n const context = useContext(ContextMenuSubContext);\n if (!context) {\n throw new Error(\n \"ContextMenuSub components must be used within ContextMenuSub\",\n );\n }\n return context;\n};\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as RefObject<T | null>).current = node;\n }\n }\n };\n}\n\nconst getSafePosition = ({\n position,\n width,\n height,\n collisionPadding,\n}: GetSafePositionProps) => {\n const fallback = position ?? { x: collisionPadding, y: collisionPadding };\n\n if (typeof window === \"undefined\") {\n return fallback;\n }\n\n return {\n x: Math.max(\n collisionPadding,\n Math.min(fallback.x, window.innerWidth - width - collisionPadding),\n ),\n y: Math.max(\n collisionPadding,\n Math.min(fallback.y, window.innerHeight - height - collisionPadding),\n ),\n };\n};\n\nexport const ContextMenu = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n closeOnEscape = true,\n closeOnOutsideClick = true,\n}: ContextMenuProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [position, setPosition] = useState<ContextMenuPosition | null>(null);\n const contentId = `${useId()}-context-menu`;\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const openAt = useCallback(\n (nextPosition: ContextMenuPosition) => {\n setPosition(nextPosition);\n setOpen(true);\n },\n [setOpen],\n );\n\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!closeOnOutsideClick) {\n return;\n }\n const target = event.target as Node;\n if (contentRef.current?.contains(target)) {\n return;\n }\n if (triggerRef.current?.contains(target) && event.button !== 0) {\n return;\n }\n setOpen(false);\n };\n\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n const onScroll = () => {\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"scroll\", onScroll, { capture: true });\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"scroll\", onScroll, { capture: true });\n };\n }, [closeOnEscape, closeOnOutsideClick, open, setOpen]);\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen,\n openAt,\n contentId,\n triggerRef,\n contentRef,\n position,\n }),\n [contentId, open, openAt, setOpen, position],\n );\n\n return (\n <ContextMenuContext.Provider value={contextValue}>\n <div className=\"contents\">{children}</div>\n </ContextMenuContext.Provider>\n );\n};\n\nexport const ContextMenuTrigger = ({\n children,\n className,\n disabled = false,\n}: ContextMenuTriggerProps) => {\n const { open, openAt, contentId, triggerRef } = useContextMenu();\n\n const handleContextMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const isKeyboardTrigger = event.clientX === 0 && event.clientY === 0;\n if (isKeyboardTrigger) {\n const rect = event.currentTarget.getBoundingClientRect();\n openAt({ x: rect.left, y: rect.bottom });\n } else {\n openAt({ x: event.clientX, y: event.clientY });\n }\n };\n const handleKeyboardTrigger = (event: KeyboardEvent<HTMLElement>) => {\n if (disabled || (event.key !== \"Enter\" && event.key !== \" \")) {\n return;\n }\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n openAt({ x: rect.left, y: rect.bottom });\n };\n const childList = Children.toArray(children).filter(\n (node) => node !== null && node !== undefined && typeof node !== \"boolean\",\n );\n const soleCandidate =\n childList.length === 1 && isValidElement(childList[0])\n ? (childList[0] as ReactChildSoleCandidate)\n : undefined;\n\n if (soleCandidate) {\n return cloneElement(soleCandidate, {\n ref: mergeRefs(triggerRef, soleCandidate.props.ref),\n onContextMenu: (event) => {\n soleCandidate.props.onContextMenu?.(event);\n if (!event.defaultPrevented) {\n handleContextMenu(event);\n }\n },\n onKeyDown: (event) => {\n soleCandidate.props.onKeyDown?.(event);\n if (!event.defaultPrevented) {\n handleKeyboardTrigger(event);\n }\n },\n className: cn(className, soleCandidate.props.className),\n tabIndex: soleCandidate.props.tabIndex ?? 0,\n role: soleCandidate.props.role ?? \"button\",\n \"aria-controls\": open ? contentId : undefined,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n });\n }\n\n return (\n <span\n ref={triggerRef as Ref<HTMLSpanElement>}\n className={className}\n role=\"button\"\n tabIndex={0}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyboardTrigger}\n aria-controls={open ? contentId : undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n >\n {children}\n </span>\n );\n};\n\nexport const ContextMenuContent = ({\n children,\n className,\n collisionPadding = 8,\n spacing,\n style,\n width = 220,\n ...props\n}: ContextMenuContentProps) => {\n const { open, contentId, contentRef, position } = useContextMenu();\n const [menuSize, setMenuSize] = useState({ width, height: 0 });\n\n useLayoutEffect(() => {\n if (!open || !contentRef.current) {\n return;\n }\n\n const rect = contentRef.current.getBoundingClientRect();\n const nextSize = {\n width: Math.max(width, rect.width),\n height: rect.height,\n };\n\n setMenuSize((currentSize) =>\n currentSize.width === nextSize.width &&\n currentSize.height === nextSize.height\n ? currentSize\n : nextSize,\n );\n });\n\n useEffect(() => {\n if (!open) {\n setMenuSize({ width, height: 0 });\n }\n }, [open, width]);\n\n if (!open) {\n return null;\n }\n\n const safePosition = getSafePosition({\n position,\n width: menuSize.width,\n height: menuSize.height,\n collisionPadding,\n });\n\n return (\n <div\n ref={contentRef}\n id={contentId}\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"fixed z-50\",\n className,\n )}\n style={{\n left: safePosition.x,\n top: safePosition.y,\n minWidth: width,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport const ContextMenuItem = ({\n children,\n className,\n closeOnSelect = true,\n disabled = false,\n inset = false,\n leftIcon,\n onClick,\n onKeyDown,\n onSelect,\n rightIcon,\n variant,\n ...props\n}: ContextMenuItemProps) => {\n const { setOpen } = useContextMenu();\n\n const handleSelect = () => {\n if (disabled) {\n return;\n }\n onSelect?.();\n if (closeOnSelect) {\n setOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSelect();\n }\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleSelect();\n }\n }}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {leftIcon}\n <span className=\"truncate\">{children}</span>\n </div>\n {rightIcon ? (\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n ) : null}\n </div>\n );\n};\n\nexport const ContextMenuLabel = ({\n children,\n className,\n inset = false,\n ...props\n}: ContextMenuLabelProps) => {\n return (\n <p\n className={cn(zuiContextMenuLabelBase, inset && \"pl-8\", className)}\n {...props}\n >\n {children}\n </p>\n );\n};\n\nexport const ContextMenuSeparator = ({\n className,\n ...props\n}: ContextMenuSeparatorProps) => {\n return (\n <div\n role=\"separator\"\n className={cn(zuiContextMenuSeparatorBase, className)}\n {...props}\n />\n );\n};\n\nexport const ContextMenuSub = ({\n children,\n defaultOpen = false,\n}: ContextMenuSubProps) => {\n const [open, setOpen] = useState(defaultOpen);\n const value = useMemo(() => ({ open, setOpen }), [open]);\n\n return (\n <ContextMenuSubContext.Provider value={value}>\n <div className=\"relative\" onPointerLeave={() => setOpen(false)}>\n {children}\n </div>\n </ContextMenuSubContext.Provider>\n );\n};\n\nexport const ContextMenuSubTrigger = ({\n children,\n className,\n disabled = false,\n inset = false,\n onFocus,\n onKeyDown,\n onPointerEnter,\n rightIcon = <FiChevronRight aria-hidden=\"true\" />,\n variant,\n ...props\n}: ContextMenuSubTriggerProps) => {\n const { open, setOpen } = useContextMenuSub();\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onPointerEnter={(event) => {\n onPointerEnter?.(event);\n if (!disabled) {\n setOpen(true);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"ArrowRight\" || event.key === \"Enter\") {\n event.preventDefault();\n setOpen(true);\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setOpen(false);\n }\n }}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{children}</span>\n </div>\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n </div>\n );\n};\n\nexport const ContextMenuSubContent = ({\n children,\n className,\n spacing,\n ...props\n}: ContextMenuSubContentProps) => {\n const { open } = useContextMenuSub();\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"absolute left-full top-0 z-50 ml-2\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
|
package/dist/ui/context-menu.mjs
CHANGED
|
@@ -175,6 +175,14 @@ var ContextMenuTrigger = ({
|
|
|
175
175
|
openAt({ x: event.clientX, y: event.clientY });
|
|
176
176
|
}
|
|
177
177
|
};
|
|
178
|
+
const handleKeyboardTrigger = (event) => {
|
|
179
|
+
if (disabled || event.key !== "Enter" && event.key !== " ") {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
184
|
+
openAt({ x: rect.left, y: rect.bottom });
|
|
185
|
+
};
|
|
178
186
|
const childList = Children.toArray(children).filter(
|
|
179
187
|
(node) => node !== null && node !== void 0 && typeof node !== "boolean"
|
|
180
188
|
);
|
|
@@ -188,8 +196,15 @@ var ContextMenuTrigger = ({
|
|
|
188
196
|
handleContextMenu(event);
|
|
189
197
|
}
|
|
190
198
|
},
|
|
199
|
+
onKeyDown: (event) => {
|
|
200
|
+
soleCandidate.props.onKeyDown?.(event);
|
|
201
|
+
if (!event.defaultPrevented) {
|
|
202
|
+
handleKeyboardTrigger(event);
|
|
203
|
+
}
|
|
204
|
+
},
|
|
191
205
|
className: cn(className, soleCandidate.props.className),
|
|
192
206
|
tabIndex: soleCandidate.props.tabIndex ?? 0,
|
|
207
|
+
role: soleCandidate.props.role ?? "button",
|
|
193
208
|
"aria-controls": open ? contentId : void 0,
|
|
194
209
|
"aria-expanded": open,
|
|
195
210
|
"aria-haspopup": "menu"
|
|
@@ -200,8 +215,10 @@ var ContextMenuTrigger = ({
|
|
|
200
215
|
{
|
|
201
216
|
ref: triggerRef,
|
|
202
217
|
className,
|
|
218
|
+
role: "button",
|
|
203
219
|
tabIndex: 0,
|
|
204
220
|
onContextMenu: handleContextMenu,
|
|
221
|
+
onKeyDown: handleKeyboardTrigger,
|
|
205
222
|
"aria-controls": open ? contentId : void 0,
|
|
206
223
|
"aria-expanded": open,
|
|
207
224
|
"aria-haspopup": "menu",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/context-menu/variants.ts","../../src/ui/context-menu/context-menu.tsx"],"names":[],"mappings":";;;;;;;;;AASO,IAAM,0BAAA,GAA6B,IAAI,yBAAA,EAA2B;AAAA,EACvE,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;AAEM,IAAM,uBAAA,GAA0B,IAAI,sBAAA,EAAwB;AAAA,EACjE,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;ACwBD,IAAM,kBAAA,GAAqB,cAA6C,IAAI,CAAA;AAC5E,IAAM,qBAAA,GAAwB,aAAA;AAAA,EAC5B;AACF,CAAA;AAEA,IAAM,iBAAiB,MAAM;AAC3B,EAAA,MAAM,OAAA,GAAU,WAAW,kBAAkB,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,IAAM,oBAAoB,MAAM;AAC9B,EAAA,MAAM,OAAA,GAAU,WAAW,qBAAqB,CAAA;AAChD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,SAAS,aAAgB,IAAA,EAAiC;AACxD,EAAA,OAAO,CAAC,IAAA,KAAY;AAClB,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,QAAA,GAAA,CAAI,IAAI,CAAA;AAAA,MACV,WAAW,GAAA,EAAK;AACd,QAAC,IAA4B,OAAA,GAAU,IAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAA4B;AAC1B,EAAA,MAAM,WAAW,QAAA,IAAY,EAAE,CAAA,EAAG,gBAAA,EAAkB,GAAG,gBAAA,EAAiB;AAExE,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,GAAA;AAAA,MACN,gBAAA;AAAA,MACA,KAAK,GAAA,CAAI,QAAA,CAAS,GAAG,MAAA,CAAO,UAAA,GAAa,QAAQ,gBAAgB;AAAA,KACnE;AAAA,IACA,GAAG,IAAA,CAAK,GAAA;AAAA,MACN,gBAAA;AAAA,MACA,KAAK,GAAA,CAAI,QAAA,CAAS,GAAG,MAAA,CAAO,WAAA,GAAc,SAAS,gBAAgB;AAAA;AACrE,GACF;AACF,CAAA;AAEO,IAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,YAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,mBAAA,GAAsB;AACxB,CAAA,KAAwB;AACtB,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,WAAW,CAAA;AACpE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAqC,IAAI,CAAA;AACzE,EAAA,MAAM,SAAA,GAAY,CAAA,EAAG,KAAA,EAAO,CAAA,aAAA,CAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,OAA2B,IAAI,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AAErD,EAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,EAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,gBAAA;AAE7C,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACd,CAAC,QAAA,KAAsB;AACrB,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,MAC9B;AACA,MAAA,YAAA,GAAe,QAAQ,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC7B;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IACb,CAAC,YAAA,KAAsC;AACrC,MAAA,WAAA,CAAY,YAAY,CAAA;AACxB,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,MAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,WAAW,OAAA,EAAS,QAAA,CAAS,MAAM,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC9D,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAoC;AACrD,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,aAAA,EAAe;AAC3C,QAAA,OAAA,CAAQ,KAAK,CAAA;AACb,QAAA,UAAA,CAAW,SAAS,KAAA,EAAM;AAAA,MAC5B;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,eAAe,aAAa,CAAA;AACtD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,QAAA,CAAS,iBAAiB,QAAA,EAAU,QAAA,EAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AAE/D,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACzD,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AACjD,MAAA,QAAA,CAAS,oBAAoB,QAAA,EAAU,QAAA,EAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AAAA,IACpE,CAAA;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,mBAAA,EAAqB,IAAA,EAAM,OAAO,CAAC,CAAA;AAEtD,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,OAAO;AAAA,MACL,IAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,SAAS,QAAQ;AAAA,GAC7C;AAEA,EAAA,uBACE,GAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,YAAA,EAClC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,QAAA,EAAS,CAAA,EACtC,CAAA;AAEJ;AAEO,IAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAA+B;AAC7B,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,UAAA,KAAe,cAAA,EAAe;AAE/D,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAmC;AAC5D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,OAAA,KAAY,CAAA,IAAK,MAAM,OAAA,KAAY,CAAA;AACnE,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,CAAc,qBAAA,EAAsB;AACvD,MAAA,MAAA,CAAO,EAAE,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,EAAE,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA;AAAA,IAC3C,CAAC,IAAA,KAAS,IAAA,KAAS,QAAQ,IAAA,KAAS,MAAA,IAAa,OAAO,IAAA,KAAS;AAAA,GACnE;AACA,EAAA,MAAM,aAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,cAAA,CAAe,SAAA,CAAU,CAAC,CAAC,CAAA,GAChD,SAAA,CAAU,CAAC,CAAA,GACZ,MAAA;AAEN,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAO,aAAa,aAAA,EAAe;AAAA,MACjC,GAAA,EAAK,SAAA,CAAU,UAAA,EAAY,aAAA,CAAc,MAAM,GAAG,CAAA;AAAA,MAClD,aAAA,EAAe,CAAC,KAAA,KAAU;AACxB,QAAA,aAAA,CAAc,KAAA,CAAM,gBAAgB,KAAK,CAAA;AACzC,QAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,UAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,QACzB;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,aAAA,CAAc,MAAM,SAAS,CAAA;AAAA,MACtD,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,IAAY,CAAA;AAAA,MAC1C,eAAA,EAAiB,OAAO,SAAA,GAAY,MAAA;AAAA,MACpC,eAAA,EAAiB,IAAA;AAAA,MACjB,eAAA,EAAiB;AAAA,KAClB,CAAA;AAAA,EACH;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA;AAAA,MACA,QAAA,EAAU,CAAA;AAAA,MACV,aAAA,EAAe,iBAAA;AAAA,MACf,eAAA,EAAe,OAAO,SAAA,GAAY,MAAA;AAAA,MAClC,eAAA,EAAe,IAAA;AAAA,MACf,eAAA,EAAc,MAAA;AAAA,MAEb;AAAA;AAAA,GACH;AAEJ;AAEO,IAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,GAAmB,CAAA;AAAA,EACnB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR,GAAG;AACL,CAAA,KAA+B;AAC7B,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY,QAAA,KAAa,cAAA,EAAe;AACjE,EAAA,MAAM,CAAC,UAAU,WAAW,CAAA,GAAI,SAAS,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,EAAG,CAAA;AAE7D,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,UAAA,CAAW,OAAA,EAAS;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAsB;AACtD,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,MACjC,QAAQ,IAAA,CAAK;AAAA,KACf;AAEA,IAAA,WAAA;AAAA,MAAY,CAAC,WAAA,KACX,WAAA,CAAY,KAAA,KAAU,QAAA,CAAS,SAC/B,WAAA,CAAY,MAAA,KAAW,QAAA,CAAS,MAAA,GAC5B,WAAA,GACA;AAAA,KACN;AAAA,EACF,CAAC,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,WAAA,CAAY,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,EAAG,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA;AAEhB,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAe,eAAA,CAAgB;AAAA,IACnC,QAAA;AAAA,IACA,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,EAAA,EAAI,SAAA;AAAA,MACJ,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0BAAA,CAA2B,EAAE,OAAA,EAAS,CAAA;AAAA,QACtC,YAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO;AAAA,QACL,MAAM,YAAA,CAAa,CAAA;AAAA,QACnB,KAAK,YAAA,CAAa,CAAA;AAAA,QAClB,QAAA,EAAU,KAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEO,IAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA4B;AAC1B,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,cAAA,EAAe;AAEnC,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA;AAAA,IACF;AACA,IAAA,QAAA,IAAW;AACX,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyC;AAC9D,IAAA,SAAA,GAAY,KAAK,CAAA;AACjB,IAAA,IAAI,KAAA,CAAM,oBAAoB,QAAA,EAAU;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC9C,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,YAAA,EAAa;AAAA,IACf;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,QAAA,EAAU,WAAW,MAAA,GAAY,CAAA;AAAA,MACjC,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,SAAA,EAAW,EAAA;AAAA,QACT,uBAAA,CAAwB,EAAE,OAAA,EAAS,CAAA;AAAA,QACnC,KAAA,IAAS,MAAA;AAAA,QACT,QAAA,IAAY,mDAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,UAAA,YAAA,EAAa;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,SAAA,EACvC,CAAA;AAAA,QACC,4BACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAA0B,qBAAU,CAAA,GACjD;AAAA;AAAA;AAAA,GACN;AAEJ;AAEO,IAAM,mBAAmB,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,GAAG;AACL,CAAA,KAA6B;AAC3B,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,KAAA,IAAS,QAAQ,SAAS,CAAA;AAAA,MAChE,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEO,IAAM,uBAAuB,CAAC;AAAA,EACnC,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAiC;AAC/B,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,WAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,2BAAA,EAA6B,SAAS,CAAA;AAAA,MACnD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,KAA2B;AACzB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,WAAW,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,QAAQ,OAAO,EAAE,MAAM,OAAA,EAAQ,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA;AAEvD,EAAA,uBACE,GAAA,CAAC,qBAAA,CAAsB,QAAA,EAAtB,EAA+B,OAC9B,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,gBAAgB,MAAM,OAAA,CAAQ,KAAK,CAAA,EAC1D,UACH,CAAA,EACF,CAAA;AAEJ;AAEO,IAAM,wBAAwB,CAAC;AAAA,EACpC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,KAAA;AAAA,EACR,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA,mBAAY,GAAA,CAAC,cAAA,EAAA,EAAe,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,EAC/C,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAkC;AAChC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,iBAAA,EAAkB;AAE5C,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,QAAA,EAAU,WAAW,MAAA,GAAY,CAAA;AAAA,MACjC,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,eAAA,EAAe,IAAA;AAAA,MACf,eAAA,EAAc,MAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA,QACT,uBAAA,CAAwB,EAAE,OAAA,EAAS,CAAA;AAAA,QACnC,KAAA,IAAS,MAAA;AAAA,QACT,QAAA,IAAY,mDAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,OAAA,GAAU,KAAK,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,cAAA,EAAgB,CAAC,KAAA,KAAU;AACzB,QAAA,cAAA,GAAiB,KAAK,CAAA;AACtB,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AAAA,MACF,CAAA;AAAA,MACA,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,QAAA,SAAA,GAAY,KAAK,CAAA;AACjB,QAAA,IAAI,KAAA,CAAM,oBAAoB,QAAA,EAAU;AACtC,UAAA;AAAA,QACF;AACA,QAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,YAAA,IAAgB,KAAA,CAAM,QAAQ,OAAA,EAAS;AACvD,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd;AACA,QAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,MACF,CAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACb,QAAA,kBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,UAAA,EAAY,UAAS,CAAA,EACvC,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,SAAA,EAAU;AAAA;AAAA;AAAA,GACrD;AAEJ;AAEO,IAAM,wBAAwB,CAAC;AAAA,EACpC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAkC;AAChC,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,iBAAA,EAAkB;AAEnC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0BAAA,CAA2B,EAAE,OAAA,EAAS,CAAA;AAAA,QACtC,oCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ","file":"context-menu.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiContextMenuContentBase,\n zuiContextMenuItemBase,\n zuiContextMenuItemVariants,\n zuiContextMenuSpacing,\n} from \"../../design-system/context-menu\";\n\nexport const contextMenuContentVariants = cva(zuiContextMenuContentBase, {\n variants: {\n spacing: zuiContextMenuSpacing,\n },\n defaultVariants: {\n spacing: \"default\",\n },\n});\n\nexport const contextMenuItemVariants = cva(zuiContextMenuItemBase, {\n variants: {\n variant: zuiContextMenuItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type Ref,\n type RefObject,\n} from \"react\";\nimport { FiChevronRight } from \"react-icons/fi\";\n\nimport {\n zuiContextMenuLabelBase,\n zuiContextMenuSeparatorBase,\n} from \"../../design-system/context-menu\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n ContextMenuContentProps,\n ContextMenuContextType,\n ContextMenuItemProps,\n ContextMenuLabelProps,\n ContextMenuPosition,\n ContextMenuProps,\n ContextMenuSeparatorProps,\n ContextMenuSubContentProps,\n ContextMenuSubContextType,\n ContextMenuSubProps,\n ContextMenuSubTriggerProps,\n ContextMenuTriggerProps,\n GetSafePositionProps,\n ReactChildSoleCandidate,\n} from \"./types\";\nimport {\n contextMenuContentVariants,\n contextMenuItemVariants,\n} from \"./variants\";\n\nconst ContextMenuContext = createContext<ContextMenuContextType | null>(null);\nconst ContextMenuSubContext = createContext<ContextMenuSubContextType | null>(\n null,\n);\n\nconst useContextMenu = () => {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error(\"ContextMenu components must be used within ContextMenu\");\n }\n return context;\n};\n\nconst useContextMenuSub = () => {\n const context = useContext(ContextMenuSubContext);\n if (!context) {\n throw new Error(\n \"ContextMenuSub components must be used within ContextMenuSub\",\n );\n }\n return context;\n};\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as RefObject<T | null>).current = node;\n }\n }\n };\n}\n\nconst getSafePosition = ({\n position,\n width,\n height,\n collisionPadding,\n}: GetSafePositionProps) => {\n const fallback = position ?? { x: collisionPadding, y: collisionPadding };\n\n if (typeof window === \"undefined\") {\n return fallback;\n }\n\n return {\n x: Math.max(\n collisionPadding,\n Math.min(fallback.x, window.innerWidth - width - collisionPadding),\n ),\n y: Math.max(\n collisionPadding,\n Math.min(fallback.y, window.innerHeight - height - collisionPadding),\n ),\n };\n};\n\nexport const ContextMenu = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n closeOnEscape = true,\n closeOnOutsideClick = true,\n}: ContextMenuProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [position, setPosition] = useState<ContextMenuPosition | null>(null);\n const contentId = `${useId()}-context-menu`;\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const openAt = useCallback(\n (nextPosition: ContextMenuPosition) => {\n setPosition(nextPosition);\n setOpen(true);\n },\n [setOpen],\n );\n\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!closeOnOutsideClick) {\n return;\n }\n const target = event.target as Node;\n if (contentRef.current?.contains(target)) {\n return;\n }\n if (triggerRef.current?.contains(target) && event.button !== 0) {\n return;\n }\n setOpen(false);\n };\n\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n const onScroll = () => {\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"scroll\", onScroll, { capture: true });\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"scroll\", onScroll, { capture: true });\n };\n }, [closeOnEscape, closeOnOutsideClick, open, setOpen]);\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen,\n openAt,\n contentId,\n triggerRef,\n contentRef,\n position,\n }),\n [contentId, open, openAt, setOpen, position],\n );\n\n return (\n <ContextMenuContext.Provider value={contextValue}>\n <div className=\"contents\">{children}</div>\n </ContextMenuContext.Provider>\n );\n};\n\nexport const ContextMenuTrigger = ({\n children,\n className,\n disabled = false,\n}: ContextMenuTriggerProps) => {\n const { open, openAt, contentId, triggerRef } = useContextMenu();\n\n const handleContextMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const isKeyboardTrigger = event.clientX === 0 && event.clientY === 0;\n if (isKeyboardTrigger) {\n const rect = event.currentTarget.getBoundingClientRect();\n openAt({ x: rect.left, y: rect.bottom });\n } else {\n openAt({ x: event.clientX, y: event.clientY });\n }\n };\n const childList = Children.toArray(children).filter(\n (node) => node !== null && node !== undefined && typeof node !== \"boolean\",\n );\n const soleCandidate =\n childList.length === 1 && isValidElement(childList[0])\n ? (childList[0] as ReactChildSoleCandidate)\n : undefined;\n\n if (soleCandidate) {\n return cloneElement(soleCandidate, {\n ref: mergeRefs(triggerRef, soleCandidate.props.ref),\n onContextMenu: (event) => {\n soleCandidate.props.onContextMenu?.(event);\n if (!event.defaultPrevented) {\n handleContextMenu(event);\n }\n },\n className: cn(className, soleCandidate.props.className),\n tabIndex: soleCandidate.props.tabIndex ?? 0,\n \"aria-controls\": open ? contentId : undefined,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n });\n }\n\n return (\n <span\n ref={triggerRef as Ref<HTMLSpanElement>}\n className={className}\n tabIndex={0}\n onContextMenu={handleContextMenu}\n aria-controls={open ? contentId : undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n >\n {children}\n </span>\n );\n};\n\nexport const ContextMenuContent = ({\n children,\n className,\n collisionPadding = 8,\n spacing,\n style,\n width = 220,\n ...props\n}: ContextMenuContentProps) => {\n const { open, contentId, contentRef, position } = useContextMenu();\n const [menuSize, setMenuSize] = useState({ width, height: 0 });\n\n useLayoutEffect(() => {\n if (!open || !contentRef.current) {\n return;\n }\n\n const rect = contentRef.current.getBoundingClientRect();\n const nextSize = {\n width: Math.max(width, rect.width),\n height: rect.height,\n };\n\n setMenuSize((currentSize) =>\n currentSize.width === nextSize.width &&\n currentSize.height === nextSize.height\n ? currentSize\n : nextSize,\n );\n });\n\n useEffect(() => {\n if (!open) {\n setMenuSize({ width, height: 0 });\n }\n }, [open, width]);\n\n if (!open) {\n return null;\n }\n\n const safePosition = getSafePosition({\n position,\n width: menuSize.width,\n height: menuSize.height,\n collisionPadding,\n });\n\n return (\n <div\n ref={contentRef}\n id={contentId}\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"fixed z-50\",\n className,\n )}\n style={{\n left: safePosition.x,\n top: safePosition.y,\n minWidth: width,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport const ContextMenuItem = ({\n children,\n className,\n closeOnSelect = true,\n disabled = false,\n inset = false,\n leftIcon,\n onClick,\n onKeyDown,\n onSelect,\n rightIcon,\n variant,\n ...props\n}: ContextMenuItemProps) => {\n const { setOpen } = useContextMenu();\n\n const handleSelect = () => {\n if (disabled) {\n return;\n }\n onSelect?.();\n if (closeOnSelect) {\n setOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSelect();\n }\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleSelect();\n }\n }}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {leftIcon}\n <span className=\"truncate\">{children}</span>\n </div>\n {rightIcon ? (\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n ) : null}\n </div>\n );\n};\n\nexport const ContextMenuLabel = ({\n children,\n className,\n inset = false,\n ...props\n}: ContextMenuLabelProps) => {\n return (\n <p\n className={cn(zuiContextMenuLabelBase, inset && \"pl-8\", className)}\n {...props}\n >\n {children}\n </p>\n );\n};\n\nexport const ContextMenuSeparator = ({\n className,\n ...props\n}: ContextMenuSeparatorProps) => {\n return (\n <div\n role=\"separator\"\n className={cn(zuiContextMenuSeparatorBase, className)}\n {...props}\n />\n );\n};\n\nexport const ContextMenuSub = ({\n children,\n defaultOpen = false,\n}: ContextMenuSubProps) => {\n const [open, setOpen] = useState(defaultOpen);\n const value = useMemo(() => ({ open, setOpen }), [open]);\n\n return (\n <ContextMenuSubContext.Provider value={value}>\n <div className=\"relative\" onPointerLeave={() => setOpen(false)}>\n {children}\n </div>\n </ContextMenuSubContext.Provider>\n );\n};\n\nexport const ContextMenuSubTrigger = ({\n children,\n className,\n disabled = false,\n inset = false,\n onFocus,\n onKeyDown,\n onPointerEnter,\n rightIcon = <FiChevronRight aria-hidden=\"true\" />,\n variant,\n ...props\n}: ContextMenuSubTriggerProps) => {\n const { open, setOpen } = useContextMenuSub();\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onPointerEnter={(event) => {\n onPointerEnter?.(event);\n if (!disabled) {\n setOpen(true);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"ArrowRight\" || event.key === \"Enter\") {\n event.preventDefault();\n setOpen(true);\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setOpen(false);\n }\n }}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{children}</span>\n </div>\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n </div>\n );\n};\n\nexport const ContextMenuSubContent = ({\n children,\n className,\n spacing,\n ...props\n}: ContextMenuSubContentProps) => {\n const { open } = useContextMenuSub();\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"absolute left-full top-0 z-50 ml-2\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/context-menu/variants.ts","../../src/ui/context-menu/context-menu.tsx"],"names":[],"mappings":"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","file":"context-menu.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiContextMenuContentBase,\n zuiContextMenuItemBase,\n zuiContextMenuItemVariants,\n zuiContextMenuSpacing,\n} from \"../../design-system/context-menu\";\n\nexport const contextMenuContentVariants = cva(zuiContextMenuContentBase, {\n variants: {\n spacing: zuiContextMenuSpacing,\n },\n defaultVariants: {\n spacing: \"default\",\n },\n});\n\nexport const contextMenuItemVariants = cva(zuiContextMenuItemBase, {\n variants: {\n variant: zuiContextMenuItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type Ref,\n type RefObject,\n} from \"react\";\nimport { FiChevronRight } from \"react-icons/fi\";\n\nimport {\n zuiContextMenuLabelBase,\n zuiContextMenuSeparatorBase,\n} from \"../../design-system/context-menu\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n ContextMenuContentProps,\n ContextMenuContextType,\n ContextMenuItemProps,\n ContextMenuLabelProps,\n ContextMenuPosition,\n ContextMenuProps,\n ContextMenuSeparatorProps,\n ContextMenuSubContentProps,\n ContextMenuSubContextType,\n ContextMenuSubProps,\n ContextMenuSubTriggerProps,\n ContextMenuTriggerProps,\n GetSafePositionProps,\n ReactChildSoleCandidate,\n} from \"./types\";\nimport {\n contextMenuContentVariants,\n contextMenuItemVariants,\n} from \"./variants\";\n\nconst ContextMenuContext = createContext<ContextMenuContextType | null>(null);\nconst ContextMenuSubContext = createContext<ContextMenuSubContextType | null>(\n null,\n);\n\nconst useContextMenu = () => {\n const context = useContext(ContextMenuContext);\n if (!context) {\n throw new Error(\"ContextMenu components must be used within ContextMenu\");\n }\n return context;\n};\n\nconst useContextMenuSub = () => {\n const context = useContext(ContextMenuSubContext);\n if (!context) {\n throw new Error(\n \"ContextMenuSub components must be used within ContextMenuSub\",\n );\n }\n return context;\n};\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>) {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as RefObject<T | null>).current = node;\n }\n }\n };\n}\n\nconst getSafePosition = ({\n position,\n width,\n height,\n collisionPadding,\n}: GetSafePositionProps) => {\n const fallback = position ?? { x: collisionPadding, y: collisionPadding };\n\n if (typeof window === \"undefined\") {\n return fallback;\n }\n\n return {\n x: Math.max(\n collisionPadding,\n Math.min(fallback.x, window.innerWidth - width - collisionPadding),\n ),\n y: Math.max(\n collisionPadding,\n Math.min(fallback.y, window.innerHeight - height - collisionPadding),\n ),\n };\n};\n\nexport const ContextMenu = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n closeOnEscape = true,\n closeOnOutsideClick = true,\n}: ContextMenuProps) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [position, setPosition] = useState<ContextMenuPosition | null>(null);\n const contentId = `${useId()}-context-menu`;\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const openAt = useCallback(\n (nextPosition: ContextMenuPosition) => {\n setPosition(nextPosition);\n setOpen(true);\n },\n [setOpen],\n );\n\n useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!closeOnOutsideClick) {\n return;\n }\n const target = event.target as Node;\n if (contentRef.current?.contains(target)) {\n return;\n }\n if (triggerRef.current?.contains(target) && event.button !== 0) {\n return;\n }\n setOpen(false);\n };\n\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n const onScroll = () => {\n setOpen(false);\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"scroll\", onScroll, { capture: true });\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"scroll\", onScroll, { capture: true });\n };\n }, [closeOnEscape, closeOnOutsideClick, open, setOpen]);\n\n const contextValue = useMemo(\n () => ({\n open,\n setOpen,\n openAt,\n contentId,\n triggerRef,\n contentRef,\n position,\n }),\n [contentId, open, openAt, setOpen, position],\n );\n\n return (\n <ContextMenuContext.Provider value={contextValue}>\n <div className=\"contents\">{children}</div>\n </ContextMenuContext.Provider>\n );\n};\n\nexport const ContextMenuTrigger = ({\n children,\n className,\n disabled = false,\n}: ContextMenuTriggerProps) => {\n const { open, openAt, contentId, triggerRef } = useContextMenu();\n\n const handleContextMenu = (event: MouseEvent<HTMLElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const isKeyboardTrigger = event.clientX === 0 && event.clientY === 0;\n if (isKeyboardTrigger) {\n const rect = event.currentTarget.getBoundingClientRect();\n openAt({ x: rect.left, y: rect.bottom });\n } else {\n openAt({ x: event.clientX, y: event.clientY });\n }\n };\n const handleKeyboardTrigger = (event: KeyboardEvent<HTMLElement>) => {\n if (disabled || (event.key !== \"Enter\" && event.key !== \" \")) {\n return;\n }\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n openAt({ x: rect.left, y: rect.bottom });\n };\n const childList = Children.toArray(children).filter(\n (node) => node !== null && node !== undefined && typeof node !== \"boolean\",\n );\n const soleCandidate =\n childList.length === 1 && isValidElement(childList[0])\n ? (childList[0] as ReactChildSoleCandidate)\n : undefined;\n\n if (soleCandidate) {\n return cloneElement(soleCandidate, {\n ref: mergeRefs(triggerRef, soleCandidate.props.ref),\n onContextMenu: (event) => {\n soleCandidate.props.onContextMenu?.(event);\n if (!event.defaultPrevented) {\n handleContextMenu(event);\n }\n },\n onKeyDown: (event) => {\n soleCandidate.props.onKeyDown?.(event);\n if (!event.defaultPrevented) {\n handleKeyboardTrigger(event);\n }\n },\n className: cn(className, soleCandidate.props.className),\n tabIndex: soleCandidate.props.tabIndex ?? 0,\n role: soleCandidate.props.role ?? \"button\",\n \"aria-controls\": open ? contentId : undefined,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n });\n }\n\n return (\n <span\n ref={triggerRef as Ref<HTMLSpanElement>}\n className={className}\n role=\"button\"\n tabIndex={0}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyboardTrigger}\n aria-controls={open ? contentId : undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n >\n {children}\n </span>\n );\n};\n\nexport const ContextMenuContent = ({\n children,\n className,\n collisionPadding = 8,\n spacing,\n style,\n width = 220,\n ...props\n}: ContextMenuContentProps) => {\n const { open, contentId, contentRef, position } = useContextMenu();\n const [menuSize, setMenuSize] = useState({ width, height: 0 });\n\n useLayoutEffect(() => {\n if (!open || !contentRef.current) {\n return;\n }\n\n const rect = contentRef.current.getBoundingClientRect();\n const nextSize = {\n width: Math.max(width, rect.width),\n height: rect.height,\n };\n\n setMenuSize((currentSize) =>\n currentSize.width === nextSize.width &&\n currentSize.height === nextSize.height\n ? currentSize\n : nextSize,\n );\n });\n\n useEffect(() => {\n if (!open) {\n setMenuSize({ width, height: 0 });\n }\n }, [open, width]);\n\n if (!open) {\n return null;\n }\n\n const safePosition = getSafePosition({\n position,\n width: menuSize.width,\n height: menuSize.height,\n collisionPadding,\n });\n\n return (\n <div\n ref={contentRef}\n id={contentId}\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"fixed z-50\",\n className,\n )}\n style={{\n left: safePosition.x,\n top: safePosition.y,\n minWidth: width,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport const ContextMenuItem = ({\n children,\n className,\n closeOnSelect = true,\n disabled = false,\n inset = false,\n leftIcon,\n onClick,\n onKeyDown,\n onSelect,\n rightIcon,\n variant,\n ...props\n}: ContextMenuItemProps) => {\n const { setOpen } = useContextMenu();\n\n const handleSelect = () => {\n if (disabled) {\n return;\n }\n onSelect?.();\n if (closeOnSelect) {\n setOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSelect();\n }\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleSelect();\n }\n }}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {leftIcon}\n <span className=\"truncate\">{children}</span>\n </div>\n {rightIcon ? (\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n ) : null}\n </div>\n );\n};\n\nexport const ContextMenuLabel = ({\n children,\n className,\n inset = false,\n ...props\n}: ContextMenuLabelProps) => {\n return (\n <p\n className={cn(zuiContextMenuLabelBase, inset && \"pl-8\", className)}\n {...props}\n >\n {children}\n </p>\n );\n};\n\nexport const ContextMenuSeparator = ({\n className,\n ...props\n}: ContextMenuSeparatorProps) => {\n return (\n <div\n role=\"separator\"\n className={cn(zuiContextMenuSeparatorBase, className)}\n {...props}\n />\n );\n};\n\nexport const ContextMenuSub = ({\n children,\n defaultOpen = false,\n}: ContextMenuSubProps) => {\n const [open, setOpen] = useState(defaultOpen);\n const value = useMemo(() => ({ open, setOpen }), [open]);\n\n return (\n <ContextMenuSubContext.Provider value={value}>\n <div className=\"relative\" onPointerLeave={() => setOpen(false)}>\n {children}\n </div>\n </ContextMenuSubContext.Provider>\n );\n};\n\nexport const ContextMenuSubTrigger = ({\n children,\n className,\n disabled = false,\n inset = false,\n onFocus,\n onKeyDown,\n onPointerEnter,\n rightIcon = <FiChevronRight aria-hidden=\"true\" />,\n variant,\n ...props\n}: ContextMenuSubTriggerProps) => {\n const { open, setOpen } = useContextMenuSub();\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={disabled ? undefined : 0}\n aria-disabled={disabled || undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n contextMenuItemVariants({ variant }),\n inset && \"pl-8\",\n disabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n onFocus={(event) => {\n onFocus?.(event);\n }}\n onPointerEnter={(event) => {\n onPointerEnter?.(event);\n if (!disabled) {\n setOpen(true);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) {\n return;\n }\n if (event.key === \"ArrowRight\" || event.key === \"Enter\") {\n event.preventDefault();\n setOpen(true);\n }\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n setOpen(false);\n }\n }}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{children}</span>\n </div>\n <div className=\"ml-4 flex items-center\">{rightIcon}</div>\n </div>\n );\n};\n\nexport const ContextMenuSubContent = ({\n children,\n className,\n spacing,\n ...props\n}: ContextMenuSubContentProps) => {\n const { open } = useContextMenuSub();\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n role=\"menu\"\n tabIndex={-1}\n className={cn(\n contextMenuContentVariants({ spacing }),\n \"absolute left-full top-0 z-50 ml-2\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
|
|
@@ -2,5 +2,5 @@ import type { DropdownProps, DropdownTriggerProps, DropdownContentProps, Dropdow
|
|
|
2
2
|
export declare const Dropdown: ({ children, defaultOpen, open: controlledOpen, onOpenChange, multiSelect, }: DropdownProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export declare const DropdownTrigger: ({ children, className, variant, size, onClick, ...props }: DropdownTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export declare const DropdownContent: ({ children, className, placement, spacing, divider, ...props }: DropdownContentProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
5
|
-
export declare const DropdownItem: ({ children, value, className, variant, onSelect, leftIcon, rightIcon, ...props }: DropdownItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare const DropdownItem: ({ children, value, className, variant, onClick, onKeyDown, onSelect, leftIcon, rightIcon, ...props }: DropdownItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
//# sourceMappingURL=dropdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAkBjB,eAAO,MAAM,QAAQ,GAAI,6EAMtB,aAAa,4CA4Cf,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,2DAO7B,oBAAoB,4CAqBtB,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,gEAO7B,oBAAoB,mDAgCtB,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,sGAW1B,iBAAiB,4CAgFnB,CAAC"}
|
package/dist/ui/dropdown.js
CHANGED
|
@@ -128,6 +128,12 @@ var DropdownContent = ({
|
|
|
128
128
|
const { open, setOpen, menuId } = useDropdown();
|
|
129
129
|
const ref = react.useRef(null);
|
|
130
130
|
chunk7DCFVPWN_js.useClickOutside({ ref, setOpen });
|
|
131
|
+
react.useEffect(() => {
|
|
132
|
+
if (!open) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
ref.current?.querySelector('[role="menuitem"]')?.focus();
|
|
136
|
+
}, [open]);
|
|
131
137
|
if (!open) return null;
|
|
132
138
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
133
139
|
"div",
|
|
@@ -150,6 +156,8 @@ var DropdownItem = ({
|
|
|
150
156
|
value,
|
|
151
157
|
className,
|
|
152
158
|
variant,
|
|
159
|
+
onClick,
|
|
160
|
+
onKeyDown,
|
|
153
161
|
onSelect,
|
|
154
162
|
leftIcon,
|
|
155
163
|
rightIcon,
|
|
@@ -161,16 +169,49 @@ var DropdownItem = ({
|
|
|
161
169
|
toggleSelect(value);
|
|
162
170
|
onSelect?.();
|
|
163
171
|
};
|
|
172
|
+
const focusSiblingItem = (event, direction) => {
|
|
173
|
+
const menu = event.currentTarget.closest('[role="menu"]');
|
|
174
|
+
const items = Array.from(
|
|
175
|
+
menu?.querySelectorAll('[role="menuitem"]') ?? []
|
|
176
|
+
);
|
|
177
|
+
const currentIndex = items.indexOf(event.currentTarget);
|
|
178
|
+
if (currentIndex === -1 || items.length === 0) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const nextIndex = direction === "first" ? 0 : direction === "last" ? items.length - 1 : (currentIndex + (direction === "next" ? 1 : -1) + items.length) % items.length;
|
|
182
|
+
items[nextIndex]?.focus();
|
|
183
|
+
};
|
|
164
184
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
165
185
|
"div",
|
|
166
186
|
{
|
|
167
187
|
role: "menuitem",
|
|
168
|
-
tabIndex:
|
|
169
|
-
onClick:
|
|
188
|
+
tabIndex: -1,
|
|
189
|
+
onClick: (event) => {
|
|
190
|
+
onClick?.(event);
|
|
191
|
+
if (!event.defaultPrevented) {
|
|
192
|
+
handleClick();
|
|
193
|
+
}
|
|
194
|
+
},
|
|
170
195
|
onKeyDown: (e) => {
|
|
196
|
+
onKeyDown?.(e);
|
|
197
|
+
if (e.defaultPrevented) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
171
200
|
if (e.key === "Enter" || e.key === " ") {
|
|
172
201
|
e.preventDefault();
|
|
173
202
|
handleClick();
|
|
203
|
+
} else if (e.key === "ArrowDown") {
|
|
204
|
+
e.preventDefault();
|
|
205
|
+
focusSiblingItem(e, "next");
|
|
206
|
+
} else if (e.key === "ArrowUp") {
|
|
207
|
+
e.preventDefault();
|
|
208
|
+
focusSiblingItem(e, "previous");
|
|
209
|
+
} else if (e.key === "Home") {
|
|
210
|
+
e.preventDefault();
|
|
211
|
+
focusSiblingItem(e, "first");
|
|
212
|
+
} else if (e.key === "End") {
|
|
213
|
+
e.preventDefault();
|
|
214
|
+
focusSiblingItem(e, "last");
|
|
174
215
|
}
|
|
175
216
|
},
|
|
176
217
|
className: chunkZS5756ZC_js.cn(itemVariants({ variant }), className),
|