@haklex/rich-ext-excalidraw 0.49.1 → 0.50.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.
Files changed (42) hide show
  1. package/dist/ExcalidrawConfigContext.d.ts +3 -1
  2. package/dist/ExcalidrawConfigContext.d.ts.map +1 -1
  3. package/dist/ExcalidrawDisplayRenderer.d.ts +1 -0
  4. package/dist/ExcalidrawDisplayRenderer.d.ts.map +1 -1
  5. package/dist/ExcalidrawEditRenderer.d.ts.map +1 -1
  6. package/dist/ExcalidrawFrameStates.d.ts +11 -0
  7. package/dist/ExcalidrawFrameStates.d.ts.map +1 -0
  8. package/dist/ExcalidrawSSRRenderer.d.ts.map +1 -1
  9. package/dist/display.test.d.ts +2 -0
  10. package/dist/display.test.d.ts.map +1 -0
  11. package/dist/index.mjs +51 -55
  12. package/dist/rich-ext-excalidraw.css +1 -1
  13. package/dist/scene/InteractiveScene.d.ts +11 -0
  14. package/dist/scene/InteractiveScene.d.ts.map +1 -0
  15. package/dist/scene/Scene.d.ts +24 -0
  16. package/dist/scene/Scene.d.ts.map +1 -0
  17. package/dist/scene/fonts.d.ts +8 -0
  18. package/dist/scene/fonts.d.ts.map +1 -0
  19. package/dist/scene/normalize.d.ts +4 -0
  20. package/dist/scene/normalize.d.ts.map +1 -0
  21. package/dist/scene/rough.d.ts +19 -0
  22. package/dist/scene/rough.d.ts.map +1 -0
  23. package/dist/scene/scene.test.d.ts +2 -0
  24. package/dist/scene/scene.test.d.ts.map +1 -0
  25. package/dist/scene/styles.css.d.ts +7 -0
  26. package/dist/scene/styles.css.d.ts.map +1 -0
  27. package/dist/scene/types.d.ts +118 -0
  28. package/dist/scene/types.d.ts.map +1 -0
  29. package/dist/static.mjs +2 -2
  30. package/dist/styles.css.d.ts +5 -2
  31. package/dist/styles.css.d.ts.map +1 -1
  32. package/dist/transformer-CbJAOPsv.js +487 -0
  33. package/dist/useExcalidrawData.d.ts +4 -0
  34. package/dist/useExcalidrawData.d.ts.map +1 -1
  35. package/dist/useExcalidrawFont-D_lnfKV8.js +803 -0
  36. package/dist/useExcalidrawFont.d.ts +2 -0
  37. package/dist/useExcalidrawFont.d.ts.map +1 -0
  38. package/package.json +12 -6
  39. package/dist/constants.d.ts +0 -5
  40. package/dist/constants.d.ts.map +0 -1
  41. package/dist/transformer-BaQILRBF.js +0 -315
  42. package/dist/useExcalidrawData-ZN9PHFyy.js +0 -227
@@ -1,9 +1,11 @@
1
1
  import { ReactNode } from 'react';
2
2
  export interface ExcalidrawConfig {
3
3
  apiUrl?: string;
4
+ /** Stylesheet that defines the hand-drawn fonts (Excalifont, LXGW WenKai…); loaded once on first render. */
5
+ fontCssHref?: string;
4
6
  saveSnapshot?: (snapshot: object, existingRef?: string) => Promise<string>;
5
7
  }
