mogh_ui 1.0.0 → 1.0.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.
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var common_exports = {};
20
+ __export(common_exports, {
21
+ languageFromPath: () => languageFromPath
22
+ });
23
+ module.exports = __toCommonJS(common_exports);
24
+ const LANGUAGE_EXTENSIONS = {
25
+ yaml: [".yaml", ".yml"],
26
+ toml: [".toml"],
27
+ fancy_toml: [],
28
+ json: [".json"],
29
+ key_value: [".env", ".conf"],
30
+ ini: [".ini"],
31
+ string_list: [],
32
+ shell: [".sh", ".bash", ".zsh"],
33
+ dockerfile: ["Dockerfile"],
34
+ rust: [".rs"],
35
+ javascript: [".js", ".jsx", ".mjs", ".cjs"],
36
+ typescript: [".ts", ".tsx"]
37
+ };
38
+ function languageFromPath(path) {
39
+ for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {
40
+ for (const extension of extensions) {
41
+ if (path.endsWith(extension)) {
42
+ return lang;
43
+ }
44
+ }
45
+ }
46
+ return void 0;
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ languageFromPath
51
+ });
52
+ //# sourceMappingURL=common.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/monaco/common.ts"],"sourcesContent":["import { BoxProps } from \"@mantine/core\";\n\nexport type MonacoLanguage =\n | \"yaml\"\n | \"toml\"\n | \"fancy_toml\"\n | \"json\"\n | \"key_value\"\n | \"ini\"\n | \"string_list\"\n | \"shell\"\n | \"dockerfile\"\n | \"rust\"\n | \"javascript\"\n | \"typescript\";\n\nconst LANGUAGE_EXTENSIONS: Record<MonacoLanguage, string[]> = {\n yaml: [\".yaml\", \".yml\"],\n toml: [\".toml\"],\n fancy_toml: [],\n json: [\".json\"],\n key_value: [\".env\", \".conf\"],\n ini: [\".ini\"],\n string_list: [],\n shell: [\".sh\", \".bash\", \".zsh\"],\n dockerfile: [\"Dockerfile\"],\n rust: [\".rs\"],\n javascript: [\".js\", \".jsx\", \".mjs\", \".cjs\"],\n typescript: [\".ts\", \".tsx\"],\n};\n\nexport function languageFromPath(path: string) {\n for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {\n for (const extension of extensions) {\n if (path.endsWith(extension)) {\n return lang as MonacoLanguage;\n }\n }\n }\n return undefined;\n}\n\nexport interface MonacoEditorProps extends BoxProps {\n value: string | undefined;\n onValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n filename?: string;\n readOnly?: boolean;\n minHeight?: number;\n /** Define max height as proportion of dimension height. Should be between 0 and 1. */\n maxHeightProportion?: number;\n maxHeight?: number;\n id?: string;\n}\n\nexport interface MonacoDiffEditorProps extends BoxProps {\n original: string | undefined;\n modified: string | undefined;\n onModifiedValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n readOnly?: boolean;\n id?: string;\n hideUnchangedRegions?: boolean;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,MAAM,sBAAwD;AAAA,EAC5D,MAAM,CAAC,SAAS,MAAM;AAAA,EACtB,MAAM,CAAC,OAAO;AAAA,EACd,YAAY,CAAC;AAAA,EACb,MAAM,CAAC,OAAO;AAAA,EACd,WAAW,CAAC,QAAQ,OAAO;AAAA,EAC3B,KAAK,CAAC,MAAM;AAAA,EACZ,aAAa,CAAC;AAAA,EACd,OAAO,CAAC,OAAO,SAAS,MAAM;AAAA,EAC9B,YAAY,CAAC,YAAY;AAAA,EACzB,MAAM,CAAC,KAAK;AAAA,EACZ,YAAY,CAAC,OAAO,QAAQ,QAAQ,MAAM;AAAA,EAC1C,YAAY,CAAC,OAAO,MAAM;AAC5B;AAEO,SAAS,iBAAiB,MAAc;AAC7C,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AACpE,eAAW,aAAa,YAAY;AAClC,UAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,27 @@
1
+ import { BoxProps } from "@mantine/core";
2
+ export type MonacoLanguage = "yaml" | "toml" | "fancy_toml" | "json" | "key_value" | "ini" | "string_list" | "shell" | "dockerfile" | "rust" | "javascript" | "typescript";
3
+ export declare function languageFromPath(path: string): MonacoLanguage | undefined;
4
+ export interface MonacoEditorProps extends BoxProps {
5
+ value: string | undefined;
6
+ onValueChange?: (value: string) => void;
7
+ language: MonacoLanguage | undefined;
8
+ enableFancyToml?: boolean;
9
+ filename?: string;
10
+ readOnly?: boolean;
11
+ minHeight?: number;
12
+ /** Define max height as proportion of dimension height. Should be between 0 and 1. */
13
+ maxHeightProportion?: number;
14
+ maxHeight?: number;
15
+ id?: string;
16
+ }
17
+ export interface MonacoDiffEditorProps extends BoxProps {
18
+ original: string | undefined;
19
+ modified: string | undefined;
20
+ onModifiedValueChange?: (value: string) => void;
21
+ language: MonacoLanguage | undefined;
22
+ enableFancyToml?: boolean;
23
+ readOnly?: boolean;
24
+ id?: string;
25
+ hideUnchangedRegions?: boolean;
26
+ }
27
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/components/monaco/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,YAAY,GACZ,MAAM,GACN,WAAW,GACX,KAAK,GACL,aAAa,GACb,OAAO,GACP,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,YAAY,CAAC;AAiBjB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,8BAS5C;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAsB,SAAQ,QAAQ;IACrD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC"}
@@ -0,0 +1,28 @@
1
+ const LANGUAGE_EXTENSIONS = {
2
+ yaml: [".yaml", ".yml"],
3
+ toml: [".toml"],
4
+ fancy_toml: [],
5
+ json: [".json"],
6
+ key_value: [".env", ".conf"],
7
+ ini: [".ini"],
8
+ string_list: [],
9
+ shell: [".sh", ".bash", ".zsh"],
10
+ dockerfile: ["Dockerfile"],
11
+ rust: [".rs"],
12
+ javascript: [".js", ".jsx", ".mjs", ".cjs"],
13
+ typescript: [".ts", ".tsx"]
14
+ };
15
+ function languageFromPath(path) {
16
+ for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {
17
+ for (const extension of extensions) {
18
+ if (path.endsWith(extension)) {
19
+ return lang;
20
+ }
21
+ }
22
+ }
23
+ return void 0;
24
+ }
25
+ export {
26
+ languageFromPath
27
+ };
28
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/monaco/common.ts"],"sourcesContent":["import { BoxProps } from \"@mantine/core\";\n\nexport type MonacoLanguage =\n | \"yaml\"\n | \"toml\"\n | \"fancy_toml\"\n | \"json\"\n | \"key_value\"\n | \"ini\"\n | \"string_list\"\n | \"shell\"\n | \"dockerfile\"\n | \"rust\"\n | \"javascript\"\n | \"typescript\";\n\nconst LANGUAGE_EXTENSIONS: Record<MonacoLanguage, string[]> = {\n yaml: [\".yaml\", \".yml\"],\n toml: [\".toml\"],\n fancy_toml: [],\n json: [\".json\"],\n key_value: [\".env\", \".conf\"],\n ini: [\".ini\"],\n string_list: [],\n shell: [\".sh\", \".bash\", \".zsh\"],\n dockerfile: [\"Dockerfile\"],\n rust: [\".rs\"],\n javascript: [\".js\", \".jsx\", \".mjs\", \".cjs\"],\n typescript: [\".ts\", \".tsx\"],\n};\n\nexport function languageFromPath(path: string) {\n for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {\n for (const extension of extensions) {\n if (path.endsWith(extension)) {\n return lang as MonacoLanguage;\n }\n }\n }\n return undefined;\n}\n\nexport interface MonacoEditorProps extends BoxProps {\n value: string | undefined;\n onValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n filename?: string;\n readOnly?: boolean;\n minHeight?: number;\n /** Define max height as proportion of dimension height. Should be between 0 and 1. */\n maxHeightProportion?: number;\n maxHeight?: number;\n id?: string;\n}\n\nexport interface MonacoDiffEditorProps extends BoxProps {\n original: string | undefined;\n modified: string | undefined;\n onModifiedValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n readOnly?: boolean;\n id?: string;\n hideUnchangedRegions?: boolean;\n}\n"],"mappings":"AAgBA,MAAM,sBAAwD;AAAA,EAC5D,MAAM,CAAC,SAAS,MAAM;AAAA,EACtB,MAAM,CAAC,OAAO;AAAA,EACd,YAAY,CAAC;AAAA,EACb,MAAM,CAAC,OAAO;AAAA,EACd,WAAW,CAAC,QAAQ,OAAO;AAAA,EAC3B,KAAK,CAAC,MAAM;AAAA,EACZ,aAAa,CAAC;AAAA,EACd,OAAO,CAAC,OAAO,SAAS,MAAM;AAAA,EAC9B,YAAY,CAAC,YAAY;AAAA,EACzB,MAAM,CAAC,KAAK;AAAA,EACZ,YAAY,CAAC,OAAO,QAAQ,QAAQ,MAAM;AAAA,EAC1C,YAAY,CAAC,OAAO,MAAM;AAC5B;AAEO,SAAS,iBAAiB,MAAc;AAC7C,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AACpE,eAAW,aAAa,YAAY;AAClC,UAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var editor_exports = {};
30
+ __export(editor_exports, {
31
+ MonacoDiffEditorImpl: () => MonacoDiffEditorImpl,
32
+ MonacoEditorImpl: () => MonacoEditorImpl
33
+ });
34
+ module.exports = __toCommonJS(editor_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_init = require("./init");
37
+ var import_react = require("react");
38
+ var import_react2 = require("@monaco-editor/react");
39
+ var monaco = __toESM(require("monaco-editor"), 1);
40
+ var import_hooks = require("@mantine/hooks");
41
+ var import_core = require("@mantine/core");
42
+ const MIN_EDITOR_HEIGHT = 56;
43
+ async function formatWithCursor(language, source, cursorOffset) {
44
+ if (language === "yaml") {
45
+ const [prettier2, pluginYaml] = await Promise.all([
46
+ import("prettier/standalone"),
47
+ import("prettier/plugins/yaml")
48
+ ]);
49
+ return await prettier2.formatWithCursor(source, {
50
+ cursorOffset,
51
+ parser: "yaml",
52
+ plugins: [pluginYaml],
53
+ printWidth: 80
54
+ // Set the desired max line length
55
+ });
56
+ }
57
+ const [prettier, pluginTypescript, pluginEsTree] = await Promise.all([
58
+ import("prettier/standalone"),
59
+ import("prettier/plugins/typescript"),
60
+ import("prettier/plugins/estree")
61
+ ]);
62
+ return await prettier.formatWithCursor(source, {
63
+ cursorOffset,
64
+ parser: "typescript",
65
+ plugins: [pluginTypescript, pluginEsTree],
66
+ printWidth: 80
67
+ // Set the desired max line length
68
+ });
69
+ }
70
+ function MonacoEditorImpl({
71
+ value,
72
+ onValueChange,
73
+ language: _language,
74
+ enableFancyToml,
75
+ readOnly,
76
+ filename,
77
+ minHeight,
78
+ maxHeightProportion,
79
+ maxHeight,
80
+ id,
81
+ ...boxProps
82
+ }) {
83
+ const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
84
+ const dimensions = (0, import_hooks.useViewportSize)();
85
+ const [editor, setEditor] = (0, import_react.useState)(null);
86
+ (0, import_react.useEffect)(() => {
87
+ if (!editor) return;
88
+ let node = editor.getDomNode();
89
+ if (!node) return;
90
+ const callback = (e) => {
91
+ if (e.key === "Escape") {
92
+ document.activeElement?.blur?.();
93
+ }
94
+ };
95
+ node.addEventListener("keydown", callback);
96
+ return () => node.removeEventListener("keydown", callback);
97
+ }, [editor]);
98
+ (0, import_react.useEffect)(() => {
99
+ if (language !== "typescript" && language !== "javascript" && language !== "yaml")
100
+ return;
101
+ if (!editor) return;
102
+ editor.addCommand(
103
+ monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,
104
+ async () => {
105
+ if (!editor) return;
106
+ const model = editor.getModel();
107
+ if (!model) return;
108
+ const position = editor.getPosition();
109
+ let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;
110
+ const curr = editor.getValue();
111
+ const { formatted, cursorOffset } = await formatWithCursor(
112
+ language,
113
+ curr,
114
+ beforeOffset
115
+ );
116
+ editor.setValue(formatted);
117
+ editor.setPosition(model.getPositionAt(cursorOffset));
118
+ }
119
+ );
120
+ }, [editor]);
121
+ const line_count = value?.split(/\r\n|\r|\n/).length ?? 0;
122
+ (0, import_react.useEffect)(() => {
123
+ if (!editor) return;
124
+ const contentHeight = line_count * 18 + 30;
125
+ const containerNode = editor.getContainerDomNode();
126
+ containerNode.style.height = `${Math.max(
127
+ Math.min(
128
+ contentHeight,
129
+ Math.floor(dimensions.height * 0.75),
130
+ maxHeightProportion ? Math.floor(maxHeightProportion * dimensions.height) : 1e4,
131
+ maxHeight ?? 1e4
132
+ ),
133
+ minHeight ?? MIN_EDITOR_HEIGHT
134
+ )}px`;
135
+ }, [dimensions.height, editor, line_count]);
136
+ const currentTheme = (0, import_core.useComputedColorScheme)();
137
+ const options = {
138
+ minimap: { enabled: false },
139
+ // scrollbar: { alwaysConsumeMouseWheel: false },
140
+ scrollBeyondLastLine: false,
141
+ folding: false,
142
+ automaticLayout: true,
143
+ renderValidationDecorations: "on",
144
+ renderLineHighlightOnlyWhenFocus: true,
145
+ readOnly,
146
+ tabSize: 2,
147
+ detectIndentation: true,
148
+ quickSuggestions: true,
149
+ padding: {
150
+ top: 15
151
+ }
152
+ };
153
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
154
+ import_react2.Editor,
155
+ {
156
+ language,
157
+ value,
158
+ theme: currentTheme,
159
+ defaultPath: defaultPath(filename),
160
+ options,
161
+ onChange: (v) => onValueChange?.(v ?? ""),
162
+ onMount: (editor2) => setEditor(editor2)
163
+ }
164
+ ) });
165
+ }
166
+ function defaultPath(filename) {
167
+ if (!filename) return void 0;
168
+ const split = filename.split("/");
169
+ return split[split.length - 1];
170
+ }
171
+ const MIN_DIFF_HEIGHT = 100;
172
+ const MAX_DIFF_HEIGHT = 600;
173
+ function MonacoDiffEditorImpl({
174
+ original,
175
+ modified,
176
+ onModifiedValueChange,
177
+ language: _language,
178
+ enableFancyToml,
179
+ readOnly,
180
+ id,
181
+ hideUnchangedRegions = true,
182
+ ...boxProps
183
+ }) {
184
+ const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
185
+ const [editor, setEditor] = (0, import_react.useState)(null);
186
+ const original_line_count = original?.split(/\r\n|\r|\n/).length ?? 0;
187
+ const modified_line_count = modified?.split(/\r\n|\r|\n/).length ?? 0;
188
+ const line_count = Math.max(original_line_count, modified_line_count);
189
+ (0, import_react.useEffect)(() => {
190
+ if (!editor) return;
191
+ const contentHeight = line_count * 18 + 30;
192
+ const node = editor.getContainerDomNode();
193
+ node.style.height = `${Math.max(
194
+ Math.min(contentHeight, MAX_DIFF_HEIGHT),
195
+ MIN_DIFF_HEIGHT
196
+ )}px`;
197
+ }, [editor, line_count]);
198
+ const currentTheme = (0, import_core.useComputedColorScheme)();
199
+ const options = {
200
+ minimap: { enabled: true },
201
+ scrollbar: { alwaysConsumeMouseWheel: false },
202
+ scrollBeyondLastLine: false,
203
+ hideUnchangedRegions: { enabled: hideUnchangedRegions },
204
+ folding: false,
205
+ automaticLayout: true,
206
+ renderValidationDecorations: "on",
207
+ renderLineHighlightOnlyWhenFocus: true,
208
+ readOnly,
209
+ padding: {
210
+ top: 15
211
+ }
212
+ };
213
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
214
+ import_react2.DiffEditor,
215
+ {
216
+ language,
217
+ original,
218
+ modified,
219
+ theme: currentTheme,
220
+ options,
221
+ onMount: (editor2) => {
222
+ const modifiedEditor = editor2.getModifiedEditor();
223
+ modifiedEditor.onDidChangeModelContent((_) => {
224
+ onModifiedValueChange?.(modifiedEditor.getValue());
225
+ });
226
+ setEditor(editor2);
227
+ }
228
+ }
229
+ ) });
230
+ }
231
+ // Annotate the CommonJS export names for ESM import in node:
232
+ 0 && (module.exports = {
233
+ MonacoDiffEditorImpl,
234
+ MonacoEditorImpl
235
+ });
236
+ //# sourceMappingURL=editor.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/monaco/editor.tsx"],"sourcesContent":["import \"./init\";\n\nimport { useEffect, useState } from \"react\";\nimport { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport * as monaco from \"monaco-editor\";\nimport { useViewportSize } from \"@mantine/hooks\";\nimport { Box, useComputedColorScheme } from \"@mantine/core\";\nimport {\n MonacoDiffEditorProps,\n MonacoEditorProps,\n MonacoLanguage,\n} from \"./common\";\n\nconst MIN_EDITOR_HEIGHT = 56;\n\n/** Prettier embeds the full typescript parser - only load it on demand. */\nasync function formatWithCursor(\n language: \"yaml\" | \"typescript\" | \"javascript\",\n source: string,\n cursorOffset: number,\n) {\n if (language === \"yaml\") {\n const [prettier, pluginYaml] = await Promise.all([\n import(\"prettier/standalone\"),\n import(\"prettier/plugins/yaml\"),\n ]);\n return await prettier.formatWithCursor(source, {\n cursorOffset,\n parser: \"yaml\",\n plugins: [pluginYaml],\n printWidth: 80, // Set the desired max line length\n });\n }\n const [prettier, pluginTypescript, pluginEsTree] = await Promise.all([\n import(\"prettier/standalone\"),\n import(\"prettier/plugins/typescript\"),\n import(\"prettier/plugins/estree\"),\n ]);\n return await prettier.formatWithCursor(source, {\n cursorOffset,\n parser: \"typescript\",\n plugins: [pluginTypescript, pluginEsTree as any],\n printWidth: 80, // Set the desired max line length\n });\n}\n\nexport function MonacoEditorImpl({\n value,\n onValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n filename,\n minHeight,\n maxHeightProportion,\n maxHeight,\n id,\n ...boxProps\n}: MonacoEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const dimensions = useViewportSize();\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!editor) return;\n\n let node = editor.getDomNode();\n if (!node) return;\n\n const callback = (e: any) => {\n if (e.key === \"Escape\") {\n (document.activeElement as any)?.blur?.();\n }\n };\n\n node.addEventListener(\"keydown\", callback);\n return () => node.removeEventListener(\"keydown\", callback);\n }, [editor]);\n\n useEffect(() => {\n if (\n language !== \"typescript\" &&\n language !== \"javascript\" &&\n language !== \"yaml\"\n )\n return;\n if (!editor) return;\n editor.addCommand(\n monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,\n async () => {\n if (!editor) return;\n const model = editor.getModel();\n if (!model) return;\n const position = editor.getPosition();\n let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;\n const curr = editor.getValue();\n const { formatted, cursorOffset } = await formatWithCursor(\n language,\n curr,\n beforeOffset,\n );\n editor.setValue(formatted);\n editor.setPosition(model.getPositionAt(cursorOffset));\n },\n );\n }, [editor]);\n\n const line_count = value?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const containerNode = editor.getContainerDomNode();\n\n containerNode.style.height = `${Math.max(\n Math.min(\n contentHeight,\n Math.floor(dimensions.height * 0.75),\n maxHeightProportion\n ? Math.floor(maxHeightProportion * dimensions.height)\n : 10_000,\n maxHeight ?? 10_000,\n ),\n minHeight ?? MIN_EDITOR_HEIGHT,\n )}px`;\n }, [dimensions.height, editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneEditorConstructionOptions = {\n minimap: { enabled: false },\n // scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n tabSize: 2,\n detectIndentation: true,\n quickSuggestions: true,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <Editor\n language={language}\n value={value}\n theme={currentTheme}\n defaultPath={defaultPath(filename)}\n options={options}\n onChange={(v) => onValueChange?.(v ?? \"\")}\n onMount={(editor) => setEditor(editor)}\n />\n </Box>\n );\n}\n\nfunction defaultPath(filename?: string) {\n if (!filename) return undefined;\n // Extract only the filename part of path,\n // avoiding critical issue when path starts with '/'\n const split = filename.split(\"/\");\n return split[split.length - 1];\n}\n\nconst MIN_DIFF_HEIGHT = 100;\nconst MAX_DIFF_HEIGHT = 600;\n\nexport function MonacoDiffEditorImpl({\n original,\n modified,\n onModifiedValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n id,\n hideUnchangedRegions = true,\n ...boxProps\n}: MonacoDiffEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneDiffEditor | null>(null);\n\n const original_line_count = original?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const modified_line_count = modified?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const line_count = Math.max(original_line_count, modified_line_count);\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const node = editor.getContainerDomNode();\n\n node.style.height = `${Math.max(\n Math.min(contentHeight, MAX_DIFF_HEIGHT),\n MIN_DIFF_HEIGHT,\n )}px`;\n }, [editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneDiffEditorConstructionOptions = {\n minimap: { enabled: true },\n scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n hideUnchangedRegions: { enabled: hideUnchangedRegions },\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <DiffEditor\n language={language}\n original={original}\n modified={modified}\n theme={currentTheme}\n options={options}\n onMount={(editor) => {\n const modifiedEditor = editor.getModifiedEditor();\n modifiedEditor.onDidChangeModelContent((_) => {\n onModifiedValueChange?.(modifiedEditor.getValue());\n });\n setEditor(editor);\n }}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["import_react","prettier","editor"]}
@@ -0,0 +1,5 @@
1
+ import "./init";
2
+ import { MonacoDiffEditorProps, MonacoEditorProps } from "./common";
3
+ export declare function MonacoEditorImpl({ value, onValueChange, language: _language, enableFancyToml, readOnly, filename, minHeight, maxHeightProportion, maxHeight, id, ...boxProps }: MonacoEditorProps): import("react").JSX.Element;
4
+ export declare function MonacoDiffEditorImpl({ original, modified, onModifiedValueChange, language: _language, enableFancyToml, readOnly, id, hideUnchangedRegions, ...boxProps }: MonacoDiffEditorProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/components/monaco/editor.tsx"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAOhB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAmClB,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,aAAa,EACb,QAAQ,EAAE,SAAS,EACnB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,EAAE,EACF,GAAG,QAAQ,EACZ,EAAE,iBAAiB,+BAyGnB;AAaD,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,QAAQ,EACR,qBAAqB,EACrB,QAAQ,EAAE,SAAS,EACnB,eAAe,EACf,QAAQ,EACR,EAAE,EACF,oBAA2B,EAC3B,GAAG,QAAQ,EACZ,EAAE,qBAAqB,+BA0DvB"}
@@ -0,0 +1,201 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "./init";
3
+ import { useEffect, useState } from "react";
4
+ import { DiffEditor, Editor } from "@monaco-editor/react";
5
+ import * as monaco from "monaco-editor";
6
+ import { useViewportSize } from "@mantine/hooks";
7
+ import { Box, useComputedColorScheme } from "@mantine/core";
8
+ const MIN_EDITOR_HEIGHT = 56;
9
+ async function formatWithCursor(language, source, cursorOffset) {
10
+ if (language === "yaml") {
11
+ const [prettier2, pluginYaml] = await Promise.all([
12
+ import("prettier/standalone"),
13
+ import("prettier/plugins/yaml")
14
+ ]);
15
+ return await prettier2.formatWithCursor(source, {
16
+ cursorOffset,
17
+ parser: "yaml",
18
+ plugins: [pluginYaml],
19
+ printWidth: 80
20
+ // Set the desired max line length
21
+ });
22
+ }
23
+ const [prettier, pluginTypescript, pluginEsTree] = await Promise.all([
24
+ import("prettier/standalone"),
25
+ import("prettier/plugins/typescript"),
26
+ import("prettier/plugins/estree")
27
+ ]);
28
+ return await prettier.formatWithCursor(source, {
29
+ cursorOffset,
30
+ parser: "typescript",
31
+ plugins: [pluginTypescript, pluginEsTree],
32
+ printWidth: 80
33
+ // Set the desired max line length
34
+ });
35
+ }
36
+ function MonacoEditorImpl({
37
+ value,
38
+ onValueChange,
39
+ language: _language,
40
+ enableFancyToml,
41
+ readOnly,
42
+ filename,
43
+ minHeight,
44
+ maxHeightProportion,
45
+ maxHeight,
46
+ id,
47
+ ...boxProps
48
+ }) {
49
+ const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
50
+ const dimensions = useViewportSize();
51
+ const [editor, setEditor] = useState(null);
52
+ useEffect(() => {
53
+ if (!editor) return;
54
+ let node = editor.getDomNode();
55
+ if (!node) return;
56
+ const callback = (e) => {
57
+ if (e.key === "Escape") {
58
+ document.activeElement?.blur?.();
59
+ }
60
+ };
61
+ node.addEventListener("keydown", callback);
62
+ return () => node.removeEventListener("keydown", callback);
63
+ }, [editor]);
64
+ useEffect(() => {
65
+ if (language !== "typescript" && language !== "javascript" && language !== "yaml")
66
+ return;
67
+ if (!editor) return;
68
+ editor.addCommand(
69
+ monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,
70
+ async () => {
71
+ if (!editor) return;
72
+ const model = editor.getModel();
73
+ if (!model) return;
74
+ const position = editor.getPosition();
75
+ let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;
76
+ const curr = editor.getValue();
77
+ const { formatted, cursorOffset } = await formatWithCursor(
78
+ language,
79
+ curr,
80
+ beforeOffset
81
+ );
82
+ editor.setValue(formatted);
83
+ editor.setPosition(model.getPositionAt(cursorOffset));
84
+ }
85
+ );
86
+ }, [editor]);
87
+ const line_count = value?.split(/\r\n|\r|\n/).length ?? 0;
88
+ useEffect(() => {
89
+ if (!editor) return;
90
+ const contentHeight = line_count * 18 + 30;
91
+ const containerNode = editor.getContainerDomNode();
92
+ containerNode.style.height = `${Math.max(
93
+ Math.min(
94
+ contentHeight,
95
+ Math.floor(dimensions.height * 0.75),
96
+ maxHeightProportion ? Math.floor(maxHeightProportion * dimensions.height) : 1e4,
97
+ maxHeight ?? 1e4
98
+ ),
99
+ minHeight ?? MIN_EDITOR_HEIGHT
100
+ )}px`;
101
+ }, [dimensions.height, editor, line_count]);
102
+ const currentTheme = useComputedColorScheme();
103
+ const options = {
104
+ minimap: { enabled: false },
105
+ // scrollbar: { alwaysConsumeMouseWheel: false },
106
+ scrollBeyondLastLine: false,
107
+ folding: false,
108
+ automaticLayout: true,
109
+ renderValidationDecorations: "on",
110
+ renderLineHighlightOnlyWhenFocus: true,
111
+ readOnly,
112
+ tabSize: 2,
113
+ detectIndentation: true,
114
+ quickSuggestions: true,
115
+ padding: {
116
+ top: 15
117
+ }
118
+ };
119
+ return /* @__PURE__ */ jsx(Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ jsx(
120
+ Editor,
121
+ {
122
+ language,
123
+ value,
124
+ theme: currentTheme,
125
+ defaultPath: defaultPath(filename),
126
+ options,
127
+ onChange: (v) => onValueChange?.(v ?? ""),
128
+ onMount: (editor2) => setEditor(editor2)
129
+ }
130
+ ) });
131
+ }
132
+ function defaultPath(filename) {
133
+ if (!filename) return void 0;
134
+ const split = filename.split("/");
135
+ return split[split.length - 1];
136
+ }
137
+ const MIN_DIFF_HEIGHT = 100;
138
+ const MAX_DIFF_HEIGHT = 600;
139
+ function MonacoDiffEditorImpl({
140
+ original,
141
+ modified,
142
+ onModifiedValueChange,
143
+ language: _language,
144
+ enableFancyToml,
145
+ readOnly,
146
+ id,
147
+ hideUnchangedRegions = true,
148
+ ...boxProps
149
+ }) {
150
+ const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
151
+ const [editor, setEditor] = useState(null);
152
+ const original_line_count = original?.split(/\r\n|\r|\n/).length ?? 0;
153
+ const modified_line_count = modified?.split(/\r\n|\r|\n/).length ?? 0;
154
+ const line_count = Math.max(original_line_count, modified_line_count);
155
+ useEffect(() => {
156
+ if (!editor) return;
157
+ const contentHeight = line_count * 18 + 30;
158
+ const node = editor.getContainerDomNode();
159
+ node.style.height = `${Math.max(
160
+ Math.min(contentHeight, MAX_DIFF_HEIGHT),
161
+ MIN_DIFF_HEIGHT
162
+ )}px`;
163
+ }, [editor, line_count]);
164
+ const currentTheme = useComputedColorScheme();
165
+ const options = {
166
+ minimap: { enabled: true },
167
+ scrollbar: { alwaysConsumeMouseWheel: false },
168
+ scrollBeyondLastLine: false,
169
+ hideUnchangedRegions: { enabled: hideUnchangedRegions },
170
+ folding: false,
171
+ automaticLayout: true,
172
+ renderValidationDecorations: "on",
173
+ renderLineHighlightOnlyWhenFocus: true,
174
+ readOnly,
175
+ padding: {
176
+ top: 15
177
+ }
178
+ };
179
+ return /* @__PURE__ */ jsx(Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ jsx(
180
+ DiffEditor,
181
+ {
182
+ language,
183
+ original,
184
+ modified,
185
+ theme: currentTheme,
186
+ options,
187
+ onMount: (editor2) => {
188
+ const modifiedEditor = editor2.getModifiedEditor();
189
+ modifiedEditor.onDidChangeModelContent((_) => {
190
+ onModifiedValueChange?.(modifiedEditor.getValue());
191
+ });
192
+ setEditor(editor2);
193
+ }
194
+ }
195
+ ) });
196
+ }
197
+ export {
198
+ MonacoDiffEditorImpl,
199
+ MonacoEditorImpl
200
+ };
201
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/monaco/editor.tsx"],"sourcesContent":["import \"./init\";\n\nimport { useEffect, useState } from \"react\";\nimport { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport * as monaco from \"monaco-editor\";\nimport { useViewportSize } from \"@mantine/hooks\";\nimport { Box, useComputedColorScheme } from \"@mantine/core\";\nimport {\n MonacoDiffEditorProps,\n MonacoEditorProps,\n MonacoLanguage,\n} from \"./common\";\n\nconst MIN_EDITOR_HEIGHT = 56;\n\n/** Prettier embeds the full typescript parser - only load it on demand. */\nasync function formatWithCursor(\n language: \"yaml\" | \"typescript\" | \"javascript\",\n source: string,\n cursorOffset: number,\n) {\n if (language === \"yaml\") {\n const [prettier, pluginYaml] = await Promise.all([\n import(\"prettier/standalone\"),\n import(\"prettier/plugins/yaml\"),\n ]);\n return await prettier.formatWithCursor(source, {\n cursorOffset,\n parser: \"yaml\",\n plugins: [pluginYaml],\n printWidth: 80, // Set the desired max line length\n });\n }\n const [prettier, pluginTypescript, pluginEsTree] = await Promise.all([\n import(\"prettier/standalone\"),\n import(\"prettier/plugins/typescript\"),\n import(\"prettier/plugins/estree\"),\n ]);\n return await prettier.formatWithCursor(source, {\n cursorOffset,\n parser: \"typescript\",\n plugins: [pluginTypescript, pluginEsTree as any],\n printWidth: 80, // Set the desired max line length\n });\n}\n\nexport function MonacoEditorImpl({\n value,\n onValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n filename,\n minHeight,\n maxHeightProportion,\n maxHeight,\n id,\n ...boxProps\n}: MonacoEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const dimensions = useViewportSize();\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!editor) return;\n\n let node = editor.getDomNode();\n if (!node) return;\n\n const callback = (e: any) => {\n if (e.key === \"Escape\") {\n (document.activeElement as any)?.blur?.();\n }\n };\n\n node.addEventListener(\"keydown\", callback);\n return () => node.removeEventListener(\"keydown\", callback);\n }, [editor]);\n\n useEffect(() => {\n if (\n language !== \"typescript\" &&\n language !== \"javascript\" &&\n language !== \"yaml\"\n )\n return;\n if (!editor) return;\n editor.addCommand(\n monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,\n async () => {\n if (!editor) return;\n const model = editor.getModel();\n if (!model) return;\n const position = editor.getPosition();\n let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;\n const curr = editor.getValue();\n const { formatted, cursorOffset } = await formatWithCursor(\n language,\n curr,\n beforeOffset,\n );\n editor.setValue(formatted);\n editor.setPosition(model.getPositionAt(cursorOffset));\n },\n );\n }, [editor]);\n\n const line_count = value?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const containerNode = editor.getContainerDomNode();\n\n containerNode.style.height = `${Math.max(\n Math.min(\n contentHeight,\n Math.floor(dimensions.height * 0.75),\n maxHeightProportion\n ? Math.floor(maxHeightProportion * dimensions.height)\n : 10_000,\n maxHeight ?? 10_000,\n ),\n minHeight ?? MIN_EDITOR_HEIGHT,\n )}px`;\n }, [dimensions.height, editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneEditorConstructionOptions = {\n minimap: { enabled: false },\n // scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n tabSize: 2,\n detectIndentation: true,\n quickSuggestions: true,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <Editor\n language={language}\n value={value}\n theme={currentTheme}\n defaultPath={defaultPath(filename)}\n options={options}\n onChange={(v) => onValueChange?.(v ?? \"\")}\n onMount={(editor) => setEditor(editor)}\n />\n </Box>\n );\n}\n\nfunction defaultPath(filename?: string) {\n if (!filename) return undefined;\n // Extract only the filename part of path,\n // avoiding critical issue when path starts with '/'\n const split = filename.split(\"/\");\n return split[split.length - 1];\n}\n\nconst MIN_DIFF_HEIGHT = 100;\nconst MAX_DIFF_HEIGHT = 600;\n\nexport function MonacoDiffEditorImpl({\n original,\n modified,\n onModifiedValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n id,\n hideUnchangedRegions = true,\n ...boxProps\n}: MonacoDiffEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneDiffEditor | null>(null);\n\n const original_line_count = original?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const modified_line_count = modified?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const line_count = Math.max(original_line_count, modified_line_count);\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const node = editor.getContainerDomNode();\n\n node.style.height = `${Math.max(\n Math.min(contentHeight, MAX_DIFF_HEIGHT),\n MIN_DIFF_HEIGHT,\n )}px`;\n }, [editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneDiffEditorConstructionOptions = {\n minimap: { enabled: true },\n scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n hideUnchangedRegions: { enabled: hideUnchangedRegions },\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <DiffEditor\n language={language}\n original={original}\n modified={modified}\n theme={currentTheme}\n options={options}\n onMount={(editor) => {\n const modifiedEditor = editor.getModifiedEditor();\n modifiedEditor.onDidChangeModelContent((_) => {\n onModifiedValueChange?.(modifiedEditor.getValue());\n });\n setEditor(editor);\n }}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["prettier","editor"]}
@@ -17,6 +17,7 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
21
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
22
  // If the importer is in node compatibility mode or this is not an ESM
