lexgui 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +9 -8
  4. package/build/components/Dialog.d.ts +20 -20
  5. package/build/components/Footer.d.ts +14 -14
  6. package/build/components/Menubar.d.ts +59 -59
  7. package/build/core/Area.d.ts +143 -143
  8. package/build/core/Namespace.js +34 -34
  9. package/build/core/Namespace.js.map +1 -1
  10. package/build/core/Panel.d.ts +538 -539
  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 +163 -163
  15. package/build/extensions/Audio.js.map +1 -1
  16. package/build/extensions/CodeEditor.js +5022 -4802
  17. package/build/extensions/CodeEditor.js.map +1 -1
  18. package/build/extensions/DocMaker.d.ts +27 -27
  19. package/build/extensions/DocMaker.js +327 -315
  20. package/build/extensions/DocMaker.js.map +1 -1
  21. package/build/extensions/GraphEditor.js +2760 -2659
  22. package/build/extensions/GraphEditor.js.map +1 -1
  23. package/build/extensions/ImUi.js +227 -226
  24. package/build/extensions/ImUi.js.map +1 -1
  25. package/build/extensions/Timeline.d.ts +670 -677
  26. package/build/extensions/Timeline.js +3955 -3958
  27. package/build/extensions/Timeline.js.map +1 -1
  28. package/build/extensions/VideoEditor.js +898 -894
  29. package/build/extensions/VideoEditor.js.map +1 -1
  30. package/build/extensions/index.d.ts +8 -8
  31. package/build/extensions/index.js +10 -10
  32. package/build/index.all.d.ts +2 -2
  33. package/build/index.css.d.ts +4 -4
  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 +178 -71
  42. package/build/lexgui.js +13796 -13330
  43. package/build/lexgui.js.map +1 -1
  44. package/build/lexgui.min.css +2 -2
  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 +17 -1
  50. package/demo.js +6 -5
  51. package/examples/all-components.html +3 -0
  52. package/examples/asset-view.html +4 -4
  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
