keli-ui 0.3.13 → 0.3.14

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.
@@ -1,3 +1,4 @@
1
1
  import { default as FormCodeEditor } from './FormCodeEditor.vue';
2
+ import { codeLanguages } from './language/index';
2
3
 
3
- export { FormCodeEditor };
4
+ export { FormCodeEditor, codeLanguages };
@@ -0,0 +1,114 @@
1
+ import * as Java from './java';
2
+ export declare const codeLanguages: {
3
+ java: {
4
+ conf: {
5
+ wordPattern: RegExp;
6
+ comments: {
7
+ lineComment: string;
8
+ blockComment: string[];
9
+ };
10
+ brackets: string[][];
11
+ autoClosingPairs: {
12
+ open: string;
13
+ close: string;
14
+ }[];
15
+ surroundingPairs: {
16
+ open: string;
17
+ close: string;
18
+ }[];
19
+ folding: {
20
+ markers: {
21
+ start: RegExp;
22
+ end: RegExp;
23
+ };
24
+ };
25
+ };
26
+ language: {
27
+ defaultToken: string;
28
+ tokenPostfix: string;
29
+ keywords: string[];
30
+ operators: string[];
31
+ typeKeywords: string[];
32
+ symbols: RegExp;
33
+ escapes: RegExp;
34
+ digits: RegExp;
35
+ octaldigits: RegExp;
36
+ binarydigits: RegExp;
37
+ hexdigits: RegExp;
38
+ tokenizer: {
39
+ root: ((string | RegExp)[] | (RegExp | (string | {
40
+ cases: {
41
+ "@keywords": string;
42
+ "@typeKeywords": string;
43
+ "@default": string;
44
+ };
45
+ })[])[] | (RegExp | {
46
+ cases: {
47
+ "@keywords": string;
48
+ "@typeKeywords": string;
49
+ "@default": string;
50
+ };
51
+ })[] | (RegExp | {
52
+ cases: {
53
+ "@keywords": {
54
+ token: string;
55
+ };
56
+ "@default": string;
57
+ };
58
+ })[] | {
59
+ include: string;
60
+ } | (RegExp | {
61
+ cases: {
62
+ "@operators": string;
63
+ "@default": string;
64
+ };
65
+ })[])[];
66
+ whitespace: (string | RegExp)[][];
67
+ comment: (string | RegExp)[][];
68
+ javadoc: (string | RegExp)[][];
69
+ string: (string | RegExp)[][];
70
+ multistring: (string | RegExp)[][];
71
+ };
72
+ };
73
+ registerCompletion: typeof Java.registerJavaCompletion;
74
+ defineThemes: typeof Java.defineJavaThemes;
75
+ };
76
+ mysql: {
77
+ conf: {
78
+ comments: {
79
+ lineComment: string;
80
+ blockComment: string[];
81
+ };
82
+ brackets: string[][];
83
+ autoClosingPairs: {
84
+ open: string;
85
+ close: string;
86
+ }[];
87
+ surroundingPairs: {
88
+ open: string;
89
+ close: string;
90
+ }[];
91
+ };
92
+ language: {
93
+ comments: {
94
+ lineComment: string;
95
+ blockComment: string[];
96
+ };
97
+ brackets: string[][];
98
+ autoClosingPairs: {
99
+ open: string;
100
+ close: string;
101
+ }[];
102
+ surroundingPairs: {
103
+ open: string;
104
+ close: string;
105
+ }[];
106
+ };
107
+ };
108
+ postgresql: {
109
+ conf: import("monaco-editor").languages.LanguageConfiguration;
110
+ language: import("monaco-editor").languages.LanguageConfiguration;
111
+ registerCompletion: void;
112
+ defineThemes: void;
113
+ };
114
+ };
@@ -67,6 +67,6 @@ declare const language: {
67
67
  multistring: (string | RegExp)[][];
68
68
  };
69
69
  };
70
- export { conf, language, registerJavaCompletion, defineJavaThemes };
71
70
  declare function defineJavaThemes(): void;
72
71
  declare function registerJavaCompletion(): void;
72
+ export { conf, language, registerJavaCompletion, defineJavaThemes };
@@ -1,6 +1,6 @@
1
1
  import * as monaco from 'monaco-editor';
2
2
  declare const conf: monaco.languages.LanguageConfiguration;
3
3
  declare const language: monaco.languages.IMonarchLanguage;
4
- export { conf, language, registerPgsqlCompletion, definePgsqlThemes };
5
4
  declare function definePgsqlThemes(): void;
6
5
  declare function registerPgsqlCompletion(): void;
6
+ export { conf, language, registerPgsqlCompletion, definePgsqlThemes };
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from './types';
11
11
  export * from './config';
12
12
  export * from './utils';
13
13
  export { convertAreaToFieldset } from './components/FormComponent/FormRender/hooks/formRender.hook';
14
+ export { codeLanguages } from './components/FormComponent/FormCodeEditor';
14
15
  /**
15
16
  * 控制深浅色模式
16
17
  */
@@ -1,6 +1,12 @@
1
- import * as e from "monaco-editor";
1
+ import { at as e } from "./api-DPWBxyJL.js";
2
+ import * as t from "monaco-editor";
2
3
  //#region src/components/FormComponent/FormCodeEditor/language/java.ts
3
- var t = {
4
+ var n = /* @__PURE__ */ e({
5
+ conf: () => r,
6
+ defineJavaThemes: () => a,
7
+ language: () => i,
8
+ registerJavaCompletion: () => s
9
+ }), r = {
4
10
  wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
5
11
  comments: {
6
12
  lineComment: "//",
@@ -63,7 +69,7 @@ var t = {
63
69
  start: /* @__PURE__ */ RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),
64
70
  end: /* @__PURE__ */ RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")
65
71
  } }
66
- }, n = {
72
+ }, i = {
67
73
  defaultToken: "",
68
74
  tokenPostfix: ".java",
69
75
  keywords: /* @__PURE__ */ "abstract.continue.for.new.switch.assert.default.goto.package.synchronized.boolean.do.if.private.this.break.double.implements.protected.throw.byte.else.import.public.throws.case.enum.instanceof.return.transient.catch.extends.int.short.try.char.final.interface.static.void.class.finally.long.strictfp.volatile.const.float.native.super.while.true.false.yield.record.sealed.non-sealed.permits".split("."),
@@ -187,8 +193,8 @@ var t = {
187
193
  ]
188
194
  }
189
195
  };