22
23
  // file that has been converted to a CommonJS file using a Babel-
@@ -29,216 +30,28 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
30
  var monaco_exports = {};
30
31
  __export(monaco_exports, {
31
32
  MonacoDiffEditor: () => MonacoDiffEditor,
32
- MonacoEditor: () => MonacoEditor,
33
- languageFromPath: () => languageFromPath
33
+ MonacoEditor: () => MonacoEditor
34
34
  });
35
35
  module.exports = __toCommonJS(monaco_exports);
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
- var import_init = require("./init");
38
37
  var import_react = require("react");
39
- var import_react2 = require("@monaco-editor/react");
40
- var monaco = __toESM(require("monaco-editor"), 1);
41
- var prettier = __toESM(require("prettier/standalone"), 1);
42
- var pluginTypescript = __toESM(require("prettier/plugins/typescript"), 1);
43
- var pluginEsTree = __toESM(require("prettier/plugins/estree"), 1);
44
- var pluginYaml = __toESM(require("prettier/plugins/yaml"), 1);
45
- var import_hooks = require("@mantine/hooks");
46
- var import_core = require("@mantine/core");
47
- const MIN_EDITOR_HEIGHT = 56;
48
- const LANGUAGE_EXTENSIONS = {
49
- yaml: [".yaml", ".yml"],
50
- toml: [".toml"],
51
- fancy_toml: [],
52
- json: [".json"],
53
- key_value: [".env", ".conf"],
54
- ini: [".ini"],
55
- string_list: [],
56
- shell: [".sh", ".bash", ".zsh"],
57
- dockerfile: ["Dockerfile"],
58
- rust: [".rs"],
59
- javascript: [".js", ".jsx", ".mjs", ".cjs"],
60
- typescript: [".ts", ".tsx"]
61
- };
62
- function languageFromPath(path) {
63
- for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {
64
- for (const extension of extensions) {
65
- if (path.endsWith(extension)) {
66
- return lang;
67
- }
68
- }
69
- }
70
- return void 0;
71
- }
72
- function MonacoEditor({
73
- value,
74
- onValueChange,
75
- language: _language,
76
- enableFancyToml,
77
- readOnly,
78
- filename,
79
- minHeight,
80
- maxHeightProportion,
81
- maxHeight,
82
- id,
83
- ...boxProps
84
- }) {
85
- const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
86
- const dimensions = (0, import_hooks.useViewportSize)();
87
- const [editor, setEditor] = (0, import_react.useState)(null);
88
- (0, import_react.useEffect)(() => {
89
- if (!editor) return;
90
- let node = editor.getDomNode();
91
- if (!node) return;
92
- const callback = (e) => {
93
- if (e.key === "Escape") {
94
- document.activeElement?.blur?.();
95
- }
96
- };
97
- node.addEventListener("keydown", callback);
98
- return () => node.removeEventListener("keydown", callback);
99
- }, [editor]);
100
- (0, import_react.useEffect)(() => {
101
- if (language !== "typescript" && language !== "javascript" && language !== "yaml")
102
- return;
103
- if (!editor) return;
104
- editor.addCommand(
105
- monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,
106
- async () => {
107
- if (!editor) return;
108
- const model = editor.getModel();
109
- if (!model) return;
110
- const position = editor.getPosition();
111
- let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;
112
- const curr = editor.getValue();
113
- const { formatted, cursorOffset } = await prettier.formatWithCursor(
114
- curr,
115
- {
116
- cursorOffset: beforeOffset,
117
- parser: language === "yaml" ? "yaml" : "typescript",
118
- plugins: language === "yaml" ? [pluginYaml] : [pluginTypescript, pluginEsTree],
119
- printWidth: 80
120
- // Set the desired max line length
121
- }
122
- );
123
- editor.setValue(formatted);
124
- editor.setPosition(model.getPositionAt(cursorOffset));
125
- }
126
- );
127
- }, [editor]);
128
- const line_count = value?.split(/\r\n|\r|\n/).length ?? 0;
129
- (0, import_react.useEffect)(() => {
130
- if (!editor) return;
131
- const contentHeight = line_count * 18 + 30;
132
- const containerNode = editor.getContainerDomNode();
133
- containerNode.style.height = `${Math.max(
134
- Math.min(
135
- contentHeight,
136
- Math.floor(dimensions.height * 0.75),
137
- maxHeightProportion ? Math.floor(maxHeightProportion * dimensions.height) : 1e4,
138
- maxHeight ?? 1e4
139
- ),
140
- minHeight ?? MIN_EDITOR_HEIGHT
141
- )}px`;
142
- }, [dimensions.height, editor, line_count]);
143
- const currentTheme = (0, import_core.useComputedColorScheme)();
144
- const options = {
145
- minimap: { enabled: false },
146
- // scrollbar: { alwaysConsumeMouseWheel: false },
147
- scrollBeyondLastLine: false,
148
- folding: false,
149
- automaticLayout: true,
150
- renderValidationDecorations: "on",
151
- renderLineHighlightOnlyWhenFocus: true,
152
- readOnly,
153
- tabSize: 2,
154
- detectIndentation: true,
155
- quickSuggestions: true,
156
- padding: {
157
- top: 15
158
- }
159
- };
160
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
161
- import_react2.Editor,
162
- {
163
- language,
164
- value,
165
- theme: currentTheme,
166
- defaultPath: defaultPath(filename),
167
- options,
168
- onChange: (v) => onValueChange?.(v ?? ""),
169
- onMount: (editor2) => setEditor(editor2)
170
- }
171
- ) });
172
- }
173
- function defaultPath(filename) {
174
- if (!filename) return void 0;
175
- const split = filename.split("/");
176
- return split[split.length - 1];
38
+ __reExport(monaco_exports, require("./common"), module.exports);
39
+ const MonacoEditorInner = (0, import_react.lazy)(
40
+ () => import("./editor").then((m) => ({ default: m.MonacoEditorImpl }))
41
+ );
42
+ const MonacoDiffEditorInner = (0, import_react.lazy)(
43
+ () => import("./editor").then((m) => ({ default: m.MonacoDiffEditorImpl }))
44
+ );
45
+ function MonacoEditor(props) {
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: null, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MonacoEditorInner, { ...props }) });
177
47
  }
