slimsdk 0.1.55 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +1 -1
  2. package/dist/desktop/index.d.ts +13 -12
  3. package/dist/desktop/index.js +1228 -1967
  4. package/dist/desktop/index.js.map +1 -1
  5. package/dist/index-3POan8Vl.d.ts +94 -0
  6. package/dist/index-B4158M0u.d.ts +21 -0
  7. package/dist/index-BAQxKstM.d.ts +8 -0
  8. package/dist/index-BMqjxP9I.d.ts +11 -0
  9. package/dist/index-CD53Vh6h.d.ts +31 -0
  10. package/dist/index-CoYHkkyT.d.ts +14 -0
  11. package/dist/index-D5CUpF9v.d.ts +10 -0
  12. package/dist/index-DBhzpIiB.d.ts +32 -0
  13. package/dist/index-DCw_tM-R.d.ts +28 -0
  14. package/dist/{index-kr8P3eEW.d.ts → index-DWqF-tKY.d.ts} +7 -9
  15. package/dist/index-DzKPF0ja.d.ts +14 -0
  16. package/dist/index-jVam7Sxi.d.ts +15 -0
  17. package/dist/index-uQOR5bdy.d.ts +20 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/lib/index.d.ts +1 -1
  22. package/dist/lib/index.js +1 -1
  23. package/dist/lib/index.js.map +1 -1
  24. package/dist/mobile/index.d.ts +13 -12
  25. package/dist/mobile/index.js +299 -808
  26. package/dist/mobile/index.js.map +1 -1
  27. package/dist/mod/button/index.d.ts +1 -1
  28. package/dist/mod/button/index.js +2 -2
  29. package/dist/mod/button/index.js.map +1 -1
  30. package/dist/mod/config/index.d.ts +52 -0
  31. package/dist/mod/{global → config}/index.js +45 -41
  32. package/dist/mod/config/index.js.map +1 -0
  33. package/dist/mod/cover/index.d.ts +1 -1
  34. package/dist/mod/cover/index.js +3 -3
  35. package/dist/mod/cover/index.js.map +1 -1
  36. package/dist/mod/dialog/index.d.ts +1 -1
  37. package/dist/mod/dialog/index.js +13 -13
  38. package/dist/mod/dialog/index.js.map +1 -1
  39. package/dist/mod/drawer/index.d.ts +1 -1
  40. package/dist/mod/drawer/index.js +8 -8
  41. package/dist/mod/drawer/index.js.map +1 -1
  42. package/dist/mod/drop/index.d.ts +1 -1
  43. package/dist/mod/drop/index.js +15 -15
  44. package/dist/mod/drop/index.js.map +1 -1
  45. package/dist/mod/hwlink/index.d.ts +2 -2
  46. package/dist/mod/hwlink/index.js +44 -656
  47. package/dist/mod/hwlink/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/worker/hubworker.js +1 -1
  67. package/dist/worker/hubworker.js.map +1 -1
  68. package/package.json +6 -6
  69. package/dist/index-B2HHS23A.d.ts +0 -20
  70. package/dist/index-BQcJsVJ-.d.ts +0 -10
  71. package/dist/index-Bf_lg-oZ.d.ts +0 -339
  72. package/dist/index-ChdqOPJq.d.ts +0 -15
  73. package/dist/index-CzsSwSvp.d.ts +0 -21
  74. package/dist/index-D3tu8t6p.d.ts +0 -28
  75. package/dist/index-DQt71MNx.d.ts +0 -31
  76. package/dist/index-DZdXvqxA.d.ts +0 -10
  77. package/dist/index-DcvauYN8.d.ts +0 -14
  78. package/dist/index-Pd7FTiEW.d.ts +0 -32
  79. package/dist/index-QRbamarh.d.ts +0 -8
  80. package/dist/mod/global/index.d.ts +0 -57
  81. package/dist/mod/global/index.js.map +0 -1
@@ -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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mod/modal/index.ts"],"sourcesContent":["/* 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"],"mappings":"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","names":["content"]}
1
+ {"version":3,"sources":["../../../src/mod/modal/index.ts"],"sourcesContent":["/* 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"],"mappings":"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","names":["content"]}
@@ -1 +1 @@
1
- export { I as Init, s as setActive } from '../../index-DZdXvqxA.js';
1
+ export { a as init, l as loading, r as ready, s as setActive } from '../../index-DzKPF0ja.js';
@@ -1,7 +1,7 @@
1
1
  // src/mod/tabs/index.ts
2
2
  var ignore = ["camera", "drawer", "modal"];
3
3
  var hashIgnore = (hash) => ignore.includes(hash);
4
- var Init = (tabs, onChange) => {
4
+ var init = (tabs, onChange) => {
5
5
  const tbtn = tabs.querySelectorAll(".tabs-btn");
6
6
  tbtn.forEach((elm) => {
7
7
  const dataHash = elm.getAttribute("data-hash");
@@ -27,13 +27,13 @@ var Init = (tabs, onChange) => {
27
27
  elm.classList.remove("active");
28
28
  }
29
29
  });
30
- tabsLoading(tabs, index);
31
- onChange(index, () => tabsReady(tabs, index));
30
+ loading(tabs, index);
31
+ onChange(index, () => ready(tabs, index));
32
32
  };
33
33
  tabsChange();
34
34
  window.onhashchange = tabsChange;
35
35
  };
36
- var tabsLoading = (tabs, index) => {
36
+ var loading = (tabs, index) => {
37
37
  const tbtn = tabs.querySelectorAll(".tabs-btn")[index];
38
38
  const body = tabs.querySelector(".tabs-body");
39
39
  const inner = tbtn.querySelectorAll("*");
@@ -61,7 +61,7 @@ var tabsLoading = (tabs, index) => {
61
61
  }
62
62
  }
63
63
  };
64
- var tabsReady = (tabs, index) => {
64
+ var ready = (tabs, index) => {
65
65
  const tbtn = tabs.querySelectorAll(".tabs-btn")[index];
66
66
  const body = tabs.querySelector(".tabs-body");
67
67
  const inner = tbtn.querySelectorAll("*");
@@ -88,7 +88,9 @@ var setActive = (tbtn, index) => {
88
88
  });
89
89
  };
90
90
  export {
91
- Init,
91
+ init,
92
+ loading,
93
+ ready,
92
94
  setActive
93
95
  };
94
96
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mod/tabs/index.ts"],"sourcesContent":["/* 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":["loader"]}
1
+ {"version":3,"sources":["../../../src/mod/tabs/index.ts"],"sourcesContent":["/* 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":["loader"]}
@@ -1,3 +1,3 @@
1
- export { Error, FullLoad, Inform, Loading, NotFound, Ready } from '../index.js';
2
- export { HwLink } from '../../mod/hwlink/index.js';
3
- export { a as Clear, C as Create, P as PageParams } from '../../index-D3tu8t6p.js';
1
+ export { error, fullLoad, inform, loading, notFound, ready } from '../index.js';
2
+ export { hwLink } from '../../mod/hwlink/index.js';
3
+ export { P as PageParams, c as clear, a as create } from '../../index-DCw_tM-R.js';