lexgui 8.0.0 → 8.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +3 -3
  2. package/build/components/AlertDialog.d.ts +7 -0
  3. package/build/components/Counter.d.ts +1 -0
  4. package/build/components/Dialog.d.ts +1 -1
  5. package/build/components/Footer.d.ts +1 -1
  6. package/build/components/Menubar.d.ts +2 -2
  7. package/build/core/Area.d.ts +22 -22
  8. package/build/core/Namespace.js +34 -34
  9. package/build/core/Namespace.js.map +1 -1
  10. package/build/core/Panel.d.ts +2 -3
  11. package/build/extensions/AssetView.d.ts +136 -134
  12. package/build/extensions/AssetView.js +1367 -1320
  13. package/build/extensions/AssetView.js.map +1 -1
  14. package/build/extensions/Audio.js +19 -19
  15. package/build/extensions/Audio.js.map +1 -1
  16. package/build/extensions/CodeEditor.js +867 -647
  17. package/build/extensions/CodeEditor.js.map +1 -1
  18. package/build/extensions/DocMaker.d.ts +1 -1
  19. package/build/extensions/DocMaker.js +73 -61
  20. package/build/extensions/DocMaker.js.map +1 -1
  21. package/build/extensions/GraphEditor.js +406 -305
  22. package/build/extensions/GraphEditor.js.map +1 -1
  23. package/build/extensions/ImUi.js +21 -20
  24. package/build/extensions/ImUi.js.map +1 -1
  25. package/build/extensions/Timeline.d.ts +29 -36
  26. package/build/extensions/Timeline.js +421 -424
  27. package/build/extensions/Timeline.js.map +1 -1
  28. package/build/extensions/VideoEditor.js +101 -97
  29. package/build/extensions/VideoEditor.js.map +1 -1
  30. package/build/extensions/index.d.ts +8 -8
  31. package/build/extensions/index.js +1 -1
  32. package/build/index.all.d.ts +2 -2
  33. package/build/index.css.d.ts +1 -1
  34. package/build/index.d.ts +56 -55
  35. package/build/lexgui.all.js +28488 -27640
  36. package/build/lexgui.all.js.map +1 -1
  37. package/build/lexgui.all.min.js +1 -1
  38. package/build/lexgui.all.module.js +28412 -27565
  39. package/build/lexgui.all.module.js.map +1 -1
  40. package/build/lexgui.all.module.min.js +1 -1
  41. package/build/lexgui.css +176 -69
  42. package/build/lexgui.js +13796 -13330
  43. package/build/lexgui.js.map +1 -1
  44. package/build/lexgui.min.css +1 -1
  45. package/build/lexgui.min.js +1 -1
  46. package/build/lexgui.module.js +13733 -13268
  47. package/build/lexgui.module.js.map +1 -1
  48. package/build/lexgui.module.min.js +1 -1
  49. package/changelog.md +22 -1
  50. package/demo.js +6 -5
  51. package/examples/all-components.html +3 -0
  52. package/examples/asset-view.html +52 -6
  53. package/examples/dialogs.html +3 -3
  54. package/examples/editor.html +1 -1
  55. package/examples/index.html +1 -1
  56. package/package.json +4 -1
@@ -19,7 +19,7 @@ export declare class DocMaker {
19
19
  video(src: string, caption?: string, controls?: boolean, autoplay?: boolean): void;
20
20
  note(text: string, warning?: boolean, title?: string, icon?: string): void;
21
21
  classCtor(name: string, params: any[], language?: string): void;
22
- classMethod(name: string, desc: string, params: any[], ret?: string): void;
22
+ classMethod(name: string, desc: string, params: any[], ret?: string): HTMLElement | null;
23
23
  iLink(text: string, href: string): string;
24
24
  iPage(text: string, page: string): string | undefined;
25
25
  iCode(text: string, codeClass?: string): string;
@@ -3,13 +3,17 @@ import { LX } from '../core/Namespace.js';
3
3
 
4
4
  // DocMaker.ts @jxarco
5
5
  if (!LX) {
6
- throw ("Missing LX namespace!");
6
+ throw ('Missing LX namespace!');
7
7
  }
8
8
  LX.extensions.push('DocMaker');
9
- const CPP_KEY_WORDS = ['int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast', 'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace', 'auto'];
9
+ const CPP_KEY_WORDS = ['int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast',
10
+ 'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace',
11
+ 'auto'];
10
12
  const CLASS_WORDS = ['uint32_t', 'uint64_t', 'uint8_t'];
11
- const STATEMENT_WORDS = ['for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import', 'from', 'await'];
12
- const JS_KEY_WORDS = ['var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true', 'false', 'NaN', 'this'];
13
+ const STATEMENT_WORDS = ['for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import',
14
+ 'from', 'await'];
15
+ const JS_KEY_WORDS = ['var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true',
16
+ 'false', 'NaN', 'this'];
13
17
  const HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];
14
18
  const HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];
