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.
Files changed (90) hide show
  1. package/README.md +3 -5
  2. package/dist/desktop/index.css +0 -48
  3. package/dist/desktop/index.css.map +1 -1
  4. package/dist/desktop/index.d.ts +14 -13
  5. package/dist/desktop/index.js +1476 -1972
  6. package/dist/desktop/index.js.map +1 -1
  7. package/dist/docs-BHtSyl34.d.ts +10 -0
  8. package/dist/index-B4158M0u.d.ts +21 -0
  9. package/dist/index-BAQxKstM.d.ts +8 -0
  10. package/dist/index-BMqjxP9I.d.ts +11 -0
  11. package/dist/index-CD53Vh6h.d.ts +31 -0
  12. package/dist/index-COGi5mfY.d.ts +28 -0
  13. package/dist/index-COUeXLOQ.d.ts +3 -0
  14. package/dist/index-CoYHkkyT.d.ts +14 -0
  15. package/dist/{index-kr8P3eEW.d.ts → index-Cvng8f_u.d.ts} +10 -9
  16. package/dist/index-D5CUpF9v.d.ts +10 -0
  17. package/dist/index-DBhzpIiB.d.ts +32 -0
  18. package/dist/index-D_o5c-YA.d.ts +134 -0
  19. package/dist/index-DzKPF0ja.d.ts +14 -0
  20. package/dist/index-jVam7Sxi.d.ts +15 -0
  21. package/dist/index-uQOR5bdy.d.ts +20 -0
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.js +2 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/index.d.ts +1 -1
  26. package/dist/lib/index.js +194 -1
  27. package/dist/lib/index.js.map +1 -1
  28. package/dist/mobile/index.css +0 -48
  29. package/dist/mobile/index.css.map +1 -1
  30. package/dist/mobile/index.d.ts +13 -12
  31. package/dist/mobile/index.js +542 -808
  32. package/dist/mobile/index.js.map +1 -1
  33. package/dist/mod/button/index.d.ts +1 -1
  34. package/dist/mod/button/index.js +2 -2
  35. package/dist/mod/button/index.js.map +1 -1
  36. package/dist/mod/cover/index.d.ts +1 -1
  37. package/dist/mod/cover/index.js +3 -3
  38. package/dist/mod/cover/index.js.map +1 -1
  39. package/dist/mod/dialog/index.d.ts +1 -1
  40. package/dist/mod/dialog/index.js +13 -13
  41. package/dist/mod/dialog/index.js.map +1 -1
  42. package/dist/mod/drawer/index.d.ts +1 -1
  43. package/dist/mod/drawer/index.js +8 -8
  44. package/dist/mod/drawer/index.js.map +1 -1
  45. package/dist/mod/drop/index.d.ts +1 -1
  46. package/dist/mod/drop/index.js +15 -15
  47. package/dist/mod/drop/index.js.map +1 -1
  48. package/dist/mod/index.d.ts +7 -7
  49. package/dist/mod/index.js +61 -59
  50. package/dist/mod/index.js.map +1 -1
  51. package/dist/mod/modal/index.d.ts +1 -1
  52. package/dist/mod/modal/index.js +12 -12
  53. package/dist/mod/modal/index.js.map +1 -1
  54. package/dist/mod/tabs/index.d.ts +1 -1
  55. package/dist/mod/tabs/index.js +8 -6
  56. package/dist/mod/tabs/index.js.map +1 -1
  57. package/dist/page/desktop/index.d.ts +3 -3
  58. package/dist/page/desktop/index.js +228 -801
  59. package/dist/page/desktop/index.js.map +1 -1
  60. package/dist/page/index.d.ts +7 -7
  61. package/dist/page/index.js +12 -12
  62. package/dist/page/index.js.map +1 -1
  63. package/dist/page/mobile/index.d.ts +2 -2
  64. package/dist/page/mobile/index.js +14 -14
  65. package/dist/page/mobile/index.js.map +1 -1
  66. package/dist/svchub/index.d.ts +2 -0
  67. package/dist/svchub/index.js +760 -0
  68. package/dist/svchub/index.js.map +1 -0
  69. package/dist/worker/hubworker.js +1 -1
  70. package/dist/worker/hubworker.js.map +1 -1
  71. package/package.json +7 -6
  72. package/dist/index-B2HHS23A.d.ts +0 -20
  73. package/dist/index-BQcJsVJ-.d.ts +0 -10
  74. package/dist/index-Bf_lg-oZ.d.ts +0 -339
  75. package/dist/index-ChdqOPJq.d.ts +0 -15
  76. package/dist/index-CzsSwSvp.d.ts +0 -21
  77. package/dist/index-D3tu8t6p.d.ts +0 -28
  78. package/dist/index-DQt71MNx.d.ts +0 -31
  79. package/dist/index-DZdXvqxA.d.ts +0 -10
  80. package/dist/index-DcvauYN8.d.ts +0 -14
  81. package/dist/index-Pd7FTiEW.d.ts +0 -32
  82. package/dist/index-QRbamarh.d.ts +0 -8
  83. package/dist/mod/global/index.d.ts +0 -57
  84. package/dist/mod/global/index.js +0 -117
  85. package/dist/mod/global/index.js.map +0 -1
  86. package/dist/mod/hwlink/index.d.ts +0 -3
  87. package/dist/mod/hwlink/index.js +0 -873
  88. package/dist/mod/hwlink/index.js.map +0 -1
  89. package/dist/mod/hwlink/style.css +0 -1134
  90. 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
