slimsdk 0.1.55 → 0.2.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.
- package/README.md +3 -5
- package/dist/desktop/index.css +0 -48
- package/dist/desktop/index.css.map +1 -1
- package/dist/desktop/index.d.ts +14 -13
- package/dist/desktop/index.js +1476 -1972
- package/dist/desktop/index.js.map +1 -1
- package/dist/docs-BHtSyl34.d.ts +10 -0
- package/dist/index-B4158M0u.d.ts +21 -0
- package/dist/index-BAQxKstM.d.ts +8 -0
- package/dist/index-BMqjxP9I.d.ts +11 -0
- package/dist/index-CD53Vh6h.d.ts +31 -0
- package/dist/index-COGi5mfY.d.ts +28 -0
- package/dist/index-COUeXLOQ.d.ts +3 -0
- package/dist/index-CoYHkkyT.d.ts +14 -0
- package/dist/{index-kr8P3eEW.d.ts → index-Cvng8f_u.d.ts} +10 -9
- package/dist/index-D5CUpF9v.d.ts +10 -0
- package/dist/index-DBhzpIiB.d.ts +32 -0
- package/dist/index-D_o5c-YA.d.ts +134 -0
- package/dist/index-DzKPF0ja.d.ts +14 -0
- package/dist/index-jVam7Sxi.d.ts +15 -0
- package/dist/index-uQOR5bdy.d.ts +20 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +194 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/mobile/index.css +0 -48
- package/dist/mobile/index.css.map +1 -1
- package/dist/mobile/index.d.ts +13 -12
- package/dist/mobile/index.js +542 -808
- package/dist/mobile/index.js.map +1 -1
- package/dist/mod/button/index.d.ts +1 -1
- package/dist/mod/button/index.js +2 -2
- package/dist/mod/button/index.js.map +1 -1
- package/dist/mod/cover/index.d.ts +1 -1
- package/dist/mod/cover/index.js +3 -3
- package/dist/mod/cover/index.js.map +1 -1
- package/dist/mod/dialog/index.d.ts +1 -1
- package/dist/mod/dialog/index.js +13 -13
- package/dist/mod/dialog/index.js.map +1 -1
- package/dist/mod/drawer/index.d.ts +1 -1
- package/dist/mod/drawer/index.js +8 -8
- package/dist/mod/drawer/index.js.map +1 -1
- package/dist/mod/drop/index.d.ts +1 -1
- package/dist/mod/drop/index.js +15 -15
- package/dist/mod/drop/index.js.map +1 -1
- package/dist/mod/index.d.ts +7 -7
- package/dist/mod/index.js +61 -59
- package/dist/mod/index.js.map +1 -1
- package/dist/mod/modal/index.d.ts +1 -1
- package/dist/mod/modal/index.js +12 -12
- package/dist/mod/modal/index.js.map +1 -1
- package/dist/mod/tabs/index.d.ts +1 -1
- package/dist/mod/tabs/index.js +8 -6
- package/dist/mod/tabs/index.js.map +1 -1
- package/dist/page/desktop/index.d.ts +3 -3
- package/dist/page/desktop/index.js +228 -801
- package/dist/page/desktop/index.js.map +1 -1
- package/dist/page/index.d.ts +7 -7
- package/dist/page/index.js +12 -12
- package/dist/page/index.js.map +1 -1
- package/dist/page/mobile/index.d.ts +2 -2
- package/dist/page/mobile/index.js +14 -14
- package/dist/page/mobile/index.js.map +1 -1
- package/dist/svchub/index.d.ts +2 -0
- package/dist/svchub/index.js +760 -0
- package/dist/svchub/index.js.map +1 -0
- package/dist/worker/hubworker.js +1 -1
- package/dist/worker/hubworker.js.map +1 -1
- package/package.json +7 -6
- package/dist/index-B2HHS23A.d.ts +0 -20
- package/dist/index-BQcJsVJ-.d.ts +0 -10
- package/dist/index-Bf_lg-oZ.d.ts +0 -339
- package/dist/index-ChdqOPJq.d.ts +0 -15
- package/dist/index-CzsSwSvp.d.ts +0 -21
- package/dist/index-D3tu8t6p.d.ts +0 -28
- package/dist/index-DQt71MNx.d.ts +0 -31
- package/dist/index-DZdXvqxA.d.ts +0 -10
- package/dist/index-DcvauYN8.d.ts +0 -14
- package/dist/index-Pd7FTiEW.d.ts +0 -32
- package/dist/index-QRbamarh.d.ts +0 -8
- package/dist/mod/global/index.d.ts +0 -57
- package/dist/mod/global/index.js +0 -117
- package/dist/mod/global/index.js.map +0 -1
- package/dist/mod/hwlink/index.d.ts +0 -3
- package/dist/mod/hwlink/index.js +0 -873
- package/dist/mod/hwlink/index.js.map +0 -1
- package/dist/mod/hwlink/style.css +0 -1134
- package/dist/mod/hwlink/style.css.map +0 -1
package/dist/mod/index.js
CHANGED
|
@@ -7,9 +7,9 @@ var __export = (target, all) => {
|
|
|
7
7
|
// src/mod/built-in/button/index.ts
|
|
8
8
|
var button_exports = {};
|
|
9
9
|
__export(button_exports, {
|
|
10
|
-
|
|
10
|
+
loading: () => loading
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var loading = (btn, state = false) => {
|
|
13
13
|
if (state) {
|
|
14
14
|
btn.querySelector(".btn-loader")?.remove();
|
|
15
15
|
btn.style.color = "transparent";
|
|
@@ -46,10 +46,10 @@ var fitSize = (elm, delay = 0) => {
|
|
|
46
46
|
// src/mod/built-in/cover/index.ts
|
|
47
47
|
var cover_exports = {};
|
|
48
48
|
__export(cover_exports, {
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
acdInit: () => acdInit,
|
|
50
|
+
loading: () => loading2
|
|
51
51
|
});
|
|
52
|
-
var
|
|
52
|
+
var loading2 = (cover, state = false, align = "top", hide = true) => {
|
|
53
53
|
const inner = cover.querySelectorAll("*");
|
|
54
54
|
if (state) {
|
|
55
55
|
cover.querySelector(".cover-loader")?.remove();
|
|
@@ -236,12 +236,12 @@ var camReady = (cam) => {
|
|
|
236
236
|
// src/mod/dialog/index.ts
|
|
237
237
|
var dialog_exports = {};
|
|
238
238
|
__export(dialog_exports, {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
239
|
+
alert: () => alert,
|
|
240
|
+
confirm: () => confirm,
|
|
241
|
+
toast: () => toast
|
|
242
242
|
});
|
|
243
243
|
var app = document.querySelector("#app");
|
|
244
|
-
var
|
|
244
|
+
var confirm = (message, params) => new Promise((resolve) => {
|
|
245
245
|
if (!app) return;
|
|
246
246
|
const doc = params && params?.target ? params.target : app;
|
|
247
247
|
const color = params && params?.color ? params.color : "green";
|
|
@@ -275,7 +275,7 @@ var Confirm = (message, params) => new Promise((resolve) => {
|
|
|
275
275
|
resolve(false);
|
|
276
276
|
};
|
|
277
277
|
});
|
|
278
|
-
var
|
|
278
|
+
var alert = (message, params) => new Promise((resolve) => {
|
|
279
279
|
if (!app) return;
|
|
280
280
|
const doc = params && params?.target ? params.target : app;
|
|
281
281
|
const type = params && params?.type ? params.type : "success";
|
|
@@ -316,7 +316,7 @@ var Alert = (message, params) => new Promise((resolve) => {
|
|
|
316
316
|
resolve();
|
|
317
317
|
};
|
|
318
318
|
});
|
|
319
|
-
var
|
|
319
|
+
var toast = (message, params) => new Promise((resolve) => {
|
|
320
320
|
if (!app) return;
|
|
321
321
|
const doc = params && params?.target ? params.target : app;
|
|
322
322
|
const type = params && params?.type ? params.type : "success";
|
|
@@ -338,20 +338,20 @@ var Toast = (message, params) => new Promise((resolve) => {
|
|
|
338
338
|
color = "blue";
|
|
339
339
|
icon = "";
|
|
340
340
|
}
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
341
|
+
const toast2 = document.createElement("div");
|
|
342
|
+
toast2.className = `slim-toast ${color}`;
|
|
343
|
+
toast2.innerHTML = /*html*/
|
|
344
344
|
`
|
|
345
345
|
<i class="icon">${icon}</i>
|
|
346
346
|
<span class="text">${message}</span>
|
|
347
347
|
`;
|
|
348
|
-
doc.appendChild(
|
|
349
|
-
|
|
348
|
+
doc.appendChild(toast2);
|
|
349
|
+
toast2.classList.add("show");
|
|
350
350
|
let count = 0;
|
|
351
|
-
|
|
351
|
+
toast2.onanimationend = () => {
|
|
352
352
|
count++;
|
|
353
353
|
if (count == 2) {
|
|
354
|
-
|
|
354
|
+
toast2.remove();
|
|
355
355
|
resolve();
|
|
356
356
|
}
|
|
357
357
|
};
|
|
@@ -360,13 +360,13 @@ var Toast = (message, params) => new Promise((resolve) => {
|
|
|
360
360
|
// src/mod/drawer/index.ts
|
|
361
361
|
var drawer_exports = {};
|
|
362
362
|
__export(drawer_exports, {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
363
|
+
close: () => close,
|
|
364
|
+
create: () => create,
|
|
365
|
+
loading: () => loading3,
|
|
366
|
+
ready: () => ready
|
|
367
367
|
});
|
|
368
368
|
var app2 = document.querySelector("#app");
|
|
369
|
-
var
|
|
369
|
+
var create = (params) => {
|
|
370
370
|
const name = params.name ? params.name : "drawer";
|
|
371
371
|
const size = params.size ? params.size : "mobile";
|
|
372
372
|
const drawer = document.createElement("div");
|
|
@@ -450,7 +450,7 @@ var openMobile = (drawer) => {
|
|
|
450
450
|
}
|
|
451
451
|
};
|
|
452
452
|
};
|
|
453
|
-
var
|
|
453
|
+
var close = (drawer) => new Promise((resolve) => {
|
|
454
454
|
drawer.querySelector("#btn-exit").click();
|
|
455
455
|
drawer.addEventListener("animationend", () => resolve());
|
|
456
456
|
});
|
|
@@ -475,13 +475,13 @@ var destroy = (drawer) => {
|
|
|
475
475
|
const dialog = document.querySelectorAll(".slim-dialog");
|
|
476
476
|
dialog.forEach((el) => el.remove());
|
|
477
477
|
};
|
|
478
|
-
var
|
|
478
|
+
var loading3 = (drawer) => {
|
|
479
479
|
const body = drawer.querySelector(".drawer-body");
|
|
480
480
|
const loader = drawer.querySelector(".loader");
|
|
481
481
|
if (body) body.style.display = "none";
|
|
482
482
|
if (loader) loader.style.display = "flex";
|
|
483
483
|
};
|
|
484
|
-
var
|
|
484
|
+
var ready = (drawer) => {
|
|
485
485
|
const body = drawer.querySelector(".drawer-body");
|
|
486
486
|
const loader = drawer.querySelector(".loader");
|
|
487
487
|
if (body) body.style.display = "block";
|
|
@@ -491,32 +491,32 @@ var Ready = (drawer) => {
|
|
|
491
491
|
// src/mod/drop/index.ts
|
|
492
492
|
var drop_exports = {};
|
|
493
493
|
__export(drop_exports, {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
494
|
+
clear: () => clear,
|
|
495
|
+
menu: () => menu,
|
|
496
|
+
select: () => select,
|
|
497
|
+
update: () => update
|
|
498
498
|
});
|
|
499
|
-
var
|
|
499
|
+
var menu = (drop) => {
|
|
500
500
|
const dropBtn = drop.querySelector(".drop-btn");
|
|
501
501
|
const content = drop.querySelector(".drop-content");
|
|
502
502
|
if (!dropBtn || !content) return;
|
|
503
503
|
setBtnEvent(dropBtn, content);
|
|
504
504
|
};
|
|
505
|
-
var
|
|
505
|
+
var select = (drop, icon, callBack) => {
|
|
506
506
|
const dropBtn = drop.querySelector(".drop-btn");
|
|
507
507
|
const content = drop.querySelector(".drop-content");
|
|
508
508
|
if (!dropBtn || !content) return;
|
|
509
509
|
setBtnEvent(dropBtn, content);
|
|
510
|
-
|
|
510
|
+
update(drop, icon, callBack);
|
|
511
511
|
};
|
|
512
|
-
var
|
|
513
|
-
const
|
|
512
|
+
var update = (drop, icon, callBack) => {
|
|
513
|
+
const select2 = drop.querySelector("select");
|
|
514
514
|
const content = drop.querySelector(".drop-content");
|
|
515
|
-
if (!
|
|
515
|
+
if (!select2 || !content) return;
|
|
516
516
|
let elmIcon = "";
|
|
517
517
|
if (icon) elmIcon = `<span style="margin-right: 6px;">${icon}</span>`;
|
|
518
518
|
content.innerHTML = "";
|
|
519
|
-
const option =
|
|
519
|
+
const option = select2.querySelectorAll("option");
|
|
520
520
|
option.forEach((opt) => {
|
|
521
521
|
const item = document.createElement("a");
|
|
522
522
|
item.innerHTML = `${elmIcon}${opt.text}`;
|
|
@@ -530,7 +530,7 @@ var Update = (drop, icon, callBack) => {
|
|
|
530
530
|
};
|
|
531
531
|
});
|
|
532
532
|
const clearSelected = () => {
|
|
533
|
-
const index =
|
|
533
|
+
const index = select2.selectedIndex;
|
|
534
534
|
const list = content.querySelectorAll("a");
|
|
535
535
|
list.forEach((el, i) => {
|
|
536
536
|
if (i == index) {
|
|
@@ -551,7 +551,7 @@ var setBtnEvent = (btn, content) => {
|
|
|
551
551
|
content.style.display = "";
|
|
552
552
|
};
|
|
553
553
|
} else {
|
|
554
|
-
|
|
554
|
+
clear();
|
|
555
555
|
content.style.animation = "fade-in 0.4s forwards";
|
|
556
556
|
content.style.display = "block";
|
|
557
557
|
content.onanimationend = () => {
|
|
@@ -560,7 +560,7 @@ var setBtnEvent = (btn, content) => {
|
|
|
560
560
|
}
|
|
561
561
|
};
|
|
562
562
|
};
|
|
563
|
-
var
|
|
563
|
+
var clear = () => {
|
|
564
564
|
const drop = document.querySelectorAll(".drop-content");
|
|
565
565
|
drop.forEach((el) => {
|
|
566
566
|
if (el.style.display == "block") {
|
|
@@ -573,18 +573,18 @@ var Clear = () => {
|
|
|
573
573
|
});
|
|
574
574
|
};
|
|
575
575
|
window.addEventListener("click", (e) => {
|
|
576
|
-
if (!e.target.matches(".drop-btn"))
|
|
576
|
+
if (!e.target.matches(".drop-btn")) clear();
|
|
577
577
|
});
|
|
578
578
|
|
|
579
579
|
// src/mod/modal/index.ts
|
|
580
580
|
var modal_exports = {};
|
|
581
581
|
__export(modal_exports, {
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
582
|
+
close: () => close2,
|
|
583
|
+
create: () => create2,
|
|
584
|
+
hidden: () => hidden,
|
|
585
|
+
loading: () => loading4,
|
|
586
|
+
ready: () => ready2,
|
|
587
|
+
visible: () => visible
|
|
588
588
|
});
|
|
589
589
|
var app3 = document.querySelector("#app");
|
|
590
590
|
var tmpBtnSave = (
|
|
@@ -611,7 +611,7 @@ var tmpBtnClose = (
|
|
|
611
611
|
</button>
|
|
612
612
|
`
|
|
613
613
|
);
|
|
614
|
-
var
|
|
614
|
+
var create2 = (params) => {
|
|
615
615
|
const icon = params.icon ? params.icon : "";
|
|
616
616
|
const title = params.title ? params.title : "Modal Title";
|
|
617
617
|
const body = params.body ? params.body : "Modal Body";
|
|
@@ -678,7 +678,7 @@ var Create2 = (params) => {
|
|
|
678
678
|
if (btnClose) btnClose.onclick = done;
|
|
679
679
|
return modal;
|
|
680
680
|
};
|
|
681
|
-
var
|
|
681
|
+
var close2 = (modal) => new Promise((resolve) => {
|
|
682
682
|
modal.querySelector("#btn-exit").click();
|
|
683
683
|
const content = modal.querySelector(".content");
|
|
684
684
|
content.addEventListener("animationend", () => resolve());
|
|
@@ -694,34 +694,36 @@ var destroy2 = (modal) => {
|
|
|
694
694
|
}
|
|
695
695
|
});
|
|
696
696
|
};
|
|
697
|
-
var
|
|
697
|
+
var loading4 = (modal) => {
|
|
698
698
|
const body = modal.querySelector(".body");
|
|
699
699
|
const loader = modal.querySelector(".loader");
|
|
700
700
|
if (body) body.style.visibility = "hidden";
|
|
701
701
|
if (loader) loader.style.display = "flex";
|
|
702
702
|
};
|
|
703
|
-
var
|
|
703
|
+
var ready2 = (modal) => {
|
|
704
704
|
const body = modal.querySelector(".body");
|
|
705
705
|
const loader = modal.querySelector(".loader");
|
|
706
706
|
if (body) body.style.visibility = "visible";
|
|
707
707
|
if (loader) loader.style.display = "none";
|
|
708
708
|
};
|
|
709
|
-
var
|
|
709
|
+
var hidden = (modal) => {
|
|
710
710
|
modal.style.display = "none";
|
|
711
711
|
};
|
|
712
|
-
var
|
|
712
|
+
var visible = (modal) => {
|
|
713
713
|
modal.style.display = "block";
|
|
714
714
|
};
|
|
715
715
|
|
|
716
716
|
// src/mod/tabs/index.ts
|
|
717
717
|
var tabs_exports = {};
|
|
718
718
|
__export(tabs_exports, {
|
|
719
|
-
|
|
719
|
+
init: () => init,
|
|
720
|
+
loading: () => loading5,
|
|
721
|
+
ready: () => ready3,
|
|
720
722
|
setActive: () => setActive
|
|
721
723
|
});
|
|
722
724
|
var ignore = ["camera", "drawer", "modal"];
|
|
723
725
|
var hashIgnore = (hash) => ignore.includes(hash);
|
|
724
|
-
var
|
|
726
|
+
var init = (tabs, onChange) => {
|
|
725
727
|
const tbtn = tabs.querySelectorAll(".tabs-btn");
|
|
726
728
|
tbtn.forEach((elm) => {
|
|
727
729
|
const dataHash = elm.getAttribute("data-hash");
|
|
@@ -747,13 +749,13 @@ var Init = (tabs, onChange) => {
|
|
|
747
749
|
elm.classList.remove("active");
|
|
748
750
|
}
|
|
749
751
|
});
|
|
750
|
-
|
|
751
|
-
onChange(index, () =>
|
|
752
|
+
loading5(tabs, index);
|
|
753
|
+
onChange(index, () => ready3(tabs, index));
|
|
752
754
|
};
|
|
753
755
|
tabsChange();
|
|
754
756
|
window.onhashchange = tabsChange;
|
|
755
757
|
};
|
|
756
|
-
var
|
|
758
|
+
var loading5 = (tabs, index) => {
|
|
757
759
|
const tbtn = tabs.querySelectorAll(".tabs-btn")[index];
|
|
758
760
|
const body = tabs.querySelector(".tabs-body");
|
|
759
761
|
const inner = tbtn.querySelectorAll("*");
|
|
@@ -781,7 +783,7 @@ var tabsLoading = (tabs, index) => {
|
|
|
781
783
|
}
|
|
782
784
|
}
|
|
783
785
|
};
|
|
784
|
-
var
|
|
786
|
+
var ready3 = (tabs, index) => {
|
|
785
787
|
const tbtn = tabs.querySelectorAll(".tabs-btn")[index];
|
|
786
788
|
const body = tabs.querySelector(".tabs-body");
|
|
787
789
|
const inner = tbtn.querySelectorAll("*");
|
package/dist/mod/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mod/built-in/button/index.ts","../../src/mod/built-in/input/index.ts","../../src/mod/built-in/cover/index.ts","../../src/mod/camera/index.ts","../../src/mod/dialog/index.ts","../../src/mod/drawer/index.ts","../../src/mod/drop/index.ts","../../src/mod/modal/index.ts","../../src/mod/tabs/index.ts"],"sourcesContent":["/* button */\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (\n btn: HTMLButtonElement,\n state = false,\n) => {\n if (state) {\n btn.querySelector<HTMLElement>('.btn-loader')?.remove();\n btn.style.color = 'transparent';\n btn.style.position = 'relative';\n btn.style.pointerEvents = 'none';\n const loader = document.createElement('div');\n loader.className = 'btn-loader';\n loader.innerHTML = `<div class=\"spinner s22\"></div>`;\n btn.appendChild(loader);\n } else {\n btn.querySelector<HTMLElement>('.btn-loader')?.remove();\n btn.style.color = '';\n btn.style.position = '';\n btn.style.pointerEvents = '';\n }\n};\n/*--------------------------------------------------------------------------------*/\n","/* input */\n/*--------------------------------------------------------------------------------*/\nexport const setAutoSize = (elm: HTMLTextAreaElement) => {\n elm.onkeyup = () => fitSize(elm);\n};\nexport const fitSize = (elm: HTMLTextAreaElement, delay = 0) => {\n setTimeout(() => {\n elm.style.height = 'auto';\n elm.style.height = `${elm.scrollHeight + 2}px`;\n }, delay);\n};\n/*--------------------------------------------------------------------------------*/\n","/* cover */\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (\n cover: HTMLElement,\n state = false,\n align = 'top',\n hide = true,\n) => {\n const inner = cover.querySelectorAll<HTMLElement>('*');\n if (state) {\n cover.querySelector<HTMLElement>('.cover-loader')?.remove();\n cover.style.position = 'relative';\n if (hide) inner.forEach(el => el.style.visibility = 'hidden');\n // create loader\n const loader = document.createElement('div');\n loader.className = `cover-loader ${align}`;\n loader.innerHTML = `<div class=\"spinner s28\"></div>`;\n cover.appendChild(loader);\n } else {\n new Promise(r => setTimeout(r, 400)).then(() => {\n cover.querySelector<HTMLElement>('.cover-loader')?.remove();\n cover.style.position = '';\n inner.forEach(el => el.style.visibility = '');\n });\n }\n};\n/*--------------------------------------------------------------------------------*/\n// accordion\nexport const acdInit = () => {\n const acdItem = document.querySelectorAll<HTMLElement>('.acd-item');\n acdItem.forEach(elm => {\n const topic = elm.querySelector<HTMLElement>('.topic');\n const panel = elm.querySelector<HTMLElement>('.panel');\n if (topic) topic.onclick = () => {\n elm.classList.toggle('active');\n if (!panel) return;\n if (elm.classList.contains('active')) {\n panel.style.maxHeight = `${panel.scrollHeight}px`;\n } else {\n panel.style.maxHeight = '';\n }\n };\n });\n};\n/*--------------------------------------------------------------------------------*/\n","/* camera */\n/*--------------------------------------------------------------------------------*/\nexport const takePhoto = () => new Promise<{ image: string; }>((resolve) => {\n // set hash\n window.onhashchange = () => {\n if (window.location.hash != '#camera') closeCam();\n };\n window.location.hash = 'camera';\n // create\n const cam = camCreate();\n const video = cam.querySelector<HTMLVideoElement>('#video');\n let imgData: string;\n let stream: void | MediaStream;\n let front = false;\n const options = {\n video: {\n facingMode: 'environment',\n width: { ideal: 1024 },\n height: { ideal: 768 },\n }\n };\n const closeCam = () => {\n stopMedia();\n camClose(cam);\n resolve({ image: imgData });\n };\n const stopMedia = () => {\n if (stream) {\n const track = stream.getTracks()[0];\n track.stop();\n }\n };\n const startMedia = async () => {\n const title = cam.querySelector<HTMLElement>('.header .title');\n const detail = cam.querySelector<HTMLElement>('.header .detail');\n const footer = cam.querySelector<HTMLElement>('.footer');\n const body = cam.querySelector<HTMLElement>('.body');\n stream = await navigator.mediaDevices.getUserMedia(options).catch(() => {\n title!.innerText = 'ไม่พบกล้องถ่ายภาพ';\n footer!.style.display = 'none';\n body!.innerHTML = /*html*/ `\n <i class=\"icon thin\" style=\"font-size: 80px;\"></i>\n `;\n });\n if (stream) {\n video!.srcObject = stream;\n video!.play();\n const media = stream.getTracks()[0].getSettings();\n detail!.innerText = `${media.width}x${media.height} ${media.frameRate}fps`;\n }\n };\n // start media\n (async () => {\n await startMedia();\n camReady(cam);\n })();\n // button\n const btn_take = cam.querySelector<HTMLButtonElement>('#btn-take');\n const btn_flip = cam.querySelector<HTMLElement>('#btn-flip');\n const btn_close = cam.querySelector<HTMLElement>('#btn-close');\n const btn_cancel = cam.querySelector<HTMLElement>('#btn-cancel');\n // btn-take\n btn_take!.onclick = () => {\n const media = stream!.getTracks()[0].getSettings();\n const image = cam.querySelector<HTMLCanvasElement>('#image');\n // init image\n const ctx = image!.getContext('2d');\n ctx!.clearRect(0, 0, image!.width, image!.height);\n image!.width = Number(media.width);\n image!.height = Number(media.height);\n // image data\n const image_ctx = image!.getContext('2d');\n image_ctx!.drawImage(\n video!, 0, 0,\n Number(media.width), Number(media.height), 0, 0,\n image!.width, image!.height,\n );\n imgData = image!.toDataURL('image/jpeg');\n history.back();\n };\n // btn-flip\n btn_flip!.onclick = async () => {\n front = !front;\n options.video.facingMode = front ? 'user' : 'environment';\n stopMedia();\n camLoading(cam);\n await startMedia();\n camReady(cam);\n };\n // btn-close, btn-cancel\n btn_close!.onclick = () => history.back();\n btn_cancel!.onclick = () => history.back();\n});\n/*--------------------------------------------------------------------------------*/\nconst camCreate = (): HTMLElement => {\n const cam = document.createElement('div');\n cam.className = 'slim-camera';\n cam.innerHTML = /*html*/ `\n <div class=\"body\">\n <video id=\"video\" muted playsinline></video>\n <canvas id=\"image\"></canvas>\n </div>\n <div class=\"header\">\n <div style=\"text-align: center;\">\n <div class=\"title\">กล้องถ่ายภาพ</div>\n <div class=\"detail\"></div>\n </div>\n <i id=\"btn-close\" class=\"icon\"></i>\n </div>\n <div class=\"footer\">\n <i id=\"btn-cancel\" class=\"icon\"></i>\n <button id=\"btn-take\"></button>\n <i id=\"btn-flip\" class=\"icon\"></i>\n </div>\n <div class=\"loader\">\n <div class=\"spinner s32\"></div>\n </div>\n `;\n document.body.appendChild(cam);\n // open camera\n cam.style.left = `-100%`;\n cam.classList.add('cam-in');\n return cam;\n};\n/*--------------------------------------------------------------------------------*/\nconst camClose = (cam: HTMLElement) => {\n window.onhashchange = null;\n cam.classList.remove('cam-in');\n cam.classList.add('cam-out');\n cam.onanimationend = () => {\n cam.remove();\n };\n};\n/*--------------------------------------------------------------------------------*/\nconst camLoading = (cam: HTMLElement) => {\n const body = cam.querySelector<HTMLElement>('.body');\n const loader = cam.querySelector<HTMLElement>('.loader');\n body!.style.visibility = 'hidden';\n loader!.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nconst camReady = (cam: HTMLElement) => {\n const header = cam.querySelector<HTMLElement>('.header');\n const footer = cam.querySelector<HTMLElement>('.footer');\n const body = cam.querySelector<HTMLElement>('.body');\n const loader = cam.querySelector<HTMLElement>('.loader');\n header!.style.visibility = 'visible';\n footer!.style.visibility = 'visible';\n body!.style.visibility = 'visible';\n loader!.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* dialog */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\nexport const Confirm = (\n message: string,\n params?: {\n color?: string;\n target?: HTMLElement;\n }\n) => new Promise<boolean>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const color = params && params?.color ? params.color : 'green';\n // create\n const dialog = document.createElement('div');\n dialog.className = 'overlay slim-dialog';\n dialog.innerHTML = /*html*/ `\n <div class=\"confirm ${color}\">\n <div class=\"header\">\n <i class=\"icon solid\"></i> Slim Confirm\n </div>\n <div class=\"message\">${message}</div>\n <div class=\"footer\">\n <button class=\"lg gray left\" id=\"btn-no\">\n <i></i>ยกเลิก\n </button>\n <button class=\"lg ${color} right\" id=\"btn-yes\">\n <i></i>ตกลง\n </button>\n </div>\n </div>\n `;\n doc.appendChild(dialog);\n // button\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.focus();\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.onclick = () => {\n dialog.remove();\n resolve(true);\n };\n dialog.querySelector<HTMLButtonElement>('#btn-no')!.onclick = () => {\n dialog.remove();\n resolve(false);\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const Alert = (\n message: string,\n params?: {\n type?: string;\n target?: HTMLElement;\n }\n) => new Promise<void>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const type = params && params?.type ? params.type : 'success';\n // type\n let color = '';\n let icon = '';\n if (type == 'success') { color = 'green'; icon = ''; }\n if (type == 'failure') { color = 'red'; icon = ''; }\n if (type == 'warning') { color = 'orange'; icon = ''; }\n if (type == 'info') { color = 'blue'; icon = ''; }\n // create\n const dialog = document.createElement('div');\n dialog.className = 'overlay slim-dialog';\n dialog.innerHTML = /*html*/ `\n <div class=\"alert ${color}\">\n <div class=\"icon solid\">${icon}</div>\n <div class=\"message\">${message}</div>\n <div class=\"footer\">\n <button class=\"lg ${color}\" id=\"btn-yes\">ตกลง</button>\n </div>\n </div>\n `;\n doc.appendChild(dialog);\n // button\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.focus();\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.onclick = () => {\n dialog.remove();\n resolve();\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const Toast = (\n message: string,\n params?: {\n type?: string;\n target?: HTMLElement;\n }\n) => new Promise<void>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const type = params && params?.type ? params.type : 'success';\n // type\n let color = '';\n let icon = '';\n if (type == 'success') { color = 'green'; icon = ''; }\n if (type == 'failure') { color = 'red'; icon = ''; }\n if (type == 'warning') { color = 'orange'; icon = ''; }\n if (type == 'info') { color = 'blue'; icon = ''; }\n // create\n const toast = document.createElement('div');\n toast.className = `slim-toast ${color}`;\n toast.innerHTML = /*html*/ `\n <i class=\"icon\">${icon}</i>\n <span class=\"text\">${message}</span>\n `;\n doc.appendChild(toast);\n // animation\n toast.classList.add('show');\n let count = 0;\n toast.onanimationend = () => {\n count++;\n if (count == 2) {\n toast.remove();\n resolve();\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\n","/* drawer */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\ntype reqParams = {\n title: string;\n body: string;\n name?: string;\n size?: string; // mobile, full\n};\nexport const Create = (params: reqParams): HTMLElement => {\n const name = params.name ? params.name : 'drawer';\n const size = params.size ? params.size : 'mobile';\n // create\n const drawer = document.createElement('div');\n drawer.className = `slim-drawer ${size}`;\n drawer.innerHTML = /*html*/ `\n <div class=\"drawer-header\">\n <button id=\"btn-exit\" type=\"button\"\n class=\"circle sm light\"></button>\n <div class=\"title\">${params.title}</div>\n </div>\n <div class=\"drawer-body\">${params.body}</div>\n <div class=\"loader\">\n <div class=\"spinner s32\"></div>\n </div>\n `;\n document.body.appendChild(drawer);\n // set size\n switch (size) {\n case 'mobile': openMobile(drawer); break;\n case 'full':\n drawer.style.animation = 'slide-in-left 0.4s forwards';\n break;\n default: return drawer;\n }\n // hash change\n window.location.hash = name;\n const hashChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hash != name && hash != 'modal') done();\n };\n const done = () => {\n destroy(drawer);\n if (window.location.hash == `#${name}`) history.back();\n window.removeEventListener('hashchange', hashChange);\n };\n window.addEventListener('hashchange', hashChange);\n // button\n const btnExit = drawer.querySelector<HTMLButtonElement>('#btn-exit');\n const btnCancel = drawer.querySelector<HTMLButtonElement>('#btn-cancel');\n if (btnExit) {\n btnExit.focus();\n btnExit.onclick = done;\n }\n if (btnCancel) btnCancel.onclick = done;\n return drawer;\n};\n/*--------------------------------------------------------------------------------*/\nconst openMobile = (drawer: HTMLElement) => {\n if (!app) return;\n const offset = app.getBoundingClientRect();\n const appRight = offset.right;\n const appWidth = app.offsetWidth;\n // default position\n drawer.style.left = `${appRight}px`;\n // animation\n const css = document.createElement('style');\n drawer.appendChild(css);\n css.sheet?.insertRule(`\n @keyframes drawer-in {\n from {transform: translateX(0);}\n to {transform: translateX(-${appWidth}px);}\n }\n `);\n css.sheet?.insertRule(`\n @keyframes drawer-out {\n from {transform: translateX(-${appWidth}px);}\n to {transform: translateX(0);}\n }\n `);\n // open drawer\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.animation = 'drawer-push-app 0.4s forwards';\n drawer.style.animation = 'drawer-in 0.4s forwards';\n // scroll shadow\n const header = drawer.querySelector<HTMLElement>('.drawer-header');\n const body = drawer.querySelector<HTMLElement>('.drawer-body');\n if (header && body) body.onscroll = () => {\n if (body.scrollTop > 10) {\n header.style.boxShadow = `\n rgba(60, 64, 67, 0.3) 0px 1px 2px 0px,\n rgba(60, 64, 67, 0.15) 0px 1px 3px 1px\n `;\n } else {\n header.style.boxShadow = '';\n }\n };\n};\n/*--------------------------------------------------------------------------------*/\nexport const Close = (drawer: HTMLElement) => new Promise<void>((resolve) => {\n drawer.querySelector<HTMLButtonElement>('#btn-exit')!.click();\n drawer.addEventListener('animationend', () => resolve());\n});\nconst destroy = (drawer: HTMLElement) => {\n if (!app) return;\n if (drawer.classList.contains('mobile')) {\n // mobile\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.animation = 'drawer-pull-app 0.4s forwards';\n drawer.style.animation = 'drawer-out 0.4s forwards';\n drawer.addEventListener('animationend', () => {\n if (content) content.style.animation = 'unset';\n drawer.remove();\n });\n } else {\n // full-page\n drawer.style.animation = 'slide-out-left 0.4s forwards';\n drawer.addEventListener('animationend', () => {\n drawer.remove();\n });\n }\n // remove modal\n const modal = document.querySelectorAll<HTMLElement>('.slim-modal');\n modal.forEach(el => el.remove());\n // remove dialog\n const dialog = document.querySelectorAll<HTMLElement>('.slim-dialog');\n dialog.forEach(el => el.remove());\n};\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (drawer: HTMLElement) => {\n const body = drawer.querySelector<HTMLElement>('.drawer-body');\n const loader = drawer.querySelector<HTMLElement>('.loader');\n if (body) body.style.display = 'none';\n if (loader) loader.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Ready = (drawer: HTMLElement) => {\n const body = drawer.querySelector<HTMLElement>('.drawer-body');\n const loader = drawer.querySelector<HTMLElement>('.loader');\n if (body) body.style.display = 'block';\n if (loader) loader.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* drop */\n/*--------------------------------------------------------------------------------*/\nexport const Menu = (drop: HTMLElement) => {\n const dropBtn = drop.querySelector<HTMLButtonElement>('.drop-btn');\n const content = drop.querySelector<HTMLElement>('.drop-content');\n if (!dropBtn || !content) return;\n setBtnEvent(dropBtn, content);\n};\n/*--------------------------------------------------------------------------------*/\nexport const Select = (\n drop: HTMLElement,\n icon: string,\n callBack: (value: string, text: string) => void,\n) => {\n const dropBtn = drop.querySelector<HTMLButtonElement>('.drop-btn');\n const content = drop.querySelector<HTMLElement>('.drop-content');\n if (!dropBtn || !content) return;\n setBtnEvent(dropBtn, content);\n Update(drop, icon, callBack);\n};\n/*--------------------------------------------------------------------------------*/\nexport const Update = (\n drop: HTMLElement,\n icon: string,\n callBack: (value: string, text: string) => void,\n) => {\n const select = drop.querySelector<HTMLSelectElement>('select');\n const content = drop.querySelector<HTMLElement>('.drop-content');\n if (!select || !content) return;\n let elmIcon = '';\n if (icon) elmIcon = `<span style=\"margin-right: 6px;\">${icon}</span>`;\n // select to menu\n content.innerHTML = '';\n const option = select.querySelectorAll<HTMLOptionElement>('option');\n option.forEach(opt => {\n const item = document.createElement('a');\n item.innerHTML = `${elmIcon}${opt.text}`;\n content.appendChild(item);\n // drop click\n item.onclick = () => {\n opt.selected = true;\n clearSelected();\n if (callBack) {\n callBack(opt.value, opt.text);\n }\n };\n });\n // clear selected\n const clearSelected = () => {\n const index = select.selectedIndex;\n const list = content.querySelectorAll<HTMLAnchorElement>('a');\n list.forEach((el, i) => {\n if (i == index) {\n el.classList.add('selected');\n } else {\n el.classList.remove('selected');\n }\n });\n };\n clearSelected();\n};\n/*--------------------------------------------------------------------------------*/\nconst setBtnEvent = (btn: HTMLButtonElement, content: HTMLElement) => {\n btn.onclick = () => {\n if (content.style.display == 'block') {\n content.style.animation = 'fade-out 0.4s forwards';\n content.onanimationend = () => {\n content.style.animation = '';\n content.style.display = '';\n };\n } else {\n Clear();\n content.style.animation = 'fade-in 0.4s forwards';\n content.style.display = 'block';\n content.onanimationend = () => {\n content.style.animation = '';\n };\n }\n };\n};\n/*--------------------------------------------------------------------------------*/\nexport const Clear = () => {\n const drop = document.querySelectorAll<HTMLElement>('.drop-content');\n drop.forEach(el => {\n if (el.style.display == 'block') {\n el.style.animation = 'fade-out 0.4s forwards';\n el.onanimationend = () => {\n el.style.animation = '';\n el.style.display = '';\n };\n }\n });\n};\nwindow.addEventListener('click', (e) => {\n if (!(<HTMLElement>e.target).matches('.drop-btn')) Clear();\n});\n/*--------------------------------------------------------------------------------*/\n","/* modal */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\nconst tmpBtnSave: string = /* html */ `\n <button class=\"solid green\" type=\"submit\">\n <i></i>บันทึก\n </button>\n`;\nconst tmpBtnCancel: string = /* html */ `\n <button class=\"solid gray\" type=\"button\" id=\"btn-cancel\">\n <i></i>ยกเลิก\n </button>\n`;\nconst tmpBtnClose: string = /* html */ `\n <button class=\"solid blue\" type=\"button\" id=\"btn-close\">\n <i></i>ปิดหน้า\n </button>\n`;\ntype ModalParams = {\n icon: string;\n title: string;\n body: string;\n width?: string;\n button?: {\n save?: boolean;\n cancel?: boolean;\n close?: boolean;\n align?: string;\n };\n target?: HTMLElement;\n};\n/*--------------------------------------------------------------------------------*/\nexport const Create = (params: ModalParams): HTMLElement => {\n const icon = params.icon ? params.icon : '';\n const title = params.title ? params.title : 'Modal Title';\n const body = params.body ? params.body : 'Modal Body';\n const width = params.width ? params.width : '100%';\n const align = params.button?.align ? params.button?.align : '';\n const doc = params.target ? params.target : app;\n // button\n let button = '';\n if (params.button?.cancel) button += tmpBtnCancel;\n if (params.button?.close) button += tmpBtnClose;\n if (params.button?.save) button += tmpBtnSave;\n // create\n const modal = document.createElement('div');\n modal.className = 'overlay slim-modal';\n modal.innerHTML = /*html*/ `\n <form>\n <div class=\"content\" style=\"width: ${width};\">\n <div class=\"header\">\n <i class=\"icon pad\">${icon}</i>${title}\n <button id=\"btn-exit\" type=\"button\"\n class=\"icon\"></button>\n </div>\n <div class=\"body\">${body}</div>\n <div class=\"footer ${align}\">${button}</div>\n <div class=\"loader\">\n <div class=\"spinner s28\"></div>\n </div>\n </div>\n </form>\n `;\n if (!doc) return modal;\n doc.appendChild(modal);\n if (width == 'auto') {\n const content = modal.querySelector<HTMLElement>('.content');\n if (content) content.style.maxWidth = `450px`;\n }\n // open modal\n window.location.hash = 'modal';\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.classList.add('modal-in');\n modal.classList.add('overlay-in');\n content.addEventListener('animationend', () => {\n if (content.classList.contains('modal-in')) {\n content.classList.remove('modal-in');\n modal.classList.remove('overlay-in');\n }\n });\n // hash change\n const hashChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hash != 'modal') done();\n };\n const done = () => {\n destroy(modal);\n if (window.location.hash == '#modal') history.back();\n window.removeEventListener('hashchange', hashChange);\n };\n window.addEventListener('hashchange', hashChange);\n // button\n const btnExit = modal.querySelector<HTMLButtonElement>('#btn-exit');\n const btnCancel = modal.querySelector<HTMLButtonElement>('#btn-cancel');\n const btnClose = modal.querySelector<HTMLButtonElement>('#btn-close');\n if (btnExit) {\n btnExit.focus();\n btnExit.onclick = done;\n }\n if (btnCancel) btnCancel.onclick = done;\n if (btnClose) btnClose.onclick = done;\n return modal;\n};\n/*--------------------------------------------------------------------------------*/\nexport const Close = (modal: HTMLElement) => new Promise<void>((resolve) => {\n modal.querySelector<HTMLButtonElement>('#btn-exit')!.click();\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.addEventListener('animationend', () => resolve());\n});\nconst destroy = (modal: HTMLElement) => {\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.classList.add('modal-out');\n modal.classList.add('overlay-out');\n content.addEventListener('animationend', () => {\n if (content.classList.contains('modal-out')) {\n modal.style.display = 'none';\n modal.remove();\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (modal: HTMLElement) => {\n const body = modal.querySelector<HTMLElement>('.body');\n const loader = modal.querySelector<HTMLElement>('.loader');\n if (body) body.style.visibility = 'hidden';\n if (loader) loader.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Ready = (modal: HTMLElement) => {\n const body = modal.querySelector<HTMLElement>('.body');\n const loader = modal.querySelector<HTMLElement>('.loader');\n if (body) body.style.visibility = 'visible';\n if (loader) loader.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Hidden = (modal: HTMLElement) => {\n modal.style.display = 'none';\n};\nexport const Visible = (modal: HTMLElement) => {\n modal.style.display = 'block';\n};\n/*--------------------------------------------------------------------------------*/\n","/* tabs */\n/*--------------------------------------------------------------------------------*/\nconst ignore: string[] = ['camera', 'drawer', 'modal'];\nconst hashIgnore = (hash: string) => ignore.includes(hash);\n/*--------------------------------------------------------------------------------*/\nexport const Init = (\n tabs: HTMLElement,\n onChange: (index: number, done: () => void) => void,\n) => {\n const tbtn = tabs.querySelectorAll<HTMLButtonElement>('.tabs-btn');\n tbtn.forEach(elm => {\n const dataHash = elm.getAttribute('data-hash');\n elm.onclick = () => window.location.replace('#' + dataHash);\n });\n // tabs change\n const tabsChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hashIgnore(hash)) return;\n if (hash == '') {\n const mainTabs = tbtn[0].getAttribute('data-hash');\n window.location.replace('#' + mainTabs);\n return;\n }\n const curTabs = tabs.querySelector<HTMLButtonElement>('.tabs-btn.active');\n if (hash == curTabs?.getAttribute('data-hash')) return;\n // set active\n let index = 0;\n tbtn.forEach((elm, i) => {\n const dataHash = elm.getAttribute('data-hash');\n if (hash == dataHash) {\n elm.classList.add('active');\n index = i;\n } else {\n elm.classList.remove('active');\n }\n });\n tabsLoading(tabs, index);\n onChange(index, () => tabsReady(tabs, index));\n };\n tabsChange();\n window.onhashchange = tabsChange;\n};\n/*--------------------------------------------------------------------------------*/\nconst tabsLoading = (tabs: HTMLElement, index: number) => {\n const tbtn = tabs.querySelectorAll<HTMLButtonElement>('.tabs-btn')[index];\n const body = tabs.querySelector<HTMLElement>('.tabs-body');\n const inner = tbtn.querySelectorAll<HTMLElement>('*');\n const tabsBar = tabs.querySelector<HTMLElement>('.tabs-bar');\n if (tbtn && body) {\n // clear loader\n tabs.querySelector<HTMLElement>('.tabs-overlay')?.remove();\n tbtn.querySelector<HTMLElement>('.btn-loader')?.remove();\n // hide inner\n body.style.display = 'none';\n inner.forEach(el => el.style.display = 'none');\n // create overlay\n const overlay = document.createElement('div');\n overlay.className = 'tabs-overlay';\n tabs.appendChild(overlay);\n // create loader\n const loader = document.createElement('div');\n loader.className = 'btn-loader';\n loader.innerHTML = `<div class=\"spinner s24\"></div>`;\n tbtn.appendChild(loader);\n // tabs-bar\n if (tabsBar) {\n const barCont = tabsBar.querySelectorAll<HTMLElement>('*');\n barCont.forEach(el => el.style.visibility = 'hidden');\n tabsBar.querySelector<HTMLElement>('.lds-ellipsis')?.remove();\n // create loader\n const loader = document.createElement('div');\n loader.className = 'lds-ellipsis';\n loader.innerHTML = `<div></div><div></div><div></div><div></div>`;\n tabsBar.prepend(loader);\n }\n }\n};\n/*--------------------------------------------------------------------------------*/\nconst tabsReady = (tabs: HTMLElement, index: number) => {\n const tbtn = tabs.querySelectorAll<HTMLButtonElement>('.tabs-btn')[index];\n const body = tabs.querySelector<HTMLElement>('.tabs-body');\n const inner = tbtn.querySelectorAll<HTMLElement>('*');\n const tabsBar = tabs.querySelector<HTMLElement>('.tabs-bar');\n if (tbtn && body) new Promise(r => setTimeout(r, 400)).then(() => {\n // clear loader\n tabs.querySelector<HTMLElement>('.tabs-overlay')?.remove();\n tbtn.querySelector<HTMLElement>('.btn-loader')?.remove();\n // show inner\n body.style.display = 'block';\n inner.forEach(el => el.style.display = '');\n // tabs-bar\n if (tabsBar) {\n const barCont = tabsBar.querySelectorAll<HTMLElement>('*');\n barCont.forEach(el => el.style.visibility = '');\n tabsBar.querySelector<HTMLElement>('.lds-ellipsis')?.remove();\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const setActive = (tbtn: NodeListOf<HTMLButtonElement>, index: number) => {\n tbtn.forEach((elm, i) => {\n if (i == index) {\n elm.classList.add('active');\n } else {\n elm.classList.remove('active');\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\n"],"mappings":"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","names":["Loading","Loading","app","Close","Create","Loading","Ready","app","content","destroy","loader"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mod/built-in/button/index.ts","../../src/mod/built-in/input/index.ts","../../src/mod/built-in/cover/index.ts","../../src/mod/camera/index.ts","../../src/mod/dialog/index.ts","../../src/mod/drawer/index.ts","../../src/mod/drop/index.ts","../../src/mod/modal/index.ts","../../src/mod/tabs/index.ts"],"sourcesContent":["/* button */\n/*--------------------------------------------------------------------------------*/\nexport const loading = (\n btn: HTMLButtonElement,\n state = false,\n) => {\n if (state) {\n btn.querySelector<HTMLElement>('.btn-loader')?.remove();\n btn.style.color = 'transparent';\n btn.style.position = 'relative';\n btn.style.pointerEvents = 'none';\n const loader = document.createElement('div');\n loader.className = 'btn-loader';\n loader.innerHTML = `<div class=\"spinner s22\"></div>`;\n btn.appendChild(loader);\n } else {\n btn.querySelector<HTMLElement>('.btn-loader')?.remove();\n btn.style.color = '';\n btn.style.position = '';\n btn.style.pointerEvents = '';\n }\n};\n/*--------------------------------------------------------------------------------*/\n","/* input */\n/*--------------------------------------------------------------------------------*/\nexport const setAutoSize = (elm: HTMLTextAreaElement) => {\n elm.onkeyup = () => fitSize(elm);\n};\nexport const fitSize = (elm: HTMLTextAreaElement, delay = 0) => {\n setTimeout(() => {\n elm.style.height = 'auto';\n elm.style.height = `${elm.scrollHeight + 2}px`;\n }, delay);\n};\n/*--------------------------------------------------------------------------------*/\n","/* cover */\n/*--------------------------------------------------------------------------------*/\nexport const loading = (\n cover: HTMLElement,\n state = false,\n align = 'top',\n hide = true,\n) => {\n const inner = cover.querySelectorAll<HTMLElement>('*');\n if (state) {\n cover.querySelector<HTMLElement>('.cover-loader')?.remove();\n cover.style.position = 'relative';\n if (hide) inner.forEach(el => el.style.visibility = 'hidden');\n // create loader\n const loader = document.createElement('div');\n loader.className = `cover-loader ${align}`;\n loader.innerHTML = `<div class=\"spinner s28\"></div>`;\n cover.appendChild(loader);\n } else {\n new Promise(r => setTimeout(r, 400)).then(() => {\n cover.querySelector<HTMLElement>('.cover-loader')?.remove();\n cover.style.position = '';\n inner.forEach(el => el.style.visibility = '');\n });\n }\n};\n/*--------------------------------------------------------------------------------*/\n// accordion\nexport const acdInit = () => {\n const acdItem = document.querySelectorAll<HTMLElement>('.acd-item');\n acdItem.forEach(elm => {\n const topic = elm.querySelector<HTMLElement>('.topic');\n const panel = elm.querySelector<HTMLElement>('.panel');\n if (topic) topic.onclick = () => {\n elm.classList.toggle('active');\n if (!panel) return;\n if (elm.classList.contains('active')) {\n panel.style.maxHeight = `${panel.scrollHeight}px`;\n } else {\n panel.style.maxHeight = '';\n }\n };\n });\n};\n/*--------------------------------------------------------------------------------*/\n","/* camera */\n/*--------------------------------------------------------------------------------*/\nexport const takePhoto = () => new Promise<{ image: string; }>((resolve) => {\n // set hash\n window.onhashchange = () => {\n if (window.location.hash != '#camera') closeCam();\n };\n window.location.hash = 'camera';\n // create\n const cam = camCreate();\n const video = cam.querySelector<HTMLVideoElement>('#video');\n let imgData: string;\n let stream: void | MediaStream;\n let front = false;\n const options = {\n video: {\n facingMode: 'environment',\n width: { ideal: 1024 },\n height: { ideal: 768 },\n }\n };\n const closeCam = () => {\n stopMedia();\n camClose(cam);\n resolve({ image: imgData });\n };\n const stopMedia = () => {\n if (stream) {\n const track = stream.getTracks()[0];\n track.stop();\n }\n };\n const startMedia = async () => {\n const title = cam.querySelector<HTMLElement>('.header .title');\n const detail = cam.querySelector<HTMLElement>('.header .detail');\n const footer = cam.querySelector<HTMLElement>('.footer');\n const body = cam.querySelector<HTMLElement>('.body');\n stream = await navigator.mediaDevices.getUserMedia(options).catch(() => {\n title!.innerText = 'ไม่พบกล้องถ่ายภาพ';\n footer!.style.display = 'none';\n body!.innerHTML = /*html*/ `\n <i class=\"icon thin\" style=\"font-size: 80px;\"></i>\n `;\n });\n if (stream) {\n video!.srcObject = stream;\n video!.play();\n const media = stream.getTracks()[0].getSettings();\n detail!.innerText = `${media.width}x${media.height} ${media.frameRate}fps`;\n }\n };\n // start media\n (async () => {\n await startMedia();\n camReady(cam);\n })();\n // button\n const btn_take = cam.querySelector<HTMLButtonElement>('#btn-take');\n const btn_flip = cam.querySelector<HTMLElement>('#btn-flip');\n const btn_close = cam.querySelector<HTMLElement>('#btn-close');\n const btn_cancel = cam.querySelector<HTMLElement>('#btn-cancel');\n // btn-take\n btn_take!.onclick = () => {\n const media = stream!.getTracks()[0].getSettings();\n const image = cam.querySelector<HTMLCanvasElement>('#image');\n // init image\n const ctx = image!.getContext('2d');\n ctx!.clearRect(0, 0, image!.width, image!.height);\n image!.width = Number(media.width);\n image!.height = Number(media.height);\n // image data\n const image_ctx = image!.getContext('2d');\n image_ctx!.drawImage(\n video!, 0, 0,\n Number(media.width), Number(media.height), 0, 0,\n image!.width, image!.height,\n );\n imgData = image!.toDataURL('image/jpeg');\n history.back();\n };\n // btn-flip\n btn_flip!.onclick = async () => {\n front = !front;\n options.video.facingMode = front ? 'user' : 'environment';\n stopMedia();\n camLoading(cam);\n await startMedia();\n camReady(cam);\n };\n // btn-close, btn-cancel\n btn_close!.onclick = () => history.back();\n btn_cancel!.onclick = () => history.back();\n});\n/*--------------------------------------------------------------------------------*/\nconst camCreate = (): HTMLElement => {\n const cam = document.createElement('div');\n cam.className = 'slim-camera';\n cam.innerHTML = /*html*/ `\n <div class=\"body\">\n <video id=\"video\" muted playsinline></video>\n <canvas id=\"image\"></canvas>\n </div>\n <div class=\"header\">\n <div style=\"text-align: center;\">\n <div class=\"title\">กล้องถ่ายภาพ</div>\n <div class=\"detail\"></div>\n </div>\n <i id=\"btn-close\" class=\"icon\"></i>\n </div>\n <div class=\"footer\">\n <i id=\"btn-cancel\" class=\"icon\"></i>\n <button id=\"btn-take\"></button>\n <i id=\"btn-flip\" class=\"icon\"></i>\n </div>\n <div class=\"loader\">\n <div class=\"spinner s32\"></div>\n </div>\n `;\n document.body.appendChild(cam);\n // open camera\n cam.style.left = `-100%`;\n cam.classList.add('cam-in');\n return cam;\n};\n/*--------------------------------------------------------------------------------*/\nconst camClose = (cam: HTMLElement) => {\n window.onhashchange = null;\n cam.classList.remove('cam-in');\n cam.classList.add('cam-out');\n cam.onanimationend = () => {\n cam.remove();\n };\n};\n/*--------------------------------------------------------------------------------*/\nconst camLoading = (cam: HTMLElement) => {\n const body = cam.querySelector<HTMLElement>('.body');\n const loader = cam.querySelector<HTMLElement>('.loader');\n body!.style.visibility = 'hidden';\n loader!.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nconst camReady = (cam: HTMLElement) => {\n const header = cam.querySelector<HTMLElement>('.header');\n const footer = cam.querySelector<HTMLElement>('.footer');\n const body = cam.querySelector<HTMLElement>('.body');\n const loader = cam.querySelector<HTMLElement>('.loader');\n header!.style.visibility = 'visible';\n footer!.style.visibility = 'visible';\n body!.style.visibility = 'visible';\n loader!.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* dialog */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\nexport const confirm = (\n message: string,\n params?: {\n color?: string;\n target?: HTMLElement;\n }\n) => new Promise<boolean>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const color = params && params?.color ? params.color : 'green';\n // create\n const dialog = document.createElement('div');\n dialog.className = 'overlay slim-dialog';\n dialog.innerHTML = /*html*/ `\n <div class=\"confirm ${color}\">\n <div class=\"header\">\n <i class=\"icon solid\"></i> Slim Confirm\n </div>\n <div class=\"message\">${message}</div>\n <div class=\"footer\">\n <button class=\"lg gray left\" id=\"btn-no\">\n <i></i>ยกเลิก\n </button>\n <button class=\"lg ${color} right\" id=\"btn-yes\">\n <i></i>ตกลง\n </button>\n </div>\n </div>\n `;\n doc.appendChild(dialog);\n // button\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.focus();\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.onclick = () => {\n dialog.remove();\n resolve(true);\n };\n dialog.querySelector<HTMLButtonElement>('#btn-no')!.onclick = () => {\n dialog.remove();\n resolve(false);\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const alert = (\n message: string,\n params?: {\n type?: string;\n target?: HTMLElement;\n }\n) => new Promise<void>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const type = params && params?.type ? params.type : 'success';\n // type\n let color = '';\n let icon = '';\n if (type == 'success') { color = 'green'; icon = ''; }\n if (type == 'failure') { color = 'red'; icon = ''; }\n if (type == 'warning') { color = 'orange'; icon = ''; }\n if (type == 'info') { color = 'blue'; icon = ''; }\n // create\n const dialog = document.createElement('div');\n dialog.className = 'overlay slim-dialog';\n dialog.innerHTML = /*html*/ `\n <div class=\"alert ${color}\">\n <div class=\"icon solid\">${icon}</div>\n <div class=\"message\">${message}</div>\n <div class=\"footer\">\n <button class=\"lg ${color}\" id=\"btn-yes\">ตกลง</button>\n </div>\n </div>\n `;\n doc.appendChild(dialog);\n // button\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.focus();\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.onclick = () => {\n dialog.remove();\n resolve();\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const toast = (\n message: string,\n params?: {\n type?: string;\n target?: HTMLElement;\n }\n) => new Promise<void>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const type = params && params?.type ? params.type : 'success';\n // type\n let color = '';\n let icon = '';\n if (type == 'success') { color = 'green'; icon = ''; }\n if (type == 'failure') { color = 'red'; icon = ''; }\n if (type == 'warning') { color = 'orange'; icon = ''; }\n if (type == 'info') { color = 'blue'; icon = ''; }\n // create\n const toast = document.createElement('div');\n toast.className = `slim-toast ${color}`;\n toast.innerHTML = /*html*/ `\n <i class=\"icon\">${icon}</i>\n <span class=\"text\">${message}</span>\n `;\n doc.appendChild(toast);\n // animation\n toast.classList.add('show');\n let count = 0;\n toast.onanimationend = () => {\n count++;\n if (count == 2) {\n toast.remove();\n resolve();\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\n","/* drawer */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\ntype reqParams = {\n title: string;\n body: string;\n name?: string;\n size?: string; // mobile, full\n};\nexport const create = (params: reqParams): HTMLElement => {\n const name = params.name ? params.name : 'drawer';\n const size = params.size ? params.size : 'mobile';\n // create\n const drawer = document.createElement('div');\n drawer.className = `slim-drawer ${size}`;\n drawer.innerHTML = /*html*/ `\n <div class=\"drawer-header\">\n <button id=\"btn-exit\" type=\"button\"\n class=\"circle sm light\"></button>\n <div class=\"title\">${params.title}</div>\n </div>\n <div class=\"drawer-body\">${params.body}</div>\n <div class=\"loader\">\n <div class=\"spinner s32\"></div>\n </div>\n `;\n document.body.appendChild(drawer);\n // set size\n switch (size) {\n case 'mobile': openMobile(drawer); break;\n case 'full':\n drawer.style.animation = 'slide-in-left 0.4s forwards';\n break;\n default: return drawer;\n }\n // hash change\n window.location.hash = name;\n const hashChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hash != name && hash != 'modal') done();\n };\n const done = () => {\n destroy(drawer);\n if (window.location.hash == `#${name}`) history.back();\n window.removeEventListener('hashchange', hashChange);\n };\n window.addEventListener('hashchange', hashChange);\n // button\n const btnExit = drawer.querySelector<HTMLButtonElement>('#btn-exit');\n const btnCancel = drawer.querySelector<HTMLButtonElement>('#btn-cancel');\n if (btnExit) {\n btnExit.focus();\n btnExit.onclick = done;\n }\n if (btnCancel) btnCancel.onclick = done;\n return drawer;\n};\n/*--------------------------------------------------------------------------------*/\nconst openMobile = (drawer: HTMLElement) => {\n if (!app) return;\n const offset = app.getBoundingClientRect();\n const appRight = offset.right;\n const appWidth = app.offsetWidth;\n // default position\n drawer.style.left = `${appRight}px`;\n // animation\n const css = document.createElement('style');\n drawer.appendChild(css);\n css.sheet?.insertRule(`\n @keyframes drawer-in {\n from {transform: translateX(0);}\n to {transform: translateX(-${appWidth}px);}\n }\n `);\n css.sheet?.insertRule(`\n @keyframes drawer-out {\n from {transform: translateX(-${appWidth}px);}\n to {transform: translateX(0);}\n }\n `);\n // open drawer\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.animation = 'drawer-push-app 0.4s forwards';\n drawer.style.animation = 'drawer-in 0.4s forwards';\n // scroll shadow\n const header = drawer.querySelector<HTMLElement>('.drawer-header');\n const body = drawer.querySelector<HTMLElement>('.drawer-body');\n if (header && body) body.onscroll = () => {\n if (body.scrollTop > 10) {\n header.style.boxShadow = `\n rgba(60, 64, 67, 0.3) 0px 1px 2px 0px,\n rgba(60, 64, 67, 0.15) 0px 1px 3px 1px\n `;\n } else {\n header.style.boxShadow = '';\n }\n };\n};\n/*--------------------------------------------------------------------------------*/\nexport const close = (drawer: HTMLElement) => new Promise<void>((resolve) => {\n drawer.querySelector<HTMLButtonElement>('#btn-exit')!.click();\n drawer.addEventListener('animationend', () => resolve());\n});\nconst destroy = (drawer: HTMLElement) => {\n if (!app) return;\n if (drawer.classList.contains('mobile')) {\n // mobile\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.animation = 'drawer-pull-app 0.4s forwards';\n drawer.style.animation = 'drawer-out 0.4s forwards';\n drawer.addEventListener('animationend', () => {\n if (content) content.style.animation = 'unset';\n drawer.remove();\n });\n } else {\n // full-page\n drawer.style.animation = 'slide-out-left 0.4s forwards';\n drawer.addEventListener('animationend', () => {\n drawer.remove();\n });\n }\n // remove modal\n const modal = document.querySelectorAll<HTMLElement>('.slim-modal');\n modal.forEach(el => el.remove());\n // remove dialog\n const dialog = document.querySelectorAll<HTMLElement>('.slim-dialog');\n dialog.forEach(el => el.remove());\n};\n/*--------------------------------------------------------------------------------*/\nexport const loading = (drawer: HTMLElement) => {\n const body = drawer.querySelector<HTMLElement>('.drawer-body');\n const loader = drawer.querySelector<HTMLElement>('.loader');\n if (body) body.style.display = 'none';\n if (loader) loader.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nexport const ready = (drawer: HTMLElement) => {\n const body = drawer.querySelector<HTMLElement>('.drawer-body');\n const loader = drawer.querySelector<HTMLElement>('.loader');\n if (body) body.style.display = 'block';\n if (loader) loader.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* drop */\n/*--------------------------------------------------------------------------------*/\nexport const menu = (drop: HTMLElement) => {\n const dropBtn = drop.querySelector<HTMLButtonElement>('.drop-btn');\n const content = drop.querySelector<HTMLElement>('.drop-content');\n if (!dropBtn || !content) return;\n setBtnEvent(dropBtn, content);\n};\n/*--------------------------------------------------------------------------------*/\nexport const select = (\n drop: HTMLElement,\n icon: string,\n callBack: (value: string, text: string) => void,\n) => {\n const dropBtn = drop.querySelector<HTMLButtonElement>('.drop-btn');\n const content = drop.querySelector<HTMLElement>('.drop-content');\n if (!dropBtn || !content) return;\n setBtnEvent(dropBtn, content);\n update(drop, icon, callBack);\n};\n/*--------------------------------------------------------------------------------*/\nexport const update = (\n drop: HTMLElement,\n icon: string,\n callBack: (value: string, text: string) => void,\n) => {\n const select = drop.querySelector<HTMLSelectElement>('select');\n const content = drop.querySelector<HTMLElement>('.drop-content');\n if (!select || !content) return;\n let elmIcon = '';\n if (icon) elmIcon = `<span style=\"margin-right: 6px;\">${icon}</span>`;\n // select to menu\n content.innerHTML = '';\n const option = select.querySelectorAll<HTMLOptionElement>('option');\n option.forEach(opt => {\n const item = document.createElement('a');\n item.innerHTML = `${elmIcon}${opt.text}`;\n content.appendChild(item);\n // drop click\n item.onclick = () => {\n opt.selected = true;\n clearSelected();\n if (callBack) {\n callBack(opt.value, opt.text);\n }\n };\n });\n // clear selected\n const clearSelected = () => {\n const index = select.selectedIndex;\n const list = content.querySelectorAll<HTMLAnchorElement>('a');\n list.forEach((el, i) => {\n if (i == index) {\n el.classList.add('selected');\n } else {\n el.classList.remove('selected');\n }\n });\n };\n clearSelected();\n};\n/*--------------------------------------------------------------------------------*/\nconst setBtnEvent = (btn: HTMLButtonElement, content: HTMLElement) => {\n btn.onclick = () => {\n if (content.style.display == 'block') {\n content.style.animation = 'fade-out 0.4s forwards';\n content.onanimationend = () => {\n content.style.animation = '';\n content.style.display = '';\n };\n } else {\n clear();\n content.style.animation = 'fade-in 0.4s forwards';\n content.style.display = 'block';\n content.onanimationend = () => {\n content.style.animation = '';\n };\n }\n };\n};\n/*--------------------------------------------------------------------------------*/\nexport const clear = () => {\n const drop = document.querySelectorAll<HTMLElement>('.drop-content');\n drop.forEach(el => {\n if (el.style.display == 'block') {\n el.style.animation = 'fade-out 0.4s forwards';\n el.onanimationend = () => {\n el.style.animation = '';\n el.style.display = '';\n };\n }\n });\n};\nwindow.addEventListener('click', (e) => {\n if (!(<HTMLElement>e.target).matches('.drop-btn')) clear();\n});\n/*--------------------------------------------------------------------------------*/\n","/* modal */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\nconst tmpBtnSave: string = /* html */ `\n <button class=\"solid green\" type=\"submit\">\n <i></i>บันทึก\n </button>\n`;\nconst tmpBtnCancel: string = /* html */ `\n <button class=\"solid gray\" type=\"button\" id=\"btn-cancel\">\n <i></i>ยกเลิก\n </button>\n`;\nconst tmpBtnClose: string = /* html */ `\n <button class=\"solid blue\" type=\"button\" id=\"btn-close\">\n <i></i>ปิดหน้า\n </button>\n`;\ntype ModalParams = {\n icon: string;\n title: string;\n body: string;\n width?: string;\n button?: {\n save?: boolean;\n cancel?: boolean;\n close?: boolean;\n align?: string;\n };\n target?: HTMLElement;\n};\n/*--------------------------------------------------------------------------------*/\nexport const create = (params: ModalParams): HTMLElement => {\n const icon = params.icon ? params.icon : '';\n const title = params.title ? params.title : 'Modal Title';\n const body = params.body ? params.body : 'Modal Body';\n const width = params.width ? params.width : '100%';\n const align = params.button?.align ? params.button?.align : '';\n const doc = params.target ? params.target : app;\n // button\n let button = '';\n if (params.button?.cancel) button += tmpBtnCancel;\n if (params.button?.close) button += tmpBtnClose;\n if (params.button?.save) button += tmpBtnSave;\n // create\n const modal = document.createElement('div');\n modal.className = 'overlay slim-modal';\n modal.innerHTML = /*html*/ `\n <form>\n <div class=\"content\" style=\"width: ${width};\">\n <div class=\"header\">\n <i class=\"icon pad\">${icon}</i>${title}\n <button id=\"btn-exit\" type=\"button\"\n class=\"icon\"></button>\n </div>\n <div class=\"body\">${body}</div>\n <div class=\"footer ${align}\">${button}</div>\n <div class=\"loader\">\n <div class=\"spinner s28\"></div>\n </div>\n </div>\n </form>\n `;\n if (!doc) return modal;\n doc.appendChild(modal);\n if (width == 'auto') {\n const content = modal.querySelector<HTMLElement>('.content');\n if (content) content.style.maxWidth = `450px`;\n }\n // open modal\n window.location.hash = 'modal';\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.classList.add('modal-in');\n modal.classList.add('overlay-in');\n content.addEventListener('animationend', () => {\n if (content.classList.contains('modal-in')) {\n content.classList.remove('modal-in');\n modal.classList.remove('overlay-in');\n }\n });\n // hash change\n const hashChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hash != 'modal') done();\n };\n const done = () => {\n destroy(modal);\n if (window.location.hash == '#modal') history.back();\n window.removeEventListener('hashchange', hashChange);\n };\n window.addEventListener('hashchange', hashChange);\n // button\n const btnExit = modal.querySelector<HTMLButtonElement>('#btn-exit');\n const btnCancel = modal.querySelector<HTMLButtonElement>('#btn-cancel');\n const btnClose = modal.querySelector<HTMLButtonElement>('#btn-close');\n if (btnExit) {\n btnExit.focus();\n btnExit.onclick = done;\n }\n if (btnCancel) btnCancel.onclick = done;\n if (btnClose) btnClose.onclick = done;\n return modal;\n};\n/*--------------------------------------------------------------------------------*/\nexport const close = (modal: HTMLElement) => new Promise<void>((resolve) => {\n modal.querySelector<HTMLButtonElement>('#btn-exit')!.click();\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.addEventListener('animationend', () => resolve());\n});\nconst destroy = (modal: HTMLElement) => {\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.classList.add('modal-out');\n modal.classList.add('overlay-out');\n content.addEventListener('animationend', () => {\n if (content.classList.contains('modal-out')) {\n modal.style.display = 'none';\n modal.remove();\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const loading = (modal: HTMLElement) => {\n const body = modal.querySelector<HTMLElement>('.body');\n const loader = modal.querySelector<HTMLElement>('.loader');\n if (body) body.style.visibility = 'hidden';\n if (loader) loader.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nexport const ready = (modal: HTMLElement) => {\n const body = modal.querySelector<HTMLElement>('.body');\n const loader = modal.querySelector<HTMLElement>('.loader');\n if (body) body.style.visibility = 'visible';\n if (loader) loader.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const hidden = (modal: HTMLElement) => {\n modal.style.display = 'none';\n};\nexport const visible = (modal: HTMLElement) => {\n modal.style.display = 'block';\n};\n/*--------------------------------------------------------------------------------*/\n","/* tabs */\n/*--------------------------------------------------------------------------------*/\nconst ignore: string[] = ['camera', 'drawer', 'modal'];\nconst hashIgnore = (hash: string) => ignore.includes(hash);\n/*--------------------------------------------------------------------------------*/\nexport const init = (\n tabs: HTMLElement,\n onChange: (index: number, done: () => void) => void,\n) => {\n const tbtn = tabs.querySelectorAll<HTMLButtonElement>('.tabs-btn');\n tbtn.forEach(elm => {\n const dataHash = elm.getAttribute('data-hash');\n elm.onclick = () => window.location.replace('#' + dataHash);\n });\n // tabs change\n const tabsChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hashIgnore(hash)) return;\n if (hash == '') {\n const mainTabs = tbtn[0].getAttribute('data-hash');\n window.location.replace('#' + mainTabs);\n return;\n }\n const curTabs = tabs.querySelector<HTMLButtonElement>('.tabs-btn.active');\n if (hash == curTabs?.getAttribute('data-hash')) return;\n // set active\n let index = 0;\n tbtn.forEach((elm, i) => {\n const dataHash = elm.getAttribute('data-hash');\n if (hash == dataHash) {\n elm.classList.add('active');\n index = i;\n } else {\n elm.classList.remove('active');\n }\n });\n loading(tabs, index);\n onChange(index, () => ready(tabs, index));\n };\n tabsChange();\n window.onhashchange = tabsChange;\n};\n/*--------------------------------------------------------------------------------*/\nexport const loading = (tabs: HTMLElement, index: number) => {\n const tbtn = tabs.querySelectorAll<HTMLButtonElement>('.tabs-btn')[index];\n const body = tabs.querySelector<HTMLElement>('.tabs-body');\n const inner = tbtn.querySelectorAll<HTMLElement>('*');\n const tabsBar = tabs.querySelector<HTMLElement>('.tabs-bar');\n if (tbtn && body) {\n // clear loader\n tabs.querySelector<HTMLElement>('.tabs-overlay')?.remove();\n tbtn.querySelector<HTMLElement>('.btn-loader')?.remove();\n // hide inner\n body.style.display = 'none';\n inner.forEach(el => el.style.display = 'none');\n // create overlay\n const overlay = document.createElement('div');\n overlay.className = 'tabs-overlay';\n tabs.appendChild(overlay);\n // create loader\n const loader = document.createElement('div');\n loader.className = 'btn-loader';\n loader.innerHTML = `<div class=\"spinner s24\"></div>`;\n tbtn.appendChild(loader);\n // tabs-bar\n if (tabsBar) {\n const barCont = tabsBar.querySelectorAll<HTMLElement>('*');\n barCont.forEach(el => el.style.visibility = 'hidden');\n tabsBar.querySelector<HTMLElement>('.lds-ellipsis')?.remove();\n // create loader\n const loader = document.createElement('div');\n loader.className = 'lds-ellipsis';\n loader.innerHTML = `<div></div><div></div><div></div><div></div>`;\n tabsBar.prepend(loader);\n }\n }\n};\n/*--------------------------------------------------------------------------------*/\nexport const ready = (tabs: HTMLElement, index: number) => {\n const tbtn = tabs.querySelectorAll<HTMLButtonElement>('.tabs-btn')[index];\n const body = tabs.querySelector<HTMLElement>('.tabs-body');\n const inner = tbtn.querySelectorAll<HTMLElement>('*');\n const tabsBar = tabs.querySelector<HTMLElement>('.tabs-bar');\n if (tbtn && body) new Promise(r => setTimeout(r, 400)).then(() => {\n // clear loader\n tabs.querySelector<HTMLElement>('.tabs-overlay')?.remove();\n tbtn.querySelector<HTMLElement>('.btn-loader')?.remove();\n // show inner\n body.style.display = 'block';\n inner.forEach(el => el.style.display = '');\n // tabs-bar\n if (tabsBar) {\n const barCont = tabsBar.querySelectorAll<HTMLElement>('*');\n barCont.forEach(el => el.style.visibility = '');\n tabsBar.querySelector<HTMLElement>('.lds-ellipsis')?.remove();\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const setActive = (tbtn: NodeListOf<HTMLButtonElement>, index: number) => {\n tbtn.forEach((elm, i) => {\n if (i == index) {\n elm.classList.add('active');\n } else {\n elm.classList.remove('active');\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\n"],"mappings":"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","names":["loading","toast","loading","app","select","close","create","loading","ready","app","content","destroy","loading","ready","loader"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { c as close, a as create, h as hidden, l as loading, r as ready, v as visible } from '../../index-CD53Vh6h.js';
|
package/dist/mod/modal/index.js
CHANGED
|
@@ -24,7 +24,7 @@ var tmpBtnClose = (
|
|
|
24
24
|
</button>
|
|
25
25
|
`
|
|
26
26
|
);
|
|
27
|
-
var
|
|
27
|
+
var create = (params) => {
|
|
28
28
|
const icon = params.icon ? params.icon : "";
|
|
29
29
|
const title = params.title ? params.title : "Modal Title";
|
|
30
30
|
const body = params.body ? params.body : "Modal Body";
|
|
@@ -91,7 +91,7 @@ var Create = (params) => {
|
|
|
91
91
|
if (btnClose) btnClose.onclick = done;
|
|
92
92
|
return modal;
|
|
93
93
|
};
|
|
94
|
-
var
|
|
94
|
+
var close = (modal) => new Promise((resolve) => {
|
|
95
95
|
modal.querySelector("#btn-exit").click();
|
|
96
96
|
const content = modal.querySelector(".content");
|
|
97
97
|
content.addEventListener("animationend", () => resolve());
|
|
@@ -107,30 +107,30 @@ var destroy = (modal) => {
|
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
109
|
};
|
|
110
|
-
var
|
|
110
|
+
var loading = (modal) => {
|
|
111
111
|
const body = modal.querySelector(".body");
|
|
112
112
|
const loader = modal.querySelector(".loader");
|
|
113
113
|
if (body) body.style.visibility = "hidden";
|
|
114
114
|
if (loader) loader.style.display = "flex";
|
|
115
115
|
};
|
|
116
|
-
var
|
|
116
|
+
var ready = (modal) => {
|
|
117
117
|
const body = modal.querySelector(".body");
|
|
118
118
|
const loader = modal.querySelector(".loader");
|
|
119
119
|
if (body) body.style.visibility = "visible";
|
|
120
120
|
if (loader) loader.style.display = "none";
|
|
121
121
|
};
|
|
122
|
-
var
|
|
122
|
+
var hidden = (modal) => {
|
|
123
123
|
modal.style.display = "none";
|
|
124
124
|
};
|
|
125
|
-
var
|
|
125
|
+
var visible = (modal) => {
|
|
126
126
|
modal.style.display = "block";
|
|
127
127
|
};
|
|
128
128
|
export {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
129
|
+
close,
|
|
130
|
+
create,
|
|
131
|
+
hidden,
|
|
132
|
+
loading,
|
|
133
|
+
ready,
|
|
134
|
+
visible
|
|
135
135
|
};
|
|
136
136
|
//# sourceMappingURL=index.js.map
|