@@ -1,315 +1,327 @@
1
- // This is a generated file. Do not edit.
2
- import { LX } from '../core/Namespace.js';
3
-
4
- // DocMaker.ts @jxarco
5
- if (!LX) {
6
- throw ("Missing LX namespace!");
7
- }
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'];
10
- 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 HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];
14
- const HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];
15
- class DocMaker {
16
- root;
17
- _listQueued = undefined;
18
- constructor(element) {
19
- this.root = element ?? document.body;
20
- }
21
- setDomTarget(element) {
22
- this.root = element;
23
- }
24
- lineBreak(target) {
25
- target = target ?? this.root;
26
- target.appendChild(document.createElement('br'));
27
- }
28
- header(string, type, id) {
29
- console.assert(string !== undefined && type !== undefined);
30
- let header = document.createElement(type);
31
- header.innerHTML = string;
32
- if (id)
33
- header.id = id;
34
- this.root.appendChild(header);
35
- }
36
- paragraph(string, sup = false, className) {
37
- console.assert(string !== undefined);
38
- let paragraph = document.createElement(sup ? 'sup' : 'p');
39
- paragraph.className = "leading-relaxed " + (className ?? "");
40
- paragraph.innerHTML = string;
41
- this.root.appendChild(paragraph);
42
- }
43
- code(text, language = "js") {
44
- console.assert(text !== undefined);
45
- text.replaceAll('<', '&lt;');
46
- text.replaceAll('>', '&gt;');
47
- let highlight = "";
48
- let content = "";
49
- const getHTML = (h, c) => {
50
- return `<span class="${h}">${c}</span>`;
51
- };
52
- for (let i = 0; i < text.length; ++i) {
53
- const char = text[i];
54
- const string = text.substr(i);
55
- const endLineIdx = string.indexOf('\n');
56
- const line = string.substring(0, endLineIdx > -1 ? endLineIdx : undefined);
57
- if (char == '@') {
58
- const str = line.substr(1);
59
- if (!(str.indexOf('@') > -1) && !(str.indexOf('[') > -1)) {
60
- continue;
61
- }
62
- let html = null;
63
- const tagIndex = str.indexOf('@');
64
- const skipTag = (str[tagIndex - 1] == '|');
65
- // Highlight is specified
66
- if (text[i + 1] == '[') {
67
- highlight = str.substr(1, 3);
68
- content = str.substring(5, tagIndex);
69
- if (skipTag) {
70
- const newString = str.substring(6 + content.length);
71
- const preContent = content;
72
- const postContent = newString.substring(0, newString.indexOf('@'));
73
- const finalContent = preContent.substring(0, preContent.length - 1) + '@' + postContent;
74
- html = getHTML(highlight, finalContent);
75
- const ogContent = preContent + '@' + postContent;
76
- text = text.replace(`@[${highlight}]${ogContent}@`, html);
77
- }
78
- else {
79
- html = getHTML(highlight, content);
80
- text = text.replace(`@[${highlight}]${content}@`, html);
81
- }
82
- }
83
- else {
84
- content = str.substring(0, tagIndex);
85
- if (skipTag) {
86
- const preContent = str.substring(0, str.indexOf('@') - 1);
87
- content = str.substring(preContent.length + 1);
88
- content = preContent + content.substring(0, content.substring(1).indexOf('@') + 1);
89
- text = text.substr(0, i) + '@' + content + '@' + text.substr(i + content.length + 3);
90
- }
91
- if (language == "cpp" && CPP_KEY_WORDS.includes(content)) {
92
- highlight = "kwd";
93
- }
94
- else if (language == "js" && JS_KEY_WORDS.includes(content)) {
95
- highlight = "kwd";
96
- }
97
- else if (CLASS_WORDS.includes(content)) {
98
- highlight = "cls";
99
- }
100
- else if (STATEMENT_WORDS.includes(content)) {
101
- highlight = "lit";
102
- }
103
- else if (HTML_TAGS.includes(content)) {
104
- highlight = "tag";
105
- }
106
- else if (HTML_ATTRIBUTES.includes(content)) {
107
- highlight = "atn";
108
- }
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
- }
114
- else if (!Number.isNaN(parseFloat(content))) {
115
- highlight = "dec";
116
- }
117
- else {
118
- console.error("ERROR[Code Parsing]: Unknown highlight type: " + content);
119
- return;
120
- }
121
- html = getHTML(highlight, content);
122
- text = text.replace(`@${content}@`, html);
123
- }
124
- i += (html.length - 1);
125
- }
126
- }
127
- let container = document.createElement('div');
128
- container.className = "code-container";
129
- let pre = document.createElement('pre');
130
- let code = document.createElement('code');
131
- code.innerHTML = text;
132
- let button = document.createElement('button');
133
- button.title = "Copy code sample";
134
- button.appendChild(LX.makeIcon("Copy"));
135
- button.addEventListener('click', this._copySnippet.bind(this, button));
136
- container.appendChild(button);
137
- pre.appendChild(code);
138
- container.appendChild(pre);
139
- this.root.appendChild(container);
140
- }
141
- list(list, type, target) {
142
- const validTypes = ['bullet', 'numbered'];
143
- console.assert(list && list.length > 0 && validTypes.includes(type), "Invalid list type or empty list" + type);
144
- const typeString = type == 'bullet' ? 'ul' : 'ol';
145
- let ul = document.createElement(typeString);
146
- target = target ?? this.root;
147
- target.appendChild(ul);
148
- for (var el of list) {
149
- if (el.constructor === Array) {
150
- this.list(el, type, ul);
151
- return;
152
- }
153
- let li = document.createElement('li');
154
- li.className = "leading-loose";
155
- li.innerHTML = el;
156
- ul.appendChild(li);
157
- }
158
- }
159
- bulletList(list) {
160
- this.list(list, 'bullet');
161
- }
162
- numberedList(list) {
163
- this.list(list, 'numbered');
164
- }
165
- startCodeBulletList() {
166
- let ul = document.createElement('ul');
167
- this._listQueued = ul;
168
- }
169
- endCodeBulletList() {
170
- if (this._listQueued === undefined)
171
- return;
172
- console.assert(this._listQueued !== undefined);
173
- this.root.appendChild(this._listQueued);
174
- this._listQueued = undefined;
175
- }
176
- codeListItem(item, target) {
177
- target = target ?? this._listQueued;
178
- let split = (item.constructor === Array);
179
- if (split && item[0].constructor === Array) {
180
- this.codeBulletList(item, target);
181
- return;
182
- }
183
- 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);
186
- target?.appendChild(li);
187
- }
188
- codeBulletList(list, target) {
189
- console.assert(list !== undefined && list.length > 0);
190
- let ul = document.createElement('ul');
191
- for (var el of list) {
192
- this.codeListItem(el, ul);
193
- }
194
- if (target) {
195
- target.appendChild(ul);
196
- }
197
- else {
198
- this.root.appendChild(ul);
199
- }
200
- }
201
- image(src, caption = "", parent) {
202
- let img = document.createElement('img');
203
- img.src = src;
204
- img.alt = caption;
205
- img.className = "my-1";
206
- parent = parent ?? this.root;
207
- parent.appendChild(img);
208
- }
209
- images(sources, captions = [], width, height) {
210
- const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);
211
- if (!mobile) {
212
- 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";
216
- for (let i = 0; i < sources.length; ++i) {
217
- this.image(sources[i], captions[i], div);
218
- }
219
- this.root.appendChild(div);
220
- }
221
- else {
222
- for (let i = 0; i < sources.length; ++i) {
223
- this.image(sources[i], captions[i]);
224
- }
225
- }
226
- }
227
- video(src, caption = "", controls = true, autoplay = false) {
228
- let video = document.createElement('video');
229
- video.src = src;
230
- video.controls = controls;
231
- video.autoplay = autoplay;
232
- if (autoplay) {
233
- video.muted = true;
234
- }
235
- video.loop = true;
236
- video.alt = caption;
237
- this.root.appendChild(video);
238
- }
239
- note(text, warning = false, title, icon) {
240
- console.assert(text !== undefined);
241
- const note = LX.makeContainer([], "border rounded-lg overflow-hidden text-md fg-secondary my-6", "", this.root);
242
- 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"));
246
- note.appendChild(header);
247
- // Node body
248
- LX.makeContainer([], "leading-6 p-3", text, note);
249
- }
250
- classCtor(name, params, language = "js") {
251
- let paramsHTML = "";
252
- for (var p of params) {
253
- const str1 = p[0]; // cpp: param js: name
254
- 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) ? ', ' : '');
257
- }
258
- else if (language == "js") {
259
- paramsHTML += str1 + ": <span class='desc'>" + str2 + "</span>" + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
260
- }
261
- }
262
- let pr = document.createElement('p');
263
- pr.innerHTML = this.iCode("<span class='constructor'>" + name + "(" + paramsHTML + ")" + "</span>");
264
- this.root.appendChild(pr);
265
- }
266
- classMethod(name, desc, params, ret) {
267
- this.startCodeBulletList();
268
- let paramsHTML = "";
269
- for (var p of params) {
270
- const name = p[0];
271
- const type = p[1];
272
- paramsHTML += name + ": <span class='desc'>" + type + "</span>" + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
273
- }
274
- let li = document.createElement('li');
275
- li.innerHTML = this.iCode("<span class='method'>" + name + " (" + paramsHTML + ")" + (ret ? (": " + ret) : "") + "</span>");
276
- this._listQueued?.appendChild(li);
277
- this.endCodeBulletList();
278
- this.paragraph(desc);
279
- }
280
- iLink(text, href) {
281
- console.assert(text !== undefined && href !== undefined);
282
- return `<a href="${href}">${text}</a>`;
283
- }
284
- iPage(text, page) {
285
- console.assert(text !== undefined && page !== undefined);
286
- const startPage = page.replace(".html", "");
287
- const g = globalThis;
288
- if (g.setPath && g.loadPage) {
289
- const tabName = g.setPath(startPage);
290
- return `<a onclick="loadPage('${page}', true, '${tabName}')">${text}</a>`;
291
- }
292
- else {
293
- console.warn("[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!");
294
- }
295
- }
296
- iCode(text, codeClass) {
297
- console.assert(text !== undefined);
298
- return `<code class="inline ${codeClass ?? ""}">${text}</code>`;
299
- }
300
- _copySnippet(b) {
301
- b.innerHTML = "";
302
- b.appendChild(LX.makeIcon("Check"));
303
- b.classList.add('copied');
304
- setTimeout(() => {
305
- b.innerHTML = "";
306
- b.appendChild(LX.makeIcon("Copy"));
307
- b.classList.remove('copied');
308
- }, 2000);
309
- navigator.clipboard.writeText(b.dataset['snippet'] ?? b.parentElement.innerText);
310
- console.log("Copied!");
311
- }
312
- }
313
-
314
- export { DocMaker };
315
- //# sourceMappingURL=DocMaker.js.map
1
+ // This is a generated file. Do not edit.
2
+ import { LX } from '../core/Namespace.js';
3
+
4
+ // DocMaker.ts @jxarco
5
+ if (!LX) {
6
+ throw ('Missing LX namespace!');
7
+ }
8
+ LX.extensions.push('DocMaker');
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'];
12
+ const CLASS_WORDS = ['uint32_t', 'uint64_t', 'uint8_t'];
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'];
17
+ const HTML_ATTRIBUTES = ['html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang'];
18
+ const HTML_TAGS = ['html', 'DOCTYPE', 'head', 'meta', 'title', 'link', 'script', 'body', 'style'];
19
+ class DocMaker {
20
+ root;
21
+ _listQueued = undefined;
22
+ constructor(element) {
23
+ this.root = element ?? document.body;
24
+ }
25
+ setDomTarget(element) {
26
+ this.root = element;
27
+ }
28
+ lineBreak(target) {
29
+ target = target ?? this.root;
30
+ target.appendChild(document.createElement('br'));
31
+ }
32
+ header(string, type, id) {
33
+ console.assert(string !== undefined && type !== undefined);
34
+ let header = document.createElement(type);
35
+ header.innerHTML = string;
36
+ if (id)
37
+ header.id = id;
38
+ this.root.appendChild(header);
39
+ }
40
+ paragraph(string, sup = false, className) {
41
+ console.assert(string !== undefined);
42
+ let paragraph = document.createElement(sup ? 'sup' : 'p');
43
+ paragraph.className = 'leading-relaxed ' + (className ?? '');
44
+ paragraph.innerHTML = string;
45
+ this.root.appendChild(paragraph);
46
+ }
47
+ code(text, language = 'js') {
48
+ console.assert(text !== undefined);
49
+ text.replaceAll('<', '&lt;');
50
+ text.replaceAll('>', '&gt;');
51
+ let highlight = '';
52
+ let content = '';
53
+ const getHTML = (h, c) => {
54
+ return `<span class="${h}">${c}</span>`;
55
+ };
56
+ for (let i = 0; i < text.length; ++i) {
57
+ const char = text[i];
58
+ const string = text.substr(i);
59
+ const endLineIdx = string.indexOf('\n');
60
+ const line = string.substring(0, endLineIdx > -1 ? endLineIdx : undefined);
61
+ if (char == '@') {
62
+ const str = line.substr(1);
63
+ if (!(str.indexOf('@') > -1) && !(str.indexOf('[') > -1)) {
64
+ continue;
65
+ }
66
+ let html = null;
67
+ const tagIndex = str.indexOf('@');
68
+ const skipTag = str[tagIndex - 1] == '|';
69
+ // Highlight is specified
70
+ if (text[i + 1] == '[') {
71
+ highlight = str.substr(1, 3);
72
+ content = str.substring(5, tagIndex);
73
+ if (skipTag) {
74
+ const newString = str.substring(6 + content.length);
75
+ const preContent = content;
76
+ const postContent = newString.substring(0, newString.indexOf('@'));
77
+ const finalContent = preContent.substring(0, preContent.length - 1) + '@' + postContent;
78
+ html = getHTML(highlight, finalContent);
79
+ const ogContent = preContent + '@' + postContent;
80
+ text = text.replace(`@[${highlight}]${ogContent}@`, html);
81
+ }
82
+ else {
83
+ html = getHTML(highlight, content);
84
+ text = text.replace(`@[${highlight}]${content}@`, html);
85
+ }
86
+ }
87
+ else {
88
+ content = str.substring(0, tagIndex);
89
+ if (skipTag) {
90
+ const preContent = str.substring(0, str.indexOf('@') - 1);
91
+ content = str.substring(preContent.length + 1);
92
+ content = preContent + content.substring(0, content.substring(1).indexOf('@') + 1);
93
+ text = text.substr(0, i) + '@' + content + '@' + text.substr(i + content.length + 3);
94
+ }
95
+ if (language == 'cpp' && CPP_KEY_WORDS.includes(content)) {
96
+ highlight = 'kwd';
97
+ }
98
+ else if (language == 'js' && JS_KEY_WORDS.includes(content)) {
99
+ highlight = 'kwd';
100
+ }
101
+ else if (CLASS_WORDS.includes(content)) {
102
+ highlight = 'cls';
103
+ }
104
+ else if (STATEMENT_WORDS.includes(content)) {
105
+ highlight = 'lit';
106
+ }
107
+ else if (HTML_TAGS.includes(content)) {
108
+ highlight = 'tag';
109
+ }
110
+ else if (HTML_ATTRIBUTES.includes(content)) {
111
+ highlight = 'atn';
112
+ }
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';
117
+ }
118
+ else if (!Number.isNaN(parseFloat(content))) {
119
+ highlight = 'dec';
120
+ }
121
+ else {
122
+ console.error('ERROR[Code Parsing]: Unknown highlight type: ' + content);
123
+ return;
124
+ }
125
+ html = getHTML(highlight, content);
126
+ text = text.replace(`@${content}@`, html);
127
+ }
128
+ i += html.length - 1;
129
+ }
130
+ }
131
+ let container = document.createElement('div');
132
+ container.className = 'code-container';
133
+ let pre = document.createElement('pre');
134
+ let code = document.createElement('code');
135
+ code.innerHTML = text;
136
+ let button = document.createElement('button');
137
+ button.title = 'Copy code sample';
138
+ button.appendChild(LX.makeIcon('Copy'));
139
+ button.addEventListener('click', this._copySnippet.bind(this, button));
140
+ container.appendChild(button);
141
+ pre.appendChild(code);
142
+ container.appendChild(pre);
143
+ this.root.appendChild(container);
144
+ }
145
+ list(list, type, target) {
146
+ const validTypes = ['bullet', 'numbered'];
147
+ console.assert(list && list.length > 0 && validTypes.includes(type), 'Invalid list type or empty list' + type);
148
+ const typeString = type == 'bullet' ? 'ul' : 'ol';
149
+ let ul = document.createElement(typeString);
150
+ target = target ?? this.root;
151
+ target.appendChild(ul);
152
+ for (var el of list) {
153
+ if (el.constructor === Array) {
154
+ this.list(el, type, ul);
155
+ return;
156
+ }
157
+ let li = document.createElement('li');
158
+ li.className = 'leading-loose';
159
+ li.innerHTML = el;
160
+ ul.appendChild(li);
161
+ }
162
+ }
163
+ bulletList(list) {
164
+ this.list(list, 'bullet');
165
+ }
166
+ numberedList(list) {
167
+ this.list(list, 'numbered');
168
+ }
169
+ startCodeBulletList() {
170
+ let ul = document.createElement('ul');
171
+ this._listQueued = ul;
172
+ }
173
+ endCodeBulletList() {
174
+ if (this._listQueued === undefined)
175
+ return;
176
+ console.assert(this._listQueued !== undefined);
177
+ this.root.appendChild(this._listQueued);
178
+ this._listQueued = undefined;
179
+ }
180
+ codeListItem(item, target) {
181
+ target = target ?? this._listQueued;
182
+ let split = item.constructor === Array;
183
+ if (split && item[0].constructor === Array) {
184
+ this.codeBulletList(item, target);
185
+ return;
186
+ }
187
+ let li = document.createElement('li');
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);
194
+ target?.appendChild(li);
195
+ }
196
+ codeBulletList(list, target) {
197
+ console.assert(list !== undefined && list.length > 0);
198
+ let ul = document.createElement('ul');
199
+ for (var el of list) {
200
+ this.codeListItem(el, ul);
201
+ }
202
+ if (target) {
203
+ target.appendChild(ul);
204
+ }
205
+ else {
206
+ this.root.appendChild(ul);
207
+ }
208
+ }
209
+ image(src, caption = '', parent) {
210
+ let img = document.createElement('img');
211
+ img.src = src;
212
+ img.alt = caption;
213
+ img.className = 'my-1';
214
+ parent = parent ?? this.root;
215
+ parent.appendChild(img);
216
+ }
217
+ images(sources, captions = [], width, height) {
218
+ const mobile = navigator && /Android|iPhone/i.test(navigator.userAgent);
219
+ if (!mobile) {
220
+ let div = document.createElement('div');
221
+ div.style.width = width ?? 'auto';
222
+ div.style.height = height ?? '256px';
223
+ div.className = 'flex flex-row justify-center';
224
+ for (let i = 0; i < sources.length; ++i) {
225
+ this.image(sources[i], captions[i], div);
226
+ }
227
+ this.root.appendChild(div);
228
+ }
229
+ else {
230
+ for (let i = 0; i < sources.length; ++i) {
231
+ this.image(sources[i], captions[i]);
232
+ }
233
+ }
234
+ }
235
+ video(src, caption = '', controls = true, autoplay = false) {
236
+ let video = document.createElement('video');
237
+ video.src = src;
238
+ video.controls = controls;
239
+ video.autoplay = autoplay;
240
+ if (autoplay) {
241
+ video.muted = true;
242
+ }
243
+ video.loop = true;
244
+ video.alt = caption;
245
+ this.root.appendChild(video);
246
+ }
247
+ note(text, warning = false, title, icon) {
248
+ console.assert(text !== undefined);
249
+ const note = LX.makeContainer([], 'border rounded-lg overflow-hidden text-md fg-secondary my-6', '', this.root);
250
+ let header = document.createElement('div');
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');
254
+ note.appendChild(header);
255
+ // Node body
256
+ LX.makeContainer([], 'leading-6 p-3', text, note);
257
+ }
258
+ classCtor(name, params, language = 'js') {
259
+ let paramsHTML = '';
260
+ for (var p of params) {
261
+ const str1 = p[0]; // cpp: param js: name
262
+ const str2 = p[1]; // cpp: defaultValue js: type
263
+ if (language == 'cpp') {
264
+ paramsHTML += str1 + (str2 ? " = <span class='desc'>" + str2 + '</span>' : '')
265
+ + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
266
+ }
267
+ else if (language == 'js') {
268
+ paramsHTML += str1 + ": <span class='desc'>" + str2 + '</span>'
269
+ + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
270
+ }
271
+ }
272
+ let pr = document.createElement('p');
273
+ pr.innerHTML = this.iCode("<span class='constructor'>" + name + '(' + paramsHTML + ')' + '</span>');
274
+ this.root.appendChild(pr);
275
+ }
276
+ classMethod(name, desc, params, ret) {
277
+ this.startCodeBulletList();
278
+ let paramsHTML = '';
279
+ for (var p of params) {
280
+ const name = p[0];
281
+ const type = p[1];
282
+ paramsHTML += name + ": <span class='desc'>" + type + '</span>'
283
+ + (params.indexOf(p) != (params.length - 1) ? ', ' : '');
284
+ }
285
+ let li = document.createElement('li');
286
+ li.innerHTML = this.iCode("<span class='method'>" + name + ' (' + paramsHTML + ')' + (ret ? (': ' + ret) : '') + '</span>');
287
+ this._listQueued?.appendChild(li);
288
+ this.endCodeBulletList();
289
+ this.paragraph(desc);
290
+ return li.parentElement;
291
+ }
292
+ iLink(text, href) {
293
+ console.assert(text !== undefined && href !== undefined);
294
+ return `<a href="${href}">${text}</a>`;
295
+ }
296
+ iPage(text, page) {
297
+ console.assert(text !== undefined && page !== undefined);
298
+ const startPage = page.replace('.html', '');
299
+ const g = globalThis;
300
+ if (g.setPath && g.loadPage) {
301
+ const tabName = g.setPath(startPage);
302
+ return `<a onclick="loadPage('${page}', true, '${tabName}')">${text}</a>`;
303
+ }
304
+ else {
305
+ console.warn('[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!');
306
+ }
307
+ }
308
+ iCode(text, codeClass) {
309
+ console.assert(text !== undefined);
310
+ return `<code class="inline ${codeClass ?? ''}">${text}</code>`;
311
+ }
312
+ _copySnippet(b) {
313
+ b.innerHTML = '';
314
+ b.appendChild(LX.makeIcon('Check'));
315
+ b.classList.add('copied');
316
+ setTimeout(() => {
317
+ b.innerHTML = '';
318
+ b.appendChild(LX.makeIcon('Copy'));
319
+ b.classList.remove('copied');
320
+ }, 2000);
321
+ navigator.clipboard.writeText(b.dataset['snippet'] ?? b.parentElement.innerText);
322
+ console.log('Copied!');
323
+ }
324
+ }
325
+
326
+ export { DocMaker };
327
+ //# sourceMappingURL=DocMaker.js.map