- Loading: () => Loading
10
+ loading: () => loading
11
11
  });
12
- var Loading = (btn, state = false) => {
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
- Loading: () => Loading2,
50
- acdInit: () => acdInit
49
+ acdInit: () => acdInit,
50
+ loading: () => loading2
51
51
  });
52
- var Loading2 = (cover, state = false, align = "top", hide = true) => {
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
- Alert: () => Alert,
240
- Confirm: () => Confirm,
241
- Toast: () => Toast
239
+ alert: () => alert,
240
+ confirm: () => confirm,
241
+ toast: () => toast
242
242
  });
243
243
  var app = document.querySelector("#app");
244
- var Confirm = (message, params) => new Promise((resolve) => {
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 Alert = (message, params) => new Promise((resolve) => {
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 Toast = (message, params) => new Promise((resolve) => {
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 toast = document.createElement("div");
342
- toast.className = `slim-toast ${color}`;
343
- toast.innerHTML = /*html*/
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(toast);
349
- toast.classList.add("show");
348
+ doc.appendChild(toast2);
349
+ toast2.classList.add("show");
350
350
  let count = 0;
351
- toast.onanimationend = () => {
351
+ toast2.onanimationend = () => {
352
352
  count++;
353
353
  if (count == 2) {
354
- toast.remove();
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
- Close: () => Close,
364
- Create: () => Create,
365
- Loading: () => Loading3,
366
- Ready: () => Ready
363
+ close: () => close,
364
+ create: () => create,
365
+ loading: () => loading3,
366
+ ready: () => ready
367
367
  });
368
368
  var app2 = document.querySelector("#app");
369
- var Create = (params) => {
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 Close = (drawer) => new Promise((resolve) => {
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 Loading3 = (drawer) => {
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 Ready = (drawer) => {
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
- Clear: () => Clear,
495
- Menu: () => Menu,
496
- Select: () => Select,
497
- Update: () => Update
494
+ clear: () => clear,
495
+ menu: () => menu,
496
+ select: () => select,
497
+ update: () => update
498
498
  });
499
- var Menu = (drop) => {
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 Select = (drop, icon, callBack) => {
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
- Update(drop, icon, callBack);
510
+ update(drop, icon, callBack);
511
511
  };
512
- var Update = (drop, icon, callBack) => {
513
- const select = drop.querySelector("select");
512
+ var update = (drop, icon, callBack) => {
513
+ const select2 = drop.querySelector("select");
514
514
  const content = drop.querySelector(".drop-content");
515
- if (!select || !content) return;
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 = select.querySelectorAll("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 = select.selectedIndex;
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
- Clear();
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 Clear = () => {
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")) Clear();
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
- Close: () => Close2,
583
- Create: () => Create2,
584
- Hidden: () => Hidden,
585
- Loading: () => Loading4,
586
- Ready: () => Ready2,
587
- Visible: () => Visible
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 Create2 = (params) => {
614
+ var create2 = (params) => {
615
615
  const icon = params.icon ? params.icon : "&#xf40e;";
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 Close2 = (modal) => new Promise((resolve) => {
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 Loading4 = (modal) => {
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 Ready2 = (modal) => {
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 Hidden = (modal) => {
709
+ var hidden = (modal) => {
710
710
  modal.style.display = "none";
711
711
  };
712
- var Visible = (modal) => {
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
- Init: () => Init,
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 Init = (tabs, onChange) => {
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
- tabsLoading(tabs, index);
751
- onChange(index, () => tabsReady(tabs, 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 tabsLoading = (tabs, index) => {
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 tabsReady = (tabs, index) => {
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("*");
@@ -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;\">&#xf8c4;</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\">&#xf00d;</i>\n </div>\n <div class=\"footer\">\n <i id=\"btn-cancel\" class=\"icon\">&#xf057;</i>\n <button id=\"btn-take\"></button>\n <i id=\"btn-flip\" class=\"icon\">&#xf021;</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\">&#xf058;</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>&#xf057;</i>ยกเลิก\n </button>\n <button class=\"lg ${color} right\" id=\"btn-yes\">\n <i>&#xf058;</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 = '&#xf058;'; }\n if (type == 'failure') { color = 'red'; icon = '&#xf057;'; }\n if (type == 'warning') { color = 'orange'; icon = '&#xf06a;'; }\n if (type == 'info') { color = 'blue'; icon = '&#xf05a;'; }\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 = '&#xf058;'; }\n if (type == 'failure') { color = 'red'; icon = '&#xf057;'; }\n if (type == 'warning') { color = 'orange'; icon = '&#xf06a;'; }\n if (type == 'info') { color = 'blue'; icon = '&#xf05a;'; }\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>&#xf0c7;</i>บันทึก\n </button>\n`;\nconst tmpBtnCancel: string = /* html */ `\n <button class=\"solid gray\" type=\"button\" id=\"btn-cancel\">\n <i>&#xf057;</i>ยกเลิก\n </button>\n`;\nconst tmpBtnClose: string = /* html */ `\n <button class=\"solid blue\" type=\"button\" id=\"btn-close\">\n <i>&#xf057;</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 : '&#xf40e;';\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\">&#xf00d;</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;\">&#xf8c4;</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\">&#xf00d;</i>\n </div>\n <div class=\"footer\">\n <i id=\"btn-cancel\" class=\"icon\">&#xf057;</i>\n <button id=\"btn-take\"></button>\n <i id=\"btn-flip\" class=\"icon\">&#xf021;</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\">&#xf058;</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>&#xf057;</i>ยกเลิก\n </button>\n <button class=\"lg ${color} right\" id=\"btn-yes\">\n <i>&#xf058;</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 = '&#xf058;'; }\n if (type == 'failure') { color = 'red'; icon = '&#xf057;'; }\n if (type == 'warning') { color = 'orange'; icon = '&#xf06a;'; }\n if (type == 'info') { color = 'blue'; icon = '&#xf05a;'; }\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 = '&#xf058;'; }\n if (type == 'failure') { color = 'red'; icon = '&#xf057;'; }\n if (type == 'warning') { color = 'orange'; icon = '&#xf06a;'; }\n if (type == 'info') { color = 'blue'; icon = '&#xf05a;'; }\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>&#xf0c7;</i>บันทึก\n </button>\n`;\nconst tmpBtnCancel: string = /* html */ `\n <button class=\"solid gray\" type=\"button\" id=\"btn-cancel\">\n <i>&#xf057;</i>ยกเลิก\n </button>\n`;\nconst tmpBtnClose: string = /* html */ `\n <button class=\"solid blue\" type=\"button\" id=\"btn-close\">\n <i>&#xf057;</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 : '&#xf40e;';\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\">&#xf00d;</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 { a as Close, C as Create, H as Hidden, L as Loading, R as Ready, V as Visible } from '../../index-DQt71MNx.js';
1
+ export { c as close, a as create, h as hidden, l as loading, r as ready, v as visible } from '../../index-CD53Vh6h.js';
@@ -24,7 +24,7 @@ var tmpBtnClose = (
24
24
  </button>
25
25
  `
26
26
  );
27
- var Create = (params) => {
27
+ var create = (params) => {
28
28
  const icon = params.icon ? params.icon : "&#xf40e;";
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 Close = (modal) => new Promise((resolve) => {
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 Loading = (modal) => {
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 Ready = (modal) => {
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 Hidden = (modal) => {
122
+ var hidden = (modal) => {
123
123
  modal.style.display = "none";
124
124
  };
125
- var Visible = (modal) => {
125
+ var visible = (modal) => {
126
126
  modal.style.display = "block";
127
127
  };
128
128
  export {
129
- Close,
130
- Create,
131
- Hidden,
132
- Loading,
133
- Ready,
134
- Visible
129
+ close,
130
+ create,
131
+ hidden,
132
+ loading,
133
+ ready,
134
+ visible
135
135
  };
136
136
  //# sourceMappingURL=index.js.map