15
19
  class DocMaker {
@@ -36,16 +40,16 @@ class DocMaker {
36
40
  paragraph(string, sup = false, className) {
37
41
  console.assert(string !== undefined);
38
42
  let paragraph = document.createElement(sup ? 'sup' : 'p');
39
- paragraph.className = "leading-relaxed " + (className ?? "");
43
+ paragraph.className = 'leading-relaxed ' + (className ?? '');
40
44
  paragraph.innerHTML = string;
41
45
  this.root.appendChild(paragraph);
42
46
  }
43
- code(text, language = "js") {
47
+ code(text, language = 'js') {
44
48
  console.assert(text !== undefined);
45
49
  text.replaceAll('<', '&lt;');
46
50
  text.replaceAll('>', '&gt;');
47
- let highlight = "";
48
- let content = "";
51
+ let highlight = '';
52
+ let content = '';
49
53
  const getHTML = (h, c) => {
50
54
  return `<span class="${h}">${c}</span>`;
51
55
  };
@@ -61,7 +65,7 @@ class DocMaker {
61
65
  }
62
66
  let html = null;
63
67
  const tagIndex = str.indexOf('@');
64
- const skipTag = (str[tagIndex - 1] == '|');
68
+ const skipTag = str[tagIndex - 1] == '|';
65
69
  // Highlight is specified
66
70
  if (text[i + 1] == '[') {
67
71
  highlight = str.substr(1, 3);
@@ -88,50 +92,50 @@ class DocMaker {
88
92
  content = preContent + content.substring(0, content.substring(1).indexOf('@') + 1);
89
93
  text = text.substr(0, i) + '@' + content + '@' + text.substr(i + content.length + 3);
90
94
  }
91
- if (language == "cpp" && CPP_KEY_WORDS.includes(content)) {
92
- highlight = "kwd";
95
+ if (language == 'cpp' && CPP_KEY_WORDS.includes(content)) {
96
+ highlight = 'kwd';
93
97
  }
94
- else if (language == "js" && JS_KEY_WORDS.includes(content)) {
95
- highlight = "kwd";
98
+ else if (language == 'js' && JS_KEY_WORDS.includes(content)) {
99
+ highlight = 'kwd';
96
100
  }
97
101
  else if (CLASS_WORDS.includes(content)) {
98
- highlight = "cls";
102
+ highlight = 'cls';
99
103
  }
100
104
  else if (STATEMENT_WORDS.includes(content)) {
101
- highlight = "lit";
105
+ highlight = 'lit';
102
106
  }
103
107
  else if (HTML_TAGS.includes(content)) {
104
- highlight = "tag";
108
+ highlight = 'tag';
105
109
  }
106
110
  else if (HTML_ATTRIBUTES.includes(content)) {
107
- highlight = "atn";
111
+ highlight = 'atn';
108
112
  }
109
- else if ((content[0] == '"' && content[content.length - 1] == '"') ||
110
- (content[0] == "'" && content[content.length - 1] == "'") ||
111
- (content[0] == "`" && content[content.length - 1] == "`")) {
112
- highlight = "str";
113
+ else if ((content[0] == '"' && content[content.length - 1] == '"')
114
+ || (content[0] == "'" && content[content.length - 1] == "'")
115
+ || (content[0] == '`' && content[content.length - 1] == '`')) {
116
+ highlight = 'str';
113
117
  }
114
118
  else if (!Number.isNaN(parseFloat(content))) {
115
- highlight = "dec";
119
+ highlight = 'dec';
116
120
  }
117
121
  else {
118
- console.error("ERROR[Code Parsing]: Unknown highlight type: " + content);
122
+ console.error('ERROR[Code Parsing]: Unknown highlight type: ' + content);
119
123
  return;
120
124
  }
121
125
  html = getHTML(highlight, content);
122
126
  text = text.replace(`@${content}@`, html);
123
127
  }
124
- i += (html.length - 1);
128
+ i += html.length - 1;
125
129
  }
126
130
  }
127
131
  let container = document.createElement('div');
128
- container.className = "code-container";
132
+ container.className = 'code-container';
129
133
  let pre = document.createElement('pre');
130
134
  let code = document.createElement('code');
131
135
  code.innerHTML = text;
132
136
  let button = document.createElement('button');
133
- button.title = "Copy code sample";
134
- button.appendChild(LX.makeIcon("Copy"));
137
+ button.title = 'Copy code sample';
138
+ button.appendChild(LX.makeIcon('Copy'));
135
139
  button.addEventListener('click', this._copySnippet.bind(this, button));
136
140
  container.appendChild(button);
137
141
  pre.appendChild(code);
@@ -140,7 +144,7 @@ class DocMaker {
140
144
  }
141
145
  list(list, type, target) {
142
146
  const validTypes = ['bullet', 'numbered'];
143
- console.assert(list && list.length > 0 && validTypes.includes(type), "Invalid list type or empty list" + type);
147
+ console.assert(list && list.length > 0 && validTypes.includes(type), 'Invalid list type or empty list' + type);
144
148
  const typeString = type == 'bullet' ? 'ul' : 'ol';
145
149
  let ul = document.createElement(typeString);
146
150
  target = target ?? this.root;
@@ -151,7 +155,7 @@ class DocMaker {
151
155
  return;
152
156
  }
153
157
  let li = document.createElement('li');
154
- li.className = "leading-loose";
158
+ li.className = 'leading-loose';
155
159
  li.innerHTML = el;
156
160
  ul.appendChild(li);
157
161
  }
@@ -175,14 +179,18 @@ class DocMaker {
175
179
  }
176
180
  codeListItem(item, target) {
177
181
  target = target ?? this._listQueued;
178
- let split = (item.constructor === Array);
182
+ let split = item.constructor === Array;
179
183
  if (split && item[0].constructor === Array) {
180
184
  this.codeBulletList(item, target);
181
185
  return;
182
186
  }
183
187
  let li = document.createElement('li');
184
- li.className = "leading-loose";
185
- li.innerHTML = split ? (item.length == 2 ? this.iCode(item[0]) + ": " + item[1] : this.iCode(item[0] + " <span class='desc'>(" + item[1] + ")</span>") + ": " + item[2]) : this.iCode(item);
188
+ li.className = 'leading-loose';
189
+ li.innerHTML = split
190
+ ? (item.length == 2
191
+ ? this.iCode(item[0]) + ': ' + item[1]
192
+ : this.iCode(item[0] + " <span class='desc'>(" + item[1] + ')</span>') + ': ' + item[2])
193
+ : this.iCode(item);
186
194
  target?.appendChild(li);
187
195
  }
188
196
  codeBulletList(list, target) {
@@ -198,11 +206,11 @@ class DocMaker {
198
206
  this.root.appendChild(ul);
199
207
  }
200
208
  }
201
- image(src, caption = "", parent) {
209
+ image(src, caption = '', parent) {
202
210
  let img = document.createElement('img');
203
211
  img.src = src;
204
212
  img.alt = caption;
205
- img.className = "my-1";
213
+ img.className = 'my-1';
206
214
  parent = parent ?? this.root;
207
215
  parent.appendChild(img);
208
216
  }
@@ -210,9 +218,9 @@ class DocMaker {
210
218
  const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);
211
219
  if (!mobile) {
212
220
  let div = document.createElement('div');
213
- div.style.width = width ?? "auto";
214
- div.style.height = height ?? "256px";
215
- div.className = "flex flex-row justify-center";
221
+ div.style.width = width ?? 'auto';
222
+ div.style.height = height ?? '256px';
223
+ div.className = 'flex flex-row justify-center';
216
224
  for (let i = 0; i < sources.length; ++i) {
217
225
  this.image(sources[i], captions[i], div);
218
226
  }
@@ -224,7 +232,7 @@ class DocMaker {
224
232
  }
225
233
  }
226
234
  }
227
- video(src, caption = "", controls = true, autoplay = false) {
235
+ video(src, caption = '', controls = true, autoplay = false) {
228
236
  let video = document.createElement('video');
229
237
  video.src = src;
230
238
  video.controls = controls;
@@ -238,44 +246,48 @@ class DocMaker {
238
246
  }
239
247
  note(text, warning = false, title, icon) {
240
248
  console.assert(text !== undefined);
241
- const note = LX.makeContainer([], "border rounded-lg overflow-hidden text-md fg-secondary my-6", "", this.root);
249
+ const note = LX.makeContainer([], 'border rounded-lg overflow-hidden text-md fg-secondary my-6', '', this.root);
242
250
  let header = document.createElement('div');
243
- header.className = "flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary";
244
- header.appendChild(LX.makeIcon(icon ?? (warning ? "MessageSquareWarning" : "NotepadText")));
245
- header.innerHTML += (title ?? (warning ? "Important" : "Note"));
251
+ header.className = 'flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary';
252
+ header.appendChild(LX.makeIcon(icon ?? (warning ? 'MessageSquareWarning' : 'NotepadText')));
253
+ header.innerHTML += title ?? (warning ? 'Important' : 'Note');
246
254
  note.appendChild(header);
247
255
  // Node body
248
- LX.makeContainer([], "leading-6 p-3", text, note);
256
+ LX.makeContainer([], 'leading-6 p-3', text, note);
249
257
  }
250
- classCtor(name, params, language = "js") {
251
- let paramsHTML = "";
258
+ classCtor(name, params, language = 'js') {
259
+ let paramsHTML = '';
252
260
  for (var p of params) {
253
261
  const str1 = p[0]; // cpp: param js: name
254
262
  const str2 = p[1]; // cpp: defaultValue js: type
255
- if (language == "cpp") {
256
- paramsHTML += str1 + (str2 ? " = <span class='desc'>" + str2 + "</span>" : "") + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
263
+ if (language == 'cpp') {
264
+ paramsHTML += str1 + (str2 ? " = <span class='desc'>" + str2 + '</span>' : '')
265
+ + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
257
266
  }
258
- else if (language == "js") {
259
- paramsHTML += str1 + ": <span class='desc'>" + str2 + "</span>" + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
267
+ else if (language == 'js') {
268
+ paramsHTML += str1 + ": <span class='desc'>" + str2 + '</span>'
269
+ + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
260
270
  }
261
271
  }
262
272
  let pr = document.createElement('p');
263
- pr.innerHTML = this.iCode("<span class='constructor'>" + name + "(" + paramsHTML + ")" + "</span>");
273
+ pr.innerHTML = this.iCode("<span class='constructor'>" + name + '(' + paramsHTML + ')' + '</span>');
264
274
  this.root.appendChild(pr);
265
275
  }
266
276
  classMethod(name, desc, params, ret) {
267
277
  this.startCodeBulletList();
268
- let paramsHTML = "";
278
+ let paramsHTML = '';
269
279
  for (var p of params) {
270
280
  const name = p[0];
271
281
  const type = p[1];
272
- paramsHTML += name + ": <span class='desc'>" + type + "</span>" + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
282
+ paramsHTML += name + ": <span class='desc'>" + type + '</span>'
283
+ + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
273
284
  }
274
285
  let li = document.createElement('li');
275
- li.innerHTML = this.iCode("<span class='method'>" + name + " (" + paramsHTML + ")" + (ret ? (": " + ret) : "") + "</span>");
286
+ li.innerHTML = this.iCode("<span class='method'>" + name + ' (' + paramsHTML + ')' + (ret ? (': ' + ret) : '') + '</span>');
276
287
  this._listQueued?.appendChild(li);
277
288
  this.endCodeBulletList();
278
289
  this.paragraph(desc);
290
+ return li.parentElement;
279
291
  }
280
292
  iLink(text, href) {
281
293
  console.assert(text !== undefined && href !== undefined);
@@ -283,31 +295,31 @@ class DocMaker {
283
295
  }
284
296
  iPage(text, page) {
285
297
  console.assert(text !== undefined && page !== undefined);
286
- const startPage = page.replace(".html", "");
298
+ const startPage = page.replace('.html', '');
287
299
  const g = globalThis;
288
300
  if (g.setPath && g.loadPage) {
289
301
  const tabName = g.setPath(startPage);
290
302
  return `<a onclick="loadPage('${page}', true, '${tabName}')">${text}</a>`;
291
303
  }
292
304
  else {
293
- console.warn("[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!");
305
+ console.warn('[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!');
294
306
  }
295
307
  }
296
308
  iCode(text, codeClass) {
297
309
  console.assert(text !== undefined);
298
- return `<code class="inline ${codeClass ?? ""}">${text}</code>`;
310
+ return `<code class="inline ${codeClass ?? ''}">${text}</code>`;
299
311
  }
300
312
  _copySnippet(b) {
301
- b.innerHTML = "";
302
- b.appendChild(LX.makeIcon("Check"));
313
+ b.innerHTML = '';
314
+ b.appendChild(LX.makeIcon('Check'));
303
315
  b.classList.add('copied');
304
316
  setTimeout(() => {
305
- b.innerHTML = "";
306
- b.appendChild(LX.makeIcon("Copy"));
317
+ b.innerHTML = '';
318
+ b.appendChild(LX.makeIcon('Copy'));
307
319
  b.classList.remove('copied');
308
320
  }, 2000);
309
321
  navigator.clipboard.writeText(b.dataset['snippet'] ?? b.parentElement.innerText);
310
- console.log("Copied!");
322
+ console.log('Copied!');
311
323
  }
312
324
  }
313
325
 
@@ -1 +1 @@
1
- {"version":3,"file":"DocMaker.js","sources":["../../src/extensions/DocMaker.ts"],"sourcesContent":["// DocMaker.ts @jxarco\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif( !LX )\r\n{\r\n throw( \"Missing LX namespace!\" );\r\n}\r\n\r\nLX.extensions.push( 'DocMaker' );\r\n\r\nconst CPP_KEY_WORDS = ['int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast', 'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace', 'auto'];\r\nconst CLASS_WORDS = ['uint32_t', 'uint64_t', 'uint8_t'];\r\nconst STATEMENT_WORDS = ['for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import', 'from', 'await'];\r\n\r\nconst JS_KEY_WORDS = ['var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true', 'false', 'NaN', 'this'];\r\nconst HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];\r\nconst HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];\r\n\r\nexport class DocMaker\r\n{\r\n root: Element;\r\n _listQueued: Element | undefined = undefined;\r\n\r\n constructor( element?: Element )\r\n {\r\n this.root = element ?? document.body;\r\n }\r\n\r\n setDomTarget( element: Element )\r\n {\r\n this.root = element;\r\n }\r\n\r\n lineBreak( target?: Element )\r\n {\r\n target = target ?? this.root;\r\n target.appendChild( document.createElement('br') );\r\n }\r\n\r\n header( string: string, type: string, id: string )\r\n {\r\n console.assert( string !== undefined && type !== undefined );\r\n let header = document.createElement( type );\r\n header.innerHTML = string;\r\n if( id ) header.id = id;\r\n this.root.appendChild( header );\r\n }\r\n\r\n paragraph( string: string, sup: boolean = false, className?: string )\r\n {\r\n console.assert( string !== undefined );\r\n let paragraph = document.createElement(sup ? 'sup' : 'p');\r\n paragraph.className = \"leading-relaxed \" + ( className ?? \"\" );\r\n paragraph.innerHTML = string;\r\n this.root.appendChild( paragraph );\r\n }\r\n\r\n code( text: string, language: string = \"js\" )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n text.replaceAll('<', '&lt;');\r\n text.replaceAll('>', '&gt;');\r\n\r\n let highlight = \"\";\r\n let content = \"\";\r\n\r\n const getHTML = ( h: string, c: string ) =>\r\n {\r\n return `<span class=\"${ h }\">${ c }</span>`;\r\n };\r\n\r\n for( let i = 0; i < text.length; ++i )\r\n {\r\n const char = text[ i ];\r\n const string = text.substr( i );\r\n\r\n const endLineIdx = string.indexOf( '\\n' ); \r\n const line = string.substring( 0, endLineIdx > -1 ? endLineIdx : undefined );\r\n \r\n if( char == '@' )\r\n {\r\n const str = line.substr( 1 );\r\n \r\n if ( !( str.indexOf( '@' ) > -1 ) && !( str.indexOf( '[' ) > -1 ) )\r\n {\r\n continue;\r\n }\r\n\r\n let html = null;\r\n\r\n const tagIndex = str.indexOf( '@' );\r\n const skipTag = ( str[ tagIndex - 1 ] == '|' );\r\n\r\n // Highlight is specified\r\n if( text[ i + 1 ] == '[' )\r\n {\r\n highlight = str.substr( 1, 3 );\r\n content = str.substring( 5, tagIndex );\r\n\r\n if( skipTag )\r\n {\r\n const newString = str.substring( 6 + content.length );\r\n const preContent = content;\r\n const postContent = newString.substring( 0, newString.indexOf( '@' ) );\r\n const finalContent = preContent.substring( 0, preContent.length - 1 ) + '@' + postContent;\r\n html = getHTML( highlight, finalContent );\r\n\r\n const ogContent = preContent + '@' + postContent;\r\n text = text.replace( `@[${ highlight }]${ ogContent }@`, html );\r\n }\r\n else\r\n {\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@[${ highlight }]${ content }@`, html );\r\n }\r\n }\r\n else\r\n {\r\n content = str.substring( 0, tagIndex );\r\n if( skipTag )\r\n {\r\n const preContent = str.substring( 0, str.indexOf( '@' ) - 1 );\r\n content = str.substring( preContent.length + 1 );\r\n content = preContent + content.substring( 0, content.substring( 1 ).indexOf( '@' ) + 1 );\r\n text = text.substr( 0, i ) + '@' + content + '@' + text.substr( i + content.length + 3 );\r\n }\r\n\r\n if( language == \"cpp\" && CPP_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = \"kwd\";\r\n }\r\n else if( language == \"js\" && JS_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = \"kwd\";\r\n }\r\n else if( CLASS_WORDS.includes( content ) )\r\n {\r\n highlight = \"cls\";\r\n }\r\n else if( STATEMENT_WORDS.includes( content ) )\r\n {\r\n highlight = \"lit\"; \r\n }\r\n else if( HTML_TAGS.includes( content ) )\r\n {\r\n highlight = \"tag\"; \r\n }\r\n else if( HTML_ATTRIBUTES.includes( content ) )\r\n {\r\n highlight = \"atn\"; \r\n }\r\n else if( ( content[ 0 ] == '\"' && content[ content.length - 1 ] == '\"' ) ||\r\n ( content[ 0 ] == \"'\" && content[ content.length - 1 ] == \"'\" ) ||\r\n ( content[ 0 ] == \"`\" && content[ content.length - 1 ] == \"`\" ) )\r\n {\r\n highlight = \"str\";\r\n }\r\n else if( !Number.isNaN( parseFloat( content ) ) )\r\n {\r\n highlight = \"dec\"; \r\n }\r\n else\r\n {\r\n console.error( \"ERROR[Code Parsing]: Unknown highlight type: \" + content );\r\n return;\r\n }\r\n\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@${ content }@`, html );\r\n }\r\n\r\n i += ( html.length - 1 );\r\n }\r\n }\r\n \r\n let container = document.createElement('div');\r\n container.className = \"code-container\";\r\n let pre = document.createElement('pre');\r\n let code = document.createElement('code');\r\n code.innerHTML = text;\r\n\r\n let button = document.createElement('button');\r\n button.title = \"Copy code sample\";\r\n button.appendChild(LX.makeIcon( \"Copy\" ));\r\n button.addEventListener('click', this._copySnippet.bind( this, button ));\r\n container.appendChild( button );\r\n\r\n pre.appendChild( code );\r\n container.appendChild( pre );\r\n this.root.appendChild( container );\r\n }\r\n\r\n list( list: any[], type: string, target?: Element )\r\n {\r\n const validTypes = [ 'bullet', 'numbered' ];\r\n console.assert( list && list.length > 0 && validTypes.includes(type), \"Invalid list type or empty list\" + type );\r\n const typeString = type == 'bullet' ? 'ul' : 'ol';\r\n let ul = document.createElement( typeString );\r\n target = target ?? this.root;\r\n target.appendChild( ul );\r\n for( var el of list )\r\n {\r\n if( el.constructor === Array ) {\r\n this.list( el, type, ul );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = \"leading-loose\";\r\n li.innerHTML = el;\r\n ul.appendChild( li );\r\n }\r\n }\r\n\r\n bulletList( list: any[] )\r\n {\r\n this.list( list, 'bullet' );\r\n }\r\n\r\n numberedList( list: any[] )\r\n {\r\n this.list( list, 'numbered' );\r\n }\r\n\r\n startCodeBulletList()\r\n {\r\n let ul = document.createElement('ul');\r\n this._listQueued = ul;\r\n }\r\n\r\n endCodeBulletList()\r\n {\r\n if( this._listQueued === undefined) return;\r\n console.assert( this._listQueued !== undefined );\r\n this.root.appendChild( this._listQueued );\r\n this._listQueued = undefined;\r\n }\r\n\r\n codeListItem( item: any, target?: Element )\r\n {\r\n target = target ?? this._listQueued;\r\n let split = (item.constructor === Array);\r\n if( split && item[0].constructor === Array ) {\r\n this.codeBulletList( item, target );\r\n return;\r\n }\r\n let li = document.createElement('li');\r\n li.className = \"leading-loose\";\r\n li.innerHTML = split ? ( item.length == 2 ? this.iCode( item[0] ) + \": \" + item[1] : this.iCode( item[0] + \" <span class='desc'>(\" + item[1] + \")</span>\" ) + \": \" + item[2] ) : this.iCode( item );\r\n target?.appendChild( li );\r\n }\r\n\r\n codeBulletList( list: any[], target?: Element )\r\n {\r\n console.assert( list !== undefined && list.length > 0 );\r\n let ul = document.createElement('ul');\r\n for( var el of list )\r\n {\r\n this.codeListItem( el, ul );\r\n }\r\n\r\n if( target )\r\n {\r\n target.appendChild( ul );\r\n }\r\n else\r\n {\r\n this.root.appendChild( ul );\r\n }\r\n }\r\n\r\n image( src: string, caption: string = \"\", parent?: Element )\r\n {\r\n let img = document.createElement('img');\r\n img.src = src;\r\n img.alt = caption;\r\n img.className = \"my-1\";\r\n parent = parent ?? this.root;\r\n parent.appendChild( img );\r\n }\r\n\r\n images( sources: string[], captions: string[] = [], width?: string, height?: string )\r\n {\r\n const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);\r\n\r\n if( !mobile )\r\n {\r\n let div: HTMLElement = document.createElement('div');\r\n div.style.width = width ?? \"auto\";\r\n div.style.height = height ?? \"256px\";\r\n div.className = \"flex flex-row justify-center\";\r\n\r\n for( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[ i ], captions[ i ], div );\r\n }\r\n\r\n this.root.appendChild( div );\r\n }\r\n else\r\n {\r\n for( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[ i ], captions[ i ] );\r\n }\r\n }\r\n }\r\n\r\n video( src: string, caption: string = \"\", controls: boolean = true, autoplay: boolean = false )\r\n {\r\n let video: any = document.createElement( 'video' );\r\n video.src = src;\r\n video.controls = controls;\r\n video.autoplay = autoplay;\r\n if( autoplay )\r\n {\r\n video.muted = true;\r\n }\r\n video.loop = true;\r\n video.alt = caption;\r\n this.root.appendChild( video );\r\n }\r\n\r\n note( text: string, warning: boolean = false, title?: string, icon?: string )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n const note = LX.makeContainer( [], \"border rounded-lg overflow-hidden text-md fg-secondary my-6\", \"\", this.root );\r\n\r\n let header = document.createElement( 'div' );\r\n header.className = \"flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary\";\r\n header.appendChild( LX.makeIcon( icon ?? ( warning ? \"MessageSquareWarning\" : \"NotepadText\" ) ) );\r\n header.innerHTML += ( title ?? ( warning ? \"Important\" : \"Note\" ) );\r\n note.appendChild( header );\r\n\r\n // Node body\r\n LX.makeContainer( [], \"leading-6 p-3\", text, note );\r\n }\r\n\r\n classCtor( name: string, params: any[], language: string = \"js\" )\r\n {\r\n let paramsHTML = \"\"; \r\n for( var p of params )\r\n {\r\n const str1 = p[ 0 ]; // cpp: param js: name\r\n const str2 = p[ 1 ]; // cpp: defaultValue js: type\r\n if( language == \"cpp\" )\r\n {\r\n paramsHTML += str1 + ( str2 ? \" = <span class='desc'>\" + str2 + \"</span>\" : \"\" ) + ( params.indexOf( p ) != (params.length - 1) ? ', ' : '' );\r\n }\r\n else if( language == \"js\" )\r\n {\r\n paramsHTML += str1 + \": <span class='desc'>\" + str2 + \"</span>\" + ( params.indexOf( p ) != (params.length - 1) ? ', ' : '' );\r\n }\r\n }\r\n let pr = document.createElement('p');\r\n pr.innerHTML = this.iCode( \"<span class='constructor'>\" + name + \"(\" + paramsHTML + \")\" + \"</span>\" );\r\n this.root.appendChild( pr );\r\n }\r\n\r\n classMethod( name: string, desc: string, params: any[], ret?: string )\r\n {\r\n this.startCodeBulletList();\r\n\r\n let paramsHTML = \"\"; \r\n for( var p of params )\r\n {\r\n const name = p[ 0 ];\r\n const type = p[ 1 ];\r\n paramsHTML += name + \": <span class='desc'>\" + type + \"</span>\" + ( params.indexOf( p ) != (params.length - 1) ? ', ' : '' );\r\n }\r\n let li = document.createElement('li');\r\n li.innerHTML = this.iCode( \"<span class='method'>\" + name + \" (\" + paramsHTML + \")\" + ( ret ? (\": \" + ret) : \"\" ) + \"</span>\" );\r\n this._listQueued?.appendChild( li );\r\n \r\n this.endCodeBulletList();\r\n \r\n this.paragraph( desc );\r\n }\r\n\r\n iLink( text: string, href: string )\r\n {\r\n console.assert( text !== undefined && href !== undefined );\r\n return `<a href=\"${ href }\">${ text }</a>`;\r\n }\r\n\r\n iPage( text: string, page: string )\r\n {\r\n console.assert( text !== undefined && page !== undefined );\r\n const startPage = page.replace( \".html\", \"\" );\r\n const g = globalThis as any;\r\n if( g.setPath && g.loadPage )\r\n {\r\n const tabName = g.setPath( startPage );\r\n return `<a onclick=\"loadPage('${ page }', true, '${ tabName }')\">${ text }</a>`;\r\n }\r\n else\r\n {\r\n console.warn( \"[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!\" )\r\n }\r\n }\r\n\r\n iCode( text: string, codeClass?: string )\r\n {\r\n console.assert( text !== undefined );\r\n return `<code class=\"inline ${ codeClass ?? \"\" }\">${ text }</code>`;\r\n }\r\n\r\n _copySnippet( b: any )\r\n {\r\n b.innerHTML = \"\";\r\n b.appendChild(LX.makeIcon( \"Check\" ));\r\n b.classList.add('copied');\r\n\r\n setTimeout( () => {\r\n b.innerHTML = \"\";\r\n b.appendChild(LX.makeIcon( \"Copy\" ));\r\n b.classList.remove('copied');\r\n }, 2000 );\r\n\r\n navigator.clipboard.writeText( b.dataset['snippet'] ?? b.parentElement.innerText );\r\n console.log(\"Copied!\");\r\n }\r\n}"],"names":[],"mappings":";;;AAAA;AAIA,IAAI,CAAC,EAAE,EACP;IACI,OAAO,uBAAuB;AAClC;AAEA,EAAE,CAAC,UAAU,CAAC,IAAI,CAAE,UAAU,CAAE;AAEhC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC;AAC9O,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;AACvD,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAElI,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;AACxI,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC;AAChG,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;MAEpF,QAAQ,CAAA;AAEjB,IAAA,IAAI;IACJ,WAAW,GAAwB,SAAS;AAE5C,IAAA,WAAA,CAAa,OAAiB,EAAA;QAE1B,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,QAAQ,CAAC,IAAI;IACxC;AAEA,IAAA,YAAY,CAAE,OAAgB,EAAA;AAE1B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO;IACvB;AAEA,IAAA,SAAS,CAAE,MAAgB,EAAA;AAEvB,QAAA,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI;QAC5B,MAAM,CAAC,WAAW,CAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAE;IACtD;AAEA,IAAA,MAAM,CAAE,MAAc,EAAE,IAAY,EAAE,EAAU,EAAA;QAE5C,OAAO,CAAC,MAAM,CAAE,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAE;QAC5D,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAE,IAAI,CAAE;AAC3C,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM;AACzB,QAAA,IAAI,EAAE;AAAG,YAAA,MAAM,CAAC,EAAE,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,MAAM,CAAE;IACnC;AAEA,IAAA,SAAS,CAAE,MAAc,EAAE,GAAA,GAAe,KAAK,EAAE,SAAkB,EAAA;AAE/D,QAAA,OAAO,CAAC,MAAM,CAAE,MAAM,KAAK,SAAS,CAAE;AACtC,QAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;QACzD,SAAS,CAAC,SAAS,GAAG,kBAAkB,IAAK,SAAS,IAAI,EAAE,CAAE;AAC9D,QAAA,SAAS,CAAC,SAAS,GAAG,MAAM;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,SAAS,CAAE;IACtC;AAEA,IAAA,IAAI,CAAE,IAAY,EAAE,QAAA,GAAmB,IAAI,EAAA;AAEvC,QAAA,OAAO,CAAC,MAAM,CAAE,IAAI,KAAK,SAAS,CAAE;AAEpC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;QAE5B,IAAI,SAAS,GAAG,EAAE;QAClB,IAAI,OAAO,GAAG,EAAE;AAEhB,QAAA,MAAM,OAAO,GAAG,CAAE,CAAS,EAAE,CAAS,KAAK;AAEvC,YAAA,OAAO,CAAA,aAAA,EAAiB,CAAE,CAAA,EAAA,EAAM,CAAE,SAAS;AAC/C,QAAA,CAAC;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EACpC;AACI,YAAA,MAAM,IAAI,GAAG,IAAI,CAAE,CAAC,CAAE;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAE,CAAC,CAAE;YAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAE,IAAI,CAAE;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAE,CAAC,EAAE,UAAU,GAAG,EAAE,GAAG,UAAU,GAAG,SAAS,CAAE;AAE5E,YAAA,IAAI,IAAI,IAAI,GAAG,EACf;gBACI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAE,CAAC,CAAE;gBAE5B,IAAK,EAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAE,GAAG,EAAE,CAAE,IAAI,EAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAE,GAAG,EAAE,CAAE,EACjE;oBACI;gBACJ;gBAEA,IAAI,IAAI,GAAG,IAAI;gBAEf,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAE,GAAG,CAAE;AACnC,gBAAA,MAAM,OAAO,IAAK,GAAG,CAAE,QAAQ,GAAG,CAAC,CAAE,IAAI,GAAG,CAAE;;gBAG9C,IAAI,IAAI,CAAE,CAAC,GAAG,CAAC,CAAE,IAAI,GAAG,EACxB;oBACI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAE,CAAC,EAAE,CAAC,CAAE;oBAC9B,OAAO,GAAG,GAAG,CAAC,SAAS,CAAE,CAAC,EAAE,QAAQ,CAAE;oBAEtC,IAAI,OAAO,EACX;AACI,wBAAA,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAE;wBACrD,MAAM,UAAU,GAAG,OAAO;AAC1B,wBAAA,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAE,GAAG,CAAE,CAAE;AACtE,wBAAA,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAE,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,GAAG,GAAG,WAAW;AACzF,wBAAA,IAAI,GAAG,OAAO,CAAE,SAAS,EAAE,YAAY,CAAE;AAEzC,wBAAA,MAAM,SAAS,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW;AAChD,wBAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAE,CAAA,EAAA,EAAM,SAAU,CAAA,CAAA,EAAK,SAAU,CAAA,CAAA,CAAG,EAAE,IAAI,CAAE;oBACnE;yBAEA;AACI,wBAAA,IAAI,GAAG,OAAO,CAAE,SAAS,EAAE,OAAO,CAAE;AACpC,wBAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAE,CAAA,EAAA,EAAM,SAAU,CAAA,CAAA,EAAK,OAAQ,CAAA,CAAA,CAAG,EAAE,IAAI,CAAE;oBACjE;gBACJ;qBAEA;oBACI,OAAO,GAAG,GAAG,CAAC,SAAS,CAAE,CAAC,EAAE,QAAQ,CAAE;oBACtC,IAAI,OAAO,EACX;AACI,wBAAA,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAE,GAAG,CAAE,GAAG,CAAC,CAAE;wBAC7D,OAAO,GAAG,GAAG,CAAC,SAAS,CAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAE;wBAChD,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,CAAE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAE,CAAC,CAAE,CAAC,OAAO,CAAE,GAAG,CAAE,GAAG,CAAC,CAAE;AACxF,wBAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAE,CAAC,EAAE,CAAC,CAAE,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE;oBAC5F;oBAEA,IAAI,QAAQ,IAAI,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAE,OAAO,CAAE,EAC1D;wBACI,SAAS,GAAG,KAAK;oBACrB;yBACK,IAAI,QAAQ,IAAI,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAE,OAAO,CAAE,EAC7D;wBACI,SAAS,GAAG,KAAK;oBACrB;AACK,yBAAA,IAAI,WAAW,CAAC,QAAQ,CAAE,OAAO,CAAE,EACxC;wBACI,SAAS,GAAG,KAAK;oBACrB;AACK,yBAAA,IAAI,eAAe,CAAC,QAAQ,CAAE,OAAO,CAAE,EAC5C;wBACI,SAAS,GAAG,KAAK;oBACrB;AACK,yBAAA,IAAI,SAAS,CAAC,QAAQ,CAAE,OAAO,CAAE,EACtC;wBACI,SAAS,GAAG,KAAK;oBACrB;AACK,yBAAA,IAAI,eAAe,CAAC,QAAQ,CAAE,OAAO,CAAE,EAC5C;wBACI,SAAS,GAAG,KAAK;oBACrB;AACK,yBAAA,IAAI,CAAE,OAAO,CAAE,CAAC,CAAE,IAAI,GAAG,IAAI,OAAO,CAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,GAAG;AAC9D,yBAAE,OAAO,CAAE,CAAC,CAAE,IAAI,GAAG,IAAI,OAAO,CAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,GAAG,CAAE;AAC/D,yBAAE,OAAO,CAAE,CAAC,CAAE,IAAI,GAAG,IAAI,OAAO,CAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,IAAI,GAAG,CAAE,EACvE;wBACI,SAAS,GAAG,KAAK;oBACrB;yBACK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,UAAU,CAAE,OAAO,CAAE,CAAE,EAC/C;wBACI,SAAS,GAAG,KAAK;oBACrB;yBAEA;AACI,wBAAA,OAAO,CAAC,KAAK,CAAE,+CAA+C,GAAG,OAAO,CAAE;wBAC1E;oBACJ;AAEA,oBAAA,IAAI,GAAG,OAAO,CAAE,SAAS,EAAE,OAAO,CAAE;oBACpC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAE,CAAA,CAAA,EAAK,OAAQ,CAAA,CAAA,CAAG,EAAE,IAAI,CAAE;gBACjD;gBAEA,CAAC,KAAM,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE;YAC5B;QACJ;QAEA,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAA,SAAS,CAAC,SAAS,GAAG,gBAAgB;QACtC,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACvC,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QAErB,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7C,QAAA,MAAM,CAAC,KAAK,GAAG,kBAAkB;QACjC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAE,MAAM,CAAE,CAAC;AACzC,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAE,IAAI,EAAE,MAAM,CAAE,CAAC;AACxE,QAAA,SAAS,CAAC,WAAW,CAAE,MAAM,CAAE;AAE/B,QAAA,GAAG,CAAC,WAAW,CAAE,IAAI,CAAE;AACvB,QAAA,SAAS,CAAC,WAAW,CAAE,GAAG,CAAE;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,SAAS,CAAE;IACtC;AAEA,IAAA,IAAI,CAAE,IAAW,EAAE,IAAY,EAAE,MAAgB,EAAA;AAE7C,QAAA,MAAM,UAAU,GAAG,CAAE,QAAQ,EAAE,UAAU,CAAE;QAC3C,OAAO,CAAC,MAAM,CAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iCAAiC,GAAG,IAAI,CAAE;AAChH,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,GAAG,IAAI;QACjD,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAE,UAAU,CAAE;AAC7C,QAAA,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI;AAC5B,QAAA,MAAM,CAAC,WAAW,CAAE,EAAE,CAAE;AACxB,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,EACnB;AACI,YAAA,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK,EAAG;gBAC3B,IAAI,CAAC,IAAI,CAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAE;gBACzB;YACJ;YACA,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAE,IAAI,CAAE;AACvC,YAAA,EAAE,CAAC,SAAS,GAAG,eAAe;AAC9B,YAAA,EAAE,CAAC,SAAS,GAAG,EAAE;AACjB,YAAA,EAAE,CAAC,WAAW,CAAE,EAAE,CAAE;QACxB;IACJ;AAEA,IAAA,UAAU,CAAE,IAAW,EAAA;AAEnB,QAAA,IAAI,CAAC,IAAI,CAAE,IAAI,EAAE,QAAQ,CAAE;IAC/B;AAEA,IAAA,YAAY,CAAE,IAAW,EAAA;AAErB,QAAA,IAAI,CAAC,IAAI,CAAE,IAAI,EAAE,UAAU,CAAE;IACjC;IAEA,mBAAmB,GAAA;QAEf,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;IAEA,iBAAiB,GAAA;AAEb,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE;QACpC,OAAO,CAAC,MAAM,CAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAE;QAChD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,IAAI,CAAC,WAAW,CAAE;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;IAChC;IAEA,YAAY,CAAE,IAAS,EAAE,MAAgB,EAAA;AAErC,QAAA,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW;QACnC,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;QACxC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,EAAG;AACzC,YAAA,IAAI,CAAC,cAAc,CAAE,IAAI,EAAE,MAAM,CAAE;YACnC;QACJ;QACA,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACrC,QAAA,EAAE,CAAC,SAAS,GAAG,eAAe;AAC9B,QAAA,EAAE,CAAC,SAAS,GAAG,KAAK,IAAK,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,CAAC,GAAG,uBAAuB,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAK,IAAI,CAAC,KAAK,CAAE,IAAI,CAAE;AACnM,QAAA,MAAM,EAAE,WAAW,CAAE,EAAE,CAAE;IAC7B;IAEA,cAAc,CAAE,IAAW,EAAE,MAAgB,EAAA;AAEzC,QAAA,OAAO,CAAC,MAAM,CAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE;QACvD,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACrC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,EACnB;AACI,YAAA,IAAI,CAAC,YAAY,CAAE,EAAE,EAAE,EAAE,CAAE;QAC/B;QAEA,IAAI,MAAM,EACV;AACI,YAAA,MAAM,CAAC,WAAW,CAAE,EAAE,CAAE;QAC5B;aAEA;AACI,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,EAAE,CAAE;QAC/B;IACJ;AAEA,IAAA,KAAK,CAAE,GAAW,EAAE,OAAA,GAAkB,EAAE,EAAE,MAAgB,EAAA;QAEtD,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACvC,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACb,QAAA,GAAG,CAAC,GAAG,GAAG,OAAO;AACjB,QAAA,GAAG,CAAC,SAAS,GAAG,MAAM;AACtB,QAAA,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI;AAC5B,QAAA,MAAM,CAAC,WAAW,CAAE,GAAG,CAAE;IAC7B;IAEA,MAAM,CAAE,OAAiB,EAAE,QAAA,GAAqB,EAAE,EAAE,KAAc,EAAE,MAAe,EAAA;AAE/E,QAAA,MAAM,MAAM,GAAG,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAEvE,IAAI,CAAC,MAAM,EACX;YACI,IAAI,GAAG,GAAgB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACpD,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM;YACjC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO;AACpC,YAAA,GAAG,CAAC,SAAS,GAAG,8BAA8B;AAE9C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EACvC;AACI,gBAAA,IAAI,CAAC,KAAK,CAAE,OAAO,CAAE,CAAC,CAAE,EAAE,QAAQ,CAAE,CAAC,CAAE,EAAE,GAAG,CAAE;YAClD;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,GAAG,CAAE;QAChC;aAEA;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EACvC;AACI,gBAAA,IAAI,CAAC,KAAK,CAAE,OAAO,CAAE,CAAC,CAAE,EAAE,QAAQ,CAAE,CAAC,CAAE,CAAE;YAC7C;QACJ;IACJ;IAEA,KAAK,CAAE,GAAW,EAAE,OAAA,GAAkB,EAAE,EAAE,QAAA,GAAoB,IAAI,EAAE,QAAA,GAAoB,KAAK,EAAA;QAEzF,IAAI,KAAK,GAAQ,QAAQ,CAAC,aAAa,CAAE,OAAO,CAAE;AAClD,QAAA,KAAK,CAAC,GAAG,GAAG,GAAG;AACf,QAAA,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACzB,QAAA,KAAK,CAAC,QAAQ,GAAG,QAAQ;QACzB,IAAI,QAAQ,EACZ;AACI,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI;QACtB;AACA,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI;AACjB,QAAA,KAAK,CAAC,GAAG,GAAG,OAAO;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,KAAK,CAAG;IACnC;IAEA,IAAI,CAAE,IAAY,EAAE,OAAA,GAAmB,KAAK,EAAE,KAAc,EAAE,IAAa,EAAA;AAEvE,QAAA,OAAO,CAAC,MAAM,CAAE,IAAI,KAAK,SAAS,CAAE;AAEpC,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAE,EAAE,EAAE,6DAA6D,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAE;QAEjH,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAE,KAAK,CAAE;AAC5C,QAAA,MAAM,CAAC,SAAS,GAAG,6DAA6D;QAChF,MAAM,CAAC,WAAW,CAAE,EAAE,CAAC,QAAQ,CAAE,IAAI,KAAM,OAAO,GAAG,sBAAsB,GAAG,aAAa,CAAE,CAAE,CAAE;AACjG,QAAA,MAAM,CAAC,SAAS,KAAM,KAAK,KAAM,OAAO,GAAG,WAAW,GAAG,MAAM,CAAE,CAAE;AACnE,QAAA,IAAI,CAAC,WAAW,CAAE,MAAM,CAAE;;QAG1B,EAAE,CAAC,aAAa,CAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAE;IACvD;AAEA,IAAA,SAAS,CAAE,IAAY,EAAE,MAAa,EAAE,WAAmB,IAAI,EAAA;QAE3D,IAAI,UAAU,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;YACI,MAAM,IAAI,GAAG,CAAC,CAAE,CAAC,CAAE,CAAC;YACpB,MAAM,IAAI,GAAG,CAAC,CAAE,CAAC,CAAE,CAAC;AACpB,YAAA,IAAI,QAAQ,IAAI,KAAK,EACrB;AACI,gBAAA,UAAU,IAAI,IAAI,IAAK,IAAI,GAAG,wBAAwB,GAAG,IAAI,GAAG,SAAS,GAAG,EAAE,CAAE,IAAK,MAAM,CAAC,OAAO,CAAE,CAAC,CAAE,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAE;YACjJ;AACK,iBAAA,IAAI,QAAQ,IAAI,IAAI,EACzB;AACI,gBAAA,UAAU,IAAI,IAAI,GAAG,uBAAuB,GAAG,IAAI,GAAG,SAAS,IAAK,MAAM,CAAC,OAAO,CAAE,CAAC,CAAE,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAE;YAChI;QACJ;QACA,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACpC,QAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAE,4BAA4B,GAAG,IAAI,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,SAAS,CAAE;AACrG,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,EAAE,CAAE;IAC/B;AAEA,IAAA,WAAW,CAAE,IAAY,EAAE,IAAY,EAAE,MAAa,EAAE,GAAY,EAAA;QAEhE,IAAI,CAAC,mBAAmB,EAAE;QAE1B,IAAI,UAAU,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,YAAA,MAAM,IAAI,GAAG,CAAC,CAAE,CAAC,CAAE;AACnB,YAAA,MAAM,IAAI,GAAG,CAAC,CAAE,CAAC,CAAE;AACnB,YAAA,UAAU,IAAI,IAAI,GAAG,uBAAuB,GAAG,IAAI,GAAG,SAAS,IAAK,MAAM,CAAC,OAAO,CAAE,CAAC,CAAE,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAE;QAChI;QACA,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACrC,QAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI,GAAG,UAAU,GAAG,GAAG,IAAK,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE,CAAE,GAAG,SAAS,CAAE;AAC/H,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,CAAE,EAAE,CAAE;QAEnC,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,IAAI,CAAC,SAAS,CAAE,IAAI,CAAE;IAC1B;IAEA,KAAK,CAAE,IAAY,EAAE,IAAY,EAAA;QAE7B,OAAO,CAAC,MAAM,CAAE,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAE;AAC1D,QAAA,OAAO,CAAA,SAAA,EAAa,IAAK,CAAA,EAAA,EAAM,IAAK,MAAM;IAC9C;IAEA,KAAK,CAAE,IAAY,EAAE,IAAY,EAAA;QAE7B,OAAO,CAAC,MAAM,CAAE,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAE;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAE,OAAO,EAAE,EAAE,CAAE;QAC7C,MAAM,CAAC,GAAG,UAAiB;QAC3B,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,EAC3B;YACI,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAE,SAAS,CAAE;AACtC,YAAA,OAAO,yBAA0B,IAAK,CAAA,UAAA,EAAc,OAAQ,CAAA,IAAA,EAAQ,IAAK,MAAM;QACnF;aAEA;AACI,YAAA,OAAO,CAAC,IAAI,CAAE,mFAAmF,CAAE;QACvG;IACJ;IAEA,KAAK,CAAE,IAAY,EAAE,SAAkB,EAAA;AAEnC,QAAA,OAAO,CAAC,MAAM,CAAE,IAAI,KAAK,SAAS,CAAE;AACpC,QAAA,OAAO,uBAAwB,SAAS,IAAI,EAAG,CAAA,EAAA,EAAM,IAAK,SAAS;IACvE;AAEA,IAAA,YAAY,CAAE,CAAM,EAAA;AAEhB,QAAA,CAAC,CAAC,SAAS,GAAG,EAAE;QAChB,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAE,OAAO,CAAE,CAAC;AACrC,QAAA,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEzB,UAAU,CAAE,MAAK;AACb,YAAA,CAAC,CAAC,SAAS,GAAG,EAAE;YAChB,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAE,MAAM,CAAE,CAAC;AACpC,YAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,CAAC,EAAE,IAAI,CAAE;AAET,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,CAAE;AAClF,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1B;AACH;;;;"}
1
+ {"version":3,"file":"DocMaker.js","sources":["../../src/extensions/DocMaker.ts"],"sourcesContent":["// DocMaker.ts @jxarco\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif ( !LX )\r\n{\r\n throw ( 'Missing LX namespace!' );\r\n}\r\n\r\nLX.extensions.push( 'DocMaker' );\r\n\r\nconst CPP_KEY_WORDS = [ 'int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast',\r\n 'new', 'delete', 'void', 'true', 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace',\r\n 'auto' ];\r\nconst CLASS_WORDS = [ 'uint32_t', 'uint64_t', 'uint8_t' ];\r\nconst STATEMENT_WORDS = [ 'for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import',\r\n 'from', 'await' ];\r\n\r\nconst JS_KEY_WORDS = [ 'var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true',\r\n 'false', 'NaN', 'this' ];\r\nconst HTML_ATTRIBUTES = [ 'html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang' ];\r\nconst HTML_TAGS = [ 'html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style' ];\r\n\r\nexport class DocMaker\r\n{\r\n root: Element;\r\n _listQueued: Element | undefined = undefined;\r\n\r\n constructor( element?: Element )\r\n {\r\n this.root = element ?? document.body;\r\n }\r\n\r\n setDomTarget( element: Element )\r\n {\r\n this.root = element;\r\n }\r\n\r\n lineBreak( target?: Element )\r\n {\r\n target = target ?? this.root;\r\n target.appendChild( document.createElement( 'br' ) );\r\n }\r\n\r\n header( string: string, type: string, id: string )\r\n {\r\n console.assert( string !== undefined && type !== undefined );\r\n let header = document.createElement( type );\r\n header.innerHTML = string;\r\n if ( id ) header.id = id;\r\n this.root.appendChild( header );\r\n }\r\n\r\n paragraph( string: string, sup: boolean = false, className?: string )\r\n {\r\n console.assert( string !== undefined );\r\n let paragraph = document.createElement( sup ? 'sup' : 'p' );\r\n paragraph.className = 'leading-relaxed ' + ( className ?? '' );\r\n paragraph.innerHTML = string;\r\n this.root.appendChild( paragraph );\r\n }\r\n\r\n code( text: string, language: string = 'js' )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n text.replaceAll( '<', '&lt;' );\r\n text.replaceAll( '>', '&gt;' );\r\n\r\n let highlight = '';\r\n let content = '';\r\n\r\n const getHTML = ( h: string, c: string ) => {\r\n return `<span class=\"${h}\">${c}</span>`;\r\n };\r\n\r\n for ( let i = 0; i < text.length; ++i )\r\n {\r\n const char = text[i];\r\n const string = text.substr( i );\r\n\r\n const endLineIdx = string.indexOf( '\\n' );\r\n const line = string.substring( 0, endLineIdx > -1 ? endLineIdx : undefined );\r\n\r\n if ( char == '@' )\r\n {\r\n const str = line.substr( 1 );\r\n\r\n if ( !( str.indexOf( '@' ) > -1 ) && !( str.indexOf( '[' ) > -1 ) )\r\n {\r\n continue;\r\n }\r\n\r\n let html = null;\r\n\r\n const tagIndex = str.indexOf( '@' );\r\n const skipTag = str[tagIndex - 1] == '|';\r\n\r\n // Highlight is specified\r\n if ( text[i + 1] == '[' )\r\n {\r\n highlight = str.substr( 1, 3 );\r\n content = str.substring( 5, tagIndex );\r\n\r\n if ( skipTag )\r\n {\r\n const newString = str.substring( 6 + content.length );\r\n const preContent = content;\r\n const postContent = newString.substring( 0, newString.indexOf( '@' ) );\r\n const finalContent = preContent.substring( 0, preContent.length - 1 ) + '@' + postContent;\r\n html = getHTML( highlight, finalContent );\r\n\r\n const ogContent = preContent + '@' + postContent;\r\n text = text.replace( `@[${highlight}]${ogContent}@`, html );\r\n }\r\n else\r\n {\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@[${highlight}]${content}@`, html );\r\n }\r\n }\r\n else\r\n {\r\n content = str.substring( 0, tagIndex );\r\n if ( skipTag )\r\n {\r\n const preContent = str.substring( 0, str.indexOf( '@' ) - 1 );\r\n content = str.substring( preContent.length + 1 );\r\n content = preContent + content.substring( 0, content.substring( 1 ).indexOf( '@' ) + 1 );\r\n text = text.substr( 0, i ) + '@' + content + '@' + text.substr( i + content.length + 3 );\r\n }\r\n\r\n if ( language == 'cpp' && CPP_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( language == 'js' && JS_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( CLASS_WORDS.includes( content ) )\r\n {\r\n highlight = 'cls';\r\n }\r\n else if ( STATEMENT_WORDS.includes( content ) )\r\n {\r\n highlight = 'lit';\r\n }\r\n else if ( HTML_TAGS.includes( content ) )\r\n {\r\n highlight = 'tag';\r\n }\r\n else if ( HTML_ATTRIBUTES.includes( content ) )\r\n {\r\n highlight = 'atn';\r\n }\r\n else if ( ( content[0] == '\"' && content[content.length - 1] == '\"' )\r\n || ( content[0] == \"'\" && content[content.length - 1] == \"'\" )\r\n || ( content[0] == '`' && content[content.length - 1] == '`' ) )\r\n {\r\n highlight = 'str';\r\n }\r\n else if ( !Number.isNaN( parseFloat( content ) ) )\r\n {\r\n highlight = 'dec';\r\n }\r\n else\r\n {\r\n console.error( 'ERROR[Code Parsing]: Unknown highlight type: ' + content );\r\n return;\r\n }\r\n\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@${content}@`, html );\r\n }\r\n\r\n i += html.length - 1;\r\n }\r\n }\r\n\r\n let container = document.createElement( 'div' );\r\n container.className = 'code-container';\r\n let pre = document.createElement( 'pre' );\r\n let code = document.createElement( 'code' );\r\n code.innerHTML = text;\r\n\r\n let button = document.createElement( 'button' );\r\n button.title = 'Copy code sample';\r\n button.appendChild( LX.makeIcon( 'Copy' ) );\r\n button.addEventListener( 'click', this._copySnippet.bind( this, button ) );\r\n container.appendChild( button );\r\n\r\n pre.appendChild( code );\r\n container.appendChild( pre );\r\n this.root.appendChild( container );\r\n }\r\n\r\n list( list: any[], type: string, target?: Element )\r\n {\r\n const validTypes = [ 'bullet', 'numbered' ];\r\n console.assert( list && list.length > 0 && validTypes.includes( type ),\r\n 'Invalid list type or empty list' + type );\r\n const typeString = type == 'bullet' ? 'ul' : 'ol';\r\n let ul = document.createElement( typeString );\r\n target = target ?? this.root;\r\n target.appendChild( ul );\r\n for ( var el of list )\r\n {\r\n if ( el.constructor === Array )\r\n {\r\n this.list( el, type, ul );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = el;\r\n ul.appendChild( li );\r\n }\r\n }\r\n\r\n bulletList( list: any[] )\r\n {\r\n this.list( list, 'bullet' );\r\n }\r\n\r\n numberedList( list: any[] )\r\n {\r\n this.list( list, 'numbered' );\r\n }\r\n\r\n startCodeBulletList()\r\n {\r\n let ul = document.createElement( 'ul' );\r\n this._listQueued = ul;\r\n }\r\n\r\n endCodeBulletList()\r\n {\r\n if ( this._listQueued === undefined ) return;\r\n console.assert( this._listQueued !== undefined );\r\n this.root.appendChild( this._listQueued );\r\n this._listQueued = undefined;\r\n }\r\n\r\n codeListItem( item: any, target?: Element )\r\n {\r\n target = target ?? this._listQueued;\r\n let split = item.constructor === Array;\r\n if ( split && item[0].constructor === Array )\r\n {\r\n this.codeBulletList( item, target );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = split\r\n ? ( item.length == 2\r\n ? this.iCode( item[0] ) + ': ' + item[1]\r\n : this.iCode( item[0] + \" <span class='desc'>(\" + item[1] + ')</span>' ) + ': ' + item[2] )\r\n : this.iCode( item );\r\n target?.appendChild( li );\r\n }\r\n\r\n codeBulletList( list: any[], target?: Element )\r\n {\r\n console.assert( list !== undefined && list.length > 0 );\r\n let ul = document.createElement( 'ul' );\r\n for ( var el of list )\r\n {\r\n this.codeListItem( el, ul );\r\n }\r\n\r\n if ( target )\r\n {\r\n target.appendChild( ul );\r\n }\r\n else\r\n {\r\n this.root.appendChild( ul );\r\n }\r\n }\r\n\r\n image( src: string, caption: string = '', parent?: Element )\r\n {\r\n let img = document.createElement( 'img' );\r\n img.src = src;\r\n img.alt = caption;\r\n img.className = 'my-1';\r\n parent = parent ?? this.root;\r\n parent.appendChild( img );\r\n }\r\n\r\n images( sources: string[], captions: string[] = [], width?: string, height?: string )\r\n {\r\n const mobile = navigator && /Android|iPhone/i.test( navigator.userAgent );\r\n\r\n if ( !mobile )\r\n {\r\n let div: HTMLElement = document.createElement( 'div' );\r\n div.style.width = width ?? 'auto';\r\n div.style.height = height ?? '256px';\r\n div.className = 'flex flex-row justify-center';\r\n\r\n for ( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[i], captions[i], div );\r\n }\r\n\r\n this.root.appendChild( div );\r\n }\r\n else\r\n {\r\n for ( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[i], captions[i] );\r\n }\r\n }\r\n }\r\n\r\n video( src: string, caption: string = '', controls: boolean = true, autoplay: boolean = false )\r\n {\r\n let video: any = document.createElement( 'video' );\r\n video.src = src;\r\n video.controls = controls;\r\n video.autoplay = autoplay;\r\n if ( autoplay )\r\n {\r\n video.muted = true;\r\n }\r\n video.loop = true;\r\n video.alt = caption;\r\n this.root.appendChild( video );\r\n }\r\n\r\n note( text: string, warning: boolean = false, title?: string, icon?: string )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n const note = LX.makeContainer( [], 'border rounded-lg overflow-hidden text-md fg-secondary my-6', '',\r\n this.root );\r\n\r\n let header = document.createElement( 'div' );\r\n header.className = 'flex bg-tertiary font-semibold px-3 py-2 gap-2 fg-secondary';\r\n header.appendChild( LX.makeIcon( icon ?? ( warning ? 'MessageSquareWarning' : 'NotepadText' ) ) );\r\n header.innerHTML += title ?? ( warning ? 'Important' : 'Note' );\r\n note.appendChild( header );\r\n\r\n // Node body\r\n LX.makeContainer( [], 'leading-6 p-3', text, note );\r\n }\r\n\r\n classCtor( name: string, params: any[], language: string = 'js' )\r\n {\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const str1 = p[0]; // cpp: param js: name\r\n const str2 = p[1]; // cpp: defaultValue js: type\r\n if ( language == 'cpp' )\r\n {\r\n paramsHTML += str1 + ( str2 ? \" = <span class='desc'>\" + str2 + '</span>' : '' )\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n else if ( language == 'js' )\r\n {\r\n paramsHTML += str1 + \": <span class='desc'>\" + str2 + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n }\r\n let pr = document.createElement( 'p' );\r\n pr.innerHTML = this.iCode( \"<span class='constructor'>\" + name + '(' + paramsHTML + ')' + '</span>' );\r\n this.root.appendChild( pr );\r\n }\r\n\r\n classMethod( name: string, desc: string, params: any[], ret?: string ): HTMLElement | null\r\n {\r\n this.startCodeBulletList();\r\n\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const name = p[0];\r\n const type = p[1];\r\n paramsHTML += name + \": <span class='desc'>\" + type + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n let li = document.createElement( 'li' );\r\n li.innerHTML = this.iCode(\r\n \"<span class='method'>\" + name + ' (' + paramsHTML + ')' + ( ret ? ( ': ' + ret ) : '' ) + '</span>'\r\n );\r\n this._listQueued?.appendChild( li );\r\n\r\n this.endCodeBulletList();\r\n\r\n this.paragraph( desc );\r\n\r\n return li.parentElement;\r\n }\r\n\r\n iLink( text: string, href: string )\r\n {\r\n console.assert( text !== undefined && href !== undefined );\r\n return `<a href=\"${href}\">${text}</a>`;\r\n }\r\n\r\n iPage( text: string, page: string )\r\n {\r\n console.assert( text !== undefined && page !== undefined );\r\n const startPage = page.replace( '.html', '' );\r\n const g = globalThis as any;\r\n if ( g.setPath && g.loadPage )\r\n {\r\n const tabName = g.setPath( startPage );\r\n return `<a onclick=\"loadPage('${page}', true, '${tabName}')\">${text}</a>`;\r\n }\r\n else\r\n {\r\n console.warn( '[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!' );\r\n }\r\n }\r\n\r\n iCode( text: string, codeClass?: string )\r\n {\r\n console.assert( text !== undefined );\r\n return `<code class=\"inline ${codeClass ?? ''}\">${text}</code>`;\r\n }\r\n\r\n _copySnippet( b: any )\r\n {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Check' ) );\r\n b.classList.add( 'copied' );\r\n\r\n setTimeout( () => {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Copy' ) );\r\n b.classList.remove( 'copied' );\r\n }, 2000 );\r\n\r\n navigator.clipboard.writeText( b.dataset['snippet'] ?? b.parentElement.innerText );\r\n console.log( 'Copied!' );\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}