178
- const MIN_DIFF_HEIGHT = 100;
179
- const MAX_DIFF_HEIGHT = 600;
180
- function MonacoDiffEditor({
181
- original,
182
- modified,
183
- onModifiedValueChange,
184
- language: _language,
185
- enableFancyToml,
186
- readOnly,
187
- id,
188
- hideUnchangedRegions = true,
189
- ...boxProps
190
- }) {
191
- const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
192
- const [editor, setEditor] = (0, import_react.useState)(null);
193
- const original_line_count = original?.split(/\r\n|\r|\n/).length ?? 0;
194
- const modified_line_count = modified?.split(/\r\n|\r|\n/).length ?? 0;
195
- const line_count = Math.max(original_line_count, modified_line_count);
196
- (0, import_react.useEffect)(() => {
197
- if (!editor) return;
198
- const contentHeight = line_count * 18 + 30;
199
- const node = editor.getContainerDomNode();
200
- node.style.height = `${Math.max(
201
- Math.min(contentHeight, MAX_DIFF_HEIGHT),
202
- MIN_DIFF_HEIGHT
203
- )}px`;
204
- }, [editor, line_count]);
205
- const currentTheme = (0, import_core.useComputedColorScheme)();
206
- const options = {
207
- minimap: { enabled: true },
208
- scrollbar: { alwaysConsumeMouseWheel: false },
209
- scrollBeyondLastLine: false,
210
- hideUnchangedRegions: { enabled: hideUnchangedRegions },
211
- folding: false,
212
- automaticLayout: true,
213
- renderValidationDecorations: "on",
214
- renderLineHighlightOnlyWhenFocus: true,
215
- readOnly,
216
- padding: {
217
- top: 15
218
- }
219
- };
220
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
221
- import_react2.DiffEditor,
222
- {
223
- language,
224
- original,
225
- modified,
226
- theme: currentTheme,
227
- options,
228
- onMount: (editor2) => {
229
- const modifiedEditor = editor2.getModifiedEditor();
230
- modifiedEditor.onDidChangeModelContent((_) => {
231
- onModifiedValueChange?.(modifiedEditor.getValue());
232
- });
233
- setEditor(editor2);
234
- }
235
- }
236
- ) });
48
+ function MonacoDiffEditor(props) {
49
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: null, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MonacoDiffEditorInner, { ...props }) });
237
50
  }
