@marimo-team/frontend 0.24.1-dev115 → 0.24.1-dev116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/assets/{CellStatus-DJBTB8Tm.js → CellStatus-BnX3kFgK.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-C22y7sbC.js → ConnectedDataExplorerComponent-Slfh2UI3.js} +1 -1
  3. package/dist/assets/{JsonOutput-COWoYBdx.js → JsonOutput-i6wa-ZZg.js} +10 -10
  4. package/dist/assets/{LazyAnyLanguageCodeMirror-nhd5JrSb.js → LazyAnyLanguageCodeMirror-LboTfNDv.js} +2 -2
  5. package/dist/assets/{MarimoErrorOutput-Cpp7YwEl.js → MarimoErrorOutput-CIYHG601.js} +1 -1
  6. package/dist/assets/{RenderHTML-DlIzJTPL.js → RenderHTML-BIg2a2gf.js} +1 -1
  7. package/dist/assets/{RunButton-CT16Dkr4.js → RunButton-z5x8Nygi.js} +1 -1
  8. package/dist/assets/{VisuallyHidden-wlQyxf8y.js → VisuallyHidden-K_kroCIL.js} +1 -1
  9. package/dist/assets/{add-cell-with-ai-DSjyPknP.js → add-cell-with-ai-P7MBEjnv.js} +1 -1
  10. package/dist/assets/{add-connection-dialog-DO478_EL.js → add-connection-dialog-B7yGNrvC.js} +1 -1
  11. package/dist/assets/{agent-panel-DIvPSTyY.js → agent-panel-DUUWyz59.js} +1 -1
  12. package/dist/assets/{ai-model-dropdown-BxqpRM7R.js → ai-model-dropdown-BN9nyr0_.js} +1 -1
  13. package/dist/assets/alert-dialog-CA-2mBs3.js +11 -0
  14. package/dist/assets/{any-language-editor-kw0XJFxM.js → any-language-editor-DflLjPSQ.js} +1 -1
  15. package/dist/assets/{app-config-button-CAZWYP6R.js → app-config-button-vxdvoC0x.js} +1 -1
  16. package/dist/assets/{blob-B82D3b64.js → blob-DDxD75AS.js} +1 -1
  17. package/dist/assets/{cache-panel-iphovHma.js → cache-panel-DqgtC98s.js} +1 -1
  18. package/dist/assets/{cell-editor-CL59E8W0.js → cell-editor-D6Cyy4UF.js} +1 -1
  19. package/dist/assets/{cell-link-DOeJzvRH.js → cell-link-B7DFi5Hf.js} +1 -1
  20. package/dist/assets/{cells-BgH2MZS9.js → cells-CS_eEQ19.js} +3 -3
  21. package/dist/assets/{chat-display-kzxea9r-.js → chat-display-CtnwRDHx.js} +1 -1
  22. package/dist/assets/{chat-panel-BVsbI9bp.js → chat-panel-DScfSsWl.js} +1 -1
  23. package/dist/assets/{chat-ui-BIaqeCtJ.js → chat-ui-9G115u_7.js} +1 -1
  24. package/dist/assets/{circle-BiW8b6Xq.js → circle-ByJdIf5p.js} +1 -1
  25. package/dist/assets/{column-preview-BWoK0ZFU.js → column-preview-BVtft2uw.js} +1 -1
  26. package/dist/assets/{command-palette-CcLmXXVs.js → command-palette-uGrOQhzq.js} +1 -1
  27. package/dist/assets/{common-DeDcgYdz.js → common-CQLiJ8JV.js} +1 -1
  28. package/dist/assets/{components-CtHLnRet.js → components-B5BY9RR4.js} +1 -1
  29. package/dist/assets/config-CJhe6_P2.js +1 -0
  30. package/dist/assets/{copy-icon-D522mvZL.js → copy-icon-z8fuTE3w.js} +1 -1
  31. package/dist/assets/{datasource-HG_yVRxq.js → datasource-Br61QFhd.js} +1 -1
  32. package/dist/assets/{dependency-graph-panel-CVsva03Q.js → dependency-graph-panel-DoAAA7Y1.js} +1 -1
  33. package/dist/assets/{dist-ConG15vZ.js → dist-DzCQtGkt.js} +1 -1
  34. package/dist/assets/{documentation-panel-BSiOFIpg.js → documentation-panel-CYUIPHeO.js} +1 -1
  35. package/dist/assets/{download-C4umhthc.js → download-D2Ha98tp.js} +1 -1
  36. package/dist/assets/dropdown-menu-C40jM9o4.js +1 -0
  37. package/dist/assets/{edit-page-DCOdX3sJ.js → edit-page-ClGPnVOK.js} +4 -4
  38. package/dist/assets/{error-banner-C5aiAh3q.js → error-banner-Dw5YY9wq.js} +1 -1
  39. package/dist/assets/{error-entries-Yh2iX13J.js → error-entries-ooCnKQtX.js} +1 -1
  40. package/dist/assets/{error-panel-CGUFTbfd.js → error-panel-CRtClD-k.js} +1 -1
  41. package/dist/assets/{es-DP79Qs0u.js → es-CrFhA96G.js} +1 -1
  42. package/dist/assets/{file-explorer-panel-Db-8C8fm.js → file-explorer-panel-DB17Zw1x.js} +1 -1
  43. package/dist/assets/{file-icons-C0Mf_Axb.js → file-icons-D0QvDCq_.js} +1 -1
  44. package/dist/assets/{file-name-input-DmwIfRLx.js → file-name-input-DsaNomb7.js} +1 -1
  45. package/dist/assets/{floating-outline-8Uo6Qp8W.js → floating-outline-FQva8xB9.js} +1 -1
  46. package/dist/assets/{fullscreen-BFfuaW3H.js → fullscreen-BH2jz-F4.js} +5 -5
  47. package/dist/assets/{gallery-page-BpxbCG1a.js → gallery-page-LX7vPBcZ.js} +1 -1
  48. package/dist/assets/{glide-data-editor-k7azNhFM.js → glide-data-editor-DgWXD84U.js} +1 -1
  49. package/dist/assets/{home-page-CEzr9Hhn.js → home-page-DtRwYsH-.js} +1 -1
  50. package/dist/assets/{index-kkDJK6-j.js → index-BphlL86Q.js} +5 -5
  51. package/dist/assets/index-D1E_LKIW.css +2 -0
  52. package/dist/assets/{input-D4qvzBWu.js → input-C-RazPBA.js} +1 -1
  53. package/dist/assets/{layout-D5ovQPUb.js → layout-C4U2fp5O.js} +3 -3
  54. package/dist/assets/{logs-panel-Cqxpxz5Z.js → logs-panel-BPfZpDxG.js} +1 -1
  55. package/dist/assets/{markdown-renderer-zZh3O1Hm.js → markdown-renderer-CbdXI4uO.js} +1 -1
  56. package/dist/assets/{menu-items-CsV3aDPH.js → menu-items-BSRA2YI9.js} +1 -1
  57. package/dist/assets/{mermaid-BovZosCC.js → mermaid-BJLFqJtJ.js} +1 -1
  58. package/dist/assets/{name-cell-input-DXP1MqrH.js → name-cell-input-CObHxs3L.js} +1 -1
  59. package/dist/assets/{outline-panel-CMMPf-P7.js → outline-panel-Dyr_2yws.js} +1 -1
  60. package/dist/assets/{packages-panel-BHZOSh3s.js → packages-panel-Cato7lRU.js} +1 -1
  61. package/dist/assets/{pair-with-agent-modal-DgckrViE.js → pair-with-agent-modal-bYFRKgrw.js} +1 -1
  62. package/dist/assets/{panel-accordion-state-9kdNootf.js → panel-accordion-state-CB4RQUbp.js} +1 -1
  63. package/dist/assets/{panels-Ca-tbb7P.js → panels-CaAkyFQ2.js} +1 -1
  64. package/dist/assets/{process-output-Bi9pDe1a.js → process-output-BvjsWKqP.js} +1 -1
  65. package/dist/assets/{readonly-code-display-ilZfA3ua.js → readonly-code-display-D0VodUl8.js} +1 -1
  66. package/dist/assets/{readonly-python-code-Bqk6NhSW.js → readonly-python-code-DlajH1tG.js} +1 -1
  67. package/dist/assets/{renderShortcut-BnBOGXqJ.js → renderShortcut-DCEcfEd4.js} +1 -1
  68. package/dist/assets/{reveal-component-DpoL_y06.js → reveal-component-NBGQ6pCq.js} +1 -1
  69. package/dist/assets/{run-page-rnCMzZmN.js → run-page-TDSGBzJ2.js} +1 -1
  70. package/dist/assets/{scratchpad-panel-BBd8n8wh.js → scratchpad-panel-smtKLHdh.js} +1 -1
  71. package/dist/assets/{secrets-panel-C5D_CNW2.js → secrets-panel-CWX3By7x.js} +1 -1
  72. package/dist/assets/select-nLt2y0Sw.js +1 -0
  73. package/dist/assets/{session-panel-C3kmYD9D.js → session-panel-BEpBnPuv.js} +1 -1
  74. package/dist/assets/{skeleton-xsRIwsVr.js → skeleton-BVafJh4G.js} +1 -1
  75. package/dist/assets/{snippets-panel-C1fCmhNQ.js → snippets-panel-D5Fdmjit.js} +1 -1
  76. package/dist/assets/{state-CsL-gymg.js → state-CbrP-RfI.js} +1 -1
  77. package/dist/assets/{state-DJSqAVnx.js → state-D2Q_Pzdk.js} +1 -1
  78. package/dist/assets/{switch-CYJ2u4G9.js → switch-BzJYj8tz.js} +1 -1
  79. package/dist/assets/{tabs-DxfkQ6UI.js → tabs-Cy1qXLzH.js} +1 -1
  80. package/dist/assets/{terminal-CfkxQQwT.js → terminal-CWTEGSbX.js} +1 -1
  81. package/dist/assets/{tooltip-BO5vfMvm.js → tooltip-BUtPzKB4.js} +1 -1
  82. package/dist/assets/{tracing-BHb672Fd.js → tracing-htk2wAUH.js} +1 -1
  83. package/dist/assets/{tracing-panel-3JaAnsDw.js → tracing-panel-D_FtT8xh.js} +2 -2
  84. package/dist/assets/{tree-actions-CzmLf39g.js → tree-actions-CIKsGmOE.js} +1 -1
  85. package/dist/assets/{useAddCell-DuzEVBJj.js → useAddCell-B9V9LPof.js} +1 -1
  86. package/dist/assets/{useCellActionButton-B3Ve1KW5.js → useCellActionButton-Byz1dxEY.js} +1 -1
  87. package/dist/assets/{useDeleteCell-CEtU0g91.js → useDeleteCell-xIU8YxOm.js} +1 -1
  88. package/dist/assets/{useDependencyPanelTab-BpSWTQLC.js → useDependencyPanelTab-CTX4KBOX.js} +1 -1
  89. package/dist/assets/{useNotebookActions-C3LAhEgG.js → useNotebookActions-CEWtEB4v.js} +1 -1
  90. package/dist/assets/{useRunCells-omrTl5XU.js → useRunCells-DpLEou4d.js} +1 -1
  91. package/dist/assets/{useSplitCell-CgXD2Gcw.js → useSplitCell-DIMMMQzM.js} +1 -1
  92. package/dist/assets/{vega-component-CwdVpUdb.js → vega-component-D23FlAOS.js} +1 -1
  93. package/dist/assets/write-secret-modal-C2V1d4p-.js +2 -0
  94. package/dist/index.html +39 -39
  95. package/package.json +1 -1
  96. package/src/components/editor/Output.tsx +40 -0
  97. package/src/components/editor/__tests__/Output.test.tsx +85 -2
  98. package/src/components/ui/__tests__/fullscreen.test.tsx +88 -0
  99. package/src/components/ui/fullscreen.tsx +43 -1
  100. package/src/hooks/useEventListener.ts +1 -1
  101. package/dist/assets/alert-dialog-BnNhUpVP.js +0 -11
  102. package/dist/assets/config-DnyziF11.js +0 -1
  103. package/dist/assets/dropdown-menu-B-ZAV5lw.js +0 -1
  104. package/dist/assets/index-DuY6Lm00.css +0 -2
  105. package/dist/assets/select-BJKJFWHk.js +0 -1
  106. package/dist/assets/write-secret-modal-GHpJRc36.js +0 -2
