@particle-academy/react-fancy 5.60.2 → 5.61.1
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/CHANGELOG.md +81 -0
- package/dist/autocomplete.cjs +4 -3
- package/dist/autocomplete.js +3 -2
- package/dist/{chunk-EEMNTO7L.cjs → chunk-3DMVK74Q.cjs} +4 -4
- package/dist/{chunk-EEMNTO7L.cjs.map → chunk-3DMVK74Q.cjs.map} +1 -1
- package/dist/{chunk-M77BB2QI.cjs → chunk-3I6PE2US.cjs} +12 -12
- package/dist/{chunk-M77BB2QI.cjs.map → chunk-3I6PE2US.cjs.map} +1 -1
- package/dist/{chunk-TGBLDJ72.js → chunk-4FJWHVC7.js} +3 -3
- package/dist/{chunk-TGBLDJ72.js.map → chunk-4FJWHVC7.js.map} +1 -1
- package/dist/{chunk-EXQ33MJR.cjs → chunk-4HUD33OP.cjs} +4 -4
- package/dist/{chunk-EXQ33MJR.cjs.map → chunk-4HUD33OP.cjs.map} +1 -1
- package/dist/chunk-4JLFIPHZ.js +43 -0
- package/dist/chunk-4JLFIPHZ.js.map +1 -0
- package/dist/{chunk-YQTKTEWS.js → chunk-5JFA7NYE.js} +3 -3
- package/dist/{chunk-YQTKTEWS.js.map → chunk-5JFA7NYE.js.map} +1 -1
- package/dist/chunk-5VMILVWD.js +3 -0
- package/dist/chunk-5VMILVWD.js.map +1 -0
- package/dist/chunk-645CRPU6.cjs +53 -0
- package/dist/chunk-645CRPU6.cjs.map +1 -0
- package/dist/{chunk-DN244T6G.cjs → chunk-6GBO7R25.cjs} +4 -4
- package/dist/{chunk-DN244T6G.cjs.map → chunk-6GBO7R25.cjs.map} +1 -1
- package/dist/{chunk-4FZOH7BJ.js → chunk-74MEJWMH.js} +3 -3
- package/dist/{chunk-4FZOH7BJ.js.map → chunk-74MEJWMH.js.map} +1 -1
- package/dist/{chunk-4DGXL6JC.cjs → chunk-7KTBVKNO.cjs} +4 -4
- package/dist/{chunk-4DGXL6JC.cjs.map → chunk-7KTBVKNO.cjs.map} +1 -1
- package/dist/{chunk-XQDGUXMS.js → chunk-BHUSI56C.js} +3 -3
- package/dist/{chunk-XQDGUXMS.js.map → chunk-BHUSI56C.js.map} +1 -1
- package/dist/{chunk-VD3C7IA4.js → chunk-BLS2IGPY.js} +48 -13
- package/dist/chunk-BLS2IGPY.js.map +1 -0
- package/dist/{chunk-XAQQX7J2.cjs → chunk-BMVYOVSW.cjs} +48 -13
- package/dist/chunk-BMVYOVSW.cjs.map +1 -0
- package/dist/{chunk-UIE5FP3A.js → chunk-BQFPC5FL.js} +3 -3
- package/dist/{chunk-UIE5FP3A.js.map → chunk-BQFPC5FL.js.map} +1 -1
- package/dist/chunk-CHQH6M67.js +297 -0
- package/dist/chunk-CHQH6M67.js.map +1 -0
- package/dist/{chunk-UZG6LO4Z.cjs → chunk-FU6K7XXZ.cjs} +4 -4
- package/dist/{chunk-UZG6LO4Z.cjs.map → chunk-FU6K7XXZ.cjs.map} +1 -1
- package/dist/{chunk-5ZNOLPIJ.cjs → chunk-H2YRZYKK.cjs} +5 -5
- package/dist/{chunk-5ZNOLPIJ.cjs.map → chunk-H2YRZYKK.cjs.map} +1 -1
- package/dist/{chunk-7R7HENZG.cjs → chunk-HRYM76ZE.cjs} +9 -9
- package/dist/{chunk-7R7HENZG.cjs.map → chunk-HRYM76ZE.cjs.map} +1 -1
- package/dist/{chunk-ZGQEKDG6.js → chunk-IHQHTJNN.js} +5 -5
- package/dist/{chunk-ZGQEKDG6.js.map → chunk-IHQHTJNN.js.map} +1 -1
- package/dist/{chunk-6HJF55U7.js → chunk-IY6LVALS.js} +3 -3
- package/dist/{chunk-6HJF55U7.js.map → chunk-IY6LVALS.js.map} +1 -1
- package/dist/{chunk-HTNQ5XUR.cjs → chunk-J4FKJ4IR.cjs} +4 -4
- package/dist/{chunk-HTNQ5XUR.cjs.map → chunk-J4FKJ4IR.cjs.map} +1 -1
- package/dist/{chunk-43ZRUYJC.cjs → chunk-JOWAS5A5.cjs} +9 -9
- package/dist/{chunk-43ZRUYJC.cjs.map → chunk-JOWAS5A5.cjs.map} +1 -1
- package/dist/{chunk-JRRYYW3Y.cjs → chunk-K6NADZ7O.cjs} +6 -6
- package/dist/{chunk-JRRYYW3Y.cjs.map → chunk-K6NADZ7O.cjs.map} +1 -1
- package/dist/{chunk-5JA4ENMF.js → chunk-LMOPAY7Q.js} +3 -3
- package/dist/{chunk-5JA4ENMF.js.map → chunk-LMOPAY7Q.js.map} +1 -1
- package/dist/{chunk-DAJPPKPO.js → chunk-M52S3TFI.js} +3 -3
- package/dist/{chunk-DAJPPKPO.js.map → chunk-M52S3TFI.js.map} +1 -1
- package/dist/{chunk-GLGUQGAQ.cjs → chunk-M6MGQI6G.cjs} +4 -4
- package/dist/{chunk-GLGUQGAQ.cjs.map → chunk-M6MGQI6G.cjs.map} +1 -1
- package/dist/chunk-MKHYENKR.cjs +4 -0
- package/dist/chunk-MKHYENKR.cjs.map +1 -0
- package/dist/{chunk-NHGU2BWT.js → chunk-MSGKIWYX.js} +3 -3
- package/dist/{chunk-NHGU2BWT.js.map → chunk-MSGKIWYX.js.map} +1 -1
- package/dist/{chunk-KQYOIPHQ.js → chunk-N7KUGFRG.js} +4 -4
- package/dist/{chunk-KQYOIPHQ.js.map → chunk-N7KUGFRG.js.map} +1 -1
- package/dist/{chunk-XB3H2EEL.js → chunk-NDLESFUH.js} +3 -3
- package/dist/{chunk-XB3H2EEL.js.map → chunk-NDLESFUH.js.map} +1 -1
- package/dist/chunk-NFTTNFQR.js +51 -0
- package/dist/chunk-NFTTNFQR.js.map +1 -0
- package/dist/{chunk-XYOT75HH.js → chunk-NORVXHRU.js} +3 -3
- package/dist/{chunk-XYOT75HH.js.map → chunk-NORVXHRU.js.map} +1 -1
- package/dist/{chunk-5H6IUCOD.cjs → chunk-P6V4QWJK.cjs} +4 -4
- package/dist/{chunk-5H6IUCOD.cjs.map → chunk-P6V4QWJK.cjs.map} +1 -1
- package/dist/{chunk-LZHGXRFD.js → chunk-PKFEJWVI.js} +3 -3
- package/dist/{chunk-LZHGXRFD.js.map → chunk-PKFEJWVI.js.map} +1 -1
- package/dist/{chunk-BJKKW77L.cjs → chunk-QXMQVLRQ.cjs} +4 -4
- package/dist/{chunk-BJKKW77L.cjs.map → chunk-QXMQVLRQ.cjs.map} +1 -1
- package/dist/{chunk-WHEXTDPV.js → chunk-RBCMKPBX.js} +7 -5
- package/dist/chunk-RBCMKPBX.js.map +1 -0
- package/dist/{chunk-LVE6ERRS.cjs → chunk-RRMQGTVB.cjs} +6 -6
- package/dist/{chunk-LVE6ERRS.cjs.map → chunk-RRMQGTVB.cjs.map} +1 -1
- package/dist/{chunk-T67FLC55.js → chunk-SHF44YGG.js} +3 -3
- package/dist/{chunk-T67FLC55.js.map → chunk-SHF44YGG.js.map} +1 -1
- package/dist/{chunk-NBZC6LOB.cjs → chunk-TI7D4QDM.cjs} +6 -3
- package/dist/chunk-TI7D4QDM.cjs.map +1 -0
- package/dist/{chunk-5JK2VDWY.cjs → chunk-TYTENEJQ.cjs} +6 -6
- package/dist/{chunk-5JK2VDWY.cjs.map → chunk-TYTENEJQ.cjs.map} +1 -1
- package/dist/{chunk-WW56U3RV.js → chunk-UBEOB55O.js} +3 -3
- package/dist/{chunk-WW56U3RV.js.map → chunk-UBEOB55O.js.map} +1 -1
- package/dist/{chunk-M6XBF2ZS.js → chunk-UJZJBHMH.js} +3 -3
- package/dist/{chunk-M6XBF2ZS.js.map → chunk-UJZJBHMH.js.map} +1 -1
- package/dist/{chunk-T45LBTXH.js → chunk-ULG4OA2T.js} +3 -3
- package/dist/{chunk-T45LBTXH.js.map → chunk-ULG4OA2T.js.map} +1 -1
- package/dist/{chunk-SIEPD6NR.cjs → chunk-UM4JXBRZ.cjs} +4 -4
- package/dist/{chunk-SIEPD6NR.cjs.map → chunk-UM4JXBRZ.cjs.map} +1 -1
- package/dist/chunk-X6TGRSVH.cjs +299 -0
- package/dist/chunk-X6TGRSVH.cjs.map +1 -0
- package/dist/{chunk-FGI2EC32.cjs → chunk-Z5OTOYWI.cjs} +4 -4
- package/dist/{chunk-FGI2EC32.cjs.map → chunk-Z5OTOYWI.cjs.map} +1 -1
- package/dist/chunk-ZPBCZPMD.cjs +48 -0
- package/dist/chunk-ZPBCZPMD.cjs.map +1 -0
- package/dist/command.cjs +5 -4
- package/dist/command.js +3 -2
- package/dist/composer.cjs +7 -6
- package/dist/composer.js +5 -4
- package/dist/context-menu.cjs +5 -4
- package/dist/context-menu.js +3 -2
- package/dist/drawer.cjs +5 -4
- package/dist/drawer.js +3 -2
- package/dist/dropdown.cjs +5 -4
- package/dist/dropdown.js +3 -2
- package/dist/editor.cjs +8 -3
- package/dist/editor.d.cts +53 -4
- package/dist/editor.d.ts +53 -4
- package/dist/editor.js +6 -1
- package/dist/full-screen.cjs +39 -0
- package/dist/full-screen.cjs.map +1 -0
- package/dist/full-screen.d.cts +54 -0
- package/dist/full-screen.d.ts +54 -0
- package/dist/full-screen.js +10 -0
- package/dist/full-screen.js.map +1 -0
- package/dist/index.cjs +152 -120
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +35 -31
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +6 -5
- package/dist/input.js +5 -4
- package/dist/inputs.cjs +17 -16
- package/dist/inputs.js +9 -8
- package/dist/json-editor.cjs +19 -18
- package/dist/json-editor.js +8 -7
- package/dist/magic-wand.cjs +4 -3
- package/dist/magic-wand.js +3 -2
- package/dist/mobile-menu.cjs +6 -4
- package/dist/mobile-menu.js +4 -2
- package/dist/modal.cjs +5 -4
- package/dist/modal.js +3 -2
- package/dist/paste-pills.cjs +17 -16
- package/dist/paste-pills.js +4 -3
- package/dist/popover.cjs +5 -4
- package/dist/popover.js +3 -2
- package/dist/portal.cjs +7 -2
- package/dist/portal.d.cts +12 -1
- package/dist/portal.d.ts +12 -1
- package/dist/portal.js +2 -1
- package/dist/prompt-input.cjs +7 -6
- package/dist/prompt-input.js +6 -5
- package/dist/reason-tag.cjs +5 -4
- package/dist/reason-tag.js +4 -3
- package/dist/select.cjs +4 -3
- package/dist/select.js +3 -2
- package/dist/sidebar.cjs +1 -0
- package/dist/sidebar.js +1 -0
- package/dist/styles.css +9 -0
- package/dist/styles.css.map +1 -1
- package/dist/toast.cjs +5 -4
- package/dist/toast.js +3 -2
- package/dist/tooltip.cjs +4 -3
- package/dist/tooltip.js +3 -2
- package/dist/use-full-screen-BUJ1ujG4.d.cts +94 -0
- package/dist/use-full-screen-BUJ1ujG4.d.ts +94 -0
- package/docs/Editor.md +24 -0
- package/docs/FullScreen.md +106 -0
- package/package.json +11 -1
- package/dist/chunk-NBZC6LOB.cjs.map +0 -1
- package/dist/chunk-VD3C7IA4.js.map +0 -1
- package/dist/chunk-WHEXTDPV.js.map +0 -1
- package/dist/chunk-XAQQX7J2.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,87 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [5.61.1] - 2026-10-26
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **A full-screen surface now covers the viewport even when an ancestor has a
|
|
19
|
+
`transform`, `filter`, `perspective` or `contain: paint`.** Found while
|
|
20
|
+
dogfooding 5.61.0 in the showcase. A `FullScreen` inside a `Tabs` panel came
|
|
21
|
+
out as a 1248x95 box instead of the screen, because the panel's
|
|
22
|
+
`fancy-fade-in` animation, run with `animation-fill-mode: both`, kept
|
|
23
|
+
`transform: matrix(1, 0, 0, 1, 0, 0)` on the panel. That makes the panel the
|
|
24
|
+
box `position: fixed` is measured against. Transform-centred dialogs, the
|
|
25
|
+
usual way MOIC embeds editors, did the same. The overlay is now lifted into
|
|
26
|
+
the browser's top layer with `popover="manual"` + `showPopover()`, whose
|
|
27
|
+
containing block is always the viewport. It falls back to `position: fixed`
|
|
28
|
+
where the popover API does not exist. Measured in Chromium:
|
|
29
|
+
- Tabs panel: [300,359,1320,32] before, [0,0,1920,945] after.
|
|
30
|
+
- `translateX(0)`, `blur(0)` and `contain: paint` parents: confined to their
|
|
31
|
+
parent before, the viewport after.
|
|
32
|
+
- An Editor in a `Modal`, inside a transformed wrapper: 622x2 before, the
|
|
33
|
+
viewport after. A `Dropdown` opened from inside it is now visible.
|
|
34
|
+
|
|
35
|
+
Details:
|
|
36
|
+
- `manual`, so no light dismiss.
|
|
37
|
+
- Escape, focus restore and scroll restore are unchanged.
|
|
38
|
+
- `styles.css` resets the UA popover padding, border, background, colour and
|
|
39
|
+
overflow in a zero-specificity rule in the `base` layer, so your own
|
|
40
|
+
classes still win.
|
|
41
|
+
- In `native` mode the browser's full screen is requested first, because
|
|
42
|
+
Chromium refuses `requestFullscreen()` on an open popover. The popover is
|
|
43
|
+
used only if that request is refused.
|
|
44
|
+
- New handle `data-fullscreen-layer="top" | "fixed"` and `layer` on
|
|
45
|
+
`useFullScreen()`'s result.
|
|
46
|
+
|
|
47
|
+
**Nothing to do.** If you style the full-screen surface without importing
|
|
48
|
+
`styles.css`, the UA popover padding and border show while it is active. Add
|
|
49
|
+
your own padding, border and background classes, or import the stylesheet.
|
|
50
|
+
Overlays rendered from outside the surface while it is active, such as an
|
|
51
|
+
app-level toast, now sit under it.
|
|
52
|
+
|
|
53
|
+
## [5.61.0] - 2026-10-26
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- **`Editor` can go full screen.** Requested by a consumer (MOIC) that embeds
|
|
58
|
+
editors in panels and dialogs. Add `showFullScreenToggle` to the default
|
|
59
|
+
toolbar (`<Editor.Toolbar showFullScreenToggle />`), or put
|
|
60
|
+
`<Editor.FullScreenToggle />` in a custom one. The state is controlled like
|
|
61
|
+
everything else on the Editor: `fullScreen` + `onFullScreenChange`, or
|
|
62
|
+
`defaultFullScreen` uncontrolled, and `useEditor()` now exposes
|
|
63
|
+
`fullScreen` / `setFullScreen` so an agent or a custom toolbar can drive it.
|
|
64
|
+
While full screen the editor covers the viewport, the toolbar stays at the
|
|
65
|
+
top, the content fills the rest (`<Editor.Content maxHeight>` is ignored), and
|
|
66
|
+
the root carries `data-fullscreen="true"`. Escape leaves full screen; focus
|
|
67
|
+
goes back to where it was and the page and any scrolled panel around the
|
|
68
|
+
editor return to their positions. Inside a dialog, the first Escape leaves
|
|
69
|
+
full screen and does not also close the dialog.
|
|
70
|
+
- **`FullScreen` / `useFullScreen`: one full-screen primitive for every
|
|
71
|
+
surface** (new `./full-screen` subpath). `<FullScreen>` is a box with a
|
|
72
|
+
`<FullScreen.Toggle />`; `useFullScreen()` is the same behaviour for a
|
|
73
|
+
surface that owns its root, which is how Editor uses it and how DeckEditor
|
|
74
|
+
and SheetWorkbook will. `mode="overlay"` (the default) makes the element
|
|
75
|
+
`position: fixed` over the viewport in place, so it works inside iframes and
|
|
76
|
+
dialogs and never remounts what is inside. `mode="native"` uses the browser
|
|
77
|
+
Fullscreen API and falls back to the overlay if the browser refuses; leaving
|
|
78
|
+
through the browser's own UI is reported through `onFullScreenChange(false)`.
|
|
79
|
+
Body scroll is locked while active, with a reference count so two surfaces
|
|
80
|
+
release in any order. Handles: `data-react-fancy-fullscreen`,
|
|
81
|
+
`data-fullscreen`, `data-fullscreen-mode`, `data-react-fancy-fullscreen-toggle`.
|
|
82
|
+
- **`PortalContainerContext`.** A `<Portal>` with no `container` now renders
|
|
83
|
+
into the nearest provided element, else `<body>` as before. Full-screen
|
|
84
|
+
surfaces provide themselves while active, so menus, tooltips and dialogs
|
|
85
|
+
opened inside stay visible (in the browser's full screen only the full-screen
|
|
86
|
+
element is painted).
|
|
87
|
+
|
|
88
|
+
**Nothing to do.** Nothing changes until you opt in: the toggle is off by
|
|
89
|
+
default and `fullScreen` defaults to `false`. Portals outside a full-screen
|
|
90
|
+
surface still render into `<body>`. One limit to know about: the overlay is
|
|
91
|
+
`position: fixed`, so an ancestor with `transform`, `filter`, `perspective`
|
|
92
|
+
or `contain: paint` confines it to that ancestor instead of the viewport.
|
|
93
|
+
react-fancy's own `Modal` has none of these.
|
|
94
|
+
|
|
14
95
|
## [5.60.2] - 2026-10-26
|
|
15
96
|
|
|
16
97
|
### Fixed
|
package/dist/autocomplete.cjs
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk7KTBVKNO_cjs = require('./chunk-7KTBVKNO.cjs');
|
|
4
4
|
require('./chunk-KJ22KE56.cjs');
|
|
5
5
|
require('./chunk-L3V3BYVS.cjs');
|
|
6
6
|
require('./chunk-J2DI6RMR.cjs');
|
|
7
|
-
require('./chunk-
|
|
7
|
+
require('./chunk-MKHYENKR.cjs');
|
|
8
|
+
require('./chunk-TI7D4QDM.cjs');
|
|
8
9
|
require('./chunk-57FQGQJK.cjs');
|
|
9
10
|
require('./chunk-RXDRYWVD.cjs');
|
|
10
11
|
require('./chunk-SNHU2AI4.cjs');
|
|
@@ -14,7 +15,7 @@ require('./chunk-ZU5Q77OT.cjs');
|
|
|
14
15
|
|
|
15
16
|
Object.defineProperty(exports, "Autocomplete", {
|
|
16
17
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunk7KTBVKNO_cjs.Autocomplete; }
|
|
18
19
|
});
|
|
19
20
|
//# sourceMappingURL=autocomplete.cjs.map
|
|
20
21
|
//# sourceMappingURL=autocomplete.cjs.map
|
package/dist/autocomplete.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export { Autocomplete } from './chunk-
|
|
1
|
+
export { Autocomplete } from './chunk-MSGKIWYX.js';
|
|
2
2
|
import './chunk-OL53XYHF.js';
|
|
3
3
|
import './chunk-NRXK42LO.js';
|
|
4
4
|
import './chunk-MQ6VGG62.js';
|
|
5
|
-
import './chunk-
|
|
5
|
+
import './chunk-5VMILVWD.js';
|
|
6
|
+
import './chunk-RBCMKPBX.js';
|
|
6
7
|
import './chunk-RGANGU7X.js';
|
|
7
8
|
import './chunk-JXE5XID6.js';
|
|
8
9
|
import './chunk-EDYAXGUM.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkFQZE5N2N_cjs = require('./chunk-FQZE5N2N.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunkTI7D4QDM_cjs = require('./chunk-TI7D4QDM.cjs');
|
|
5
5
|
var chunk57FQGQJK_cjs = require('./chunk-57FQGQJK.cjs');
|
|
6
6
|
var chunkRXDRYWVD_cjs = require('./chunk-RXDRYWVD.cjs');
|
|
7
7
|
var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
|
|
@@ -199,7 +199,7 @@ function ContextMenuContent({
|
|
|
199
199
|
exitClass: "fancy-fade-out"
|
|
200
200
|
});
|
|
201
201
|
if (!mounted) return null;
|
|
202
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
202
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkTI7D4QDM_cjs.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
203
203
|
"div",
|
|
204
204
|
{
|
|
205
205
|
ref: (node) => {
|
|
@@ -283,5 +283,5 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
|
|
|
283
283
|
|
|
284
284
|
exports.ContextMenu = ContextMenu;
|
|
285
285
|
exports.useContextMenu = useContextMenu;
|
|
286
|
-
//# sourceMappingURL=chunk-
|
|
287
|
-
//# sourceMappingURL=chunk-
|
|
286
|
+
//# sourceMappingURL=chunk-3DMVK74Q.cjs.map
|
|
287
|
+
//# sourceMappingURL=chunk-3DMVK74Q.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ContextMenu/ContextMenu.context.ts","../src/components/ContextMenu/ContextMenuTrigger.tsx","../src/components/ContextMenu/ContextMenuSub.tsx","../src/components/ContextMenu/ContextMenuContent.tsx","../src/components/ContextMenu/ContextMenuItem.tsx","../src/components/ContextMenu/ContextMenuSeparator.tsx","../src/components/ContextMenu/ContextMenu.tsx"],"names":["createContext","useContext","useCallback","jsx","cn","useState","useId","useRef","useEffect","jsxs","useOutsideClick","useEscapeKey","useAnimation","Portal","useMemo"],"mappings":"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","file":"chunk-EEMNTO7L.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ContextMenuContextValue } from \"./ContextMenu.types\";\n\nexport const ContextMenuContext =\n createContext<ContextMenuContextValue | null>(null);\n\nexport function useContextMenu(): ContextMenuContextValue {\n const ctx = useContext(ContextMenuContext);\n if (!ctx) {\n throw new Error(\n \"ContextMenu compound components must be used within <ContextMenu>\",\n );\n }\n return ctx;\n}\n","import { useCallback, type MouseEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport type { ContextMenuTriggerProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuTrigger({\n children,\n className,\n}: ContextMenuTriggerProps) {\n const ctx = useContextMenu();\n\n const handleContextMenu = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n (ctx as { position: { x: number; y: number } }).position.x = e.clientX;\n (ctx as { position: { x: number; y: number } }).position.y = e.clientY;\n ctx.setOpen(true);\n },\n [ctx],\n );\n\n return (\n <div data-react-fancy-context-menu-trigger=\"\" onContextMenu={handleContextMenu} className={cn(className)}>\n {children}\n </div>\n );\n}\n\nContextMenuTrigger.displayName = \"ContextMenuTrigger\";\n","import { createContext, useCallback, useContext, useEffect, useId, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ContextMenuSubProps, ContextMenuSubTriggerProps, ContextMenuSubContentProps } from \"./ContextMenu.types\";\n\n// ---------------------------------------------------------------------------\n// Sibling coordination: parent tracks which sub is active so opening one\n// immediately closes any previously-open sibling.\n// ---------------------------------------------------------------------------\n\ninterface MenuGroupContextValue {\n activeSubId: string | null;\n setActiveSub: (id: string | null) => void;\n}\n\nconst MenuGroupContext = createContext<MenuGroupContextValue>({\n activeSubId: null,\n setActiveSub: () => {},\n});\n\n/** Wrap sibling Subs so only one is open at a time. Placed inside Content/SubContent. */\nexport function MenuGroupProvider({ children }: { children: React.ReactNode }) {\n const [activeSubId, setActiveSub] = useState<string | null>(null);\n return (\n <MenuGroupContext.Provider value={{ activeSubId, setActiveSub }}>\n {children}\n </MenuGroupContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Sub components\n// ---------------------------------------------------------------------------\n\ninterface SubContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n cancelClose: () => void;\n}\n\nconst ContextMenuSubContext = createContext<SubContextValue>({\n open: false,\n setOpen: () => {},\n cancelClose: () => {},\n});\n\nexport function ContextMenuSub({ children }: ContextMenuSubProps) {\n const id = useId();\n const { activeSubId, setActiveSub } = useContext(MenuGroupContext);\n const open = activeSubId === id;\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const activeRef = useRef(activeSubId);\n activeRef.current = activeSubId;\n\n const setOpen = useCallback((v: boolean) => {\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n setActiveSub(v ? id : null);\n }, [id, setActiveSub]);\n\n const scheduleClose = useCallback(() => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closeTimer.current = setTimeout(() => {\n if (activeRef.current === id) setActiveSub(null);\n }, 150);\n }, [id, setActiveSub]);\n\n const cancelClose = useCallback(() => {\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n }, []);\n\n useEffect(() => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n return (\n <div\n className=\"relative\"\n onMouseEnter={cancelClose}\n onMouseLeave={scheduleClose}\n data-react-fancy-context-menu-sub=\"\"\n >\n <ContextMenuSubContext.Provider value={{ open, setOpen, cancelClose }}>\n {children}\n </ContextMenuSubContext.Provider>\n </div>\n );\n}\n\nContextMenuSub.displayName = \"ContextMenuSub\";\n\nexport function ContextMenuSubTrigger({ children, className }: ContextMenuSubTriggerProps) {\n const { open, setOpen, cancelClose } = useContext(ContextMenuSubContext);\n\n return (\n <button\n type=\"button\"\n data-react-fancy-context-menu-sub-trigger=\"\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\n \"flex w-full items-center justify-between rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n open && \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n className,\n )}\n onMouseEnter={() => {\n cancelClose();\n setOpen(true);\n }}\n onClick={() => setOpen(!open)}\n >\n <span>{children}</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"ml-2 opacity-50\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n );\n}\n\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nexport function ContextMenuSubContent({ children, className }: ContextMenuSubContentProps) {\n const { open } = useContext(ContextMenuSubContext);\n const ref = useRef<HTMLDivElement>(null);\n const [flipLeft, setFlipLeft] = useState(false);\n const [topOffset, setTopOffset] = useState(0);\n const [maxH, setMaxH] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (!open || !ref.current) return;\n const pad = 8;\n const rect = ref.current.getBoundingClientRect();\n\n // Horizontal: flip left if overflowing right\n setFlipLeft(rect.right > window.innerWidth - pad);\n\n // Vertical: shift up if overflowing bottom, cap height if still too tall\n const overflow = rect.bottom - (window.innerHeight - pad);\n if (overflow > 0) {\n const shifted = Math.min(overflow, rect.top - pad);\n setTopOffset(-shifted);\n if (overflow > shifted) {\n setMaxH(window.innerHeight - pad * 2);\n } else {\n setMaxH(undefined);\n }\n } else {\n setTopOffset(0);\n setMaxH(undefined);\n }\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n data-react-fancy-context-menu-sub-content=\"\"\n role=\"menu\"\n className={cn(\n \"absolute z-50 min-w-[8rem] rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n flipLeft ? \"right-full mr-1\" : \"left-full ml-1\",\n maxH && \"overflow-y-auto\",\n className,\n )}\n style={{ top: topOffset, maxHeight: maxH }}\n >\n <MenuGroupProvider>\n {children}\n </MenuGroupProvider>\n </div>\n );\n}\n\nContextMenuSubContent.displayName = \"ContextMenuSubContent\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport { useOutsideClick } from \"../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport { useAnimation } from \"../../hooks/use-animation\";\nimport { MenuGroupProvider } from \"./ContextMenuSub\";\nimport type { ContextMenuContentProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuContent({\n children,\n className,\n}: ContextMenuContentProps) {\n const { open, setOpen, position } = useContextMenu();\n const menuRef = useRef<HTMLDivElement>(null);\n const [adjusted, setAdjusted] = useState<{ x: number; y: number }>(position);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useOutsideClick(menuRef, close, open);\n useEscapeKey(close, open);\n\n // Clamp position to viewport after mount\n useEffect(() => {\n const node = menuRef.current;\n if (!open || !node) {\n setAdjusted(position);\n return;\n }\n requestAnimationFrame(() => {\n const rect = node.getBoundingClientRect();\n const pad = 8;\n let x = position.x;\n let y = position.y;\n if (x + rect.width > window.innerWidth - pad) x = window.innerWidth - rect.width - pad;\n if (y + rect.height > window.innerHeight - pad) y = window.innerHeight - rect.height - pad;\n if (x < pad) x = pad;\n if (y < pad) y = pad;\n setAdjusted({ x, y });\n });\n }, [open, position]);\n\n const { mounted, className: animClass, ref: animRef } = useAnimation({\n open,\n enterClass: \"fancy-scale-in\",\n exitClass: \"fancy-fade-out\",\n });\n\n if (!mounted) return null;\n\n return (\n <Portal>\n <div\n ref={(node) => {\n menuRef.current = node;\n (animRef as React.MutableRefObject<HTMLElement | null>).current = node;\n }}\n data-react-fancy-context-menu=\"\"\n role=\"menu\"\n className={cn(\n \"fixed z-50 min-w-[8rem] rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n animClass,\n className,\n )}\n style={{ left: adjusted.x, top: adjusted.y }}\n >\n <MenuGroupProvider>\n {children}\n </MenuGroupProvider>\n </div>\n </Portal>\n );\n}\n\nContextMenuContent.displayName = \"ContextMenuContent\";\n","import { cn } from \"../../utils/cn\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport type { ContextMenuItemProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuItem({\n children,\n onClick,\n disabled = false,\n danger = false,\n className,\n}: ContextMenuItemProps) {\n const { setOpen } = useContextMenu();\n\n return (\n <button\n type=\"button\"\n data-react-fancy-context-menu-item=\"\"\n role=\"menuitem\"\n disabled={disabled}\n aria-disabled={disabled}\n className={cn(\n \"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n danger\n ? \"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={() => {\n if (disabled) return;\n onClick?.();\n setOpen(false);\n }}\n >\n {children}\n </button>\n );\n}\n\nContextMenuItem.displayName = \"ContextMenuItem\";\n","import { cn } from \"../../utils/cn\";\nimport type { ContextMenuSeparatorProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuSeparator({ className }: ContextMenuSeparatorProps) {\n return (\n <div\n data-react-fancy-context-menu-separator=\"\"\n role=\"separator\"\n className={cn(\"my-1 h-px bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\", className)}\n />\n );\n}\n\nContextMenuSeparator.displayName = \"ContextMenuSeparator\";\n","import { useMemo, useRef, useState } from \"react\";\nimport { ContextMenuContext } from \"./ContextMenu.context\";\nimport { ContextMenuTrigger } from \"./ContextMenuTrigger\";\nimport { ContextMenuContent } from \"./ContextMenuContent\";\nimport { ContextMenuItem } from \"./ContextMenuItem\";\nimport { ContextMenuSeparator } from \"./ContextMenuSeparator\";\nimport { ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent } from \"./ContextMenuSub\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\n\nfunction ContextMenuRoot({ children }: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const positionRef = useRef({ x: 0, y: 0 });\n\n const ctx = useMemo(\n () => ({ open, setOpen, position: positionRef.current }),\n [open],\n );\n\n return (\n <ContextMenuContext.Provider value={ctx}>\n {children}\n </ContextMenuContext.Provider>\n );\n}\n\nexport const ContextMenu = Object.assign(ContextMenuRoot, {\n Trigger: ContextMenuTrigger,\n Content: ContextMenuContent,\n Item: ContextMenuItem,\n Separator: ContextMenuSeparator,\n Sub: ContextMenuSub,\n SubTrigger: ContextMenuSubTrigger,\n SubContent: ContextMenuSubContent,\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ContextMenu/ContextMenu.context.ts","../src/components/ContextMenu/ContextMenuTrigger.tsx","../src/components/ContextMenu/ContextMenuSub.tsx","../src/components/ContextMenu/ContextMenuContent.tsx","../src/components/ContextMenu/ContextMenuItem.tsx","../src/components/ContextMenu/ContextMenuSeparator.tsx","../src/components/ContextMenu/ContextMenu.tsx"],"names":["createContext","useContext","useCallback","jsx","cn","useState","useId","useRef","useEffect","jsxs","useOutsideClick","useEscapeKey","useAnimation","Portal","useMemo"],"mappings":"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","file":"chunk-3DMVK74Q.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ContextMenuContextValue } from \"./ContextMenu.types\";\n\nexport const ContextMenuContext =\n createContext<ContextMenuContextValue | null>(null);\n\nexport function useContextMenu(): ContextMenuContextValue {\n const ctx = useContext(ContextMenuContext);\n if (!ctx) {\n throw new Error(\n \"ContextMenu compound components must be used within <ContextMenu>\",\n );\n }\n return ctx;\n}\n","import { useCallback, type MouseEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport type { ContextMenuTriggerProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuTrigger({\n children,\n className,\n}: ContextMenuTriggerProps) {\n const ctx = useContextMenu();\n\n const handleContextMenu = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n (ctx as { position: { x: number; y: number } }).position.x = e.clientX;\n (ctx as { position: { x: number; y: number } }).position.y = e.clientY;\n ctx.setOpen(true);\n },\n [ctx],\n );\n\n return (\n <div data-react-fancy-context-menu-trigger=\"\" onContextMenu={handleContextMenu} className={cn(className)}>\n {children}\n </div>\n );\n}\n\nContextMenuTrigger.displayName = \"ContextMenuTrigger\";\n","import { createContext, useCallback, useContext, useEffect, useId, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ContextMenuSubProps, ContextMenuSubTriggerProps, ContextMenuSubContentProps } from \"./ContextMenu.types\";\n\n// ---------------------------------------------------------------------------\n// Sibling coordination: parent tracks which sub is active so opening one\n// immediately closes any previously-open sibling.\n// ---------------------------------------------------------------------------\n\ninterface MenuGroupContextValue {\n activeSubId: string | null;\n setActiveSub: (id: string | null) => void;\n}\n\nconst MenuGroupContext = createContext<MenuGroupContextValue>({\n activeSubId: null,\n setActiveSub: () => {},\n});\n\n/** Wrap sibling Subs so only one is open at a time. Placed inside Content/SubContent. */\nexport function MenuGroupProvider({ children }: { children: React.ReactNode }) {\n const [activeSubId, setActiveSub] = useState<string | null>(null);\n return (\n <MenuGroupContext.Provider value={{ activeSubId, setActiveSub }}>\n {children}\n </MenuGroupContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Sub components\n// ---------------------------------------------------------------------------\n\ninterface SubContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n cancelClose: () => void;\n}\n\nconst ContextMenuSubContext = createContext<SubContextValue>({\n open: false,\n setOpen: () => {},\n cancelClose: () => {},\n});\n\nexport function ContextMenuSub({ children }: ContextMenuSubProps) {\n const id = useId();\n const { activeSubId, setActiveSub } = useContext(MenuGroupContext);\n const open = activeSubId === id;\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const activeRef = useRef(activeSubId);\n activeRef.current = activeSubId;\n\n const setOpen = useCallback((v: boolean) => {\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n setActiveSub(v ? id : null);\n }, [id, setActiveSub]);\n\n const scheduleClose = useCallback(() => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closeTimer.current = setTimeout(() => {\n if (activeRef.current === id) setActiveSub(null);\n }, 150);\n }, [id, setActiveSub]);\n\n const cancelClose = useCallback(() => {\n if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; }\n }, []);\n\n useEffect(() => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n return (\n <div\n className=\"relative\"\n onMouseEnter={cancelClose}\n onMouseLeave={scheduleClose}\n data-react-fancy-context-menu-sub=\"\"\n >\n <ContextMenuSubContext.Provider value={{ open, setOpen, cancelClose }}>\n {children}\n </ContextMenuSubContext.Provider>\n </div>\n );\n}\n\nContextMenuSub.displayName = \"ContextMenuSub\";\n\nexport function ContextMenuSubTrigger({ children, className }: ContextMenuSubTriggerProps) {\n const { open, setOpen, cancelClose } = useContext(ContextMenuSubContext);\n\n return (\n <button\n type=\"button\"\n data-react-fancy-context-menu-sub-trigger=\"\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className={cn(\n \"flex w-full items-center justify-between rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n open && \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n className,\n )}\n onMouseEnter={() => {\n cancelClose();\n setOpen(true);\n }}\n onClick={() => setOpen(!open)}\n >\n <span>{children}</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"ml-2 opacity-50\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n );\n}\n\nContextMenuSubTrigger.displayName = \"ContextMenuSubTrigger\";\n\nexport function ContextMenuSubContent({ children, className }: ContextMenuSubContentProps) {\n const { open } = useContext(ContextMenuSubContext);\n const ref = useRef<HTMLDivElement>(null);\n const [flipLeft, setFlipLeft] = useState(false);\n const [topOffset, setTopOffset] = useState(0);\n const [maxH, setMaxH] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n if (!open || !ref.current) return;\n const pad = 8;\n const rect = ref.current.getBoundingClientRect();\n\n // Horizontal: flip left if overflowing right\n setFlipLeft(rect.right > window.innerWidth - pad);\n\n // Vertical: shift up if overflowing bottom, cap height if still too tall\n const overflow = rect.bottom - (window.innerHeight - pad);\n if (overflow > 0) {\n const shifted = Math.min(overflow, rect.top - pad);\n setTopOffset(-shifted);\n if (overflow > shifted) {\n setMaxH(window.innerHeight - pad * 2);\n } else {\n setMaxH(undefined);\n }\n } else {\n setTopOffset(0);\n setMaxH(undefined);\n }\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n data-react-fancy-context-menu-sub-content=\"\"\n role=\"menu\"\n className={cn(\n \"absolute z-50 min-w-[8rem] rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n flipLeft ? \"right-full mr-1\" : \"left-full ml-1\",\n maxH && \"overflow-y-auto\",\n className,\n )}\n style={{ top: topOffset, maxHeight: maxH }}\n >\n <MenuGroupProvider>\n {children}\n </MenuGroupProvider>\n </div>\n );\n}\n\nContextMenuSubContent.displayName = \"ContextMenuSubContent\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport { useOutsideClick } from \"../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../hooks/use-escape-key\";\nimport { useAnimation } from \"../../hooks/use-animation\";\nimport { MenuGroupProvider } from \"./ContextMenuSub\";\nimport type { ContextMenuContentProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuContent({\n children,\n className,\n}: ContextMenuContentProps) {\n const { open, setOpen, position } = useContextMenu();\n const menuRef = useRef<HTMLDivElement>(null);\n const [adjusted, setAdjusted] = useState<{ x: number; y: number }>(position);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useOutsideClick(menuRef, close, open);\n useEscapeKey(close, open);\n\n // Clamp position to viewport after mount\n useEffect(() => {\n const node = menuRef.current;\n if (!open || !node) {\n setAdjusted(position);\n return;\n }\n requestAnimationFrame(() => {\n const rect = node.getBoundingClientRect();\n const pad = 8;\n let x = position.x;\n let y = position.y;\n if (x + rect.width > window.innerWidth - pad) x = window.innerWidth - rect.width - pad;\n if (y + rect.height > window.innerHeight - pad) y = window.innerHeight - rect.height - pad;\n if (x < pad) x = pad;\n if (y < pad) y = pad;\n setAdjusted({ x, y });\n });\n }, [open, position]);\n\n const { mounted, className: animClass, ref: animRef } = useAnimation({\n open,\n enterClass: \"fancy-scale-in\",\n exitClass: \"fancy-fade-out\",\n });\n\n if (!mounted) return null;\n\n return (\n <Portal>\n <div\n ref={(node) => {\n menuRef.current = node;\n (animRef as React.MutableRefObject<HTMLElement | null>).current = node;\n }}\n data-react-fancy-context-menu=\"\"\n role=\"menu\"\n className={cn(\n \"fixed z-50 min-w-[8rem] rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n animClass,\n className,\n )}\n style={{ left: adjusted.x, top: adjusted.y }}\n >\n <MenuGroupProvider>\n {children}\n </MenuGroupProvider>\n </div>\n </Portal>\n );\n}\n\nContextMenuContent.displayName = \"ContextMenuContent\";\n","import { cn } from \"../../utils/cn\";\nimport { useContextMenu } from \"./ContextMenu.context\";\nimport type { ContextMenuItemProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuItem({\n children,\n onClick,\n disabled = false,\n danger = false,\n className,\n}: ContextMenuItemProps) {\n const { setOpen } = useContextMenu();\n\n return (\n <button\n type=\"button\"\n data-react-fancy-context-menu-item=\"\"\n role=\"menuitem\"\n disabled={disabled}\n aria-disabled={disabled}\n className={cn(\n \"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n danger\n ? \"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))] dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={() => {\n if (disabled) return;\n onClick?.();\n setOpen(false);\n }}\n >\n {children}\n </button>\n );\n}\n\nContextMenuItem.displayName = \"ContextMenuItem\";\n","import { cn } from \"../../utils/cn\";\nimport type { ContextMenuSeparatorProps } from \"./ContextMenu.types\";\n\nexport function ContextMenuSeparator({ className }: ContextMenuSeparatorProps) {\n return (\n <div\n data-react-fancy-context-menu-separator=\"\"\n role=\"separator\"\n className={cn(\"my-1 h-px bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\", className)}\n />\n );\n}\n\nContextMenuSeparator.displayName = \"ContextMenuSeparator\";\n","import { useMemo, useRef, useState } from \"react\";\nimport { ContextMenuContext } from \"./ContextMenu.context\";\nimport { ContextMenuTrigger } from \"./ContextMenuTrigger\";\nimport { ContextMenuContent } from \"./ContextMenuContent\";\nimport { ContextMenuItem } from \"./ContextMenuItem\";\nimport { ContextMenuSeparator } from \"./ContextMenuSeparator\";\nimport { ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent } from \"./ContextMenuSub\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\n\nfunction ContextMenuRoot({ children }: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const positionRef = useRef({ x: 0, y: 0 });\n\n const ctx = useMemo(\n () => ({ open, setOpen, position: positionRef.current }),\n [open],\n );\n\n return (\n <ContextMenuContext.Provider value={ctx}>\n {children}\n </ContextMenuContext.Provider>\n );\n}\n\nexport const ContextMenu = Object.assign(ContextMenuRoot, {\n Trigger: ContextMenuTrigger,\n Content: ContextMenuContent,\n Item: ContextMenuItem,\n Separator: ContextMenuSeparator,\n Sub: ContextMenuSub,\n SubTrigger: ContextMenuSubTrigger,\n SubContent: ContextMenuSubContent,\n});\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var chunkTLRFXSPA_cjs = require('./chunk-TLRFXSPA.cjs');
|
|
4
|
-
var chunkJRRYYW3Y_cjs = require('./chunk-JRRYYW3Y.cjs');
|
|
5
|
-
var chunkGLGUQGAQ_cjs = require('./chunk-GLGUQGAQ.cjs');
|
|
6
3
|
var chunk2O5UXH5R_cjs = require('./chunk-2O5UXH5R.cjs');
|
|
4
|
+
var chunkTLRFXSPA_cjs = require('./chunk-TLRFXSPA.cjs');
|
|
5
|
+
var chunkK6NADZ7O_cjs = require('./chunk-K6NADZ7O.cjs');
|
|
6
|
+
var chunkM6MGQI6G_cjs = require('./chunk-M6MGQI6G.cjs');
|
|
7
7
|
var chunkMAZEX4EZ_cjs = require('./chunk-MAZEX4EZ.cjs');
|
|
8
8
|
var chunkP53432AK_cjs = require('./chunk-P53432AK.cjs');
|
|
9
9
|
var chunkO3F6DYWR_cjs = require('./chunk-O3F6DYWR.cjs');
|
|
@@ -522,7 +522,7 @@ function JsonEditorValue({ node, mode, size, readOnly, id, onCommit }) {
|
|
|
522
522
|
case "enum": {
|
|
523
523
|
const options = rule?.options ?? [];
|
|
524
524
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
525
|
-
|
|
525
|
+
chunkM6MGQI6G_cjs.Select,
|
|
526
526
|
{
|
|
527
527
|
...common,
|
|
528
528
|
list: options,
|
|
@@ -572,7 +572,7 @@ function JsonEditorValue({ node, mode, size, readOnly, id, onCommit }) {
|
|
|
572
572
|
);
|
|
573
573
|
case "secret":
|
|
574
574
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
575
|
-
|
|
575
|
+
chunkK6NADZ7O_cjs.Input,
|
|
576
576
|
{
|
|
577
577
|
...common,
|
|
578
578
|
type: "password",
|
|
@@ -587,7 +587,7 @@ function JsonEditorValue({ node, mode, size, readOnly, id, onCommit }) {
|
|
|
587
587
|
case "string":
|
|
588
588
|
default:
|
|
589
589
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
590
|
-
|
|
590
|
+
chunkK6NADZ7O_cjs.Input,
|
|
591
591
|
{
|
|
592
592
|
...common,
|
|
593
593
|
type: node.type === "url" ? "url" : node.type === "email" ? "email" : "text",
|
|
@@ -639,7 +639,7 @@ function RawValueEditor({
|
|
|
639
639
|
);
|
|
640
640
|
}
|
|
641
641
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
642
|
-
|
|
642
|
+
chunkK6NADZ7O_cjs.Input,
|
|
643
643
|
{
|
|
644
644
|
id,
|
|
645
645
|
size,
|
|
@@ -712,7 +712,7 @@ function JsonEditorRow({ node }) {
|
|
|
712
712
|
className: "w-1/3 min-w-0 shrink-0",
|
|
713
713
|
children: [
|
|
714
714
|
renameable ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
715
|
-
|
|
715
|
+
chunkK6NADZ7O_cjs.Input,
|
|
716
716
|
{
|
|
717
717
|
size: ctx.size,
|
|
718
718
|
mode: "edit",
|
|
@@ -889,7 +889,7 @@ function JsonEditorAddForm({ path, kind, depth, suggestedType }) {
|
|
|
889
889
|
style: { paddingInlineStart: depth * INDENT + 32 },
|
|
890
890
|
children: [
|
|
891
891
|
kind === "object" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
892
|
-
|
|
892
|
+
chunkK6NADZ7O_cjs.Input,
|
|
893
893
|
{
|
|
894
894
|
size: ctx.size,
|
|
895
895
|
mode: "edit",
|
|
@@ -902,7 +902,7 @@ function JsonEditorAddForm({ path, kind, depth, suggestedType }) {
|
|
|
902
902
|
}
|
|
903
903
|
),
|
|
904
904
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
905
|
-
|
|
905
|
+
chunkM6MGQI6G_cjs.Select,
|
|
906
906
|
{
|
|
907
907
|
size: ctx.size,
|
|
908
908
|
mode: "edit",
|
|
@@ -1350,5 +1350,5 @@ exports.parsePath = parsePath;
|
|
|
1350
1350
|
exports.pathToString = pathToString;
|
|
1351
1351
|
exports.resolveKeyRule = resolveKeyRule;
|
|
1352
1352
|
exports.typeMatches = typeMatches;
|
|
1353
|
-
//# sourceMappingURL=chunk-
|
|
1354
|
-
//# sourceMappingURL=chunk-
|
|
1353
|
+
//# sourceMappingURL=chunk-3I6PE2US.cjs.map
|
|
1354
|
+
//# sourceMappingURL=chunk-3I6PE2US.cjs.map
|