190
- function r() {
191
- e.editor.defineTheme("java-dark", {
196
+ function a() {
197
+ t.editor.defineTheme("java-dark", {
192
198
  base: "vs-dark",
193
199
  inherit: !0,
194
200
  rules: [
@@ -314,7 +320,7 @@ function r() {
314
320
  }
315
321
  ],
316
322
  colors: {}
317
- }), e.editor.defineTheme("java-light", {
323
+ }), t.editor.defineTheme("java-light", {
318
324
  base: "vs",
319
325
  inherit: !0,
320
326
  rules: [
@@ -394,21 +400,21 @@ function r() {
394
400
  colors: {}
395
401
  });
396
402
  }
397
- var i = !1;
398
- function a() {
399
- i || (i = !0, e.languages.registerCompletionItemProvider("java", {
403
+ var o = !1;
404
+ function s() {
405
+ o || (o = !0, t.languages.registerCompletionItemProvider("java", {
400
406
  triggerCharacters: [
401
407
  ".",
402
408
  "@",
403
409
  " "
404
410
  ],
405
- provideCompletionItems: (t, n) => {
406
- let r = t.getWordUntilPosition(n), i = {
411
+ provideCompletionItems: (e, n) => {
412
+ let r = e.getWordUntilPosition(n), i = {
407
413
  startLineNumber: n.lineNumber,
408
414
  endLineNumber: n.lineNumber,
409
415
  startColumn: r.startColumn,
410
416
  endColumn: r.endColumn
411
- }, a = t.getLineContent(n.lineNumber).substring(0, n.column - 1), o = r.word.toLowerCase(), s = [];
417
+ }, a = e.getLineContent(n.lineNumber).substring(0, n.column - 1), o = r.word.toLowerCase(), s = [];
412
418
  if (o.length >= 1 && [
413
419
  [
414
420
  "public",
@@ -1315,18 +1321,18 @@ function a() {
1315
1321
  "抑制警告",
1316
1322
  "@SuppressWarnings(\"$1\")"
1317
1323
  ]
1318
- ].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([t, n, r]) => {
1324
+ ].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([e, n, r]) => {
1319
1325
  s.push({
1320
- label: t,
1326
+ label: e,
1321
1327
  detail: n,
1322
1328
  insertText: r,
1323
1329
  range: i,
1324
- kind: e.languages.CompletionItemKind.Keyword,
1325
- insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet,
1326
- sortText: "0" + t
1330
+ kind: t.languages.CompletionItemKind.Keyword,
1331
+ insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet,
1332
+ sortText: "0" + e
1327
1333
  });
1328
1334
  }), a.endsWith("@") || /@\w*$/.test(a)) {
1329
- let t = [
1335
+ let e = [
1330
1336
  [
1331
1337
  "@Override",
1332
1338
  "重写方法",
@@ -1528,14 +1534,14 @@ function a() {
1528
1534
  startColumn: r + 1,
1529
1535
  endColumn: n.column
1530
1536
  };
1531
- t.filter(([e]) => i.length === 0 || e.toLowerCase().includes(i)).forEach(([t, n, r]) => {
1537
+ e.filter(([e]) => i.length === 0 || e.toLowerCase().includes(i)).forEach(([e, n, r]) => {
1532
1538
  s.push({
1533
- label: t,
1539
+ label: e,
1534
1540
  detail: n,
1535
1541
  insertText: r,
1536
1542
  range: o,
1537
- kind: e.languages.CompletionItemKind.Interface,
1538
- insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet
1543
+ kind: t.languages.CompletionItemKind.Interface,
1544
+ insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet
1539
1545
  });
1540
1546
  });
1541
1547
  }
@@ -1920,14 +1926,14 @@ function a() {
1920
1926
  "格式化打印",
1921
1927
  "printf($1)"
1922
1928
  ]
1923
- ].forEach(([t, n, r]) => {
1929
+ ].forEach(([e, n, r]) => {
1924
1930
  s.push({
1925
- label: t,
1931
+ label: e,
1926
1932
  detail: n,
1927
1933
  insertText: r,
1928
1934
  range: i,
1929
- kind: e.languages.CompletionItemKind.Method,
1930
- insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet
1935
+ kind: t.languages.CompletionItemKind.Method,
1936
+ insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet
1931
1937
  });
1932
1938
  }), o.length >= 1 && [
1933
1939
  [
@@ -2275,21 +2281,21 @@ function a() {
2275
2281
  "DateTimeFormatter",
2276
2282
  "DateTimeFormatter.ofPattern(\"$1\")"
2277
2283
  ]
2278
- ].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([t, n, r]) => {
2284
+ ].filter(([e]) => e.toLowerCase().startsWith(o)).forEach(([e, n, r]) => {
2279
2285
  s.push({
2280
- label: t,
2286
+ label: e,
2281
2287
  detail: n,
2282
2288
  insertText: r,
2283
2289
  range: i,
2284
- kind: e.languages.CompletionItemKind.Snippet,
2285
- insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet,
2286
- sortText: "1" + t
2290
+ kind: t.languages.CompletionItemKind.Snippet,
2291
+ insertTextRules: t.languages.CompletionItemInsertTextRule.InsertAsSnippet,
2292
+ sortText: "1" + e
2287
2293
  });
2288
2294
  }), { suggestions: s };
2289
2295
  }
2290
2296
  }));
2291
2297
  }
2292
2298
  //#endregion
2293
- export { t as conf, r as defineJavaThemes, n as language, a as registerJavaCompletion };
2299
+ export { s as a, i, a as n, n as r, r as t };
2294
2300
 
2295
- //# sourceMappingURL=java-XIxqoWBD.js.map
2301
+ //# sourceMappingURL=java-CanB8gLZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-CanB8gLZ.js","names":[],"sources":["../src/components/FormComponent/FormCodeEditor/language/java.ts"],"sourcesContent":["import * as monaco from 'monaco-editor';\r\n\r\nconst conf = {\r\n // the default separators except `@$`\r\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\r\n comments: {\r\n lineComment: \"//\",\r\n blockComment: [\"/*\", \"*/\"]\r\n },\r\n brackets: [\r\n [\"{\", \"}\"],\r\n [\"[\", \"]\"],\r\n [\"(\", \")\"]\r\n ],\r\n autoClosingPairs: [\r\n { open: \"{\", close: \"}\" },\r\n { open: \"[\", close: \"]\" },\r\n { open: \"(\", close: \")\" },\r\n { open: '\"', close: '\"' },\r\n { open: \"'\", close: \"'\" }\r\n ],\r\n surroundingPairs: [\r\n { open: \"{\", close: \"}\" },\r\n { open: \"[\", close: \"]\" },\r\n { open: \"(\", close: \")\" },\r\n { open: '\"', close: '\"' },\r\n { open: \"'\", close: \"'\" },\r\n { open: \"<\", close: \">\" }\r\n ],\r\n folding: {\r\n markers: {\r\n start: new RegExp(\"^\\\\s*//\\\\s*(?:(?:#?region\\\\b)|(?:<editor-fold\\\\b))\"),\r\n end: new RegExp(\"^\\\\s*//\\\\s*(?:(?:#?endregion\\\\b)|(?:</editor-fold>))\")\r\n }\r\n }\r\n};\r\nconst language = {\r\n defaultToken: \"\",\r\n tokenPostfix: \".java\",\r\n keywords: [\r\n \"abstract\",\r\n \"continue\",\r\n \"for\",\r\n \"new\",\r\n \"switch\",\r\n \"assert\",\r\n \"default\",\r\n \"goto\",\r\n \"package\",\r\n \"synchronized\",\r\n \"boolean\",\r\n \"do\",\r\n \"if\",\r\n \"private\",\r\n \"this\",\r\n \"break\",\r\n \"double\",\r\n \"implements\",\r\n \"protected\",\r\n \"throw\",\r\n \"byte\",\r\n \"else\",\r\n \"import\",\r\n \"public\",\r\n \"throws\",\r\n \"case\",\r\n \"enum\",\r\n \"instanceof\",\r\n \"return\",\r\n \"transient\",\r\n \"catch\",\r\n \"extends\",\r\n \"int\",\r\n \"short\",\r\n \"try\",\r\n \"char\",\r\n \"final\",\r\n \"interface\",\r\n \"static\",\r\n \"void\",\r\n \"class\",\r\n \"finally\",\r\n \"long\",\r\n \"strictfp\",\r\n \"volatile\",\r\n \"const\",\r\n \"float\",\r\n \"native\",\r\n \"super\",\r\n \"while\",\r\n \"true\",\r\n \"false\",\r\n \"yield\",\r\n \"record\",\r\n \"sealed\",\r\n \"non-sealed\",\r\n \"permits\"\r\n ],\r\n operators: [\r\n \"=\",\r\n \">\",\r\n \"<\",\r\n \"!\",\r\n \"~\",\r\n \"?\",\r\n \":\",\r\n \"==\",\r\n \"<=\",\r\n \">=\",\r\n \"!=\",\r\n \"&&\",\r\n \"||\",\r\n \"++\",\r\n \"--\",\r\n \"+\",\r\n \"-\",\r\n \"*\",\r\n \"/\",\r\n \"&\",\r\n \"|\",\r\n \"^\",\r\n \"%\",\r\n \"<<\",\r\n \">>\",\r\n \">>>\",\r\n \"+=\",\r\n \"-=\",\r\n \"*=\",\r\n \"/=\",\r\n \"&=\",\r\n \"|=\",\r\n \"^=\",\r\n \"%=\",\r\n \"<<=\",\r\n \">>=\",\r\n \">>>=\"\r\n ],\r\n // 常用类型\r\n typeKeywords: [\r\n 'String', 'Integer', 'Long', 'Double', 'Float', 'Boolean', 'Character', 'Byte', 'Short',\r\n 'Object', 'Class', 'System', 'Math', 'StringBuilder', 'StringBuffer',\r\n 'List', 'ArrayList', 'LinkedList', 'Map', 'HashMap', 'TreeMap', 'LinkedHashMap',\r\n 'Set', 'HashSet', 'TreeSet', 'LinkedHashSet', 'Queue', 'Deque', 'Stack',\r\n 'Collection', 'Collections', 'Arrays', 'Optional', 'Stream', 'Collectors',\r\n 'Exception', 'RuntimeException', 'Error', 'Throwable',\r\n 'Thread', 'Runnable', 'Callable', 'Future', 'CompletableFuture',\r\n 'Date', 'LocalDate', 'LocalTime', 'LocalDateTime', 'Instant', 'Duration',\r\n 'File', 'Path', 'Files', 'InputStream', 'OutputStream', 'Reader', 'Writer',\r\n 'Pattern', 'Matcher', 'Scanner', 'Random', 'UUID',\r\n 'BigDecimal', 'BigInteger', 'AtomicInteger', 'AtomicLong',\r\n 'Comparator', 'Comparable', 'Iterator', 'Iterable',\r\n 'Function', 'Consumer', 'Supplier', 'Predicate', 'BiFunction',\r\n ],\r\n // we include these common regular expressions\r\n symbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\r\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\r\n digits: /\\d+(_+\\d+)*/,\r\n octaldigits: /[0-7]+(_+[0-7]+)*/,\r\n binarydigits: /[0-1]+(_+[0-1]+)*/,\r\n hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\r\n // The main tokenizer for our languages\r\n tokenizer: {\r\n root: [\r\n // Special keyword with a dash\r\n [\"non-sealed\", \"keyword.non-sealed\"],\r\n // 方法调用 - xxx.method() 中的 method 显示为函数色\r\n [/([a-zA-Z_$][\\w$]*)(\\s*)(\\()/, [\r\n {\r\n cases: {\r\n \"@keywords\": \"keyword.$0\",\r\n \"@typeKeywords\": \"type\",\r\n \"@default\": \"function\"\r\n }\r\n },\r\n \"\",\r\n \"@brackets\"\r\n ]],\r\n // 类名 - 大写开头的标识符\r\n [/[A-Z][\\w$]*/, {\r\n cases: {\r\n \"@keywords\": \"keyword.$0\",\r\n \"@typeKeywords\": \"type\",\r\n \"@default\": \"type\"\r\n }\r\n }],\r\n // identifiers and keywords\r\n [\r\n /[a-z_$][\\w$]*/,\r\n {\r\n cases: {\r\n \"@keywords\": { token: \"keyword.$0\" },\r\n \"@default\": \"identifier\"\r\n }\r\n }\r\n ],\r\n // whitespace\r\n { include: \"@whitespace\" },\r\n // delimiters and operators\r\n [/[{}()\\[\\]]/, \"@brackets\"],\r\n [/[<>](?!@symbols)/, \"@brackets\"],\r\n [\r\n /@symbols/,\r\n {\r\n cases: {\r\n \"@operators\": \"delimiter\",\r\n \"@default\": \"\"\r\n }\r\n }\r\n ],\r\n // @ annotations.\r\n [/@\\s*[a-zA-Z_\\$][\\w\\$]*/, \"annotation\"],\r\n // numbers\r\n [/(@digits)[eE]([\\-+]?(@digits))?[fFdD]?/, \"number.float\"],\r\n [/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?[fFdD]?/, \"number.float\"],\r\n [/0[xX](@hexdigits)[Ll]?/, \"number.hex\"],\r\n [/0(@octaldigits)[Ll]?/, \"number.octal\"],\r\n [/0[bB](@binarydigits)[Ll]?/, \"number.binary\"],\r\n [/(@digits)[fFdD]/, \"number.float\"],\r\n [/(@digits)[lL]?/, \"number\"],\r\n // delimiter: after number because of .\\d floats\r\n [/[;,.]/, \"delimiter\"],\r\n // strings\r\n [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\r\n // non-teminated string\r\n [/\"\"\"/, \"string\", \"@multistring\"],\r\n [/\"/, \"string\", \"@string\"],\r\n // characters\r\n [/'[^\\\\']'/, \"string\"],\r\n [/(')(@escapes)(')/, [\"string\", \"string.escape\", \"string\"]],\r\n [/'/, \"string.invalid\"]\r\n ],\r\n whitespace: [\r\n [/[ \\t\\r\\n]+/, \"\"],\r\n [/\\/\\*\\*(?!\\/)/, \"comment.doc\", \"@javadoc\"],\r\n [/\\/\\*/, \"comment\", \"@comment\"],\r\n [/\\/\\/.*$/, \"comment\"]\r\n ],\r\n comment: [\r\n [/[^\\/*]+/, \"comment\"],\r\n // [/\\/\\*/, 'comment', '@push' ], // nested comment not allowed :-(\r\n // [/\\/\\*/, 'comment.invalid' ], // this breaks block comments in the shape of /* //*/\r\n [/\\*\\//, \"comment\", \"@pop\"],\r\n [/[\\/*]/, \"comment\"]\r\n ],\r\n //Identical copy of comment above, except for the addition of .doc\r\n javadoc: [\r\n [/[^\\/*]+/, \"comment.doc\"],\r\n // [/\\/\\*/, 'comment.doc', '@push' ], // nested comment not allowed :-(\r\n [/\\/\\*/, \"comment.doc.invalid\"],\r\n [/\\*\\//, \"comment.doc\", \"@pop\"],\r\n [/[\\/*]/, \"comment.doc\"]\r\n ],\r\n string: [\r\n [/[^\\\\\"]+/, \"string\"],\r\n [/@escapes/, \"string.escape\"],\r\n [/\\\\./, \"string.escape.invalid\"],\r\n [/\"/, \"string\", \"@pop\"]\r\n ],\r\n multistring: [\r\n [/[^\\\\\"]+/, \"string\"],\r\n [/@escapes/, \"string.escape\"],\r\n [/\\\\./, \"string.escape.invalid\"],\r\n [/\"\"\"/, \"string\", \"@pop\"],\r\n [/./, \"string\"]\r\n ]\r\n }\r\n};\r\n\r\nfunction defineJavaThemes() {\r\n // Java 暗色主题\r\n monaco.editor.defineTheme('java-dark', {\r\n base: 'vs-dark',\r\n inherit: true,\r\n rules: [\r\n { token: 'keyword', foreground: '569CD6' },\r\n { token: 'keyword.package', foreground: 'C586C0' },\r\n { token: 'keyword.import', foreground: 'C586C0' },\r\n { token: 'keyword.class', foreground: '569CD6' },\r\n { token: 'keyword.interface', foreground: '569CD6' },\r\n { token: 'keyword.public', foreground: '569CD6' },\r\n { token: 'keyword.private', foreground: '569CD6' },\r\n { token: 'keyword.protected', foreground: '569CD6' },\r\n { token: 'keyword.static', foreground: '569CD6' },\r\n { token: 'keyword.final', foreground: '569CD6' },\r\n { token: 'keyword.void', foreground: '569CD6' },\r\n { token: 'keyword.return', foreground: 'C586C0' },\r\n { token: 'keyword.new', foreground: '569CD6' },\r\n { token: 'keyword.if', foreground: 'C586C0' },\r\n { token: 'keyword.else', foreground: 'C586C0' },\r\n { token: 'keyword.for', foreground: 'C586C0' },\r\n { token: 'keyword.while', foreground: 'C586C0' },\r\n { token: 'keyword.try', foreground: 'C586C0' },\r\n { token: 'keyword.catch', foreground: 'C586C0' },\r\n { token: 'keyword.throw', foreground: 'C586C0' },\r\n { token: 'keyword.throws', foreground: 'C586C0' },\r\n { token: 'type', foreground: '4EC9B0' }, // 青色 - 类型/类名\r\n { token: 'function', foreground: 'DCDCAA' }, // 黄色 - 方法名\r\n { token: 'annotation', foreground: 'D7BA7D' }, // 金色 - 注解\r\n { token: 'string', foreground: 'CE9178' }, // 橙色 - 字符串\r\n { token: 'number', foreground: 'B5CEA8' }, // 浅绿 - 数字\r\n { token: 'comment', foreground: '6A9955' }, // 绿色 - 注释\r\n { token: 'comment.doc', foreground: '6A9955' },\r\n { token: 'identifier', foreground: '9CDCFE' }, // 浅蓝 - 变量\r\n { token: 'delimiter', foreground: 'D4D4D4' },\r\n ],\r\n colors: {},\r\n });\r\n\r\n // Java 亮色主题\r\n monaco.editor.defineTheme('java-light', {\r\n base: 'vs',\r\n inherit: true,\r\n rules: [\r\n { token: 'keyword', foreground: '0000FF' },\r\n { token: 'keyword.package', foreground: 'AF00DB' },\r\n { token: 'keyword.import', foreground: 'AF00DB' },\r\n { token: 'keyword.return', foreground: 'AF00DB' },\r\n { token: 'keyword.if', foreground: 'AF00DB' },\r\n { token: 'keyword.else', foreground: 'AF00DB' },\r\n { token: 'keyword.for', foreground: 'AF00DB' },\r\n { token: 'keyword.while', foreground: 'AF00DB' },\r\n { token: 'keyword.try', foreground: 'AF00DB' },\r\n { token: 'keyword.catch', foreground: 'AF00DB' },\r\n { token: 'keyword.throw', foreground: 'AF00DB' },\r\n { token: 'type', foreground: '267F99' }, // 青色 - 类型/类名\r\n { token: 'function', foreground: '795E26' }, // 棕黄 - 方法名\r\n { token: 'annotation', foreground: '808000' }, // 橄榄 - 注解\r\n { token: 'string', foreground: 'A31515' }, // 红色 - 字符串\r\n { token: 'number', foreground: '098658' }, // 绿色 - 数字\r\n { token: 'comment', foreground: '008000' }, // 绿色 - 注释\r\n { token: 'identifier', foreground: '001080' }, // 深蓝 - 变量\r\n ],\r\n colors: {},\r\n });\r\n}\r\n\r\nlet javaCompletionRegistered = false;\r\n\r\nfunction registerJavaCompletion() {\r\n if (javaCompletionRegistered) return;\r\n javaCompletionRegistered = true;\r\n\r\n monaco.languages.registerCompletionItemProvider('java', {\r\n triggerCharacters: ['.', '@', ' '],\r\n provideCompletionItems: (model, position) => {\r\n const word = model.getWordUntilPosition(position);\r\n const range = {\r\n startLineNumber: position.lineNumber,\r\n endLineNumber: position.lineNumber,\r\n startColumn: word.startColumn,\r\n endColumn: word.endColumn,\r\n };\r\n const line = model.getLineContent(position.lineNumber);\r\n const before = line.substring(0, position.column - 1);\r\n const currentWord = word.word.toLowerCase();\r\n const suggestions: monaco.languages.CompletionItem[] = [];\r\n\r\n // Java 关键字和类型 - 只要有输入就提示\r\n if (currentWord.length >= 1) {\r\n const keywords: [string, string, string][] = [\r\n // 访问修饰符\r\n ['public', '公共访问', 'public '],\r\n ['private', '私有访问', 'private '],\r\n ['protected', '受保护访问', 'protected '],\r\n // 修饰符\r\n ['static', '静态', 'static '],\r\n ['final', '最终', 'final '],\r\n ['abstract', '抽象', 'abstract '],\r\n ['native', '本地方法', 'native '],\r\n ['strictfp', '严格浮点', 'strictfp '],\r\n ['synchronized', '同步', 'synchronized '],\r\n ['volatile', '易变', 'volatile '],\r\n ['transient', '瞬态', 'transient '],\r\n // 类型声明\r\n ['class', '类', 'class $1 {\\n $2\\n}'],\r\n ['interface', '接口', 'interface $1 {\\n $2\\n}'],\r\n ['enum', '枚举', 'enum $1 {\\n $2\\n}'],\r\n ['record', '记录类', 'record $1($2) {}'],\r\n ['@interface', '注解定义', '@interface $1 {\\n $2\\n}'],\r\n // 继承实现\r\n ['extends', '继承', 'extends '],\r\n ['implements', '实现', 'implements '],\r\n ['permits', '允许', 'permits '],\r\n ['sealed', '密封类', 'sealed '],\r\n ['non-sealed', '非密封', 'non-sealed '],\r\n // 包和导入\r\n ['package', '包声明', 'package $1;'],\r\n ['import', '导入', 'import $1;'],\r\n ['import static', '静态导入', 'import static $1;'],\r\n // 控制流\r\n ['if', '条件判断', 'if ($1) {\\n $2\\n}'],\r\n ['else', '否则', 'else {\\n $1\\n}'],\r\n ['else if', '否则如果', 'else if ($1) {\\n $2\\n}'],\r\n ['switch', 'switch语句', 'switch ($1) {\\n case $2 -> $3;\\n default -> $4;\\n}'],\r\n ['case', 'case分支', 'case $1 -> $2;'],\r\n ['default', '默认', 'default -> $1;'],\r\n ['for', 'for循环', 'for (int i = 0; i < $1; i++) {\\n $2\\n}'],\r\n ['while', 'while循环', 'while ($1) {\\n $2\\n}'],\r\n ['do', 'do-while', 'do {\\n $1\\n} while ($2);'],\r\n ['break', '跳出循环', 'break;'],\r\n ['continue', '继续循环', 'continue;'],\r\n ['return', '返回', 'return $1;'],\r\n ['yield', 'yield返回', 'yield $1;'],\r\n // 异常处理\r\n ['try', 'try块', 'try {\\n $1\\n} catch (Exception e) {\\n $2\\n}'],\r\n ['catch', 'catch块', 'catch ($1 e) {\\n $2\\n}'],\r\n ['finally', 'finally块', 'finally {\\n $1\\n}'],\r\n ['throw', '抛出异常', 'throw new $1(\"$2\");'],\r\n ['throws', '声明异常', 'throws $1'],\r\n // 对象操作\r\n ['new', '创建对象', 'new $1($2)'],\r\n ['this', '当前对象', 'this'],\r\n ['super', '父类引用', 'super'],\r\n ['instanceof', '类型检查', 'instanceof $1'],\r\n ['var', '类型推断', 'var $1 = $2;'],\r\n // 断言\r\n ['assert', '断言', 'assert $1 : \"$2\";'],\r\n // 常量\r\n ['null', '空值', 'null'],\r\n ['true', '真', 'true'],\r\n ['false', '假', 'false'],\r\n \r\n // 基本类型\r\n ['void', '无返回值', 'void'],\r\n ['boolean', '布尔型', 'boolean'],\r\n ['byte', '字节型', 'byte'],\r\n ['short', '短整型', 'short'],\r\n ['int', '整型', 'int'],\r\n ['long', '长整型', 'long'],\r\n ['float', '单精度浮点', 'float'],\r\n ['double', '双精度浮点', 'double'],\r\n ['char', '字符型', 'char'],\r\n \r\n // 包装类\r\n ['Boolean', '布尔包装类', 'Boolean'],\r\n ['Byte', '字节包装类', 'Byte'],\r\n ['Short', '短整型包装类', 'Short'],\r\n ['Integer', '整型包装类', 'Integer'],\r\n ['Long', '长整型包装类', 'Long'],\r\n ['Float', '单精度包装类', 'Float'],\r\n ['Double', '双精度包装类', 'Double'],\r\n ['Character', '字符包装类', 'Character'],\r\n ['Number', '数字基类', 'Number'],\r\n \r\n // 常用类\r\n ['String', '字符串', 'String'],\r\n ['StringBuilder', '字符串构建器', 'StringBuilder'],\r\n ['StringBuffer', '线程安全字符串', 'StringBuffer'],\r\n ['Object', '对象基类', 'Object'],\r\n ['Class', '类对象', 'Class<$1>'],\r\n ['System', '系统类', 'System'],\r\n ['Math', '数学类', 'Math'],\r\n ['Arrays', '数组工具', 'Arrays'],\r\n ['Objects', '对象工具', 'Objects'],\r\n ['Collections', '集合工具', 'Collections'],\r\n \r\n // 集合类\r\n ['List', '列表接口', 'List<$1>'],\r\n ['ArrayList', '数组列表', 'new ArrayList<$1>()'],\r\n ['LinkedList', '链表', 'new LinkedList<$1>()'],\r\n ['Set', '集合接口', 'Set<$1>'],\r\n ['HashSet', '哈希集合', 'new HashSet<$1>()'],\r\n ['TreeSet', '树集合', 'new TreeSet<$1>()'],\r\n ['LinkedHashSet', '有序哈希集合', 'new LinkedHashSet<$1>()'],\r\n ['Map', '映射接口', 'Map<$1, $2>'],\r\n ['HashMap', '哈希映射', 'new HashMap<$1, $2>()'],\r\n ['TreeMap', '树映射', 'new TreeMap<$1, $2>()'],\r\n ['LinkedHashMap', '有序哈希映射', 'new LinkedHashMap<$1, $2>()'],\r\n ['ConcurrentHashMap', '并发哈希映射', 'new ConcurrentHashMap<$1, $2>()'],\r\n ['Queue', '队列接口', 'Queue<$1>'],\r\n ['Deque', '双端队列', 'Deque<$1>'],\r\n ['Stack', '栈', 'new Stack<$1>()'],\r\n ['Vector', '向量', 'new Vector<$1>()'],\r\n ['Collection', '集合接口', 'Collection<$1>'],\r\n ['Iterable', '可迭代接口', 'Iterable<$1>'],\r\n ['Iterator', '迭代器', 'Iterator<$1>'],\r\n \r\n // Optional\r\n ['Optional', 'Optional容器', 'Optional<$1>'],\r\n ['OptionalInt', 'int的Optional', 'OptionalInt'],\r\n ['OptionalLong', 'long的Optional', 'OptionalLong'],\r\n ['OptionalDouble', 'double的Optional', 'OptionalDouble'],\r\n \r\n // Stream\r\n ['Stream', '流', 'Stream<$1>'],\r\n ['IntStream', 'int流', 'IntStream'],\r\n ['LongStream', 'long流', 'LongStream'],\r\n ['DoubleStream', 'double流', 'DoubleStream'],\r\n ['Collectors', '收集器', 'Collectors'],\r\n \r\n // 函数式接口\r\n ['Function', '函数接口', 'Function<$1, $2>'],\r\n ['BiFunction', '双参数函数', 'BiFunction<$1, $2, $3>'],\r\n ['Consumer', '消费者接口', 'Consumer<$1>'],\r\n ['BiConsumer', '双参数消费者', 'BiConsumer<$1, $2>'],\r\n ['Supplier', '供应者接口', 'Supplier<$1>'],\r\n ['Predicate', '断言接口', 'Predicate<$1>'],\r\n ['BiPredicate', '双参数断言', 'BiPredicate<$1, $2>'],\r\n ['UnaryOperator', '一元操作符', 'UnaryOperator<$1>'],\r\n ['BinaryOperator', '二元操作符', 'BinaryOperator<$1>'],\r\n ['Comparator', '比较器', 'Comparator<$1>'],\r\n ['Comparable', '可比较接口', 'Comparable<$1>'],\r\n ['Runnable', '可运行接口', 'Runnable'],\r\n ['Callable', '可调用接口', 'Callable<$1>'],\r\n \r\n // 异常类\r\n ['Exception', '异常', 'Exception'],\r\n ['RuntimeException', '运行时异常', 'RuntimeException'],\r\n ['NullPointerException', '空指针异常', 'NullPointerException'],\r\n ['IllegalArgumentException', '非法参数异常', 'IllegalArgumentException'],\r\n ['IllegalStateException', '非法状态异常', 'IllegalStateException'],\r\n ['IndexOutOfBoundsException', '索引越界异常', 'IndexOutOfBoundsException'],\r\n ['IOException', 'IO异常', 'IOException'],\r\n ['FileNotFoundException', '文件未找到异常', 'FileNotFoundException'],\r\n ['SQLException', 'SQL异常', 'SQLException'],\r\n ['ClassNotFoundException', '类未找到异常', 'ClassNotFoundException'],\r\n ['NoSuchMethodException', '方法未找到异常', 'NoSuchMethodException'],\r\n ['Error', '错误', 'Error'],\r\n ['Throwable', '可抛出', 'Throwable'],\r\n \r\n // 并发类\r\n ['Thread', '线程', 'Thread'],\r\n ['Future', 'Future接口', 'Future<$1>'],\r\n ['CompletableFuture', '可完成Future', 'CompletableFuture<$1>'],\r\n ['ExecutorService', '执行器服务', 'ExecutorService'],\r\n ['Executors', '执行器工厂', 'Executors'],\r\n ['ThreadPoolExecutor', '线程池执行器', 'ThreadPoolExecutor'],\r\n ['CountDownLatch', '倒计时门闩', 'CountDownLatch'],\r\n ['CyclicBarrier', '循环屏障', 'CyclicBarrier'],\r\n ['Semaphore', '信号量', 'Semaphore'],\r\n ['ReentrantLock', '可重入锁', 'ReentrantLock'],\r\n ['AtomicInteger', '原子整数', 'AtomicInteger'],\r\n ['AtomicLong', '原子长整数', 'AtomicLong'],\r\n ['AtomicBoolean', '原子布尔', 'AtomicBoolean'],\r\n ['AtomicReference', '原子引用', 'AtomicReference<$1>'],\r\n \r\n // 日期时间\r\n ['Date', '日期(旧)', 'Date'],\r\n ['Calendar', '日历(旧)', 'Calendar'],\r\n ['LocalDate', '本地日期', 'LocalDate'],\r\n ['LocalTime', '本地时间', 'LocalTime'],\r\n ['LocalDateTime', '本地日期时间', 'LocalDateTime'],\r\n ['ZonedDateTime', '带时区日期时间', 'ZonedDateTime'],\r\n ['Instant', '时间戳', 'Instant'],\r\n ['Duration', '时间段', 'Duration'],\r\n ['Period', '日期段', 'Period'],\r\n ['DateTimeFormatter', '日期格式化', 'DateTimeFormatter'],\r\n \r\n // IO类\r\n ['File', '文件', 'File'],\r\n ['Path', '路径', 'Path'],\r\n ['Paths', '路径工具', 'Paths'],\r\n ['Files', '文件工具', 'Files'],\r\n ['InputStream', '输入流', 'InputStream'],\r\n ['OutputStream', '输出流', 'OutputStream'],\r\n ['FileInputStream', '文件输入流', 'FileInputStream'],\r\n ['FileOutputStream', '文件输出流', 'FileOutputStream'],\r\n ['BufferedReader', '缓冲读取器', 'BufferedReader'],\r\n ['BufferedWriter', '缓冲写入器', 'BufferedWriter'],\r\n ['Reader', '读取器', 'Reader'],\r\n ['Writer', '写入器', 'Writer'],\r\n \r\n // 其他常用\r\n ['BigDecimal', '高精度小数', 'BigDecimal'],\r\n ['BigInteger', '高精度整数', 'BigInteger'],\r\n ['UUID', 'UUID', 'UUID'],\r\n ['Random', '随机数', 'Random'],\r\n ['Pattern', '正则模式', 'Pattern'],\r\n ['Matcher', '正则匹配器', 'Matcher'],\r\n ['Scanner', '扫描器', 'Scanner'],\r\n ['Enum', '枚举基类', 'Enum'],\r\n ['Annotation', '注解接口', 'Annotation'],\r\n ['Override', '重写注解', '@Override'],\r\n ['Deprecated', '弃用注解', '@Deprecated'],\r\n ['SuppressWarnings', '抑制警告', '@SuppressWarnings(\"$1\")'],\r\n ];\r\n keywords.filter(([label]) => label.toLowerCase().startsWith(currentWord)).forEach(([label, detail, text]) => {\r\n suggestions.push({ \r\n label, \r\n detail, \r\n insertText: text, \r\n range, \r\n kind: monaco.languages.CompletionItemKind.Keyword, \r\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\r\n sortText: '0' + label, // 优先显示\r\n });\r\n });\r\n }\r\n\r\n // 注解\r\n if (before.endsWith('@') || /@\\w*$/.test(before)) {\r\n const annotations: [string, string, string][] = [\r\n ['@Override', '重写方法', '@Override'],\r\n ['@Deprecated', '已弃用', '@Deprecated'],\r\n ['@SuppressWarnings', '抑制警告', '@SuppressWarnings(\"$1\")'],\r\n ['@FunctionalInterface', '函数式接口', '@FunctionalInterface'],\r\n ['@SafeVarargs', '安全可变参数', '@SafeVarargs'],\r\n ['@Autowired', 'Spring自动注入', '@Autowired'],\r\n ['@Component', 'Spring组件', '@Component'],\r\n ['@Service', 'Spring服务', '@Service'],\r\n ['@Repository', 'Spring仓库', '@Repository'],\r\n ['@Controller', 'Spring控制器', '@Controller'],\r\n ['@RestController', 'REST控制器', '@RestController'],\r\n ['@RequestMapping', '请求映射', '@RequestMapping(\"$1\")'],\r\n ['@GetMapping', 'GET请求', '@GetMapping(\"$1\")'],\r\n ['@PostMapping', 'POST请求', '@PostMapping(\"$1\")'],\r\n ['@PutMapping', 'PUT请求', '@PutMapping(\"$1\")'],\r\n ['@DeleteMapping', 'DELETE请求', '@DeleteMapping(\"$1\")'],\r\n ['@PathVariable', '路径变量', '@PathVariable'],\r\n ['@RequestParam', '请求参数', '@RequestParam'],\r\n ['@RequestBody', '请求体', '@RequestBody'],\r\n ['@ResponseBody', '响应体', '@ResponseBody'],\r\n ['@Bean', 'Spring Bean', '@Bean'],\r\n ['@Configuration', '配置类', '@Configuration'],\r\n ['@Value', '注入值', '@Value(\"${$1}\")'],\r\n ['@Transactional', '事务', '@Transactional'],\r\n ['@Slf4j', 'Lombok日志', '@Slf4j'],\r\n ['@Data', 'Lombok数据类', '@Data'],\r\n ['@Getter', 'Lombok Getter', '@Getter'],\r\n ['@Setter', 'Lombok Setter', '@Setter'],\r\n ['@NoArgsConstructor', '无参构造', '@NoArgsConstructor'],\r\n ['@AllArgsConstructor', '全参构造', '@AllArgsConstructor'],\r\n ['@Builder', 'Lombok Builder', '@Builder'],\r\n ['@ToString', 'Lombok ToString', '@ToString'],\r\n ['@EqualsAndHashCode', 'Lombok Equals/HashCode', '@EqualsAndHashCode'],\r\n ['@Test', 'JUnit测试', '@Test'],\r\n ['@BeforeEach', 'JUnit前置', '@BeforeEach'],\r\n ['@AfterEach', 'JUnit后置', '@AfterEach'],\r\n ['@Nullable', '可空', '@Nullable'],\r\n ['@NotNull', '非空', '@NotNull'],\r\n ['@Valid', '验证', '@Valid'],\r\n ];\r\n const atIndex = before.lastIndexOf('@');\r\n const typed = before.substring(atIndex + 1).toLowerCase();\r\n const annotationRange = {\r\n startLineNumber: position.lineNumber,\r\n endLineNumber: position.lineNumber,\r\n startColumn: atIndex + 1,\r\n endColumn: position.column,\r\n };\r\n annotations.filter(([label]) => typed.length === 0 || label.toLowerCase().includes(typed)).forEach(([label, detail, text]) => {\r\n suggestions.push({ label, detail, insertText: text, range: annotationRange, kind: monaco.languages.CompletionItemKind.Interface, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet });\r\n });\r\n }\r\n\r\n // 常用方法 - 在 . 后触发\r\n if (before.endsWith('.')) {\r\n const methods: [string, string, string][] = [\r\n // Object 方法\r\n ['toString()', '转字符串', 'toString()'],\r\n ['equals()', '比较相等', 'equals($1)'],\r\n ['hashCode()', '哈希码', 'hashCode()'],\r\n ['getClass()', '获取类', 'getClass()'],\r\n // String 方法\r\n ['length()', '字符串长度', 'length()'],\r\n ['isEmpty()', '是否为空', 'isEmpty()'],\r\n ['isBlank()', '是否空白', 'isBlank()'],\r\n ['trim()', '去除空格', 'trim()'],\r\n ['strip()', '去除空白', 'strip()'],\r\n ['toLowerCase()', '转小写', 'toLowerCase()'],\r\n ['toUpperCase()', '转大写', 'toUpperCase()'],\r\n ['substring()', '截取子串', 'substring($1, $2)'],\r\n ['charAt()', '获取字符', 'charAt($1)'],\r\n ['indexOf()', '查找索引', 'indexOf($1)'],\r\n ['lastIndexOf()', '最后索引', 'lastIndexOf($1)'],\r\n ['contains()', '是否包含', 'contains($1)'],\r\n ['startsWith()', '是否开头', 'startsWith($1)'],\r\n ['endsWith()', '是否结尾', 'endsWith($1)'],\r\n ['replace()', '替换', 'replace($1, $2)'],\r\n ['replaceAll()', '正则替换', 'replaceAll($1, $2)'],\r\n ['split()', '分割', 'split($1)'],\r\n ['join()', '连接', 'join($1, $2)'],\r\n ['format()', '格式化', 'format($1)'],\r\n ['matches()', '正则匹配', 'matches($1)'],\r\n // Collection 方法\r\n ['add()', '添加元素', 'add($1)'],\r\n ['addAll()', '添加所有', 'addAll($1)'],\r\n ['remove()', '移除元素', 'remove($1)'],\r\n ['removeAll()', '移除所有', 'removeAll($1)'],\r\n ['clear()', '清空', 'clear()'],\r\n ['size()', '大小', 'size()'],\r\n ['get()', '获取元素', 'get($1)'],\r\n ['set()', '设置元素', 'set($1, $2)'],\r\n ['contains()', '是否包含', 'contains($1)'],\r\n ['containsAll()', '是否包含所有', 'containsAll($1)'],\r\n ['iterator()', '迭代器', 'iterator()'],\r\n ['toArray()', '转数组', 'toArray()'],\r\n ['stream()', '流', 'stream()'],\r\n ['forEach()', '遍历', 'forEach($1 -> $2)'],\r\n // Map 方法\r\n ['put()', '放入', 'put($1, $2)'],\r\n ['putAll()', '放入所有', 'putAll($1)'],\r\n ['get()', '获取', 'get($1)'],\r\n ['getOrDefault()', '获取或默认', 'getOrDefault($1, $2)'],\r\n ['containsKey()', '包含键', 'containsKey($1)'],\r\n ['containsValue()', '包含值', 'containsValue($1)'],\r\n ['keySet()', '键集合', 'keySet()'],\r\n ['values()', '值集合', 'values()'],\r\n ['entrySet()', '条目集合', 'entrySet()'],\r\n // Stream 方法\r\n ['filter()', '过滤', 'filter($1 -> $2)'],\r\n ['map()', '映射', 'map($1 -> $2)'],\r\n ['flatMap()', '扁平映射', 'flatMap($1 -> $2)'],\r\n ['sorted()', '排序', 'sorted()'],\r\n ['distinct()', '去重', 'distinct()'],\r\n ['limit()', '限制', 'limit($1)'],\r\n ['skip()', '跳过', 'skip($1)'],\r\n ['collect()', '收集', 'collect(Collectors.$1)'],\r\n ['toList()', '转列表', 'toList()'],\r\n ['findFirst()', '查找第一个', 'findFirst()'],\r\n ['findAny()', '查找任意', 'findAny()'],\r\n ['anyMatch()', '任意匹配', 'anyMatch($1 -> $2)'],\r\n ['allMatch()', '全部匹配', 'allMatch($1 -> $2)'],\r\n ['noneMatch()', '无匹配', 'noneMatch($1 -> $2)'],\r\n ['count()', '计数', 'count()'],\r\n ['reduce()', '归约', 'reduce($1, ($2, $3) -> $4)'],\r\n // Optional 方法\r\n ['isPresent()', '是否存在', 'isPresent()'],\r\n ['isEmpty()', '是否为空', 'isEmpty()'],\r\n ['get()', '获取值', 'get()'],\r\n ['orElse()', '或者', 'orElse($1)'],\r\n ['orElseGet()', '或者获取', 'orElseGet(() -> $1)'],\r\n ['orElseThrow()', '或者抛出', 'orElseThrow(() -> new $1())'],\r\n ['ifPresent()', '如果存在', 'ifPresent($1 -> $2)'],\r\n ['map()', '映射', 'map($1 -> $2)'],\r\n ['flatMap()', '扁平映射', 'flatMap($1 -> $2)'],\r\n ['filter()', '过滤', 'filter($1 -> $2)'],\r\n // 打印\r\n ['println()', '打印换行', 'println($1)'],\r\n ['print()', '打印', 'print($1)'],\r\n ['printf()', '格式化打印', 'printf($1)'],\r\n ];\r\n methods.forEach(([label, detail, text]) => {\r\n suggestions.push({ label, detail, insertText: text, range, kind: monaco.languages.CompletionItemKind.Method, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet });\r\n });\r\n }\r\n\r\n // 代码片段\r\n if (currentWord.length >= 1) {\r\n const snippets: [string, string, string][] = [\r\n // 输出\r\n ['sout', 'System.out.println', 'System.out.println($1);'],\r\n ['soutv', '打印变量', 'System.out.println(\"$1 = \" + $1);'],\r\n ['serr', 'System.err.println', 'System.err.println($1);'],\r\n ['souf', 'System.out.printf', 'System.out.printf(\"$1%n\", $2);'],\r\n \r\n // main方法\r\n ['psvm', 'main方法', 'public static void main(String[] args) {\\n $1\\n}'],\r\n ['main', 'main方法', 'public static void main(String[] args) {\\n $1\\n}'],\r\n \r\n // 方法定义\r\n ['pub', 'public方法', 'public $1 $2($3) {\\n $4\\n}'],\r\n ['priv', 'private方法', 'private $1 $2($3) {\\n $4\\n}'],\r\n ['prot', 'protected方法', 'protected $1 $2($3) {\\n $4\\n}'],\r\n ['pubsf', 'public static final', 'public static final $1 $2 = $3;'],\r\n ['privsf', 'private static final', 'private static final $1 $2 = $3;'],\r\n \r\n // 循环\r\n ['fori', 'for i循环', 'for (int i = 0; i < $1; i++) {\\n $2\\n}'],\r\n ['forr', 'for 倒序循环', 'for (int i = $1 - 1; i >= 0; i--) {\\n $2\\n}'],\r\n ['fore', '增强for循环', 'for ($1 $2 : $3) {\\n $4\\n}'],\r\n ['iter', '迭代器循环', 'for (Iterator<$1> it = $2.iterator(); it.hasNext(); ) {\\n $1 $3 = it.next();\\n $4\\n}'],\r\n ['while', 'while循环', 'while ($1) {\\n $2\\n}'],\r\n ['dowhile', 'do-while循环', 'do {\\n $1\\n} while ($2);'],\r\n \r\n // 条件\r\n ['ife', 'if-else', 'if ($1) {\\n $2\\n} else {\\n $3\\n}'],\r\n ['ifn', 'if null', 'if ($1 == null) {\\n $2\\n}'],\r\n ['ifnn', 'if not null', 'if ($1 != null) {\\n $2\\n}'],\r\n ['tern', '三元表达式', '$1 ? $2 : $3'],\r\n \r\n // 异常\r\n ['tryc', 'try-catch', 'try {\\n $1\\n} catch (Exception e) {\\n $2\\n}'],\r\n ['trycf', 'try-catch-finally', 'try {\\n $1\\n} catch (Exception e) {\\n $2\\n} finally {\\n $3\\n}'],\r\n ['tryr', 'try-with-resources', 'try ($1) {\\n $2\\n} catch (Exception e) {\\n $3\\n}'],\r\n ['throw', '抛出异常', 'throw new $1(\"$2\");'],\r\n \r\n // 集合创建\r\n ['lst', 'new ArrayList', 'List<$1> $2 = new ArrayList<>();'],\r\n ['lstaof', 'List.of', 'List.of($1)'],\r\n ['map', 'new HashMap', 'Map<$1, $2> $3 = new HashMap<>();'],\r\n ['mapof', 'Map.of', 'Map.of($1, $2)'],\r\n ['set', 'new HashSet', 'Set<$1> $2 = new HashSet<>();'],\r\n ['setof', 'Set.of', 'Set.of($1)'],\r\n \r\n // Stream\r\n ['stream', 'stream操作', '$1.stream()\\n .filter($2 -> $3)\\n .map($4 -> $5)\\n .collect(Collectors.toList())'],\r\n ['streamf', 'stream filter', '$1.stream().filter($2 -> $3).collect(Collectors.toList())'],\r\n ['streamm', 'stream map', '$1.stream().map($2 -> $3).collect(Collectors.toList())'],\r\n ['foreach', 'forEach', '$1.forEach($2 -> {\\n $3\\n});'],\r\n \r\n // Optional\r\n ['opt', 'Optional.of', 'Optional.of($1)'],\r\n ['optn', 'Optional.ofNullable', 'Optional.ofNullable($1)'],\r\n ['opte', 'Optional.empty', 'Optional.empty()'],\r\n \r\n // 日志\r\n ['log', 'log.info', 'log.info(\"$1\");'],\r\n ['logd', 'log.debug', 'log.debug(\"$1\");'],\r\n ['logw', 'log.warn', 'log.warn(\"$1\");'],\r\n ['loge', 'log.error', 'log.error(\"$1\", $2);'],\r\n ['logt', 'log.trace', 'log.trace(\"$1\");'],\r\n ['logv', 'log变量', 'log.info(\"$1 = {}\", $1);'],\r\n \r\n // 测试\r\n ['test', '@Test方法', '@Test\\nvoid $1() {\\n $2\\n}'],\r\n ['testd', '@Test带DisplayName', '@Test\\n@DisplayName(\"$1\")\\nvoid $2() {\\n $3\\n}'],\r\n ['before', '@BeforeEach', '@BeforeEach\\nvoid setUp() {\\n $1\\n}'],\r\n ['after', '@AfterEach', '@AfterEach\\nvoid tearDown() {\\n $1\\n}'],\r\n ['aseq', 'assertEquals', 'assertEquals($1, $2);'],\r\n ['asne', 'assertNotEquals', 'assertNotEquals($1, $2);'],\r\n ['ast', 'assertTrue', 'assertTrue($1);'],\r\n ['asf', 'assertFalse', 'assertFalse($1);'],\r\n ['asn', 'assertNull', 'assertNull($1);'],\r\n ['asnn', 'assertNotNull', 'assertNotNull($1);'],\r\n ['asth', 'assertThrows', 'assertThrows($1.class, () -> {\\n $2\\n});'],\r\n \r\n // Lambda\r\n ['lam', 'lambda表达式', '($1) -> $2'],\r\n ['lamb', 'lambda块', '($1) -> {\\n $2\\n}'],\r\n ['mr', '方法引用', '$1::$2'],\r\n \r\n // 构造器\r\n ['ctor', '构造方法', 'public $1($2) {\\n $3\\n}'],\r\n ['ctord', '默认构造方法', 'public $1() {\\n}'],\r\n \r\n // getter/setter\r\n ['get', 'getter方法', 'public $1 get$2() {\\n return this.$3;\\n}'],\r\n ['set', 'setter方法', 'public void set$1($2 $3) {\\n this.$3 = $3;\\n}'],\r\n ['getset', 'getter和setter', 'public $1 get$2() {\\n return this.$3;\\n}\\n\\npublic void set$2($1 $3) {\\n this.$3 = $3;\\n}'],\r\n \r\n // toString/equals/hashCode\r\n ['tostr', 'toString方法', '@Override\\npublic String toString() {\\n return \"$1{\" +\\n \"$2=\" + $2 +\\n \\'}\\';\\n}'],\r\n ['eqhc', 'equals和hashCode', '@Override\\npublic boolean equals(Object o) {\\n if (this == o) return true;\\n if (o == null || getClass() != o.getClass()) return false;\\n $1 that = ($1) o;\\n return Objects.equals($2, that.$2);\\n}\\n\\n@Override\\npublic int hashCode() {\\n return Objects.hash($2);\\n}'],\r\n \r\n // 单例\r\n ['singleton', '单例模式', 'private static final $1 INSTANCE = new $1();\\n\\nprivate $1() {}\\n\\npublic static $1 getInstance() {\\n return INSTANCE;\\n}'],\r\n \r\n // 日期时间\r\n ['now', 'LocalDateTime.now', 'LocalDateTime.now()'],\r\n ['today', 'LocalDate.now', 'LocalDate.now()'],\r\n ['dtf', 'DateTimeFormatter', 'DateTimeFormatter.ofPattern(\"$1\")'],\r\n ];\r\n snippets.filter(([label]) => label.toLowerCase().startsWith(currentWord)).forEach(([label, detail, text]) => {\r\n suggestions.push({ \r\n label, \r\n detail, \r\n insertText: text, \r\n range, \r\n kind: monaco.languages.CompletionItemKind.Snippet, \r\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\r\n sortText: '1' + label, // 片段稍后显示\r\n });\r\n });\r\n }\r\n\r\n return { suggestions };\r\n },\r\n });\r\n}\r\n\r\nexport {\r\n conf,\r\n language,\r\n registerJavaCompletion,\r\n defineJavaThemes\r\n};"],"mappings":";;;;;;;;IAEM,IAAO;CAET,aAAa;CACb,UAAU;EACN,aAAa;EACb,cAAc,CAAC,MAAM,KAAK;EAC7B;CACD,UAAU;EACN,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACb;CACD,kBAAkB;EACd;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EAC5B;CACD,kBAAkB;EACd;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EACzB;GAAE,MAAM;GAAK,OAAO;GAAK;EAC5B;CACD,SAAS,EACL,SAAS;EACL,OAAO,gBAAI,OAAO,qDAAqD;EACvE,KAAK,gBAAI,OAAO,uDAAuD;EAC1E,EACJ;CACJ,EACK,IAAW;CACb,cAAc;CACd,cAAc;CACd,UAAU,iaA0DT;CACD,WAAW,iIAsCV;CAED,cAAc,8qBAcb;CAED,SAAS;CACT,SAAS;CACT,QAAQ;CACR,aAAa;CACb,cAAc;CACd,WAAW;CAEX,WAAW;EACP,MAAM;GAEF,CAAC,cAAc,qBAAqB;GAEpC,CAAC,+BAA+B;IAC5B,EACI,OAAO;KACH,aAAa;KACb,iBAAiB;KACjB,YAAY;KACf,EACJ;IACD;IACA;IACH,CAAC;GAEF,CAAC,eAAe,EACZ,OAAO;IACH,aAAa;IACb,iBAAiB;IACjB,YAAY;IACf,EACJ,CAAC;GAEF,CACI,iBACA,EACI,OAAO;IACH,aAAa,EAAE,OAAO,cAAc;IACpC,YAAY;IACf,EACJ,CACJ;GAED,EAAE,SAAS,eAAe;GAE1B,CAAC,cAAc,YAAY;GAC3B,CAAC,oBAAoB,YAAY;GACjC,CACI,YACA,EACI,OAAO;IACH,cAAc;IACd,YAAY;IACf,EACJ,CACJ;GAED,CAAC,0BAA0B,aAAa;GAExC,CAAC,0CAA0C,eAAe;GAC1D,CAAC,qDAAqD,eAAe;GACrE,CAAC,0BAA0B,aAAa;GACxC,CAAC,wBAAwB,eAAe;GACxC,CAAC,6BAA6B,gBAAgB;GAC9C,CAAC,mBAAmB,eAAe;GACnC,CAAC,kBAAkB,SAAS;GAE5B,CAAC,SAAS,YAAY;GAEtB,CAAC,mBAAmB,iBAAiB;GAErC;IAAC;IAAO;IAAU;IAAe;GACjC;IAAC;IAAK;IAAU;IAAU;GAE1B,CAAC,YAAY,SAAS;GACtB,CAAC,oBAAoB;IAAC;IAAU;IAAiB;IAAS,CAAC;GAC3D,CAAC,KAAK,iBAAiB;GAC1B;EACD,YAAY;GACR,CAAC,cAAc,GAAG;GAClB;IAAC;IAAgB;IAAe;IAAW;GAC3C;IAAC;IAAQ;IAAW;IAAW;GAC/B,CAAC,WAAW,UAAU;GACzB;EACD,SAAS;GACL,CAAC,WAAW,UAAU;GAGtB;IAAC;IAAQ;IAAW;IAAO;GAC3B,CAAC,SAAS,UAAU;GACvB;EAED,SAAS;GACL,CAAC,WAAW,cAAc;GAE1B,CAAC,QAAQ,sBAAsB;GAC/B;IAAC;IAAQ;IAAe;IAAO;GAC/B,CAAC,SAAS,cAAc;GAC3B;EACD,QAAQ;GACJ,CAAC,WAAW,SAAS;GACrB,CAAC,YAAY,gBAAgB;GAC7B,CAAC,OAAO,wBAAwB;GAChC;IAAC;IAAK;IAAU;IAAO;GAC1B;EACD,aAAa;GACT,CAAC,WAAW,SAAS;GACrB,CAAC,YAAY,gBAAgB;GAC7B,CAAC,OAAO,wBAAwB;GAChC;IAAC;IAAO;IAAU;IAAO;GACzB,CAAC,KAAK,SAAS;GAClB;EACJ;CACJ;AAED,SAAS,IAAmB;CAyC1B,AAvCA,EAAO,OAAO,YAAY,aAAa;EACrC,MAAM;EACN,SAAS;EACT,OAAO;GACL;IAAE,OAAO;IAAW,YAAY;IAAU;GAC1C;IAAE,OAAO;IAAmB,YAAY;IAAU;GAClD;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAqB,YAAY;IAAU;GACpD;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAmB,YAAY;IAAU;GAClD;IAAE,OAAO;IAAqB,YAAY;IAAU;GACpD;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAgB,YAAY;IAAU;GAC/C;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAe,YAAY;IAAU;GAC9C;IAAE,OAAO;IAAc,YAAY;IAAU;GAC7C;IAAE,OAAO;IAAgB,YAAY;IAAU;GAC/C;IAAE,OAAO;IAAe,YAAY;IAAU;GAC9C;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAe,YAAY;IAAU;GAC9C;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAQ,YAAY;IAAU;GACvC;IAAE,OAAO;IAAY,YAAY;IAAU;GAC3C;IAAE,OAAO;IAAc,YAAY;IAAU;GAC7C;IAAE,OAAO;IAAU,YAAY;IAAU;GACzC;IAAE,OAAO;IAAU,YAAY;IAAU;GACzC;IAAE,OAAO;IAAW,YAAY;IAAU;GAC1C;IAAE,OAAO;IAAe,YAAY;IAAU;GAC9C;IAAE,OAAO;IAAc,YAAY;IAAU;GAC7C;IAAE,OAAO;IAAa,YAAY;IAAU;GAC7C;EACD,QAAQ,EAAE;EACX,CAAC,EAGF,EAAO,OAAO,YAAY,cAAc;EACtC,MAAM;EACN,SAAS;EACT,OAAO;GACL;IAAE,OAAO;IAAW,YAAY;IAAU;GAC1C;IAAE,OAAO;IAAmB,YAAY;IAAU;GAClD;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAkB,YAAY;IAAU;GACjD;IAAE,OAAO;IAAc,YAAY;IAAU;GAC7C;IAAE,OAAO;IAAgB,YAAY;IAAU;GAC/C;IAAE,OAAO;IAAe,YAAY;IAAU;GAC9C;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAe,YAAY;IAAU;GAC9C;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAiB,YAAY;IAAU;GAChD;IAAE,OAAO;IAAQ,YAAY;IAAU;GACvC;IAAE,OAAO;IAAY,YAAY;IAAU;GAC3C;IAAE,OAAO;IAAc,YAAY;IAAU;GAC7C;IAAE,OAAO;IAAU,YAAY;IAAU;GACzC;IAAE,OAAO;IAAU,YAAY;IAAU;GACzC;IAAE,OAAO;IAAW,YAAY;IAAU;GAC1C;IAAE,OAAO;IAAc,YAAY;IAAU;GAC9C;EACD,QAAQ,EAAE;EACX,CAAC;;AAGJ,IAAI,IAA2B;AAE/B,SAAS,IAAyB;CAC5B,MACJ,IAA2B,IAE3B,EAAO,UAAU,+BAA+B,QAAQ;EACtD,mBAAmB;GAAC;GAAK;GAAK;GAAI;EAClC,yBAAyB,GAAO,MAAa;GAC3C,IAAM,IAAO,EAAM,qBAAqB,EAAS,EAC3C,IAAQ;IACZ,iBAAiB,EAAS;IAC1B,eAAe,EAAS;IACxB,aAAa,EAAK;IAClB,WAAW,EAAK;IACjB,EAEK,IADO,EAAM,eAAe,EAAS,WAC5B,CAAK,UAAU,GAAG,EAAS,SAAS,EAAE,EAC/C,IAAc,EAAK,KAAK,aAAa,EACrC,IAAiD,EAAE;GA2OzD,IAxOI,EAAY,UAAU,KA0NxB;IAvNE;KAAC;KAAU;KAAQ;KAAU;IAC7B;KAAC;KAAW;KAAQ;KAAW;IAC/B;KAAC;KAAa;KAAS;KAAa;IAEpC;KAAC;KAAU;KAAM;KAAU;IAC3B;KAAC;KAAS;KAAM;KAAS;IACzB;KAAC;KAAY;KAAM;KAAY;IAC/B;KAAC;KAAU;KAAQ;KAAU;IAC7B;KAAC;KAAY;KAAQ;KAAY;IACjC;KAAC;KAAgB;KAAM;KAAgB;IACvC;KAAC;KAAY;KAAM;KAAY;IAC/B;KAAC;KAAa;KAAM;KAAa;IAEjC;KAAC;KAAS;KAAK;KAAwB;IACvC;KAAC;KAAa;KAAM;KAA4B;IAChD;KAAC;KAAQ;KAAM;KAAuB;IACtC;KAAC;KAAU;KAAO;KAAmB;IACrC;KAAC;KAAc;KAAQ;KAA6B;IAEpD;KAAC;KAAW;KAAM;KAAW;IAC7B;KAAC;KAAc;KAAM;KAAc;IACnC;KAAC;KAAW;KAAM;KAAW;IAC7B;KAAC;KAAU;KAAO;KAAU;IAC5B;KAAC;KAAc;KAAO;KAAc;IAEpC;KAAC;KAAW;KAAO;KAAc;IACjC;KAAC;KAAU;KAAM;KAAa;IAC9B;KAAC;KAAiB;KAAQ;KAAoB;IAE9C;KAAC;KAAM;KAAQ;KAAuB;IACtC;KAAC;KAAQ;KAAM;KAAoB;IACnC;KAAC;KAAW;KAAQ;KAA4B;IAChD;KAAC;KAAU;KAAY;KAA2D;IAClF;KAAC;KAAQ;KAAU;KAAiB;IACpC;KAAC;KAAW;KAAM;KAAiB;IACnC;KAAC;KAAO;KAAS;KAA4C;IAC7D;KAAC;KAAS;KAAW;KAA0B;IAC/C;KAAC;KAAM;KAAY;KAA8B;IACjD;KAAC;KAAS;KAAQ;KAAS;IAC3B;KAAC;KAAY;KAAQ;KAAY;IACjC;KAAC;KAAU;KAAM;KAAa;IAC9B;KAAC;KAAS;KAAW;KAAY;IAEjC;KAAC;KAAO;KAAQ;KAAoD;IACpE;KAAC;KAAS;KAAU;KAA4B;IAChD;KAAC;KAAW;KAAY;KAAuB;IAC/C;KAAC;KAAS;KAAQ;KAAsB;IACxC;KAAC;KAAU;KAAQ;KAAY;IAE/B;KAAC;KAAO;KAAQ;KAAa;IAC7B;KAAC;KAAQ;KAAQ;KAAO;IACxB;KAAC;KAAS;KAAQ;KAAQ;IAC1B;KAAC;KAAc;KAAQ;KAAgB;IACvC;KAAC;KAAO;KAAQ;KAAe;IAE/B;KAAC;KAAU;KAAM;KAAoB;IAErC;KAAC;KAAQ;KAAM;KAAO;IACtB;KAAC;KAAQ;KAAK;KAAO;IACrB;KAAC;KAAS;KAAK;KAAQ;IAGvB;KAAC;KAAQ;KAAQ;KAAO;IACxB;KAAC;KAAW;KAAO;KAAU;IAC7B;KAAC;KAAQ;KAAO;KAAO;IACvB;KAAC;KAAS;KAAO;KAAQ;IACzB;KAAC;KAAO;KAAM;KAAM;IACpB;KAAC;KAAQ;KAAO;KAAO;IACvB;KAAC;KAAS;KAAS;KAAQ;IAC3B;KAAC;KAAU;KAAS;KAAS;IAC7B;KAAC;KAAQ;KAAO;KAAO;IAGvB;KAAC;KAAW;KAAS;KAAU;IAC/B;KAAC;KAAQ;KAAS;KAAO;IACzB;KAAC;KAAS;KAAU;KAAQ;IAC5B;KAAC;KAAW;KAAS;KAAU;IAC/B;KAAC;KAAQ;KAAU;KAAO;IAC1B;KAAC;KAAS;KAAU;KAAQ;IAC5B;KAAC;KAAU;KAAU;KAAS;IAC9B;KAAC;KAAa;KAAS;KAAY;IACnC;KAAC;KAAU;KAAQ;KAAS;IAG5B;KAAC;KAAU;KAAO;KAAS;IAC3B;KAAC;KAAiB;KAAU;KAAgB;IAC5C;KAAC;KAAgB;KAAW;KAAe;IAC3C;KAAC;KAAU;KAAQ;KAAS;IAC5B;KAAC;KAAS;KAAO;KAAY;IAC7B;KAAC;KAAU;KAAO;KAAS;IAC3B;KAAC;KAAQ;KAAO;KAAO;IACvB;KAAC;KAAU;KAAQ;KAAS;IAC5B;KAAC;KAAW;KAAQ;KAAU;IAC9B;KAAC;KAAe;KAAQ;KAAc;IAGtC;KAAC;KAAQ;KAAQ;KAAW;IAC5B;KAAC;KAAa;KAAQ;KAAsB;IAC5C;KAAC;KAAc;KAAM;KAAuB;IAC5C;KAAC;KAAO;KAAQ;KAAU;IAC1B;KAAC;KAAW;KAAQ;KAAoB;IACxC;KAAC;KAAW;KAAO;KAAoB;IACvC;KAAC;KAAiB;KAAU;KAA0B;IACtD;KAAC;KAAO;KAAQ;KAAc;IAC9B;KAAC;KAAW;KAAQ;KAAwB;IAC5C;KAAC;KAAW;KAAO;KAAwB;IAC3C;KAAC;KAAiB;KAAU;KAA8B;IAC1D;KAAC;KAAqB;KAAU;KAAkC;IAClE;KAAC;KAAS;KAAQ;KAAY;IAC9B;KAAC;KAAS;KAAQ;KAAY;IAC9B;KAAC;KAAS;KAAK;KAAkB;IACjC;KAAC;KAAU;KAAM;KAAmB;IACpC;KAAC;KAAc;KAAQ;KAAiB;IACxC;KAAC;KAAY;KAAS;KAAe;IACrC;KAAC;KAAY;KAAO;KAAe;IAGnC;KAAC;KAAY;KAAc;KAAe;IAC1C;KAAC;KAAe;KAAgB;KAAc;IAC9C;KAAC;KAAgB;KAAiB;KAAe;IACjD;KAAC;KAAkB;KAAmB;KAAiB;IAGvD;KAAC;KAAU;KAAK;KAAa;IAC7B;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAc;KAAS;KAAa;IACrC;KAAC;KAAgB;KAAW;KAAe;IAC3C;KAAC;KAAc;KAAO;KAAa;IAGnC;KAAC;KAAY;KAAQ;KAAmB;IACxC;KAAC;KAAc;KAAS;KAAyB;IACjD;KAAC;KAAY;KAAS;KAAe;IACrC;KAAC;KAAc;KAAU;KAAqB;IAC9C;KAAC;KAAY;KAAS;KAAe;IACrC;KAAC;KAAa;KAAQ;KAAgB;IACtC;KAAC;KAAe;KAAS;KAAsB;IAC/C;KAAC;KAAiB;KAAS;KAAoB;IAC/C;KAAC;KAAkB;KAAS;KAAqB;IACjD;KAAC;KAAc;KAAO;KAAiB;IACvC;KAAC;KAAc;KAAS;KAAiB;IACzC;KAAC;KAAY;KAAS;KAAW;IACjC;KAAC;KAAY;KAAS;KAAe;IAGrC;KAAC;KAAa;KAAM;KAAY;IAChC;KAAC;KAAoB;KAAS;KAAmB;IACjD;KAAC;KAAwB;KAAS;KAAuB;IACzD;KAAC;KAA4B;KAAU;KAA2B;IAClE;KAAC;KAAyB;KAAU;KAAwB;IAC5D;KAAC;KAA6B;KAAU;KAA4B;IACpE;KAAC;KAAe;KAAQ;KAAc;IACtC;KAAC;KAAyB;KAAW;KAAwB;IAC7D;KAAC;KAAgB;KAAS;KAAe;IACzC;KAAC;KAA0B;KAAU;KAAyB;IAC9D;KAAC;KAAyB;KAAW;KAAwB;IAC7D;KAAC;KAAS;KAAM;KAAQ;IACxB;KAAC;KAAa;KAAO;KAAY;IAGjC;KAAC;KAAU;KAAM;KAAS;IAC1B;KAAC;KAAU;KAAY;KAAa;IACpC;KAAC;KAAqB;KAAa;KAAwB;IAC3D;KAAC;KAAmB;KAAS;KAAkB;IAC/C;KAAC;KAAa;KAAS;KAAY;IACnC;KAAC;KAAsB;KAAU;KAAqB;IACtD;KAAC;KAAkB;KAAS;KAAiB;IAC7C;KAAC;KAAiB;KAAQ;KAAgB;IAC1C;KAAC;KAAa;KAAO;KAAY;IACjC;KAAC;KAAiB;KAAQ;KAAgB;IAC1C;KAAC;KAAiB;KAAQ;KAAgB;IAC1C;KAAC;KAAc;KAAS;KAAa;IACrC;KAAC;KAAiB;KAAQ;KAAgB;IAC1C;KAAC;KAAmB;KAAQ;KAAsB;IAGlD;KAAC;KAAQ;KAAS;KAAO;IACzB;KAAC;KAAY;KAAS;KAAW;IACjC;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAiB;KAAU;KAAgB;IAC5C;KAAC;KAAiB;KAAW;KAAgB;IAC7C;KAAC;KAAW;KAAO;KAAU;IAC7B;KAAC;KAAY;KAAO;KAAW;IAC/B;KAAC;KAAU;KAAO;KAAS;IAC3B;KAAC;KAAqB;KAAS;KAAoB;IAGnD;KAAC;KAAQ;KAAM;KAAO;IACtB;KAAC;KAAQ;KAAM;KAAO;IACtB;KAAC;KAAS;KAAQ;KAAQ;IAC1B;KAAC;KAAS;KAAQ;KAAQ;IAC1B;KAAC;KAAe;KAAO;KAAc;IACrC;KAAC;KAAgB;KAAO;KAAe;IACvC;KAAC;KAAmB;KAAS;KAAkB;IAC/C;KAAC;KAAoB;KAAS;KAAmB;IACjD;KAAC;KAAkB;KAAS;KAAiB;IAC7C;KAAC;KAAkB;KAAS;KAAiB;IAC7C;KAAC;KAAU;KAAO;KAAS;IAC3B;KAAC;KAAU;KAAO;KAAS;IAG3B;KAAC;KAAc;KAAS;KAAa;IACrC;KAAC;KAAc;KAAS;KAAa;IACrC;KAAC;KAAQ;KAAQ;KAAO;IACxB;KAAC;KAAU;KAAO;KAAS;IAC3B;KAAC;KAAW;KAAQ;KAAU;IAC9B;KAAC;KAAW;KAAS;KAAU;IAC/B;KAAC;KAAW;KAAO;KAAU;IAC7B;KAAC;KAAQ;KAAQ;KAAO;IACxB;KAAC;KAAc;KAAQ;KAAa;IACpC;KAAC;KAAY;KAAQ;KAAY;IACjC;KAAC;KAAc;KAAQ;KAAc;IACrC;KAAC;KAAoB;KAAQ;KAA0B;IAEzD,CAAS,QAAQ,CAAC,OAAW,EAAM,aAAa,CAAC,WAAW,EAAY,CAAC,CAAC,SAAS,CAAC,GAAO,GAAQ,OAAU;IAC3G,EAAY,KAAK;KACf;KACA;KACA,YAAY;KACZ;KACA,MAAM,EAAO,UAAU,mBAAmB;KAC1C,iBAAiB,EAAO,UAAU,6BAA6B;KAC/D,UAAU,MAAM;KACjB,CAAC;KACF,EAIA,EAAO,SAAS,IAAI,IAAI,QAAQ,KAAK,EAAO,EAAE;IAChD,IAAM,IAA0C;KAC9C;MAAC;MAAa;MAAQ;MAAY;KAClC;MAAC;MAAe;MAAO;MAAc;KACrC;MAAC;MAAqB;MAAQ;MAA0B;KACxD;MAAC;MAAwB;MAAS;MAAuB;KACzD;MAAC;MAAgB;MAAU;MAAe;KAC1C;MAAC;MAAc;MAAc;MAAa;KAC1C;MAAC;MAAc;MAAY;MAAa;KACxC;MAAC;MAAY;MAAY;MAAW;KACpC;MAAC;MAAe;MAAY;MAAc;KAC1C;MAAC;MAAe;MAAa;MAAc;KAC3C;MAAC;MAAmB;MAAW;MAAkB;KACjD;MAAC;MAAmB;MAAQ;MAAwB;KACpD;MAAC;MAAe;MAAS;MAAoB;KAC7C;MAAC;MAAgB;MAAU;MAAqB;KAChD;MAAC;MAAe;MAAS;MAAoB;KAC7C;MAAC;MAAkB;MAAY;MAAuB;KACtD;MAAC;MAAiB;MAAQ;MAAgB;KAC1C;MAAC;MAAiB;MAAQ;MAAgB;KAC1C;MAAC;MAAgB;MAAO;MAAe;KACvC;MAAC;MAAiB;MAAO;MAAgB;KACzC;MAAC;MAAS;MAAe;MAAQ;KACjC;MAAC;MAAkB;MAAO;MAAiB;KAC3C;MAAC;MAAU;MAAO;MAAkB;KACpC;MAAC;MAAkB;MAAM;MAAiB;KAC1C;MAAC;MAAU;MAAY;MAAS;KAChC;MAAC;MAAS;MAAa;MAAQ;KAC/B;MAAC;MAAW;MAAiB;MAAU;KACvC;MAAC;MAAW;MAAiB;MAAU;KACvC;MAAC;MAAsB;MAAQ;MAAqB;KACpD;MAAC;MAAuB;MAAQ;MAAsB;KACtD;MAAC;MAAY;MAAkB;MAAW;KAC1C;MAAC;MAAa;MAAmB;MAAY;KAC7C;MAAC;MAAsB;MAA0B;MAAqB;KACtE;MAAC;MAAS;MAAW;MAAQ;KAC7B;MAAC;MAAe;MAAW;MAAc;KACzC;MAAC;MAAc;MAAW;MAAa;KACvC;MAAC;MAAa;MAAM;MAAY;KAChC;MAAC;MAAY;MAAM;MAAW;KAC9B;MAAC;MAAU;MAAM;MAAS;KAC3B,EACK,IAAU,EAAO,YAAY,IAAI,EACjC,IAAQ,EAAO,UAAU,IAAU,EAAE,CAAC,aAAa,EACnD,IAAkB;KACtB,iBAAiB,EAAS;KAC1B,eAAe,EAAS;KACxB,aAAa,IAAU;KACvB,WAAW,EAAS;KACrB;IACD,EAAY,QAAQ,CAAC,OAAW,EAAM,WAAW,KAAK,EAAM,aAAa,CAAC,SAAS,EAAM,CAAC,CAAC,SAAS,CAAC,GAAO,GAAQ,OAAU;KAC5H,EAAY,KAAK;MAAE;MAAO;MAAQ,YAAY;MAAM,OAAO;MAAiB,MAAM,EAAO,UAAU,mBAAmB;MAAW,iBAAiB,EAAO,UAAU,6BAA6B;MAAiB,CAAC;MAClN;;GAsNJ,OAlNI,EAAO,SAAS,IAAI,IAsFtB;IAnFE;KAAC;KAAc;KAAQ;KAAa;IACpC;KAAC;KAAY;KAAQ;KAAa;IAClC;KAAC;KAAc;KAAO;KAAa;IACnC;KAAC;KAAc;KAAO;KAAa;IAEnC;KAAC;KAAY;KAAS;KAAW;IACjC;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAU;KAAQ;KAAS;IAC5B;KAAC;KAAW;KAAQ;KAAU;IAC9B;KAAC;KAAiB;KAAO;KAAgB;IACzC;KAAC;KAAiB;KAAO;KAAgB;IACzC;KAAC;KAAe;KAAQ;KAAoB;IAC5C;KAAC;KAAY;KAAQ;KAAa;IAClC;KAAC;KAAa;KAAQ;KAAc;IACpC;KAAC;KAAiB;KAAQ;KAAkB;IAC5C;KAAC;KAAc;KAAQ;KAAe;IACtC;KAAC;KAAgB;KAAQ;KAAiB;IAC1C;KAAC;KAAc;KAAQ;KAAe;IACtC;KAAC;KAAa;KAAM;KAAkB;IACtC;KAAC;KAAgB;KAAQ;KAAqB;IAC9C;KAAC;KAAW;KAAM;KAAY;IAC9B;KAAC;KAAU;KAAM;KAAe;IAChC;KAAC;KAAY;KAAO;KAAa;IACjC;KAAC;KAAa;KAAQ;KAAc;IAEpC;KAAC;KAAS;KAAQ;KAAU;IAC5B;KAAC;KAAY;KAAQ;KAAa;IAClC;KAAC;KAAY;KAAQ;KAAa;IAClC;KAAC;KAAe;KAAQ;KAAgB;IACxC;KAAC;KAAW;KAAM;KAAU;IAC5B;KAAC;KAAU;KAAM;KAAS;IAC1B;KAAC;KAAS;KAAQ;KAAU;IAC5B;KAAC;KAAS;KAAQ;KAAc;IAChC;KAAC;KAAc;KAAQ;KAAe;IACtC;KAAC;KAAiB;KAAU;KAAkB;IAC9C;KAAC;KAAc;KAAO;KAAa;IACnC;KAAC;KAAa;KAAO;KAAY;IACjC;KAAC;KAAY;KAAK;KAAW;IAC7B;KAAC;KAAa;KAAM;KAAoB;IAExC;KAAC;KAAS;KAAM;KAAc;IAC9B;KAAC;KAAY;KAAQ;KAAa;IAClC;KAAC;KAAS;KAAM;KAAU;IAC1B;KAAC;KAAkB;KAAS;KAAuB;IACnD;KAAC;KAAiB;KAAO;KAAkB;IAC3C;KAAC;KAAmB;KAAO;KAAoB;IAC/C;KAAC;KAAY;KAAO;KAAW;IAC/B;KAAC;KAAY;KAAO;KAAW;IAC/B;KAAC;KAAc;KAAQ;KAAa;IAEpC;KAAC;KAAY;KAAM;KAAmB;IACtC;KAAC;KAAS;KAAM;KAAgB;IAChC;KAAC;KAAa;KAAQ;KAAoB;IAC1C;KAAC;KAAY;KAAM;KAAW;IAC9B;KAAC;KAAc;KAAM;KAAa;IAClC;KAAC;KAAW;KAAM;KAAY;IAC9B;KAAC;KAAU;KAAM;KAAW;IAC5B;KAAC;KAAa;KAAM;KAAyB;IAC7C;KAAC;KAAY;KAAO;KAAW;IAC/B;KAAC;KAAe;KAAS;KAAc;IACvC;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAc;KAAQ;KAAqB;IAC5C;KAAC;KAAc;KAAQ;KAAqB;IAC5C;KAAC;KAAe;KAAO;KAAsB;IAC7C;KAAC;KAAW;KAAM;KAAU;IAC5B;KAAC;KAAY;KAAM;KAA6B;IAEhD;KAAC;KAAe;KAAQ;KAAc;IACtC;KAAC;KAAa;KAAQ;KAAY;IAClC;KAAC;KAAS;KAAO;KAAQ;IACzB;KAAC;KAAY;KAAM;KAAa;IAChC;KAAC;KAAe;KAAQ;KAAsB;IAC9C;KAAC;KAAiB;KAAQ;KAA8B;IACxD;KAAC;KAAe;KAAQ;KAAsB;IAC9C;KAAC;KAAS;KAAM;KAAgB;IAChC;KAAC;KAAa;KAAQ;KAAoB;IAC1C;KAAC;KAAY;KAAM;KAAmB;IAEtC;KAAC;KAAa;KAAQ;KAAc;IACpC;KAAC;KAAW;KAAM;KAAY;IAC9B;KAAC;KAAY;KAAS;KAAa;IAErC,CAAQ,SAAS,CAAC,GAAO,GAAQ,OAAU;IACzC,EAAY,KAAK;KAAE;KAAO;KAAQ,YAAY;KAAM;KAAO,MAAM,EAAO,UAAU,mBAAmB;KAAQ,iBAAiB,EAAO,UAAU,6BAA6B;KAAiB,CAAC;KAC9L,EAIA,EAAY,UAAU,KAyGxB;IAtGE;KAAC;KAAQ;KAAsB;KAA0B;IACzD;KAAC;KAAS;KAAQ;KAAoC;IACtD;KAAC;KAAQ;KAAsB;KAA0B;IACzD;KAAC;KAAQ;KAAqB;KAAiC;IAG/D;KAAC;KAAQ;KAAU;KAAsD;IACzE;KAAC;KAAQ;KAAU;KAAsD;IAGzE;KAAC;KAAO;KAAY;KAAgC;IACpD;KAAC;KAAQ;KAAa;KAAiC;IACvD;KAAC;KAAQ;KAAe;KAAmC;IAC3D;KAAC;KAAS;KAAuB;KAAkC;IACnE;KAAC;KAAU;KAAwB;KAAmC;IAGtE;KAAC;KAAQ;KAAW;KAA4C;IAChE;KAAC;KAAQ;KAAY;KAAiD;IACtE;KAAC;KAAQ;KAAW;KAAgC;IACpD;KAAC;KAAQ;KAAS;KAA6F;IAC/G;KAAC;KAAS;KAAW;KAA0B;IAC/C;KAAC;KAAW;KAAc;KAA8B;IAGxD;KAAC;KAAO;KAAW;KAAyC;IAC5D;KAAC;KAAO;KAAW;KAA+B;IAClD;KAAC;KAAQ;KAAe;KAA+B;IACvD;KAAC;KAAQ;KAAS;KAAe;IAGjC;KAAC;KAAQ;KAAa;KAAoD;IAC1E;KAAC;KAAS;KAAqB;KAAyE;IACxG;KAAC;KAAQ;KAAsB;KAAyD;IACxF;KAAC;KAAS;KAAQ;KAAsB;IAGxC;KAAC;KAAO;KAAiB;KAAmC;IAC5D;KAAC;KAAU;KAAW;KAAc;IACpC;KAAC;KAAO;KAAe;KAAoC;IAC3D;KAAC;KAAS;KAAU;KAAiB;IACrC;KAAC;KAAO;KAAe;KAAgC;IACvD;KAAC;KAAS;KAAU;KAAa;IAGjC;KAAC;KAAU;KAAY;KAA4F;IACnH;KAAC;KAAW;KAAiB;KAA4D;IACzF;KAAC;KAAW;KAAc;KAAyD;IACnF;KAAC;KAAW;KAAW;KAAkC;IAGzD;KAAC;KAAO;KAAe;KAAkB;IACzC;KAAC;KAAQ;KAAuB;KAA0B;IAC1D;KAAC;KAAQ;KAAkB;KAAmB;IAG9C;KAAC;KAAO;KAAY;KAAkB;IACtC;KAAC;KAAQ;KAAa;KAAmB;IACzC;KAAC;KAAQ;KAAY;KAAkB;IACvC;KAAC;KAAQ;KAAa;KAAuB;IAC7C;KAAC;KAAQ;KAAa;KAAmB;IACzC;KAAC;KAAQ;KAAS;KAA2B;IAG7C;KAAC;KAAQ;KAAW;KAAgC;IACpD;KAAC;KAAS;KAAqB;KAAoD;IACnF;KAAC;KAAU;KAAe;KAAyC;IACnE;KAAC;KAAS;KAAc;KAA2C;IACnE;KAAC;KAAQ;KAAgB;KAAwB;IACjD;KAAC;KAAQ;KAAmB;KAA2B;IACvD;KAAC;KAAO;KAAc;KAAkB;IACxC;KAAC;KAAO;KAAe;KAAmB;IAC1C;KAAC;KAAO;KAAc;KAAkB;IACxC;KAAC;KAAQ;KAAiB;KAAqB;IAC/C;KAAC;KAAQ;KAAgB;KAA8C;IAGvE;KAAC;KAAO;KAAa;KAAa;IAClC;KAAC;KAAQ;KAAW;KAAuB;IAC3C;KAAC;KAAM;KAAQ;KAAS;IAGxB;KAAC;KAAQ;KAAQ;KAA6B;IAC9C;KAAC;KAAS;KAAU;KAAmB;IAGvC;KAAC;KAAO;KAAY;KAA8C;IAClE;KAAC;KAAO;KAAY;KAAmD;IACvE;KAAC;KAAU;KAAiB;KAAkG;IAG9H;KAAC;KAAS;KAAc;KAAqG;IAC7H;KAAC;KAAQ;KAAmB;KAA0R;IAGtT;KAAC;KAAa;KAAQ;KAA+H;IAGrJ;KAAC;KAAO;KAAqB;KAAsB;IACnD;KAAC;KAAS;KAAiB;KAAkB;IAC7C;KAAC;KAAO;KAAqB;KAAoC;IAEnE,CAAS,QAAQ,CAAC,OAAW,EAAM,aAAa,CAAC,WAAW,EAAY,CAAC,CAAC,SAAS,CAAC,GAAO,GAAQ,OAAU;IAC3G,EAAY,KAAK;KACf;KACA;KACA,YAAY;KACZ;KACA,MAAM,EAAO,UAAU,mBAAmB;KAC1C,iBAAiB,EAAO,UAAU,6BAA6B;KAC/D,UAAU,MAAM;KACjB,CAAC;KACF,EAGG,EAAE,gBAAa;;EAEzB,CAAC"}