@@ -18,10 +18,12 @@ import {
18
18
  ChevronsDownUpIcon,
19
19
  ChevronsUpDownIcon,
20
20
  ExpandIcon,
21
+ ShrinkIcon,
21
22
  } from "lucide-react";
22
23
  import { tooltipHandler } from "@/components/charts/tooltip";
23
24
  import { useExpandedOutput } from "@/core/cells/outputs";
24
25
  import { viewStateAtom } from "@/core/mode";
26
+ import { useEventListener } from "@/hooks/useEventListener";
25
27
  import { useIframeCapabilities } from "@/hooks/useIframeCapabilities";
26
28
  import { useOverflowDetection } from "@/hooks/useOverflowDetection";
27
29
  import { renderHTML } from "@/plugins/core/RenderHTML";
@@ -31,11 +33,13 @@ import { getContainerWidth } from "@/plugins/impl/vega/utils";
31
33
  import { useTheme } from "@/theme/useTheme";
32
34
  import { Events } from "@/utils/events";
33
35
  import { invariant } from "@/utils/invariant";
36
+ import { Logger } from "@/utils/Logger";
34
37
  import { processMimeBundle } from "@/utils/mime-types";
35
38
  import { Objects } from "@/utils/objects";
36
39
  import { LazyVegaEmbed } from "../charts/lazy";
37
40
  import { ChartLoadingState } from "../data-table/charts/components/chart-states";
38
41
  import { Button } from "../ui/button";
42
+ import { useIsFullScreen } from "../ui/fullscreen";
39
43
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs";
40
44
  import { Tooltip } from "../ui/tooltip";
41
45
  import { CsvViewer } from "./file-tree/renderers";
@@ -408,6 +412,12 @@ const Div = React.forwardRef<
408
412
  >((props, ref) => <div ref={ref} {...props} />);
409
413
  Div.displayName = "Div";
410
414
 
415
+ function exitFullscreen() {
416
+ document.exitFullscreen().catch((error) => {
417
+ Logger.warn("Failed to exit fullscreen", error);
418
+ });
419
+ }
420
+
411
421
  /**
412
422
  * Detects if there is overflow in the output area and adds a button to optionally expand
413
423
  */
@@ -425,6 +435,16 @@ const ExpandableOutput = React.memo(
425
435
  const [isExpanded, setIsExpanded] = useExpandedOutput(cellId);
426
436
  const isOverflowing = useOverflowDetection(containerRef);
427
437
  const { hasFullscreen } = useIframeCapabilities();
438
+ const isFullscreen = useIsFullScreen(containerRef);
439
+
440
+ // Not every host exits fullscreen on Escape by itself. A null target keeps
441
+ // the listener off every output that is not fullscreen.
442
+ useEventListener(isFullscreen ? document : null, "keydown", (event) => {
443
+ if (event.key !== "Escape" || !document.fullscreenElement) {
444
+ return;
445
+ }
446
+ exitFullscreen();
447
+ });
428
448
 
429
449
  return (
430
450
  <>
@@ -488,6 +508,26 @@ const ExpandableOutput = React.memo(
488
508
  isExpanded || forceExpand ? { maxHeight: "none" } : undefined
489
509
  }
490
510
  >
511
+ {/* Fullscreen paints this element only, and the action buttons sit
512
+ outside it. A host does not always draw an exit overlay, so the
513
+ output carries its own exit control. */}
514
+ {isFullscreen && (
515
+ <Tooltip content="Exit fullscreen" side="left">
516
+ <Button
517
+ data-testid="exit-fullscreen-output-button"
518
+ aria-label="Exit fullscreen"
519
+ className="absolute right-2 top-2 z-2 p-1 bg-background/90 border border-border hover:bg-muted print:hidden"
520
+ onClick={exitFullscreen}
521
+ size="xs"
522
+ variant="text"
523
+ >
524
+ <ShrinkIcon
525
+ className="size-4 opacity-60 hover:opacity-80"
526
+ strokeWidth={1.25}
527
+ />
528
+ </Button>
529
+ </Tooltip>
530
+ )}
491
531
  {children}
492
532
  </div>
493
533
  </div>
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import { render, screen } from "@testing-library/react";
3
- import { describe, expect, it } from "vitest";
2
+ import { act, fireEvent, render, screen } from "@testing-library/react";
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
4
  import { cellId } from "@/__tests__/branded";
5
5
  import { TooltipProvider } from "@/components/ui/tooltip";
6
6
  import { OutputArea, OutputRenderer } from "../Output";
@@ -158,3 +158,86 @@ describe("OutputRenderer image and SVG rendering", () => {
158
158
  expect(imgElement).toHaveAttribute("src", base64PngDataUrl);
159
159
  });
160
160
  });