238
51
  // Annotate the CommonJS export names for ESM import in node:
239
52
  0 && (module.exports = {
240
53
  MonacoDiffEditor,
241
54
  MonacoEditor,
242
- languageFromPath
55
+ ...require("./common")
243
56
  });
244
57
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/monaco/index.tsx"],"sourcesContent":["import \"./init\";\n\nimport { useEffect, useState } from \"react\";\nimport { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport * as monaco from \"monaco-editor\";\nimport * as prettier from \"prettier/standalone\";\nimport * as pluginTypescript from \"prettier/plugins/typescript\";\nimport * as pluginEsTree from \"prettier/plugins/estree\";\nimport * as pluginYaml from \"prettier/plugins/yaml\";\nimport { useViewportSize } from \"@mantine/hooks\";\nimport { Box, BoxProps, useComputedColorScheme } from \"@mantine/core\";\n\nconst MIN_EDITOR_HEIGHT = 56;\n\nexport type MonacoLanguage =\n | \"yaml\"\n | \"toml\"\n | \"fancy_toml\"\n | \"json\"\n | \"key_value\"\n | \"ini\"\n | \"string_list\"\n | \"shell\"\n | \"dockerfile\"\n | \"rust\"\n | \"javascript\"\n | \"typescript\";\n\nconst LANGUAGE_EXTENSIONS: Record<MonacoLanguage, string[]> = {\n yaml: [\".yaml\", \".yml\"],\n toml: [\".toml\"],\n fancy_toml: [],\n json: [\".json\"],\n key_value: [\".env\", \".conf\"],\n ini: [\".ini\"],\n string_list: [],\n shell: [\".sh\", \".bash\", \".zsh\"],\n dockerfile: [\"Dockerfile\"],\n rust: [\".rs\"],\n javascript: [\".js\", \".jsx\", \".mjs\", \".cjs\"],\n typescript: [\".ts\", \".tsx\"],\n};\n\nexport function languageFromPath(path: string) {\n for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {\n for (const extension of extensions) {\n if (path.endsWith(extension)) {\n return lang as MonacoLanguage;\n }\n }\n }\n return undefined;\n}\n\nexport interface MonacoEditorProps extends BoxProps {\n value: string | undefined;\n onValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n filename?: string;\n readOnly?: boolean;\n minHeight?: number;\n /** Define max height as proportion of dimension height. Should be between 0 and 1. */\n maxHeightProportion?: number;\n maxHeight?: number;\n id?: string;\n}\n\nexport function MonacoEditor({\n value,\n onValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n filename,\n minHeight,\n maxHeightProportion,\n maxHeight,\n id,\n ...boxProps\n}: MonacoEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const dimensions = useViewportSize();\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!editor) return;\n\n let node = editor.getDomNode();\n if (!node) return;\n\n const callback = (e: any) => {\n if (e.key === \"Escape\") {\n (document.activeElement as any)?.blur?.();\n }\n };\n\n node.addEventListener(\"keydown\", callback);\n return () => node.removeEventListener(\"keydown\", callback);\n }, [editor]);\n\n useEffect(() => {\n if (\n language !== \"typescript\" &&\n language !== \"javascript\" &&\n language !== \"yaml\"\n )\n return;\n if (!editor) return;\n editor.addCommand(\n monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,\n async () => {\n if (!editor) return;\n const model = editor.getModel();\n if (!model) return;\n const position = editor.getPosition();\n let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;\n const curr = editor.getValue();\n const { formatted, cursorOffset } = await prettier.formatWithCursor(\n curr,\n {\n cursorOffset: beforeOffset,\n parser: language === \"yaml\" ? \"yaml\" : \"typescript\",\n plugins:\n language === \"yaml\"\n ? [pluginYaml]\n : [pluginTypescript, pluginEsTree as any],\n printWidth: 80, // Set the desired max line length\n },\n );\n editor.setValue(formatted);\n editor.setPosition(model.getPositionAt(cursorOffset));\n },\n );\n }, [editor]);\n\n const line_count = value?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const containerNode = editor.getContainerDomNode();\n\n containerNode.style.height = `${Math.max(\n Math.min(\n contentHeight,\n Math.floor(dimensions.height * 0.75),\n maxHeightProportion\n ? Math.floor(maxHeightProportion * dimensions.height)\n : 10_000,\n maxHeight ?? 10_000,\n ),\n minHeight ?? MIN_EDITOR_HEIGHT,\n )}px`;\n }, [dimensions.height, editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneEditorConstructionOptions = {\n minimap: { enabled: false },\n // scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n tabSize: 2,\n detectIndentation: true,\n quickSuggestions: true,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <Editor\n language={language}\n value={value}\n theme={currentTheme}\n defaultPath={defaultPath(filename)}\n options={options}\n onChange={(v) => onValueChange?.(v ?? \"\")}\n onMount={(editor) => setEditor(editor)}\n />\n </Box>\n );\n}\n\nfunction defaultPath(filename?: string) {\n if (!filename) return undefined;\n // Extract only the filename part of path,\n // avoiding critical issue when path starts with '/'\n const split = filename.split(\"/\");\n return split[split.length - 1];\n}\n\nconst MIN_DIFF_HEIGHT = 100;\nconst MAX_DIFF_HEIGHT = 600;\n\nexport interface MonacoDiffEditorProps extends BoxProps {\n original: string | undefined;\n modified: string | undefined;\n onModifiedValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n readOnly?: boolean;\n id?: string;\n hideUnchangedRegions?: boolean;\n}\n\nexport function MonacoDiffEditor({\n original,\n modified,\n onModifiedValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n id,\n hideUnchangedRegions = true,\n ...boxProps\n}: MonacoDiffEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneDiffEditor | null>(null);\n\n const original_line_count = original?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const modified_line_count = modified?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const line_count = Math.max(original_line_count, modified_line_count);\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const node = editor.getContainerDomNode();\n\n node.style.height = `${Math.max(\n Math.min(contentHeight, MAX_DIFF_HEIGHT),\n MIN_DIFF_HEIGHT,\n )}px`;\n }, [editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneDiffEditorConstructionOptions = {\n minimap: { enabled: true },\n scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n hideUnchangedRegions: { enabled: hideUnchangedRegions },\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <DiffEditor\n language={language}\n original={original}\n modified={modified}\n theme={currentTheme}\n options={options}\n onMount={(editor) => {\n const modifiedEditor = editor.getModifiedEditor();\n modifiedEditor.onDidChangeModelContent((_) => {\n onModifiedValueChange?.(modifiedEditor.getValue());\n });\n setEditor(editor);\n }}\n />\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqLM;AArLN,kBAAO;AAEP,mBAAoC;AACpC,IAAAA,gBAAmC;AACnC,aAAwB;AACxB,eAA0B;AAC1B,uBAAkC;AAClC,mBAA8B;AAC9B,iBAA4B;AAC5B,mBAAgC;AAChC,kBAAsD;AAEtD,MAAM,oBAAoB;AAgB1B,MAAM,sBAAwD;AAAA,EAC5D,MAAM,CAAC,SAAS,MAAM;AAAA,EACtB,MAAM,CAAC,OAAO;AAAA,EACd,YAAY,CAAC;AAAA,EACb,MAAM,CAAC,OAAO;AAAA,EACd,WAAW,CAAC,QAAQ,OAAO;AAAA,EAC3B,KAAK,CAAC,MAAM;AAAA,EACZ,aAAa,CAAC;AAAA,EACd,OAAO,CAAC,OAAO,SAAS,MAAM;AAAA,EAC9B,YAAY,CAAC,YAAY;AAAA,EACzB,MAAM,CAAC,KAAK;AAAA,EACZ,YAAY,CAAC,OAAO,QAAQ,QAAQ,MAAM;AAAA,EAC1C,YAAY,CAAC,OAAO,MAAM;AAC5B;AAEO,SAAS,iBAAiB,MAAc;AAC7C,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AACpE,eAAW,aAAa,YAAY;AAClC,UAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAgBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,WACJ,cAAc,gBAAgB,CAAC,kBAAkB,SAAS;AAG5D,QAAM,iBAAa,8BAAgB;AACnC,QAAM,CAAC,QAAQ,SAAS,QACtB,uBAAqD,IAAI;AAE3D,8BAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,QAAI,OAAO,OAAO,WAAW;AAC7B,QAAI,CAAC,KAAM;AAEX,UAAM,WAAW,CAAC,MAAW;AAC3B,UAAI,EAAE,QAAQ,UAAU;AACtB,QAAC,SAAS,eAAuB,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,SAAK,iBAAiB,WAAW,QAAQ;AACzC,WAAO,MAAM,KAAK,oBAAoB,WAAW,QAAQ;AAAA,EAC3D,GAAG,CAAC,MAAM,CAAC;AAEX,8BAAU,MAAM;AACd,QACE,aAAa,gBACb,aAAa,gBACb,aAAa;AAEb;AACF,QAAI,CAAC,OAAQ;AACb,WAAO;AAAA,MACL,OAAO,OAAO,MAAM,OAAO,OAAO,QAAQ,OAAO,QAAQ;AAAA,MACzD,YAAY;AACV,YAAI,CAAC,OAAQ;AACb,cAAM,QAAQ,OAAO,SAAS;AAC9B,YAAI,CAAC,MAAO;AACZ,cAAM,WAAW,OAAO,YAAY;AACpC,YAAI,gBAAgB,YAAY,MAAM,YAAY,QAAQ,MAAM;AAChE,cAAM,OAAO,OAAO,SAAS;AAC7B,cAAM,EAAE,WAAW,aAAa,IAAI,MAAM,SAAS;AAAA,UACjD;AAAA,UACA;AAAA,YACE,cAAc;AAAA,YACd,QAAQ,aAAa,SAAS,SAAS;AAAA,YACvC,SACE,aAAa,SACT,CAAC,UAAU,IACX,CAAC,kBAAkB,YAAmB;AAAA,YAC5C,YAAY;AAAA;AAAA,UACd;AAAA,QACF;AACA,eAAO,SAAS,SAAS;AACzB,eAAO,YAAY,MAAM,cAAc,YAAY,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,OAAO,MAAM,YAAY,EAAE,UAAU;AAExD,8BAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,UAAM,gBAAgB,aAAa,KAAK;AACxC,UAAM,gBAAgB,OAAO,oBAAoB;AAEjD,kBAAc,MAAM,SAAS,GAAG,KAAK;AAAA,MACnC,KAAK;AAAA,QACH;AAAA,QACA,KAAK,MAAM,WAAW,SAAS,IAAI;AAAA,QACnC,sBACI,KAAK,MAAM,sBAAsB,WAAW,MAAM,IAClD;AAAA,QACJ,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,IACf,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,QAAQ,QAAQ,UAAU,CAAC;AAE1C,QAAM,mBAAe,oCAAuB;AAE5C,QAAM,UAA8D;AAAA,IAClE,SAAS,EAAE,SAAS,MAAM;AAAA;AAAA,IAE1B,sBAAsB;AAAA,IACtB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,6BAA6B;AAAA,IAC7B,kCAAkC;AAAA,IAClC;AAAA,IACA,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AAEA,SACE,4CAAC,mBAAI,IAAQ,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAI,GAAG,UACtD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,aAAa,YAAY,QAAQ;AAAA,MACjC;AAAA,MACA,UAAU,CAAC,MAAM,gBAAgB,KAAK,EAAE;AAAA,MACxC,SAAS,CAACC,YAAW,UAAUA,OAAM;AAAA;AAAA,EACvC,GACF;AAEJ;AAEA,SAAS,YAAY,UAAmB;AACtC,MAAI,CAAC,SAAU,QAAO;AAGtB,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,SAAO,MAAM,MAAM,SAAS,CAAC;AAC/B;AAEA,MAAM,kBAAkB;AACxB,MAAM,kBAAkB;AAajB,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,uBAAuB;AAAA,EACvB,GAAG;AACL,GAA0B;AACxB,QAAM,WACJ,cAAc,gBAAgB,CAAC,kBAAkB,SAAS;AAG5D,QAAM,CAAC,QAAQ,SAAS,QACtB,uBAAqD,IAAI;AAE3D,QAAM,sBAAsB,UAAU,MAAM,YAAY,EAAE,UAAU;AACpE,QAAM,sBAAsB,UAAU,MAAM,YAAY,EAAE,UAAU;AACpE,QAAM,aAAa,KAAK,IAAI,qBAAqB,mBAAmB;AAEpE,8BAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,UAAM,gBAAgB,aAAa,KAAK;AACxC,UAAM,OAAO,OAAO,oBAAoB;AAExC,SAAK,MAAM,SAAS,GAAG,KAAK;AAAA,MAC1B,KAAK,IAAI,eAAe,eAAe;AAAA,MACvC;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,QAAM,mBAAe,oCAAuB;AAE5C,QAAM,UAAkE;AAAA,IACtE,SAAS,EAAE,SAAS,KAAK;AAAA,IACzB,WAAW,EAAE,yBAAyB,MAAM;AAAA,IAC5C,sBAAsB;AAAA,IACtB,sBAAsB,EAAE,SAAS,qBAAqB;AAAA,IACtD,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,6BAA6B;AAAA,IAC7B,kCAAkC;AAAA,IAClC;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AAEA,SACE,4CAAC,mBAAI,IAAQ,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAI,GAAG,UACtD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,SAAS,CAACA,YAAW;AACnB,cAAM,iBAAiBA,QAAO,kBAAkB;AAChD,uBAAe,wBAAwB,CAAC,MAAM;AAC5C,kCAAwB,eAAe,SAAS,CAAC;AAAA,QACnD,CAAC;AACD,kBAAUA,OAAM;AAAA,MAClB;AAAA;AAAA,EACF,GACF;AAEJ;","names":["import_react","editor"]}
1
+ {"version":3,"sources":["../../../src/components/monaco/index.tsx"],"sourcesContent":["import { lazy, Suspense } from \"react\";\nimport { MonacoDiffEditorProps, MonacoEditorProps } from \"./common\";\n\nexport * from \"./common\";\n\n// The editor implementation pulls in monaco-editor / @monaco-editor/react,\n// so it is loaded lazily to keep it out of consumers' entry chunks.\nconst MonacoEditorInner = lazy(() =>\n import(\"./editor\").then((m) => ({ default: m.MonacoEditorImpl })),\n);\nconst MonacoDiffEditorInner = lazy(() =>\n import(\"./editor\").then((m) => ({ default: m.MonacoDiffEditorImpl })),\n);\n\nexport function MonacoEditor(props: MonacoEditorProps) {\n return (\n <Suspense fallback={null}>\n <MonacoEditorInner {...props} />\n </Suspense>\n );\n}\n\nexport function MonacoDiffEditor(props: MonacoDiffEditorProps) {\n return (\n <Suspense fallback={null}>\n <MonacoDiffEditorInner {...props} />\n </Suspense>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBM;AAjBN,mBAA+B;AAG/B,2BAAc,qBAHd;AAOA,MAAM,wBAAoB;AAAA,EAAK,MAC7B,OAAO,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE;AAClE;AACA,MAAM,4BAAwB;AAAA,EAAK,MACjC,OAAO,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE;AACtE;AAEO,SAAS,aAAa,OAA0B;AACrD,SACE,4CAAC,yBAAS,UAAU,MAClB,sDAAC,qBAAmB,GAAG,OAAO,GAChC;AAEJ;AAEO,SAAS,iBAAiB,OAA8B;AAC7D,SACE,4CAAC,yBAAS,UAAU,MAClB,sDAAC,yBAAuB,GAAG,OAAO,GACpC;AAEJ;","names":[]}
@@ -1,30 +1,5 @@
1
- import "./init";
2
- import { BoxProps } from "@mantine/core";
3
- export type MonacoLanguage = "yaml" | "toml" | "fancy_toml" | "json" | "key_value" | "ini" | "string_list" | "shell" | "dockerfile" | "rust" | "javascript" | "typescript";
4
- export declare function languageFromPath(path: string): MonacoLanguage | undefined;
5
- export interface MonacoEditorProps extends BoxProps {
6
- value: string | undefined;
7
- onValueChange?: (value: string) => void;
8
- language: MonacoLanguage | undefined;
9
- enableFancyToml?: boolean;
10
- filename?: string;
11
- readOnly?: boolean;
12
- minHeight?: number;
13
- /** Define max height as proportion of dimension height. Should be between 0 and 1. */
14
- maxHeightProportion?: number;
15
- maxHeight?: number;
16
- id?: string;
17
- }
18
- export declare function MonacoEditor({ value, onValueChange, language: _language, enableFancyToml, readOnly, filename, minHeight, maxHeightProportion, maxHeight, id, ...boxProps }: MonacoEditorProps): import("react").JSX.Element;
19
- export interface MonacoDiffEditorProps extends BoxProps {
20
- original: string | undefined;
21
- modified: string | undefined;
22
- onModifiedValueChange?: (value: string) => void;
23
- language: MonacoLanguage | undefined;
24
- enableFancyToml?: boolean;
25
- readOnly?: boolean;
26
- id?: string;
27
- hideUnchangedRegions?: boolean;
28
- }
29
- export declare function MonacoDiffEditor({ original, modified, onModifiedValueChange, language: _language, enableFancyToml, readOnly, id, hideUnchangedRegions, ...boxProps }: MonacoDiffEditorProps): import("react").JSX.Element;
1
+ import { MonacoDiffEditorProps, MonacoEditorProps } from "./common";
2
+ export * from "./common";
3
+ export declare function MonacoEditor(props: MonacoEditorProps): import("react").JSX.Element;
4
+ export declare function MonacoDiffEditor(props: MonacoDiffEditorProps): import("react").JSX.Element;
30
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/monaco/index.tsx"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC;AAUhB,OAAO,EAAO,QAAQ,EAA0B,MAAM,eAAe,CAAC;AAItE,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,YAAY,GACZ,MAAM,GACN,WAAW,GACX,KAAK,GACL,aAAa,GACb,OAAO,GACP,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,YAAY,CAAC;AAiBjB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,8BAS5C;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,aAAa,EACb,QAAQ,EAAE,SAAS,EACnB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,EAAE,EACF,GAAG,QAAQ,EACZ,EAAE,iBAAiB,+BAgHnB;AAaD,MAAM,WAAW,qBAAsB,SAAQ,QAAQ;IACrD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,qBAAqB,EACrB,QAAQ,EAAE,SAAS,EACnB,eAAe,EACf,QAAQ,EACR,EAAE,EACF,oBAA2B,EAC3B,GAAG,QAAQ,EACZ,EAAE,qBAAqB,+BA0DvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/monaco/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEpE,cAAc,UAAU,CAAC;AAWzB,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAM5D"}
@@ -1,208 +1,20 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import "./init";
3
- import { useEffect, useState } from "react";
4
- import { DiffEditor, Editor } from "@monaco-editor/react";
5
- import * as monaco from "monaco-editor";
6
- import * as prettier from "prettier/standalone";
7
- import * as pluginTypescript from "prettier/plugins/typescript";
8
- import * as pluginEsTree from "prettier/plugins/estree";
9
- import * as pluginYaml from "prettier/plugins/yaml";
10
- import { useViewportSize } from "@mantine/hooks";
11
- import { Box, useComputedColorScheme } from "@mantine/core";
12
- const MIN_EDITOR_HEIGHT = 56;
13
- const LANGUAGE_EXTENSIONS = {
14
- yaml: [".yaml", ".yml"],
15
- toml: [".toml"],
16
- fancy_toml: [],
17
- json: [".json"],
18
- key_value: [".env", ".conf"],
19
- ini: [".ini"],
20
- string_list: [],
21
- shell: [".sh", ".bash", ".zsh"],
22
- dockerfile: ["Dockerfile"],
23
- rust: [".rs"],
24
- javascript: [".js", ".jsx", ".mjs", ".cjs"],
25
- typescript: [".ts", ".tsx"]
26
- };
27
- function languageFromPath(path) {
28
- for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {
29
- for (const extension of extensions) {
30
- if (path.endsWith(extension)) {
31
- return lang;
32
- }
33
- }
34
- }
35
- return void 0;
36
- }
37
- function MonacoEditor({
38
- value,
39
- onValueChange,
40
- language: _language,
41
- enableFancyToml,
42
- readOnly,
43
- filename,
44
- minHeight,
45
- maxHeightProportion,
46
- maxHeight,
47
- id,
48
- ...boxProps
49
- }) {
50
- const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
51
- const dimensions = useViewportSize();
52
- const [editor, setEditor] = useState(null);
53
- useEffect(() => {
54
- if (!editor) return;
55
- let node = editor.getDomNode();
56
- if (!node) return;
57
- const callback = (e) => {
58
- if (e.key === "Escape") {
59
- document.activeElement?.blur?.();
60
- }
61
- };
62
- node.addEventListener("keydown", callback);
63
- return () => node.removeEventListener("keydown", callback);
64
- }, [editor]);
65
- useEffect(() => {
66
- if (language !== "typescript" && language !== "javascript" && language !== "yaml")
67
- return;
68
- if (!editor) return;
69
- editor.addCommand(
70
- monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,
71
- async () => {
72
- if (!editor) return;
73
- const model = editor.getModel();
74
- if (!model) return;
75
- const position = editor.getPosition();
76
- let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;
77
- const curr = editor.getValue();
78
- const { formatted, cursorOffset } = await prettier.formatWithCursor(
79
- curr,
80
- {
81
- cursorOffset: beforeOffset,
82
- parser: language === "yaml" ? "yaml" : "typescript",
83
- plugins: language === "yaml" ? [pluginYaml] : [pluginTypescript, pluginEsTree],
84
- printWidth: 80
85
- // Set the desired max line length
86
- }
87
- );
88
- editor.setValue(formatted);
89
- editor.setPosition(model.getPositionAt(cursorOffset));
90
- }
91
- );
92
- }, [editor]);
93
- const line_count = value?.split(/\r\n|\r|\n/).length ?? 0;
94
- useEffect(() => {
95
- if (!editor) return;
96
- const contentHeight = line_count * 18 + 30;
97
- const containerNode = editor.getContainerDomNode();
98
- containerNode.style.height = `${Math.max(
99
- Math.min(
100
- contentHeight,
101
- Math.floor(dimensions.height * 0.75),
102
- maxHeightProportion ? Math.floor(maxHeightProportion * dimensions.height) : 1e4,
103
- maxHeight ?? 1e4
104
- ),
105
- minHeight ?? MIN_EDITOR_HEIGHT
106
- )}px`;
107
- }, [dimensions.height, editor, line_count]);
108
- const currentTheme = useComputedColorScheme();
109
- const options = {
110
- minimap: { enabled: false },
111
- // scrollbar: { alwaysConsumeMouseWheel: false },
112
- scrollBeyondLastLine: false,
113
- folding: false,
114
- automaticLayout: true,
115
- renderValidationDecorations: "on",
116
- renderLineHighlightOnlyWhenFocus: true,
117
- readOnly,
118
- tabSize: 2,
119
- detectIndentation: true,
120
- quickSuggestions: true,
121
- padding: {
122
- top: 15
123
- }
124
- };
125
- return /* @__PURE__ */ jsx(Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ jsx(
126
- Editor,
127
- {
128
- language,
129
- value,
130
- theme: currentTheme,
131
- defaultPath: defaultPath(filename),
132
- options,
133
- onChange: (v) => onValueChange?.(v ?? ""),
134
- onMount: (editor2) => setEditor(editor2)
135
- }
136
- ) });
137
- }
138
- function defaultPath(filename) {
139
- if (!filename) return void 0;
140
- const split = filename.split("/");
141
- return split[split.length - 1];
2
+ import { lazy, Suspense } from "react";
3
+ export * from "./common";
4
+ const MonacoEditorInner = lazy(
5
+ () => import("./editor").then((m) => ({ default: m.MonacoEditorImpl }))
6
+ );
7
+ const MonacoDiffEditorInner = lazy(
8
+ () => import("./editor").then((m) => ({ default: m.MonacoDiffEditorImpl }))
9
+ );
10
+ function MonacoEditor(props) {
11
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(MonacoEditorInner, { ...props }) });
142
12
  }
