@pstdio/workbench 0.1.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/README.md +343 -0
- package/dist/context-key-service-C--cHa0B.js +447 -0
- package/dist/context-key-service-C--cHa0B.js.map +1 -0
- package/dist/core.d.ts +1885 -0
- package/dist/core.js +64 -0
- package/dist/core.js.map +1 -0
- package/dist/extensions.d.ts +1934 -0
- package/dist/extensions.js +1728 -0
- package/dist/extensions.js.map +1 -0
- package/dist/file-renderer-view-DrrhYnb_.js +171 -0
- package/dist/file-renderer-view-DrrhYnb_.js.map +1 -0
- package/dist/icon-B9XolQG8.js +35 -0
- package/dist/icon-B9XolQG8.js.map +1 -0
- package/dist/index.d.ts +1885 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +2020 -0
- package/dist/react.js +3905 -0
- package/dist/react.js.map +1 -0
- package/dist/storage.d.ts +128 -0
- package/dist/storage.js +87 -0
- package/dist/storage.js.map +1 -0
- package/dist/surface-reconcile-DkRf01ro.js +260 -0
- package/dist/surface-reconcile-DkRf01ro.js.map +1 -0
- package/dist/testing.d.ts +1620 -0
- package/dist/testing.js +46 -0
- package/dist/testing.js.map +1 -0
- package/dist/webview-runtime.d.ts +10 -0
- package/dist/webview-runtime.js +31 -0
- package/dist/webview-runtime.js.map +1 -0
- package/dist/workbench-core-DFpwi8Lo.js +2264 -0
- package/dist/workbench-core-DFpwi8Lo.js.map +1 -0
- package/dist/workbench-menu-paths-CQVH6z4_.js +11 -0
- package/dist/workbench-menu-paths-CQVH6z4_.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { c as X } from "react/compiler-runtime";
|
|
3
|
+
import { Center as N, Text as D, Image as P, Spinner as J, Box as G, Flex as Q } from "@chakra-ui/react";
|
|
4
|
+
import { CodeEditor as Z } from "@pstdio/ui/diff";
|
|
5
|
+
import { MarkdownEditor as ee } from "@pstdio/ui/rich-text";
|
|
6
|
+
import { useState as M, useRef as A, useEffect as V, useLayoutEffect as te } from "react";
|
|
7
|
+
const re = /* @__PURE__ */ new Set(["png", "jpg", "jpeg", "gif", "webp", "svg", "avif", "bmp", "ico"]), z = {
|
|
8
|
+
ts: "typescript",
|
|
9
|
+
tsx: "typescript",
|
|
10
|
+
js: "javascript",
|
|
11
|
+
jsx: "javascript",
|
|
12
|
+
mjs: "javascript",
|
|
13
|
+
cjs: "javascript",
|
|
14
|
+
json: "json",
|
|
15
|
+
jsonc: "json",
|
|
16
|
+
py: "python",
|
|
17
|
+
rb: "ruby",
|
|
18
|
+
rs: "rust",
|
|
19
|
+
go: "go",
|
|
20
|
+
java: "java",
|
|
21
|
+
kt: "kotlin",
|
|
22
|
+
c: "c",
|
|
23
|
+
h: "c",
|
|
24
|
+
cpp: "cpp",
|
|
25
|
+
cc: "cpp",
|
|
26
|
+
hpp: "cpp",
|
|
27
|
+
cs: "csharp",
|
|
28
|
+
php: "php",
|
|
29
|
+
swift: "swift",
|
|
30
|
+
sh: "shell",
|
|
31
|
+
bash: "shell",
|
|
32
|
+
zsh: "shell",
|
|
33
|
+
sql: "sql",
|
|
34
|
+
css: "css",
|
|
35
|
+
scss: "scss",
|
|
36
|
+
less: "less",
|
|
37
|
+
html: "html",
|
|
38
|
+
xml: "xml",
|
|
39
|
+
yml: "yaml",
|
|
40
|
+
yaml: "yaml",
|
|
41
|
+
toml: "ini",
|
|
42
|
+
ini: "ini",
|
|
43
|
+
dockerfile: "dockerfile",
|
|
44
|
+
graphql: "graphql",
|
|
45
|
+
gql: "graphql"
|
|
46
|
+
}, B = (l) => {
|
|
47
|
+
if (!l) return "";
|
|
48
|
+
const e = l.lastIndexOf(".");
|
|
49
|
+
return e < 0 || e === l.length - 1 ? "" : l.slice(e + 1).toLowerCase();
|
|
50
|
+
}, ne = (l, e) => e?.startsWith("image/") ? !0 : re.has(B(l)), le = (l, e) => ne(l, e) ? "image" : B(l) in z ? "code" : "markdown", ie = (l) => z[B(l)] ?? "plaintext", oe = (l) => {
|
|
51
|
+
const {
|
|
52
|
+
fileRendererId: e,
|
|
53
|
+
resourceUri: f
|
|
54
|
+
} = l;
|
|
55
|
+
return `${e}:${f ?? ""}`;
|
|
56
|
+
}, se = (l, e) => l?.loadKey === e, ce = 600, ae = (l) => l instanceof Error ? l.message : "Failed to load file.", ge = (l) => {
|
|
57
|
+
const e = X(50), {
|
|
58
|
+
workbench: f,
|
|
59
|
+
contribution: s
|
|
60
|
+
} = l, o = l.placement?.resource, R = o?.uri;
|
|
61
|
+
let b;
|
|
62
|
+
e[0] !== s.id || e[1] !== R ? (b = oe({
|
|
63
|
+
fileRendererId: s.id,
|
|
64
|
+
resourceUri: R
|
|
65
|
+
}), e[0] = s.id, e[1] = R, e[2] = b) : b = e[2];
|
|
66
|
+
const a = b, [y, W] = M(null), [E, I] = M(null), K = A(null);
|
|
67
|
+
let w;
|
|
68
|
+
e[3] !== s || e[4] !== a || e[5] !== o || e[6] !== f.renderers ? (w = () => {
|
|
69
|
+
let t = !1, r = 0;
|
|
70
|
+
I(null), W(null);
|
|
71
|
+
const i = () => {
|
|
72
|
+
Promise.resolve(s.load(o)).then((v) => {
|
|
73
|
+
t || (r = r + 1, I(null), W({
|
|
74
|
+
...v,
|
|
75
|
+
revision: r,
|
|
76
|
+
loadKey: a
|
|
77
|
+
}));
|
|
78
|
+
}).catch((v) => {
|
|
79
|
+
t || I({
|
|
80
|
+
loadKey: a,
|
|
81
|
+
message: ae(v)
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
i();
|
|
86
|
+
const g = f.renderers.onDidRefreshFileRenderer((v) => {
|
|
87
|
+
v.fileRendererId === s.id && i();
|
|
88
|
+
});
|
|
89
|
+
return () => {
|
|
90
|
+
t = !0, g.dispose();
|
|
91
|
+
};
|
|
92
|
+
}, e[3] = s, e[4] = a, e[5] = o, e[6] = f.renderers, e[7] = w) : w = e[7];
|
|
93
|
+
let j;
|
|
94
|
+
e[8] !== s || e[9] !== a || e[10] !== o || e[11] !== f ? (j = [s, f, o, a], e[8] = s, e[9] = a, e[10] = o, e[11] = f, e[12] = j) : j = e[12], V(w, j);
|
|
95
|
+
const u = s.save, m = A(null), h = A(null);
|
|
96
|
+
let x, S;
|
|
97
|
+
e[13] !== o || e[14] !== u ? (x = () => {
|
|
98
|
+
if (!u)
|
|
99
|
+
return;
|
|
100
|
+
const t = () => {
|
|
101
|
+
if (h.current && (clearTimeout(h.current), h.current = null), m.current === null)
|
|
102
|
+
return;
|
|
103
|
+
const i = m.current;
|
|
104
|
+
m.current = null, u(o, i);
|
|
105
|
+
}, r = () => {
|
|
106
|
+
document.visibilityState === "hidden" && t();
|
|
107
|
+
};
|
|
108
|
+
return window.addEventListener("beforeunload", t), document.addEventListener("visibilitychange", r), () => {
|
|
109
|
+
window.removeEventListener("beforeunload", t), document.removeEventListener("visibilitychange", r), t();
|
|
110
|
+
};
|
|
111
|
+
}, S = [u, o], e[13] = o, e[14] = u, e[15] = x, e[16] = S) : (x = e[15], S = e[16]), V(x, S);
|
|
112
|
+
let L;
|
|
113
|
+
e[17] !== o || e[18] !== u ? (L = (t) => {
|
|
114
|
+
u && (m.current = t, h.current && clearTimeout(h.current), h.current = setTimeout(() => {
|
|
115
|
+
if (h.current = null, m.current === null)
|
|
116
|
+
return;
|
|
117
|
+
const r = m.current;
|
|
118
|
+
m.current = null, u(o, r);
|
|
119
|
+
}, ce));
|
|
120
|
+
}, e[17] = o, e[18] = u, e[19] = L) : L = e[19];
|
|
121
|
+
const Y = L;
|
|
122
|
+
let C;
|
|
123
|
+
e[20] !== a || e[21] !== y ? (C = se(y, a) ? y : null, e[20] = a, e[21] = y, e[22] = C) : C = e[22];
|
|
124
|
+
const n = C, T = n ? `${n.loadKey}:${n.revision}` : "";
|
|
125
|
+
let _, k;
|
|
126
|
+
if (e[23] !== T ? (_ = () => {
|
|
127
|
+
if (!T)
|
|
128
|
+
return;
|
|
129
|
+
const t = K.current;
|
|
130
|
+
t && requestAnimationFrame(() => {
|
|
131
|
+
let r = t.parentElement;
|
|
132
|
+
for (; r; ) {
|
|
133
|
+
const i = getComputedStyle(r).overflowY;
|
|
134
|
+
["auto", "scroll", "overlay"].includes(i) && r.scrollHeight > r.clientHeight && (r.scrollTop = 0), r = r.parentElement;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}, k = [T], e[23] = T, e[24] = _, e[25] = k) : (_ = e[24], k = e[25]), te(_, k), E?.loadKey === a) {
|
|
138
|
+
let t;
|
|
139
|
+
return e[26] !== E.message ? (t = /* @__PURE__ */ c(N, { h: "full", minH: "0", bg: "bg", p: "md", children: /* @__PURE__ */ c(D, { color: "fg.muted", children: E.message }) }), e[26] = E.message, e[27] = t) : t = e[27], t;
|
|
140
|
+
}
|
|
141
|
+
if (!n) {
|
|
142
|
+
let t;
|
|
143
|
+
return e[28] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t = /* @__PURE__ */ c(N, { h: "full", minH: "0", bg: "bg", children: /* @__PURE__ */ c(J, { size: "sm" }) }), e[28] = t) : t = e[28], t;
|
|
144
|
+
}
|
|
145
|
+
let F;
|
|
146
|
+
e[29] !== n.fileName || e[30] !== n.mimeType ? (F = le(n.fileName, n.mimeType), e[29] = n.fileName, e[30] = n.mimeType, e[31] = F) : F = e[31];
|
|
147
|
+
const U = F, d = !!u && U !== "image", p = `${s.id}:${n.revision}`;
|
|
148
|
+
if (U === "image") {
|
|
149
|
+
if (!n.dataUrl) {
|
|
150
|
+
let i;
|
|
151
|
+
return e[32] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (i = /* @__PURE__ */ c(N, { h: "full", minH: "0", bg: "bg", p: "md", children: /* @__PURE__ */ c(D, { color: "fg.muted", children: "This image preview is unavailable." }) }), e[32] = i) : i = e[32], i;
|
|
152
|
+
}
|
|
153
|
+
const t = n.fileName ?? s.title;
|
|
154
|
+
let r;
|
|
155
|
+
return e[33] !== n.dataUrl || e[34] !== t ? (r = /* @__PURE__ */ c(N, { ref: K, h: "full", minH: "0", bg: "bg", p: "md", overflow: "auto", children: /* @__PURE__ */ c(P, { src: n.dataUrl, alt: t, maxW: "100%", maxH: "100%", objectFit: "contain" }) }), e[33] = n.dataUrl, e[34] = t, e[35] = r) : r = e[35], r;
|
|
156
|
+
}
|
|
157
|
+
if (U === "code") {
|
|
158
|
+
let t;
|
|
159
|
+
e[36] !== n.fileName ? (t = ie(n.fileName), e[36] = n.fileName, e[37] = t) : t = e[37];
|
|
160
|
+
const r = n.content ?? "", i = d ? Y : void 0;
|
|
161
|
+
let g;
|
|
162
|
+
return e[38] !== p || e[39] !== d || e[40] !== t || e[41] !== r || e[42] !== i ? (g = /* @__PURE__ */ c(G, { h: "full", minH: "0", bg: "bg", children: /* @__PURE__ */ c(Z, { language: t, defaultCode: r, isEditable: d, showLineNumbers: !0, onChange: i }, p) }), e[38] = p, e[39] = d, e[40] = t, e[41] = r, e[42] = i, e[43] = g) : g = e[43], g;
|
|
163
|
+
}
|
|
164
|
+
const q = n.content ?? "", $ = d ? n.placeholder ?? "Write…" : void 0, O = d ? Y : void 0;
|
|
165
|
+
let H;
|
|
166
|
+
return e[44] !== p || e[45] !== d || e[46] !== q || e[47] !== $ || e[48] !== O ? (H = /* @__PURE__ */ c(Q, { ref: K, direction: "column", h: "full", minH: "0", overflow: "hidden", bg: "bg", children: /* @__PURE__ */ c(G, { flex: "1", minH: "0", overflowY: "auto", children: /* @__PURE__ */ c(ee, { defaultState: q, isEditable: d, placeholder: $, onChange: O }, p) }) }), e[44] = p, e[45] = d, e[46] = q, e[47] = $, e[48] = O, e[49] = H) : H = e[49], H;
|
|
167
|
+
};
|
|
168
|
+
export {
|
|
169
|
+
ge as WorkbenchFileRendererView
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=file-renderer-view-DrrhYnb_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-renderer-view-DrrhYnb_.js","sources":["../src/react/renderers/file/file-kind.ts","../src/react/renderers/file/file-renderer-load-key.ts","../src/react/renderers/file/file-renderer-view.tsx"],"sourcesContent":["// Generic file-type dispatch for the file renderer. Markdown is the default so\n// `.md` / `.txt` / extension-less files open in the prose editor; recognised code\n// extensions open in Monaco; images render read-only. This is deliberately\n// domain-agnostic — it knows about file types, not about tickets.\n\nexport type FileKind = \"markdown\" | \"code\" | \"image\";\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"avif\", \"bmp\", \"ico\"]);\n\n// Extension → Monaco language id. Markdown/plain text intentionally absent so\n// they fall through to the prose editor.\nconst CODE_LANGUAGE_BY_EXTENSION: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n json: \"json\",\n jsonc: \"json\",\n py: \"python\",\n rb: \"ruby\",\n rs: \"rust\",\n go: \"go\",\n java: \"java\",\n kt: \"kotlin\",\n c: \"c\",\n h: \"c\",\n cpp: \"cpp\",\n cc: \"cpp\",\n hpp: \"cpp\",\n cs: \"csharp\",\n php: \"php\",\n swift: \"swift\",\n sh: \"shell\",\n bash: \"shell\",\n zsh: \"shell\",\n sql: \"sql\",\n css: \"css\",\n scss: \"scss\",\n less: \"less\",\n html: \"html\",\n xml: \"xml\",\n yml: \"yaml\",\n yaml: \"yaml\",\n toml: \"ini\",\n ini: \"ini\",\n dockerfile: \"dockerfile\",\n graphql: \"graphql\",\n gql: \"graphql\",\n};\n\nconst extensionOf = (fileName: string | undefined) => {\n if (!fileName) return \"\";\n const dot = fileName.lastIndexOf(\".\");\n if (dot < 0 || dot === fileName.length - 1) return \"\";\n return fileName.slice(dot + 1).toLowerCase();\n};\n\nconst isImage = (fileName: string | undefined, mimeType: string | undefined) => {\n if (mimeType?.startsWith(\"image/\")) return true;\n return IMAGE_EXTENSIONS.has(extensionOf(fileName));\n};\n\nexport const pickFileKind = (fileName: string | undefined, mimeType: string | undefined): FileKind => {\n if (isImage(fileName, mimeType)) return \"image\";\n if (extensionOf(fileName) in CODE_LANGUAGE_BY_EXTENSION) return \"code\";\n return \"markdown\";\n};\n\n// Monaco language for a code file; falls back to plaintext for unknown extensions.\nexport const codeLanguageFor = (fileName: string | undefined) =>\n CODE_LANGUAGE_BY_EXTENSION[extensionOf(fileName)] ?? \"plaintext\";\n","interface FileRendererLoadKeyInput {\n fileRendererId: string;\n resourceUri: string | undefined;\n}\n\nexport const createFileRendererLoadKey = (input: FileRendererLoadKeyInput) => {\n const { fileRendererId, resourceUri } = input;\n return `${fileRendererId}:${resourceUri ?? \"\"}`;\n};\n\nexport const isCurrentLoadedFile = (loaded: { loadKey: string } | null, loadKey: string) => loaded?.loadKey === loadKey;\n","import { Box, Center, Flex, Image, Spinner, Text } from \"@chakra-ui/react\";\nimport { CodeEditor } from \"@pstdio/ui/diff\";\nimport { MarkdownEditor } from \"@pstdio/ui/rich-text\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type {\n FileRendererContent,\n RegisteredFileRendererContribution,\n WorkbenchCore,\n WorkbenchWidgetPlacement,\n} from \"../../../core\";\nimport { codeLanguageFor, pickFileKind } from \"./file-kind\";\nimport { createFileRendererLoadKey, isCurrentLoadedFile } from \"./file-renderer-load-key\";\n\ninterface WorkbenchFileRendererViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredFileRendererContribution;\n // The bound resource (e.g. the open ticket / ticket-file) the load/save\n // commands operate on.\n placement?: WorkbenchWidgetPlacement;\n}\n\ninterface LoadedFile extends FileRendererContent {\n // Bumped on every (re)load so the uncontrolled editors remount with fresh\n // content on a refresh, but never mid-edit (load only runs on mount/refresh).\n revision: number;\n loadKey: string;\n}\n\nconst SAVE_DEBOUNCE_MS = 600;\n\nconst describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to load file.\");\n\nexport const WorkbenchFileRendererView = (props: WorkbenchFileRendererViewProps) => {\n const { workbench, contribution } = props;\n const resource = props.placement?.resource;\n const loadKey = createFileRendererLoadKey({ fileRendererId: contribution.id, resourceUri: resource?.uri });\n const [loaded, setLoaded] = useState<LoadedFile | null>(null);\n const [error, setError] = useState<{ loadKey: string; message: string } | null>(null);\n const rendererRef = useRef<HTMLDivElement>(null);\n\n // Re-binding a singleton widget to another resource changes `resource` and reloads.\n useEffect(() => {\n let cancelled = false;\n let revision = 0;\n setError(null);\n setLoaded(null);\n const load = () => {\n Promise.resolve(contribution.load(resource))\n .then((next) => {\n if (cancelled) return;\n revision += 1;\n setError(null);\n setLoaded({ ...next, revision, loadKey });\n })\n .catch((loadError) => {\n if (cancelled) return;\n setError({ loadKey, message: describeError(loadError) });\n });\n };\n load();\n const refreshSubscription = workbench.renderers.onDidRefreshFileRenderer((event) => {\n if (event.fileRendererId === contribution.id) load();\n });\n return () => {\n cancelled = true;\n refreshSubscription.dispose();\n };\n }, [contribution, workbench, resource, loadKey]);\n\n // Debounced autosave shared by the markdown + code editors. Flushed on unmount\n // and when the tab is hidden so the last keystrokes are never dropped.\n const save = contribution.save;\n const pending = useRef<string | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (!save) return;\n const flush = () => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n if (pending.current === null) return;\n const value = pending.current;\n pending.current = null;\n void save(resource, value);\n };\n const onVisibility = () => {\n if (document.visibilityState === \"hidden\") flush();\n };\n window.addEventListener(\"beforeunload\", flush);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.removeEventListener(\"beforeunload\", flush);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n flush();\n };\n }, [save, resource]);\n\n const handleChange = (value: string) => {\n if (!save) return;\n pending.current = value;\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n timer.current = null;\n if (pending.current === null) return;\n const next = pending.current;\n pending.current = null;\n void save(resource, next);\n }, SAVE_DEBOUNCE_MS);\n };\n\n const currentLoaded = isCurrentLoadedFile(loaded, loadKey) ? loaded : null;\n const scrollResetKey = currentLoaded ? `${currentLoaded.loadKey}:${currentLoaded.revision}` : \"\";\n\n useLayoutEffect(() => {\n if (!scrollResetKey) return;\n const node = rendererRef.current;\n if (!node) return;\n\n requestAnimationFrame(() => {\n let current = node.parentElement;\n while (current) {\n const overflowY = getComputedStyle(current).overflowY;\n if ([\"auto\", \"scroll\", \"overlay\"].includes(overflowY) && current.scrollHeight > current.clientHeight) {\n current.scrollTop = 0;\n }\n current = current.parentElement;\n }\n });\n }, [scrollResetKey]);\n\n if (error?.loadKey === loadKey) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\">\n <Text color=\"fg.muted\">{error.message}</Text>\n </Center>\n );\n }\n\n if (!currentLoaded) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\">\n <Spinner size=\"sm\" />\n </Center>\n );\n }\n\n const kind = pickFileKind(currentLoaded.fileName, currentLoaded.mimeType);\n const isEditable = Boolean(save) && kind !== \"image\";\n const editorKey = `${contribution.id}:${currentLoaded.revision}`;\n\n if (kind === \"image\") {\n if (!currentLoaded.dataUrl) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\">\n <Text color=\"fg.muted\">This image preview is unavailable.</Text>\n </Center>\n );\n }\n return (\n <Center ref={rendererRef} h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\" overflow=\"auto\">\n <Image\n src={currentLoaded.dataUrl}\n alt={currentLoaded.fileName ?? contribution.title}\n maxW=\"100%\"\n maxH=\"100%\"\n objectFit=\"contain\"\n />\n </Center>\n );\n }\n\n if (kind === \"code\") {\n return (\n <Box h=\"full\" minH=\"0\" bg=\"bg\">\n <CodeEditor\n key={editorKey}\n language={codeLanguageFor(currentLoaded.fileName)}\n defaultCode={currentLoaded.content ?? \"\"}\n isEditable={isEditable}\n showLineNumbers\n onChange={isEditable ? handleChange : undefined}\n />\n </Box>\n );\n }\n\n return (\n <Flex ref={rendererRef} direction=\"column\" h=\"full\" minH=\"0\" overflow=\"hidden\" bg=\"bg\">\n <Box flex=\"1\" minH=\"0\" overflowY=\"auto\">\n <MarkdownEditor\n key={editorKey}\n defaultState={currentLoaded.content ?? \"\"}\n isEditable={isEditable}\n placeholder={isEditable ? (currentLoaded.placeholder ?? \"Write…\") : undefined}\n onChange={isEditable ? handleChange : undefined}\n />\n </Box>\n </Flex>\n );\n};\n"],"names":["IMAGE_EXTENSIONS","Set","CODE_LANGUAGE_BY_EXTENSION","ts","tsx","js","jsx","mjs","cjs","json","jsonc","py","rb","rs","go","java","kt","c","h","cpp","cc","hpp","cs","php","swift","sh","bash","zsh","sql","css","scss","less","html","xml","yml","yaml","toml","ini","dockerfile","graphql","gql","extensionOf","fileName","dot","lastIndexOf","length","slice","toLowerCase","isImage","mimeType","startsWith","has","pickFileKind","codeLanguageFor","createFileRendererLoadKey","input","fileRendererId","resourceUri","isCurrentLoadedFile","loaded","loadKey","SAVE_DEBOUNCE_MS","describeError","error","Error","message","WorkbenchFileRendererView","props","$","_c","workbench","contribution","resource","placement","t0","uri","t1","id","setLoaded","useState","setError","rendererRef","useRef","t2","renderers","cancelled","revision","load","Promise","resolve","then","next","catch","loadError","refreshSubscription","onDidRefreshFileRenderer","event","dispose","t3","useEffect","save","pending","timer","t4","t5","flush","current","clearTimeout","value","onVisibility","document","visibilityState","window","addEventListener","removeEventListener","t6","value_0","setTimeout","next_0","handleChange","t7","currentLoaded","scrollResetKey","t8","t9","node","requestAnimationFrame","parentElement","overflowY","getComputedStyle","includes","scrollHeight","clientHeight","scrollTop","useLayoutEffect","t10","Center","Text","Symbol","for","Spinner","kind","isEditable","Boolean","editorKey","dataUrl","t11","title","t12","Image","content","t13","undefined","t14","Box","CodeEditor","placeholder","Flex","MarkdownEditor"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as f } from "react/jsx-runtime";
|
|
2
|
+
import { c as u } from "react/compiler-runtime";
|
|
3
|
+
import { Icon as m } from "@chakra-ui/react";
|
|
4
|
+
import * as d from "lucide-react";
|
|
5
|
+
const p = (n) => n.split(/[^a-zA-Z0-9]+/).filter(Boolean).map((e) => `${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(""), I = (n) => {
|
|
6
|
+
const e = p(n), t = [n, e, `${e}Icon`];
|
|
7
|
+
for (const c of t) {
|
|
8
|
+
const o = d[c];
|
|
9
|
+
if (o && (typeof o == "function" || typeof o == "object"))
|
|
10
|
+
return o;
|
|
11
|
+
}
|
|
12
|
+
}, z = (n) => {
|
|
13
|
+
const e = u(10);
|
|
14
|
+
let t, c, o;
|
|
15
|
+
e[0] !== n ? ({
|
|
16
|
+
name: t,
|
|
17
|
+
size: o,
|
|
18
|
+
...c
|
|
19
|
+
} = n, e[0] = n, e[1] = t, e[2] = c, e[3] = o) : (t = e[1], c = e[2], o = e[3]);
|
|
20
|
+
const l = o === void 0 ? 14 : o;
|
|
21
|
+
if (!t)
|
|
22
|
+
return null;
|
|
23
|
+
let s;
|
|
24
|
+
e[4] !== t ? (s = I(t), e[4] = t, e[5] = s) : s = e[5];
|
|
25
|
+
const i = s;
|
|
26
|
+
if (!i)
|
|
27
|
+
return null;
|
|
28
|
+
const a = typeof l == "number" ? `${l}px` : l;
|
|
29
|
+
let r;
|
|
30
|
+
return e[6] !== i || e[7] !== c || e[8] !== a ? (r = /* @__PURE__ */ f(m, { as: i, boxSize: a, "aria-hidden": "true", ...c }), e[6] = i, e[7] = c, e[8] = a, e[9] = r) : r = e[9], r;
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
z as W
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=icon-B9XolQG8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-B9XolQG8.js","sources":["../src/react/shared/icon.tsx"],"sourcesContent":["import { Icon, type IconProps } from \"@chakra-ui/react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport * as lucideIcons from \"lucide-react\";\n\ninterface WorkbenchIconProps extends Omit<IconProps, \"as\" | \"size\"> {\n name?: string;\n size?: number | string;\n}\n\nconst toPascalCase = (value: string) =>\n value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(\"\");\n\nconst resolveLucideIcon = (name: string) => {\n const pascalName = toPascalCase(name);\n const candidates = [name, pascalName, `${pascalName}Icon`];\n\n for (const candidate of candidates) {\n const IconComponent = (lucideIcons as Record<string, unknown>)[candidate];\n if (IconComponent && (typeof IconComponent === \"function\" || typeof IconComponent === \"object\")) {\n return IconComponent as LucideIcon;\n }\n }\n\n return undefined;\n};\n\nexport const WorkbenchIcon = (props: WorkbenchIconProps) => {\n const { name, size = 14, ...rest } = props;\n if (!name) return null;\n\n const LucideIcon = resolveLucideIcon(name);\n if (!LucideIcon) return null;\n\n return <Icon as={LucideIcon} boxSize={typeof size === \"number\" ? `${size}px` : size} aria-hidden=\"true\" {...rest} />;\n};\n"],"names":["toPascalCase","value","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","resolveLucideIcon","name","pascalName","candidates","candidate","IconComponent","lucideIcons","WorkbenchIcon","props","$","_c","rest","t0","size","undefined","t1","LucideIcon","t2","t3","Icon"],"mappings":";;;;AASA,MAAMA,IAAeA,CAACC,MACpBA,EACGC,MAAM,eAAe,EACrBC,OAAOC,OAAO,EACdC,IAAKC,CAAAA,MAAS,GAAGA,EAAKC,OAAO,CAAC,EAAEC,YAAAA,CAAa,GAAGF,EAAKG,MAAM,CAAC,CAAC,EAAE,EAC/DC,KAAK,EAAE,GAENC,IAAoBA,CAACC,MAAiB;AAC1C,QAAMC,IAAab,EAAaY,CAAI,GAC9BE,IAAa,CAACF,GAAMC,GAAY,GAAGA,CAAU,MAAM;AAEzD,aAAWE,KAAaD,GAAY;AAClC,UAAME,IAAiBC,EAAwCF,CAAS;AACxE,QAAIC,MAAkB,OAAOA,KAAkB,cAAc,OAAOA,KAAkB;AACpF,aAAOA;AAAAA,EAEX;AAGF,GAEaE,IAAgBC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAT,GAAAU,GAAAC;AAAA,EAAAH,SAAAD,KAC3B;AAAA,IAAAP,MAAAA;AAAAA,IAAAY,MAAAD;AAAAA,IAAA,GAAAD;AAAAA,EAAAA,IAAqCH,GAAMC,OAAAD,GAAAC,OAAAR,GAAAQ,OAAAE,GAAAF,OAAAG,MAAAX,IAAAQ,EAAA,CAAA,GAAAE,IAAAF,EAAA,CAAA,GAAAG,IAAAH,EAAA,CAAA;AAA7B,QAAAI,IAAAD,MAAAE,SAAA,KAAAF;AACd,MAAI,CAACX;AAAI,WAAS;AAAK,MAAAc;AAAA,EAAAN,SAAAR,KAEJc,IAAAf,EAAkBC,CAAI,GAACQ,OAAAR,GAAAQ,OAAAM,KAAAA,IAAAN,EAAA,CAAA;AAA1C,QAAAO,IAAmBD;AACnB,MAAI,CAACC;AAAU,WAAS;AAEc,QAAAC,IAAA,OAAOJ,KAAS,WAAhB,GAA8BA,CAAI,OAAlCA;AAA6C,MAAAK;AAAA,SAAAT,EAAA,CAAA,MAAAO,KAAAP,SAAAE,KAAAF,EAAA,CAAA,MAAAQ,KAA5EC,sBAACC,KAASH,IAAAA,GAAqB,SAAAC,GAA2D,eAAA,QAAM,GAAKN,EAAAA,CAAI,GAAIF,OAAAO,GAAAP,OAAAE,GAAAF,OAAAQ,GAAAR,OAAAS,KAAAA,IAAAT,EAAA,CAAA,GAA7GS;AAA6G;"}
|