hrenpack_js 3.1.0 → 3.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 (2) hide show
  1. package/index.js +928 -928
  2. package/package.json +2 -1
package/index.js CHANGED
@@ -1,928 +1,928 @@
1
- // @ts-nocheck
2
-
3
- // ===== File: arraywork.js =====
4
- "use strict";
5
- function arrayIsEmpty(arr) {
6
- return arr.length === 0 || !arr[0];
7
- }
8
- function arraysIsEqual(array1, array2, strict = true) {
9
- if (array1.length !== array2.length)
10
- return false;
11
- if (strict)
12
- return array1.every((value, index) => value === array2[index]);
13
- else {
14
- array1.forEach(element => {
15
- if (!array2.includes(element))
16
- return false;
17
- });
18
- return true;
19
- }
20
- }
21
- //# sourceMappingURL=arraywork.js.map
22
-
23
- // ===== File: auto.js =====
24
- "use strict";
25
- const stylesRoot = getComputedStyle(document.documentElement);
26
- //# sourceMappingURL=auto.js.map
27
-
28
- // ===== File: classes.js =====
29
- "use strict";
30
- class ClickableLinksFactory {
31
- constructor() {
32
- Object.defineProperty(this, "urlRegex", {
33
- enumerable: true,
34
- configurable: true,
35
- writable: true,
36
- value: /(https?:\/\/[^\s]+)/g
37
- });
38
- }
39
- walk(node, isClickToCopy) {
40
- if (node.nodeType === Node.TEXT_NODE) {
41
- const text = node.textContent || '';
42
- const func = isClickToCopy ? this.get_clickToCopy : this.get_anchor;
43
- if (this.urlRegex.test(text)) {
44
- const parent = node.parentNode;
45
- const newContent = text.replace(this.urlRegex, url => {
46
- return func(url);
47
- });
48
- if (!parent)
49
- return;
50
- const tempDiv = document.createElement('div');
51
- tempDiv.innerHTML = newContent;
52
- while (tempDiv.firstChild) {
53
- parent.insertBefore(tempDiv.firstChild, node);
54
- }
55
- parent.removeChild(node);
56
- }
57
- }
58
- else {
59
- node.childNodes.forEach(child => {
60
- this.walk(child, isClickToCopy);
61
- });
62
- }
63
- }
64
- get_anchor(url) {
65
- return `<a href="${url}" target="_blank" rel="noopener noreferrer" data-clf-generated>${url}</a>`;
66
- }
67
- get_clickToCopy(url) {
68
- return `<click-to-copy data-clf-generated>${url}</click-to-copy>`;
69
- }
70
- clickableLinks(element) {
71
- this.walk(element, false);
72
- }
73
- clickToCopyLinks(element) {
74
- this.walk(element, true);
75
- }
76
- get generatedElements() {
77
- return document.querySelectorAll('[data-clf-generated]');
78
- }
79
- }
80
- class GETParamsManager {
81
- constructor() {
82
- Object.defineProperty(this, "params", {
83
- enumerable: true,
84
- configurable: true,
85
- writable: true,
86
- value: void 0
87
- });
88
- this.params = new URLSearchParams(window.location.search);
89
- }
90
- get(key, defaultValue) {
91
- const value = this.params.get(key);
92
- if (value === null)
93
- return defaultValue || null;
94
- if (defaultValue !== undefined) {
95
- switch (typeof defaultValue) {
96
- case 'number':
97
- return Number(value);
98
- case 'boolean':
99
- return (value === 'true');
100
- default:
101
- return value;
102
- }
103
- }
104
- return value;
105
- }
106
- set(key, value) {
107
- this.params.set(key, String(value));
108
- this.updateURL();
109
- }
110
- delete(key) {
111
- this.params.delete(key);
112
- this.updateURL();
113
- }
114
- all() {
115
- const result = {};
116
- for (const [key, value] of this.params.entries()) {
117
- result[key] = value;
118
- }
119
- return result;
120
- }
121
- clear() {
122
- const keys = Array.from(this.params.keys());
123
- keys.forEach(key => this.params.delete(key));
124
- this.updateURL();
125
- }
126
- updateURL() {
127
- const newUrl = `${window.location.pathname}?${this.params.toString()}`;
128
- window.history.pushState({}, '', newUrl);
129
- }
130
- }
131
- //# sourceMappingURL=classes.js.map
132
-
133
- // ===== File: compiler.js =====
134
- "use strict";
135
- function downloadTextAsFile(filename, text) {
136
- const blob = new Blob([text], { type: 'text/plain' });
137
- const url = URL.createObjectURL(blob);
138
- console.log(url);
139
- const a = document.createElement('a');
140
- a.href = url;
141
- a.download = filename;
142
- a.click();
143
- URL.revokeObjectURL(url);
144
- }
145
- //# sourceMappingURL=compiler.js.map
146
-
147
- // ===== File: cookie.js =====
148
- "use strict";
149
- function getCookie(name) {
150
- const nameEQ = `${name}=`;
151
- const cookiesArray = document.cookie.split(';');
152
- cookiesArray.forEach(cookie => {
153
- cookie = cookie.trim();
154
- if (cookie.indexOf(nameEQ) === 0) {
155
- return cookie.substring(nameEQ.length, cookie.length);
156
- }
157
- });
158
- return null;
159
- }
160
- function setCookie(name, value, days = null, path = '/') {
161
- let expires;
162
- if (!days) {
163
- expires = '; expires=Fri, 31 Dec 9999 23:59:59 GMT';
164
- }
165
- else {
166
- const date = new Date();
167
- date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
168
- expires = `; expires=${date.toUTCString()}`;
169
- }
170
- document.cookie = `${name}=${value || ''}${expires}; path=${path}`;
171
- }
172
- function hasCookie(name) {
173
- return getCookie(name) != null;
174
- }
175
- //# sourceMappingURL=cookie.js.map
176
-
177
- // ===== File: exceptions.js =====
178
- "use strict";
179
- class NotAuthorizedError extends Error {
180
- constructor() {
181
- super("Пользователь не авторизован");
182
- this.name = 'NotAuthorizedError';
183
- }
184
- }
185
- //# sourceMappingURL=exceptions.js.map
186
-
187
- // ===== File: get_element_types.js =====
188
- "use strict";
189
- function button_submit(parent) {
190
- const buttons = parent.querySelectorAll('button');
191
- let submit = null;
192
- buttons.forEach(button => {
193
- if (button.type === 'submit')
194
- submit = button;
195
- });
196
- return submit;
197
- }
198
- //# sourceMappingURL=get_element_types.js.map
199
-
200
- // ===== File: html.js =====
201
- "use strict";
202
- const escapeChars = {
203
- '<': '&lt;',
204
- '>': '&gt;',
205
- '&': '&amp;',
206
- '"': '&quot;',
207
- "'": '&#39;'
208
- };
209
- function togglePassword(passwordInput) {
210
- const passwordType = passwordInput.getAttribute('type') === 'password' ? 'text' : 'password';
211
- passwordInput.setAttribute('type', passwordType);
212
- }
213
- function isTextWrapped(element) {
214
- const elementHeight = element.clientHeight;
215
- const scrollHeight = element.scrollHeight;
216
- return scrollHeight > elementHeight;
217
- }
218
- function notArrayEmpty(array) {
219
- return array.length > 0;
220
- }
221
- function get_tagName(element) {
222
- return element.tagName.toLowerCase();
223
- }
224
- function element_toHTMLText(element) {
225
- const tag = get_tagName(element);
226
- const attrs = element.attributes;
227
- let text = `<${tag}`;
228
- if (attrs.length > 0) {
229
- for (let attr of attrs) {
230
- text += ` ${attr.name}="${attr.value}"`;
231
- }
232
- }
233
- text += `>${element.innerHTML}</${tag}>`;
234
- return text;
235
- }
236
- function element_to_div(element) {
237
- const div = document.createElement('div');
238
- div.innerHTML = element.outerHTML;
239
- return div;
240
- }
241
- function password_format(shownPasswordHTML, hiddenPasswordHTML) {
242
- document.addEventListener('DOMContentLoaded', () => {
243
- const forms = document.querySelectorAll('form');
244
- forms.forEach(form => {
245
- const inputs = form.querySelectorAll('input[type="password"]');
246
- inputs.forEach(input => {
247
- const wrapper = document.createElement('div');
248
- wrapper.style.position = 'relative';
249
- wrapper.style.display = 'inline-block';
250
- wrapper.style.width = '100%';
251
- input.parentNode.insertBefore(wrapper, input);
252
- wrapper.appendChild(input);
253
- const toggleBtn = document.createElement('button');
254
- toggleBtn.type = 'button';
255
- toggleBtn.className = 'show-password-btn';
256
- toggleBtn.innerHTML = hiddenPasswordHTML;
257
- toggleBtn.style.cssText = `
258
- position: absolute;
259
- left: 45%;
260
- top: 50%;
261
- transform: translateY(-50%);
262
- cursor: pointer;
263
- user-select: none;
264
- background: none;
265
- border: none;
266
- padding: 0;
267
- `;
268
- toggleBtn.addEventListener('click', () => {
269
- const isShowing = input.type === 'text';
270
- input.type = isShowing ? 'password' : 'text';
271
- toggleBtn.innerHTML = isShowing ? hiddenPasswordHTML : shownPasswordHTML;
272
- });
273
- wrapper.appendChild(toggleBtn);
274
- });
275
- });
276
- });
277
- }
278
- function escapeHTML(html) {
279
- return html.replace(/[<>"']/g, function (i) {
280
- return escapeChars[i] || i;
281
- });
282
- }
283
- function strFormat(template, ...args) {
284
- return template.replace(/{(\w+)}/g, (match, key) => {
285
- if (args.length > 0 && typeof args[0] === 'object' && args[0][key] !== undefined) {
286
- return args[0][key];
287
- }
288
- const index = parseInt(key);
289
- if (!isNaN(index) && args[index] !== undefined) {
290
- return args[index];
291
- }
292
- return match;
293
- });
294
- }
295
- function elementToHyperlink(element, href, cursorPointer = true, preventDefault = false) {
296
- element.addEventListener('click', function (elem) {
297
- if (elem.button === 0)
298
- window.location.href = href;
299
- else if (elem.button === 1)
300
- window.open(href, '_blank');
301
- });
302
- if (preventDefault) {
303
- element.addEventListener('auxclick', function (elem) {
304
- if (elem.button === 1)
305
- elem.preventDefault();
306
- });
307
- }
308
- if (cursorPointer)
309
- element.style.cursor = 'pointer';
310
- return element;
311
- }
312
- //# sourceMappingURL=html.js.map
313
-
314
- // ===== File: input.js =====
315
- "use strict";
316
- function getInputCursorPosition(input) {
317
- const start = input.selectionStart;
318
- if (start == null)
319
- throw new Error("Incorrect input type");
320
- return start - 1;
321
- }
322
- function copyInputToClipboard(input) {
323
- const disabled = input.hasAttribute("disabled");
324
- if (disabled)
325
- input.removeAttribute('disabled');
326
- navigator.clipboard.writeText(input.value)
327
- .then(() => { })
328
- .catch(err => {
329
- console.error('Не удалось скопировать текст: ', err);
330
- })
331
- .finally(() => {
332
- if (disabled)
333
- input.setAttribute('disabled', '');
334
- });
335
- }
336
- function clearInput_and_addLastSymbol(input) {
337
- input.value = input.value[getInputCursorPosition(input)] || '';
338
- }
339
- function getInputLabel(input) {
340
- const label = document.querySelector(`label[for="${input.id}"]`);
341
- if (!label)
342
- throw new Error("Label не найден. Возможно, вы не использовали атрибут for в нем");
343
- return label;
344
- }
345
- //# sourceMappingURL=input.js.map
346
-
347
- // ===== File: link.js =====
348
- "use strict";
349
- function loadCSS(href) {
350
- const link = document.createElement('link');
351
- link.rel = 'stylesheet';
352
- link.type = 'text/css';
353
- link.href = href;
354
- document.head.appendChild(link);
355
- }
356
- //# sourceMappingURL=link.js.map
357
-
358
- // ===== File: notifications.js =====
359
- "use strict";
360
- function pushNotification(title = "Уведомление", body = "Текст уведомления", icon = null) {
361
- if (Notification.permission !== "granted") {
362
- Notification.requestPermission().then(permission => {
363
- if (permission === "granted") {
364
- if (icon)
365
- new Notification(title, { body: body, icon: icon });
366
- else
367
- new Notification(title, { body: body });
368
- }
369
- });
370
- }
371
- else {
372
- if (icon)
373
- new Notification(title, { body: body, icon: icon });
374
- else
375
- new Notification(title, { body: body });
376
- }
377
- }
378
- class HyperTextNotification {
379
- constructor({ bottom = '20', right = '20', backgroundColor = '#121212', color = '#ededed', padding = '15', borderRadius = '5', timeout = 3 } = {}) {
380
- Object.defineProperty(this, "bottom", {
381
- enumerable: true,
382
- configurable: true,
383
- writable: true,
384
- value: void 0
385
- });
386
- Object.defineProperty(this, "right", {
387
- enumerable: true,
388
- configurable: true,
389
- writable: true,
390
- value: void 0
391
- });
392
- Object.defineProperty(this, "backgroundColor", {
393
- enumerable: true,
394
- configurable: true,
395
- writable: true,
396
- value: void 0
397
- });
398
- Object.defineProperty(this, "color", {
399
- enumerable: true,
400
- configurable: true,
401
- writable: true,
402
- value: void 0
403
- });
404
- Object.defineProperty(this, "padding", {
405
- enumerable: true,
406
- configurable: true,
407
- writable: true,
408
- value: void 0
409
- });
410
- Object.defineProperty(this, "borderRadius", {
411
- enumerable: true,
412
- configurable: true,
413
- writable: true,
414
- value: void 0
415
- });
416
- Object.defineProperty(this, "timeout", {
417
- enumerable: true,
418
- configurable: true,
419
- writable: true,
420
- value: void 0
421
- });
422
- this.bottom = intToPixel(bottom);
423
- this.right = intToPixel(right);
424
- this.backgroundColor = backgroundColor;
425
- this.color = color;
426
- this.padding = intToPixel(padding);
427
- this.borderRadius = intToPixel(borderRadius);
428
- this.timeout = timeout;
429
- }
430
- show(message, timeout = 0) {
431
- const notification = document.createElement("div");
432
- notification.textContent = message;
433
- notification.style.position = "fixed";
434
- notification.style.bottom = this.bottom;
435
- notification.style.right = this.right;
436
- notification.style.backgroundColor = this.backgroundColor;
437
- notification.style.color = this.color;
438
- notification.style.padding = this.padding;
439
- notification.style.borderRadius = this.borderRadius;
440
- notification.style.zIndex = "1000";
441
- const actualTimeout = timeout === 0 ? this.timeout : timeout;
442
- document.body.appendChild(notification);
443
- setTimeout(() => {
444
- if (document.body.contains(notification)) {
445
- document.body.removeChild(notification);
446
- }
447
- }, actualTimeout * 1000);
448
- }
449
- }
450
- //# sourceMappingURL=notifications.js.map
451
-
452
- // ===== File: styles.js =====
453
- "use strict";
454
- function input_type_fc(input) {
455
- return input.type !== 'hidden' && input.type !== 'reset' && input.type !== 'checkbox' && input.type !== 'radio';
456
- }
457
- function input_form_control(form) {
458
- const inputs = form.querySelectorAll('input');
459
- const selects = form.querySelectorAll('select');
460
- const areas = form.querySelectorAll('textarea');
461
- inputs.forEach(input => {
462
- if (input_type_fc(input))
463
- input.classList.add('form-control');
464
- });
465
- selects.forEach(select => {
466
- select.classList.add('form-control');
467
- });
468
- areas.forEach(textarea => {
469
- textarea.classList.add('form-control');
470
- });
471
- }
472
- function input_form_control_unline(form) {
473
- console.log(form.id);
474
- const inputs = form.querySelectorAll('input');
475
- const selects = form.querySelectorAll('select');
476
- const areas = form.querySelectorAll('textarea');
477
- inputs.forEach(input => {
478
- if (input_type_fc(input))
479
- input.classList.add('form-control-unline');
480
- });
481
- selects.forEach(select => {
482
- select.classList.add('form-control-unline');
483
- });
484
- areas.forEach(textarea => {
485
- textarea.classList.add('form-control-unline');
486
- });
487
- }
488
- function intToPixel(number = '0') {
489
- number = number.toString();
490
- if (parseInt(number) === 0)
491
- return '0';
492
- return !isNaN(parseInt(number)) ? number + 'px' : number;
493
- }
494
- //# sourceMappingURL=styles.js.map
495
-
496
- // ===== File: system.js =====
497
- "use strict";
498
- function getSystemTheme() {
499
- if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').media !== 'not all') {
500
- const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
501
- return isDark ? 'dark' : 'light';
502
- }
503
- return null;
504
- }
505
- function copyTextToClipboard(text) {
506
- navigator.clipboard.writeText(text)
507
- .then(() => { })
508
- .catch(err => {
509
- console.error('Не удалось скопировать текст: ', err);
510
- });
511
- }
512
- function redirectBackOrClose(default_url = '/') {
513
- if (document.referrer && document.referrer !== window.location.href) {
514
- window.history.back();
515
- }
516
- else {
517
- window.close();
518
- setTimeout(() => {
519
- if (!window.closed) {
520
- window.location.href = default_url;
521
- }
522
- }, 100);
523
- }
524
- }
525
- function getHost() {
526
- return window.location.protocol + '//' + window.location.host;
527
- }
528
- //# sourceMappingURL=system.js.map
529
-
530
- // ===== File: tags.js =====
531
- "use strict";
532
- class AbbreviatedNumber extends HTMLElement {
533
- constructor() {
534
- super();
535
- Object.defineProperty(this, "isShortened", {
536
- enumerable: true,
537
- configurable: true,
538
- writable: true,
539
- value: void 0
540
- });
541
- Object.defineProperty(this, "originalNumber", {
542
- enumerable: true,
543
- configurable: true,
544
- writable: true,
545
- value: void 0
546
- });
547
- this.isShortened = true;
548
- this.originalNumber = parseFloat(this.textContent?.trim() || '0');
549
- this.render();
550
- this.addEventListener('click', this.toggle.bind(this));
551
- if (isNaN(this.originalNumber))
552
- throw new TypeError('The value must be a number');
553
- }
554
- static get observedAttributes() {
555
- return ['lang', 'use_comma'];
556
- }
557
- toggle() {
558
- this.isShortened = !this.isShortened;
559
- this.render();
560
- }
561
- getCurrentLang() {
562
- return this.getAttribute('lang') || document.documentElement.getAttribute('lang') || 'en';
563
- }
564
- formatNumber(num, lang) {
565
- num = parseFloat(num.toString().replace(/[^\d.-]/g, ''));
566
- if (isNaN(num))
567
- return this.originalNumber.toString();
568
- const useComma = this.hasAttribute('use_comma');
569
- const separator = useComma ? ',' : '.';
570
- const round = (value, digits) => {
571
- if (digits === 0)
572
- return Math.round(value);
573
- const factor = Math.pow(10, digits);
574
- return Math.round(value * factor) / factor;
575
- };
576
- const format = (value, digits) => {
577
- const rounded = round(value, digits);
578
- let str = rounded.toString();
579
- if (digits > 0 && str.includes('.')) {
580
- str = str.replace(/\.?0+$/, '');
581
- }
582
- return str.replace('.', separator);
583
- };
584
- const getFractionDigits = (value) => {
585
- if (value < 10)
586
- return 2;
587
- if (value < 100)
588
- return 1;
589
- return 0;
590
- };
591
- if (lang.startsWith('ru')) {
592
- if (num >= 1000000000000) {
593
- const value = num / 1000000000000;
594
- return format(value, getFractionDigits(value)) + ' трлн.';
595
- }
596
- if (num >= 1000000000) {
597
- const value = num / 1000000000;
598
- return format(value, getFractionDigits(value)) + ' млрд.';
599
- }
600
- if (num >= 1000000) {
601
- const value = num / 1000000;
602
- return format(value, getFractionDigits(value)) + ' млн.';
603
- }
604
- if (num >= 1000) {
605
- const value = num / 1000;
606
- return format(value, getFractionDigits(value)) + ' тыс.';
607
- }
608
- }
609
- else {
610
- if (num >= 1000000000000) {
611
- const value = num / 1000000000000;
612
- return format(value, getFractionDigits(value)) + 'T';
613
- }
614
- if (num >= 1000000000) {
615
- const value = num / 1000000000;
616
- return format(value, getFractionDigits(value)) + 'B';
617
- }
618
- if (num >= 1000000) {
619
- const value = num / 1000000;
620
- return format(value, getFractionDigits(value)) + 'M';
621
- }
622
- if (num >= 1000) {
623
- const value = num / 1000;
624
- return format(value, getFractionDigits(value)) + 'K';
625
- }
626
- }
627
- return format(num, 0);
628
- }
629
- render() {
630
- const lang = this.getCurrentLang();
631
- this.textContent = this.isShortened
632
- ? this.formatNumber(this.originalNumber, lang)
633
- : this.originalNumber.toString();
634
- }
635
- }
636
- class StepElement extends HTMLElement {
637
- constructor() {
638
- super();
639
- if (this.textContent)
640
- this.label = this.textContent;
641
- this.innerHTML = `
642
- <div data-sb-generated="circle"></div>
643
- <div data-sb-generated="label"><slot></slot></div>
644
- `;
645
- }
646
- static get observedAttributes() {
647
- return ['active', 'completed', 'label'];
648
- }
649
- get index() {
650
- return Array.from(this.parentNode.children).indexOf(this) + 1;
651
- }
652
- get active() {
653
- return this.hasAttribute('active');
654
- }
655
- set active(force) {
656
- this.toggleAttribute('active', force);
657
- }
658
- get completed() {
659
- return this.hasAttribute('completed');
660
- }
661
- set completed(force) {
662
- this.toggleAttribute('completed', force);
663
- }
664
- get label() {
665
- return this.getAttribute('label') || "";
666
- }
667
- set label(value) {
668
- this.setAttribute('label', value);
669
- }
670
- reset() {
671
- this.active = false;
672
- this.completed = false;
673
- }
674
- get status() {
675
- if (this.active)
676
- return 'active';
677
- else if (this.completed)
678
- return 'complete';
679
- else
680
- return 'uncomplete';
681
- }
682
- set status(value) {
683
- this.reset();
684
- switch (value) {
685
- case 'complete':
686
- this.completed = true;
687
- break;
688
- case 'active':
689
- this.active = true;
690
- break;
691
- case 'uncomplete':
692
- break;
693
- default:
694
- throw new TypeError(`Unknown status: ${value}`);
695
- }
696
- }
697
- connectedCallback() {
698
- this.querySelector('[data-sb-generated="circle"]').textContent = this.index.toString();
699
- this.querySelector('[data-sb-generated="label"]').textContent = this.label;
700
- const parent = this.parentElement;
701
- const currentStep = parent.currentStep || 1;
702
- if (this.index === currentStep)
703
- this.active = true;
704
- else if (this.index < currentStep)
705
- this.completed = true;
706
- }
707
- }
708
- class Stepbar extends HTMLElement {
709
- constructor() {
710
- super();
711
- Object.defineProperty(this, "_observer", {
712
- enumerable: true,
713
- configurable: true,
714
- writable: true,
715
- value: void 0
716
- });
717
- this.attachShadow({ mode: 'open' });
718
- this.shadowRoot.innerHTML = `
719
- <slot></slot>
720
- `;
721
- }
722
- static get observedAttributes() {
723
- return ['current'];
724
- }
725
- attributeChangedCallback(name, oldValue, newValue) {
726
- if (name === 'current') {
727
- this.updateSteps();
728
- }
729
- }
730
- connectedCallback() {
731
- if (!this._observer) {
732
- this._observer = new MutationObserver(() => this.updateSteps());
733
- this._observer.observe(this, { childList: true });
734
- }
735
- this.updateSteps();
736
- }
737
- disconnectedCallback() {
738
- if (this._observer) {
739
- this._observer.disconnect();
740
- }
741
- }
742
- updateSteps() {
743
- const currentStep = parseInt(this.getAttribute('current') || '1');
744
- const elements = Array.from(this.children).filter((el) => el.tagName === 'SB-ELEMENT');
745
- elements.forEach((element, index) => {
746
- const stepNumber = index + 1;
747
- element.status = 'uncomplete';
748
- if (stepNumber < currentStep) {
749
- element.status = 'complete';
750
- }
751
- else if (stepNumber === currentStep) {
752
- element.status = 'active';
753
- }
754
- });
755
- }
756
- get currentStep() {
757
- return parseInt(this.getAttribute('current') || '1');
758
- }
759
- set currentStep(step) {
760
- this.setAttribute('current', step.toString());
761
- }
762
- }
763
- class HTMLFile extends HTMLElement {
764
- constructor() {
765
- super();
766
- }
767
- get src() {
768
- return this.getAttribute('src') || '';
769
- }
770
- set src(value) {
771
- if (value) {
772
- this.setAttribute('src', value);
773
- }
774
- else {
775
- this.removeAttribute('src');
776
- }
777
- }
778
- static get observedAttributes() {
779
- return ['src'];
780
- }
781
- connectedCallback() {
782
- this.loadContent();
783
- }
784
- attributeChangedCallback(name, oldValue, newValue) {
785
- if (name === 'src' && oldValue !== newValue && this.isConnected) {
786
- this.loadContent();
787
- }
788
- }
789
- async loadContent() {
790
- const src = this.src;
791
- if (!src)
792
- return;
793
- try {
794
- const response = await fetch(src);
795
- const content = await response.text();
796
- this.innerHTML = content;
797
- await this.executeScripts();
798
- }
799
- catch (error) {
800
- this.innerHTML = `Ошибка загрузки: ${error.message}`;
801
- }
802
- }
803
- async executeScripts() {
804
- const scripts = this.querySelectorAll('script');
805
- for (const script of scripts) {
806
- if (script.src) {
807
- await this.loadExternalScript(script.src);
808
- }
809
- else {
810
- this.executeInlineScript(script.textContent || '');
811
- }
812
- script.remove();
813
- }
814
- }
815
- loadExternalScript(src) {
816
- return new Promise((resolve, reject) => {
817
- const newScript = document.createElement('script');
818
- newScript.src = src;
819
- newScript.onload = resolve;
820
- newScript.onerror = reject;
821
- document.head.appendChild(newScript);
822
- });
823
- }
824
- executeInlineScript(code) {
825
- try {
826
- const newScript = document.createElement('script');
827
- newScript.textContent = code;
828
- document.head.appendChild(newScript);
829
- document.head.removeChild(newScript);
830
- }
831
- catch (error) {
832
- console.error('Ошибка выполнения скрипта:', error);
833
- }
834
- }
835
- get loaded() {
836
- return this.hasAttribute('data-loaded');
837
- }
838
- reload() {
839
- return this.loadContent();
840
- }
841
- get content() {
842
- return this.innerHTML;
843
- }
844
- }
845
- class ClickToCopy extends HTMLElement {
846
- constructor() {
847
- super();
848
- Object.defineProperty(this, "notification", {
849
- enumerable: true,
850
- configurable: true,
851
- writable: true,
852
- value: void 0
853
- });
854
- this.notification = new HyperTextNotification({ backgroundColor: 'rgba(192,0,192,0.8)' });
855
- }
856
- get notificationText() {
857
- return this.getAttribute('text') || "Скопировано";
858
- }
859
- set notificationText(value) {
860
- if (value)
861
- this.setAttribute('text', value);
862
- else
863
- this.removeAttribute('text');
864
- }
865
- get isNotified() {
866
- return this.hasAttribute('notified');
867
- }
868
- set isNotified(value) {
869
- if (value)
870
- this.setAttribute('notified', '');
871
- else
872
- this.removeAttribute('notified');
873
- }
874
- connectedCallback() {
875
- this.addEventListener('click', () => {
876
- navigator.clipboard.writeText(this.textContent || '');
877
- if (this.isNotified)
878
- this.notification.show(this.notificationText);
879
- });
880
- }
881
- }
882
- customElements.define('sb-element', StepElement);
883
- customElements.define('step-bar', Stepbar);
884
- customElements.define('ab-num', AbbreviatedNumber);
885
- customElements.define('include-html', HTMLFile);
886
- customElements.define('click-to-copy', ClickToCopy);
887
- //# sourceMappingURL=tags.js.map
888
-
889
- // ===== File: url.js =====
890
- "use strict";
891
- function isAbsoluteUrl(url) {
892
- try {
893
- new URL(url);
894
- return true;
895
- }
896
- catch (e) {
897
- return url[0] === '/' || url[0] === '\\';
898
- }
899
- }
900
- function combineUrls(baseUrl, relativeUrl) {
901
- try {
902
- if (!baseUrl) {
903
- if (relativeUrl.startsWith('/'))
904
- return relativeUrl;
905
- return '/' + relativeUrl;
906
- }
907
- return new URL(relativeUrl, baseUrl).toString();
908
- }
909
- catch (error) {
910
- throw new Error(`Invalid URL combination: ${baseUrl}, ${relativeUrl}`);
911
- }
912
- }
913
- function getScriptSite(script) {
914
- return new URL(script.src).origin;
915
- }
916
- //# sourceMappingURL=url.js.map
917
-
918
- // ===== File: uuid.js =====
919
- "use strict";
920
- function generateUUIDv4() {
921
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
922
- const r = Math.random() * 16 | 0;
923
- const v = c === 'x' ? r : (r & 0x3 | 0x8);
924
- return v.toString(16);
925
- });
926
- }
927
- //# sourceMappingURL=uuid.js.map
928
-
1
+ // @ts-nocheck
2
+
3
+ // ===== File: arraywork.js =====
4
+ "use strict";
5
+ function arrayIsEmpty(arr) {
6
+ return arr.length === 0 || !arr[0];
7
+ }
8
+ function arraysIsEqual(array1, array2, strict = true) {
9
+ if (array1.length !== array2.length)
10
+ return false;
11
+ if (strict)
12
+ return array1.every((value, index) => value === array2[index]);
13
+ else {
14
+ array1.forEach(element => {
15
+ if (!array2.includes(element))
16
+ return false;
17
+ });
18
+ return true;
19
+ }
20
+ }
21
+ //# sourceMappingURL=arraywork.js.map
22
+
23
+ // ===== File: auto.js =====
24
+ "use strict";
25
+ const stylesRoot = getComputedStyle(document.documentElement);
26
+ //# sourceMappingURL=auto.js.map
27
+
28
+ // ===== File: classes.js =====
29
+ "use strict";
30
+ class ClickableLinksFactory {
31
+ constructor() {
32
+ Object.defineProperty(this, "urlRegex", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: /(https?:\/\/[^\s]+)/g
37
+ });
38
+ }
39
+ walk(node, isClickToCopy) {
40
+ if (node.nodeType === Node.TEXT_NODE) {
41
+ const text = node.textContent || '';
42
+ const func = isClickToCopy ? this.get_clickToCopy : this.get_anchor;
43
+ if (this.urlRegex.test(text)) {
44
+ const parent = node.parentNode;
45
+ const newContent = text.replace(this.urlRegex, url => {
46
+ return func(url);
47
+ });
48
+ if (!parent)
49
+ return;
50
+ const tempDiv = document.createElement('div');
51
+ tempDiv.innerHTML = newContent;
52
+ while (tempDiv.firstChild) {
53
+ parent.insertBefore(tempDiv.firstChild, node);
54
+ }
55
+ parent.removeChild(node);
56
+ }
57
+ }
58
+ else {
59
+ node.childNodes.forEach(child => {
60
+ this.walk(child, isClickToCopy);
61
+ });
62
+ }
63
+ }
64
+ get_anchor(url) {
65
+ return `<a href="${url}" target="_blank" rel="noopener noreferrer" data-clf-generated>${url}</a>`;
66
+ }
67
+ get_clickToCopy(url) {
68
+ return `<click-to-copy data-clf-generated>${url}</click-to-copy>`;
69
+ }
70
+ clickableLinks(element) {
71
+ this.walk(element, false);
72
+ }
73
+ clickToCopyLinks(element) {
74
+ this.walk(element, true);
75
+ }
76
+ get generatedElements() {
77
+ return document.querySelectorAll('[data-clf-generated]');
78
+ }
79
+ }
80
+ class GETParamsManager {
81
+ constructor() {
82
+ Object.defineProperty(this, "params", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: void 0
87
+ });
88
+ this.params = new URLSearchParams(window.location.search);
89
+ }
90
+ get(key, defaultValue) {
91
+ const value = this.params.get(key);
92
+ if (value === null)
93
+ return defaultValue || null;
94
+ if (defaultValue !== undefined) {
95
+ switch (typeof defaultValue) {
96
+ case 'number':
97
+ return Number(value);
98
+ case 'boolean':
99
+ return (value === 'true');
100
+ default:
101
+ return value;
102
+ }
103
+ }
104
+ return value;
105
+ }
106
+ set(key, value) {
107
+ this.params.set(key, String(value));
108
+ this.updateURL();
109
+ }
110
+ delete(key) {
111
+ this.params.delete(key);
112
+ this.updateURL();
113
+ }
114
+ all() {
115
+ const result = {};
116
+ for (const [key, value] of this.params.entries()) {
117
+ result[key] = value;
118
+ }
119
+ return result;
120
+ }
121
+ clear() {
122
+ const keys = Array.from(this.params.keys());
123
+ keys.forEach(key => this.params.delete(key));
124
+ this.updateURL();
125
+ }
126
+ updateURL() {
127
+ const newUrl = `${window.location.pathname}?${this.params.toString()}`;
128
+ window.history.pushState({}, '', newUrl);
129
+ }
130
+ }
131
+ //# sourceMappingURL=classes.js.map
132
+
133
+ // ===== File: compiler.js =====
134
+ "use strict";
135
+ function downloadTextAsFile(filename, text) {
136
+ const blob = new Blob([text], { type: 'text/plain' });
137
+ const url = URL.createObjectURL(blob);
138
+ console.log(url);
139
+ const a = document.createElement('a');
140
+ a.href = url;
141
+ a.download = filename;
142
+ a.click();
143
+ URL.revokeObjectURL(url);
144
+ }
145
+ //# sourceMappingURL=compiler.js.map
146
+
147
+ // ===== File: cookie.js =====
148
+ "use strict";
149
+ function getCookie(name) {
150
+ const nameEQ = `${name}=`;
151
+ const cookiesArray = document.cookie.split(';');
152
+ cookiesArray.forEach(cookie => {
153
+ cookie = cookie.trim();
154
+ if (cookie.indexOf(nameEQ) === 0) {
155
+ return cookie.substring(nameEQ.length, cookie.length);
156
+ }
157
+ });
158
+ return null;
159
+ }
160
+ function setCookie(name, value, days = null, path = '/') {
161
+ let expires;
162
+ if (!days) {
163
+ expires = '; expires=Fri, 31 Dec 9999 23:59:59 GMT';
164
+ }
165
+ else {
166
+ const date = new Date();
167
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
168
+ expires = `; expires=${date.toUTCString()}`;
169
+ }
170
+ document.cookie = `${name}=${value || ''}${expires}; path=${path}`;
171
+ }
172
+ function hasCookie(name) {
173
+ return getCookie(name) != null;
174
+ }
175
+ //# sourceMappingURL=cookie.js.map
176
+
177
+ // ===== File: exceptions.js =====
178
+ "use strict";
179
+ class NotAuthorizedError extends Error {
180
+ constructor() {
181
+ super("Пользователь не авторизован");
182
+ this.name = 'NotAuthorizedError';
183
+ }
184
+ }
185
+ //# sourceMappingURL=exceptions.js.map
186
+
187
+ // ===== File: get_element_types.js =====
188
+ "use strict";
189
+ function button_submit(parent) {
190
+ const buttons = parent.querySelectorAll('button');
191
+ let submit = null;
192
+ buttons.forEach(button => {
193
+ if (button.type === 'submit')
194
+ submit = button;
195
+ });
196
+ return submit;
197
+ }
198
+ //# sourceMappingURL=get_element_types.js.map
199
+
200
+ // ===== File: html.js =====
201
+ "use strict";
202
+ const escapeChars = {
203
+ '<': '&lt;',
204
+ '>': '&gt;',
205
+ '&': '&amp;',
206
+ '"': '&quot;',
207
+ "'": '&#39;'
208
+ };
209
+ function togglePassword(passwordInput) {
210
+ const passwordType = passwordInput.getAttribute('type') === 'password' ? 'text' : 'password';
211
+ passwordInput.setAttribute('type', passwordType);
212
+ }
213
+ function isTextWrapped(element) {
214
+ const elementHeight = element.clientHeight;
215
+ const scrollHeight = element.scrollHeight;
216
+ return scrollHeight > elementHeight;
217
+ }
218
+ function notArrayEmpty(array) {
219
+ return array.length > 0;
220
+ }
221
+ function get_tagName(element) {
222
+ return element.tagName.toLowerCase();
223
+ }
224
+ function element_toHTMLText(element) {
225
+ const tag = get_tagName(element);
226
+ const attrs = element.attributes;
227
+ let text = `<${tag}`;
228
+ if (attrs.length > 0) {
229
+ for (let attr of attrs) {
230
+ text += ` ${attr.name}="${attr.value}"`;
231
+ }
232
+ }
233
+ text += `>${element.innerHTML}</${tag}>`;
234
+ return text;
235
+ }
236
+ function element_to_div(element) {
237
+ const div = document.createElement('div');
238
+ div.innerHTML = element.outerHTML;
239
+ return div;
240
+ }
241
+ function password_format(shownPasswordHTML, hiddenPasswordHTML) {
242
+ document.addEventListener('DOMContentLoaded', () => {
243
+ const forms = document.querySelectorAll('form');
244
+ forms.forEach(form => {
245
+ const inputs = form.querySelectorAll('input[type="password"]');
246
+ inputs.forEach(input => {
247
+ const wrapper = document.createElement('div');
248
+ wrapper.style.position = 'relative';
249
+ wrapper.style.display = 'inline-block';
250
+ wrapper.style.width = '100%';
251
+ input.parentNode.insertBefore(wrapper, input);
252
+ wrapper.appendChild(input);
253
+ const toggleBtn = document.createElement('button');
254
+ toggleBtn.type = 'button';
255
+ toggleBtn.className = 'show-password-btn';
256
+ toggleBtn.innerHTML = hiddenPasswordHTML;
257
+ toggleBtn.style.cssText = `
258
+ position: absolute;
259
+ left: 45%;
260
+ top: 50%;
261
+ transform: translateY(-50%);
262
+ cursor: pointer;
263
+ user-select: none;
264
+ background: none;
265
+ border: none;
266
+ padding: 0;
267
+ `;
268
+ toggleBtn.addEventListener('click', () => {
269
+ const isShowing = input.type === 'text';
270
+ input.type = isShowing ? 'password' : 'text';
271
+ toggleBtn.innerHTML = isShowing ? hiddenPasswordHTML : shownPasswordHTML;
272
+ });
273
+ wrapper.appendChild(toggleBtn);
274
+ });
275
+ });
276
+ });
277
+ }
278
+ function escapeHTML(html) {
279
+ return html.replace(/[<>"']/g, function (i) {
280
+ return escapeChars[i] || i;
281
+ });
282
+ }
283
+ function strFormat(template, ...args) {
284
+ return template.replace(/{(\w+)}/g, (match, key) => {
285
+ if (args.length > 0 && typeof args[0] === 'object' && args[0][key] !== undefined) {
286
+ return args[0][key];
287
+ }
288
+ const index = parseInt(key);
289
+ if (!isNaN(index) && args[index] !== undefined) {
290
+ return args[index];
291
+ }
292
+ return match;
293
+ });
294
+ }
295
+ function elementToHyperlink(element, href, cursorPointer = true, preventDefault = false) {
296
+ element.addEventListener('click', function (elem) {
297
+ if (elem.button === 0)
298
+ window.location.href = href;
299
+ else if (elem.button === 1)
300
+ window.open(href, '_blank');
301
+ });
302
+ if (preventDefault) {
303
+ element.addEventListener('auxclick', function (elem) {
304
+ if (elem.button === 1)
305
+ elem.preventDefault();
306
+ });
307
+ }
308
+ if (cursorPointer)
309
+ element.style.cursor = 'pointer';
310
+ return element;
311
+ }
312
+ //# sourceMappingURL=html.js.map
313
+
314
+ // ===== File: input.js =====
315
+ "use strict";
316
+ function getInputCursorPosition(input) {
317
+ const start = input.selectionStart;
318
+ if (start == null)
319
+ throw new Error("Incorrect input type");
320
+ return start - 1;
321
+ }
322
+ function copyInputToClipboard(input) {
323
+ const disabled = input.hasAttribute("disabled");
324
+ if (disabled)
325
+ input.removeAttribute('disabled');
326
+ navigator.clipboard.writeText(input.value)
327
+ .then(() => { })
328
+ .catch(err => {
329
+ console.error('Не удалось скопировать текст: ', err);
330
+ })
331
+ .finally(() => {
332
+ if (disabled)
333
+ input.setAttribute('disabled', '');
334
+ });
335
+ }
336
+ function clearInput_and_addLastSymbol(input) {
337
+ input.value = input.value[getInputCursorPosition(input)] || '';
338
+ }
339
+ function getInputLabel(input) {
340
+ const label = document.querySelector(`label[for="${input.id}"]`);
341
+ if (!label)
342
+ throw new Error("Label не найден. Возможно, вы не использовали атрибут for в нем");
343
+ return label;
344
+ }
345
+ //# sourceMappingURL=input.js.map
346
+
347
+ // ===== File: link.js =====
348
+ "use strict";
349
+ function loadCSS(href) {
350
+ const link = document.createElement('link');
351
+ link.rel = 'stylesheet';
352
+ link.type = 'text/css';
353
+ link.href = href;
354
+ document.head.appendChild(link);
355
+ }
356
+ //# sourceMappingURL=link.js.map
357
+
358
+ // ===== File: notifications.js =====
359
+ "use strict";
360
+ function pushNotification(title = "Уведомление", body = "Текст уведомления", icon = null) {
361
+ if (Notification.permission !== "granted") {
362
+ Notification.requestPermission().then(permission => {
363
+ if (permission === "granted") {
364
+ if (icon)
365
+ new Notification(title, { body: body, icon: icon });
366
+ else
367
+ new Notification(title, { body: body });
368
+ }
369
+ });
370
+ }
371
+ else {
372
+ if (icon)
373
+ new Notification(title, { body: body, icon: icon });
374
+ else
375
+ new Notification(title, { body: body });
376
+ }
377
+ }
378
+ class HyperTextNotification {
379
+ constructor({ bottom = '20', right = '20', backgroundColor = '#121212', color = '#ededed', padding = '15', borderRadius = '5', timeout = 3 } = {}) {
380
+ Object.defineProperty(this, "bottom", {
381
+ enumerable: true,
382
+ configurable: true,
383
+ writable: true,
384
+ value: void 0
385
+ });
386
+ Object.defineProperty(this, "right", {
387
+ enumerable: true,
388
+ configurable: true,
389
+ writable: true,
390
+ value: void 0
391
+ });
392
+ Object.defineProperty(this, "backgroundColor", {
393
+ enumerable: true,
394
+ configurable: true,
395
+ writable: true,
396
+ value: void 0
397
+ });
398
+ Object.defineProperty(this, "color", {
399
+ enumerable: true,
400
+ configurable: true,
401
+ writable: true,
402
+ value: void 0
403
+ });
404
+ Object.defineProperty(this, "padding", {
405
+ enumerable: true,
406
+ configurable: true,
407
+ writable: true,
408
+ value: void 0
409
+ });
410
+ Object.defineProperty(this, "borderRadius", {
411
+ enumerable: true,
412
+ configurable: true,
413
+ writable: true,
414
+ value: void 0
415
+ });
416
+ Object.defineProperty(this, "timeout", {
417
+ enumerable: true,
418
+ configurable: true,
419
+ writable: true,
420
+ value: void 0
421
+ });
422
+ this.bottom = intToPixel(bottom);
423
+ this.right = intToPixel(right);
424
+ this.backgroundColor = backgroundColor;
425
+ this.color = color;
426
+ this.padding = intToPixel(padding);
427
+ this.borderRadius = intToPixel(borderRadius);
428
+ this.timeout = timeout;
429
+ }
430
+ show(message, timeout = 0) {
431
+ const notification = document.createElement("div");
432
+ notification.textContent = message;
433
+ notification.style.position = "fixed";
434
+ notification.style.bottom = this.bottom;
435
+ notification.style.right = this.right;
436
+ notification.style.backgroundColor = this.backgroundColor;
437
+ notification.style.color = this.color;
438
+ notification.style.padding = this.padding;
439
+ notification.style.borderRadius = this.borderRadius;
440
+ notification.style.zIndex = "1000";
441
+ const actualTimeout = timeout === 0 ? this.timeout : timeout;
442
+ document.body.appendChild(notification);
443
+ setTimeout(() => {
444
+ if (document.body.contains(notification)) {
445
+ document.body.removeChild(notification);
446
+ }
447
+ }, actualTimeout * 1000);
448
+ }
449
+ }
450
+ //# sourceMappingURL=notifications.js.map
451
+
452
+ // ===== File: styles.js =====
453
+ "use strict";
454
+ function input_type_fc(input) {
455
+ return input.type !== 'hidden' && input.type !== 'reset' && input.type !== 'checkbox' && input.type !== 'radio';
456
+ }
457
+ function input_form_control(form) {
458
+ const inputs = form.querySelectorAll('input');
459
+ const selects = form.querySelectorAll('select');
460
+ const areas = form.querySelectorAll('textarea');
461
+ inputs.forEach(input => {
462
+ if (input_type_fc(input))
463
+ input.classList.add('form-control');
464
+ });
465
+ selects.forEach(select => {
466
+ select.classList.add('form-control');
467
+ });
468
+ areas.forEach(textarea => {
469
+ textarea.classList.add('form-control');
470
+ });
471
+ }
472
+ function input_form_control_unline(form) {
473
+ console.log(form.id);
474
+ const inputs = form.querySelectorAll('input');
475
+ const selects = form.querySelectorAll('select');
476
+ const areas = form.querySelectorAll('textarea');
477
+ inputs.forEach(input => {
478
+ if (input_type_fc(input))
479
+ input.classList.add('form-control-unline');
480
+ });
481
+ selects.forEach(select => {
482
+ select.classList.add('form-control-unline');
483
+ });
484
+ areas.forEach(textarea => {
485
+ textarea.classList.add('form-control-unline');
486
+ });
487
+ }
488
+ function intToPixel(number = '0') {
489
+ number = number.toString();
490
+ if (parseInt(number) === 0)
491
+ return '0';
492
+ return !isNaN(parseInt(number)) ? number + 'px' : number;
493
+ }
494
+ //# sourceMappingURL=styles.js.map
495
+
496
+ // ===== File: system.js =====
497
+ "use strict";
498
+ function getSystemTheme() {
499
+ if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').media !== 'not all') {
500
+ const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
501
+ return isDark ? 'dark' : 'light';
502
+ }
503
+ return null;
504
+ }
505
+ function copyTextToClipboard(text) {
506
+ navigator.clipboard.writeText(text)
507
+ .then(() => { })
508
+ .catch(err => {
509
+ console.error('Не удалось скопировать текст: ', err);
510
+ });
511
+ }
512
+ function redirectBackOrClose(default_url = '/') {
513
+ if (document.referrer && document.referrer !== window.location.href) {
514
+ window.history.back();
515
+ }
516
+ else {
517
+ window.close();
518
+ setTimeout(() => {
519
+ if (!window.closed) {
520
+ window.location.href = default_url;
521
+ }
522
+ }, 100);
523
+ }
524
+ }
525
+ function getHost() {
526
+ return window.location.protocol + '//' + window.location.host;
527
+ }
528
+ //# sourceMappingURL=system.js.map
529
+
530
+ // ===== File: tags.js =====
531
+ "use strict";
532
+ class AbbreviatedNumber extends HTMLElement {
533
+ constructor() {
534
+ super();
535
+ Object.defineProperty(this, "isShortened", {
536
+ enumerable: true,
537
+ configurable: true,
538
+ writable: true,
539
+ value: void 0
540
+ });
541
+ Object.defineProperty(this, "originalNumber", {
542
+ enumerable: true,
543
+ configurable: true,
544
+ writable: true,
545
+ value: void 0
546
+ });
547
+ this.isShortened = true;
548
+ this.originalNumber = parseFloat(this.textContent?.trim() || '0');
549
+ this.render();
550
+ this.addEventListener('click', this.toggle.bind(this));
551
+ if (isNaN(this.originalNumber))
552
+ throw new TypeError('The value must be a number');
553
+ }
554
+ static get observedAttributes() {
555
+ return ['lang', 'use_comma'];
556
+ }
557
+ toggle() {
558
+ this.isShortened = !this.isShortened;
559
+ this.render();
560
+ }
561
+ getCurrentLang() {
562
+ return this.getAttribute('lang') || document.documentElement.getAttribute('lang') || 'en';
563
+ }
564
+ formatNumber(num, lang) {
565
+ num = parseFloat(num.toString().replace(/[^\d.-]/g, ''));
566
+ if (isNaN(num))
567
+ return this.originalNumber.toString();
568
+ const useComma = this.hasAttribute('use_comma');
569
+ const separator = useComma ? ',' : '.';
570
+ const round = (value, digits) => {
571
+ if (digits === 0)
572
+ return Math.round(value);
573
+ const factor = Math.pow(10, digits);
574
+ return Math.round(value * factor) / factor;
575
+ };
576
+ const format = (value, digits) => {
577
+ const rounded = round(value, digits);
578
+ let str = rounded.toString();
579
+ if (digits > 0 && str.includes('.')) {
580
+ str = str.replace(/\.?0+$/, '');
581
+ }
582
+ return str.replace('.', separator);
583
+ };
584
+ const getFractionDigits = (value) => {
585
+ if (value < 10)
586
+ return 2;
587
+ if (value < 100)
588
+ return 1;
589
+ return 0;
590
+ };
591
+ if (lang.startsWith('ru')) {
592
+ if (num >= 1000000000000) {
593
+ const value = num / 1000000000000;
594
+ return format(value, getFractionDigits(value)) + ' трлн.';
595
+ }
596
+ if (num >= 1000000000) {
597
+ const value = num / 1000000000;
598
+ return format(value, getFractionDigits(value)) + ' млрд.';
599
+ }
600
+ if (num >= 1000000) {
601
+ const value = num / 1000000;
602
+ return format(value, getFractionDigits(value)) + ' млн.';
603
+ }
604
+ if (num >= 1000) {
605
+ const value = num / 1000;
606
+ return format(value, getFractionDigits(value)) + ' тыс.';
607
+ }
608
+ }
609
+ else {
610
+ if (num >= 1000000000000) {
611
+ const value = num / 1000000000000;
612
+ return format(value, getFractionDigits(value)) + 'T';
613
+ }
614
+ if (num >= 1000000000) {
615
+ const value = num / 1000000000;
616
+ return format(value, getFractionDigits(value)) + 'B';
617
+ }
618
+ if (num >= 1000000) {
619
+ const value = num / 1000000;
620
+ return format(value, getFractionDigits(value)) + 'M';
621
+ }
622
+ if (num >= 1000) {
623
+ const value = num / 1000;
624
+ return format(value, getFractionDigits(value)) + 'K';
625
+ }
626
+ }
627
+ return format(num, 0);
628
+ }
629
+ render() {
630
+ const lang = this.getCurrentLang();
631
+ this.textContent = this.isShortened
632
+ ? this.formatNumber(this.originalNumber, lang)
633
+ : this.originalNumber.toString();
634
+ }
635
+ }
636
+ class StepElement extends HTMLElement {
637
+ constructor() {
638
+ super();
639
+ if (this.textContent)
640
+ this.label = this.textContent;
641
+ this.innerHTML = `
642
+ <div data-sb-generated="circle"></div>
643
+ <div data-sb-generated="label"><slot></slot></div>
644
+ `;
645
+ }
646
+ static get observedAttributes() {
647
+ return ['active', 'completed', 'label'];
648
+ }
649
+ get index() {
650
+ return Array.from(this.parentNode.children).indexOf(this) + 1;
651
+ }
652
+ get active() {
653
+ return this.hasAttribute('active');
654
+ }
655
+ set active(force) {
656
+ this.toggleAttribute('active', force);
657
+ }
658
+ get completed() {
659
+ return this.hasAttribute('completed');
660
+ }
661
+ set completed(force) {
662
+ this.toggleAttribute('completed', force);
663
+ }
664
+ get label() {
665
+ return this.getAttribute('label') || "";
666
+ }
667
+ set label(value) {
668
+ this.setAttribute('label', value);
669
+ }
670
+ reset() {
671
+ this.active = false;
672
+ this.completed = false;
673
+ }
674
+ get status() {
675
+ if (this.active)
676
+ return 'active';
677
+ else if (this.completed)
678
+ return 'complete';
679
+ else
680
+ return 'uncomplete';
681
+ }
682
+ set status(value) {
683
+ this.reset();
684
+ switch (value) {
685
+ case 'complete':
686
+ this.completed = true;
687
+ break;
688
+ case 'active':
689
+ this.active = true;
690
+ break;
691
+ case 'uncomplete':
692
+ break;
693
+ default:
694
+ throw new TypeError(`Unknown status: ${value}`);
695
+ }
696
+ }
697
+ connectedCallback() {
698
+ this.querySelector('[data-sb-generated="circle"]').textContent = this.index.toString();
699
+ this.querySelector('[data-sb-generated="label"]').textContent = this.label;
700
+ const parent = this.parentElement;
701
+ const currentStep = parent.currentStep || 1;
702
+ if (this.index === currentStep)
703
+ this.active = true;
704
+ else if (this.index < currentStep)
705
+ this.completed = true;
706
+ }
707
+ }
708
+ class Stepbar extends HTMLElement {
709
+ constructor() {
710
+ super();
711
+ Object.defineProperty(this, "_observer", {
712
+ enumerable: true,
713
+ configurable: true,
714
+ writable: true,
715
+ value: void 0
716
+ });
717
+ this.attachShadow({ mode: 'open' });
718
+ this.shadowRoot.innerHTML = `
719
+ <slot></slot>
720
+ `;
721
+ }
722
+ static get observedAttributes() {
723
+ return ['current'];
724
+ }
725
+ attributeChangedCallback(name, oldValue, newValue) {
726
+ if (name === 'current') {
727
+ this.updateSteps();
728
+ }
729
+ }
730
+ connectedCallback() {
731
+ if (!this._observer) {
732
+ this._observer = new MutationObserver(() => this.updateSteps());
733
+ this._observer.observe(this, { childList: true });
734
+ }
735
+ this.updateSteps();
736
+ }
737
+ disconnectedCallback() {
738
+ if (this._observer) {
739
+ this._observer.disconnect();
740
+ }
741
+ }
742
+ updateSteps() {
743
+ const currentStep = parseInt(this.getAttribute('current') || '1');
744
+ const elements = Array.from(this.children).filter((el) => el.tagName === 'SB-ELEMENT');
745
+ elements.forEach((element, index) => {
746
+ const stepNumber = index + 1;
747
+ element.status = 'uncomplete';
748
+ if (stepNumber < currentStep) {
749
+ element.status = 'complete';
750
+ }
751
+ else if (stepNumber === currentStep) {
752
+ element.status = 'active';
753
+ }
754
+ });
755
+ }
756
+ get currentStep() {
757
+ return parseInt(this.getAttribute('current') || '1');
758
+ }
759
+ set currentStep(step) {
760
+ this.setAttribute('current', step.toString());
761
+ }
762
+ }
763
+ class HTMLFile extends HTMLElement {
764
+ constructor() {
765
+ super();
766
+ }
767
+ get src() {
768
+ return this.getAttribute('src') || '';
769
+ }
770
+ set src(value) {
771
+ if (value) {
772
+ this.setAttribute('src', value);
773
+ }
774
+ else {
775
+ this.removeAttribute('src');
776
+ }
777
+ }
778
+ static get observedAttributes() {
779
+ return ['src'];
780
+ }
781
+ connectedCallback() {
782
+ this.loadContent();
783
+ }
784
+ attributeChangedCallback(name, oldValue, newValue) {
785
+ if (name === 'src' && oldValue !== newValue && this.isConnected) {
786
+ this.loadContent();
787
+ }
788
+ }
789
+ async loadContent() {
790
+ const src = this.src;
791
+ if (!src)
792
+ return;
793
+ try {
794
+ const response = await fetch(src);
795
+ const content = await response.text();
796
+ this.innerHTML = content;
797
+ await this.executeScripts();
798
+ }
799
+ catch (error) {
800
+ this.innerHTML = `Ошибка загрузки: ${error.message}`;
801
+ }
802
+ }
803
+ async executeScripts() {
804
+ const scripts = this.querySelectorAll('script');
805
+ for (const script of scripts) {
806
+ if (script.src) {
807
+ await this.loadExternalScript(script.src);
808
+ }
809
+ else {
810
+ this.executeInlineScript(script.textContent || '');
811
+ }
812
+ script.remove();
813
+ }
814
+ }
815
+ loadExternalScript(src) {
816
+ return new Promise((resolve, reject) => {
817
+ const newScript = document.createElement('script');
818
+ newScript.src = src;
819
+ newScript.onload = resolve;
820
+ newScript.onerror = reject;
821
+ document.head.appendChild(newScript);
822
+ });
823
+ }
824
+ executeInlineScript(code) {
825
+ try {
826
+ const newScript = document.createElement('script');
827
+ newScript.textContent = code;
828
+ document.head.appendChild(newScript);
829
+ document.head.removeChild(newScript);
830
+ }
831
+ catch (error) {
832
+ console.error('Ошибка выполнения скрипта:', error);
833
+ }
834
+ }
835
+ get loaded() {
836
+ return this.hasAttribute('data-loaded');
837
+ }
838
+ reload() {
839
+ return this.loadContent();
840
+ }
841
+ get content() {
842
+ return this.innerHTML;
843
+ }
844
+ }
845
+ class ClickToCopy extends HTMLElement {
846
+ constructor() {
847
+ super();
848
+ Object.defineProperty(this, "notification", {
849
+ enumerable: true,
850
+ configurable: true,
851
+ writable: true,
852
+ value: void 0
853
+ });
854
+ this.notification = new HyperTextNotification({ backgroundColor: 'rgba(192,0,192,0.8)' });
855
+ }
856
+ get notificationText() {
857
+ return this.getAttribute('text') || "Скопировано";
858
+ }
859
+ set notificationText(value) {
860
+ if (value)
861
+ this.setAttribute('text', value);
862
+ else
863
+ this.removeAttribute('text');
864
+ }
865
+ get isNotified() {
866
+ return this.hasAttribute('notified');
867
+ }
868
+ set isNotified(value) {
869
+ if (value)
870
+ this.setAttribute('notified', '');
871
+ else
872
+ this.removeAttribute('notified');
873
+ }
874
+ connectedCallback() {
875
+ this.addEventListener('click', () => {
876
+ navigator.clipboard.writeText(this.textContent || '');
877
+ if (this.isNotified)
878
+ this.notification.show(this.notificationText);
879
+ });
880
+ }
881
+ }
882
+ customElements.define('sb-element', StepElement);
883
+ customElements.define('step-bar', Stepbar);
884
+ customElements.define('ab-num', AbbreviatedNumber);
885
+ customElements.define('include-html', HTMLFile);
886
+ customElements.define('click-to-copy', ClickToCopy);
887
+ //# sourceMappingURL=tags.js.map
888
+
889
+ // ===== File: url.js =====
890
+ "use strict";
891
+ function isAbsoluteUrl(url) {
892
+ try {
893
+ new URL(url);
894
+ return true;
895
+ }
896
+ catch (e) {
897
+ return url[0] === '/' || url[0] === '\\';
898
+ }
899
+ }
900
+ function combineUrls(baseUrl, relativeUrl) {
901
+ try {
902
+ if (!baseUrl) {
903
+ if (relativeUrl.startsWith('/'))
904
+ return relativeUrl;
905
+ return '/' + relativeUrl;
906
+ }
907
+ return new URL(relativeUrl, baseUrl).toString();
908
+ }
909
+ catch (error) {
910
+ throw new Error(`Invalid URL combination: ${baseUrl}, ${relativeUrl}`);
911
+ }
912
+ }
913
+ function getScriptSite(script) {
914
+ return new URL(script.src).origin;
915
+ }
916
+ //# sourceMappingURL=url.js.map
917
+
918
+ // ===== File: uuid.js =====
919
+ "use strict";
920
+ function generateUUIDv4() {
921
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
922
+ const r = Math.random() * 16 | 0;
923
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
924
+ return v.toString(16);
925
+ });
926
+ }
927
+ //# sourceMappingURL=uuid.js.map
928
+