161
+
162
+ describe("OutputArea fullscreen exit control", () => {
163
+ let fullscreenElement: Element | null = null;
164
+ const exitFullscreen = vi.fn(() => Promise.resolve());
165
+
166
+ beforeEach(() => {
167
+ fullscreenElement = null;
168
+ exitFullscreen.mockClear();
169
+ Object.defineProperty(document, "fullscreenElement", {
170
+ configurable: true,
171
+ get: () => fullscreenElement,
172
+ });
173
+ Object.defineProperty(document, "exitFullscreen", {
174
+ configurable: true,
175
+ value: exitFullscreen,
176
+ });
177
+ });
178
+
179
+ // Drop the stubs so that the real document properties come back.
180
+ afterEach(() => {
181
+ Reflect.deleteProperty(document, "fullscreenElement");
182
+ Reflect.deleteProperty(document, "exitFullscreen");
183
+ });
184
+
185
+ const renderOutput = () =>
186
+ render(
187
+ <TooltipProvider>
188
+ <OutputArea
189
+ output={{
190
+ channel: "output",
191
+ data: "Hello World",
192
+ mimetype: "text/plain",
193
+ }}
194
+ cellId={cellId("test")}
195
+ stale={false}
196
+ loading={false}
197
+ allowExpand={true}
198
+ />
199
+ </TooltipProvider>,
200
+ );
201
+
202
+ const enterFullscreen = (container: HTMLElement) => {
203
+ fullscreenElement = container.querySelector('[data-cell-role="output"]');
204
+ act(() => {
205
+ document.dispatchEvent(new Event("fullscreenchange"));
206
+ });
207
+ };
208
+
209
+ it("hides the exit button outside fullscreen", () => {
210
+ renderOutput();
211
+ expect(
212
+ screen.queryByTestId("exit-fullscreen-output-button"),
213
+ ).not.toBeInTheDocument();
214
+ });
215
+
216
+ it("shows the exit button when the output is the fullscreen element", () => {
217
+ const { container } = renderOutput();
218
+ enterFullscreen(container);
219
+ expect(
220
+ screen.getByTestId("exit-fullscreen-output-button"),
221
+ ).toBeInTheDocument();
222
+ });
223
+
224
+ it("exits fullscreen on click", () => {
225
+ const { container } = renderOutput();
226
+ enterFullscreen(container);
227
+ fireEvent.click(screen.getByTestId("exit-fullscreen-output-button"));
228
+ expect(exitFullscreen).toHaveBeenCalledTimes(1);
229
+ });
230
+
231
+ it("exits fullscreen on Escape", () => {
232
+ const { container } = renderOutput();
233
+ enterFullscreen(container);
234
+ fireEvent.keyDown(document, { key: "Escape" });
235
+ expect(exitFullscreen).toHaveBeenCalledTimes(1);
236
+ });
237
+
238
+ it("ignores Escape outside fullscreen", () => {
239
+ renderOutput();
240
+ fireEvent.keyDown(document, { key: "Escape" });
241
+ expect(exitFullscreen).not.toHaveBeenCalled();
242
+ });
243
+ });
@@ -0,0 +1,88 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import { act, render } from "@testing-library/react";
3
+ import { useRef } from "react";
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { useIsFullScreen } from "../fullscreen";
6
+
7
+ const FullScreenFlag = ({ label }: { label: string }) => {
8
+ const ref = useRef<HTMLDivElement>(null);
9
+ const isFullScreen = useIsFullScreen(ref);
10
+
11
+ return (
12
+ <div ref={ref} data-testid={label}>
13
+ {String(isFullScreen)}
14
+ </div>
15
+ );
16
+ };
17
+
18
+ describe("useIsFullScreen", () => {
19
+ let fullscreenElement: Element | null = null;
20
+
21
+ beforeEach(() => {
22
+ fullscreenElement = null;
23
+ Object.defineProperty(document, "fullscreenElement", {
24
+ configurable: true,
25
+ get: () => fullscreenElement,
26
+ });
27
+ });
28
+
29
+ afterEach(() => {
30
+ Reflect.deleteProperty(document, "fullscreenElement");
31
+ });
32
+
33
+ const countFullScreenListeners = (calls: unknown[][]) =>
34
+ calls.filter((call) => call[0] === "fullscreenchange").length;
35
+
36
+ it("adds one document listener for many subscribers", () => {
37
+ const addEventListener = vi.spyOn(document, "addEventListener");
38
+
39
+ render(
40
+ <>
41
+ <FullScreenFlag label="first" />
42
+ <FullScreenFlag label="second" />
43
+ <FullScreenFlag label="third" />
44
+ </>,
45
+ );
46
+
47
+ expect(countFullScreenListeners(addEventListener.mock.calls)).toBe(1);
48
+ addEventListener.mockRestore();
49
+ });
50
+
51
+ it("removes the listener when the last subscriber unmounts", () => {
52
+ const removeEventListener = vi.spyOn(document, "removeEventListener");
53
+
54
+ const { unmount } = render(
55
+ <>
56
+ <FullScreenFlag label="first" />
57
+ <FullScreenFlag label="second" />
58
+ </>,
59
+ );
60
+
61
+ expect(countFullScreenListeners(removeEventListener.mock.calls)).toBe(0);
62
+
63
+ unmount();
64
+
65
+ expect(countFullScreenListeners(removeEventListener.mock.calls)).toBe(1);
66
+ removeEventListener.mockRestore();
67
+ });
68
+
69
+ it("reports true for the full screen element only", () => {
70
+ const { getByTestId } = render(
71
+ <>
72
+ <FullScreenFlag label="first" />
73
+ <FullScreenFlag label="second" />
74
+ </>,
75
+ );
76
+
77
+ expect(getByTestId("first")).toHaveTextContent("false");
78
+ expect(getByTestId("second")).toHaveTextContent("false");
79
+
80
+ fullscreenElement = getByTestId("second");
81
+ act(() => {
82
+ document.dispatchEvent(new Event("fullscreenchange"));
83
+ });
84
+
85
+ expect(getByTestId("first")).toHaveTextContent("false");
86
+ expect(getByTestId("second")).toHaveTextContent("true");
87
+ });
88
+ });
@@ -4,7 +4,7 @@ import type { Popover } from "radix-ui";
4
4
 
5
5
  type PopoverContentProps = Popover.PopoverContentProps;
6
6
 
7
- import React, { useState } from "react";
7
+ import React, { type RefObject, useState, useSyncExternalStore } from "react";
8
8
  import { isInVscodeExtension } from "@/core/vscode/is-in-vscode";
9
9
  import { useEventListener } from "@/hooks/useEventListener";
10
10
 
@@ -27,6 +27,48 @@ export function useFullScreenElement() {
27
27
  return fullScreenElement;
28
28
  }
29
29
 