143
- const MIN_DIFF_HEIGHT = 100;
144
- const MAX_DIFF_HEIGHT = 600;
145
- function MonacoDiffEditor({
146
- original,
147
- modified,
148
- onModifiedValueChange,
149
- language: _language,
150
- enableFancyToml,
151
- readOnly,
152
- id,
153
- hideUnchangedRegions = true,
154
- ...boxProps
155
- }) {
156
- const language = _language === "fancy_toml" && !enableFancyToml ? "toml" : _language;
157
- const [editor, setEditor] = useState(null);
158
- const original_line_count = original?.split(/\r\n|\r|\n/).length ?? 0;
159
- const modified_line_count = modified?.split(/\r\n|\r|\n/).length ?? 0;
160
- const line_count = Math.max(original_line_count, modified_line_count);
161
- useEffect(() => {
162
- if (!editor) return;
163
- const contentHeight = line_count * 18 + 30;
164
- const node = editor.getContainerDomNode();
165
- node.style.height = `${Math.max(
166
- Math.min(contentHeight, MAX_DIFF_HEIGHT),
167
- MIN_DIFF_HEIGHT
168
- )}px`;
169
- }, [editor, line_count]);
170
- const currentTheme = useComputedColorScheme();
171
- const options = {
172
- minimap: { enabled: true },
173
- scrollbar: { alwaysConsumeMouseWheel: false },
174
- scrollBeyondLastLine: false,
175
- hideUnchangedRegions: { enabled: hideUnchangedRegions },
176
- folding: false,
177
- automaticLayout: true,
178
- renderValidationDecorations: "on",
179
- renderLineHighlightOnlyWhenFocus: true,
180
- readOnly,
181
- padding: {
182
- top: 15
183
- }
184
- };
185
- return /* @__PURE__ */ jsx(Box, { id, onKeyDown: (e) => e.stopPropagation(), ...boxProps, children: /* @__PURE__ */ jsx(
186
- DiffEditor,
187
- {
188
- language,
189
- original,
190
- modified,
191
- theme: currentTheme,
192
- options,
193
- onMount: (editor2) => {
194
- const modifiedEditor = editor2.getModifiedEditor();
195
- modifiedEditor.onDidChangeModelContent((_) => {
196
- onModifiedValueChange?.(modifiedEditor.getValue());
197
- });
198
- setEditor(editor2);
199
- }
200
- }
201
- ) });
13
+ function MonacoDiffEditor(props) {
14
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(MonacoDiffEditorInner, { ...props }) });
202
15
  }
