@bendyline/squisq-react 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +6 -7
- package/dist/AudioController-DwMsPe38.d.ts +48 -0
- package/dist/chunk-7FVQ7T3I.js +2529 -0
- package/dist/chunk-D7KN4CRG.js +396 -0
- package/dist/chunk-LR3AIGDD.js +58 -0
- package/dist/chunk-NANF7REM.js +330 -0
- package/dist/chunk-NWZQGZIJ.js +675 -0
- package/dist/chunk-TQH6RTTV.js +789 -0
- package/dist/chunk-TT6ENR6T.js +26 -0
- package/dist/chunk-WLUZTUNZ.js +111 -0
- package/dist/chunk-XYS7HMP4.js +1604 -0
- package/dist/chunk-YQC3AXXU.js +92 -0
- package/dist/hooks/index.d.ts +187 -0
- package/dist/hooks/index.js +32 -0
- package/dist/index.d.ts +14 -904
- package/dist/index.js +53 -6440
- package/dist/json-view/index.d.ts +21 -0
- package/dist/json-view/index.js +10 -0
- package/dist/layers/index.d.ts +124 -0
- package/dist/layers/index.js +24 -0
- package/dist/markdown/index.d.ts +44 -0
- package/dist/markdown/index.js +11 -0
- package/dist/page/index.d.ts +105 -0
- package/dist/page/index.js +19 -0
- package/dist/player/index.d.ts +410 -0
- package/dist/player/index.js +41 -0
- package/dist/squisq-player.full.global.js +361 -361
- package/dist/squisq-player.global.js +57 -57
- package/dist/standalone-source.js +1 -1
- package/package.json +30 -3
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/hooks/useAutoSurface.ts
|
|
2
|
+
import { useCallback, useMemo, useSyncExternalStore } from "react";
|
|
3
|
+
import { DARK_SURFACE, LIGHT_SURFACE } from "@bendyline/squisq/schemas";
|
|
4
|
+
var DARK_QUERY = "(prefers-color-scheme: dark)";
|
|
5
|
+
var getServerSnapshot = () => LIGHT_SURFACE;
|
|
6
|
+
function useAutoSurface(enabled) {
|
|
7
|
+
const mql = useMemo(
|
|
8
|
+
() => enabled && typeof window !== "undefined" ? window.matchMedia(DARK_QUERY) : null,
|
|
9
|
+
[enabled]
|
|
10
|
+
);
|
|
11
|
+
const subscribe = useCallback(
|
|
12
|
+
(cb) => {
|
|
13
|
+
if (!mql) return () => {
|
|
14
|
+
};
|
|
15
|
+
mql.addEventListener("change", cb);
|
|
16
|
+
return () => mql.removeEventListener("change", cb);
|
|
17
|
+
},
|
|
18
|
+
[mql]
|
|
19
|
+
);
|
|
20
|
+
const getSnapshot = useCallback(() => mql?.matches ? DARK_SURFACE : LIGHT_SURFACE, [mql]);
|
|
21
|
+
return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
useAutoSurface
|
|
26
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// src/mermaid/MermaidDiagram.tsx
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { DEFAULT_THEME as DEFAULT_THEME2 } from "@bendyline/squisq/doc";
|
|
4
|
+
|
|
5
|
+
// src/mermaid/mermaidRuntime.ts
|
|
6
|
+
import { buildMermaidThemeVariables } from "@bendyline/squisq/schemas";
|
|
7
|
+
import { DEFAULT_THEME } from "@bendyline/squisq/doc";
|
|
8
|
+
var mermaidPromise = null;
|
|
9
|
+
var MERMAID_BASE_CONFIG = {
|
|
10
|
+
startOnLoad: false,
|
|
11
|
+
securityLevel: "strict",
|
|
12
|
+
suppressErrorRendering: true,
|
|
13
|
+
deterministicIds: false,
|
|
14
|
+
logLevel: "error"
|
|
15
|
+
};
|
|
16
|
+
async function loadMermaid() {
|
|
17
|
+
if (!mermaidPromise) {
|
|
18
|
+
mermaidPromise = import("mermaid").then(({ default: mermaid }) => mermaid).catch((error) => {
|
|
19
|
+
mermaidPromise = null;
|
|
20
|
+
throw error;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return mermaidPromise;
|
|
24
|
+
}
|
|
25
|
+
function enqueue(run) {
|
|
26
|
+
const host = globalThis;
|
|
27
|
+
const previous = host.__squisqMermaidWorkQueue ?? Promise.resolve();
|
|
28
|
+
const result = previous.then(run, run);
|
|
29
|
+
host.__squisqMermaidWorkQueue = result.then(
|
|
30
|
+
() => void 0,
|
|
31
|
+
() => void 0
|
|
32
|
+
);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
function renderMermaidSvg(id, source, container, theme = DEFAULT_THEME) {
|
|
36
|
+
return enqueue(async () => {
|
|
37
|
+
const mermaid = await loadMermaid();
|
|
38
|
+
mermaid.initialize({
|
|
39
|
+
...MERMAID_BASE_CONFIG,
|
|
40
|
+
theme: "base",
|
|
41
|
+
themeVariables: buildMermaidThemeVariables(theme)
|
|
42
|
+
});
|
|
43
|
+
const { svg, diagramType } = await mermaid.render(id, source, container);
|
|
44
|
+
return { svg, diagramType };
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function mermaidRenderErrorMessage(error) {
|
|
48
|
+
const raw = error instanceof Error ? error.message : String(error);
|
|
49
|
+
return raw.split(/\r?\n/).map((line) => line.trimEnd()).filter(Boolean).slice(0, 6).join("\n") || "Unknown Mermaid rendering error.";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// src/mermaid/MermaidDiagram.tsx
|
|
53
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
54
|
+
var renderSequence = 0;
|
|
55
|
+
function MermaidDiagram({
|
|
56
|
+
source,
|
|
57
|
+
className,
|
|
58
|
+
ariaLabel = "Mermaid diagram",
|
|
59
|
+
theme = DEFAULT_THEME2
|
|
60
|
+
}) {
|
|
61
|
+
const [svg, setSvg] = useState("");
|
|
62
|
+
const [error, setError] = useState("");
|
|
63
|
+
const [rendering, setRendering] = useState(true);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
let current = true;
|
|
66
|
+
const id = `squisq-rich-mermaid-${++renderSequence}`;
|
|
67
|
+
setRendering(true);
|
|
68
|
+
setError("");
|
|
69
|
+
void renderMermaidSvg(id, source, void 0, theme).then((result) => {
|
|
70
|
+
if (!current) return;
|
|
71
|
+
setSvg(result.svg);
|
|
72
|
+
}).catch((caught) => {
|
|
73
|
+
if (!current) return;
|
|
74
|
+
setSvg("");
|
|
75
|
+
setError(mermaidRenderErrorMessage(caught));
|
|
76
|
+
}).finally(() => {
|
|
77
|
+
if (current) setRendering(false);
|
|
78
|
+
});
|
|
79
|
+
return () => {
|
|
80
|
+
current = false;
|
|
81
|
+
};
|
|
82
|
+
}, [source, theme]);
|
|
83
|
+
const classes = ["squisq-mermaid-rendered", className].filter(Boolean).join(" ");
|
|
84
|
+
return /* @__PURE__ */ jsxs(
|
|
85
|
+
"div",
|
|
86
|
+
{
|
|
87
|
+
className: classes,
|
|
88
|
+
role: "img",
|
|
89
|
+
"aria-label": ariaLabel,
|
|
90
|
+
style: { background: theme.colors.backgroundLight, color: theme.colors.text },
|
|
91
|
+
children: [
|
|
92
|
+
rendering && /* @__PURE__ */ jsx("div", { className: "squisq-mermaid-render-status", children: "Rendering diagram\u2026" }),
|
|
93
|
+
!rendering && error && /* @__PURE__ */ jsxs("div", { className: "squisq-mermaid-render-error", role: "alert", children: [
|
|
94
|
+
/* @__PURE__ */ jsx("strong", { children: "Mermaid could not render this diagram." }),
|
|
95
|
+
/* @__PURE__ */ jsx("pre", { children: error })
|
|
96
|
+
] }),
|
|
97
|
+
!rendering && !error && svg && /* @__PURE__ */ jsx(
|
|
98
|
+
"div",
|
|
99
|
+
{
|
|
100
|
+
className: "squisq-mermaid-render-svg",
|
|
101
|
+
dangerouslySetInnerHTML: { __html: svg }
|
|
102
|
+
}
|
|
103
|
+
)
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export {
|
|
110
|
+
MermaidDiagram
|
|
111
|
+
};
|