6
- export declare function ExcalidrawConfigProvider({ apiUrl, saveSnapshot, children, }: ExcalidrawConfig & {
8
+ export declare function ExcalidrawConfigProvider({ apiUrl, fontCssHref, saveSnapshot, children, }: ExcalidrawConfig & {
7
9
  children: ReactNode;
8
10
  }): import('react').JSX.Element;
9
11
  export declare function useExcalidrawConfig(): ExcalidrawConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"ExcalidrawConfigContext.d.ts","sourceRoot":"","sources":["../src/ExcalidrawConfigContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3E;AAID,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,YAAY,EACZ,QAAQ,GACT,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAU5C;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD"}
1
+ {"version":3,"file":"ExcalidrawConfigContext.d.ts","sourceRoot":"","sources":["../src/ExcalidrawConfigContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E;AAID,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAQ5C;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD"}
@@ -1,6 +1,7 @@
1
1
  import { FC, ReactNode } from 'react';
2
2
  export interface ExcalidrawExpandPayload {
3
3
  content: ReactNode;
4
+ elementCount?: number;
4
5
  target: HTMLElement;
5
6
  theme: 'light' | 'dark';
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExcalidrawDisplayRenderer.d.ts","sourceRoot":"","sources":["../src/ExcalidrawDisplayRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAMf,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;AAE5E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,6BAA6B,CAMvE,CAAC"}
1
+ {"version":3,"file":"ExcalidrawDisplayRenderer.d.ts","sourceRoot":"","sources":["../src/ExcalidrawDisplayRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,EAAE,EAAE,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAajF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;AAE5E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,6BAA6B,CAgDvE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExcalidrawEditRenderer.d.ts","sourceRoot":"","sources":["../src/ExcalidrawEditRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,EAAE,EAAE,MAAM,OAAO,CAAC;AAM/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAyZD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CA6HlE,CAAC"}
1
+ {"version":3,"file":"ExcalidrawEditRenderer.d.ts","sourceRoot":"","sources":["../src/ExcalidrawEditRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,EAAE,EAAE,MAAM,OAAO,CAAC;AAY/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlD,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAyZD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CA8HlE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { FC } from 'react';
2
+ export declare const ExcalidrawPlaceholderState: FC<{
3
+ elementCount?: number;
4
+ }>;
5
+ export declare const ExcalidrawLoadingState: FC;
6
+ export declare const ExcalidrawEmptyState: FC;
7
+ export declare const ExcalidrawErrorState: FC<{
8
+ message: string;
9
+ onRetry?: () => void;
10
+ }>;
11
+ //# sourceMappingURL=ExcalidrawFrameStates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcalidrawFrameStates.d.ts","sourceRoot":"","sources":["../src/ExcalidrawFrameStates.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAQpE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,EAIpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAIlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAa9E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExcalidrawSSRRenderer.d.ts","sourceRoot":"","sources":["../src/ExcalidrawSSRRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGtE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA6BD,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAQhE,CAAC"}
1
+ {"version":3,"file":"ExcalidrawSSRRenderer.d.ts","sourceRoot":"","sources":["../src/ExcalidrawSSRRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAItE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0BD,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAQhE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=display.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.test.d.ts","sourceRoot":"","sources":["../src/display.test.tsx"],"names":[],"mappings":""}
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { a as ExcalidrawNode, c as ExcalidrawDisplayRenderer, i as $isExcalidrawNode, l as _defineProperty, n as ExcalidrawExpandShell, o as EXCALIDRAW_NODE_KEY, r as $createExcalidrawNode, s as ExcalidrawSSRRenderer, t as EXCALIDRAW_BLOCK_TRANSFORMER, u as __exportAll } from "./transformer-BaQILRBF.js";
2
- import { A as fitSceneOnReady, C as excalidrawFullscreenPopup, E as excalidrawLoading, M as readonlyUIOptions, N as ExcalidrawConfigProvider, P as useExcalidrawConfig, S as excalidrawError, T as excalidrawHeaderClose, _ as excalidrawDialogMeta, a as excalidrawActionBarBtn, b as excalidrawEditOverlay, d as excalidrawConfirmBtn, f as excalidrawConfirmBtnDanger, h as excalidrawDialogHeader, i as serializeSnapshot, k as excalidrawStatusDot, m as excalidrawDialogCanvas, n as isLocalScenePath, p as excalidrawConfirmBtnPrimary, r as parseSnapshot, t as useExcalidrawData, u as excalidrawConfirmActions, v as excalidrawDialogTitle, w as excalidrawHeaderActions, x as excalidrawEditorContainer, y as excalidrawEditLabel } from "./useExcalidrawData-ZN9PHFyy.js";
3
- import { Suspense, createElement, lazy, useCallback, useEffect, useRef, useState } from "react";
1
+ import { a as ExcalidrawNode, c as ExcalidrawDisplayRenderer, i as $isExcalidrawNode, l as _defineProperty, n as ExcalidrawExpandShell, o as EXCALIDRAW_NODE_KEY, r as $createExcalidrawNode, s as ExcalidrawSSRRenderer, t as EXCALIDRAW_BLOCK_TRANSFORMER, u as __exportAll } from "./transformer-CbJAOPsv.js";
2
+ import { A as excalidrawEditorContainer, C as excalidrawDialogCanvas, D as excalidrawDialogTitle, E as excalidrawDialogMeta, I as excalidrawStatusDot, L as ExcalidrawConfigProvider, M as excalidrawHeaderActions, N as excalidrawHeaderClose, O as excalidrawEditLabel, R as useExcalidrawConfig, S as excalidrawConfirmBtnPrimary, a as serializeSnapshot, b as excalidrawConfirmBtn, f as ExcalidrawEmptyState, g as excalidrawActionBarBtn, i as parseSnapshot, j as excalidrawFullscreenPopup, k as excalidrawEditOverlay, l as Scene, m as ExcalidrawLoadingState, n as useExcalidrawData, o as countElements, p as ExcalidrawErrorState, r as isLocalScenePath, s as toScene, t as useExcalidrawFont, w as excalidrawDialogHeader, x as excalidrawConfirmBtnDanger, y as excalidrawConfirmActions } from "./useExcalidrawFont-D_lnfKV8.js";
3
+ import { Suspense, createElement, lazy, useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { useColorScheme } from "@haklex/rich-editor/static";
6
6
  import { Clipboard, Download, PenTool, Pencil, Save, X } from "lucide-react";
@@ -390,15 +390,15 @@ var ExcalidrawEditorDialogContent = ({ dismiss, ExcalidrawComponent, initialData
390
390
  ],
391
391
  onChange: handleStorageModeChange
392
392
  }),
393
- /* @__PURE__ */ jsx("div", { className: "_1c3wdzlh" }),
393
+ /* @__PURE__ */ jsx("div", { className: "_1c3wdzlk" }),
394
394
  /* @__PURE__ */ jsxs("button", {
395
- className: "_1c3wdzlg",
395
+ className: "_1c3wdzlj",
396
396
  disabled: isSaving,
397
397
  type: "button",
398
398
  onClick: handleManualUpload,
399
399
  children: [/* @__PURE__ */ jsx(Save, { size: 14 }), /* @__PURE__ */ jsx("span", { children: isSaving ? "Saving..." : "Save" })]
400
400
  }),
401
- /* @__PURE__ */ jsx("div", { className: "_1c3wdzlh" })
401
+ /* @__PURE__ */ jsx("div", { className: "_1c3wdzlk" })
402
402
  ] }),
403
403
  /* @__PURE__ */ jsxs("button", {
404
404
  className: excalidrawActionBarBtn,
@@ -412,8 +412,8 @@ var ExcalidrawEditorDialogContent = ({ dismiss, ExcalidrawComponent, initialData
412
412
  onClick: handleCopyJson,
413
413
  children: [/* @__PURE__ */ jsx(Clipboard, { size: 14 }), "Copy"]
414
414
  }),
415
- storageMode !== "inline" && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", { className: "_1c3wdzlh" }), /* @__PURE__ */ jsx("input", {
416
- className: "_1c3wdzli",
415
+ storageMode !== "inline" && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", { className: "_1c3wdzlk" }), /* @__PURE__ */ jsx("input", {
416
+ className: "_1c3wdzll",
417
417
  placeholder: "base URL / ref",
418
418
  spellCheck: false,
419
419
  type: "text",
@@ -444,12 +444,10 @@ var ExcalidrawEditorDialogContent = ({ dismiss, ExcalidrawComponent, initialData
444
444
  var ExcalidrawEditRenderer = ({ snapshot, onSnapshotChange }) => {
445
445
  const theme = useColorScheme();
446
446
  const { saveSnapshot } = useExcalidrawConfig();
447
- const { snapshot: initialData, loading: dataLoading, error: dataError, baseRef, baseData } = useExcalidrawData(snapshot);
448
- const [ExcalidrawComponent, setExcalidrawComponent] = useState(null);
449
- const [libLoading, setLibLoading] = useState(true);
450
- const previewApiRef = useRef(null);
451
- const initialDataRef = useRef(void 0);
452
- const [previewKey, setPreviewKey] = useState(0);
447
+ const { snapshot: initialData, loading: dataLoading, error: dataError, retry, retryable, baseRef, baseData } = useExcalidrawData(snapshot);
448
+ const [editedData, setEditedData] = useState();
449
+ const [editorLoading, setEditorLoading] = useState(false);
450
+ const excalidrawRef = useRef(null);
453
451
  const onSnapshotChangeRef = useRef(onSnapshotChange);
454
452
  onSnapshotChangeRef.current = onSnapshotChange;
455
453
  const saveSnapshotRef = useRef(saveSnapshot);
@@ -457,19 +455,11 @@ var ExcalidrawEditRenderer = ({ snapshot, onSnapshotChange }) => {
457
455
  const snapshotRef = useRef(snapshot);
458
456
  snapshotRef.current = snapshot;
459
457
  const { className: portalClassName } = usePortalTheme();
460
- useEffect(() => {
461
- if (initialData && !initialDataRef.current) initialDataRef.current = initialData;
462
- }, [initialData]);
463
- useEffect(() => {
464
- Promise.all([import("@excalidraw/excalidraw"), import("@excalidraw/excalidraw/index.css")]).then(([mod]) => {
465
- const Comp = mod.Excalidraw || mod.default?.Excalidraw;
466
- if (Comp) setExcalidrawComponent(() => Comp);
467
- setLibLoading(false);
468
- }).catch((err) => {
469
- console.error("[excalidraw] failed to load", err);
470
- setLibLoading(false);
471
- });
472
- }, []);
458
+ useExcalidrawFont();
459
+ const previewData = editedData ?? initialData;
460
+ const previewDataRef = useRef(previewData);
461
+ previewDataRef.current = previewData;
462
+ const previewScene = useMemo(() => toScene(previewData), [previewData]);
473
463
  const baseRefRef = useRef(baseRef);
474
464
  const baseDataRefOuter = useRef(baseData);
475
465
  useEffect(() => {
@@ -478,24 +468,38 @@ var ExcalidrawEditRenderer = ({ snapshot, onSnapshotChange }) => {
478
468
  useEffect(() => {
479
469
  if (baseData) baseDataRefOuter.current = baseData;
480
470
  }, [baseData]);
481
- const handleOpenEditor = useCallback(() => {
482
- if (!ExcalidrawComponent || dataLoading) return;
471
+ const loadExcalidraw = useCallback(async () => {
472
+ if (excalidrawRef.current) return excalidrawRef.current;
473
+ const [mod] = await Promise.all([import("@excalidraw/excalidraw"), import("@excalidraw/excalidraw/index.css")]);
474
+ const Comp = mod.Excalidraw || mod.default?.Excalidraw;
475
+ excalidrawRef.current = Comp ?? null;
476
+ return excalidrawRef.current;
477
+ }, []);
478
+ const handleOpenEditor = useCallback(async () => {
479
+ if (dataLoading || editorLoading) return;
480
+ setEditorLoading(true);
481
+ let ExcalidrawComponent = null;
482
+ try {
483
+ ExcalidrawComponent = await loadExcalidraw();
484
+ } catch (err) {
485
+ console.error("[excalidraw] failed to load", err);
486
+ } finally {
487
+ setEditorLoading(false);
488
+ }
489
+ if (!ExcalidrawComponent) return;
483
490
  presentDialog({
484
491
  content: ({ dismiss }) => /* @__PURE__ */ jsx(ExcalidrawEditorDialogContent, {
485
492
  ExcalidrawComponent,
486
493
  baseData: baseDataRefOuter.current,
487
494
  baseRef: baseRefRef.current,
488
495
  dismiss,
489
- initialData: initialDataRef.current,
496
+ initialData: previewDataRef.current,
490
497
  initialSnapshot: snapshotRef.current,
491
498
  saveSnapshot: saveSnapshotRef.current,
492
499
  theme,
493
500
  onSave: (ref) => onSnapshotChangeRef.current(ref),
494
501
  onClose: (doc) => {
495
- if (doc) {
496
- initialDataRef.current = doc;
497
- setPreviewKey((k) => k + 1);
498
- }
502
+ if (doc) setEditedData(doc);
499
503
  }
500
504
  }),
501
505
  className: excalidrawFullscreenPopup,
@@ -505,44 +509,36 @@ var ExcalidrawEditRenderer = ({ snapshot, onSnapshotChange }) => {
505
509
  clickOutsideToDismiss: false
506
510
  });
507
511
  }, [
508
- ExcalidrawComponent,
509
512
  dataLoading,
513
+ editorLoading,
514
+ loadExcalidraw,
510
515
  theme,
511
516
  portalClassName
512
517
  ]);
513
- if (dataLoading || libLoading || !ExcalidrawComponent) return /* @__PURE__ */ jsx("div", {
518
+ if (dataLoading) return /* @__PURE__ */ jsx("div", {
514
519
  className: excalidrawEditorContainer,
515
- children: /* @__PURE__ */ jsx("div", {
516
- className: excalidrawLoading,
517
- children: "Loading excalidraw editor..."
518
- })
520
+ children: /* @__PURE__ */ jsx(ExcalidrawLoadingState, {})
519
521
  });
520
522
  if (dataError) return /* @__PURE__ */ jsx("div", {
521
523
  className: excalidrawEditorContainer,
522
- children: /* @__PURE__ */ jsx("div", {
523
- className: excalidrawError,
524
- children: dataError
524
+ children: /* @__PURE__ */ jsx(ExcalidrawErrorState, {
525
+ message: dataError,
526
+ onRetry: retryable ? retry : void 0
525
527
  })
526
528
  });
527
529
  return /* @__PURE__ */ jsxs("div", {
528
530
  className: excalidrawEditorContainer,
529
- children: [/* @__PURE__ */ jsx(ExcalidrawComponent, {
530
- viewModeEnabled: true,
531
- zenModeEnabled: true,
532
- UIOptions: readonlyUIOptions,
533
- initialData: initialDataRef.current,
534
- theme,
535
- excalidrawAPI: (api) => {
536
- previewApiRef.current = api;
537
- fitSceneOnReady(api);
538
- }
539
- }, previewKey), /* @__PURE__ */ jsx("button", {
531
+ children: [previewScene && countElements(previewScene) > 0 ? /* @__PURE__ */ jsx(Scene, {
532
+ scene: previewScene,
533
+ theme
534
+ }) : /* @__PURE__ */ jsx(ExcalidrawEmptyState, {}), /* @__PURE__ */ jsx("button", {
535
+ "aria-label": "Edit whiteboard",
540
536
  className: excalidrawEditOverlay,
541
537
  type: "button",
542
538
  onClick: handleOpenEditor,
543
539
  children: /* @__PURE__ */ jsxs("span", {
544
540
  className: excalidrawEditLabel,
545
- children: [/* @__PURE__ */ jsx(Pencil, { size: 16 }), "Edit Whiteboard"]
541
+ children: [/* @__PURE__ */ jsx(Pencil, { size: 14 }), editorLoading ? "Loading editor…" : "Edit"]
546
542
  })
547
543
  })]
548
544
  });
@@ -1,2 +1,2 @@
1
- :root{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}._6anxnj0{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._6anxnj1{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.8;--rc-line-height-tight:1.4;--rc-font-family:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._6anxnj2{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#a3a3a3;--rc-quote-bg:#fafafa;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:14px;--rc-font-size-small:12px;--rc-line-height:1.5;--rc-line-height-tight:1.3;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}.dark ._6anxnj0,[data-theme=dark] ._6anxnj0,.dark._6anxnj0,[data-theme=dark]._6anxnj0,.dark ._6anxnj1,[data-theme=dark] ._6anxnj1,.dark._6anxnj1,[data-theme=dark]._6anxnj1,.dark ._6anxnj2,[data-theme=dark] ._6anxnj2,.dark._6anxnj2,[data-theme=dark]._6anxnj2{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}@keyframes _1c3wdzl4{to{transform:rotate(360deg)}}._1c3wdzl0{aspect-ratio:16/10;background-color:var(--rc-bg);border-radius:.5rem;width:100%;margin:1rem 0;position:relative;overflow:hidden}._1c3wdzl1{aspect-ratio:16/10;border:1px solid var(--rc-border);border-radius:.5rem;width:100%;margin:1rem 0;position:relative;overflow:hidden}._1c3wdzl2{aspect-ratio:16/10;background-color:var(--rc-bg);border:1px solid var(--rc-border);width:100%;color:var(--rc-text-secondary);font-size:var(--rc-font-size-md);border-radius:.5rem;justify-content:center;align-items:center;display:flex;position:relative}._1c3wdzl3{color:var(--rc-text-secondary);font-size:var(--rc-font-size-md);justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzl3:after{content:"";border:2px solid;border-right-color:#0000;border-radius:50%;width:16px;height:16px;margin-left:8px;animation:.6s linear infinite _1c3wdzl4;display:inline-block}._1c3wdzl5{background-color:color-mix(in srgb, var(--rc-alert-caution) 10%, transparent);color:var(--rc-alert-caution);font-size:var(--rc-font-size-md);justify-content:center;align-items:center;padding:.75rem 1rem;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzl0 .App-toolbar{display:none}._1c3wdzl1 .Island,.excalidraw--view-mode .dropdown-menu-button{display:none!important}._1c3wdzl6{z-index:10;background-color:color-mix(in srgb, currentColor 8%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:6px;gap:4px;padding:2px;display:flex;position:absolute;bottom:8px;right:8px}._1c3wdzl7{width:28px;height:28px;color:var(--rc-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:background .15s,color .15s;display:flex}._1c3wdzl7:hover{background:color-mix(in srgb, currentColor 12%, transparent);color:var(--rc-text)}._1c3wdzl7 svg{width:16px;height:16px}._1c3wdzl8._1c3wdzl8{background:var(--rc-bg);border:none;border-radius:0;flex-direction:column;gap:0;width:100vw;max-width:100vw;height:100vh;max-height:100vh;margin:0;padding:0;display:flex;position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden;transform:none}._1c3wdzl8._1c3wdzl8[data-open],._1c3wdzl8._1c3wdzl8[data-closed]{animation:none}._1c3wdzl9{border-bottom:1px solid var(--rc-border);flex-shrink:0;align-items:center;gap:10px;height:48px;padding:0 12px 0 16px;display:flex}._1c3wdzla{flex:1;align-items:center;gap:4px;display:flex}._1c3wdzlb{border-radius:50%;flex-shrink:0;width:8px;height:8px;transition:background-color .3s}._1c3wdzlc{font-size:var(--rc-font-size-md);color:var(--rc-text);font-weight:600;line-height:1}._1c3wdzld{font-size:var(--rc-font-size-sm);color:var(--rc-text-secondary);border-left:1px solid var(--rc-border);padding-left:10px;line-height:1}._1c3wdzle{align-items:center;gap:2px;margin-left:auto;display:flex}._1c3wdzlf{width:32px;height:32px;color:var(--rc-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;margin-left:8px;transition:background .15s,color .15s;display:flex}._1c3wdzlf:hover{background:color-mix(in srgb, currentColor 8%, transparent);color:var(--rc-text)}._1c3wdzlg{color:var(--rc-text-secondary);cursor:pointer;font-size:var(--rc-font-size-sm);white-space:nowrap;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:4px 10px;transition:background .15s,color .15s;display:inline-flex}._1c3wdzlg:hover{background:color-mix(in srgb, currentColor 8%, transparent);color:var(--rc-text)}._1c3wdzlg:disabled{opacity:.4;pointer-events:none}._1c3wdzlg svg{flex-shrink:0;width:14px;height:14px}._1c3wdzlh{background:var(--rc-border);flex-shrink:0;width:1px;height:16px;margin:0 4px}._1c3wdzli{background:color-mix(in srgb, currentColor 4%, transparent);color:var(--rc-text-secondary);font-size:var(--rc-font-size-xs);font-family:var(--rc-font-mono);text-overflow:ellipsis;white-space:nowrap;border:1px solid #0000;border-radius:4px;outline:none;align-items:center;width:200px;max-width:50%;padding:3px 10px;transition:background .15s,border-color .15s;display:inline-flex;overflow:hidden}._1c3wdzli:hover{background:color-mix(in srgb, currentColor 8%, transparent)}._1c3wdzli:focus{border-color:var(--rc-accent);background:color-mix(in srgb, currentColor 6%, transparent)}._1c3wdzlj{flex:1;min-height:0;position:relative}._1c3wdzlk{justify-content:flex-end;gap:8px;padding:0 1.5rem 1.25rem;display:flex}._1c3wdzll{border:1px solid var(--rc-border);font-size:var(--rc-font-size-sm);cursor:pointer;color:var(--rc-text);background:0 0;border-radius:6px;padding:6px 14px;font-weight:500;transition:background .15s}._1c3wdzll:hover{background:color-mix(in srgb, currentColor 6%, transparent)}._1c3wdzlm{border:1px solid var(--rc-accent);background:var(--rc-accent);font-size:var(--rc-font-size-sm);cursor:pointer;color:#fff;border-radius:6px;padding:6px 14px;font-weight:500;transition:opacity .15s}._1c3wdzlm:hover{opacity:.9}._1c3wdzln{border:1px solid var(--rc-alert-caution);font-size:var(--rc-font-size-sm);cursor:pointer;color:var(--rc-alert-caution);background:0 0;border-radius:6px;padding:6px 14px;font-weight:500;transition:background .15s}._1c3wdzln:hover{background:color-mix(in srgb, var(--rc-alert-caution) 10%, transparent)}._1c3wdzlo{z-index:5;cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;transition:background .2s;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzlo:hover{background:color-mix(in srgb, currentColor 6%, transparent)}._1c3wdzlp{background:var(--rc-bg);border:1px solid var(--rc-border);color:var(--rc-text);font-size:var(--rc-font-size-sm);opacity:0;border-radius:6px;align-items:center;gap:6px;padding:6px 14px;font-weight:500;transition:opacity .2s;display:flex}._1c3wdzlo:hover ._1c3wdzlp{opacity:1}
1
+ :root{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#f5f5f5;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:1.25em;--rc-flow-list:.375em;--rc-flow-block:2em;--rc-flow-heading:2em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-font-size-code:.8125em;--rc-font-size-caption:.8125em;--rc-line-height:1.75;--rc-line-height-tight:1.35;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#ededed;--rc-text-secondary:#c2c2c2;--rc-text-tertiary:#8a8a8a;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#2e2e2e;--rc-border-subtle:#1f1f1f;--rc-accent:#60a5fa;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#1a1a1a;--rc-code-header-bg:#212121;--rc-hr-border:#2e2e2e;--rc-quote-border:color-mix(in oklab, var(--rc-text) 22%, transparent);--rc-quote-bg:#262626;--rc-alert-info:#7aa7e0;--rc-alert-warning:#e0a458;--rc-alert-tip:#6cbf8f;--rc-alert-caution:#ef7d7d;--rc-alert-important:#a78bfa;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}._6anxnj0{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#f5f5f5;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:1.25em;--rc-flow-list:.375em;--rc-flow-block:2em;--rc-flow-heading:2em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-font-size-code:.8125em;--rc-font-size-caption:.8125em;--rc-line-height:1.75;--rc-line-height-tight:1.35;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._6anxnj1{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#f5f5f5;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:.5em;--rc-flow-list:.375em;--rc-flow-block:2em;--rc-flow-heading:2em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-font-size-code:.8125em;--rc-font-size-caption:.8125em;--rc-line-height:1.85;--rc-line-height-tight:1.35;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._6anxnj2{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#fafafa;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-flow-paragraph:.6em;--rc-flow-list:.25em;--rc-flow-block:1em;--rc-flow-heading:1em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:14px;--rc-font-size-small:12px;--rc-font-size-code:.9286em;--rc-font-size-caption:.9286em;--rc-line-height:1.6;--rc-line-height-tight:1.3;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}._6anxnj3{--rc-text:#171717;--rc-text-secondary:#404040;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#e8e8e8;--rc-border-subtle:#f0f0f0;--rc-accent:#2563eb;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-code-header-bg:#f0f0f0;--rc-hr-border:#e8e8e8;--rc-quote-border:color-mix(in oklab, var(--rc-text) 18%, transparent);--rc-quote-bg:#fafafa;--rc-alert-info:#2f6db5;--rc-alert-warning:#b7791f;--rc-alert-tip:#2f855a;--rc-alert-caution:#c53030;--rc-alert-important:#6b46c1;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-flow-paragraph:.75em;--rc-flow-list:.25em;--rc-flow-block:1em;--rc-flow-heading:1em;--rc-font-family-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, "PingFang SC", "Noto Sans SC", monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:15px;--rc-font-size-small:13px;--rc-font-size-code:.8667em;--rc-font-size-caption:.8667em;--rc-line-height:1.65;--rc-line-height-tight:1.3;--rc-line-height-compact:1.6;--rc-line-height-code:1.7;--rc-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", Roboto, Helvetica, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}.dark ._6anxnj0,[data-theme=dark] ._6anxnj0,.dark._6anxnj0,[data-theme=dark]._6anxnj0,.dark ._6anxnj1,[data-theme=dark] ._6anxnj1,.dark._6anxnj1,[data-theme=dark]._6anxnj1,.dark ._6anxnj2,[data-theme=dark] ._6anxnj2,.dark._6anxnj2,[data-theme=dark]._6anxnj2,.dark ._6anxnj3,[data-theme=dark] ._6anxnj3,.dark._6anxnj3,[data-theme=dark]._6anxnj3{--rc-text:#ededed;--rc-text-secondary:#c2c2c2;--rc-text-tertiary:#8a8a8a;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#2e2e2e;--rc-border-subtle:#1f1f1f;--rc-accent:#60a5fa;--rc-accent-light:color-mix(in oklab, var(--rc-accent) 12%, transparent);--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#1a1a1a;--rc-code-header-bg:#212121;--rc-hr-border:#2e2e2e;--rc-quote-border:color-mix(in oklab, var(--rc-text) 22%, transparent);--rc-quote-bg:#262626;--rc-alert-info:#7aa7e0;--rc-alert-warning:#e0a458;--rc-alert-tip:#6cbf8f;--rc-alert-caution:#ef7d7d;--rc-alert-important:#a78bfa;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}@keyframes _1c3wdzl5{0%{background-position:200% 0,0 0}to{background-position:-200% 0,0 0}}._1c3wdzl0,._1c3wdzl1{aspect-ratio:16/9;width:100%;margin:var(--rc-flow-block) 0;border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);background-color:var(--rc-bg);position:relative;overflow:hidden}._1c3wdzl1:focus-within{border-color:var(--rc-accent)}._1c3wdzl2{aspect-ratio:16/9;width:100%;margin:var(--rc-flow-block) 0;border:1px solid var(--rc-border);border-radius:var(--rc-radius-md);background-color:var(--rc-bg);background-image:radial-gradient(var(--rc-border) 1px, transparent 1px);background-size:16px 16px;position:relative;overflow:hidden}._1c3wdzl3{font-family:var(--rc-font-family-sans);color:var(--rc-text-tertiary);flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:13px;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzl4{width:20px;height:20px;color:var(--rc-text-quaternary)}._1c3wdzl6{font-family:var(--rc-font-family-sans);color:var(--rc-text-tertiary);background-image:linear-gradient(90deg, transparent, color-mix(in oklab, var(--rc-text) 4%, transparent), transparent), radial-gradient(var(--rc-border) 1px, transparent 1px);background-size:200% 100%,16px 16px;flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:13px;animation:1.6s linear infinite _1c3wdzl5;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzl7{font-family:var(--rc-font-family-sans);color:var(--rc-text-tertiary);background-image:radial-gradient(var(--rc-border) 1px, transparent 1px);background-size:16px 16px;flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:13px;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzl8{font-family:var(--rc-font-family-sans);color:var(--rc-text-secondary);flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:13px;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzl9{width:20px;height:20px;color:var(--rc-alert-caution)}._1c3wdzla{-webkit-appearance:none;appearance:none;border:1px solid var(--rc-border);background:var(--rc-bg);color:var(--rc-text-secondary);font:inherit;cursor:pointer;border-radius:6px;padding:4px 12px;font-size:12px}._1c3wdzla:hover{color:var(--rc-text);background-color:var(--rc-fill-tertiary)}._1c3wdzlb._1c3wdzlb{background:var(--rc-bg);border:none;border-radius:0;flex-direction:column;gap:0;width:100vw;max-width:100vw;height:100vh;max-height:100vh;margin:0;padding:0;display:flex;position:fixed;top:0;bottom:0;left:0;right:0;overflow:hidden;transform:none}._1c3wdzlb._1c3wdzlb[data-open],._1c3wdzlb._1c3wdzlb[data-closed]{animation:none}._1c3wdzlc{border-bottom:1px solid var(--rc-border);flex-shrink:0;align-items:center;gap:10px;height:48px;padding:0 12px 0 16px;display:flex}._1c3wdzld{flex:1;align-items:center;gap:4px;display:flex}._1c3wdzle{border-radius:50%;flex-shrink:0;width:8px;height:8px;transition:background-color .3s}._1c3wdzlf{font-size:var(--rc-font-size-md);color:var(--rc-text);font-weight:600;line-height:1}._1c3wdzlg{font-size:var(--rc-font-size-sm);color:var(--rc-text-secondary);border-left:1px solid var(--rc-border);padding-left:10px;line-height:1}._1c3wdzlh{align-items:center;gap:2px;margin-left:auto;display:flex}._1c3wdzli{width:32px;height:32px;color:var(--rc-text-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;margin-left:8px;transition:background .15s,color .15s;display:flex}._1c3wdzli:hover{background:color-mix(in srgb, currentColor 8%, transparent);color:var(--rc-text)}._1c3wdzlj{color:var(--rc-text-secondary);cursor:pointer;font-size:var(--rc-font-size-sm);white-space:nowrap;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:4px 10px;transition:background .15s,color .15s;display:inline-flex}._1c3wdzlj:hover{background:color-mix(in srgb, currentColor 8%, transparent);color:var(--rc-text)}._1c3wdzlj:disabled{opacity:.4;pointer-events:none}._1c3wdzlj svg{flex-shrink:0;width:14px;height:14px}._1c3wdzlk{background:var(--rc-border);flex-shrink:0;width:1px;height:16px;margin:0 4px}._1c3wdzll{background:color-mix(in srgb, currentColor 4%, transparent);color:var(--rc-text-secondary);font-size:var(--rc-font-size-xs);font-family:var(--rc-font-mono);text-overflow:ellipsis;white-space:nowrap;border:1px solid #0000;border-radius:4px;outline:none;align-items:center;width:200px;max-width:50%;padding:3px 10px;transition:background .15s,border-color .15s;display:inline-flex;overflow:hidden}._1c3wdzll:hover{background:color-mix(in srgb, currentColor 8%, transparent)}._1c3wdzll:focus{border-color:var(--rc-accent);background:color-mix(in srgb, currentColor 6%, transparent)}._1c3wdzlm{flex:1;min-height:0;position:relative}._1c3wdzln{justify-content:flex-end;gap:8px;padding:0 1.5rem 1.25rem;display:flex}._1c3wdzlo{border:1px solid var(--rc-border);font-size:var(--rc-font-size-sm);cursor:pointer;color:var(--rc-text);background:0 0;border-radius:6px;padding:6px 14px;font-weight:500;transition:background .15s}._1c3wdzlo:hover{background:color-mix(in srgb, currentColor 6%, transparent)}._1c3wdzlp{border:1px solid var(--rc-accent);background:var(--rc-accent);font-size:var(--rc-font-size-sm);cursor:pointer;color:#fff;border-radius:6px;padding:6px 14px;font-weight:500;transition:opacity .15s}._1c3wdzlp:hover{opacity:.9}._1c3wdzlq{border:1px solid var(--rc-alert-caution);font-size:var(--rc-font-size-sm);cursor:pointer;color:var(--rc-alert-caution);background:0 0;border-radius:6px;padding:6px 14px;font-weight:500;transition:background .15s}._1c3wdzlq:hover{background:color-mix(in srgb, var(--rc-alert-caution) 10%, transparent)}._1c3wdzlr{z-index:1;cursor:pointer;background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;bottom:0;left:0;right:0}._1c3wdzlr:focus-visible{box-shadow:inset 0 0 0 2px var(--rc-accent)}._1c3wdzls{background:color-mix(in oklab, var(--rc-bg) 92%, transparent);border:1px solid var(--rc-border);color:var(--rc-text-secondary);font-family:var(--rc-font-family-sans);opacity:0;border-radius:8px;align-items:center;gap:6px;padding:6px 10px;font-size:12px;font-weight:500;transition:opacity .15s;display:inline-flex;position:absolute;top:8px;right:8px}._1c3wdzlr:hover ._1c3wdzls{opacity:1}._1c3wdzlr:focus-visible ._1c3wdzls{opacity:1}@media (prefers-reduced-motion:reduce){._1c3wdzl6{animation:none}}@media (pointer:coarse){._1c3wdzls{opacity:1}}._1capwnq0{-webkit-user-select:none;user-select:none;touch-action:none;cursor:grab;width:100%;height:100%;position:relative;overflow:hidden}._1capwnq0[data-mode=inline]{touch-action:pan-x pan-y}._1capwnq0[data-panning=true]{cursor:grabbing}._1capwnq1{width:100%;height:100%;display:block}._1capwnq2{z-index:1;border:1px solid var(--rc-border);background-color:color-mix(in oklab, var(--rc-bg) 92%, transparent);color:var(--rc-text-tertiary);font-family:var(--rc-font-family-sans);opacity:0;border-radius:8px;align-items:center;gap:2px;padding:3px;font-size:12px;transition:opacity .15s;display:flex;position:absolute;bottom:8px;right:8px}._1capwnq0:hover ._1capwnq2,._1capwnq0:focus-within ._1capwnq2{opacity:1}._1capwnq3{-webkit-appearance:none;appearance:none;width:28px;height:28px;color:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;transition:background-color .15s,color .15s;display:inline-flex}._1capwnq3:hover{background-color:var(--rc-fill);color:var(--rc-text)}._1capwnq4{text-align:center;font-variant-numeric:tabular-nums;min-width:44px}._1capwnq5{background-color:var(--rc-border);width:1px;height:16px;margin:0 2px}._1capwnq3 svg{width:16px;height:16px}@media (pointer:coarse){._1capwnq0[data-mode=inline]{cursor:default}._1capwnq2{opacity:1}._1capwnq3{width:36px;height:36px}}
2
2
  /*$vite$:1*/
@@ -0,0 +1,11 @@
1
+ import { FC } from 'react';
2
+ import { ExcalidrawScene, StaticTheme } from './types';
3
+ export interface InteractiveSceneProps {
4
+ /** `inline` leaves one-finger touch drags to the page; `fullscreen` owns every gesture. */
5
+ mode?: 'inline' | 'fullscreen';
6
+ onExpand?: (target: HTMLElement) => void;
7
+ scene: ExcalidrawScene;
8
+ theme?: StaticTheme;
9
+ }
10
+ export declare const InteractiveScene: FC<InteractiveSceneProps>;
11
+ //# sourceMappingURL=InteractiveScene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveScene.d.ts","sourceRoot":"","sources":["../../src/scene/InteractiveScene.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAoE,MAAM,OAAO,CAAC;AAKlG,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQ5D,MAAM,WAAW,qBAAqB;IACpC,2FAA2F;IAC3F,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAOD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA4QtD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { CSSProperties, FC } from 'react';
2
+ import { BinaryFiles, ExcalidrawElement, ExcalidrawScene } from './types';
3
+ export interface SceneBounds {
4
+ height: number;
5
+ minX: number;
6
+ minY: number;
7
+ width: number;
8
+ }
9
+ export declare function computeSceneBounds(elements: ExcalidrawElement[]): SceneBounds;
10
+ export declare const DARK_SCENE_FILTER = "invert(93%) hue-rotate(180deg)";
11
+ interface SceneContentProps {
12
+ dark?: boolean;
13
+ files?: BinaryFiles;
14
+ scene: ExcalidrawScene;
15
+ }
16
+ export declare const SceneContent: FC<SceneContentProps>;
17
+ interface SceneProps extends SceneContentProps {
18
+ className?: string;
19
+ style?: CSSProperties;
20
+ theme?: 'light' | 'dark';
21
+ }
22
+ export declare const Scene: FC<SceneProps>;
23
+ export {};
24
+ //# sourceMappingURL=Scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../src/scene/Scene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAgB/C,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,eAAe,EAMhB,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,CA0B7E;AAED,eAAO,MAAM,iBAAiB,mCAAmC,CAAC;AAmBlE,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAa7C,CAAC;AAGH,UAAU,UAAW,SAAQ,iBAAiB;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAuBhC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { FontFamilyId } from './types';
2
+ export declare const EXCALIDRAW_FONT_STACK: {
3
+ readonly hand: "\"Excalifont\", \"LXGW WenKai Screen\", \"Virgil\", \"Comic Sans MS\", \"Segoe Print\", \"Bradley Hand\", cursive";
4
+ readonly sans: "Helvetica, \"PingFang SC\", \"Microsoft YaHei\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", system-ui, sans-serif";
5
+ readonly mono: "\"Cascadia Code\", \"Cascadia\", ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace";
6
+ };
7
+ export declare function fontFamilyToCss(id: FontFamilyId | undefined): string;
8
+ //# sourceMappingURL=fonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/scene/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CASpE"}
@@ -0,0 +1,4 @@
1
+ import { ExcalidrawScene } from './types';
2
+ export declare function toScene(data: Record<string, any> | undefined): ExcalidrawScene | null;
3
+ export declare function countElements(scene: ExcalidrawScene): number;
4
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/scene/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAUrF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,19 @@
1
+ import { Drawable, Op, OpSet, Options as RoughOptions } from 'roughjs/bin/core';
2
+ import { BaseElement } from './types';
3
+ export declare function roughOptionsForElement(el: BaseElement, override?: Partial<RoughOptions>): RoughOptions;
4
+ export declare function rectangle(el: BaseElement, override?: Partial<RoughOptions>): Drawable;
5
+ export declare function ellipse(el: BaseElement, override?: Partial<RoughOptions>): Drawable;
6
+ export declare function diamond(el: BaseElement, override?: Partial<RoughOptions>): Drawable;
7
+ export declare function path(d: string, options: RoughOptions): Drawable;
8
+ export declare function linearPath(points: Array<[number, number]>, options: RoughOptions): Drawable;
9
+ export declare function curve(points: Array<[number, number]>, options: RoughOptions): Drawable;
10
+ export declare function polygon(points: Array<[number, number]>, options: RoughOptions): Drawable;
11
+ export declare function opsToPath(ops: Op[]): string;
12
+ export interface RenderedOpSet {
13
+ d: string;
14
+ type: OpSet['type'];
15
+ }
16
+ export declare function drawableToOpSets(drawable: Drawable): RenderedOpSet[];
17
+ export declare function roundedRectPath(width: number, height: number, radius: number): string;
18
+ export declare function getCornerRadius(el: BaseElement): number;
19
+ //# sourceMappingURL=rough.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rough.d.ts","sourceRoot":"","sources":["../../src/scene/rough.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrF,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAQxD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,EACf,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC/B,YAAY,CAgBd;AASD,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAErF;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAQnF;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAYnF;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,QAAQ,CAE/D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,QAAQ,CAE3F;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,QAAQ,CAEtF;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,QAAQ,CAExF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,CAmB3C;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,EAAE,CAEpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcrF;AAKD,wBAAgB,eAAe,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAOvD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scene.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.test.d.ts","sourceRoot":"","sources":["../../src/scene/scene.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export declare const sceneRoot: string;
2
+ export declare const sceneSvg: string;
3
+ export declare const toolbar: string;
4
+ export declare const toolButton: string;
5
+ export declare const zoomLabel: string;
6
+ export declare const toolSeparator: string;
7
+ //# sourceMappingURL=styles.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.css.d.ts","sourceRoot":"","sources":["../../src/scene/styles.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,QAyBpB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAInB,CAAC;AAEH,eAAO,MAAM,OAAO,QA2BlB,CAAC;AAEH,eAAO,MAAM,UAAU,QAwBrB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,aAAa,QAKxB,CAAC"}
@@ -0,0 +1,118 @@
1
+ export type StrokeStyle = 'solid' | 'dashed' | 'dotted';
2
+ export type FillStyle = 'hachure' | 'cross-hatch' | 'solid' | 'zigzag' | 'zigzag-line' | 'dots' | 'dashed';
3
+ export type ElementType = 'rectangle' | 'ellipse' | 'diamond' | 'line' | 'arrow' | 'freedraw' | 'text' | 'image' | 'frame' | 'magicframe' | 'embeddable' | 'iframe' | 'selection';
4
+ export interface BaseElement {
5
+ angle: number;
6
+ backgroundColor: string;
7
+ boundElements?: Array<{
8
+ id: string;
9
+ type: string;
10
+ }> | null;
11
+ fillStyle: FillStyle;
12
+ height: number;
13
+ id: string;
14
+ index?: string;
15
+ isDeleted?: boolean;
16
+ link?: string | null;
17
+ locked?: boolean;
18
+ opacity: number;
19
+ roughness: number;
20
+ roundness?: {
21
+ type: number;
22
+ value?: number;
23
+ } | null;
24
+ seed: number;
25
+ strokeColor: string;
26
+ strokeStyle: StrokeStyle;
27
+ strokeWidth: number;
28
+ type: ElementType;
29
+ version?: number;
30
+ versionNonce?: number;
31
+ width: number;
32
+ x: number;
33
+ y: number;
34
+ }
35
+ export interface RectangleElement extends BaseElement {
36
+ type: 'rectangle';
37
+ }
38
+ export interface EllipseElement extends BaseElement {
39
+ type: 'ellipse';
40
+ }
41
+ export interface DiamondElement extends BaseElement {
42
+ type: 'diamond';
43
+ }
44
+ export type Arrowhead = 'arrow' | 'bar' | 'dot' | 'circle' | 'circle_outline' | 'triangle' | 'triangle_outline' | 'diamond' | 'diamond_outline' | 'crowfoot_one' | 'crowfoot_many' | 'crowfoot_one_or_many' | null;
45
+ export interface LinearElement extends BaseElement {
46
+ elbowed?: boolean;
47
+ endArrowhead?: Arrowhead;
48
+ endBinding?: unknown;
49
+ lastCommittedPoint?: [number, number] | null;
50
+ points: Array<[number, number]>;
51
+ startArrowhead?: Arrowhead;
52
+ startBinding?: unknown;
53
+ type: 'line' | 'arrow';
54
+ }
55
+ export interface FreedrawElement extends BaseElement {
56
+ points: Array<[number, number]>;
57
+ pressures: number[];
58
+ simulatePressure: boolean;
59
+ type: 'freedraw';
60
+ }
61
+ export type FontFamilyId = 1 | 2 | 3 | 4 | 5 | 6 | 7;
62
+ export interface TextElement extends BaseElement {
63
+ autoResize?: boolean;
64
+ baseline: number;
65
+ containerId?: string | null;
66
+ fontFamily: FontFamilyId;
67
+ fontSize: number;
68
+ lineHeight?: number;
69
+ originalText?: string;
70
+ text: string;
71
+ textAlign: 'left' | 'center' | 'right';
72
+ type: 'text';
73
+ verticalAlign: 'top' | 'middle';
74
+ }
75
+ export interface ImageElement extends BaseElement {
76
+ crop?: {
77
+ x: number;
78
+ y: number;
79
+ width: number;
80
+ height: number;
81
+ } | null;
82
+ fileId?: string;
83
+ scale?: [number, number];
84
+ status?: 'pending' | 'saved' | 'error';
85
+ type: 'image';
86
+ }
87
+ export interface FrameLikeElement extends BaseElement {
88
+ children?: string[];
89
+ name?: string | null;
90
+ type: 'frame' | 'magicframe';
91
+ }
92
+ export interface EmbedElement extends BaseElement {
93
+ type: 'embeddable' | 'iframe';
94
+ }
95
+ export type ExcalidrawElement = RectangleElement | EllipseElement | DiamondElement | LinearElement | FreedrawElement | TextElement | ImageElement | FrameLikeElement | EmbedElement | (BaseElement & {
96
+ type: 'selection';
97
+ });
98
+ export interface BinaryFileData {
99
+ created?: number;
100
+ dataURL: string;
101
+ id: string;
102
+ lastRetrieved?: number;
103
+ mimeType?: string;
104
+ }
105
+ export type BinaryFiles = Record<string, BinaryFileData>;
106
+ export interface ExcalidrawScene {
107
+ appState?: Record<string, unknown> & {
108
+ viewBackgroundColor?: string;
109
+ theme?: 'light' | 'dark';
110
+ };
111
+ elements: ExcalidrawElement[];
112
+ files?: BinaryFiles;
113
+ source?: string;
114
+ type?: 'excalidraw';
115
+ version?: number;
116
+ }
117
+ export type StaticTheme = 'light' | 'dark';
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scene/types.ts"],"names":[],"mappings":"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"}
package/dist/static.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { a as ExcalidrawNode, c as ExcalidrawDisplayRenderer, i as $isExcalidrawNode, n as ExcalidrawExpandShell, o as EXCALIDRAW_NODE_KEY, r as $createExcalidrawNode, s as ExcalidrawSSRRenderer, t as EXCALIDRAW_BLOCK_TRANSFORMER } from "./transformer-BaQILRBF.js";
2
- import { C as excalidrawFullscreenPopup, N as ExcalidrawConfigProvider, P as useExcalidrawConfig } from "./useExcalidrawData-ZN9PHFyy.js";
1
+ import { a as ExcalidrawNode, c as ExcalidrawDisplayRenderer, i as $isExcalidrawNode, n as ExcalidrawExpandShell, o as EXCALIDRAW_NODE_KEY, r as $createExcalidrawNode, s as ExcalidrawSSRRenderer, t as EXCALIDRAW_BLOCK_TRANSFORMER } from "./transformer-CbJAOPsv.js";
2
+ import { L as ExcalidrawConfigProvider, R as useExcalidrawConfig, j as excalidrawFullscreenPopup } from "./useExcalidrawFont-D_lnfKV8.js";
3
3
  export { $createExcalidrawNode, $isExcalidrawNode, EXCALIDRAW_BLOCK_TRANSFORMER, EXCALIDRAW_NODE_KEY, ExcalidrawConfigProvider, ExcalidrawDisplayRenderer, ExcalidrawDisplayRenderer as ExcalidrawRenderer, ExcalidrawDisplayRenderer as ExcalidrawStaticRenderer, ExcalidrawExpandShell, ExcalidrawNode, ExcalidrawSSRRenderer, excalidrawFullscreenPopup, useExcalidrawConfig };