@nubase/terminal 0.0.0-stage → 0.1.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 (119) hide show
  1. package/bin/nubase.js +11 -0
  2. package/out/main/index.js +3240 -0
  3. package/out/preload/index.cjs +23 -0
  4. package/out/renderer/assets/BinaryPreviews-Dvmgctgl.js +262 -0
  5. package/out/renderer/assets/CodeEditor-BKx61p9c.js +2034 -0
  6. package/out/renderer/assets/DocumentPreviews-BA1gL-ZJ.js +66 -0
  7. package/out/renderer/assets/DocxPreview-CiY-SNbh.js +6955 -0
  8. package/out/renderer/assets/ImagePreview-DpnKfbxj.js +120 -0
  9. package/out/renderer/assets/PdfPreview-6oeuYaqY.js +24399 -0
  10. package/out/renderer/assets/PdfPreview-BT-DZbCt.css +6483 -0
  11. package/out/renderer/assets/SpreadsheetPreviews-B4Qby88A.js +23987 -0
  12. package/out/renderer/assets/abap-Cel38df4.js +1317 -0
  13. package/out/renderer/assets/apex-DzOmV_zF.js +355 -0
  14. package/out/renderer/assets/azcli-Xvapx-7p.js +56 -0
  15. package/out/renderer/assets/bat-BGMSIlWY.js +126 -0
  16. package/out/renderer/assets/bicep-CcpV5qxk.js +228 -0
  17. package/out/renderer/assets/cameligo-BfMDXVEx.js +233 -0
  18. package/out/renderer/assets/clojure-DFgIAJGu.js +801 -0
  19. package/out/renderer/assets/codicon-DF1abBS2.ttf +0 -0
  20. package/out/renderer/assets/coffee-Db4q5aZ8.js +308 -0
  21. package/out/renderer/assets/cpp-CEvPJv6f.js +450 -0
  22. package/out/renderer/assets/csharp-CVoBr97X.js +405 -0
  23. package/out/renderer/assets/csp-Cgzd5gxo.js +49 -0
  24. package/out/renderer/assets/css-D3M-RRVi.js +287 -0
  25. package/out/renderer/assets/css.worker-AXSlELAq.js +50031 -0
  26. package/out/renderer/assets/cssMode-CrMQfSUN.js +101 -0
  27. package/out/renderer/assets/cursor-editorTextHighlight-kG3uUOwL.svg +8 -0
  28. package/out/renderer/assets/cypher-DJJgZ_3Q.js +326 -0
  29. package/out/renderer/assets/dart-Bkg7I-Qe.js +341 -0
  30. package/out/renderer/assets/dockerfile-B1r36HyK.js +194 -0
  31. package/out/renderer/assets/ecl-C1Ji6tZG.js +531 -0
  32. package/out/renderer/assets/editor-CXfYqUZ6.css +4816 -0
  33. package/out/renderer/assets/editor.api-zF37fz_e.js +127071 -0
  34. package/out/renderer/assets/elixir-D_-n8lGJ.js +526 -0
  35. package/out/renderer/assets/fileTypes-nBt-Y6NI.js +56306 -0
  36. package/out/renderer/assets/flow9-CCdkJPNN.js +179 -0
  37. package/out/renderer/assets/freemarker2-CBlvIP9I.js +733 -0
  38. package/out/renderer/assets/fsharp-D5KoOpm3.js +248 -0
  39. package/out/renderer/assets/go-B7BFdMAL.js +264 -0
  40. package/out/renderer/assets/graphql-BqIezLde.js +177 -0
  41. package/out/renderer/assets/handlebars-CG4DAk5_.js +414 -0
  42. package/out/renderer/assets/hcl-C1GQCKC0.js +222 -0
  43. package/out/renderer/assets/html-C-_R4s2w.js +335 -0
  44. package/out/renderer/assets/html.worker-vQ8gO4kF.js +30584 -0
  45. package/out/renderer/assets/htmlMode-mGTQJ-lr.js +125 -0
  46. package/out/renderer/assets/index-CQHlaLTi.js +46080 -0
  47. package/out/renderer/assets/index-DBYJcRdn.css +3124 -0
  48. package/out/renderer/assets/ini-DDFxEGYN.js +97 -0
  49. package/out/renderer/assets/java-BqvgSBNj.js +272 -0
  50. package/out/renderer/assets/javascript-BuIet4p-.js +69 -0
  51. package/out/renderer/assets/json.worker-DBhrCMTN.js +23259 -0
  52. package/out/renderer/assets/jsonMode-OAArikPQ.js +769 -0
  53. package/out/renderer/assets/julia-D30HQT3I.js +688 -0
  54. package/out/renderer/assets/kotlin-Bql4-FwM.js +303 -0
  55. package/out/renderer/assets/less-D_rhcFqZ.js +245 -0
  56. package/out/renderer/assets/lexon-CjhVPeai.js +188 -0
  57. package/out/renderer/assets/liquid-DJNDWhYP.js +277 -0
  58. package/out/renderer/assets/lspLanguageFeatures-BIH0_3rO.css +24 -0
  59. package/out/renderer/assets/lspLanguageFeatures-Bvh4jxNk.js +2583 -0
  60. package/out/renderer/assets/lua-HQuy0vuU.js +203 -0
  61. package/out/renderer/assets/m3-CIJ7obE2.js +287 -0
  62. package/out/renderer/assets/markdown-I0GroHKS.js +265 -0
  63. package/out/renderer/assets/mdx-B4We-zdi.js +330 -0
  64. package/out/renderer/assets/mips-DY_Z1uin.js +190 -0
  65. package/out/renderer/assets/msdax-YkUW9rXl.js +416 -0
  66. package/out/renderer/assets/mysql-CIm9uV8f.js +921 -0
  67. package/out/renderer/assets/objective-c-JkhNEfNv.js +233 -0
  68. package/out/renderer/assets/pascal-Dvq-PxOC.js +289 -0
  69. package/out/renderer/assets/pascaligo-A9tZTvdV.js +204 -0
  70. package/out/renderer/assets/pdf_viewer-8SNFor7s.js +7639 -0
  71. package/out/renderer/assets/perl-C2Ujz2HB.js +720 -0
  72. package/out/renderer/assets/pgsql-BHB-cYm3.js +879 -0
  73. package/out/renderer/assets/php-DkNik5Vk.js +548 -0
  74. package/out/renderer/assets/pla-DQ-RrdDE.js +149 -0
  75. package/out/renderer/assets/postiats-f1cpw-r_.js +702 -0
  76. package/out/renderer/assets/powerquery-CwYp-rYn.js +940 -0
  77. package/out/renderer/assets/powershell-DNVb682q.js +252 -0
  78. package/out/renderer/assets/protobuf-C73bXEb8.js +663 -0
  79. package/out/renderer/assets/pug-BxvM69yY.js +419 -0
  80. package/out/renderer/assets/python-Hlw9kU7X.js +389 -0
  81. package/out/renderer/assets/qsharp-BCs2AvEL.js +335 -0
  82. package/out/renderer/assets/r-B7wnzr1V.js +282 -0
  83. package/out/renderer/assets/razor-BswxUzye.js +615 -0
  84. package/out/renderer/assets/redis-BQXcxMfX.js +324 -0
  85. package/out/renderer/assets/redshift-2dZdIUPH.js +838 -0
  86. package/out/renderer/assets/restructuredtext-CVT2zSWP.js +290 -0
  87. package/out/renderer/assets/ruby-DjmMI5Dp.js +612 -0
  88. package/out/renderer/assets/rust-BhSCZj0F.js +382 -0
  89. package/out/renderer/assets/sb-DaUIZery.js +146 -0
  90. package/out/renderer/assets/scala-CYIN7D7O.js +589 -0
  91. package/out/renderer/assets/scheme-DanUmhC2.js +173 -0
  92. package/out/renderer/assets/scss-BVILLTDt.js +420 -0
  93. package/out/renderer/assets/shell-Bpairu2a.js +293 -0
  94. package/out/renderer/assets/solidity-OLm4MSRm.js +1395 -0
  95. package/out/renderer/assets/sophia-DJz2Vk1M.js +234 -0
  96. package/out/renderer/assets/sparql-Bk5uRAQt.js +237 -0
  97. package/out/renderer/assets/sql-DQBN9zz5.js +858 -0
  98. package/out/renderer/assets/st-50mV4H0S.js +657 -0
  99. package/out/renderer/assets/swift-Yc0Q28XL.js +376 -0
  100. package/out/renderer/assets/systemverilog-Du7vdcmu.js +616 -0
  101. package/out/renderer/assets/tcl-DG7u3TBj.js +312 -0
  102. package/out/renderer/assets/toggleHighContrast-CKRp-vZ7.css +3691 -0
  103. package/out/renderer/assets/toggleHighContrast-NyS1pk1Z.js +51247 -0
  104. package/out/renderer/assets/twig-C49MsNA9.js +438 -0
  105. package/out/renderer/assets/typescript-F2yeVXIn.js +382 -0
  106. package/out/renderer/assets/typespec-DA1dz9gQ.js +245 -0
  107. package/out/renderer/assets/useAsync-Bi56CNnI.js +30 -0
  108. package/out/renderer/assets/vb-BDNIgfQk.js +447 -0
  109. package/out/renderer/assets/wgsl-j-0nJ_62.js +457 -0
  110. package/out/renderer/assets/xml-BfG5_Ah8.js +131 -0
  111. package/out/renderer/assets/yaml-7gp9FQUG.js +224 -0
  112. package/out/renderer/index.html +14 -0
  113. package/package.json +66 -4
  114. package/resources/skills/nubase-extension-authoring/SKILL.md +273 -0
  115. package/resources/templates/extension/package.json.template +13 -0
  116. package/resources/templates/extension/src/host.ts.template +12 -0
  117. package/resources/templates/extension/src/ui.tsx.template +26 -0
  118. package/resources/templates/extension/tsconfig.json.template +4 -0
  119. package/README.md +0 -3