203
16
  export {
204
17
  MonacoDiffEditor,
205
- MonacoEditor,
206
- languageFromPath
18
+ MonacoEditor
207
19
  };
208
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/monaco/index.tsx"],"sourcesContent":["import \"./init\";\n\nimport { useEffect, useState } from \"react\";\nimport { DiffEditor, Editor } from \"@monaco-editor/react\";\nimport * as monaco from \"monaco-editor\";\nimport * as prettier from \"prettier/standalone\";\nimport * as pluginTypescript from \"prettier/plugins/typescript\";\nimport * as pluginEsTree from \"prettier/plugins/estree\";\nimport * as pluginYaml from \"prettier/plugins/yaml\";\nimport { useViewportSize } from \"@mantine/hooks\";\nimport { Box, BoxProps, useComputedColorScheme } from \"@mantine/core\";\n\nconst MIN_EDITOR_HEIGHT = 56;\n\nexport type MonacoLanguage =\n | \"yaml\"\n | \"toml\"\n | \"fancy_toml\"\n | \"json\"\n | \"key_value\"\n | \"ini\"\n | \"string_list\"\n | \"shell\"\n | \"dockerfile\"\n | \"rust\"\n | \"javascript\"\n | \"typescript\";\n\nconst LANGUAGE_EXTENSIONS: Record<MonacoLanguage, string[]> = {\n yaml: [\".yaml\", \".yml\"],\n toml: [\".toml\"],\n fancy_toml: [],\n json: [\".json\"],\n key_value: [\".env\", \".conf\"],\n ini: [\".ini\"],\n string_list: [],\n shell: [\".sh\", \".bash\", \".zsh\"],\n dockerfile: [\"Dockerfile\"],\n rust: [\".rs\"],\n javascript: [\".js\", \".jsx\", \".mjs\", \".cjs\"],\n typescript: [\".ts\", \".tsx\"],\n};\n\nexport function languageFromPath(path: string) {\n for (const [lang, extensions] of Object.entries(LANGUAGE_EXTENSIONS)) {\n for (const extension of extensions) {\n if (path.endsWith(extension)) {\n return lang as MonacoLanguage;\n }\n }\n }\n return undefined;\n}\n\nexport interface MonacoEditorProps extends BoxProps {\n value: string | undefined;\n onValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n filename?: string;\n readOnly?: boolean;\n minHeight?: number;\n /** Define max height as proportion of dimension height. Should be between 0 and 1. */\n maxHeightProportion?: number;\n maxHeight?: number;\n id?: string;\n}\n\nexport function MonacoEditor({\n value,\n onValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n filename,\n minHeight,\n maxHeightProportion,\n maxHeight,\n id,\n ...boxProps\n}: MonacoEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const dimensions = useViewportSize();\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!editor) return;\n\n let node = editor.getDomNode();\n if (!node) return;\n\n const callback = (e: any) => {\n if (e.key === \"Escape\") {\n (document.activeElement as any)?.blur?.();\n }\n };\n\n node.addEventListener(\"keydown\", callback);\n return () => node.removeEventListener(\"keydown\", callback);\n }, [editor]);\n\n useEffect(() => {\n if (\n language !== \"typescript\" &&\n language !== \"javascript\" &&\n language !== \"yaml\"\n )\n return;\n if (!editor) return;\n editor.addCommand(\n monaco.KeyMod.Alt | monaco.KeyMod.Shift | monaco.KeyCode.KeyF,\n async () => {\n if (!editor) return;\n const model = editor.getModel();\n if (!model) return;\n const position = editor.getPosition();\n let beforeOffset = (position && model.getOffsetAt(position)) ?? 0;\n const curr = editor.getValue();\n const { formatted, cursorOffset } = await prettier.formatWithCursor(\n curr,\n {\n cursorOffset: beforeOffset,\n parser: language === \"yaml\" ? \"yaml\" : \"typescript\",\n plugins:\n language === \"yaml\"\n ? [pluginYaml]\n : [pluginTypescript, pluginEsTree as any],\n printWidth: 80, // Set the desired max line length\n },\n );\n editor.setValue(formatted);\n editor.setPosition(model.getPositionAt(cursorOffset));\n },\n );\n }, [editor]);\n\n const line_count = value?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const containerNode = editor.getContainerDomNode();\n\n containerNode.style.height = `${Math.max(\n Math.min(\n contentHeight,\n Math.floor(dimensions.height * 0.75),\n maxHeightProportion\n ? Math.floor(maxHeightProportion * dimensions.height)\n : 10_000,\n maxHeight ?? 10_000,\n ),\n minHeight ?? MIN_EDITOR_HEIGHT,\n )}px`;\n }, [dimensions.height, editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneEditorConstructionOptions = {\n minimap: { enabled: false },\n // scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n tabSize: 2,\n detectIndentation: true,\n quickSuggestions: true,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <Editor\n language={language}\n value={value}\n theme={currentTheme}\n defaultPath={defaultPath(filename)}\n options={options}\n onChange={(v) => onValueChange?.(v ?? \"\")}\n onMount={(editor) => setEditor(editor)}\n />\n </Box>\n );\n}\n\nfunction defaultPath(filename?: string) {\n if (!filename) return undefined;\n // Extract only the filename part of path,\n // avoiding critical issue when path starts with '/'\n const split = filename.split(\"/\");\n return split[split.length - 1];\n}\n\nconst MIN_DIFF_HEIGHT = 100;\nconst MAX_DIFF_HEIGHT = 600;\n\nexport interface MonacoDiffEditorProps extends BoxProps {\n original: string | undefined;\n modified: string | undefined;\n onModifiedValueChange?: (value: string) => void;\n language: MonacoLanguage | undefined;\n enableFancyToml?: boolean;\n readOnly?: boolean;\n id?: string;\n hideUnchangedRegions?: boolean;\n}\n\nexport function MonacoDiffEditor({\n original,\n modified,\n onModifiedValueChange,\n language: _language,\n enableFancyToml,\n readOnly,\n id,\n hideUnchangedRegions = true,\n ...boxProps\n}: MonacoDiffEditorProps) {\n const language = (\n _language === \"fancy_toml\" && !enableFancyToml ? \"toml\" : _language\n ) as MonacoLanguage;\n\n const [editor, setEditor] =\n useState<monaco.editor.IStandaloneDiffEditor | null>(null);\n\n const original_line_count = original?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const modified_line_count = modified?.split(/\\r\\n|\\r|\\n/).length ?? 0;\n const line_count = Math.max(original_line_count, modified_line_count);\n\n useEffect(() => {\n if (!editor) return;\n const contentHeight = line_count * 18 + 30;\n const node = editor.getContainerDomNode();\n\n node.style.height = `${Math.max(\n Math.min(contentHeight, MAX_DIFF_HEIGHT),\n MIN_DIFF_HEIGHT,\n )}px`;\n }, [editor, line_count]);\n\n const currentTheme = useComputedColorScheme();\n\n const options: monaco.editor.IStandaloneDiffEditorConstructionOptions = {\n minimap: { enabled: true },\n scrollbar: { alwaysConsumeMouseWheel: false },\n scrollBeyondLastLine: false,\n hideUnchangedRegions: { enabled: hideUnchangedRegions },\n folding: false,\n automaticLayout: true,\n renderValidationDecorations: \"on\",\n renderLineHighlightOnlyWhenFocus: true,\n readOnly,\n padding: {\n top: 15,\n },\n };\n\n return (\n <Box id={id} onKeyDown={(e) => e.stopPropagation()} {...boxProps}>\n <DiffEditor\n language={language}\n original={original}\n modified={modified}\n theme={currentTheme}\n options={options}\n onMount={(editor) => {\n const modifiedEditor = editor.getModifiedEditor();\n modifiedEditor.onDidChangeModelContent((_) => {\n onModifiedValueChange?.(modifiedEditor.getValue());\n });\n setEditor(editor);\n }}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["editor"]}
1
+ {"version":3,"sources":["../../../src/components/monaco/index.tsx"],"sourcesContent":["import { lazy, Suspense } from \"react\";\nimport { MonacoDiffEditorProps, MonacoEditorProps } from \"./common\";\n\nexport * from \"./common\";\n\n// The editor implementation pulls in monaco-editor / @monaco-editor/react,\n// so it is loaded lazily to keep it out of consumers' entry chunks.\nconst MonacoEditorInner = lazy(() =>\n import(\"./editor\").then((m) => ({ default: m.MonacoEditorImpl })),\n);\nconst MonacoDiffEditorInner = lazy(() =>\n import(\"./editor\").then((m) => ({ default: m.MonacoDiffEditorImpl })),\n);\n\nexport function MonacoEditor(props: MonacoEditorProps) {\n return (\n <Suspense fallback={null}>\n <MonacoEditorInner {...props} />\n </Suspense>\n );\n}\n\nexport function MonacoDiffEditor(props: MonacoDiffEditorProps) {\n return (\n <Suspense fallback={null}>\n <MonacoDiffEditorInner {...props} />\n </Suspense>\n );\n}\n"],"mappings":"AAiBM;AAjBN,SAAS,MAAM,gBAAgB;AAG/B,cAAc;AAId,MAAM,oBAAoB;AAAA,EAAK,MAC7B,OAAO,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE;AAClE;AACA,MAAM,wBAAwB;AAAA,EAAK,MACjC,OAAO,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE;AACtE;AAEO,SAAS,aAAa,OAA0B;AACrD,SACE,oBAAC,YAAS,UAAU,MAClB,8BAAC,qBAAmB,GAAG,OAAO,GAChC;AAEJ;AAEO,SAAS,iBAAiB,OAA8B;AAC7D,SACE,oBAAC,YAAS,UAAU,MAClB,8BAAC,yBAAuB,GAAG,OAAO,GACpC;AAEJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mogh_ui",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Common UI components and styling used across Mogh apps.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",