30
+ const fullScreenSubscribers = new Set<() => void>();
31
+
32
+ function notifyFullScreenSubscribers() {
33
+ for (const subscriber of fullScreenSubscribers) {
34
+ subscriber();
35
+ }
36
+ }
37
+
38
+ /**
39
+ * One document listener serves every subscriber, so the cost of a full screen
40
+ * transition does not grow with the number of mounted components.
41
+ */
42
+ function subscribeToFullScreen(onStoreChange: () => void) {
43
+ if (fullScreenSubscribers.size === 0) {
44
+ document.addEventListener("fullscreenchange", notifyFullScreenSubscribers);
45
+ }
46
+ fullScreenSubscribers.add(onStoreChange);
47
+
48
+ return () => {
49
+ fullScreenSubscribers.delete(onStoreChange);
50
+ if (fullScreenSubscribers.size === 0) {
51
+ document.removeEventListener(
52
+ "fullscreenchange",
53
+ notifyFullScreenSubscribers,
54
+ );
55
+ }
56
+ };
57
+ }
58
+
59
+ /**
60
+ * Whether the given element is the full screen element.
61
+ *
62
+ * The hook returns a boolean, so a component re-renders only when its own
63
+ * element enters or leaves full screen.
64
+ */
65
+ export function useIsFullScreen(ref: RefObject<Element | null>): boolean {
66
+ return useSyncExternalStore(subscribeToFullScreen, () => {
67
+ const fullScreenElement = document.fullscreenElement;
68
+ return fullScreenElement !== null && fullScreenElement === ref.current;
69
+ });
70
+ }
71
+
30
72
  /**
31
73
  * HOC wrapping a Portal component to use the
32
74
  * full screen element as the container if we are in full screen mode
@@ -17,7 +17,7 @@ export function isRefObject<T>(target: unknown): target is RefObject<T | null> {
17
17
  }
18
18
 
19
19
  export function useEventListener<K extends keyof DocumentEventMap>(
20
- targetValue: Document,
20
+ targetValue: Document | null,
21
21
  type: K,
22
22
  listener: (ev: DocumentEventMap[K]) => unknown,
23
23
  options?: boolean | AddEventListenerOptions,
@@ -1,11 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./react-CBDbhulC.js";import{t as n}from"./compiler-runtime-CYIjoINj.js";import{i as r,o as i,r as a}from"./useEventListener-92uWqz-P.js";import{t as o}from"./cn-ldLVeaqm.js";import{t as s}from"./jsx-runtime-B74pBk57.js";import{C as c,S as l,_ as u,c as d,d as ee,f as te,m as ne,o as re,r as ie,s as ae,u as oe,v as f,w as p,x as m,y as se}from"./fullscreen-BFfuaW3H.js";import{n as h}from"./button-Dh8EwhsF.js";var g=e(t(),1),_=s(),v=`Dialog`,[y,b]=c(v),[ce,x]=y(v),le=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=g.useRef(null),c=g.useRef(null),[l,d]=se({prop:r,defaultProp:i??!1,onChange:a,caller:v});return(0,_.jsx)(ce,{scope:t,triggerRef:s,contentRef:c,contentId:u(),titleId:u(),descriptionId:u(),open:l,onOpenChange:d,onOpenToggle:g.useCallback(()=>d(e=>!e),[d]),modal:o,children:n})};le.displayName=v;var ue=`DialogTrigger`,S=g.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,a=x(ue,n),o=i(t,a.triggerRef);return(0,_.jsx)(p.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":a.open,"aria-controls":a.contentId,"data-state":L(a.open),...r,ref:o,onClick:m(e.onClick,a.onOpenToggle)})});S.displayName=ue;var C=`DialogPortal`,[de,w]=y(C,{forceMount:void 0}),T=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=x(C,t);return(0,_.jsx)(de,{scope:t,forceMount:n,children:g.Children.map(r,e=>(0,_.jsx)(f,{present:n||a.open,children:(0,_.jsx)(ee,{asChild:!0,container:i,children:e})}))})};T.displayName=C;var E=`DialogOverlay`,D=g.forwardRef((e,t)=>{let n=w(E,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=x(E,e.__scopeDialog);return a.modal?(0,_.jsx)(f,{present:r||a.open,children:(0,_.jsx)(pe,{...i,ref:t})}):null});D.displayName=E;var fe=a(`DialogOverlay.RemoveScroll`),pe=g.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=x(E,n);return(0,_.jsx)(d,{as:fe,allowPinchZoom:!0,shards:[i.contentRef],children:(0,_.jsx)(p.div,{"data-state":L(i.open),...r,ref:t,style:{pointerEvents:`auto`,...r.style}})})}),O=`DialogContent`,k=g.forwardRef((e,t)=>{let n=w(O,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=x(O,e.__scopeDialog);return(0,_.jsx)(f,{present:r||a.open,children:a.modal?(0,_.jsx)(me,{...i,ref:t}):(0,_.jsx)(he,{...i,ref:t})})});k.displayName=O;var me=g.forwardRef((e,t)=>{let n=x(O,e.__scopeDialog),r=g.useRef(null),a=i(t,n.contentRef,r);return g.useEffect(()=>{let e=r.current;if(e)return ae(e)},[]),(0,_.jsx)(A,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:m(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:m(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:m(e.onFocusOutside,e=>e.preventDefault())})}),he=g.forwardRef((e,t)=>{let n=x(O,e.__scopeDialog),r=g.useRef(!1),i=g.useRef(!1);return(0,_.jsx)(A,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),A=g.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:o,...s}=e,c=x(O,n),l=g.useRef(null),u=i(t,l);return oe(),(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(te,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:a,onUnmountAutoFocus:o,children:(0,_.jsx)(ne,{role:`dialog`,id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":L(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(_e,{titleId:c.titleId}),(0,_.jsx)(ye,{contentRef:l,descriptionId:c.descriptionId})]})]})}),j=`DialogTitle`,M=g.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=x(j,n);return(0,_.jsx)(p.h2,{id:i.titleId,...r,ref:t})});M.displayName=j;var N=`DialogDescription`,P=g.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=x(N,n);return(0,_.jsx)(p.p,{id:i.descriptionId,...r,ref:t})});P.displayName=N;var F=`DialogClose`,I=g.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=x(F,n);return(0,_.jsx)(p.button,{type:`button`,...r,ref:t,onClick:m(e.onClick,()=>i.onOpenChange(!1))})});I.displayName=F;function L(e){return e?`open`:`closed`}var R=`DialogTitleWarning`,[ge,z]=l(R,{contentName:O,titleName:j,docsSlug:`dialog`}),_e=({titleId:e})=>{let t=z(R),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
2
-
3
- If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
4
-
5
- For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return g.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},ve=`DialogDescriptionWarning`,ye=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${z(ve).contentName}}.`;return g.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},B=le,V=S,H=T,U=D,W=k,G=M,K=P,q=I,J=`AlertDialog`,[be,xe]=c(J,[b]),Y=b(),X=e=>{let{__scopeAlertDialog:t,...n}=e,r=Y(t);return(0,_.jsx)(B,{...r,...n,modal:!0})};X.displayName=J;var Se=`AlertDialogTrigger`,Ce=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Y(n);return(0,_.jsx)(V,{...i,...r,ref:t})});Ce.displayName=Se;var we=`AlertDialogPortal`,Te=e=>{let{__scopeAlertDialog:t,...n}=e,r=Y(t);return(0,_.jsx)(H,{...r,...n})};Te.displayName=we;var Ee=`AlertDialogOverlay`,De=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Y(n);return(0,_.jsx)(U,{...i,...r,ref:t})});De.displayName=Ee;var Z=`AlertDialogContent`,[Oe,ke]=be(Z),Ae=r(`AlertDialogContent`),je=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...a}=e,o=Y(n),s=g.useRef(null),c=i(t,s),l=g.useRef(null);return(0,_.jsx)(ge,{contentName:Z,titleName:Me,docsSlug:`alert-dialog`,children:(0,_.jsx)(Oe,{scope:n,cancelRef:l,children:(0,_.jsxs)(W,{role:`alertdialog`,...o,...a,ref:c,onOpenAutoFocus:m(a.onOpenAutoFocus,e=>{e.preventDefault(),l.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,_.jsx)(Ae,{children:r}),(0,_.jsx)(Be,{contentRef:s})]})})})});je.displayName=Z;var Me=`AlertDialogTitle`,Ne=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Y(n);return(0,_.jsx)(G,{...i,...r,ref:t})});Ne.displayName=Me;var Pe=`AlertDialogDescription`,Fe=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Y(n);return(0,_.jsx)(K,{...i,...r,ref:t})});Fe.displayName=Pe;var Ie=`AlertDialogAction`,Le=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Y(n);return(0,_.jsx)(q,{...i,...r,ref:t})});Le.displayName=Ie;var Re=`AlertDialogCancel`,ze=g.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:a}=ke(Re,n),o=Y(n),s=i(t,a);return(0,_.jsx)(q,{...o,...r,ref:s})});ze.displayName=Re;var Be=({contentRef:e})=>{let t=`\`${Z}\` requires a description for the component to be accessible for screen reader users.
6
-
7
- You can add a description to the \`${Z}\` by passing a \`${Pe}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
8
-
9
- Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Z}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component.
10
-
11
- For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return g.useEffect(()=>{document.getElementById(e.current?.getAttribute(`aria-describedby`))||console.warn(t)},[t,e]),null},Ve=X,He=Ce,Ue=Te,We=De,Ge=je,Q=Le,Ke=ze,qe=Ne,Je=Fe,$=n();function Ye(){let e=(0,$.c)(3),[t,n]=(0,g.useState)(null),r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=()=>{n(document.activeElement)},e[0]=r):r=e[0];let i=r,a;return e[1]===t?a=e[2]:(a={onOpenAutoFocus:i,onCloseAutoFocus:e=>{document.activeElement===document.body&&(t instanceof HTMLElement&&t.focus(),e.preventDefault())}},e[1]=t,e[2]=a),a}var Xe=Ve,Ze=He,Qe=ie(({children:e,...t})=>(0,_.jsx)(Ue,{...t,children:(0,_.jsx)(re,{children:(0,_.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-end justify-center sm:items-start sm:top-[15%]`,children:e})})}));Qe.displayName=Ue.displayName;var $e=g.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;if(n[0]!==e){let{className:t,children:a,...o}=e;r=t,i=o,n[0]=e,n[1]=r,n[2]=i}else r=n[1],i=n[2];let a;n[3]===r?a=n[4]:(a=o(`fixed inset-0 z-50 bg-background/80 backdrop-blur-xs transition-opacity animate-in fade-in`,r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,_.jsx)(We,{className:a,...i,ref:t}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});$e.displayName=We.displayName;var et=g.forwardRef((e,t)=>{let n=(0,$.c)(11),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a=Ye(),s;n[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,_.jsx)($e,{}),n[3]=s):s=n[3];let c;n[4]===r?c=n[5]:(c=o(`fixed z-50 grid w-full max-w-2xl scale-100 gap-4 border bg-background p-6 opacity-100 shadow-sm animate-in fade-in-90 slide-in-from-bottom-10 sm:rounded-lg sm:zoom-in-90 sm:slide-in-from-bottom-0 md:w-full`,r),n[4]=r,n[5]=c);let l;return n[6]!==i||n[7]!==t||n[8]!==a||n[9]!==c?(l=(0,_.jsxs)(Qe,{children:[s,(0,_.jsx)(Ge,{ref:t,className:c,...a,...i})]}),n[6]=i,n[7]=t,n[8]=a,n[9]=c,n[10]=l):l=n[10],l});et.displayName=Ge.displayName;var tt=e=>{let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=o(`flex flex-col space-y-2 text-center sm:text-left`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,_.jsx)(`div`,{className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a};tt.displayName=`AlertDialogHeader`;var nt=e=>{let t=(0,$.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=o(`flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,_.jsx)(`div`,{className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a};nt.displayName=`AlertDialogFooter`;var rt=g.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=o(`text-lg font-semibold`,r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,_.jsx)(qe,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});rt.displayName=qe.displayName;var it=g.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=o(`text-muted-foreground`,r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,_.jsx)(Je,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});it.displayName=Je.displayName;var at=g.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=o(h(),r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,_.jsx)(Q,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});at.displayName=Q.displayName;var ot=g.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=o(h({variant:`destructive`}),r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,_.jsx)(Q,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});ot.displayName=`AlertDialogDestructiveAction`;var st=g.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=o(h({variant:`secondary`}),`mt-2 sm:mt-0`,r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,_.jsx)(Ke,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});st.displayName=Ke.displayName;export{B as _,it as a,tt as c,Ye as d,q as f,H as g,U as h,et as i,rt as l,K as m,at as n,ot as o,W as p,st as r,nt as s,Xe as t,Ze as u,G as v,V as y};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{u as t}from"./useEvent-xfs0Sn4r.js";import{t as n}from"./react-CBDbhulC.js";import{t as r}from"./compiler-runtime-CYIjoINj.js";import{D as i,b as a}from"./utils-B-_Wem_I.js";import{o}from"./useEventListener-92uWqz-P.js";import{t as s}from"./cn-ldLVeaqm.js";import{t as c}from"./jsx-runtime-B74pBk57.js";import{C as l,_ as u,b as d,v as f,w as p,x as m,y as h}from"./fullscreen-BFfuaW3H.js";import{d as g,u as _}from"./menu-items-CsV3aDPH.js";import{r as v}from"./requests-C6_IaFh7.js";import{a as y}from"./useNumberFormatter-DHJ9s6Vk.js";var b=e(n(),1),x=c(),S=`Collapsible`,[ee,C]=l(S),[te,w]=ee(S),T=b.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:a,onOpenChange:o,...s}=e,[c,l]=h({prop:r,defaultProp:i??!1,onChange:o,caller:S});return(0,x.jsx)(te,{scope:n,disabled:a,contentId:u(),open:c,onOpenToggle:b.useCallback(()=>l(e=>!e),[l]),children:(0,x.jsx)(p.div,{"data-state":A(c),"data-disabled":a?``:void 0,...s,ref:t})})});T.displayName=S;var E=`CollapsibleTrigger`,D=b.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,i=w(E,n);return(0,x.jsx)(p.button,{type:`button`,"aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":A(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:m(e.onClick,i.onOpenToggle)})});D.displayName=E;var O=`CollapsibleContent`,k=b.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=w(O,e.__scopeCollapsible);return(0,x.jsx)(f,{present:n||i.open,children:({present:e})=>(0,x.jsx)(ne,{...r,ref:t,present:e})})});k.displayName=O;var ne=b.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:i,...a}=e,s=w(O,n),[c,l]=b.useState(r),u=b.useRef(null),f=o(t,u),m=b.useRef(0),h=m.current,g=b.useRef(0),_=g.current,v=s.open||c,y=b.useRef(v),S=b.useRef(void 0);return b.useEffect(()=>{let e=requestAnimationFrame(()=>y.current=!1);return()=>cancelAnimationFrame(e)},[]),d(()=>{let e=u.current;if(e){S.current=S.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();m.current=t.height,g.current=t.width,y.current||(e.style.transitionDuration=S.current.transitionDuration,e.style.animationName=S.current.animationName),l(r)}},[s.open,r]),(0,x.jsx)(p.div,{"data-state":A(s.open),"data-disabled":s.disabled?``:void 0,id:s.contentId,hidden:!v,...a,ref:f,style:{"--radix-collapsible-content-height":h?`${h}px`:void 0,"--radix-collapsible-content-width":_?`${_}px`:void 0,...e.style},children:v&&i})});function A(e){return e?`open`:`closed`}var re=T,ie=D,ae=k,j=`Accordion`,oe=[`Home`,`End`,`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`],[M,se,ce]=g(j),[N,le]=l(j,[ce,C]),P=C(),F=b.forwardRef((e,t)=>{let{type:n,...r}=e,i=r,a=r;return(0,x.jsx)(M.Provider,{scope:e.__scopeAccordion,children:n===`multiple`?(0,x.jsx)(pe,{...a,ref:t}):(0,x.jsx)(fe,{...i,ref:t})})});F.displayName=j;var[I,ue]=N(j),[L,de]=N(j,{collapsible:!1}),fe=b.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:i=()=>{},collapsible:a=!1,...o}=e,[s,c]=h({prop:n,defaultProp:r??``,onChange:i,caller:j});return(0,x.jsx)(I,{scope:e.__scopeAccordion,value:b.useMemo(()=>s?[s]:[],[s]),onItemOpen:c,onItemClose:b.useCallback(()=>a&&c(``),[a,c]),children:(0,x.jsx)(L,{scope:e.__scopeAccordion,collapsible:a,children:(0,x.jsx)(z,{...o,ref:t})})})}),pe=b.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:i=()=>{},...a}=e,[o,s]=h({prop:n,defaultProp:r??[],onChange:i,caller:j}),c=b.useCallback(e=>s((t=[])=>[...t,e]),[s]),l=b.useCallback(e=>s((t=[])=>t.filter(t=>t!==e)),[s]);return(0,x.jsx)(I,{scope:e.__scopeAccordion,value:o,onItemOpen:c,onItemClose:l,children:(0,x.jsx)(L,{scope:e.__scopeAccordion,collapsible:!0,children:(0,x.jsx)(z,{...a,ref:t})})})}),[me,R]=N(j),z=b.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:i,orientation:a=`vertical`,...s}=e,c=b.useRef(null),l=o(c,t),u=se(n),d=_(i)===`ltr`,f=m(e.onKeyDown,e=>{if(!oe.includes(e.key))return;let t=e.target,n=u().filter(e=>!e.ref.current?.disabled),r=n.findIndex(e=>e.ref.current===t),i=n.length;if(r===-1)return;e.preventDefault();let o=r,s=i-1,c=()=>{o=r+1,o>s&&(o=0)},l=()=>{o=r-1,o<0&&(o=s)};switch(e.key){case`Home`:o=0;break;case`End`:o=s;break;case`ArrowRight`:a===`horizontal`&&(d?c():l());break;case`ArrowDown`:a===`vertical`&&c();break;case`ArrowLeft`:a===`horizontal`&&(d?l():c());break;case`ArrowUp`:a===`vertical`&&l()}n[o%i].ref.current?.focus()});return(0,x.jsx)(me,{scope:n,disabled:r,direction:i,orientation:a,children:(0,x.jsx)(M.Slot,{scope:n,children:(0,x.jsx)(p.div,{...s,"data-orientation":a,ref:l,onKeyDown:r?void 0:f})})})}),B=`AccordionItem`,[he,V]=N(B),ge=b.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...i}=e,a=R(B,n),o=ue(B,n),s=P(n),c=u(),l=r&&o.value.includes(r)||!1,d=a.disabled||e.disabled;return(0,x.jsx)(he,{scope:n,open:l,disabled:d,triggerId:c,children:(0,x.jsx)(re,{"data-orientation":a.orientation,"data-state":J(l),...s,...i,ref:t,disabled:d,open:l,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});ge.displayName=B;var H=`AccordionHeader`,U=b.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=R(j,n),a=V(H,n);return(0,x.jsx)(p.h3,{"data-orientation":i.orientation,"data-state":J(a.open),"data-disabled":a.disabled?``:void 0,...r,ref:t})});U.displayName=H;var W=`AccordionTrigger`,G=b.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=R(j,n),a=V(W,n),o=de(W,n),s=P(n);return(0,x.jsx)(M.ItemSlot,{scope:n,children:(0,x.jsx)(ie,{"aria-disabled":a.open&&!o.collapsible||void 0,"data-orientation":i.orientation,id:a.triggerId,...s,...r,ref:t})})});G.displayName=W;var K=`AccordionContent`,q=b.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=R(j,n),a=V(K,n),o=P(n);return(0,x.jsx)(ae,{role:`region`,"aria-labelledby":a.triggerId,"data-orientation":i.orientation,...o,...r,ref:t,style:{"--radix-accordion-content-height":`var(--radix-collapsible-content-height)`,"--radix-accordion-content-width":`var(--radix-collapsible-content-width)`,...e.style}})});q.displayName=K;function J(e){return e?`open`:`closed`}var Y=F,X=ge,_e=U,Z=G,Q=q,$=r(),ve=Y,ye=b.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=s(`border-b`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,x.jsx)(X,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});ye.displayName=`AccordionItem`;var be=b.forwardRef((e,t)=>{let n=(0,$.c)(12),r,i,a;n[0]===e?(r=n[1],i=n[2],a=n[3]):({className:i,children:r,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a);let o;n[4]===i?o=n[5]:(o=s(`flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 text-start`,i),n[4]=i,n[5]=o);let c;n[6]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,x.jsx)(y,{className:`h-4 w-4 transition-transform duration-200`}),n[6]=c):c=n[6];let l;return n[7]!==r||n[8]!==a||n[9]!==t||n[10]!==o?(l=(0,x.jsx)(_e,{className:`flex`,children:(0,x.jsxs)(Z,{ref:t,className:o,...a,children:[r,c]})}),n[7]=r,n[8]=a,n[9]=t,n[10]=o,n[11]=l):l=n[11],l});be.displayName=Z.displayName;var xe=b.forwardRef((e,t)=>{let n=(0,$.c)(17),r,i,a,o;n[0]===e?(r=n[1],i=n[2],a=n[3],o=n[4]):({className:i,children:r,wrapperClassName:o,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=o);let c;n[5]===i?c=n[6]:(c=s(`overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down`,i),n[5]=i,n[6]=c);let l;n[7]===o?l=n[8]:(l=s(`pb-4 pt-0`,o),n[7]=o,n[8]=l);let u;n[9]!==r||n[10]!==l?(u=(0,x.jsx)(`div`,{className:l,children:r}),n[9]=r,n[10]=l,n[11]=u):u=n[11];let d;return n[12]!==a||n[13]!==t||n[14]!==c||n[15]!==u?(d=(0,x.jsx)(Q,{ref:t,className:c,...a,children:u}),n[12]=a,n[13]=t,n[14]=c,n[15]=u,n[16]=d):d=n[16],d});xe.displayName=Q.displayName;var Se=class{map=new Map;get(e){return this.map.get(e)??[]}set(e,t){this.map.set(e,t)}add(e,t){this.map.has(e)?this.map.get(e).push(t):this.map.set(e,[t])}has(e){return this.map.has(e)}delete(e){return this.map.delete(e)}clear(){this.map.clear()}keys(){return this.map.keys()}values(){return this.map.values()}entries(){return this.map.entries()}forEach(e){this.map.forEach(e)}flatValues(){let e=[];for(let t of this.map.values())e.push(...t);return e}get size(){return this.map.size}},Ce=e=>{switch(e){case`chat`:return`chat_model`;case`autocomplete`:return`autocomplete_model`;case`edit`:return`edit_model`}},we=()=>{let e=(0,$.c)(10),n=t(i),{saveUserConfig:r}=v(),o;e[0]!==r||e[1]!==n?(o=async e=>{let t={ai:e};await r({config:t}).then(()=>{n(e=>a(e,t))})},e[0]=r,e[1]=n,e[2]=o):o=e[2];let s=o,c;e[3]===s?c=e[4]:(c=async(e,t)=>{let n=Ce(t);n&&await s({models:{[n]:e}})},e[3]=s,e[4]=c);let l=c,u;e[5]===s?u=e[6]:(u=async e=>{await s({mode:e})},e[5]=s,e[6]=u);let d=u,f;return e[7]!==d||e[8]!==l?(f={saveModelChange:l,saveModeChange:d},e[7]=d,e[8]=l,e[9]=f):f=e[9],f};export{ye as a,X as c,xe as i,Y as l,Se as n,be as o,ve as r,Q as s,we as t,Z as u};
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./react-CBDbhulC.js";import{t as n}from"./compiler-runtime-CYIjoINj.js";import{a as r,o as i,r as a}from"./useEventListener-92uWqz-P.js";import{t as o}from"./cn-ldLVeaqm.js";import{t as s}from"./jsx-runtime-B74pBk57.js";import{C as c,T as l,_ as u,c as d,d as f,f as p,g as m,i as h,m as ee,o as te,r as ne,s as g,t as re,u as ie,v as _,w as v,x as y,y as ae}from"./fullscreen-BFfuaW3H.js";import{a as b,i as oe,n as x,r as se,t as S}from"./dist-ConG15vZ.js";import{a as C,c as w,d as T,i as ce,l as E,n as le,o as D,r as O,s as ue,u as de}from"./menu-items-CsV3aDPH.js";import{i as k,n as fe,r as pe,t as me}from"./circle-BiW8b6Xq.js";import{t as he}from"./check-BoA6XBpj.js";import{t as ge}from"./chevron-right-CKA5zVsM.js";var A=e(t(),1),j=s(),_e=[`Enter`,` `],ve=[`ArrowDown`,`PageUp`,`Home`],ye=[`ArrowUp`,`PageDown`,`End`],be=[...ve,...ye],xe={ltr:[..._e,`ArrowRight`],rtl:[..._e,`ArrowLeft`]},Se={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},M=`Menu`,[N,Ce,we]=T(M),[P,Te]=c(M,[we,b,k]),F=b(),Ee=k(),[De,I]=P(M),[Oe,L]=P(M),ke=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=F(t),[c,l]=A.useState(null),u=A.useRef(!1),d=m(a),f=de(i);return A.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,j.jsx)(oe,{...s,children:(0,j.jsx)(De,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,j.jsx)(Oe,{scope:t,onClose:A.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};ke.displayName=M;var Ae=`MenuAnchor`,R=A.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=F(n);return(0,j.jsx)(S,{...i,...r,ref:t})});R.displayName=Ae;var z=`MenuPortal`,[je,Me]=P(z,{forceMount:void 0}),Ne=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=I(z,t);return(0,j.jsx)(je,{scope:t,forceMount:n,children:(0,j.jsx)(_,{present:n||a.open,children:(0,j.jsx)(f,{asChild:!0,container:i,children:r})})})};Ne.displayName=z;var B=`MenuContent`,[Pe,V]=P(B),Fe=A.forwardRef((e,t)=>{let n=Me(B,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=I(B,e.__scopeMenu),o=L(B,e.__scopeMenu);return(0,j.jsx)(N.Provider,{scope:e.__scopeMenu,children:(0,j.jsx)(_,{present:r||a.open,children:(0,j.jsx)(N.Slot,{scope:e.__scopeMenu,children:o.modal?(0,j.jsx)(Ie,{...i,ref:t}):(0,j.jsx)(Le,{...i,ref:t})})})})}),Ie=A.forwardRef((e,t)=>{let n=I(B,e.__scopeMenu),r=A.useRef(null),a=i(t,r);return A.useEffect(()=>{let e=r.current;if(e)return g(e)},[]),(0,j.jsx)(H,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:y(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Le=A.forwardRef((e,t)=>{let n=I(B,e.__scopeMenu);return(0,j.jsx)(H,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Re=a(`MenuContent.ScrollLock`),H=A.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:a,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEntryFocus:l,onEscapeKeyDown:u,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:h,onDismiss:te,disableOutsideScroll:ne,...g}=e,re=I(B,n),_=L(B,n),v=F(n),ae=Ee(n),b=Ce(n),[oe,x]=A.useState(null),S=A.useRef(null),C=i(t,S,re.onContentChange),w=A.useRef(0),T=A.useRef(``),ce=A.useRef(0),E=A.useRef(null),le=A.useRef(`right`),D=A.useRef(0),O=ne?d:A.Fragment,ue=ne?{as:Re,allowPinchZoom:!0}:void 0,de=e=>{let t=T.current+e,n=b().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=ht(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){T.current=t,window.clearTimeout(w.current),t!==``&&(w.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};A.useEffect(()=>()=>window.clearTimeout(w.current),[]),ie();let k=A.useCallback(e=>le.current===E.current?.side&&_t(e,E.current?.area),[]);return(0,j.jsx)(Pe,{scope:n,searchRef:T,onItemEnter:A.useCallback(e=>{k(e)&&e.preventDefault()},[k]),onItemLeave:A.useCallback(e=>{k(e)||(S.current?.focus(),x(null))},[k]),onTriggerLeave:A.useCallback(e=>{k(e)&&e.preventDefault()},[k]),pointerGraceTimerRef:ce,onPointerGraceIntentChange:A.useCallback(e=>{E.current=e},[]),children:(0,j.jsx)(O,{...ue,children:(0,j.jsx)(p,{asChild:!0,trapped:a,onMountAutoFocus:y(o,e=>{e.preventDefault(),S.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,j.jsx)(ee,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:u,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:h,onDismiss:te,children:(0,j.jsx)(pe,{asChild:!0,...ae,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:oe,onCurrentTabStopIdChange:x,onEntryFocus:y(l,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,j.jsx)(se,{role:`menu`,"aria-orientation":`vertical`,"data-state":dt(re.open),"data-radix-menu-content":``,dir:_.dir,...v,...g,ref:C,style:{outline:`none`,...g.style},onKeyDown:y(g.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&de(e.key));let i=S.current;if(e.target!==i||!be.includes(e.key))return;e.preventDefault();let a=b().filter(e=>!e.disabled).map(e=>e.ref.current);ye.includes(e.key)&&a.reverse(),pt(a)}),onBlur:y(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(w.current),T.current=``)}),onPointerMove:y(e.onPointerMove,X(e=>{let t=e.target,n=D.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>D.current?`right`:`left`;le.current=t,D.current=e.clientX}}))})})})})})})});Fe.displayName=B;var ze=`MenuGroup`,U=A.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,j.jsx)(v.div,{role:`group`,...r,ref:t})});U.displayName=ze;var Be=`MenuLabel`,Ve=A.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,j.jsx)(v.div,{...r,ref:t})});Ve.displayName=Be;var W=`MenuItem`,He=`menu.itemSelect`,G=A.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...a}=e,o=A.useRef(null),s=L(W,e.__scopeMenu),c=V(W,e.__scopeMenu),u=i(t,o),d=A.useRef(!1),f=()=>{let e=o.current;if(!n&&e){let t=new CustomEvent(He,{bubbles:!0,cancelable:!0});e.addEventListener(He,e=>r?.(e),{once:!0}),l(e,t),t.defaultPrevented?d.current=!1:s.onClose()}};return(0,j.jsx)(Ue,{...a,ref:u,disabled:n,onClick:y(e.onClick,f),onPointerDown:t=>{e.onPointerDown?.(t),d.current=!0},onPointerUp:y(e.onPointerUp,e=>{d.current||e.currentTarget?.click()}),onKeyDown:y(e.onKeyDown,e=>{let t=c.searchRef.current!==``;n||t&&e.key===` `||_e.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});G.displayName=W;var Ue=A.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:a,...o}=e,s=V(W,n),c=Ee(n),l=A.useRef(null),u=i(t,l),[d,f]=A.useState(!1),[p,m]=A.useState(``);return A.useEffect(()=>{let e=l.current;e&&m((e.textContent??``).trim())},[o.children]),(0,j.jsx)(N.ItemSlot,{scope:n,disabled:r,textValue:a??p,children:(0,j.jsx)(fe,{asChild:!0,...c,focusable:!r,children:(0,j.jsx)(v.div,{role:`menuitem`,"data-highlighted":d?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...o,ref:u,onPointerMove:y(e.onPointerMove,X(e=>{r?s.onItemLeave(e):(s.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:y(e.onPointerLeave,X(e=>s.onItemLeave(e))),onFocus:y(e.onFocus,()=>f(!0)),onBlur:y(e.onBlur,()=>f(!1))})})})}),We=`MenuCheckboxItem`,Ge=A.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,j.jsx)(Qe,{scope:e.__scopeMenu,checked:n,children:(0,j.jsx)(G,{role:`menuitemcheckbox`,"aria-checked":Y(n)?`mixed`:n,...i,ref:t,"data-state":ft(n),onSelect:y(i.onSelect,()=>r?.(Y(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Ge.displayName=We;var Ke=`MenuRadioGroup`,[qe,Je]=P(Ke,{value:void 0,onValueChange:()=>{}}),Ye=A.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=m(r);return(0,j.jsx)(qe,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,j.jsx)(U,{...i,ref:t})})});Ye.displayName=Ke;var Xe=`MenuRadioItem`,Ze=A.forwardRef((e,t)=>{let{value:n,...r}=e,i=Je(Xe,e.__scopeMenu),a=n===i.value;return(0,j.jsx)(Qe,{scope:e.__scopeMenu,checked:a,children:(0,j.jsx)(G,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":ft(a),onSelect:y(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});Ze.displayName=Xe;var K=`MenuItemIndicator`,[Qe,$e]=P(K,{checked:!1}),et=A.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...i}=e,a=$e(K,n);return(0,j.jsx)(_,{present:r||Y(a.checked)||a.checked===!0,children:(0,j.jsx)(v.span,{...i,ref:t,"data-state":ft(a.checked)})})});et.displayName=K;var tt=`MenuSeparator`,nt=A.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,j.jsx)(v.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});nt.displayName=tt;var rt=`MenuArrow`,it=A.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=F(n);return(0,j.jsx)(x,{...i,...r,ref:t})});it.displayName=rt;var q=`MenuSub`,[at,ot]=P(q),st=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=I(q,t),o=F(t),[s,c]=A.useState(null),[l,d]=A.useState(null),f=m(i);return A.useEffect(()=>(a.open===!1&&f(!1),()=>f(!1)),[a.open,f]),(0,j.jsx)(oe,{...o,children:(0,j.jsx)(De,{scope:t,open:r,onOpenChange:f,content:l,onContentChange:d,children:(0,j.jsx)(at,{scope:t,contentId:u(),triggerId:u(),trigger:s,onTriggerChange:c,children:n})})})};st.displayName=q;var J=`MenuSubTrigger`,ct=A.forwardRef((e,t)=>{let n=I(J,e.__scopeMenu),i=L(J,e.__scopeMenu),a=ot(J,e.__scopeMenu),o=V(J,e.__scopeMenu),s=A.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:l}=o,u={__scopeMenu:e.__scopeMenu},d=A.useCallback(()=>{s.current&&window.clearTimeout(s.current),s.current=null},[]);return A.useEffect(()=>d,[d]),A.useEffect(()=>{let e=c.current;return()=>{window.clearTimeout(e),l(null)}},[c,l]),(0,j.jsx)(R,{asChild:!0,...u,children:(0,j.jsx)(Ue,{id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":a.contentId,"data-state":dt(n.open),...e,ref:r(t,a.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:y(e.onPointerMove,X(t=>{o.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!s.current&&(o.onPointerGraceIntentChange(null),s.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:y(e.onPointerLeave,X(e=>{d();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,a=i?-5:5,s=t[i?`left`:`right`],l=t[i?`right`:`left`];o.onPointerGraceIntentChange({area:[{x:e.clientX+a,y:e.clientY},{x:s,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:s,y:t.bottom}],side:r}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.onPointerGraceIntentChange(null),300)}else{if(o.onTriggerLeave(e),e.defaultPrevented)return;o.onPointerGraceIntentChange(null)}})),onKeyDown:y(e.onKeyDown,t=>{let r=o.searchRef.current!==``;e.disabled||r&&t.key===` `||xe[i.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});ct.displayName=J;var lt=`MenuSubContent`,ut=A.forwardRef((e,t)=>{let n=Me(B,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,o=I(B,e.__scopeMenu),s=L(B,e.__scopeMenu),c=ot(lt,e.__scopeMenu),l=A.useRef(null),u=i(t,l);return(0,j.jsx)(N.Provider,{scope:e.__scopeMenu,children:(0,j.jsx)(_,{present:r||o.open,children:(0,j.jsx)(N.Slot,{scope:e.__scopeMenu,children:(0,j.jsx)(H,{id:c.contentId,"aria-labelledby":c.triggerId,...a,ref:u,align:`start`,side:s.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{s.isUsingKeyboardRef.current&&l.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:y(e.onFocusOutside,e=>{e.target!==c.trigger&&o.onOpenChange(!1)}),onEscapeKeyDown:y(e.onEscapeKeyDown,e=>{s.onClose(),e.preventDefault()}),onKeyDown:y(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=Se[s.dir].includes(e.key);t&&n&&(o.onOpenChange(!1),c.trigger?.focus(),e.preventDefault())})})})})})});ut.displayName=lt;function dt(e){return e?`open`:`closed`}function Y(e){return e===`indeterminate`}function ft(e){return Y(e)?`indeterminate`:e?`checked`:`unchecked`}function pt(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function mt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function ht(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=mt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function gt(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function _t(e,t){return t?gt({x:e.clientX,y:e.clientY},t):!1}function X(e){return t=>t.pointerType===`mouse`?e(t):void 0}var vt=ke,yt=R,bt=Ne,xt=Fe,St=U,Ct=Ve,wt=G,Tt=Ge,Et=Ye,Dt=Ze,Ot=et,kt=nt,At=it,jt=st,Mt=ct,Nt=ut,Z=`DropdownMenu`,[Pt,Ft]=c(Z,[Te]),Q=Te(),[It,Lt]=Pt(Z),Rt=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=Q(t),l=A.useRef(null),[d,f]=ae({prop:i,defaultProp:a??!1,onChange:o,caller:Z});return(0,j.jsx)(It,{scope:t,triggerId:u(),triggerRef:l,contentId:u(),open:d,onOpenChange:f,onOpenToggle:A.useCallback(()=>f(e=>!e),[f]),modal:s,children:(0,j.jsx)(vt,{...c,open:d,onOpenChange:f,dir:r,modal:s,children:n})})};Rt.displayName=Z;var zt=`DropdownMenuTrigger`,Bt=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:i=!1,...a}=e,o=Lt(zt,n),s=Q(n);return(0,j.jsx)(yt,{asChild:!0,...s,children:(0,j.jsx)(v.button,{type:`button`,id:o.triggerId,"aria-haspopup":`menu`,"aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?`open`:`closed`,"data-disabled":i?``:void 0,disabled:i,...a,ref:r(t,o.triggerRef),onPointerDown:y(e.onPointerDown,e=>{!i&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:y(e.onKeyDown,e=>{i||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});Bt.displayName=zt;var Vt=`DropdownMenuPortal`,Ht=e=>{let{__scopeDropdownMenu:t,...n}=e,r=Q(t);return(0,j.jsx)(bt,{...r,...n})};Ht.displayName=Vt;var Ut=`DropdownMenuContent`,Wt=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Lt(Ut,n),a=Q(n),o=A.useRef(!1);return(0,j.jsx)(xt,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:y(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:y(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Wt.displayName=Ut;var Gt=`DropdownMenuGroup`,Kt=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(St,{...i,...r,ref:t})});Kt.displayName=Gt;var qt=`DropdownMenuLabel`,Jt=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Ct,{...i,...r,ref:t})});Jt.displayName=qt;var Yt=`DropdownMenuItem`,Xt=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(wt,{...i,...r,ref:t})});Xt.displayName=Yt;var Zt=`DropdownMenuCheckboxItem`,Qt=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Tt,{...i,...r,ref:t})});Qt.displayName=Zt;var $t=`DropdownMenuRadioGroup`,en=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Et,{...i,...r,ref:t})});en.displayName=$t;var tn=`DropdownMenuRadioItem`,nn=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Dt,{...i,...r,ref:t})});nn.displayName=tn;var rn=`DropdownMenuItemIndicator`,an=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Ot,{...i,...r,ref:t})});an.displayName=rn;var on=`DropdownMenuSeparator`,sn=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(kt,{...i,...r,ref:t})});sn.displayName=on;var cn=`DropdownMenuArrow`,ln=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(At,{...i,...r,ref:t})});ln.displayName=cn;var un=e=>{let{__scopeDropdownMenu:t,children:n,open:r,onOpenChange:i,defaultOpen:a}=e,o=Q(t),[s,c]=ae({prop:r,defaultProp:a??!1,onChange:i,caller:`DropdownMenuSub`});return(0,j.jsx)(jt,{...o,open:s,onOpenChange:c,children:n})},dn=`DropdownMenuSubTrigger`,fn=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Mt,{...i,...r,ref:t})});fn.displayName=dn;var pn=`DropdownMenuSubContent`,mn=A.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Q(n);return(0,j.jsx)(Nt,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});mn.displayName=pn;var hn=Rt,gn=Bt,_n=Ht,vn=Wt,yn=Kt,bn=Jt,xn=Xt,Sn=Qt,Cn=nn,wn=an,Tn=sn,En=un,Dn=fn,On=mn,$=n(),kn=hn,An=gn,jn=yn,Mn=ne(_n),Nn=h(vn),Pn=h(On),Fn=En,In=A.forwardRef((e,t)=>{let n=(0,$.c)(17),r,i,a,o,s;n[0]===e?(r=n[1],i=n[2],a=n[3],o=n[4],s=n[5]):({className:i,inset:a,showChevron:s,children:r,...o}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=o,n[5]=s);let c=s===void 0||s,l;n[6]!==i||n[7]!==a?(l=E({className:i,inset:a}),n[6]=i,n[7]=a,n[8]=l):l=n[8];let u;n[9]===c?u=n[10]:(u=c&&(0,j.jsx)(ge,{className:`ml-auto h-4 w-4`}),n[9]=c,n[10]=u);let d;return n[11]!==r||n[12]!==o||n[13]!==t||n[14]!==l||n[15]!==u?(d=(0,j.jsxs)(Dn,{ref:t,className:l,...o,children:[r,u]}),n[11]=r,n[12]=o,n[13]=t,n[14]=l,n[15]=u,n[16]=d):d=n[16],d});In.displayName=Dn.displayName;var Ln=A.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=o(O({subcontent:!0}),`animate-in data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1`,r),n[3]=r,n[4]=a);let s;return n[5]!==i||n[6]!==t||n[7]!==a?(s=(0,j.jsx)(Pn,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=s):s=n[8],s});Ln.displayName=On.displayName;var Rn=A.forwardRef((e,t)=>{let n=(0,$.c)(17),r,i,a,s;n[0]===e?(r=n[1],i=n[2],a=n[3],s=n[4]):({className:r,scrollable:a,sideOffset:s,...i}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=s);let c=a===void 0||a,l=s===void 0?4:s,u;n[5]!==r||n[6]!==c?(u=o(O(),`animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 print:hidden`,c&&`overflow-auto`,r),n[5]=r,n[6]=c,n[7]=u):u=n[7];let d=c?`calc(var(--radix-dropdown-menu-content-available-height) - ${re}px)`:void 0,f;n[8]!==i.style||n[9]!==d?(f={...i.style,maxHeight:d},n[8]=i.style,n[9]=d,n[10]=f):f=n[10];let p;return n[11]!==i||n[12]!==t||n[13]!==l||n[14]!==u||n[15]!==f?(p=(0,j.jsx)(Mn,{children:(0,j.jsx)(te,{children:(0,j.jsx)(Nn,{ref:t,sideOffset:l,className:u,style:f,...i})})}),n[11]=i,n[12]=t,n[13]=l,n[14]=u,n[15]=f,n[16]=p):p=n[16],p});Rn.displayName=vn.displayName;var zn=A.forwardRef((e,t)=>{let n=(0,$.c)(13),r,i,a,o;n[0]===e?(r=n[1],i=n[2],a=n[3],o=n[4]):({className:r,inset:i,variant:o,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=o);let s;n[5]!==r||n[6]!==i||n[7]!==o?(s=D({className:r,inset:i,variant:o}),n[5]=r,n[6]=i,n[7]=o,n[8]=s):s=n[8];let c;return n[9]!==a||n[10]!==t||n[11]!==s?(c=(0,j.jsx)(xn,{ref:t,className:s,...a}),n[9]=a,n[10]=t,n[11]=s,n[12]=c):c=n[12],c});zn.displayName=xn.displayName;var Bn=A.forwardRef((e,t)=>{let n=(0,$.c)(15),r,i,a,o;n[0]===e?(r=n[1],i=n[2],a=n[3],o=n[4]):({className:a,children:i,checked:r,...o}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=o);let s;n[5]===a?s=n[6]:(s=C({className:a}),n[5]=a,n[6]=s);let c;n[7]===Symbol.for(`react.memo_cache_sentinel`)?(c=ce(),n[7]=c):c=n[7];let l;n[8]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,j.jsx)(`span`,{className:c,children:(0,j.jsx)(wn,{children:(0,j.jsx)(he,{className:`h-4 w-4`})})}),n[8]=l):l=n[8];let u;return n[9]!==r||n[10]!==i||n[11]!==o||n[12]!==t||n[13]!==s?(u=(0,j.jsxs)(Sn,{ref:t,className:s,checked:r,...o,children:[l,i]}),n[9]=r,n[10]=i,n[11]=o,n[12]=t,n[13]=s,n[14]=u):u=n[14],u});Bn.displayName=Sn.displayName;var Vn=A.forwardRef((e,t)=>{let n=(0,$.c)(13),r,i,a;n[0]===e?(r=n[1],i=n[2],a=n[3]):({className:i,children:r,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a);let o;n[4]===i?o=n[5]:(o=C({className:i}),n[4]=i,n[5]=o);let s;n[6]===Symbol.for(`react.memo_cache_sentinel`)?(s=ce(),n[6]=s):s=n[6];let c;n[7]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,j.jsx)(`span`,{className:s,children:(0,j.jsx)(wn,{children:(0,j.jsx)(me,{className:`h-2 w-2 fill-current`})})}),n[7]=c):c=n[7];let l;return n[8]!==r||n[9]!==a||n[10]!==t||n[11]!==o?(l=(0,j.jsxs)(Cn,{ref:t,className:o,...a,children:[c,r]}),n[8]=r,n[9]=a,n[10]=t,n[11]=o,n[12]=l):l=n[12],l});Vn.displayName=Cn.displayName;var Hn=A.forwardRef((e,t)=>{let n=(0,$.c)(11),r,i,a;n[0]===e?(r=n[1],i=n[2],a=n[3]):({className:r,inset:i,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a);let o;n[4]!==r||n[5]!==i?(o=ue({className:r,inset:i}),n[4]=r,n[5]=i,n[6]=o):o=n[6];let s;return n[7]!==a||n[8]!==t||n[9]!==o?(s=(0,j.jsx)(bn,{ref:t,className:o,...a}),n[7]=a,n[8]=t,n[9]=o,n[10]=s):s=n[10],s});Hn.displayName=bn.displayName;var Un=A.forwardRef((e,t)=>{let n=(0,$.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=w({className:r}),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,j.jsx)(Tn,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});Un.displayName=Tn.displayName;var Wn=le;export{Te as A,Et as C,jt as D,kt as E,Nt as O,bt as S,vt as T,xt as _,zn as a,Ot as b,Un as c,Ln as d,In as f,Tt as g,At as h,jn as i,Mt as k,Wn as l,yt as m,Bn as n,Hn as o,An as p,Rn as r,Mn as s,kn as t,Fn as u,St as v,Dt as w,Ct as x,wt as y};