@@ -0,0 +1,23 @@
1
+ let electron = require("electron");
2
+ //#region src/common/host-contract.ts
3
+ var INVOKE_CHANNEL = "nubase:invoke";
4
+ var EVENT_CHANNEL = "nubase:event";
5
+ //#endregion
6
+ //#region src/preload/index.ts
7
+ var listeners = /* @__PURE__ */ new Map();
8
+ electron.ipcRenderer.on(EVENT_CHANNEL, (_event, name, payload) => {
9
+ for (const listener of listeners.get(name) ?? []) listener(payload);
10
+ });
11
+ electron.contextBridge.exposeInMainWorld("nubaseHost", {
12
+ invoke: (method, args) => electron.ipcRenderer.invoke(INVOKE_CHANNEL, method, args),
13
+ on: (event, listener) => {
14
+ let set = listeners.get(event);
15
+ if (!set) {
16
+ set = /* @__PURE__ */ new Set();
17
+ listeners.set(event, set);
18
+ }
19
+ set.add(listener);
20
+ return () => set.delete(listener);
21
+ }
22
+ });
23
+ //#endregion
@@ -0,0 +1,262 @@
1
+ import { $t as __toESM, B as SearchTextInput, Ft as Eye, It as ExternalLink, Nt as Folder, Pt as FolderOpen, Yt as require_react, _ as iconFor, b as Button, g as formatBytes, h as fetchRange, nt as require_jsx_runtime, q as cn, v as isMac, y as ActivityIndicator } from "./fileTypes-nBt-Y6NI.js";
2
+ import { n as PreviewMessage } from "./index-CQHlaLTi.js";
3
+ import { t as useAsync } from "./useAsync-Bi56CNnI.js";
4
+ import { ImageView } from "./ImagePreview-DpnKfbxj.js";
5
+ //#region src/builtin-extensions/files/previewers/BinaryPreviews.tsx
6
+ var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
7
+ var import_jsx_runtime = /* @__PURE__ */ __toESM(require_jsx_runtime(), 1);
8
+ var HEX_PAGE = 64 * 1024;
9
+ var BYTES_PER_ROW = 16;
10
+ var Centered = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
11
+ className: "flex h-full items-center justify-center",
12
+ children
13
+ });
14
+ /** Offset, hex and ASCII columns, 64 KB at a time. */
15
+ var HexPreview = ({ file }) => {
16
+ const [bytes, setBytes] = (0, import_react.useState)(new Uint8Array());
17
+ const [loading, setLoading] = (0, import_react.useState)(false);
18
+ const loadMore = async (from, reset = false) => {
19
+ if (file.size === 0) return;
20
+ setLoading(true);
21
+ try {
22
+ const end = Math.min(file.size, from + HEX_PAGE) - 1;
23
+ const chunk = new Uint8Array(await fetchRange(file.url, from, end));
24
+ setBytes((previous) => {
25
+ if (reset) return chunk;
26
+ const merged = new Uint8Array(previous.length + chunk.length);
27
+ merged.set(previous);
28
+ merged.set(chunk, previous.length);
29
+ return merged;
30
+ });
31
+ } finally {
32
+ setLoading(false);
33
+ }
34
+ };
35
+ (0, import_react.useEffect)(() => {
36
+ setBytes(new Uint8Array());
37
+ loadMore(0, true);
38
+ }, [file.url]);
39
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
40
+ className: "h-full overflow-auto",
41
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
42
+ className: "selectable p-3 font-mono text-muted-foreground text-xs leading-relaxed",
43
+ children: (0, import_react.useMemo)(() => {
44
+ const lines = [];
45
+ for (let offset = 0; offset < bytes.length; offset += BYTES_PER_ROW) {
46
+ const slice = bytes.subarray(offset, offset + BYTES_PER_ROW);
47
+ const hex = Array.from(slice, (b) => b.toString(16).padStart(2, "0")).join(" ").padEnd(BYTES_PER_ROW * 3 - 1, " ");
48
+ const ascii = Array.from(slice, (b) => b >= 32 && b < 127 ? String.fromCharCode(b) : ".").join("");
49
+ lines.push(`${offset.toString(16).padStart(8, "0")} ${hex.slice(0, 23)} ${hex.slice(24)} │${ascii}│`);
50
+ }
51
+ return lines.join("\n");
52
+ }, [bytes])
53
+ }), bytes.length < file.size && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
54
+ className: "px-3 pb-3",
55
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
56
+ variant: "outline",
57
+ size: "sm",
58
+ isLoading: loading,
59
+ onClick: () => void loadMore(bytes.length),
60
+ children: [
61
+ "Load more (",
62
+ formatBytes(bytes.length),
63
+ " of ",
64
+ formatBytes(file.size),
65
+ ")"
66
+ ]
67
+ })
68
+ })]
69
+ });
70
+ };
71
+ /** What the OS renders for formats Chromium can't (HEIC, RAW, PSD, Keynote, PowerPoint…). */
72
+ var SystemPreview = ({ file, ctx }) => {
73
+ const { value, done } = useAsync(file.url, async () => ({ src: await ctx.fs.thumbnail(file.path, 2048) }));
74
+ if (!done) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Centered, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ActivityIndicator, {}) });
75
+ if (!value?.src) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PreviewMessage, {
76
+ ctx,
77
+ path: file.path,
78
+ children: "The system has no preview for this file."
79
+ });
80
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ImageView, {
81
+ src: value.src,
82
+ alt: file.name,
83
+ caption: "system preview"
84
+ }, value.src);
85
+ };
86
+ /** Details, OS thumbnail and ways out, for files nothing else can show. */
87
+ var InfoPreview = ({ file, ctx }) => {
88
+ const { value: thumbnail } = useAsync(file.url, () => ctx.fs.thumbnail(file.path, 512));
89
+ const Icon = iconFor(file.name);
90
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
91
+ className: "flex h-full flex-col items-center justify-center gap-4 overflow-auto p-6 text-center",
92
+ children: [
93
+ thumbnail ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
94
+ src: thumbnail,
95
+ alt: "",
96
+ className: "max-h-64 max-w-full rounded-md object-contain shadow-sm"
97
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
98
+ className: "flex size-24 items-center justify-center rounded-2xl bg-muted",
99
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {
100
+ size: 40,
101
+ className: "text-muted-foreground"
102
+ })
103
+ }),
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
105
+ className: "max-w-full",
106
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
107
+ className: "selectable truncate font-medium text-sm",
108
+ children: file.name
109
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
110
+ className: "mt-1 text-muted-foreground text-xs",
111
+ children: [
112
+ formatBytes(file.size),
113
+ " ·",
114
+ " ",
115
+ file.extension ? `.${file.extension} file` : "file",
116
+ " · modified",
117
+ " ",
118
+ new Date(file.mtimeMs).toLocaleString()
119
+ ]
120
+ })]
121
+ }),
122
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
123
+ className: "flex flex-wrap justify-center gap-2",
124
+ children: [
125
+ isMac() && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
126
+ variant: "outline",
127
+ size: "sm",
128
+ onClick: () => void ctx.shell.quickLook(file.path),
129
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Eye, { size: 14 }), "Quick Look"]
130
+ }),
131
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
132
+ size: "sm",
133
+ onClick: () => ctx.shell.openPath(file.path).catch((e) => ctx.notify(String(e), "error")),
134
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExternalLink, { size: 14 }), "Open in default app"]
135
+ }),
136
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
137
+ variant: "outline",
138
+ size: "sm",
139
+ onClick: () => void ctx.shell.showItemInFolder(file.path),
140
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FolderOpen, { size: 14 }), "Reveal"]
141
+ })
142
+ ]
143
+ })
144
+ ]
145
+ });
146
+ };
147
+ /** The entries of a zip, read from its central directory by the host. */
148
+ var ArchivePreview = ({ file, ctx }) => {
149
+ const [filter, setFilter] = (0, import_react.useState)("");
150
+ const { value, error } = useAsync(file.url, () => ctx.host.call("listZip", file.path));
151
+ const entries = (0, import_react.useMemo)(() => {
152
+ const needle = filter.toLowerCase();
153
+ return (value?.entries ?? []).filter((e) => !needle || e.name.toLowerCase().includes(needle)).sort((a, b) => a.name.localeCompare(b.name));
154
+ }, [value, filter]);
155
+ if (error) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(PreviewMessage, {
156
+ ctx,
157
+ path: file.path,
158
+ children: ["Could not read this archive: ", error]
159
+ });
160
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Centered, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ActivityIndicator, {}) });
161
+ const files = value.entries.filter((e) => !e.isDirectory);
162
+ const total = files.reduce((sum, e) => sum + e.size, 0);
163
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
164
+ className: "flex h-full flex-col",
165
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
166
+ className: "flex shrink-0 items-center gap-3 border-b px-3 py-1.5 text-muted-foreground text-xs",
167
+ children: [
168
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
169
+ className: "whitespace-nowrap",
170
+ children: [
171
+ files.length.toLocaleString(),
172
+ " files · ",
173
+ formatBytes(total),
174
+ " ",
175
+ "uncompressed",
176
+ value.truncated ? " · list truncated" : ""
177
+ ]
178
+ }),
179
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1" }),
180
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SearchTextInput, {
181
+ className: "h-7 max-w-56 text-xs",
182
+ placeholder: "Filter",
183
+ value: filter,
184
+ onChange: (e) => setFilter(e.target.value)
185
+ })
186
+ ]
187
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
188
+ className: "selectable min-h-0 flex-1 overflow-auto py-1 font-mono text-xs",
189
+ children: entries.map((entry) => {
190
+ const depth = entry.name.replace(/\/$/, "").split("/").length - 1;
191
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
192
+ className: "flex items-center gap-2 px-3 py-0.5 hover:bg-muted",
193
+ children: [
194
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(entry.isDirectory ? Folder : iconFor(entry.name), {
195
+ size: 12,
196
+ className: cn("shrink-0", entry.isDirectory ? "text-chart-1" : "text-muted-foreground"),
197
+ style: { marginLeft: filter ? 0 : depth * 12 }
198
+ }),
199
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
200
+ className: "min-w-0 flex-1 truncate",
201
+ children: filter ? entry.name : entry.name.replace(/\/$/, "").split("/").pop()
202
+ }),
203
+ !entry.isDirectory && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
204
+ className: "shrink-0 text-muted-foreground tabular-nums",
205
+ children: formatBytes(entry.size)
206
+ })
207
+ ]
208
+ }, entry.name);
209
+ })
210
+ })]
211
+ });
212
+ };
213
+ /** A type specimen: the alphabet at several sizes. */
214
+ var FontPreview = ({ file }) => {
215
+ const family = (0, import_react.useMemo)(() => `nubase-preview-${Math.round(file.mtimeMs)}-${file.name.replace(/\W/g, "")}`, [file.name, file.mtimeMs]);
216
+ const { value: face, error } = useAsync(file.url, async (url) => {
217
+ const loaded = await new FontFace(family, `url("${url}")`).load();
218
+ document.fonts.add(loaded);
219
+ return loaded;
220
+ });
221
+ (0, import_react.useEffect)(() => () => {
222
+ if (face) document.fonts.delete(face);
223
+ }, [face]);
224
+ if (error) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
225
+ className: "p-4 text-destructive text-sm",
226
+ children: ["Could not load font: ", error]
227
+ });
228
+ if (!face) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Centered, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ActivityIndicator, {}) });
229
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
230
+ className: "selectable h-full space-y-5 overflow-auto p-6",
231
+ style: { fontFamily: family },
232
+ children: [
233
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
234
+ className: "text-5xl",
235
+ children: "Aa Bb Cc"
236
+ }),
237
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
238
+ className: "text-xl",
239
+ children: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
240
+ }),
241
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
242
+ className: "text-xl",
243
+ children: "abcdefghijklmnopqrstuvwxyz"
244
+ }),
245
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
246
+ className: "text-xl",
247
+ children: ["0123456789 !@#$%^&*()[]", "?"]
248
+ }),
249
+ [
250
+ 12,
251
+ 16,
252
+ 24,
253
+ 36
254
+ ].map((size) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
255
+ style: { fontSize: size },
256
+ children: "The quick brown fox jumps over the lazy dog."
257
+ }, size))
258
+ ]
259
+ });
260
+ };
261
+ //#endregion
262
+ export { ArchivePreview, FontPreview, HexPreview, InfoPreview, SystemPreview };