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/global.ts","../../../src/page/index.ts","../../../src/mod/built-in/cover/index.ts","../../../src/mod/modal/index.ts","../../../src/mod/dialog/index.ts","../../../src/lib/utility.ts","../../../src/svchub/hwlink/template.ts","../../../src/svchub/api/agency/agcy.ts","../../../src/svchub/api/agency/dept.ts","../../../src/svchub/api/account/index.ts","../../../src/svchub/hwlink/device.ts","../../../src/svchub/hwlink/index.ts"],"sourcesContent":["/* global */\n/*------------------------------------------------------------*/\nexport type GbVar = {\n UNIX_TIME: number;\n app: appType;\n api: apiType;\n hub: hubType;\n hwl: hwlType;\n user: userType;\n};\ntype appType = {\n UUID: string;\n NAME: string;\n VERSION: string;\n RELEASE: string;\n};\ntype apiType = {\n URL: string;\n TOKEN: string;\n HEADERS?: Headers;\n};\ntype hubType = {\n LOGIN: string;\n OAUTH: string;\n API: string;\n WSS: string;\n UUID: string;\n TASK?: Worker;\n};\ntype hwlType = {\n HOST: string;\n FILE: string;\n};\ntype userType = {\n ACCT: number;\n ACTYPE: number;\n ACROLE: number;\n ACNAME: string;\n PICTURE: string;\n AGCY: number;\n DVSN: number;\n SECT: number;\n DEPT: string;\n AGCY_NAME: string;\n DVSN_NAME: string;\n SECT_NAME: string;\n};\n/*------------------------------------------------------------*/\nexport const gbvar: GbVar = {\n UNIX_TIME: 0,\n app: {\n UUID: '',\n NAME: '',\n VERSION: '',\n RELEASE: '',\n },\n api: {\n URL: '',\n TOKEN: '',\n },\n hub: {\n LOGIN: 'https://wkrh.info/oauth/v1/authorize',\n OAUTH: 'https://wkrh.info:8850/oauth/v1',\n API: 'https://wkrh.info:8850/api/v1',\n WSS: 'wss://wkrh.info:8855/ws',\n UUID: '',\n },\n hwl: {\n HOST: 'ws://localhost:8844/ws',\n FILE: 'https://wkrh.info/app/hwlink/hwlink_setup.exe',\n },\n user: {\n ACCT: 0,\n ACTYPE: 0,\n ACROLE: 0,\n ACNAME: '',\n PICTURE: '',\n AGCY: 0,\n DVSN: 0,\n SECT: 0,\n DEPT: '0,0',\n AGCY_NAME: '',\n DVSN_NAME: '',\n SECT_NAME: '',\n }\n};\n/*------------------------------------------------------------*/\nimport { version } from '../../package.json';\nexport const info = () => `sdk ${version}`;\n/*------------------------------------------------------------*/\ntype InitParams = {\n svcWorker?: string,\n webNotify?: boolean,\n wakeLock?: boolean,\n btnToTop?: boolean,\n hideTabbar?: boolean,\n};\nexport const init = (params?: InitParams) => {\n if (params?.svcWorker) svcWorker(params.svcWorker);\n if (params?.webNotify) webNotify();\n if (params?.wakeLock) wakeLock();\n if (params?.btnToTop) btnToTop();\n if (params?.hideTabbar) hideTabbar();\n};\n/*------------------------------------------------------------*/\nconst svcWorker = (worker: string) => {\n if (!('serviceWorker' in navigator)) return;\n navigator.serviceWorker.register(worker, {\n type: 'module'\n }).catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst webNotify = () => {\n if (!('Notification' in window)) return;\n Notification.requestPermission()\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst wakeLock = () => {\n if (document.hidden) return;\n navigator.wakeLock.request('screen')\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst hideTabbar = () => {\n const winHeight = window.innerHeight;\n window.visualViewport?.addEventListener('resize', () => {\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n if (!tabbar) return;\n if (winHeight != window.innerHeight) {\n tabbar.classList.add('hide');\n } else {\n tabbar.classList.remove('hide');\n }\n });\n};\n/*------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst btnToTop = () => {\n if (!app) return;\n // create item\n const totop = document.createElement('div');\n totop.id = 'totop';\n totop.innerHTML = /* html */ `\n <button id=\"btn-totop\" class=\"circle purple\" shadow=\"true\"\n title=\"กลับด้านบน\">&#xf341;</button>\n `;\n document.body.appendChild(totop);\n // add event\n totop.querySelector<HTMLButtonElement>('#btn-totop')!.onclick = () => {\n app.scrollTo({ top: 0, behavior: 'smooth' });\n };\n app.addEventListener('scroll', () => {\n if (app.scrollTop > 1000) {\n totop.style.display = 'block';\n if (app.classList.contains('tabbar')) {\n app.style.paddingBottom = '116px';\n } else {\n app.style.paddingBottom = '60px';\n }\n } else {\n totop.style.display = '';\n app.style.paddingBottom = '';\n }\n // tabs mobile shadow\n const tabsMobile = app.querySelector<HTMLElement>('.slim-tabs.mobile .tabs-header');\n if (!tabsMobile) return;\n if (app.scrollTop > 10) {\n tabsMobile.style.boxShadow = `rgba(0, 0, 0, 0.16) 0px 1px 4px`;\n } else {\n tabsMobile.style.boxShadow = '';\n }\n });\n};\n/*------------------------------------------------------------*/","/* page */\n/*--------------------------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst pageSpin: string = /*html*/ `\n<div class=\"lds-spinner\">\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n</div>\n`;\nconst smallSpin: string = `<div class=\"spinner s32\"></div>`;\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (size = 'default') => {\n if (!app) return;\n // page-loader\n if (!app.querySelector('#page-loader')) {\n const loader = document.createElement('div');\n loader.id = 'page-loader';\n loader.className = 'overlay center';\n loader.innerHTML = size == 'default' ? pageSpin : smallSpin;\n app.appendChild(loader);\n }\n // app-content\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Ready = (delay = 400) => {\n new Promise(r => setTimeout(r, delay)).then(() => {\n clearLoader(true);\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const Error = (err: Error) => {\n clearLoader(false);\n if (!app) return;\n // create\n const box = document.createElement('div');\n box.className = 'page-error';\n box.innerHTML = /*html*/ `\n <i class=\"icon red\">&#xf188;</i>\n <div class=\"topic\">&#x2726; เกิดข้อผิดพลาด &#x2726;</div>\n <div class=\"text\">${err}</div>\n `;\n app.prepend(box);\n throw err;\n};\n/*--------------------------------------------------------------------------------*/\nexport const NotFound = () => {\n if (!app) return;\n app.innerHTML = /*html*/ `\n <div class=\"page-not-found\">\n <h1>4<i class=\"fas fa-ghost\"></i>4</h1>\n <h2>Error 404 Page Not Found</h2>\n <p>Sorry, the page cannot be accessed</p>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const FullLoad = () => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-full-load\">\n <div class=\"spinner\"></div>\n <div class=\"text\">Slim<br>Loading</div>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const Inform = (params: {\n icon: string;\n msg: string;\n btnTxt: string;\n btnUrl: string;\n color?: string;\n}) => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-inform ${params.color}\">\n <div class=\"icon solid\">${params.icon}</div>\n <div class=\"msg\">${params.msg}</div>\n <button class=\"lg ${params.color}\" shadow=\"true\">\n ${params.btnTxt}\n </button>\n </div>\n `;\n const btn = app.querySelector<HTMLButtonElement>('button')!;\n btn.onclick = () => window.location.replace(params.btnUrl);\n};\n/*--------------------------------------------------------------------------------*/\n//export const Maintain = () => { };\n//export const Construct = () => { };\n/*--------------------------------------------------------------------------------*/\nconst clearNavbar = () => {\n const topbar = document.querySelector<HTMLElement>('#topbar');\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n const sidebar = document.querySelector<HTMLElement>('#sidebar');\n if (topbar) topbar.remove();\n if (tabbar) tabbar.remove();\n if (sidebar) sidebar.remove();\n if (app) app.className = '';\n};\nconst clearLoader = (showContent: boolean) => {\n if (!app) return;\n const loader = app.querySelector<HTMLElement>('#page-loader');\n if (loader) {\n loader.style.animation = 'fade-out 0.4s forwards';\n loader.onanimationend = () => loader.remove();\n }\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = showContent ? 'block' : 'none';\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","/* 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","/* 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","/* utility */\nexport const THAI_DIGIT = ['๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'];\n/*--------------------------------------------------------------------------------*/\nexport const thaiDigit = (input: number | string): string => {\n return input.toString()\n .replace(/\\d/g, (digit: string) => THAI_DIGIT[parseInt(digit)]);\n};\n/*--------------------------------------------------------------------------------*/\nexport const cidCheck = (cid: string): boolean => {\n if (!Number(cid)) return false;\n if (cid.substring(0, 1) == '0') return false;\n if (cid.length !== 13) return false;\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += parseFloat(cid.charAt(i)) * (13 - i);\n }\n return (11 - sum % 11) % 10 === parseFloat(cid.charAt(12));\n};\n/*--------------------------------------------------------------------------------*/\nexport const winPopup = (\n width: number,\n height: number,\n name: string,\n url: string,\n) => {\n const left = (screen.width - width) / 2;\n const top = (screen.height - height) / 2;\n let opt = `width=${width}, height=${height},`;\n opt += `left=${left}, top=${top}`;\n return window.open(url, name, opt);\n};\n/*--------------------------------------------------------------------------------*/\nexport const strCheck = (str: string): string => {\n let out = String(str);\n out = out.replaceAll(\"'\", \"\\\\'\");\n out = out.replaceAll('\"', '\\\\\"');\n out = out.trim();\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const zeroFill = (\n num: number,\n opts?: {\n min?: number;\n max?: number;\n char?: string;\n }\n): string => {\n const n = Number(num);\n const min = opts?.min ? Number(opts.min) : 0;\n const max = opts?.max ? Number(opts.max) : 0;\n const char = opts?.char || opts?.char == '' ? opts.char : '-';\n if (n > 0) {\n return n.toLocaleString(undefined, {\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n });\n } else return char;\n};\n/*--------------------------------------------------------------------------------*/\nexport const numFormat = (num: number, fixed = 0): string => {\n const n = Number(num);\n const f = Number(fixed);\n let out: string = '';\n if (n >= 10 ** 3 && n < 10 ** 6) {\n out = (n / 1000).toFixed(f) + ' K';\n } else if (n >= 10 ** 6) {\n out = (n / 1000000).toFixed(f) + ' M';\n }\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const strFormat = (value: string, pattern: string): string => {\n let i = 0;\n const v = value.toString();\n return pattern.replace(/#/g, () => {\n const out = v[i] ? v[i] : '#';\n i++;\n return out;\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const toBase64 = (file: File) => new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = err => reject(err);\n});\n/*--------------------------------------------------------------------------------*/\nexport type JwtPack = {\n iss: string;\n iat: number;\n exp: number;\n agcy: number;\n acct: number;\n type: number;\n role: number;\n};\nexport const jwtParse = (token: string): JwtPack | null => {\n try { return JSON.parse(atob(token.split('.')[1])); }\n catch { return null; }\n};\n/*--------------------------------------------------------------------------------*/\n","/* template */\nexport const template: string = /*html*/ `\n<div id=\"page-svchub\" class=\"cover\">\n <div class=\"cover-bar\">Hardware Link</div>\n <div class=\"cover-body border\">\n <!-- svcinfo -->\n <div id=\"svcinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">HwLink</div>\n <div class=\"text\" id=\"hwlink\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">AutoUp</div>\n <div class=\"text\" id=\"autoup\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CSUUID</div>\n <div class=\"text\" id=\"csuuid\">:</div>\n </div>\n </div>\n <hr>\n <!-- device -->\n <div id=\"device\">\n <div class=\"box-tb\">\n <div class=\"topic\">หน่วยงาน</div>\n <div class=\"text\" id=\"agcy\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">กลุ่มงาน</div>\n <div class=\"text\" id=\"dept\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">ชื่ออุปกรณ์</div>\n <div class=\"text\" id=\"dname\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">เลขทรัพย์สิน</div>\n <div class=\"text\" id=\"assno\">:</div>\n </div>\n <button id=\"btn-edit\" class=\"circle sm blue\"\n shadow=\"true\">&#xf5ae;</button>\n </div>\n <hr>\n <!-- hwinfo -->\n <div id=\"hwinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">Hostname</div>\n <div class=\"text\" id=\"host\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Platform</div>\n <div class=\"text\" id=\"os\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CpuModel</div>\n <div class=\"text\" id=\"cpu\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Memory</div>\n <div class=\"text\" id=\"mem\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Uptime</div>\n <div class=\"text\" id=\"uptime\">:</div>\n </div>\n </div>\n <hr>\n <!-- x -->\n <div id=\"\">\n <div class=\"box-tb\">\n <div class=\"topic\">SmartCard</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Biometric</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n </div>\n </div>\n</div>\n<style>\n #page-svchub {\n margin: auto;\n max-width: 600px;\n min-width: 480px;\n line-height: 1.5;\n }\n #page-svchub .topic {\n float: left;\n width: 100px;\n font-weight: 600;\n }\n #page-svchub .text {\n float: left;\n width: calc(100% - 100px);\n }\n #page-svchub #device {\n position: relative;\n }\n #page-svchub #btn-edit {\n position: absolute;\n top: 0;\n right: 0;\n }\n</style>\n`;\n\nexport const frmDevice: string = /*html*/ `\n<div id=\"frm-device\" class=\"cover grid\">\n <div class=\"input-box span\">\n <select id=\"inp-agcy\" required></select>\n <div class=\"label\">หน่วยงาน *</div>\n </div>\n <div class=\"input-box span\">\n <select id=\"inp-dept\"></select>\n <div class=\"label\">กลุ่มงาน/ส่วนงาน</div>\n </div>\n <div class=\"input-box span\">\n <input type=\"text\" id=\"inp-name\" maxlength=\"100\" required>\n <div class=\"label\">ชื่ออุปกรณ์ *</div>\n </div>\n</div>\n<style>\n #frm-device {\n gap: 5px;\n }\n #frm-device .dvsn {\n font-weight: 600;\n }\n #frm-device .sect {\n font-style: italic;\n }\n</style>\n`;","/* agcy */\nimport type { ApiRsp } from '..';\nimport { gbvar } from '../../../mod/global';\n/*--------------------------------------------------------------------------------*/\nexport const Read = (agcy?: number) => new Promise<ApiRsp>((resolve, reject) => {\n let url = `/agcy`;\n if (agcy) url = `/agcy/${agcy}`;\n // fetch\n fetch(gbvar.hub.API + url, {\n method: 'GET',\n headers: gbvar.api.HEADERS,\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Set = async (elm: HTMLSelectElement) => {\n elm.innerHTML = '<option value=\"\">- เลือก -</option>';\n await Read().then(resp => {\n const data = resp.data as AgcyPack[];\n for (const val of data) {\n const name = val.short ? val.short : val.name;\n const opt = document.createElement('option');\n opt.value = `${val.id}`;\n opt.text = name;\n elm.appendChild(opt);\n }\n }).catch(err => console.error(err));\n};\n/*--------------------------------------------------------------------------------*/\nexport type AgcyPack = {\n id: number;\n code: string;\n init_en: string;\n init_th: string;\n name: string;\n short: string;\n status: number;\n};","/* dept */\nimport type { ApiRsp } from '..';\nimport { gbvar } from '../../../mod/global';\n/*--------------------------------------------------------------------------------*/\nexport const Read = (agcy: number) => new Promise<ApiRsp>((resolve, reject) => {\n const url = `/agcy/${agcy}/dept`;\n // fetch\n fetch(gbvar.hub.API + url, {\n method: 'GET',\n headers: gbvar.api.HEADERS,\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Set = async (agcy: number, elm: HTMLSelectElement) => {\n elm.innerHTML = '<option value=\"\">- เลือก -</option>';\n await Read(agcy).then(resp => {\n const data = resp.data as DeptPack[];\n for (const val of data) {\n const opt = document.createElement('option');\n opt.value = `${val.dvsn},${val.sect}`;\n if (val.sect == 0) {\n opt.text = `${val.name}`;\n opt.style.fontWeight = '600';\n } else {\n opt.text = `- ${val.name}`;\n opt.style.fontStyle = 'italic';\n }\n elm.appendChild(opt);\n }\n }).catch(err => console.error(err));\n};\n/*--------------------------------------------------------------------------------*/\nexport type DeptPack = {\n dvsn: number;\n sect: number;\n name: string;\n status: number;\n};","/* account */\nimport type { ApiRsp } from '..';\nimport { gbvar } from '../../../mod/global';\n/*--------------------------------------------------------------------------------*/\n// access\nexport * as access from './access';\nexport type { AccsPack, AccsProfile } from './access';\n/*--------------------------------------------------------------------------------*/\nexport const Read = (\n agcy: number,\n acct?: number,\n params?: {\n dvsn?: number;\n sect?: number;\n actype?: number;\n acrole?: number;\n status?: number;\n }\n) => new Promise<ApiRsp>((resolve, reject) => {\n const status = params && params.status ? params.status : 1;\n let query = `?status=${status}`;\n if (params) {\n const dvsn = params.dvsn ? params.dvsn : 0;\n const sect = params.sect ? params.sect : 0;\n const actype = params.actype ? params.actype : 0;\n const acrole = params.acrole ? params.acrole : 0;\n if (dvsn) query += `&dvsn=${dvsn}`;\n if (sect) query += `&sect=${sect}`;\n if (actype) query += `&actype=${actype}`;\n if (acrole) query += `&acrole=${acrole}`;\n }\n let url = `/agcy/${agcy}/acct${query}`;\n if (acct) url = `/agcy/${agcy}/acct/${acct}`;\n // fetch\n fetch(gbvar.hub.API + url, {\n method: 'GET',\n headers: gbvar.api.HEADERS,\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Create = (\n agcy: number,\n params: unknown,\n) => new Promise<ApiRsp>((resolve, reject) => {\n const url = `/agcy/${agcy}/acct`;\n fetch(gbvar.hub.API + url, {\n method: 'POST',\n headers: gbvar.api.HEADERS,\n body: JSON.stringify(params),\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Update = (\n agcy: number,\n acct: number,\n params: unknown,\n) => new Promise<ApiRsp>((resolve, reject) => {\n const url = `/agcy/${agcy}/acct/${acct}`;\n fetch(gbvar.hub.API + url, {\n method: 'PUT',\n headers: gbvar.api.HEADERS,\n body: JSON.stringify(params),\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\n/*\nexport const Delete = (\n agcy: number,\n acct: number,\n) => new Promise<ApiRsp>((resolve, reject) => { });\n/*--------------------------------------------------------------------------------*/\nexport type AcctPack = {\n agcy: number;\n dvsn: number;\n sect: number;\n acct: number;\n actype: number;\n acrole: number;\n status: number;\n picture: string;\n profile: unknown;\n\n agcy_name: string;\n dvsn_name: string;\n sect_name: string;\n};\nexport type TypeHuman = {\n id: number;\n hmtype: number;\n hmposn: number;\n hmrank: number;\n tname: string;\n fname: string;\n lname: string;\n};\nexport type TypeDevice = {\n id: number;\n dvtype: number;\n assets: number;\n name: string;\n};\nexport type TypeVendor = {\n id: number;\n vdtype: number;\n vdno: string;\n name: string;\n bankno: string;\n bkacct: string;\n bkname: string;\n};","/* device */\n/*--------------------------------------------------------------------------------*/\nimport * as modModal from '../../mod/modal';\nimport * as modDialog from '../../mod/dialog';\nimport { strCheck } from '../../lib/utility';\nimport { frmDevice } from './template';\n// apihub\nimport { Set as setAgcy } from '../api/agency/agcy';\nimport { Set as setDept } from '../api/agency/dept';\nimport * as apiAcct from '../api/account';\nimport type { AcctPack, TypeDevice } from '../api/account';\n/*--------------------------------------------------------------------------------*/\nexport const Create = (csid: string) => new Promise<void>((resolve, reject) => {\n // create modal\n const modal = modModal.Create({\n title: 'เพิ่มคอมพิวเตอร์',\n icon: '&#xf390;',\n width: '400px',\n body: frmDevice,\n button: { save: true, cancel: true },\n });\n // input\n const inpAgcy = modal.querySelector<HTMLSelectElement>('#inp-agcy')!;\n const inpDept = modal.querySelector<HTMLSelectElement>('#inp-dept')!;\n const inpName = modal.querySelector<HTMLInputElement>('#inp-name')!;\n inpAgcy.onchange = () => {\n setDept(Number(inpAgcy.value), inpDept);\n };\n (async () => {\n await setAgcy(inpAgcy);\n await setDept(Number(inpAgcy.value), inpDept);\n // modal ready\n modModal.Ready(modal);\n })();\n // submit\n const form = modal.querySelector<HTMLFormElement>('form');\n if (form) form.onsubmit = async (e) => {\n e.preventDefault();\n modModal.Hidden(modal);\n const res = await modDialog.Confirm('ยืนยัน.! การบันทึกข้อมูล');\n modModal.Visible(modal);\n if (res) {\n modModal.Loading(modal);\n const newAgcy = Number(inpAgcy.value);\n const [dvsn, sect] = (inpDept.value).split(',');\n const params = {\n agcy: newAgcy,\n dvsn: dvsn ? Number(dvsn) : 0,\n sect: sect ? Number(sect) : 0,\n actype: 2, // อุปกรณ์\n acrole: 8, // คอมพิวเตอร์\n acuuid: strCheck(csid),\n profile: {\n dvtype: 1, // คอมพิวเตอร์\n name: strCheck(inpName.value),\n }\n };\n await apiAcct.Create(newAgcy, params).then(() => {\n modModal.Close(modal);\n modDialog.Toast('บันทึกข้อมูล สำเร็จ.!', { type: 'success' });\n resolve();\n }).catch((err) => {\n modModal.Close(modal);\n modDialog.Alert('เกิดข้อผิดพลาด...!', { type: 'failure' });\n reject(err);\n });\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const Update = (\n agcy: number,\n acct: number,\n csid: string,\n) => new Promise<void>((resolve, reject) => {\n // create modal\n const modal = modModal.Create({\n title: 'แก้ไขรายละเอียด',\n icon: '&#xf390;',\n width: '400px',\n body: frmDevice,\n button: { save: true, cancel: true },\n });\n // input\n const inpAgcy = modal.querySelector<HTMLSelectElement>('#inp-agcy')!;\n const inpDept = modal.querySelector<HTMLSelectElement>('#inp-dept')!;\n const inpName = modal.querySelector<HTMLInputElement>('#inp-name')!;\n inpAgcy.onchange = () => {\n setDept(Number(inpAgcy.value), inpDept);\n };\n // read\n (async () => {\n await apiAcct.Read(agcy, acct).then(async (resp) => {\n const data = resp.data as AcctPack;\n const profile = data.profile as TypeDevice;\n await setAgcy(inpAgcy);\n await setDept(data.agcy, inpDept);\n inpAgcy.value = String(data.agcy);\n inpDept.value = data.dvsn ? `${data.dvsn},${data.sect}` : '';\n inpName.value = profile.name;\n }).catch(err => console.error(err));\n // modal ready\n modModal.Ready(modal);\n })();\n // submit\n const form = modal.querySelector<HTMLFormElement>('form');\n if (form) form.onsubmit = async (e) => {\n e.preventDefault();\n modModal.Hidden(modal);\n const res = await modDialog.Confirm('ยืนยัน.! การบันทึกข้อมูล');\n modModal.Visible(modal);\n if (res) {\n modModal.Loading(modal);\n const newAgcy = Number(inpAgcy.value);\n const [dvsn, sect] = (inpDept.value).split(',');\n const params = {\n agcy: newAgcy,\n dvsn: dvsn ? Number(dvsn) : 0,\n sect: sect ? Number(sect) : 0,\n actype: 2, // อุปกรณ์\n acrole: 8, // คอมพิวเตอร์\n acuuid: strCheck(csid),\n profile: {\n dvtype: 1, // คอมพิวเตอร์\n name: strCheck(inpName.value),\n }\n };\n await apiAcct.Update(agcy, acct, params).then(() => {\n modModal.Close(modal);\n modDialog.Toast('บันทึกข้อมูล สำเร็จ.!', { type: 'success' });\n resolve();\n }).catch((err) => {\n modModal.Close(modal);\n modDialog.Alert('เกิดข้อผิดพลาด...!', { type: 'failure' });\n reject(err);\n });\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const PwdChk = () => new Promise<boolean>((resolve) => {\n // create modal\n const modal = modModal.Create({\n title: 'กรอกรหัสผ่าน',\n icon: '&#xf084;',\n width: '230px',\n body: /*html*/ `\n <div class=\"cover\">\n <input type=\"password\" id=\"inp-pass\"\n value=\"admin@wkr\" style=\"width: 100%;\">\n </div>\n `,\n button: { save: true, cancel: true, align: 'center' },\n });\n // modal ready\n modModal.Ready(modal);\n // input\n const inpPass = modal.querySelector<HTMLInputElement>('#inp-pass');\n inpPass?.focus();\n // submit\n const form = modal.querySelector<HTMLFormElement>('form');\n if (form) form.onsubmit = async (e) => {\n e.preventDefault();\n const pass = (inpPass?.value)?.trim();\n if (pass === 'admin@wkr') {\n await modModal.Close(modal);\n resolve(true);\n } else {\n await modDialog.Alert('รหัสผ่าน.! ไม่ถูกต้อง', { type: 'failure' });\n inpPass?.focus();\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\n","/* hwlink */\n/*--------------------------------------------------------------------------------*/\nimport { gbvar } from '../../mod/global';\nimport { Loading, Ready } from '../../page';\nimport * as cover from '../../mod/built-in/cover';\nimport * as device from './device';\nimport { template } from './template';\nconst app = document.querySelector<HTMLElement>('#app');\nlet AGCY: number;\nlet ACCT: number;\nlet CSID: string;\nlet isREADY: boolean;\nlet WSSVC: WebSocket;\nlet boxDv: HTMLElement;\n/*--------------------------------------------------------------------------------*/\nexport const HwLink = () => {\n if (!app) return;\n // template\n const content = document.createElement('div');\n content.id = 'app-content';\n content.innerHTML = template;\n app.classList.add('full-page');\n app.appendChild(content);\n boxDv = app.querySelector<HTMLElement>('#device')!;\n // btn-edit\n const btnEdit = app.querySelector<HTMLButtonElement>('#btn-edit');\n if (btnEdit) btnEdit.onclick = async () => {\n if (await device.PwdChk()) {\n if (AGCY > 0 && ACCT > 0 && CSID != '') {\n device.Update(AGCY, ACCT, CSID).then(() => {\n cover.Loading(boxDv, true);\n WSSVC.send('{\"head\": \"KEYRST\"}');\n }).catch(err => console.error(err));\n } else {\n device.Create(CSID).then(() => {\n cover.Loading(boxDv, true);\n WSSVC.send('{\"head\": \"KEYRST\"}');\n }).catch(err => console.error(err));\n }\n }\n };\n // wait socket\n Loading();\n AGCY = 0;\n ACCT = 0;\n CSID = '';\n isREADY = false;\n // hide btn if empty token\n if (!gbvar.api.TOKEN) {\n const btn = app.querySelectorAll<HTMLButtonElement>('button');\n btn.forEach(elm => elm.style.display = 'none');\n }\n wsSvc();\n};\n/*--------------------------------------------------------------------------------*/\nconst wsSvc = () => {\n WSSVC = new WebSocket(gbvar.hwl.HOST);\n WSSVC.onopen = () => {\n hwinfo();\n dvinfo();\n T_hwinfo = setInterval(hwinfo, 1000 * 10);\n };\n WSSVC.onclose = () => {\n clearInterval(T_hwinfo);\n setTimeout(wsSvc, 1000 * 10);\n };\n WSSVC.onmessage = (e) => {\n const resp = JSON.parse(e.data);\n const head = resp.head ? resp.head : '';\n const data = resp.data ? resp.data : '';\n if (head == 'CSUUID') CSID = data;\n if (head == 'HWINFO') setHwInfo(data);\n if (head == 'DVINFO') {\n if (!isREADY) {\n isREADY = true;\n Ready();\n }\n setDvInfo(data);\n cover.Loading(boxDv, false);\n }\n };\n let T_hwinfo: NodeJS.Timeout;\n const hwinfo = () => WSSVC.send('{\"head\": \"HWINFO\"}');\n const dvinfo = () => WSSVC.send('{\"head\": \"DVINFO\"}');\n};\n/*--------------------------------------------------------------------------------*/\nconst setHwInfo = (data: {\n csuuid: string;\n hostname: string;\n platform: string;\n uptime: number;\n svc: {\n hwlink: string;\n autoup: string;\n };\n cpu: {\n model: string;\n percent: number;\n };\n mem: {\n total: number;\n used: number;\n percent: number;\n };\n}) => {\n if (!app) return;\n // svcinfo\n const svc = data.svc;\n app.querySelector<HTMLElement>('#hwlink')!.innerText = `: ${svc.hwlink}`;\n app.querySelector<HTMLElement>('#autoup')!.innerText = `: ${svc.autoup}`;\n app.querySelector<HTMLElement>('#csuuid')!.innerText = `: ${data.csuuid}`;\n // hwinfo\n const cpu = data.cpu;\n const mem = data.mem;\n const hwinfo = app.querySelector<HTMLElement>('#hwinfo')!;\n const uptime = Number(data.uptime);\n const hh = Math.floor(uptime / 3600);\n const mm = Math.floor((uptime % 3600) / 60);\n const memUsed = (Number(mem.used) / 1024 / 1024 / 1024).toFixed(1);\n const memTotal = (Number(mem.total) / 1024 / 1024 / 1024).toFixed(1);\n const mem_text = `${memUsed}/${memTotal} GB (${mem.percent}%)`;\n hwinfo.querySelector<HTMLElement>('#host')!.innerText = `: ${data.hostname}`;\n hwinfo.querySelector<HTMLElement>('#os')!.innerText = `: ${data.platform}`;\n hwinfo.querySelector<HTMLElement>('#cpu')!.innerText = `: ${cpu.model}`;\n app.querySelector<HTMLElement>('#mem')!.innerText = `: ${mem_text}`;\n app.querySelector<HTMLElement>('#uptime')!.innerText = `: ${hh} h ${mm} m`;\n};\n/*--------------------------------------------------------------------------------*/\nconst setDvInfo = (data: {\n agcy: number;\n dvsn: number;\n sect: number;\n acct: number;\n acname: string;\n agcy_name: string;\n dvsn_name: string;\n sect_name: string;\n}) => {\n if (!app || !data.acct || Number(data.acct) == 0) return;\n AGCY = Number(data.agcy);\n ACCT = Number(data.acct);\n let dept = data.dvsn_name;\n if (Number(data.sect) > 0) {\n dept += ` - ${data.sect_name}`;\n }\n app.querySelector<HTMLElement>('#agcy')!.innerText = `: ${data.agcy_name}`;\n app.querySelector<HTMLElement>('#dept')!.innerText = `: ${dept}`;\n app.querySelector<HTMLElement>('#dname')!.innerText = `: ${data.acname}`;\n};\n/*--------------------------------------------------------------------------------*/\n"],"mappings":"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","names":["app","app","Loading","app","content","Loading","Ready","app","Read","Set","Read","Create","Create","Set","Ready","Loading","Update","Read","app","Update","Loading","Create"]}
1
+ {"version":3,"sources":["../../../src/config/global.ts","../../../src/config/index.ts","../../../src/page/index.ts","../../../src/svchub/hwlink/template.ts","../../../src/svchub/hwlink/index.ts"],"sourcesContent":["/* global */\n/*------------------------------------------------------------*/\nimport { version } from '../../package.json';\nexport const info = () => `sdk ${version}`;\n/*------------------------------------------------------------*/\ntype InitParams = {\n svcWorker?: string,\n webNotify?: boolean,\n wakeLock?: boolean,\n btnToTop?: boolean,\n hideTabbar?: boolean,\n};\nexport const init = (params?: InitParams) => {\n if (params?.svcWorker) svcWorker(params.svcWorker);\n if (params?.webNotify) webNotify();\n if (params?.wakeLock) wakeLock();\n if (params?.btnToTop) btnToTop();\n if (params?.hideTabbar) hideTabbar();\n};\n/*------------------------------------------------------------*/\nconst svcWorker = (worker: string) => {\n if (!('serviceWorker' in navigator)) return;\n navigator.serviceWorker.register(worker, {\n type: 'module'\n }).catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst webNotify = () => {\n if (!('Notification' in window)) return;\n Notification.requestPermission()\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst wakeLock = () => {\n if (document.hidden) return;\n navigator.wakeLock.request('screen')\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst hideTabbar = () => {\n const winHeight = window.innerHeight;\n window.visualViewport?.addEventListener('resize', () => {\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n if (!tabbar) return;\n if (winHeight != window.innerHeight) {\n tabbar.classList.add('hide');\n } else {\n tabbar.classList.remove('hide');\n }\n });\n};\n/*------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst btnToTop = () => {\n if (!app) return;\n // create item\n const totop = document.createElement('div');\n totop.id = 'totop';\n totop.innerHTML = /* html */ `\n <button id=\"btn-totop\" class=\"circle purple\" shadow=\"true\"\n title=\"กลับด้านบน\">&#xf341;</button>\n `;\n document.body.appendChild(totop);\n // add event\n totop.querySelector<HTMLButtonElement>('#btn-totop')!.onclick = () => {\n app.scrollTo({ top: 0, behavior: 'smooth' });\n };\n app.addEventListener('scroll', () => {\n if (app.scrollTop > 1000) {\n totop.style.display = 'block';\n if (app.classList.contains('tabbar')) {\n app.style.paddingBottom = '116px';\n } else {\n app.style.paddingBottom = '60px';\n }\n } else {\n totop.style.display = '';\n app.style.paddingBottom = '';\n }\n // tabs mobile shadow\n const tabsMobile = app.querySelector<HTMLElement>('.slim-tabs.mobile .tabs-header');\n if (!tabsMobile) return;\n if (app.scrollTop > 10) {\n tabsMobile.style.boxShadow = `rgba(0, 0, 0, 0.16) 0px 1px 4px`;\n } else {\n tabsMobile.style.boxShadow = '';\n }\n });\n};\n/*------------------------------------------------------------*/","/* config */\nexport { init, info } from './global';\n/*------------------------------------------------------------*/\nexport const cfg: Config = {\n UNIX_TIME: 0,\n app: {\n UUID: '',\n NAME: '',\n SECRET: '',\n VERSION: '',\n RELEASE: '',\n CALLBACK: '',\n },\n api: {\n URL: '',\n TOKEN: '',\n },\n hub: {\n LOGIN: 'https://wkrh.info/oauth/v1/authorize',\n OAUTH: 'https://wkrh.info:8850/oauth/v1',\n API: 'https://wkrh.info:8850/api/v1',\n WSS: 'wss://wkrh.info:8855/ws',\n UUID: '',\n },\n hwl: {\n HOST: 'ws://localhost:8844/ws',\n FILE: 'https://wkrh.info/app/hwlink/hwlink_setup.exe',\n },\n user: {\n sub: 0,\n name: '',\n utyp: '',\n unit: '',\n unit_id: 0,\n role_id: 0,\n metadata: {\n emp_type: '',\n emp_level: '',\n position: '',\n },\n picture: '',\n }\n};\n/*------------------------------------------------------------*/\ntype Config = {\n UNIX_TIME: number;\n app: AppCfg;\n api: ApiCfg;\n hub: HubCfg;\n hwl: HwlCfg;\n user: UserCfg;\n};\ntype AppCfg = {\n UUID: string;\n NAME: string;\n SECRET: string;\n VERSION: string;\n RELEASE: string;\n CALLBACK: string;\n};\ntype ApiCfg = {\n URL: string;\n TOKEN: string;\n HEADERS?: Headers;\n};\ntype HubCfg = {\n LOGIN: string;\n OAUTH: string;\n API: string;\n WSS: string;\n UUID: string;\n TASK?: Worker;\n};\ntype HwlCfg = {\n HOST: string;\n FILE: string;\n};\ntype UserCfg = {\n sub: number;\n name: string;\n utyp: string;\n unit: string;\n unit_id: number;\n role_id: number;\n metadata: {\n emp_type: string;\n emp_level: string;\n position: string;\n };\n picture: string;\n};","/* page */\n/*--------------------------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst pageSpin: string = /*html*/ `\n<div class=\"lds-spinner\">\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n</div>\n`;\nconst smallSpin: string = `<div class=\"spinner s32\"></div>`;\n/*--------------------------------------------------------------------------------*/\nexport const loading = (size = 'default') => {\n if (!app) return;\n // page-loader\n if (!app.querySelector('#page-loader')) {\n const loader = document.createElement('div');\n loader.id = 'page-loader';\n loader.className = 'overlay center';\n loader.innerHTML = size == 'default' ? pageSpin : smallSpin;\n app.appendChild(loader);\n }\n // app-content\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const ready = (delay = 400) => {\n new Promise(r => setTimeout(r, delay)).then(() => {\n clearLoader(true);\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const error = (err: Error) => {\n clearLoader(false);\n if (!app) return;\n // create\n const box = document.createElement('div');\n box.className = 'page-error';\n box.innerHTML = /*html*/ `\n <i class=\"icon red\">&#xf188;</i>\n <div class=\"topic\">&#x2726; เกิดข้อผิดพลาด &#x2726;</div>\n <div class=\"text\">${err}</div>\n `;\n app.prepend(box);\n throw err;\n};\n/*--------------------------------------------------------------------------------*/\nexport const notFound = () => {\n if (!app) return;\n app.innerHTML = /*html*/ `\n <div class=\"page-not-found\">\n <h1>4<i class=\"fas fa-ghost\"></i>4</h1>\n <h2>Error 404 Page Not Found</h2>\n <p>Sorry, the page cannot be accessed</p>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const fullLoad = () => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-full-load\">\n <div class=\"spinner\"></div>\n <div class=\"text\">Slim<br>Loading</div>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const inform = (params: {\n icon: string;\n msg: string;\n btnTxt: string;\n btnUrl: string;\n color?: string;\n}) => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-inform ${params.color}\">\n <div class=\"icon solid\">${params.icon}</div>\n <div class=\"msg\">${params.msg}</div>\n <button class=\"lg ${params.color}\" shadow=\"true\">\n ${params.btnTxt}\n </button>\n </div>\n `;\n const btn = app.querySelector<HTMLButtonElement>('button')!;\n btn.onclick = () => window.location.replace(params.btnUrl);\n};\n/*--------------------------------------------------------------------------------*/\n//export const Maintain = () => { };\n//export const Construct = () => { };\n/*--------------------------------------------------------------------------------*/\nconst clearNavbar = () => {\n const topbar = document.querySelector<HTMLElement>('#topbar');\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n const sidebar = document.querySelector<HTMLElement>('#sidebar');\n if (topbar) topbar.remove();\n if (tabbar) tabbar.remove();\n if (sidebar) sidebar.remove();\n if (app) app.className = '';\n};\nconst clearLoader = (showContent: boolean) => {\n if (!app) return;\n const loader = app.querySelector<HTMLElement>('#page-loader');\n if (loader) {\n loader.style.animation = 'fade-out 0.4s forwards';\n loader.onanimationend = () => loader.remove();\n }\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = showContent ? 'block' : 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* template */\nexport const template: string = /*html*/ `\n<div id=\"page-svchub\" class=\"cover\">\n <div class=\"cover-bar\">Hardware Link</div>\n <div class=\"cover-body border\">\n <!-- svcinfo -->\n <div id=\"svcinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">HwLink</div>\n <div class=\"text\" id=\"hwlink\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">AutoUp</div>\n <div class=\"text\" id=\"autoup\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CSUUID</div>\n <div class=\"text\" id=\"csuuid\">:</div>\n </div>\n </div>\n <hr>\n <!-- device -->\n <div id=\"device\">\n <div class=\"box-tb\">\n <div class=\"topic\">หน่วยงาน</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">กลุ่มงาน</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">ชื่ออุปกรณ์</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">เลขทรัพย์สิน</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <button id=\"btn-edit\" class=\"circle sm blue\"\n shadow=\"true\">&#xf5ae;</button>\n </div>\n <hr>\n <!-- hwinfo -->\n <div id=\"hwinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">Hostname</div>\n <div class=\"text\" id=\"host\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Platform</div>\n <div class=\"text\" id=\"os\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CpuModel</div>\n <div class=\"text\" id=\"cpu\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Memory</div>\n <div class=\"text\" id=\"mem\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Uptime</div>\n <div class=\"text\" id=\"uptime\">:</div>\n </div>\n </div>\n <hr>\n <!-- x -->\n <div id=\"\">\n <div class=\"box-tb\">\n <div class=\"topic\">SmartCard</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Biometric</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n </div>\n </div>\n</div>\n<style>\n #page-svchub {\n margin: auto;\n max-width: 600px;\n min-width: 480px;\n line-height: 1.5;\n }\n #page-svchub .topic {\n float: left;\n width: 100px;\n font-weight: 600;\n }\n #page-svchub .text {\n float: left;\n width: calc(100% - 100px);\n }\n #page-svchub #device {\n position: relative;\n }\n #page-svchub #btn-edit {\n position: absolute;\n top: 0;\n right: 0;\n }\n</style>\n`;","/* hwlink */\n/*--------------------------------------------------------------------------------*/\nimport { cfg } from '../../config';\nimport { loading, ready } from '../../page';\nimport { template } from './template';\nconst app = document.querySelector<HTMLElement>('#app');\nlet isREADY: boolean;\nlet WSSVC: WebSocket;\n/*--------------------------------------------------------------------------------*/\nexport const hwLink = () => {\n if (!app) return;\n // template\n const content = document.createElement('div');\n content.id = 'app-content';\n content.innerHTML = template;\n app.classList.add('full-page');\n app.appendChild(content);\n // wait socket\n isREADY = false;\n loading();\n wsSvc();\n};\n/*--------------------------------------------------------------------------------*/\nconst wsSvc = () => {\n WSSVC = new WebSocket(cfg.hwl.HOST);\n WSSVC.onopen = () => {\n hwinfo();\n T_hwinfo = setInterval(hwinfo, 1000 * 10);\n };\n WSSVC.onclose = () => {\n clearInterval(T_hwinfo);\n setTimeout(wsSvc, 1000 * 10);\n };\n WSSVC.onmessage = (e) => {\n const resp = JSON.parse(e.data);\n const head = resp.head ? resp.head : '';\n const data = resp.data ? resp.data : '';\n if (head == 'CSUUID') {\n if (!isREADY) {\n isREADY = true;\n ready();\n }\n }\n if (head == 'HWINFO') setHwInfo(data);\n };\n let T_hwinfo: NodeJS.Timeout;\n const hwinfo = () => WSSVC.send('{\"head\": \"HWINFO\"}');\n};\n/*--------------------------------------------------------------------------------*/\nconst setHwInfo = (data: HwInfo) => {\n if (!app) return;\n // svcinfo\n const svc = data.svc;\n app.querySelector<HTMLElement>('#hwlink')!.innerText = `: ${svc.hwlink}`;\n app.querySelector<HTMLElement>('#autoup')!.innerText = `: ${svc.autoup}`;\n app.querySelector<HTMLElement>('#csuuid')!.innerText = `: ${data.csuuid}`;\n // hwinfo\n const cpu = data.cpu;\n const mem = data.mem;\n const hwinfo = app.querySelector<HTMLElement>('#hwinfo')!;\n const uptime = Number(data.uptime);\n const hh = Math.floor(uptime / 3600);\n const mm = Math.floor((uptime % 3600) / 60);\n const memUsed = (Number(mem.used) / 1024 / 1024 / 1024).toFixed(1);\n const memTotal = (Number(mem.total) / 1024 / 1024 / 1024).toFixed(1);\n const mem_text = `${memUsed}/${memTotal} GB (${mem.percent}%)`;\n hwinfo.querySelector<HTMLElement>('#host')!.innerText = `: ${data.hostname}`;\n hwinfo.querySelector<HTMLElement>('#os')!.innerText = `: ${data.platform}`;\n hwinfo.querySelector<HTMLElement>('#cpu')!.innerText = `: ${cpu.model}`;\n app.querySelector<HTMLElement>('#mem')!.innerText = `: ${mem_text}`;\n app.querySelector<HTMLElement>('#uptime')!.innerText = `: ${hh} h ${mm} m`;\n};\n/*--------------------------------------------------------------------------------*/\ntype HwInfo = {\n csuuid: string;\n hostname: string;\n platform: string;\n uptime: number;\n svc: {\n hwlink: string;\n autoup: string;\n };\n cpu: {\n model: string;\n percent: number;\n };\n mem: {\n total: number;\n used: number;\n percent: number;\n };\n};"],"mappings":"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","names":["app","app","app"]}
@@ -1,9 +1,9 @@
1
- export { i as button } from '../index-QRbamarh.js';
1
+ export { i as button } from '../index-BAQxKstM.js';
2
2
  export { i as input } from '../index-Dm_WTy_S.js';
3
- export { i as cover } from '../index-BQcJsVJ-.js';
3
+ export { i as cover } from '../index-D5CUpF9v.js';
4
4
  export { i as camera } from '../index-D3N8oo7V.js';
5
- export { i as dialog } from '../index-CzsSwSvp.js';
6
- export { i as drawer } from '../index-B2HHS23A.js';
7
- export { i as drop } from '../index-DcvauYN8.js';
8
- export { i as modal } from '../index-DQt71MNx.js';
9
- export { i as tabs } from '../index-DZdXvqxA.js';
5
+ export { i as dialog } from '../index-B4158M0u.js';
6
+ export { i as drawer } from '../index-uQOR5bdy.js';
7
+ export { i as drop } from '../index-CoYHkkyT.js';
8
+ export { i as modal } from '../index-CD53Vh6h.js';
9
+ export { i as tabs } from '../index-DzKPF0ja.js';
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 = "&#xf05a;";
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("*");