@dimina-kit/devkit 0.1.2-dev.20260718095333 → 0.1.2-dev.20260728063215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fe/dimina-fe-container/assets/index.css +1 -1
- package/fe/dimina-fe-container/assets/index.js +7 -6
- package/fe/dimina-fe-container/assets/pageFrame.js +3 -3
- package/fe/dimina-fe-container/assets/service.js +2 -2
- package/fe/dimina-fe-container/dimina-version.json +2 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
.dimina-native-webview{width:100%;height:100%;display:flex;position:absolute;top:0;left:0}.dimina-native-webview.dimina-native-webview--custom-nav .dimina-native-webview__navigation{display:none}.dimina-native-webview.dimina-native-webview--custom-nav .dimina-native-webview__body{padding-top:0}.dimina-native-webview__navigation{box-sizing:content-box;z-index:10;background-color:#f7f7f7;height:50.336px;padding-top:50.336px;display:flex;position:absolute;top:0;left:0;right:0}.dimina-native-webview__navigation .dimina-native-webview__navigation-content{justify-content:center;align-items:center;width:100%;display:flex;position:relative}.dimina-native-webview__navigation .dimina-native-webview__navigation-content .dimina-native-webview__navigation-left-btn{cursor:pointer;width:11.44px;height:50.336px;position:absolute;top:0;left:19.448px}.dimina-native-webview__navigation .dimina-native-webview__navigation-title{text-align:center;font-size:19.448px}.dimina-native-webview__navigation.dimina-native-webview__navigation--white .dimina-native-webview__navigation-title{color:#fff}.dimina-native-webview__navigation.dimina-native-webview__navigation--white .dimina-native-webview__navigation-left-btn{background:url(/images/mini-arrow-left-white.png) 0/11.44px 20.02px no-repeat}.dimina-native-webview__navigation.dimina-native-webview__navigation--black .dimina-native-webview__navigation-title{color:#000}.dimina-native-webview__navigation.dimina-native-webview__navigation--black .dimina-native-webview__navigation-left-btn{background:url(/images/mini-arrow-left.png) 0/11.44px 20.02px no-repeat}.dimina-native-webview__body{flex:1;padding-top:100.672px;display:flex}.dimina-native-webview__root{flex:1;position:relative;overflow:hidden}.dimina-native-webview__window{border:0;width:100%;height:100%;position:absolute;top:0;left:0}.dimina-mini-app,.dimina-mini-app__webviews,.dimina-mini-app__launch-screen{background-color:#fff;position:absolute;inset:0}.dimina-mini-app-navigation__actions{box-sizing:border-box;z-index:10;border-radius:18.304px;flex-direction:row;width:94.952px;height:36.608px;display:flex;position:absolute;top:46.904px;right:8.008px;overflow:hidden}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black{background-color:#fffc;border:1px solid #eaeaeacc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black .dimina-mini-app-navigation__actions-variable{background-image:url(/images/mini-action.png)}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black .dimina-mini-app-navigation__actions-variable:after{background-color:#ccc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black .dimina-mini-app-navigation__actions-close{background-image:url(/images/mini-close.png)}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white{background-color:#0003;border:1px solid #eaeaeacc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white .dimina-mini-app-navigation__actions-variable{background-image:url(/images/mini-action-white.png)}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white .dimina-mini-app-navigation__actions-variable:after{background-color:#ccc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white .dimina-mini-app-navigation__actions-close{background-image:url(/images/mini-close-white.png)}.dimina-mini-app-navigation__actions li{cursor:pointer;flex:1;list-style:none;position:relative}.dimina-mini-app-navigation__actions-variable{background-position:50%;background-repeat:no-repeat;background-size:21.736px}.dimina-mini-app-navigation__actions-variable:after{content:"";opacity:.8;width:1px;height:22.88px;position:absolute;top:50%;right:0;transform:translateY(-50%)}.dimina-mini-app-navigation__actions-close{background-position:50%;background-repeat:no-repeat;background-size:20.02px 20.02px}@keyframes animX{0%{left:-4.004px}to{left:72.644px}}@keyframes animY{0%{top:-4.004px}to{top:72.644px}}.dimina-mini-app__launch-screen{z-index:8;background-color:#fff;display:none}.dimina-mini-app__launch-screen .dimina-mini-app__launch-screen-content{flex-direction:column;align-items:center;display:flex;position:absolute;top:308.88px;left:50%;transform:translate(-50%)}.dimina-mini-app__launch-screen .dimina-mini-app__logo{width:76.648px;height:76.648px;position:relative}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__logo-img{z-index:1;border-radius:50%;width:48.048px;height:48.048px;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__logo-img img{width:100%;height:100%;position:absolute;top:0;left:0}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__logo-circle{z-index:2;box-sizing:border-box;border:1px solid #e9e9e9;border-radius:50%;width:76.648px;height:76.648px;position:absolute;top:0;left:0}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__green-point{z-index:3;background-color:#fff;border-radius:50%;width:8.008px;height:8.008px;animation:.8s cubic-bezier(.36,0,.64,1) -400ms infinite alternate animX,.8s cubic-bezier(.36,0,.64,1) infinite alternate animY;position:absolute;top:0;left:0}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__green-point:after{content:"";background-color:#59be6b;border-radius:50%;width:4.004px;height:4.004px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.dimina-mini-app__launch-screen .dimina-mini-app__name{color:#333;text-align:center;padding-top:20.592px;font-size:18.876px}.dimina-mini-app__webviews{z-index:1;box-sizing:border-box;padding-bottom:10px}.dimina-mini-app-menu__mask{z-index:999;opacity:0;background:#0000006b;transition:opacity .24s ease-in-out;display:none;position:fixed;inset:0}.dimina-mini-app-menu__mask.show{opacity:1}.dimina-mini-app-menu{padding:0 16.016px 29.744px;padding-bottom:max(29.744px, 16.016px + env(safe-area-inset-bottom));z-index:1000;background:linear-gradient(#f8fafc 0%,#fff 18% 100%);border-radius:18.304px 18.304px 0 0;flex-direction:column;gap:0;max-height:240.24px;transition:transform .24s ease-in-out;display:flex;position:fixed;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(100%);box-shadow:0 -3.432px 22.88px #0f172a1f}.dimina-mini-app-menu.show{transform:translateY(0)}.dimina-mini-app-menu__handle{background:#0f172a24;border-radius:999px;flex-shrink:0;width:41.184px;height:4.576px;margin:10.296px auto 13.728px}.dimina-mini-app-menu__app{align-items:center;width:100%;padding-bottom:12.584px;display:flex}.dimina-mini-app-menu__app-logo{background:#f1f5f9;border-radius:13.728px;flex-shrink:0;width:50.336px;height:50.336px;margin-right:11.44px;overflow:hidden;box-shadow:inset 0 0 0 1px #0f172a0f}.dimina-mini-app-menu__app-logo-img{object-fit:cover;width:100%;height:100%;display:block}.dimina-mini-app-menu__app-meta{flex:1;min-width:0}.dimina-mini-app-menu__app-name{color:#0f172a;margin:0 0 4.576px;font-size:19.448px;font-weight:700;line-height:1.3}.dimina-mini-app-menu__app-id{color:#94a3b8;word-break:break-all;margin:0 0 3.432px;font-size:12.584px;line-height:1.4}.dimina-mini-app-menu__app-desc{color:#64748b;word-break:break-all;margin:0;font-size:13.728px;line-height:1.5}.dimina-mini-app-menu__quick-actions{grid-template-columns:repeat(3,minmax(0,1fr));gap:9.152px;width:100%;padding-bottom:13.728px;display:grid}.dimina-mini-app-menu__quick-action{color:#0f172a;background:#f8fafc;border:0;border-radius:13.728px;flex-direction:column;justify-content:center;align-items:center;gap:5.72px;padding:9.152px 3.432px;display:flex;box-shadow:inset 0 0 0 1px #0f172a0d}.dimina-mini-app-menu__quick-action.is-danger{color:#dc2626}.dimina-mini-app-menu__quick-action.is-danger .dimina-mini-app-menu__quick-action-icon{color:#dc2626;background:#fee2e2}.dimina-mini-app-menu__quick-action-icon{background:#e2e8f0;border-radius:50%;justify-content:center;align-items:center;width:29.744px;height:29.744px;font-size:12.584px;font-weight:700;display:flex}.dimina-mini-app-menu__quick-action-label{font-size:12.584px;line-height:1.4}.dimina-mini-app-menu__footer{width:100%;margin-top:5.72px;display:block}.dimina-mini-app-menu__footer-btn{color:#0f172a;background:#eef2f7;border:0;border-radius:12.584px;width:100%;height:48.048px;font-size:16.016px;font-weight:600}.dimina-toast-mask{z-index:1040;pointer-events:auto;background:0 0;position:absolute;inset:0}.dimina-toast{z-index:1050;box-sizing:border-box;pointer-events:none;background-color:#4c4c4c;background-repeat:no-repeat;width:120px;height:120px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.dimina-toast.dimina-toast--text-only{border-radius:6px;width:auto;max-width:70%;height:auto;padding:12px 18px}.dimina-toast.dimina-toast--text-only p{color:#fff;text-align:center;white-space:pre-wrap;font-size:14px;line-height:1.4}.dimina-toast.dimina-toast--success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACBCAYAAACsCAq9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF7WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0wNS0yNFQwNzowOTo0MyswODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDUtMjRUMDc6MTE6MzgrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDUtMjRUMDc6MTE6MzgrMDg6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M2FkYzc0OWQtNzY3ZC00NTcyLWFlOGMtMDMyNDVjYTMyYzFhIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc3RjM2Rjg1RTRFNzExRUQ5MDI1REY5OTdGMjQ0MDJDIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdGMzZGODVFNEU3MTFFRDkwMjVERjk5N0YyNDQwMkMiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3N0YzNkY4MkU0RTcxMUVEOTAyNURGOTk3RjI0NDAyQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3N0YzNkY4M0U0RTcxMUVEOTAyNURGOTk3RjI0NDAyQyIvPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozYWRjNzQ5ZC03NjdkLTQ1NzItYWU4Yy0wMzI0NWNhMzJjMWEiIHN0RXZ0OndoZW49IjIwMjMtMDUtMjRUMDc6MTE6MzgrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvICKDoAAAVwSURBVHic7d1bVus4EEbhTa8zMDGyLkaGe0AwhZyHoCaE2PFFlyr53y/wgpM43xKJLdkvl8sFpTz05/Pzs/dzULF6B/4DrPSG/5TeoBq2xBVi/h0Kg/yn5MbUsCW+Ieb+RRhV4xK/IeaKghRGtVRiHmKuGEhhVHMlnkPMFQH58vHxcXQbarwS6yHe9gpMex9UI6O6L7EPIl9/l/Y+sDCq2xL7IeZ2gxRGlUsch5jbBVIYFZSFmNsMUhiVUR5ibhNIYTx3xvWwTM1WgxTG82bUh5hbBVIYz5nRDmLuKUhhPF9Ge4i5RZDCeK6MfhBzs48vjOfJ6A8RFg4jCeM5MnxAzCUegBTG8TN8Qcwl7kAK49gZPiHmEjcghXHcDN8Qc4kvkJrPOGZGDIi3vWpkHC8jIERgEsaxMoJCBH1mHCkjMEQQxlEygkMEYRwhYwCIIIzRMwaBCMIYOWMgiCCMUTMGgwjCGDEjFsSJlYv7dUm8WB1aJN+hiSvEVWlkjNPQEEEYozQ8RBDGCJ0CIgij904DEYTRc6eCCMLotdNBBGH02CkhgjB667QQQRi9lIgH8Y2CEEFnYDyUqHdJulq9UeEOWRoZ+5YQxP8Txn4lBPFHwtinhCD+ShjblxDEhwlj2xKCOJswtishiIsJY5sSgvi0WhiNWAdwa5YQxFXVwGhc12hEO6NQI0MQV1cao/FzsdCZQRqxFk5BR4hQFqPxeOefEaQhiJsrhdFY3vnvdH6hDTMEcVclMBrrdn6Ru7U7zxDE3R29cm1i+wd0Ny++cIYgHurIyJjY901xxBHSEMTD7cWYOHbIYiSQhiAWaQ/GRJljZyOANASxWFsxJsoexI0M0hDEom3BmKhzNiEiSEMQi7dlDUzNnZ+3bRUfo1RGPIirLknXu7UjY4uzKBFGSEMQq7XmOGPr03kThZdAFsoQxKo9Gxl7nFdO+JvpYghi9ZYw9pzgkPAD0hDEJs1h9DDTJtEfpCGIzXqE0egPMZfoB9IQxKbdYzT8vQGJ9iO14W8/PCs0RPj5bdrw/wa02OGG//1wX3iI8D0yGjHegNojpBFjP9w2BES4YjRivQG1QBqx9sMEvDAIRLhinHo/iR2VBvlOPIgeTwwcKmOMONSXAunhMNaWJgaECN+fGSfigrSDf5+KPJM2TQwKEX4f2okIcu8EC0F01qOD3mcAKYgOmzsdODJIQXTa0kSJEUEKouOeTSF75TpdPVJzIAXReWtmehvxQQpigLZcUcKIdWAYrm9q6vwctuZ+4VSttl7exIgHMlKnhQjb100b8f5lR+nUEGHfFSUMgSzd6SHC/mvtGAJZKkH86shVyAyBPJog3nT0YqGGQO5NEO8qdeVagdyWID7o6JVrb0v0X1oaIUGcqeTdDiZOeNZgY4K4UOn7wEwI5FyC+KQad8iaEMj7BHFFte4dOCGQOUFcWc27qk7EnBNZMkHcUMlv00tFm8JVIkHcWKv7TZ9thBTEHbXCCOcBKYg7a4kRxgcpiAdqjRHGBSmIB+uBEWIu9FpKEAvUCyOMM8FCEAu15aZENbKvn1HX1Yz6kaNLPUfGnBFzhBTEwnnACPFACmKFvGCEOCAFsVKeMIJ/kIJYMW8YwS9IQaycR4zgD6QgNsgrRvADUhAb5Rkj9AcpiA1rNZ/xaIn2Kw8FsXHeR8bcRLtlDBOD3ewnSlEwQhuQLR5DzRQJI9TFUnPbakXRMEIdNDW2qTYWESOU/Vw3IYguiooxd/Qb74Qguik6RtgPckIQXTUCRtgOckIQ3TUKRlgPckIQXTYSRni+0OsNQXTbaBhh/ny2Fk45b0SM8BukIAao9+rAmtnM78ppL5fLpfdzUAoY99+0Cthf4VNi31qSlvAAAAAASUVORK5CYII=);background-position:50% 30px;background-size:auto 24px;border-radius:10px}.dimina-toast.dimina-toast--loading{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAE9klEQVRIiYWXS4gcVRSGv3uremY6MXEmr5E8FDUItpGEVBa6UDoguPGxEdSQQJa68YGggkJ6dqIGQSJRIYK4kQ4oLly4kGkM6MIuRKRbkcAgE8cMI07IyLSR6f5d1Lk9tysTLCi6q/57zrn3nP88imazmczOzqbNZjOR5CR5Scns7GwqKbHbS3KNRsPbc1XSz5LmJG2J5SRdJyfJm76AOSIDXlLSbrcrkiq2KC0pCti01q/bAtbpdMZK68NGKpJizPulpSUBAhzgsyxz9gywE9gF+OhWhIfLA75Wqw3s/7fATysrK5Om1wEDuwEc5opEUmVubm5CUsXc7u1keyTtkDRuO/eSdkYnvl3SuHnKS3pS0u+S5iVNRScN4UglVZDkTWgsUhzitUnSXkn7zHDAdkWG7zBlXtJNZnRB0jNRyEKsg9tTD7gsywAG58+fHwC0Wq3g1n/tFjAVuzVy8yBy/Rlz6xxwrhSWpNvt+jzPAUTEtrCzRKPkGpO0W9LuhYWFTYbtCMddXV3dazL77KSXJD1QyopE0n7zXirJEzHvkKQDy8vLkxpldGqx2mN3ePeEpBOR4u/Nzc1S6myS9JqktqSvA6udpMTcczBy4VXgN2AtctXWkuuJfh1wBHgWeMHkAR4FnjNZgO8ML5hmghXgNmAyov6fwKUotiEt4nRyjKaMKFLwHWC/rVmzTf1o63CSHKN5mgB3AakJLQELhvWJc/F6owF7Hzhs/z+y+5qt83meO4xQlVKeeovrEUnbyrloMQxVLMZCytwr6aykyQ2wMUlpIFecb8MkL/2OYKXSOsQ6nc6YYaltMJYLmEdSxdKkKmlCUvXy5cub7TlmZ3zSNFI8UpODUXu31U49JWm7eW+q0+mMOUlHgS0lhoYrBxYjzOd5TpZlarVaANTr9SFmv6Fo3Ae8WiJhWHspkGkjo2yEZVnGBkZjufBuvGQ0vipOUgUYo8TQxcVFTU9P/xMJllNmqDTPc2ddrYxts83HmANWRrqTMfv/+qmPsajBDIkUKle73Y57dEyydCSdotbm5+fnq5Iek3RLOZ2izdwonQ5L+lhSdqN0cpKSbrebWBMfmCsy1gvAH8CXkauC6+KYxpgHTgAP2burwOvAFdYHib6TlEYKdlLU1wSg3+//lSTJV8Dfhvtut+t7vZ6yLItbnkypz/NcFu9jwFGKUgxFuTxnGxjEo8zDwONm9BrwzYULFz4zo+PA08CtGxgN/bsGPGVG+8AnwIvAD7bsEHD64sWLSbHVdaKcVDE1PChpotTaTkqakfRS9O6gipIaCHhG0odra2vHw7tIx92S3pJ01niUBHIlkm5W0eDjypNIulNSwwzvMGWbJb0t6bSkKVN2QNIHkt6TtL00YFRKmZIEVztg1YhQniIfMfxX4Eq9Xg+TZCBYUq1WHfCLxS8Fjtfr9SDvSjod4IKCcmsLi+6nKAIO+NxiF4SHii0j+sAbht1D0VodoJmZmWEr7Xa7HsAbMYLRPusMrVKkhAO+AHomvNGwFxSvRGQ61mq1BAxOnTpFnucJkNRqNQEDby6JczixXTkKdi+zPjmEPI1DMZwiDfuUYjyaMN3hQ8EHOzMzMyNfBmEScb1eT3bCN4F3KeVpJBN3pqBrBXgeeCXotYMMPVOr1YZfEuWxNnxJDIf7qM+GEvuyiukx7tsjMlGqpZJ8o9Hw9pWS/Ac0HxmxF+1AKQAAAABJRU5ErkJggg==);background-position:50% 30px;background-size:auto 24px;border-radius:10px}.dimina-toast p{color:#fff;text-overflow:ellipsis;text-align:center;justify-content:center;align-items:center;font-size:14px;line-height:160px;display:flex;overflow:hidden}.dimina-dialog-mask{z-index:1100;opacity:0;background:#00000080;transition:opacity .2s;position:absolute;inset:0}.dimina-dialog-mask.show{opacity:1}.dimina-modal--occluded{display:none!important}.dimina-dialog{box-sizing:border-box;opacity:0;z-index:1110;pointer-events:none;background:#fff;border:0;border-radius:12px;outline:0;flex-direction:column;align-items:stretch;width:80%;max-width:320px;max-height:90%;padding:0;transition:transform .2s,opacity .2s;display:flex;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-45%)scale(.92)}.dimina-dialog.show{opacity:1;pointer-events:auto;transform:translate(-50%,-50%)scale(1)}.dimina-dialog .dimina-dialog__title{color:#000;text-align:center;margin:0;padding:24px 24px 8px;font-size:17px;font-weight:600;line-height:1.4}.dimina-dialog .dimina-dialog__content{color:#333;text-align:center;word-break:break-word;white-space:pre-wrap;margin:0;padding:16px 24px 24px;font-size:15px;line-height:1.5}.dimina-dialog .dimina-dialog__buttons{border-top:1px solid #0000001a;width:100%;display:flex}.dimina-dialog .dimina-dialog__button{-webkit-user-select:none;user-select:none;text-align:center;color:#000;cursor:pointer;appearance:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;background:0 0;border:0;outline:none;flex:1;padding:12px 0;font-family:inherit;font-size:16px;font-weight:500;line-height:1.41176;text-decoration:none;display:block;position:relative;overflow:hidden}.dimina-dialog .dimina-dialog__button:focus,.dimina-dialog .dimina-dialog__button:focus-visible{outline:none}.dimina-dialog .dimina-dialog__button+.dimina-dialog__button:before{content:"";transform-origin:0 0;background:#0000001a;width:1px;position:absolute;top:0;bottom:0;left:0;transform:scaleX(.5)}.dimina-dialog .dimina-dialog__button:active{background:#0000000a}.dimina-action-sheet-mask{z-index:2000;opacity:0;background:#0006;transition:opacity .2s;position:fixed;inset:0}.dimina-action-sheet-mask.show{opacity:1}.dimina-action-sheet{z-index:2001;padding-bottom:env(safe-area-inset-bottom,12px);background:#fff;border-radius:24px 24px 0 0;transition:transform .2s;position:fixed;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(100%);box-shadow:0 -2px 16px #00000014}.dimina-action-sheet .dimina-action-sheet-item{text-align:center;cursor:pointer;background:#fff;border-bottom:1px solid #f2f2f2;padding:18px 0;font-size:18px}.dimina-action-sheet .dimina-action-sheet-item:last-child{border-bottom:none}.dimina-action-sheet .dimina-action-sheet-cancel{text-align:center;color:#333;cursor:pointer;background:#fff;border-radius:12px;margin-top:8px;padding:18px 0;font-size:18px;box-shadow:0 1px 4px #00000008}.dimina-action-sheet.show{transform:translateY(0)}.dimina-mini-app__tabbar{z-index:100;position:absolute;bottom:0;left:0;right:0}.dimina-tabbar{box-sizing:border-box;height:69.784px;margin-bottom:env(safe-area-inset-bottom);border-top:1px solid #e0e0e0;flex-direction:row;justify-content:space-around;align-items:center;display:flex}.dimina-tabbar-item{cursor:pointer;-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4.576px;transition:all .2s;display:flex;position:relative}.dimina-tabbar-item:active{opacity:.7}.dimina-tabbar-icon{object-fit:contain;width:24.024px;height:24.024px}.dimina-tabbar-icon-default{display:block}.dimina-tabbar-icon-selected{display:none}.dimina-tabbar-text{text-align:center;font-size:9.152px;line-height:1.2;transition:color .2s}.dimina-tabbar-badge{box-sizing:border-box;color:#fff;text-align:center;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;background:#fa5151;border-radius:8.008px;min-width:16.016px;max-width:54.912px;padding:1.144px 4.576px;font-size:9.152px;line-height:1;position:absolute;top:8.008px;left:50%;overflow:hidden;transform:translate(8.008px)}.dimina-tabbar-red-dot{pointer-events:none;background:#fa5151;border-radius:50%;width:6.864px;height:6.864px;position:absolute;top:9.152px;left:50%;transform:translate(11.44px)}.dimina-native-window{position:absolute;inset:0}.dimina-application{z-index:1;background-color:#000;position:absolute;inset:0}.dimina-native-view{background-color:#0000;position:absolute;inset:0}.dimina-native-view--before-presenting{border-radius:40px;overflow:hidden}.dimina-native-view--presenting{transform-origin:50%;overflow:hidden;transform:scale(.9)translateY(10px)rotate(0);border-radius:40px!important}.dimina-native-view--before-enter{transform:translate(100%);box-shadow:-6px 0 16px #00000014,-3px 0 6px -4px #0000001f,-9px 0 28px 8px #0000000d}.dimina-native-view--enter-anima{transition:transform var(--dimina-present-transition-ms) cubic-bezier(.32, .72, 0, 1), border-radius var(--dimina-present-transition-ms) cubic-bezier(.32, .72, 0, 1)}.dimina-native-view--instage{transform:translate(0)!important}.dimina-native-view--slide-out{transform:translate(-100%)}.dimina-native-view--linear-anima{transition:transform var(--dimina-present-transition-ms) linear}.dimina-native-view--before-present{transform:translateY(100%);box-shadow:0 0 #0000,0 -10px 16px -4px #0000001f,0 0 #0000}.dimina-app__page-view{background-color:#ededed;position:absolute;inset:0}.dimina-app-navigation{box-sizing:content-box;z-index:10;background-color:#ededed;height:50.336px;padding-top:50.336px;display:flex;position:absolute;top:0;left:0;right:0}.dimina-app-navigation .dimina-app-navigation__content{justify-content:center;align-items:center;width:100%;display:flex;position:relative}.dimina-app-navigation .dimina-app-navigation__blank{background-size:11.44px 20.02px;width:11.44px;height:50.336px;position:absolute;top:0;left:19.448px}.dimina-app-navigation .dimina-app-navigation__left-btn{cursor:pointer;background:url(/images/mini-arrow-left.png) 0/11.44px 20.02px no-repeat;width:11.44px;height:50.336px;display:none;position:absolute;top:0;left:19.448px}.dimina-app-navigation .dimina-app-navigation__title{text-align:center;color:#333;font-size:19.448px}.dimina-app-navigation .dimina-app-navigation__right-btn{cursor:pointer;background:url(/images/more.png) 50%/20.02px no-repeat;width:25.74px;height:50.336px;position:absolute;top:0;right:18.876px}.dimina-app__mini-content{box-sizing:border-box;flex-direction:column;height:100%;min-height:0;padding-top:100.672px;display:flex}.dimina-app__mini-content .dimina-app__mini-search{background-color:#ededed;flex:none;padding:17.16px 9.152px}.dimina-app__mini-content .dimina-app__mini-search-input{background-color:#fff;border-radius:5.72px;justify-content:center;align-items:center;height:41.184px;display:flex}.dimina-app__mini-content .dimina-app__mini-search-input-placeholder{box-sizing:border-box;color:#000;text-align:left;background:url(/images/search.jpg) 22.88px/18.876px 18.876px no-repeat;border:none;outline:none;width:100%;height:100%;padding:0 22.88px 0 51.48px;font-size:18.876px;font-weight:300}.dimina-app__mini-content .dimina-app__mini-search-input-placeholder::placeholder{color:#b3b3b3}.dimina-app__mini-used{background-color:#fff;border-top:1px solid #e6e6e6;border-bottom:1px solid #e6e6e6;flex-direction:column;flex:auto;min-height:0;padding-left:18.304px;display:flex}.dimina-app__mini-used .dimina-app__mini-used-title{color:#737373;flex:none;padding:17.16px 0;font-size:14.872px;font-weight:400}.dimina-app__mini-used .dimina-app__mini-used-list{-webkit-overflow-scrolling:touch;flex:auto;min-height:0;overflow-y:auto}.dimina-app__mini-used .dimina-app__mini-used-list-item{-webkit-user-select:none;user-select:none;cursor:pointer;padding-left:90.376px;list-style:none;position:relative}.dimina-app__mini-used .dimina-app__mini-used-list-item:last-child .dimina-app__mini-used-name{border:none}.dimina-app__mini-used .dimina-app__mini-used-logo{border-radius:50%;width:57.2px;height:57.2px;position:absolute;top:50%;left:10.296px;overflow:hidden;transform:translateY(-50%)}.dimina-app__mini-used .dimina-app__mini-used-logo img{width:100%;height:100%}.dimina-app__mini-used .dimina-app__mini-used-name{color:#333;border-bottom:1px solid #e4e4e4;padding-top:37.752px;padding-bottom:37.752px;font-size:18.876px}.dimina-app__mini-used .dimina-app__mini-used-state{text-align:center;color:#8a8a8a;padding:54.912px 18.304px 68.64px 0;font-size:16.016px}#root{background:linear-gradient(43deg,#4158d0 0%,#c850c0 46%,#ffcc70 100%);justify-content:center;padding-top:20px;padding-bottom:20px;display:flex;position:absolute;inset:0;overflow-y:scroll}@media (hover:none) and (pointer:coarse),(width<=480px){#root{background:#000;padding:0;overflow-y:hidden}}:root{--x:0;--y:0;--xp:0;--yp:0;--hue:calc(0 + (var(--xp) * 500));--bg:#1a1a1a;--size:100px;--glow:radial-gradient(50% 50% at center, hsl(var(--hue) 80% 85%), hsl(var(--hue) 80% 70%), transparent) calc((var(--x) * 1px) - (var(--size) * .5)) calc((var(--y) * 1px) - (var(--size) * .5)) / var(--size) var(--size) no-repeat fixed}#iphone{background:#343232;border-radius:48px;width:429px;height:885px;position:relative}@media (hover:none) and (pointer:coarse),(width<=480px){#iphone{background:0 0;border-radius:0;width:100%;height:100%}}#iphone .iphone__screen{z-index:100;border-radius:40px;justify-content:center;display:flex;position:absolute;inset:10px;overflow:hidden}#iphone .iphone__screen .iphone__screen-sleep-mask{z-index:300;opacity:0;pointer-events:none;background:#000;transition:opacity 80ms ease-out;position:absolute;inset:0}#iphone .iphone__screen.iphone__screen--sleeping .iphone__screen-sleep-mask{opacity:1;pointer-events:auto}@media (hover:none) and (pointer:coarse),(width<=480px){#iphone .iphone__screen{border-radius:0;inset:0}}#iphone .iphone__screen .iphone__status-bar{z-index:100;pointer-events:none;letter-spacing:-.3px;justify-content:space-between;align-items:center;height:48px;padding:0 30px 0 40px;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,system-ui,sans-serif;font-size:17px;font-weight:590;display:flex;position:absolute;left:0;right:0}#iphone .iphone__screen .iphone__status-bar .status-bar__left{align-items:center;display:flex}#iphone .iphone__screen .iphone__status-bar .status-bar__right{align-items:center;gap:5.5px;font-size:17px;display:flex}#iphone .iphone__screen .iphone__status-bar .status-bar__signal{opacity:1;flex:none;width:20px;height:12px;display:block}#iphone .iphone__screen .iphone__status-bar .status-bar__wifi{opacity:1;flex:none;width:18px;height:14px;display:block}#iphone .iphone__screen .iphone__status-bar .status-bar__battery{opacity:1;width:27px;height:13px}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white{color:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__signal{fill:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__wifi{fill:#fff;stroke:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__battery rect:last-child,#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__battery path{fill:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__battery rect:first-child{stroke:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black{color:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__signal{fill:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__wifi{fill:#000;stroke:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__battery rect:last-child,#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__battery path{fill:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__battery rect:first-child{stroke:#000}#iphone .iphone__screen .iphone__screen_dynamic-island{-webkit-user-select:none;user-select:none;cursor:pointer;z-index:100;background:linear-gradient(var(--bg), var(--bg)) padding-box, var(--glow), linear-gradient(black, black) border-box;touch-action:none;border:2px solid #0000;border-radius:17px;justify-content:center;align-items:center;width:106px;height:27px;padding:0 10px;transition:background-size .24s,width .3s cubic-bezier(.34,1.56,.64,1),height .3s cubic-bezier(.34,1.56,.64,1),margin .3s cubic-bezier(.34,1.56,.64,1);display:flex;position:absolute;top:8px;box-shadow:inset 0 1px #ffffff26}#iphone .iphone__screen .iphone__screen_dynamic-island.island-hover{width:112px;height:28.5px;margin-top:-.7px;margin-left:-3px}#iphone .iphone__screen .iphone__screen_dynamic-island:hover img{opacity:1}#iphone .iphone__screen .iphone__screen_dynamic-island:before{content:"";background:var(--bg);z-index:2;pointer-events:none;border-radius:1rem;position:absolute;inset:0;box-shadow:inset 0 1px #ffffff26}#iphone .iphone__screen .iphone__screen_dynamic-island:after{content:"";filter:blur(20px);background:var(--glow);pointer-events:none;border:4px solid #0000;border-radius:1rem;position:absolute;inset:-4px}#iphone .iphone__screen .iphone__screen_dynamic-island span{background:var(--glow);color:#0000;z-index:2;-webkit-background-clip:text;background-clip:text;justify-content:center;align-items:center;width:100%;height:100%;line-height:27px;display:flex;position:relative;inset:0}#iphone .iphone__screen .iphone__screen_dynamic-island span img{opacity:.2;max-width:100%;height:auto;transition:opacity .3s;display:block}@media (hover:none) and (pointer:coarse) and (orientation:portrait),(width<=480px) and (orientation:portrait){#iphone .iphone__screen .iphone__screen_dynamic-island span img{opacity:1}}#iphone .iphone__screen .iphone__apps{width:100%;height:100%}#iphone .power-btn{z-index:120;cursor:pointer;touch-action:manipulation;transform-origin:0;background:#343232;border:0;border-radius:0 6px 6px 0;outline:none;width:9px;height:92px;padding:0;transition:transform 60ms,filter 80ms,box-shadow 80ms;position:absolute;top:216px;right:-7px;overflow:hidden;box-shadow:inset 1px 0 #ffffff14,inset -1px 0 1px #00000080,2px 0 4px #0003}#iphone .power-btn:before{content:"";opacity:.75;pointer-events:none;background:linear-gradient(90deg,#ffffff14,#0000 42%),linear-gradient(#ffffff29,#0000 22% 78%,#00000038);border-radius:0 5px 5px 0;position:absolute;inset:3px 1px 3px 2px}#iphone .power-btn:after{content:"";pointer-events:none;background:#343232;border-radius:1px 0 0 1px;width:3px;position:absolute;top:1px;bottom:1px;left:-1px;box-shadow:inset -1px 0 1px #00000052,inset 1px 0 #ffffff0d}#iphone .power-btn:hover{filter:brightness(1.28);background:#4a4646;box-shadow:inset 1px 0 #ffffff24,inset -1px 0 #ffffff2e,inset -2px 0 3px #ffffff1f,inset 0 1px 1px #ffffff29,inset 0 -1px 1px #00000047,3px 0 5px #0003}#iphone .power-btn:hover:before{opacity:1;background:linear-gradient(90deg,#ffffff3d,#0000 50%),linear-gradient(#fff3,#0000 20% 78%,#00000029)}#iphone .power-btn:focus-visible{box-shadow:0 0 0 2px #ffffff5c,inset 1px 0 #ffffff1f,inset -1px 0 1px #00000085,3px 0 6px #0000003d}#iphone .power-btn:active{filter:brightness(.86);transform:translate(-1px)scaleX(.88);box-shadow:inset 2px 0 2px #0000006b,1px 0 3px #0000003d}@media (hover:none) and (pointer:coarse),(width<=480px){#iphone .power-btn{display:none}}:root{--dimina-present-transition-ms:.54s}*{margin:0;padding:0}body{font-family:SF Pro SC,SF Pro Text,SF Pro Icons,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400}
|
|
1
|
+
.dimina-native-webview{width:100%;height:100%;display:flex;position:absolute;top:0;left:0}.dimina-native-webview.dimina-native-webview--custom-nav .dimina-native-webview__navigation{display:none}.dimina-native-webview.dimina-native-webview--custom-nav .dimina-native-webview__body{padding-top:0}.dimina-native-webview__navigation{box-sizing:content-box;z-index:10;background-color:#f7f7f7;height:50.336px;padding-top:50.336px;display:flex;position:absolute;top:0;left:0;right:0}.dimina-native-webview__navigation .dimina-native-webview__navigation-content{justify-content:center;align-items:center;width:100%;display:flex;position:relative}.dimina-native-webview__navigation .dimina-native-webview__navigation-content .dimina-native-webview__navigation-left-btn{cursor:pointer;width:11.44px;height:50.336px;position:absolute;top:0;left:19.448px}.dimina-native-webview__navigation .dimina-native-webview__navigation-content .dimina-native-webview__navigation-home-btn{cursor:pointer;background-position:50%;background-repeat:no-repeat;background-size:22.88px 22.88px;border-radius:50%;width:36.608px;height:36.608px;display:none;position:absolute;top:6.864px;left:17.16px}.dimina-native-webview__navigation .dimina-native-webview__navigation-content .dimina-native-webview__navigation-home-btn.dimina-native-webview__navigation-home-btn--after-back{left:42.328px}.dimina-native-webview__navigation .dimina-native-webview__navigation-title{text-align:center;font-size:19.448px}.dimina-native-webview__navigation.dimina-native-webview__navigation--white .dimina-native-webview__navigation-title{color:#fff}.dimina-native-webview__navigation.dimina-native-webview__navigation--white .dimina-native-webview__navigation-left-btn{background:url(/images/mini-arrow-left-white.png) 0/11.44px 20.02px no-repeat}.dimina-native-webview__navigation.dimina-native-webview__navigation--white .dimina-native-webview__navigation-home-btn{background-color:#ffffff3d;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z' fill='%23fff'/%3E%3C/svg%3E")}.dimina-native-webview__navigation.dimina-native-webview__navigation--black .dimina-native-webview__navigation-title{color:#000}.dimina-native-webview__navigation.dimina-native-webview__navigation--black .dimina-native-webview__navigation-left-btn{background:url(/images/mini-arrow-left.png) 0/11.44px 20.02px no-repeat}.dimina-native-webview__navigation.dimina-native-webview__navigation--black .dimina-native-webview__navigation-home-btn{background-color:#d6d6d6;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z' fill='%23000'/%3E%3C/svg%3E")}.dimina-native-webview__body{flex:1;padding-top:100.672px;display:flex}.dimina-native-webview__root{flex:1;position:relative;overflow:hidden}.dimina-native-webview__window{border:0;width:100%;height:100%;position:absolute;top:0;left:0}.dimina-mini-app,.dimina-mini-app__webviews,.dimina-mini-app__launch-screen{background-color:#fff;position:absolute;inset:0}.dimina-mini-app-navigation__actions{box-sizing:border-box;z-index:10;border-radius:18.304px;flex-direction:row;width:94.952px;height:36.608px;display:flex;position:absolute;top:46.904px;right:8.008px;overflow:hidden}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black{background-color:#fffc;border:1px solid #eaeaeacc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black .dimina-mini-app-navigation__actions-variable{background-image:url(/images/mini-action.png)}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black .dimina-mini-app-navigation__actions-variable:after{background-color:#ccc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--black .dimina-mini-app-navigation__actions-close{background-image:url(/images/mini-close.png)}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white{background-color:#0003;border:1px solid #eaeaeacc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white .dimina-mini-app-navigation__actions-variable{background-image:url(/images/mini-action-white.png)}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white .dimina-mini-app-navigation__actions-variable:after{background-color:#ccc}.dimina-mini-app-navigation__actions.dimina-mini-app-navigation__actions--white .dimina-mini-app-navigation__actions-close{background-image:url(/images/mini-close-white.png)}.dimina-mini-app-navigation__actions li{cursor:pointer;flex:1;list-style:none;position:relative}.dimina-mini-app-navigation__actions-variable{background-position:50%;background-repeat:no-repeat;background-size:21.736px}.dimina-mini-app-navigation__actions-variable:after{content:"";opacity:.8;width:1px;height:22.88px;position:absolute;top:50%;right:0;transform:translateY(-50%)}.dimina-mini-app-navigation__actions-close{background-position:50%;background-repeat:no-repeat;background-size:20.02px 20.02px}@keyframes animX{0%{left:-4.004px}to{left:72.644px}}@keyframes animY{0%{top:-4.004px}to{top:72.644px}}.dimina-mini-app__launch-screen{z-index:8;background-color:#fff;display:none}.dimina-mini-app__launch-screen .dimina-mini-app__launch-screen-content{flex-direction:column;align-items:center;display:flex;position:absolute;top:308.88px;left:50%;transform:translate(-50%)}.dimina-mini-app__launch-screen .dimina-mini-app__logo{width:76.648px;height:76.648px;position:relative}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__logo-img{z-index:1;border-radius:50%;width:48.048px;height:48.048px;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__logo-img img{width:100%;height:100%;position:absolute;top:0;left:0}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__logo-circle{z-index:2;box-sizing:border-box;border:1px solid #e9e9e9;border-radius:50%;width:76.648px;height:76.648px;position:absolute;top:0;left:0}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__green-point{z-index:3;background-color:#fff;border-radius:50%;width:8.008px;height:8.008px;animation:.8s cubic-bezier(.36,0,.64,1) -400ms infinite alternate animX,.8s cubic-bezier(.36,0,.64,1) infinite alternate animY;position:absolute;top:0;left:0}.dimina-mini-app__launch-screen .dimina-mini-app__logo .dimina-mini-app__green-point:after{content:"";background-color:#59be6b;border-radius:50%;width:4.004px;height:4.004px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.dimina-mini-app__launch-screen .dimina-mini-app__name{color:#333;text-align:center;padding-top:20.592px;font-size:18.876px}.dimina-mini-app__webviews{z-index:1;box-sizing:border-box;padding-bottom:10px}.dimina-mini-app-menu__mask{z-index:999;opacity:0;background:#0000006b;transition:opacity .24s ease-in-out;display:none;position:fixed;inset:0}.dimina-mini-app-menu__mask.show{opacity:1}.dimina-mini-app-menu{padding:0 16.016px 29.744px;padding-bottom:max(29.744px, 16.016px + env(safe-area-inset-bottom));z-index:1000;background:linear-gradient(#f8fafc 0%,#fff 18% 100%);border-radius:18.304px 18.304px 0 0;flex-direction:column;gap:0;max-height:240.24px;transition:transform .24s ease-in-out;display:flex;position:fixed;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(100%);box-shadow:0 -3.432px 22.88px #0f172a1f}.dimina-mini-app-menu.show{transform:translateY(0)}.dimina-mini-app-menu__handle{background:#0f172a24;border-radius:999px;flex-shrink:0;width:41.184px;height:4.576px;margin:10.296px auto 13.728px}.dimina-mini-app-menu__app{align-items:center;width:100%;padding-bottom:12.584px;display:flex}.dimina-mini-app-menu__app-logo{background:#f1f5f9;border-radius:13.728px;flex-shrink:0;width:50.336px;height:50.336px;margin-right:11.44px;overflow:hidden;box-shadow:inset 0 0 0 1px #0f172a0f}.dimina-mini-app-menu__app-logo-img{object-fit:cover;width:100%;height:100%;display:block}.dimina-mini-app-menu__app-meta{flex:1;min-width:0}.dimina-mini-app-menu__app-name{color:#0f172a;margin:0 0 4.576px;font-size:19.448px;font-weight:700;line-height:1.3}.dimina-mini-app-menu__app-id{color:#94a3b8;word-break:break-all;margin:0 0 3.432px;font-size:12.584px;line-height:1.4}.dimina-mini-app-menu__app-desc{color:#64748b;word-break:break-all;margin:0;font-size:13.728px;line-height:1.5}.dimina-mini-app-menu__quick-actions{grid-template-columns:repeat(3,minmax(0,1fr));gap:9.152px;width:100%;padding-bottom:13.728px;display:grid}.dimina-mini-app-menu__quick-action{color:#0f172a;background:#f8fafc;border:0;border-radius:13.728px;flex-direction:column;justify-content:center;align-items:center;gap:5.72px;padding:9.152px 3.432px;display:flex;box-shadow:inset 0 0 0 1px #0f172a0d}.dimina-mini-app-menu__quick-action.is-danger{color:#dc2626}.dimina-mini-app-menu__quick-action.is-danger .dimina-mini-app-menu__quick-action-icon{color:#dc2626;background:#fee2e2}.dimina-mini-app-menu__quick-action-icon{background:#e2e8f0;border-radius:50%;justify-content:center;align-items:center;width:29.744px;height:29.744px;font-size:12.584px;font-weight:700;display:flex}.dimina-mini-app-menu__quick-action-label{font-size:12.584px;line-height:1.4}.dimina-mini-app-menu__footer{width:100%;margin-top:5.72px;display:block}.dimina-mini-app-menu__footer-btn{color:#0f172a;background:#eef2f7;border:0;border-radius:12.584px;width:100%;height:48.048px;font-size:16.016px;font-weight:600}.dimina-toast-mask{z-index:1040;pointer-events:auto;background:0 0;position:absolute;inset:0}.dimina-toast{z-index:1050;box-sizing:border-box;pointer-events:none;background-color:#4c4c4c;background-repeat:no-repeat;width:120px;height:120px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.dimina-toast.dimina-toast--text-only{border-radius:6px;width:auto;max-width:70%;height:auto;padding:12px 18px}.dimina-toast.dimina-toast--text-only p{color:#fff;text-align:center;white-space:pre-wrap;font-size:14px;line-height:1.4}.dimina-toast.dimina-toast--success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACBCAYAAACsCAq9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF7WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0wNS0yNFQwNzowOTo0MyswODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDUtMjRUMDc6MTE6MzgrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDUtMjRUMDc6MTE6MzgrMDg6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M2FkYzc0OWQtNzY3ZC00NTcyLWFlOGMtMDMyNDVjYTMyYzFhIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc3RjM2Rjg1RTRFNzExRUQ5MDI1REY5OTdGMjQ0MDJDIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6NzdGMzZGODVFNEU3MTFFRDkwMjVERjk5N0YyNDQwMkMiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3N0YzNkY4MkU0RTcxMUVEOTAyNURGOTk3RjI0NDAyQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3N0YzNkY4M0U0RTcxMUVEOTAyNURGOTk3RjI0NDAyQyIvPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozYWRjNzQ5ZC03NjdkLTQ1NzItYWU4Yy0wMzI0NWNhMzJjMWEiIHN0RXZ0OndoZW49IjIwMjMtMDUtMjRUMDc6MTE6MzgrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvICKDoAAAVwSURBVHic7d1bVus4EEbhTa8zMDGyLkaGe0AwhZyHoCaE2PFFlyr53y/wgpM43xKJLdkvl8sFpTz05/Pzs/dzULF6B/4DrPSG/5TeoBq2xBVi/h0Kg/yn5MbUsCW+Ieb+RRhV4xK/IeaKghRGtVRiHmKuGEhhVHMlnkPMFQH58vHxcXQbarwS6yHe9gpMex9UI6O6L7EPIl9/l/Y+sDCq2xL7IeZ2gxRGlUsch5jbBVIYFZSFmNsMUhiVUR5ibhNIYTx3xvWwTM1WgxTG82bUh5hbBVIYz5nRDmLuKUhhPF9Ge4i5RZDCeK6MfhBzs48vjOfJ6A8RFg4jCeM5MnxAzCUegBTG8TN8Qcwl7kAK49gZPiHmEjcghXHcDN8Qc4kvkJrPOGZGDIi3vWpkHC8jIERgEsaxMoJCBH1mHCkjMEQQxlEygkMEYRwhYwCIIIzRMwaBCMIYOWMgiCCMUTMGgwjCGDEjFsSJlYv7dUm8WB1aJN+hiSvEVWlkjNPQEEEYozQ8RBDGCJ0CIgij904DEYTRc6eCCMLotdNBBGH02CkhgjB667QQQRi9lIgH8Y2CEEFnYDyUqHdJulq9UeEOWRoZ+5YQxP8Txn4lBPFHwtinhCD+ShjblxDEhwlj2xKCOJswtishiIsJY5sSgvi0WhiNWAdwa5YQxFXVwGhc12hEO6NQI0MQV1cao/FzsdCZQRqxFk5BR4hQFqPxeOefEaQhiJsrhdFY3vnvdH6hDTMEcVclMBrrdn6Ru7U7zxDE3R29cm1i+wd0Ny++cIYgHurIyJjY901xxBHSEMTD7cWYOHbIYiSQhiAWaQ/GRJljZyOANASxWFsxJsoexI0M0hDEom3BmKhzNiEiSEMQi7dlDUzNnZ+3bRUfo1RGPIirLknXu7UjY4uzKBFGSEMQq7XmOGPr03kThZdAFsoQxKo9Gxl7nFdO+JvpYghi9ZYw9pzgkPAD0hDEJs1h9DDTJtEfpCGIzXqE0egPMZfoB9IQxKbdYzT8vQGJ9iO14W8/PCs0RPj5bdrw/wa02OGG//1wX3iI8D0yGjHegNojpBFjP9w2BES4YjRivQG1QBqx9sMEvDAIRLhinHo/iR2VBvlOPIgeTwwcKmOMONSXAunhMNaWJgaECN+fGSfigrSDf5+KPJM2TQwKEX4f2okIcu8EC0F01qOD3mcAKYgOmzsdODJIQXTa0kSJEUEKouOeTSF75TpdPVJzIAXReWtmehvxQQpigLZcUcKIdWAYrm9q6vwctuZ+4VSttl7exIgHMlKnhQjb100b8f5lR+nUEGHfFSUMgSzd6SHC/mvtGAJZKkH86shVyAyBPJog3nT0YqGGQO5NEO8qdeVagdyWID7o6JVrb0v0X1oaIUGcqeTdDiZOeNZgY4K4UOn7wEwI5FyC+KQad8iaEMj7BHFFte4dOCGQOUFcWc27qk7EnBNZMkHcUMlv00tFm8JVIkHcWKv7TZ9thBTEHbXCCOcBKYg7a4kRxgcpiAdqjRHGBSmIB+uBEWIu9FpKEAvUCyOMM8FCEAu15aZENbKvn1HX1Yz6kaNLPUfGnBFzhBTEwnnACPFACmKFvGCEOCAFsVKeMIJ/kIJYMW8YwS9IQaycR4zgD6QgNsgrRvADUhAb5Rkj9AcpiA1rNZ/xaIn2Kw8FsXHeR8bcRLtlDBOD3ewnSlEwQhuQLR5DzRQJI9TFUnPbakXRMEIdNDW2qTYWESOU/Vw3IYguiooxd/Qb74Qguik6RtgPckIQXTUCRtgOckIQ3TUKRlgPckIQXTYSRni+0OsNQXTbaBhh/ny2Fk45b0SM8BukIAao9+rAmtnM78ppL5fLpfdzUAoY99+0Cthf4VNi31qSlvAAAAAASUVORK5CYII=);background-position:50% 30px;background-size:auto 24px;border-radius:10px}.dimina-toast.dimina-toast--loading{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAE9klEQVRIiYWXS4gcVRSGv3uremY6MXEmr5E8FDUItpGEVBa6UDoguPGxEdSQQJa68YGggkJ6dqIGQSJRIYK4kQ4oLly4kGkM6MIuRKRbkcAgE8cMI07IyLSR6f5d1Lk9tysTLCi6q/57zrn3nP88imazmczOzqbNZjOR5CR5Scns7GwqKbHbS3KNRsPbc1XSz5LmJG2J5SRdJyfJm76AOSIDXlLSbrcrkiq2KC0pCti01q/bAtbpdMZK68NGKpJizPulpSUBAhzgsyxz9gywE9gF+OhWhIfLA75Wqw3s/7fATysrK5Om1wEDuwEc5opEUmVubm5CUsXc7u1keyTtkDRuO/eSdkYnvl3SuHnKS3pS0u+S5iVNRScN4UglVZDkTWgsUhzitUnSXkn7zHDAdkWG7zBlXtJNZnRB0jNRyEKsg9tTD7gsywAG58+fHwC0Wq3g1n/tFjAVuzVy8yBy/Rlz6xxwrhSWpNvt+jzPAUTEtrCzRKPkGpO0W9LuhYWFTYbtCMddXV3dazL77KSXJD1QyopE0n7zXirJEzHvkKQDy8vLkxpldGqx2mN3ePeEpBOR4u/Nzc1S6myS9JqktqSvA6udpMTcczBy4VXgN2AtctXWkuuJfh1wBHgWeMHkAR4FnjNZgO8ML5hmghXgNmAyov6fwKUotiEt4nRyjKaMKFLwHWC/rVmzTf1o63CSHKN5mgB3AakJLQELhvWJc/F6owF7Hzhs/z+y+5qt83meO4xQlVKeeovrEUnbyrloMQxVLMZCytwr6aykyQ2wMUlpIFecb8MkL/2OYKXSOsQ6nc6YYaltMJYLmEdSxdKkKmlCUvXy5cub7TlmZ3zSNFI8UpODUXu31U49JWm7eW+q0+mMOUlHgS0lhoYrBxYjzOd5TpZlarVaANTr9SFmv6Fo3Ae8WiJhWHspkGkjo2yEZVnGBkZjufBuvGQ0vipOUgUYo8TQxcVFTU9P/xMJllNmqDTPc2ddrYxts83HmANWRrqTMfv/+qmPsajBDIkUKle73Y57dEyydCSdotbm5+fnq5Iek3RLOZ2izdwonQ5L+lhSdqN0cpKSbrebWBMfmCsy1gvAH8CXkauC6+KYxpgHTgAP2burwOvAFdYHib6TlEYKdlLU1wSg3+//lSTJV8Dfhvtut+t7vZ6yLItbnkypz/NcFu9jwFGKUgxFuTxnGxjEo8zDwONm9BrwzYULFz4zo+PA08CtGxgN/bsGPGVG+8AnwIvAD7bsEHD64sWLSbHVdaKcVDE1PChpotTaTkqakfRS9O6gipIaCHhG0odra2vHw7tIx92S3pJ01niUBHIlkm5W0eDjypNIulNSwwzvMGWbJb0t6bSkKVN2QNIHkt6TtL00YFRKmZIEVztg1YhQniIfMfxX4Eq9Xg+TZCBYUq1WHfCLxS8Fjtfr9SDvSjod4IKCcmsLi+6nKAIO+NxiF4SHii0j+sAbht1D0VodoJmZmWEr7Xa7HsAbMYLRPusMrVKkhAO+AHomvNGwFxSvRGQ61mq1BAxOnTpFnucJkNRqNQEDby6JczixXTkKdi+zPjmEPI1DMZwiDfuUYjyaMN3hQ8EHOzMzMyNfBmEScb1eT3bCN4F3KeVpJBN3pqBrBXgeeCXotYMMPVOr1YZfEuWxNnxJDIf7qM+GEvuyiukx7tsjMlGqpZJ8o9Hw9pWS/Ac0HxmxF+1AKQAAAABJRU5ErkJggg==);background-position:50% 30px;background-size:auto 24px;border-radius:10px}.dimina-toast p{color:#fff;text-overflow:ellipsis;text-align:center;justify-content:center;align-items:center;font-size:14px;line-height:160px;display:flex;overflow:hidden}.dimina-dialog-mask{z-index:1100;opacity:0;touch-action:none;overscroll-behavior:contain;background:#00000080;transition:opacity .2s;position:absolute;inset:0}.dimina-dialog-mask.show{opacity:1}.dimina-modal--occluded{display:none!important}.dimina-dialog{box-sizing:border-box;overscroll-behavior:contain;opacity:0;z-index:1110;pointer-events:none;background:#fff;border:0;border-radius:12px;outline:0;flex-direction:column;align-items:stretch;width:80%;max-width:320px;max-height:90%;padding:0;transition:transform .2s,opacity .2s;display:flex;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-45%)scale(.92)}.dimina-dialog.show{opacity:1;pointer-events:auto;transform:translate(-50%,-50%)scale(1)}.dimina-dialog .dimina-dialog__title{color:#000;text-align:center;touch-action:none;margin:0;padding:24px 24px 8px;font-size:17px;font-weight:600;line-height:1.4}.dimina-dialog .dimina-dialog__content{color:#333;text-align:center;word-break:break-word;white-space:pre-wrap;overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;flex:auto;min-height:0;margin:0;padding:16px 24px 24px;font-size:15px;line-height:1.5;overflow-y:auto}.dimina-dialog .dimina-dialog__buttons{touch-action:none;border-top:1px solid #0000001a;width:100%;display:flex}.dimina-dialog .dimina-dialog__button{-webkit-user-select:none;user-select:none;text-align:center;color:#000;cursor:pointer;appearance:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;background:0 0;border:0;outline:none;flex:1;padding:12px 0;font-family:inherit;font-size:16px;font-weight:500;line-height:1.41176;text-decoration:none;display:block;position:relative;overflow:hidden}.dimina-dialog .dimina-dialog__button:focus,.dimina-dialog .dimina-dialog__button:focus-visible{outline:none}.dimina-dialog .dimina-dialog__button+.dimina-dialog__button:before{content:"";transform-origin:0 0;background:#0000001a;width:1px;position:absolute;top:0;bottom:0;left:0;transform:scaleX(.5)}.dimina-dialog .dimina-dialog__button:active{background:#0000000a}.dimina-action-sheet-mask{z-index:2000;opacity:0;background:#0006;transition:opacity .2s;position:fixed;inset:0}.dimina-action-sheet-mask.show{opacity:1}.dimina-action-sheet{z-index:2001;padding-bottom:env(safe-area-inset-bottom,12px);background:#fff;border-radius:24px 24px 0 0;transition:transform .2s;position:fixed;bottom:0;left:0;right:0;overflow:hidden;transform:translateY(100%);box-shadow:0 -2px 16px #00000014}.dimina-action-sheet .dimina-action-sheet-item{text-align:center;cursor:pointer;background:#fff;border-bottom:1px solid #f2f2f2;padding:18px 0;font-size:18px}.dimina-action-sheet .dimina-action-sheet-item:last-child{border-bottom:none}.dimina-action-sheet .dimina-action-sheet-cancel{text-align:center;color:#333;cursor:pointer;background:#fff;border-radius:12px;margin-top:8px;padding:18px 0;font-size:18px;box-shadow:0 1px 4px #00000008}.dimina-action-sheet.show{transform:translateY(0)}.dimina-mini-app__tabbar{z-index:100;position:absolute;bottom:0;left:0;right:0}.dimina-tabbar{box-sizing:border-box;height:69.784px;margin-bottom:env(safe-area-inset-bottom);border-top:1px solid #e0e0e0;flex-direction:row;justify-content:space-around;align-items:center;display:flex}.dimina-tabbar-item{cursor:pointer;-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4.576px;transition:all .2s;display:flex;position:relative}.dimina-tabbar-item:active{opacity:.7}.dimina-tabbar-icon{object-fit:contain;width:24.024px;height:24.024px}.dimina-tabbar-icon-default{display:block}.dimina-tabbar-icon-selected{display:none}.dimina-tabbar-text{text-align:center;font-size:9.152px;line-height:1.2;transition:color .2s}.dimina-tabbar-badge{box-sizing:border-box;color:#fff;text-align:center;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;background:#fa5151;border-radius:8.008px;min-width:16.016px;max-width:54.912px;padding:1.144px 4.576px;font-size:9.152px;line-height:1;position:absolute;top:8.008px;left:50%;overflow:hidden;transform:translate(8.008px)}.dimina-tabbar-red-dot{pointer-events:none;background:#fa5151;border-radius:50%;width:6.864px;height:6.864px;position:absolute;top:9.152px;left:50%;transform:translate(11.44px)}.dimina-native-window{position:absolute;inset:0}.dimina-application{z-index:1;background-color:#000;position:absolute;inset:0}.dimina-native-view{background-color:#0000;position:absolute;inset:0}.dimina-native-view--before-presenting{border-radius:40px;overflow:hidden}.dimina-native-view--presenting{transform-origin:50%;overflow:hidden;transform:scale(.9)translateY(10px)rotate(0);border-radius:40px!important}.dimina-native-view--before-enter{transform:translate(100%);box-shadow:-6px 0 16px #00000014,-3px 0 6px -4px #0000001f,-9px 0 28px 8px #0000000d}.dimina-native-view--enter-anima{transition:transform var(--dimina-present-transition-ms) cubic-bezier(.32, .72, 0, 1), border-radius var(--dimina-present-transition-ms) cubic-bezier(.32, .72, 0, 1)}.dimina-native-view--instage{transform:translate(0)!important}.dimina-native-view--slide-out{transform:translate(-100%)}.dimina-native-view--linear-anima{transition:transform var(--dimina-present-transition-ms) linear}.dimina-native-view--before-present{transform:translateY(100%);box-shadow:0 0 #0000,0 -10px 16px -4px #0000001f,0 0 #0000}.dimina-app__page-view{background-color:#ededed;position:absolute;inset:0}.dimina-app-navigation{box-sizing:content-box;z-index:10;background-color:#ededed;height:50.336px;padding-top:50.336px;display:flex;position:absolute;top:0;left:0;right:0}.dimina-app-navigation .dimina-app-navigation__content{justify-content:center;align-items:center;width:100%;display:flex;position:relative}.dimina-app-navigation .dimina-app-navigation__blank{background-size:11.44px 20.02px;width:11.44px;height:50.336px;position:absolute;top:0;left:19.448px}.dimina-app-navigation .dimina-app-navigation__left-btn{cursor:pointer;background:url(/images/mini-arrow-left.png) 0/11.44px 20.02px no-repeat;width:11.44px;height:50.336px;display:none;position:absolute;top:0;left:19.448px}.dimina-app-navigation .dimina-app-navigation__title{text-align:center;color:#333;font-size:19.448px}.dimina-app-navigation .dimina-app-navigation__right-btn{cursor:pointer;background:url(/images/more.png) 50%/20.02px no-repeat;width:25.74px;height:50.336px;position:absolute;top:0;right:18.876px}.dimina-app__mini-content{box-sizing:border-box;flex-direction:column;height:100%;min-height:0;padding-top:100.672px;display:flex}.dimina-app__mini-content .dimina-app__mini-search{background-color:#ededed;flex:none;padding:17.16px 9.152px}.dimina-app__mini-content .dimina-app__mini-search-input{background-color:#fff;border-radius:5.72px;justify-content:center;align-items:center;height:41.184px;display:flex}.dimina-app__mini-content .dimina-app__mini-search-input-placeholder{box-sizing:border-box;color:#000;text-align:left;background:url(/images/search.jpg) 22.88px/18.876px 18.876px no-repeat;border:none;outline:none;width:100%;height:100%;padding:0 22.88px 0 51.48px;font-size:18.876px;font-weight:300}.dimina-app__mini-content .dimina-app__mini-search-input-placeholder::placeholder{color:#b3b3b3}.dimina-app__mini-used{background-color:#fff;border-top:1px solid #e6e6e6;border-bottom:1px solid #e6e6e6;flex-direction:column;flex:auto;min-height:0;padding-left:18.304px;display:flex}.dimina-app__mini-used .dimina-app__mini-used-title{color:#737373;flex:none;padding:17.16px 0;font-size:14.872px;font-weight:400}.dimina-app__mini-used .dimina-app__mini-used-list{-webkit-overflow-scrolling:touch;flex:auto;min-height:0;overflow-y:auto}.dimina-app__mini-used .dimina-app__mini-used-list-item{-webkit-user-select:none;user-select:none;cursor:pointer;padding-left:90.376px;list-style:none;position:relative}.dimina-app__mini-used .dimina-app__mini-used-list-item:last-child .dimina-app__mini-used-name{border:none}.dimina-app__mini-used .dimina-app__mini-used-logo{border-radius:50%;width:57.2px;height:57.2px;position:absolute;top:50%;left:10.296px;overflow:hidden;transform:translateY(-50%)}.dimina-app__mini-used .dimina-app__mini-used-logo img{width:100%;height:100%}.dimina-app__mini-used .dimina-app__mini-used-name{color:#333;border-bottom:1px solid #e4e4e4;padding-top:37.752px;padding-bottom:37.752px;font-size:18.876px}.dimina-app__mini-used .dimina-app__mini-used-state{text-align:center;color:#8a8a8a;padding:54.912px 18.304px 68.64px 0;font-size:16.016px}#root{background:linear-gradient(43deg,#4158d0 0%,#c850c0 46%,#ffcc70 100%);justify-content:center;padding-top:20px;padding-bottom:20px;display:flex;position:absolute;inset:0;overflow-y:scroll}@media (hover:none) and (pointer:coarse),(width<=480px){#root{background:#000;padding:0;overflow-y:hidden}}:root{--x:0;--y:0;--xp:0;--yp:0;--hue:calc(0 + (var(--xp) * 500));--bg:#1a1a1a;--size:100px;--glow:radial-gradient(50% 50% at center, hsl(var(--hue) 80% 85%), hsl(var(--hue) 80% 70%), transparent) calc((var(--x) * 1px) - (var(--size) * .5)) calc((var(--y) * 1px) - (var(--size) * .5)) / var(--size) var(--size) no-repeat fixed}#iphone{background:#343232;border-radius:48px;width:429px;height:885px;position:relative}@media (hover:none) and (pointer:coarse),(width<=480px){#iphone{background:0 0;border-radius:0;width:100%;height:100%}}#iphone .iphone__screen{z-index:100;border-radius:40px;justify-content:center;display:flex;position:absolute;inset:10px;overflow:hidden}#iphone .iphone__screen .iphone__screen-sleep-mask{z-index:300;opacity:0;pointer-events:none;background:#000;transition:opacity 80ms ease-out;position:absolute;inset:0}#iphone .iphone__screen.iphone__screen--sleeping .iphone__screen-sleep-mask{opacity:1;pointer-events:auto}@media (hover:none) and (pointer:coarse),(width<=480px){#iphone .iphone__screen{border-radius:0;inset:0}}#iphone .iphone__screen .iphone__status-bar{z-index:100;pointer-events:none;letter-spacing:-.3px;justify-content:space-between;align-items:center;height:48px;padding:0 30px 0 40px;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,system-ui,sans-serif;font-size:17px;font-weight:590;display:flex;position:absolute;left:0;right:0}#iphone .iphone__screen .iphone__status-bar .status-bar__left{align-items:center;display:flex}#iphone .iphone__screen .iphone__status-bar .status-bar__right{align-items:center;gap:5.5px;font-size:17px;display:flex}#iphone .iphone__screen .iphone__status-bar .status-bar__signal{opacity:1;flex:none;width:20px;height:12px;display:block}#iphone .iphone__screen .iphone__status-bar .status-bar__wifi{opacity:1;flex:none;width:18px;height:14px;display:block}#iphone .iphone__screen .iphone__status-bar .status-bar__battery{opacity:1;width:27px;height:13px}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white{color:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__signal{fill:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__wifi{fill:#fff;stroke:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__battery rect:last-child,#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__battery path{fill:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--white .status-bar__battery rect:first-child{stroke:#fff}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black{color:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__signal{fill:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__wifi{fill:#000;stroke:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__battery rect:last-child,#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__battery path{fill:#000}#iphone .iphone__screen .iphone__status-bar.iphone__status-bar--black .status-bar__battery rect:first-child{stroke:#000}#iphone .iphone__screen .iphone__screen_dynamic-island{-webkit-user-select:none;user-select:none;cursor:pointer;z-index:100;background:linear-gradient(var(--bg), var(--bg)) padding-box, var(--glow), linear-gradient(black, black) border-box;touch-action:none;border:2px solid #0000;border-radius:17px;justify-content:center;align-items:center;width:106px;height:27px;padding:0 10px;transition:background-size .24s,width .3s cubic-bezier(.34,1.56,.64,1),height .3s cubic-bezier(.34,1.56,.64,1),margin .3s cubic-bezier(.34,1.56,.64,1);display:flex;position:absolute;top:8px;box-shadow:inset 0 1px #ffffff26}#iphone .iphone__screen .iphone__screen_dynamic-island.island-hover{width:112px;height:28.5px;margin-top:-.7px;margin-left:-3px}#iphone .iphone__screen .iphone__screen_dynamic-island:hover img{opacity:1}#iphone .iphone__screen .iphone__screen_dynamic-island:before{content:"";background:var(--bg);z-index:2;pointer-events:none;border-radius:1rem;position:absolute;inset:0;box-shadow:inset 0 1px #ffffff26}#iphone .iphone__screen .iphone__screen_dynamic-island:after{content:"";filter:blur(20px);background:var(--glow);pointer-events:none;border:4px solid #0000;border-radius:1rem;position:absolute;inset:-4px}#iphone .iphone__screen .iphone__screen_dynamic-island span{background:var(--glow);color:#0000;z-index:2;-webkit-background-clip:text;background-clip:text;justify-content:center;align-items:center;width:100%;height:100%;line-height:27px;display:flex;position:relative;inset:0}#iphone .iphone__screen .iphone__screen_dynamic-island span img{opacity:.2;max-width:100%;height:auto;transition:opacity .3s;display:block}@media (hover:none) and (pointer:coarse) and (orientation:portrait),(width<=480px) and (orientation:portrait){#iphone .iphone__screen .iphone__screen_dynamic-island span img{opacity:1}}#iphone .iphone__screen .iphone__apps{width:100%;height:100%}#iphone .power-btn{z-index:120;cursor:pointer;touch-action:manipulation;transform-origin:0;background:#343232;border:0;border-radius:0 6px 6px 0;outline:none;width:9px;height:92px;padding:0;transition:transform 60ms,filter 80ms,box-shadow 80ms;position:absolute;top:216px;right:-7px;overflow:hidden;box-shadow:inset 1px 0 #ffffff14,inset -1px 0 1px #00000080,2px 0 4px #0003}#iphone .power-btn:before{content:"";opacity:.75;pointer-events:none;background:linear-gradient(90deg,#ffffff14,#0000 42%),linear-gradient(#ffffff29,#0000 22% 78%,#00000038);border-radius:0 5px 5px 0;position:absolute;inset:3px 1px 3px 2px}#iphone .power-btn:after{content:"";pointer-events:none;background:#343232;border-radius:1px 0 0 1px;width:3px;position:absolute;top:1px;bottom:1px;left:-1px;box-shadow:inset -1px 0 1px #00000052,inset 1px 0 #ffffff0d}#iphone .power-btn:hover{filter:brightness(1.28);background:#4a4646;box-shadow:inset 1px 0 #ffffff24,inset -1px 0 #ffffff2e,inset -2px 0 3px #ffffff1f,inset 0 1px 1px #ffffff29,inset 0 -1px 1px #00000047,3px 0 5px #0003}#iphone .power-btn:hover:before{opacity:1;background:linear-gradient(90deg,#ffffff3d,#0000 50%),linear-gradient(#fff3,#0000 20% 78%,#00000029)}#iphone .power-btn:focus-visible{box-shadow:0 0 0 2px #ffffff5c,inset 1px 0 #ffffff1f,inset -1px 0 1px #00000085,3px 0 6px #0000003d}#iphone .power-btn:active{filter:brightness(.86);transform:translate(-1px)scaleX(.88);box-shadow:inset 2px 0 2px #0000006b,1px 0 3px #0000003d}@media (hover:none) and (pointer:coarse),(width<=480px){#iphone .power-btn{display:none}}:root{--dimina-present-transition-ms:.54s}*{margin:0;padding:0}body{font-family:SF Pro SC,SF Pro Text,SF Pro Icons,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400}
|
|
@@ -2,11 +2,12 @@ var e=(e=0)=>t=>`\u001B[${t+e}m`,t=(e=0)=>t=>`\u001B[${38+e};5;${t}m`,n=(e=0)=>(
|
|
|
2
2
|
`:`
|
|
3
3
|
`)+n,i=r+1,r=e.indexOf(`
|
|
4
4
|
`,i)}while(r!==-1);return a+=e.slice(i),a}var{stdout:p,stderr:m}=u,h=Symbol(`GENERATOR`),g=Symbol(`STYLER`),_=Symbol(`IS_EMPTY`),v=[`ansi`,`ansi`,`ansi256`,`ansi16m`],y=Object.create(null),b=(e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw Error("The `level` option should be an integer from 0 to 3");let n=p?p.level:0;e.level=t.level===void 0?n:t.level},x=e=>{let t=(...e)=>e.join(` `);return b(t,e),Object.setPrototypeOf(t,S.prototype),t};function S(e){return x(e)}Object.setPrototypeOf(S.prototype,Function.prototype);for(let[e,t]of Object.entries(s))y[e]={get(){let n=E(this,T(t.open,t.close,this[g]),this[_]);return Object.defineProperty(this,e,{value:n}),n}};y.visible={get(){let e=E(this,this[g],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var C=(e,t,n,...r)=>e===`rgb`?t===`ansi16m`?s[n].ansi16m(...r):t===`ansi256`?s[n].ansi256(s.rgbToAnsi256(...r)):s[n].ansi(s.rgbToAnsi(...r)):e===`hex`?C(`rgb`,t,n,...s.hexToRgb(...r)):s[n][e](...r);for(let e of[`rgb`,`hex`,`ansi256`]){y[e]={get(){let{level:t}=this;return function(...n){let r=T(C(e,v[t],`color`,...n),s.color.close,this[g]);return E(this,r,this[_])}}};let t=`bg`+e[0].toUpperCase()+e.slice(1);y[t]={get(){let{level:t}=this;return function(...n){let r=T(C(e,v[t],`bgColor`,...n),s.bgColor.close,this[g]);return E(this,r,this[_])}}}}var w=Object.defineProperties(()=>{},{...y,level:{enumerable:!0,get(){return this[h].level},set(e){this[h].level=e}}}),T=(e,t,n)=>{let r,i;return n===void 0?(r=e,i=t):(r=n.openAll+e,i=t+n.closeAll),{open:e,close:t,openAll:r,closeAll:i,parent:n}},E=(e,t,n)=>{let r=(...e)=>ee(r,e.length===1?``+e[0]:e.join(` `));return Object.setPrototypeOf(r,w),r[h]=e,r[g]=t,r[_]=n,r},ee=(e,t)=>{if(e.level<=0||!t)return e[_]?``:t;let n=e[g];if(n===void 0)return t;let{openAll:r,closeAll:i}=n;if(t.includes(`\x1B`))for(;n!==void 0;)t=d(t,n.close,n.open),n=n.parent;let a=t.indexOf(`
|
|
5
|
-
`);return a!==-1&&(t=f(t,i,r,a)),r+t+i};Object.defineProperties(S.prototype,y);var D=S();S({level:m?m.level:0});function O(e){return{all:e||=new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}function k(){return Math.random().toString(36).slice(2,7)}function A(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}function j(e){let t=e.split(`?`),n=t[0],r=t[1],i={query:{},pagePath:n};return r&&r.split(`&`).forEach(e=>{let t=e.split(`=`)[0],n=e.split(`=`)[1];i.query[t]=n}),i}function M(e,t){let n=e;for(;n?.classList&&!n.classList.contains(t);)n=n.parentNode;return n===document?null:n}function
|
|
5
|
+
`);return a!==-1&&(t=f(t,i,r,a)),r+t+i};Object.defineProperties(S.prototype,y);var D=S();S({level:m?m.level:0});function O(e){return{all:e||=new Map,on:function(t,n){var r=e.get(t);r?r.push(n):e.set(t,[n])},off:function(t,n){var r=e.get(t);r&&(n?r.splice(r.indexOf(n)>>>0,1):e.set(t,[]))},emit:function(t,n){var r=e.get(t);r&&r.slice().map(function(e){e(n)}),(r=e.get(`*`))&&r.slice().map(function(e){e(t,n)})}}}function k(){return Math.random().toString(36).slice(2,7)}function A(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}function j(e){let t=e.split(`?`),n=t[0].replace(/^\/+/,``),r=t[1],i={query:{},pagePath:n};return r&&r.split(`&`).forEach(e=>{let t=e.split(`=`)[0],n=e.split(`=`)[1];i.query[t]=n}),i}function M(e,t){let n=e;for(;n?.classList&&!n.classList.contains(t);)n=n.parentNode;return n===document?null:n}function te(e){return new Promise((t,n)=>{fetch(`${e}`).then(e=>e.text()).then(e=>{t(e)}).catch(()=>{t(null)})})}function N(e,t){let n={},r=e.window||{},i=t||{};return n.navigationBarTitleText=i.navigationBarTitleText||r.navigationBarTitleText||``,n.navigationBarBackgroundColor=i.navigationBarBackgroundColor||r.navigationBarBackgroundColor||`#000`,n.navigationBarTextStyle=i.navigationBarTextStyle||r.navigationBarTextStyle||`white`,n.backgroundColor=i.backgroundColor||r.backgroundColor||`#fff`,n.navigationStyle=i.navigationStyle||r.navigationStyle||`default`,n.homeButton=i.homeButton??r.homeButton??!1,n.usingComponents=i.usingComponents||{},n}var ne=`<div class="dimina-native-webview">
|
|
6
6
|
<!-- 导航区域 -->
|
|
7
7
|
<div class="dimina-native-webview__navigation">
|
|
8
8
|
<div class="dimina-native-webview__navigation-content">
|
|
9
9
|
<div class="dimina-native-webview__navigation-left-btn"></div>
|
|
10
|
+
<div class="dimina-native-webview__navigation-home-btn"></div>
|
|
10
11
|
<h2 class="dimina-native-webview__navigation-title"></h2>
|
|
11
12
|
</div>
|
|
12
13
|
</div>
|
|
@@ -17,7 +18,7 @@ var e=(e=0)=>t=>`\u001B[${t+e}m`,t=(e=0)=>t=>`\u001B[${38+e};5;${t}m`,n=(e=0)=>(
|
|
|
17
18
|
<iframe class="dimina-native-webview__window" title="pageFrame"></iframe>
|
|
18
19
|
</div>
|
|
19
20
|
</div>
|
|
20
|
-
</div>`,
|
|
21
|
+
</div>`,re=class{constructor(e){this.opts=e,this.id=`webview_${k()}`,this.el=document.createElement(`div`),this.el.classList.add(`dimina-native-view`),this.el.innerHTML=ne,this.setInitialStyle(),this.iframe=this.el.querySelector(`.dimina-native-webview__window`),this.iframe.src=`/pageFrame.html`,this.iframe.name=this.id,this.event=O(),this.bindBackEvent(),this.bindHomeEvent()}async init(e){await this.frameLoaded();let t=window.frames[this.iframe.name];this.applyResourceBaseUrl(t.document),t.DiminaRenderBridge.invoke=e=>{this.event.emit(`invoke`,e)},t.DiminaRenderBridge.publish=e=>{this.event.emit(`publish`,e)},e?.()}applyResourceBaseUrl(e){if(!this.opts.resourceBaseUrl)return;let t=e.createElement(`base`);t.href=this.opts.resourceBaseUrl,e.head.prepend(t)}invoke(e){this.event.on(`invoke`,e)}publish(e){this.event.on(`publish`,e)}postMessage(e){window.frames[this.iframe.name].DiminaRenderBridge.onMessage(e)}bindBackEvent(){let e=this.el.querySelector(`.dimina-native-webview__navigation-left-btn`);e.onclick=()=>{this.parent.parent.navigateBack()}}bindHomeEvent(){let e=this.el.querySelector(`.dimina-native-webview__navigation-home-btn`);e.onclick=()=>{this.parent.parent.navigateHome()}}setHomeButtonVisible(e){let t=this.el.querySelector(`.dimina-native-webview__navigation-home-btn`);t.style.display=e?`block`:`none`}frameLoaded(){return new Promise(e=>{this.iframe.onload=()=>{e()}})}setInitialStyle(){this.applyPageStyle(this.opts.configInfo,{isRoot:this.opts.isRoot,showHomeButton:this.opts.showHomeButton===!0})}applyPageStyle(e,{isRoot:t,showHomeButton:n}){let r=this.el.querySelector(`.dimina-native-webview`),i=this.el.querySelector(`.dimina-native-webview__navigation-title`),a=this.el.querySelector(`.dimina-native-webview__navigation`),o=this.el.querySelector(`.dimina-native-webview__navigation-left-btn`),s=this.el.querySelector(`.dimina-native-webview__root`);o.style.display=t?`none`:`block`,this.setHomeButtonVisible(n===!0),this.el.querySelector(`.dimina-native-webview__navigation-home-btn`).classList.toggle(`dimina-native-webview__navigation-home-btn--after-back`,!t&&n===!0),a.classList.remove(`dimina-native-webview__navigation--white`,`dimina-native-webview__navigation--black`),a.classList.add(e.navigationBarTextStyle===`white`?`dimina-native-webview__navigation--white`:`dimina-native-webview__navigation--black`),r.classList.toggle(`dimina-native-webview--custom-nav`,e.navigationStyle===`custom`),s.style.backgroundColor=e.backgroundColor,a.style.backgroundColor=e.navigationBarBackgroundColor,i.textContent=e.navigationBarTitleText}},P=class{constructor(e){this.id=`bridge_${k()}`,this.opts=e,this.webview=null,this.jscore=e.jscore,this.parent=null,this.resetStatus()}async init(){this.jscore.invoke(e=>this.messageInvoke(`service`,e)),this.jscore.publish(e=>this.messagePublish(e)),this.webview=await this.createWebview(),this.webview.invoke(e=>this.messageInvoke(`render`,e)),this.webview.publish(e=>this.messagePublish(e))}messagePublish(e){if(this.destroyed)return;typeof e==`string`&&(e=JSON.parse(e));let{body:t,target:n}=e;t.bridgeId&&t.bridgeId!==this.id||(n===`service`?this.jscore.postMessage(e):n===`render`&&this.webview.postMessage(e))}messageInvoke(e,t){if(this.destroyed)return;typeof t==`string`&&(t=JSON.parse(t));let{type:n,body:r,target:i}=t;if(r.bridgeId&&r.bridgeId!==this.id||r.resourceLoadId&&r.resourceLoadId!==this.resourceLoadId)return;console.log(D.green(`[container] receive msg from ${e}: `),t);let a={type:n,body:{bridgeId:this.id,pagePath:this.opts.pagePath,scene:this.opts.scene,query:this.opts.query,...r}};if(i===`service`){if(n===`serviceResourceLoaded`)if(this.serviceResource=!0,this.isResourceLoaded()&&!this.resourceLoadedForwarded)this.resourceLoadedForwarded=!0,a.type=`resourceLoaded`;else return;else if(n===`renderResourceLoaded`)if(this.renderResource=!0,this.isResourceLoaded()&&!this.resourceLoadedForwarded)this.resourceLoadedForwarded=!0,a.type=`resourceLoaded`;else return;else n===`renderResourceLoadFailed`&&(this.renderResource=!1,this.resourceLoadedForwarded=!1,a.type=`resourceLoadFailed`);this.jscore.postMessage(a),a.type===`resourceLoaded`&&this.#e()}else if(i===`container`&&n===`invokeAPI`){let{name:e,params:t}=r;this.parent.invokeApi(e,t,this)}}start(e={}){this.resourceLoadId=k(),Object.prototype.hasOwnProperty.call(e,`visible`)?this.desiredPageVisible=e.visible:this.desiredPageVisible===null&&(this.desiredPageVisible=!0),this.webview.postMessage({type:`loadResource`,body:{bridgeId:this.id,resourceLoadId:this.resourceLoadId,appId:this.opts.appId,pagePath:this.opts.pagePath,root:this.opts.root,baseUrl:this.opts.baseUrl||`/`}}),this.jscore.postMessage({type:`loadResource`,body:{bridgeId:this.id,resourceLoadId:this.resourceLoadId,appId:this.opts.appId,pagePath:this.opts.pagePath,scene:this.opts.scene,query:this.opts.query,root:this.opts.root,baseUrl:this.opts.baseUrl||`/`,hostEnv:this.parent.getHostEnvSnapshot()}}),this.opts.isRoot&&this.jscore.postMessage({type:`onUpdateStatusChange`,body:{bridgeId:this.id,event:`noupdate`}})}resetStatus(){this.destroyed=!1,this.serviceResource=!1,this.renderResource=!1,this.resourceLoadedForwarded=!1,this.resourceLoadId=null,this.desiredPageVisible=null,this.sentPageVisible=null}createWebview(){return new Promise(e=>{let t=new re({configInfo:this.opts.configInfo,isRoot:this.opts.isRoot,resourceBaseUrl:this.opts.baseUrl,showHomeButton:this.parent.shouldShowHomeButton({pagePath:this.opts.pagePath,configInfo:this.opts.configInfo,isRoot:this.opts.isRoot})});t.parent=this,t.init(()=>{e(t)}),this.opts.isRoot||t.el.classList.add(`dimina-native-view--before-enter`),this.parent.webviewsContainer.appendChild(t.el)})}isResourceLoaded(){return this.serviceResource&&this.renderResource}appShow(){this.isResourceLoaded()&&this.jscore.postMessage({type:`appShow`,body:{}})}appHide(){this.isResourceLoaded()&&this.jscore.postMessage({type:`appHide`,body:{}})}pageShow(){this.desiredPageVisible=!0,this.#e()}pageHide(){this.desiredPageVisible=!1,this.#e()}#e(){!this.isResourceLoaded()||this.desiredPageVisible===null||this.sentPageVisible===this.desiredPageVisible||(this.jscore.postMessage({type:this.desiredPageVisible?`pageShow`:`pageHide`,body:{bridgeId:this.id}}),this.sentPageVisible=this.desiredPageVisible)}destroy(){let e=this.isResourceLoaded();this.destroyed=!0,this.serviceResource=!1,this.renderResource=!1,this.resourceLoadedForwarded=!1,this.resourceLoadId=null,this.desiredPageVisible=null,this.sentPageVisible=null,e&&this.jscore.postMessage({type:`pageUnload`,body:{bridgeId:this.id}})}},F=`/assets/service.js`,I=class{constructor(e){this.parent=e,this.worker=null,this.event=O()}async init(){let e=this.parent.getApiNamespaces?.()||[],t=Object.keys(this.parent.apiRegistry??{}),n=JSON.stringify({apiNamespaces:e,registeredApis:t});this.worker=new Worker(F,{type:`classic`,name:n}),this.worker.onmessage=e=>{let t=e.data;this.event.emit(t.method,t)}}invoke(e){this.event.on(`invoke`,e)}publish(e){this.event.on(`publish`,e)}postMessage(e){this.worker.postMessage(e)}destroy(){this.worker.terminate()}},L=class{static ROUTE_QUERY_KEYS=[`appId`,`entry`,`page`];static _encodePage(e,t){return t&&Object.keys(t).length>0?`${e}?${Object.entries(t).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join(`&`)}`:e}static _decodePage(e){let t=e.indexOf(`?`);if(t===-1)return{pagePath:e,query:{}};let n=e.slice(0,t),r={};return new URLSearchParams(e.slice(t+1)).forEach((e,t)=>{r[t]=e}),{pagePath:n,query:r}}static _encodeSearchValue(e){return encodeURIComponent(e).replace(/%2F/g,`/`)}static _normalizeSearch(e){return e?e.startsWith(`?`)?e.slice(1):e:``}static _stringifySearchParams(e){return Array.from(e.entries()).map(([e,t])=>`${encodeURIComponent(e)}=${this._encodeSearchValue(t)}`).join(`&`)}static buildRouteSearch(e,t,n=typeof window<`u`?window.location.search:``){let r=new URLSearchParams(this._normalizeSearch(n));if(this.ROUTE_QUERY_KEYS.forEach(e=>r.delete(e)),!e||!t?.length)return this._stringifySearchParams(r);let i=t[0],a=t[t.length-1];return r.set(`appId`,e),r.set(`entry`,this._encodePage(i.pagePath,i.query||{})),r.set(`page`,this._encodePage(a.pagePath,a.query||{})),this._stringifySearchParams(r)}static buildRouteURL(e,t,n=typeof window<`u`?`${window.location.origin}${window.location.pathname}`:``){let r=this.buildRouteSearch(e,t);return`${n}${r?`?${r}`:``}`}static syncStack(e,t){let n=this.buildRouteSearch(e,t);history.replaceState(null,``,`${window.location.pathname}${n?`?${n}`:``}`)}static clear(){let e=new URLSearchParams(this._normalizeSearch(window.location.search));this.ROUTE_QUERY_KEYS.forEach(t=>e.delete(t));let t=this._stringifySearchParams(e);history.replaceState(null,``,`${window.location.pathname}${t?`?${t}`:``}`)}static parseSearch(e){let t=new URLSearchParams(this._normalizeSearch(e)),n=t.get(`appId`),r=t.get(`entry`),i=t.get(`page`)||r;if(!n||!r)return null;let a=this._decodePage(r);if(!a.pagePath)return null;let o=[a];if(i&&i!==r){let e=this._decodePage(i);e.pagePath&&o.push(e)}return{appId:n,stack:o}}static parseHash(e){if(!e||e.length<=1)return null;let t=e.slice(1).split(`|`);if(t.length<2)return null;let n=t[0],r=t.slice(1).map(e=>this._decodePage(e));return!n||r.length===0?null:{appId:n,stack:r}}static parse(e,t=typeof window<`u`?window.location.search:``){return this.parseSearch(t)||this.parseHash(e)}},R=`<div class="dimina-mini-app">
|
|
21
22
|
<!-- 右上方药丸按钮 -->
|
|
22
23
|
<ul class="dimina-mini-app-navigation__actions">
|
|
23
24
|
<li class="dimina-mini-app-navigation__actions-variable"></li>
|
|
@@ -63,12 +64,12 @@ var e=(e=0)=>t=>`\u001B[${t+e}m`,t=(e=0)=>t=>`\u001B[${38+e};5;${t}m`,n=(e=0)=>(
|
|
|
63
64
|
</div>
|
|
64
65
|
</div>
|
|
65
66
|
</div>
|
|
66
|
-
`,
|
|
67
|
+
`,z=(e,t,n=560)=>new Promise(r=>{let i=setTimeout(r,n),a=n=>{(!t||n.propertyName===t)&&(clearTimeout(i),e.removeEventListener(`transitionend`,a),r())};e.addEventListener(`transitionend`,a)});function B(e){e.cancelable&&e.preventDefault()}function V(e){B(e),e.stopImmediatePropagation?.()}var H=class{constructor(e){this.appInfo=e,this.id=`mini_app_${k()}`,this.parent=null,this.appId=e.appId,this.appConfig=null,this.bridgeList=[],this.jscore=new I(this),this.webviewsContainer=null,this.webviewAnimaEnd=!0,this.el=document.createElement(`div`),this.el.classList.add(`dimina-native-view`),this.toastInfo={dom:null,timer:null},this.color=null,this.apiRegistry={},this._extSubscriptions=new Map,this._windowResizeHandlers=new Set,this.tabBarConfig=null,this.tabBarPaths=[],this.tabBarBridges=new Map,this.currentTabPath=null,this.tabBarEl=null,this.tabBarHeight=0,this.tabBarBadges=[],this.tabBarRedDots=[],this.tabBarApiVisible=!0,this._modalStack=[],this._modalPendingTimers=new Set,this._modalPageTouchTarget=null,this._destroyed=!1}_normalizePagePath(e){return e?e.startsWith(`/`)?e.slice(1):e:``}_isTabBarPage(e){return this.tabBarPaths.includes(this._normalizePagePath(e))}getCurrentPagePath(){return this.bridgeList[this.bridgeList.length-1]?.opts?.pagePath||this.appInfo.pagePath||this.appConfig?.app?.entryPagePath||``}getCurrentPageQuery(){return this.bridgeList[this.bridgeList.length-1]?.opts?.query||this.appInfo.query||{}}getEntryPagePath(){return this.appInfo.pagePath||this.appConfig?.app?.entryPagePath||``}getHomePagePath(){return this._normalizePagePath(this.appConfig?.app?.entryPagePath||this.appConfig?.app?.pages?.[0]||``)}shouldShowHomeButton({pagePath:e,configInfo:t,isRoot:n}){if(t?.navigationStyle===`custom`)return!1;let r=this.getHomePagePath();if(!r)return!1;let i=this._normalizePagePath(e);return this._isTabBarPage(i)||i===r?!1:n||t?.homeButton===!0}navigateHome(){let e=this.getHomePagePath();e&&(this._isTabBarPage(e)?this.switchTab({url:`/${e}`}):this.bridgeList.length<=1?this.redirectTo({url:`/${e}`}):this.reLaunch({url:`/${e}`}))}hideHomeButton(e={},t){let{onSuccess:n,onComplete:r}=this._createApiCallbacks(e);(t||this.bridgeList[this.bridgeList.length-1])?.webview?.setHomeButtonVisible(!1),n?.({errMsg:`hideHomeButton:ok`}),r?.()}async copyText(e,t){try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(e);else{let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,`readonly`),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select(),document.execCommand(`copy`),document.body.removeChild(t)}this.showToast({title:t,icon:`success`})}catch{this.showToast({title:`复制失败`,icon:`none`})}}closeMiniProgram(){L.clear(),this.closeMiniAppMenu(),X.closeApp(this)}renderMiniAppMenu(){let e=this.el.querySelector(`.dimina-mini-app-menu__app-name`),t=this.el.querySelector(`.dimina-mini-app-menu__app-id`),n=this.el.querySelector(`.dimina-mini-app-menu__app-desc`),r=this.el.querySelector(`.dimina-mini-app-menu__app-logo-img`),i=this.el.querySelector(`.dimina-mini-app-menu__quick-actions`),a=this.getCurrentPagePath(),o=this.getEntryPagePath(),s=this.getCurrentPageQuery(),c=a||o||``,l=L.buildRouteURL(this.appId,[{pagePath:o,query:this.appInfo.query||{}},{pagePath:c,query:s}]);e.textContent=this.appInfo.name||`未命名小程序`,t.textContent=`AppID:${this.appId||`--`}`,n.textContent=`当前页面:${c||`--`}`,r.src=this.appInfo.logo||``;let u=[{label:`复制链接`,icon:`↗`,handler:()=>this.copyText(l,`链接已复制`)},{label:`重新进入`,icon:`↻`,handler:()=>{this.closeMiniAppMenu(),this.reLaunch({url:o||a})}},{label:`关闭小程序`,icon:`×`,danger:!0,handler:()=>this.closeMiniProgram()}];i.innerHTML=u.map((e,t)=>`
|
|
67
68
|
<button type="button" class="dimina-mini-app-menu__quick-action${e.danger?` is-danger`:``}" data-quick-index="${t}">
|
|
68
69
|
<span class="dimina-mini-app-menu__quick-action-icon">${e.icon}</span>
|
|
69
70
|
<span class="dimina-mini-app-menu__quick-action-label">${e.label}</span>
|
|
70
71
|
</button>
|
|
71
|
-
`).join(``),i.querySelectorAll(`[data-quick-index]`).forEach((e,t)=>{e.onclick=()=>u[t].handler()})}openMiniAppMenu(){let e=this.el.querySelector(`.dimina-mini-app-menu__mask`),t=this.el.querySelector(`.dimina-mini-app-menu`);this.renderMiniAppMenu(),e.style.display=`block`,requestAnimationFrame(()=>{e.classList.add(`show`),t.classList.add(`show`)})}closeMiniAppMenu(){let e=this.el.querySelector(`.dimina-mini-app-menu__mask`),t=this.el.querySelector(`.dimina-mini-app-menu`);e.classList.remove(`show`),t.classList.remove(`show`)}registerApi(e,t){this.apiRegistry[e]=t}invokeApi(e,t){let n=this.apiRegistry[e];n?n.call(this,t):typeof this[e]==`function`?this[e](t):t?.module!==void 0||t?.evtId!==void 0?this._handleExtCall(e,t):this._handleUnsupportedApi(e,t)}_handleUnsupportedApi(e,t={}){let{onFail:n,onComplete:r}=this._createApiCallbacks(t),i={errMsg:`${e}:fail api is not supported`};n?n(i):console.warn(`[container] ${i.errMsg}`),r?.()}viewDidLoad(){this.initPageFrame(),this.webviewsContainer=this.el.querySelector(`.dimina-mini-app__webviews`),this.showLaunchScreen(),this.bindMoreEvent(),this.bindCloseEvent(),this.initApp()}async initApp(){await this.jscore.init(),this._bindThemeChange();let e=`main`,t=`${this.appInfo.appId}/${e}/app-config.json`,[n]=await Promise.all([N(`/${t}`),A(560)]);if(!n)return;this.appConfig=JSON.parse(n),this._initTabBar();let r=this.appInfo.pagePath||this.appConfig.app.entryPagePath,i=this.appConfig.modules[r],a=P(this.appConfig.app,i);this.updateTargetPageColorStyle(a);let o=await this.createBridge({pagePath:r,query:this.appInfo.query,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!0,root:e,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:a});if(this.bridgeList.push(o),this._isTabBarPage(r)){let e=this._normalizePagePath(r);this.tabBarBridges.set(e,o),this.currentTabPath=e,this._setTabBarVisible(!0),this._updateTabBarSelection(e)}let s=this.appInfo.restoreStack?.length>1;o.start({visible:!s}),s&&await this.restorePageStack(this.appInfo.restoreStack.slice(1)),this._syncHash(),this.hideLaunchScreen()}async restorePageStack(e){for(let t=0;t<e.length;t++){let{pagePath:n,query:r}=e[t],i=t===e.length-1,a=n.startsWith(`/`)?n.slice(1):n,o=this.appConfig.modules[a],s=P(this.appConfig.app,o),c=await this.createBridge({pagePath:a,query:r,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!1,root:o?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:s}),l=this.bridgeList[this.bridgeList.length-1];l.webview.el.classList.remove(`dimina-native-view--instage`),l.webview.el.classList.add(`dimina-native-view--slide-out`),this.bridgeList.push(c),c.webview.el.style.zIndex=this.bridgeList.length+1,c.webview.el.classList.remove(`dimina-native-view--before-enter`),i||c.webview.el.classList.add(`dimina-native-view--slide-out`),c.start({visible:i})}if(e.length>0){let e=this.bridgeList[this.bridgeList.length-1],t=this.appConfig.modules[e.opts.pagePath],n=P(this.appConfig.app,t);this.updateTargetPageColorStyle(n),this._isTabBarPage(e.opts.pagePath)||this._setTabBarVisible(!1)}}_syncHash(){let e=this.bridgeList.map(e=>({pagePath:e.opts.pagePath.startsWith(`/`)?e.opts.pagePath.slice(1):e.opts.pagePath,query:e.opts.query||{}}));B.syncStack(this.appId,e)}async createBridge(e){let{jscore:t,configInfo:n,isRoot:r,appId:i,pagePath:a,query:o,scene:s,pages:c,root:l}=e,u=new L({jscore:t,configInfo:n,isRoot:r,appId:i,pagePath:a,query:o,scene:s,pages:c,root:l});return u.parent=this,await u.init(),u}onPresentIn(){let e=this.bridgeList[this.bridgeList.length-1];e?.appShow(),e?.pageShow()}onPresentOut(){let e=this.bridgeList[this.bridgeList.length-1];e?.appHide(),e?.pageHide()}initPageFrame(){this.el.innerHTML=V}updateTargetPageColorStyle(e){let{navigationBarTextStyle:t}=e;this.updateActionColorStyle(t)}showLaunchScreen(){let e=this.el.querySelector(`.dimina-mini-app__launch-screen`),t=this.el.querySelector(`.dimina-mini-app__name`),n=this.el.querySelector(`.dimina-mini-app__logo-img-url`);this.updateActionColorStyle(`black`),t.textContent=this.appInfo.name,n.src=this.appInfo.logo,e.style.display=`block`}hideLaunchScreen(){let e=this.el.querySelector(`.dimina-mini-app__launch-screen`);e.style.display=`none`}updateActionColorStyle(e){this.color=e;let t=this.el.querySelector(`.dimina-mini-app-navigation__actions`);e===`white`?(t.classList.remove(`dimina-mini-app-navigation__actions--black`),t.classList.add(`dimina-mini-app-navigation__actions--white`)):e===`black`&&(t.classList.remove(`dimina-mini-app-navigation__actions--white`),t.classList.add(`dimina-mini-app-navigation__actions--black`)),this.parent.updateStatusBarColor(e)}restoreColorStyle(){this.updateActionColorStyle(this.color)}createCallbackFunction(e){if(e)return t=>{this.jscore.postMessage({type:`triggerCallback`,body:{id:e,args:t}})}}_createApiCallbacks({success:e,fail:t,complete:n}={}){return{onSuccess:this.createCallbackFunction(e),onFail:this.createCallbackFunction(t),onComplete:this.createCallbackFunction(n)}}async navigateTo(e){let{url:t,success:n,fail:r,complete:i}=e,{query:a,pagePath:o}=j(t),s=this.createCallbackFunction(n),c=this.createCallbackFunction(r),l=this.createCallbackFunction(i);if(this._isTabBarPage(o)){c?.({errMsg:`navigateTo:fail can not navigateTo a tabbar page`}),l?.();return}if(!this.webviewAnimaEnd){c?.({errMsg:`navigateTo:fail busy`}),l?.();return}this.webviewAnimaEnd=!1;try{let e=this.appConfig.modules[o],t=P(this.appConfig.app,e);this.updateTargetPageColorStyle(t);let n=await this.createBridge({pagePath:o,query:a,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!1,root:e?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:t}),r=this.bridgeList[this.bridgeList.length-1],i=r.webview;this.bridgeList.push(n),n.start(),this._syncHash(),i.el.classList.remove(`dimina-native-view--instage`),i.el.classList.add(`dimina-native-view--slide-out`),i.el.classList.add(`dimina-native-view--linear-anima`),r?.pageHide(),this._setTabBarVisible(!1),n.webview.el.style.zIndex=this.bridgeList.length+1,n.webview.el.classList.add(`dimina-native-view--enter-anima`),n.webview.el.classList.add(`dimina-native-view--instage`),await H(n.webview.el,`transform`),i.el.classList.remove(`dimina-native-view--linear-anima`),n.webview.el.classList.remove(`dimina-native-view--before-enter`),n.webview.el.classList.remove(`dimina-native-view--enter-anima`),n.webview.el.classList.remove(`dimina-native-view--instage`),s?.({errMsg:`navigateTo:ok`})}catch(e){c?.({errMsg:`navigateTo:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,l?.()}}reLaunch(e){let{url:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);if(!this.webviewAnimaEnd){o?.({errMsg:`reLaunch:fail busy`}),s?.();return}this.webviewAnimaEnd=!1;let{query:c,pagePath:l}=j(t);try{let e=this.appConfig.modules[l],t=P(this.appConfig.app,e);this.updateTargetPageColorStyle(t);let n=new Set([...this.bridgeList,...this.tabBarBridges.values()]);for(let e of n)e.destroy(),e.webview?.el?.remove();this.bridgeList.length=0,this.tabBarBridges.clear(),this.currentTabPath=null,this.webviewsContainer&&(this.webviewsContainer.innerHTML=``),this.createBridge({pagePath:l,query:c,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!0,root:e?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:t}).then(e=>{if(this.bridgeList.push(e),this._isTabBarPage(l)){let t=this._normalizePagePath(l);this.tabBarBridges.set(t,e),this.currentTabPath=t,this._setTabBarVisible(!0),this._updateTabBarSelection(t)}else this._setTabBarVisible(!1);e.start(),this._syncHash(),e.webview.el.style.zIndex=1,this.webviewAnimaEnd=!0,a?.({errMsg:`reLaunch:ok`}),s?.()}).catch(e=>{o?.({errMsg:`reLaunch:fail ${e.message}`}),s?.(),this.webviewAnimaEnd=!0})}catch(e){o?.({errMsg:`reLaunch:fail ${e.message}`}),s?.(),this.webviewAnimaEnd=!0}}applyUpdate(){this.reLaunch({url:this.getEntryPagePath()})}redirectTo(e){let{url:t,success:n,fail:r,complete:i}=e,{query:a,pagePath:o}=j(t),s=this.createCallbackFunction(n),c=this.createCallbackFunction(r),l=this.createCallbackFunction(i);if(this._isTabBarPage(o)){c?.({errMsg:`redirectTo:fail can not redirectTo a tabbar page`}),l?.();return}if(!this.webviewAnimaEnd){c?.({errMsg:`redirectTo:fail busy`}),l?.();return}this.webviewAnimaEnd=!1;try{let e=this.bridgeList[this.bridgeList.length-1],t=this._normalizePagePath(e.opts.pagePath),n=this.appConfig.modules[o],r=P(this.appConfig.app,n);this.updateTargetPageColorStyle(r),e.destroy(),e.opts={...e.opts,pagePath:o,query:a,configInfo:r},e.resetStatus(),e.start(),this._syncHash(),this.tabBarBridges.get(t)===e&&(this.tabBarBridges.delete(t),this.currentTabPath===t&&(this.currentTabPath=null)),this._setBridgeTabBarInset(e,!1),this._setTabBarVisible(!1),s?.({errMsg:`redirectTo:ok`})}catch(e){c?.({errMsg:`redirectTo:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,l?.()}}async navigateBack(e={}){let{onSuccess:t,onFail:n,onComplete:r}=this._createApiCallbacks(e);if(this.bridgeList.length<2){n?.({errMsg:`navigateBack:fail cannot navigate back at first page`}),r?.();return}if(!this.webviewAnimaEnd){n?.({errMsg:`navigateBack:fail busy`}),r?.();return}this.webviewAnimaEnd=!1;try{let e=this.bridgeList.pop(),n=this.bridgeList[this.bridgeList.length-1],r=this.appConfig.modules[n.opts.pagePath],i=P(this.appConfig.app,r);if(this.updateTargetPageColorStyle(i),e.webview.el.classList.add(`dimina-native-view--before-enter`),e.webview.el.classList.add(`dimina-native-view--enter-anima`),e.destroy(),n.webview.el.classList.remove(`dimina-native-view--slide-out`),n.webview.el.classList.add(`dimina-native-view--instage`),n.webview.el.classList.add(`dimina-native-view--enter-anima`),n.pageShow(),this._syncHash(),this._isTabBarPage(n.opts.pagePath)){let e=this._normalizePagePath(n.opts.pagePath);this.currentTabPath=e,this._setTabBarVisible(!0),this._updateTabBarSelection(e)}await H(n.webview.el,`transform`),n.webview.el.classList.remove(`dimina-native-view--enter-anima`),n.webview.el.classList.remove(`dimina-native-view--instage`),e.webview.el.parentNode.removeChild(e.webview.el),t?.({errMsg:`navigateBack:ok`})}catch(e){n?.({errMsg:`navigateBack:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,r?.()}}async switchTab(e){let{url:t,success:n,fail:r,complete:i}=e,{query:a,pagePath:o}=j(t),s=this._normalizePagePath(o),c=this.createCallbackFunction(n),l=this.createCallbackFunction(r),u=this.createCallbackFunction(i);if(!this._isTabBarPage(s)){l?.({errMsg:`switchTab:fail not a tabBar page: ${s}`}),u?.();return}if(!this.webviewAnimaEnd){l?.({errMsg:`switchTab:fail busy`}),u?.();return}if(this.currentTabPath===s&&this.bridgeList.length===1){this._setTabBarVisible(!0),this._updateTabBarSelection(s),c?.({errMsg:`switchTab:ok`}),u?.();return}this.webviewAnimaEnd=!1;try{let e=this.currentTabPath,t=e?this.tabBarBridges.get(e):null,n=!!t&&this.bridgeList.length===1&&this.bridgeList[0]===t;for(;this.bridgeList.length>0;){let e=this.bridgeList[this.bridgeList.length-1];if(this._isTabBarPage(e.opts.pagePath))break;e.pageHide(),e.destroy(),e.webview?.el?.remove(),this.bridgeList.pop()}if(t&&t!==this.tabBarBridges.get(s)){n&&t.pageHide(),t.webview?.el&&(t.webview.el.style.display=`none`);let e=this.bridgeList.indexOf(t);e>=0&&this.bridgeList.splice(e,1)}let r=this.tabBarBridges.get(s),i=this.appConfig.modules[s],o=P(this.appConfig.app,i);this.updateTargetPageColorStyle(o),r||(r=await this.createBridge({pagePath:s,query:a,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!0,root:i?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:o}),this.tabBarBridges.set(s,r),r.start());let l=r.webview.el;this._setBridgeTabBarInset(r,!0),l.classList.remove(`dimina-native-view--before-enter`,`dimina-native-view--slide-out`,`dimina-native-view--enter-anima`,`dimina-native-view--linear-anima`,`dimina-native-view--instage`),l.style.display=``,l.style.zIndex=1,this.bridgeList.includes(r)||this.bridgeList.push(r),this.currentTabPath=s,r.pageShow(),this._setTabBarVisible(!0),this._updateTabBarSelection(s),this._syncHash(),c?.({errMsg:`switchTab:ok`})}catch(e){l?.({errMsg:`switchTab:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,u?.()}}_initTabBar(){let e=this.appConfig?.app?.tabBar;if(!(!e||!Array.isArray(e.list)||e.list.length===0)){if(this.tabBarConfig=e,this.tabBarPaths=e.list.map(e=>this._normalizePagePath(e.pagePath)),this.tabBarBadges=e.list.map(()=>``),this.tabBarRedDots=e.list.map(()=>!1),this.tabBarApiVisible=!0,this.customTabBar=e.custom===!0,this.customTabBar){this.tabBarEl=this.el.querySelector(`.dimina-mini-app__tabbar`),this.tabBarEl&&(this.tabBarEl.textContent=``,this.tabBarEl.style.display=`none`),this.tabBarHeight=0,this.el.style.setProperty(`--dimina-tabbar-height`,`0px`);return}this._renderTabBar()}}_renderTabBar(){if(this.tabBarEl=this.el.querySelector(`.dimina-mini-app__tabbar`),!this.tabBarEl)return;let{color:e,backgroundColor:t,borderStyle:n,list:r}=this.tabBarConfig,i=this._sanitizeCssColor(e)||`#999999`,a=this._sanitizeCssColor(t)||`#ffffff`;this.tabBarEl.textContent=``;let o=document.createElement(`div`);o.className=`dimina-tabbar`,o.style.backgroundColor=a,o.style.borderTopColor=this._getTabBarBorderColor(n),r.forEach((e,t)=>{let n=this._normalizePagePath(e.pagePath),r=document.createElement(`div`);r.className=`dimina-tabbar-item`,r.dataset.path=n,r.dataset.index=String(t);let a=this._resolveTabBarIcon(e.iconPath);a&&r.appendChild(this._createTabBarIcon(a,`dimina-tabbar-icon-default`));let s=this._resolveTabBarIcon(e.selectedIconPath);s&&r.appendChild(this._createTabBarIcon(s,`dimina-tabbar-icon-selected`));let c=document.createElement(`span`);c.className=`dimina-tabbar-text`,c.style.color=i,c.textContent=e.text||``,r.appendChild(c);let l=document.createElement(`span`);l.className=`dimina-tabbar-badge`,l.hidden=!0,r.appendChild(l);let u=document.createElement(`span`);u.className=`dimina-tabbar-red-dot`,u.hidden=!0,r.appendChild(u),o.appendChild(r)}),this.tabBarEl.appendChild(o),this.tabBarEl.addEventListener(`click`,e=>{let t=e.target.closest(`.dimina-tabbar-item`);if(!t)return;let n=t.dataset.path;n&&n!==this.currentTabPath&&this.switchTab({url:`/${n}`})}),typeof ResizeObserver<`u`&&(this._tabBarResizeObserver?.disconnect(),this._tabBarResizeObserver=new ResizeObserver(()=>this._syncTabBarHeightVar()),this._tabBarResizeObserver.observe(this.tabBarEl))}_createTabBarIcon(e,t){let n=document.createElement(`img`);return n.className=`dimina-tabbar-icon ${t}`,n.src=e,n.alt=``,n.addEventListener(`error`,()=>{n.style.display=`none`}),n}_sanitizeCssColor(e){if(!e||typeof e!=`string`)return``;let t=e.trim();return t.length===0||t.length>64?``:/[<>"';{}()\\]/.test(t)?/^(?:rgb|rgba|hsl|hsla)\(\s*[\d.,%\s/-]+\)$/i.test(t)?t:``:t}_getTabBarBorderColor(e){return e===`white`?`#ffffff`:`#e0e0e0`}_getTabBarHeight(){if(this.customTabBar)return 0;if(!this.tabBarEl)return this.tabBarHeight;let e=this.tabBarEl.getBoundingClientRect().height;if(!e&&this.tabBarEl.style.display===`none`){let t=this.tabBarEl.style.display,n=this.tabBarEl.style.visibility;this.tabBarEl.style.visibility=`hidden`,this.tabBarEl.style.display=`block`,e=this.tabBarEl.getBoundingClientRect().height,this.tabBarEl.style.display=t,this.tabBarEl.style.visibility=n}return e>0&&(this.tabBarHeight=e),this.tabBarHeight}_syncTabBarHeightVar(){let e=this._getTabBarHeight();this.el.style.setProperty(`--dimina-tabbar-height`,`${e}px`),this._syncTabBarBridgeInsets()}_setBridgeTabBarInset(e,t){let n=e?.webview?.el;if(n){if(!t||this.customTabBar){n.style.removeProperty(`bottom`);return}n.style.bottom=`${this._getTabBarHeight()}px`}}_syncTabBarBridgeInsets(){for(let e of this.tabBarBridges.values())this._setBridgeTabBarInset(e,!0)}_joinBaseUrl(...e){return`${`/`.endsWith(`/`)?`/`:`//`}${e.map(e=>String(e).trim().replace(/^\/+|\/+$/g,``)).filter(Boolean).join(`/`)}`}_resolveTabBarIcon(e){if(!e||typeof e!=`string`)return null;let t=e.trim();if(!t)return null;if(/^(?:data:|blob:|https?:|\/\/)/i.test(t))return t;let n=t.replace(/^\/+/,``).replace(/^\.\//,``),r=`${this.appId}/`;return n.startsWith(r)?this._joinBaseUrl(n):this._joinBaseUrl(this.appId,`main`,n)}_setTabBarVisible(e){if(!this.tabBarEl)return;if(this.customTabBar){this.tabBarEl.style.display=`none`,this._syncTabBarHeightVar();return}let t=this.bridgeList[this.bridgeList.length-1],n=this._normalizePagePath(t?.opts?.pagePath),r=!!n&&n===this.currentTabPath&&this._isTabBarPage(n),i=e&&this.tabBarApiVisible&&r;this.tabBarEl.style.display=i?`block`:`none`,this._syncTabBarHeightVar()}_updateTabBarSelection(e){if(!this.tabBarEl||!this.tabBarConfig)return;let t=this.tabBarConfig.color||`#999999`,n=this.tabBarConfig.selectedColor||`#1890ff`;this.tabBarEl.querySelectorAll(`.dimina-tabbar-item`).forEach(r=>{let i=r.getAttribute(`data-path`)===e,a=r.querySelector(`.dimina-tabbar-text`),o=r.querySelector(`.dimina-tabbar-icon-default`),s=r.querySelector(`.dimina-tabbar-icon-selected`);a&&(a.style.color=i?n:t),o&&(o.style.display=i?`none`:`block`),s&&(s.style.display=i?`block`:`none`),r.classList.toggle(`dimina-tabbar-item--selected`,i)})}_getTabBarItemEl(e){return this.tabBarEl?.querySelector(`.dimina-tabbar-item[data-index="${e}"]`)||null}_validateTabBarIndex(e,t,n,r){let i=this.tabBarConfig?.list?.length||0;if(!i||!this.tabBarEl)return n?.({errMsg:`${e}:fail tabBar not configured`}),r?.(),!1;let a=Number(t);return t==null||!Number.isInteger(a)||a<0||a>=i?(n?.({errMsg:`${e}:fail invalid index ${t}`}),r?.(),!1):!0}_replaceTabBarItemIcons(e,t){let n=e.querySelector(`.dimina-tabbar-text`);e.querySelectorAll(`.dimina-tabbar-icon-default, .dimina-tabbar-icon-selected`).forEach(e=>e.remove());let r=this._resolveTabBarIcon(t.iconPath);r&&e.insertBefore(this._createTabBarIcon(r,`dimina-tabbar-icon-default`),n);let i=this._resolveTabBarIcon(t.selectedIconPath);i&&e.insertBefore(this._createTabBarIcon(i,`dimina-tabbar-icon-selected`),n)}setTabBarStyle(e={}){let{color:t,selectedColor:n,backgroundColor:r,borderStyle:i,success:a,fail:o,complete:s}=e,c=this.createCallbackFunction(a),l=this.createCallbackFunction(o),u=this.createCallbackFunction(s);if(!this.tabBarConfig||!this.tabBarEl){l?.({errMsg:`setTabBarStyle:fail tabBar not configured`}),u?.();return}let d=i===`black`||i===`white`?i:null,f=t===void 0?null:this._sanitizeCssColor(t),p=n===void 0?null:this._sanitizeCssColor(n),m=r===void 0?null:this._sanitizeCssColor(r);f&&(this.tabBarConfig.color=f),p&&(this.tabBarConfig.selectedColor=p),m&&(this.tabBarConfig.backgroundColor=m),d&&(this.tabBarConfig.borderStyle=d);let h=this.tabBarEl.querySelector(`.dimina-tabbar`);h&&(m&&(h.style.backgroundColor=m),d&&(h.style.borderTopColor=this._getTabBarBorderColor(d))),this._updateTabBarSelection(this.currentTabPath),c?.({errMsg:`setTabBarStyle:ok`}),u?.()}setTabBarItem(e={}){let{index:t,text:n,iconPath:r,selectedIconPath:i}=e,{onSuccess:a,onFail:o,onComplete:s}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`setTabBarItem`,t,o,s))return;let c=Number(t),l=this.tabBarConfig.list[c],u={...l,text:n===void 0?l.text:n,iconPath:r===void 0?l.iconPath:r,selectedIconPath:i===void 0?l.selectedIconPath:i};this.tabBarConfig.list[c]=u;let d=this._getTabBarItemEl(c);if(d){let e=d.querySelector(`.dimina-tabbar-text`);e&&(e.textContent=u.text||``),(r!==void 0||i!==void 0)&&this._replaceTabBarItemIcons(d,u),this._updateTabBarSelection(this.currentTabPath)}a?.({errMsg:`setTabBarItem:ok`}),s?.()}showTabBar(e={}){let{onSuccess:t,onComplete:n}=this._createApiCallbacks(e);this.tabBarApiVisible=!0,this._setTabBarVisible(!0),t?.({errMsg:`showTabBar:ok`}),n?.()}hideTabBar(e={}){let{onSuccess:t,onComplete:n}=this._createApiCallbacks(e);this.tabBarApiVisible=!1,this._setTabBarVisible(!1),t?.({errMsg:`hideTabBar:ok`}),n?.()}setTabBarBadge(e={}){let{index:t,text:n=``}=e,{onSuccess:r,onFail:i,onComplete:a}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`setTabBarBadge`,t,i,a))return;let o=Number(t);this.tabBarBadges[o]=String(n),this.tabBarRedDots[o]=!1;let s=this._getTabBarItemEl(o),c=s?.querySelector(`.dimina-tabbar-badge`),l=s?.querySelector(`.dimina-tabbar-red-dot`);c&&(c.textContent=this.tabBarBadges[o],c.hidden=this.tabBarBadges[o].length===0),l&&(l.hidden=!0),r?.({errMsg:`setTabBarBadge:ok`}),a?.()}removeTabBarBadge(e={}){let{index:t}=e,{onSuccess:n,onFail:r,onComplete:i}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`removeTabBarBadge`,t,r,i))return;let a=Number(t);this.tabBarBadges[a]=``;let o=this._getTabBarItemEl(a)?.querySelector(`.dimina-tabbar-badge`);o&&(o.textContent=``,o.hidden=!0),n?.({errMsg:`removeTabBarBadge:ok`}),i?.()}showTabBarRedDot(e={}){let{index:t}=e,{onSuccess:n,onFail:r,onComplete:i}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`showTabBarRedDot`,t,r,i))return;let a=Number(t);this.tabBarRedDots[a]=!0,this.tabBarBadges[a]=``;let o=this._getTabBarItemEl(a),s=o?.querySelector(`.dimina-tabbar-badge`),c=o?.querySelector(`.dimina-tabbar-red-dot`);s&&(s.textContent=``,s.hidden=!0),c&&(c.hidden=!1),n?.({errMsg:`showTabBarRedDot:ok`}),i?.()}hideTabBarRedDot(e={}){let{index:t}=e,{onSuccess:n,onFail:r,onComplete:i}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`hideTabBarRedDot`,t,r,i))return;let a=Number(t);this.tabBarRedDots[a]=!1;let o=this._getTabBarItemEl(a)?.querySelector(`.dimina-tabbar-red-dot`);o&&(o.hidden=!0),n?.({errMsg:`hideTabBarRedDot:ok`}),i?.()}async navigateToMiniProgram(e){let{appId:t,path:n,scene:r=1037}=e,{onSuccess:i,onFail:a,onComplete:o}=this._createApiCallbacks(e);try{await Z.openApp({appId:t,path:n,scene:r},this.parent),i?.({errMsg:`navigateToMiniProgram:ok`})}catch(e){a?.({errMsg:`navigateToMiniProgram:fail ${e.message}`})}finally{o?.()}}bindMoreEvent(){let e=this.el.querySelector(`.dimina-mini-app-navigation__actions-variable`),t=this.el.querySelector(`.dimina-mini-app-menu__mask`),n=this.el.querySelector(`.dimina-mini-app-menu`),r=this.el.querySelector(`.dimina-mini-app-menu__footer-btn--cancel`);t.addEventListener(`transitionend`,()=>{t.classList.contains(`show`)||(t.style.display=`none`)}),e.onclick=()=>this.openMiniAppMenu(),t.onclick=()=>this.closeMiniAppMenu(),r.onclick=()=>this.closeMiniAppMenu(),n.onclick=e=>e.stopPropagation()}bindCloseEvent(){let e=this.el.querySelector(`.dimina-mini-app-navigation__actions-close`);e.onclick=()=>{this.closeMiniProgram()}}destroy(){this._destroyed=!0;for(let e of this._extSubscriptions.values())e?.();this._extSubscriptions.clear();for(let e of this._windowResizeHandlers)globalThis.removeEventListener?.(`resize`,e);this._windowResizeHandlers.clear(),this._themeMediaQuery?.removeEventListener?this._themeMediaQuery.removeEventListener(`change`,this._themeChangeHandler):this._themeMediaQuery?.removeListener?.(this._themeChangeHandler),this._themeMediaQuery=null,this._themeChangeHandler=null,this._tabBarResizeObserver?.disconnect(),this._tabBarResizeObserver=null;for(let e of this._modalPendingTimers)clearTimeout(e);this._modalPendingTimers.clear();for(let e of this._modalStack)e.mask?.remove(),e.dialog?.remove();this._modalStack.length=0,this.hideToast({}),Z.popView(),this.jscore.destroy()}getNetworkType(e){let{success:t}=e;this.createCallbackFunction(t)?.({networkType:`wifi`})}request({url:e,data:t,header:n={},timeout:r=0,method:i=`GET`,dataType:a=`json`,responseType:o=`text`,success:s,fail:c,complete:l}){let u={method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:e,data:t,header:n,timeout:r,method:i,dataType:a,responseType:o})},d=this.createCallbackFunction(s),f=this.createCallbackFunction(c),p=this.createCallbackFunction(l);fetch(`http://localhost:7788/proxy`,u).then(e=>{if(!e.ok){let t=Error(e.statusText);throw t.code=e.status,t}let t={};switch(e.headers.forEach((e,n)=>{t[n]=e}),a){case`json`:return e.json().then(n=>({data:JSON.parse(n),header:t,statusCode:e.status}));case`arraybuffer`:return e.arrayBuffer().then(n=>({data:n,header:t,statusCode:e.status}));default:return e.text().then(n=>({data:n,header:t,statusCode:e.status}))}}).then(e=>{d?.(e)}).catch(e=>{f?.({errMsg:e.message,errno:e.code})}).finally(()=>{p?.()})}getSystemInfoAsync(e){let t=this.parent.parent.root.querySelector(`.iphone__status-bar`).getBoundingClientRect(),n=this.parent.el.querySelector(`.dimina-native-webview__root`).getBoundingClientRect(),{success:r,complete:i}=e,a=this.createCallbackFunction(r),o=this.createCallbackFunction(i);a?.({statusBarHeight:t.height,brand:`devtools`,mode:`default`,model:`web`,platform:`devtools`,system:`web`,deviceOrientation:`portrait`,SDKVersion:`3.0.0`,language:`zh_CN`,wifiEnabled:!0,safeArea:{width:n.width,height:n.height,top:n.top,bottom:n.bottom,left:n.left,right:n.right}}),o?.()}getSystemInfo(e={}){let{onSuccess:t,onComplete:n}=this._createApiCallbacks(e);t?.({...this.getSystemInfoSync(),errMsg:`getSystemInfo:ok`}),n?.()}onWindowResize(e={}){let t=this.createCallbackFunction(e.success);if(!t||!globalThis.addEventListener)return;let n=()=>{let{windowWidth:e,windowHeight:n,deviceOrientation:r=`portrait`}=this.getSystemInfoSync();t({size:{windowWidth:e,windowHeight:n},deviceOrientation:r})};this._windowResizeHandlers??=new Set,this._windowResizeHandlers.add(n),globalThis.addEventListener(`resize`,n)}getMenuButtonBoundingClientRect(){let e=this.el.querySelector(`.dimina-mini-app-navigation__actions`).getBoundingClientRect(),t=this.el.getBoundingClientRect(),n=(this.parent.parent.root.querySelector(`.iphone__status-bar`)?.getBoundingClientRect().height||20)+4,r=n+e.height,i=e.left-t.left;return{top:n,right:e.right-t.left,bottom:r,left:i,width:e.width,height:e.height,x:i,y:n}}getHostEnvSnapshot(){return{menuRect:this.getMenuButtonBoundingClientRect(),systemInfo:this.getSystemInfoSync()}}_bindThemeChange(){let e=globalThis.matchMedia?.(`(prefers-color-scheme: dark)`);e&&(this._themeMediaQuery=e,this._themeChangeHandler=e=>{this.jscore.postMessage({type:`hostEnvUpdate`,body:{systemInfo:{...this.getSystemInfoSync(),theme:e.matches?`dark`:`light`}}})},e.addEventListener?e.addEventListener(`change`,this._themeChangeHandler):e.addListener?.(this._themeChangeHandler))}getSystemInfoSync(){let e=this.parent.parent.root.querySelector(`.iphone__status-bar`),t=this.parent.el.querySelector(`.dimina-native-webview__root`)?.getBoundingClientRect(),n=t?.width||this.el.clientWidth||375,r=t?.height||this.el.clientHeight||667,i=e?.getBoundingClientRect().height||20;return{brand:`devtools`,model:`web`,platform:`devtools`,system:`web`,SDKVersion:`3.0.0`,pixelRatio:globalThis.devicePixelRatio||1,screenWidth:n,screenHeight:r,windowWidth:n,windowHeight:r,statusBarHeight:i,safeArea:{left:0,right:n,top:i,bottom:r,width:n,height:Math.max(r-i,0)},enableDebug:!1,host:{appId:``},language:navigator.language||`zh_CN`,version:``,theme:globalThis.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches?`dark`:`light`,fontSizeScaleFactor:1,fontSizeSetting:16}}showToast(e={}){let{title:t=``,duration:n=1500,icon:r=`success`,mask:i=!1,success:a,complete:o}=e;if(!t)return;this.hideToast({});let s=this.createCallbackFunction(a),c=this.createCallbackFunction(o),l=null;i&&(l=document.createElement(`div`),l.className=`dimina-toast-mask`,this.el.appendChild(l));let u=document.createElement(`div`);u.className=`dimina-toast dimina-toast--${r}`,r===`none`&&u.classList.add(`dimina-toast--text-only`);let d=document.createElement(`p`);d.textContent=String(t),u.appendChild(d),this.el.appendChild(u),this.toastInfo.dom=u,this.toastInfo.maskEl=l,this.toastInfo.timer=setTimeout(()=>{u.remove(),l?.remove(),this.toastInfo.dom===u&&(this.toastInfo.dom=null,this.toastInfo.maskEl=null,this.toastInfo.timer=null)},n),s?.(),c?.()}hideToast(e={}){let{success:t,complete:n}=e,r=this.createCallbackFunction(t),i=this.createCallbackFunction(n);this.toastInfo.dom&&(this.toastInfo.dom.remove(),this.toastInfo.dom=null),this.toastInfo.maskEl&&(this.toastInfo.maskEl.remove(),this.toastInfo.maskEl=null),this.toastInfo.timer&&(clearTimeout(this.toastInfo.timer),this.toastInfo.timer=null),r?.(),i?.()}showLoading(e={}){this.showToast({...e,icon:`loading`})}hideLoading(e={}){this.hideToast(e)}showModal(e){if(this._destroyed)return;let t=this._mountModal(e||{});this._modalStack.push(t),this._updateModalView(),t.mask.classList.add(`show`);let n=setTimeout(()=>{this._modalPendingTimers.delete(n),!this._destroyed&&this._modalStack.includes(t)&&t.dialog.classList.add(`show`)},100);this._modalPendingTimers.add(n)}_updateModalView(){let e=this._modalStack.length-1;for(let t=0;t<this._modalStack.length;t++){let n=this._modalStack[t];t===e?(n.mask.classList.remove(`dimina-modal--occluded`),n.dialog.classList.remove(`dimina-modal--occluded`)):(n.mask.classList.add(`dimina-modal--occluded`),n.dialog.classList.add(`dimina-modal--occluded`))}}_mountModal(e){let{title:t=``,content:n=``,showCancel:r=!0,cancelText:i=`取消`,cancelColor:a=`#000`,confirmText:o=`确定`,confirmColor:s=`#576b95`,success:c,complete:l}=e,u=this.createCallbackFunction(c),d=this.createCallbackFunction(l),f=document.createElement(`div`);f.className=`dimina-dialog-mask`;let p=document.createElement(`div`);p.className=`dimina-dialog`;let m=this._modalStack.length;if(f.style.zIndex=String(1100+m*20),p.style.zIndex=String(1110+m*20),t){let e=document.createElement(`h2`);e.className=`dimina-dialog__title`,e.textContent=String(t),p.appendChild(e)}if(n){let e=document.createElement(`p`);e.className=`dimina-dialog__content`,e.textContent=String(n),p.appendChild(e)}let h=document.createElement(`div`);h.className=`dimina-dialog__buttons`;let g=!1,_={mask:f,dialog:p,close:null},v=e=>{if(g)return;g=!0;let t=this._modalStack.indexOf(_);t>=0&&this._modalStack.splice(t,1),this._modalStack.length===0?(f.classList.remove(`show`),p.classList.remove(`show`),setTimeout(()=>{f.remove(),p.remove()},200)):(f.remove(),p.remove()),this._updateModalView(),u?.(e),d?.()};if(_.close=v,r){let e=document.createElement(`button`);e.type=`button`,e.className=`dimina-dialog__button`,e.style.color=a,e.textContent=String(i),e.addEventListener(`click`,()=>{v({cancel:!0,confirm:!1,errMsg:`showModal:ok`})}),h.appendChild(e)}let y=document.createElement(`button`);return y.type=`button`,y.className=`dimina-dialog__button`,y.style.color=s,y.textContent=String(o),y.addEventListener(`click`,()=>{v({cancel:!1,confirm:!0,errMsg:`showModal:ok`})}),h.appendChild(y),p.appendChild(h),this.el.appendChild(f),this.el.appendChild(p),_}showActionSheet(e){let{itemList:t=[],itemColor:n=`#000`,success:r,fail:i,complete:a}=e||{};if(!Array.isArray(t)||t.length===0){i&&this.createCallbackFunction(i)({errMsg:`showActionSheet:fail`}),a&&this.createCallbackFunction(a)();return}let o=document.createElement(`div`);o.className=`dimina-action-sheet-mask`;let s=document.createElement(`div`);s.className=`dimina-action-sheet`;let c=()=>{o.remove(),s.remove()};t.forEach((e,t)=>{let i=document.createElement(`div`);i.className=`dimina-action-sheet-item`,i.style.color=n,i.textContent=e,i.onclick=()=>{c(),r&&this.createCallbackFunction(r)({tapIndex:t}),a&&this.createCallbackFunction(a)()},s.appendChild(i)});let l=document.createElement(`div`);l.className=`dimina-action-sheet-cancel`,l.textContent=`取消`,l.onclick=()=>{c(),i&&this.createCallbackFunction(i)({errMsg:`showActionSheet:fail cancel`}),a&&this.createCallbackFunction(a)()},s.appendChild(l),o.onclick=c,this.el.appendChild(o),this.el.appendChild(s),requestAnimationFrame(()=>requestAnimationFrame(()=>{s.classList.add(`show`),o.classList.add(`show`)}))}setNavigationBarTitle(e){let{title:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{let e=this.bridgeList[this.bridgeList.length-1].webview.el.querySelector(`.dimina-native-webview__navigation-title`);e?(e.textContent=t||``,a?.({errMsg:`setNavigationBarTitle:ok`})):o?.({errMsg:`setNavigationBarTitle:fail Navigation title element not found`})}catch(e){o?.({errMsg:`setNavigationBarTitle:fail ${e.message}`})}finally{s?.()}}setNavigationBarColor(e){let{frontColor:t,backgroundColor:n,success:r,fail:i,complete:a}=e,o=this.createCallbackFunction(r),s=this.createCallbackFunction(i),c=this.createCallbackFunction(a);try{let e=this.bridgeList[this.bridgeList.length-1].webview.el.querySelector(`.dimina-native-webview__navigation`);e?(t&&(e.querySelector(`.dimina-native-webview__navigation-title`).style.color=t),n&&(e.style.backgroundColor=n),o?.({errMsg:`setNavigationBarColor:ok`})):s?.({errMsg:`setNavigationBarColor:fail Navigation element not found`})}catch(e){s?.({errMsg:`setNavigationBarColor:fail ${e.message}`})}finally{c?.()}}pageScrollTo(e){let{scrollTop:t,duration:n=300,success:r,fail:i,complete:a}=e,o=this.createCallbackFunction(r),s=this.createCallbackFunction(i),c=this.createCallbackFunction(a);try{let e=this.bridgeList[this.bridgeList.length-1].webview.iframe.contentWindow.document.documentElement;e?(e.scrollTo({top:t,behavior:n>0?`smooth`:`auto`}),setTimeout(()=>{o?.({errMsg:`pageScrollTo:ok`}),c?.()},n)):(s?.({errMsg:`pageScrollTo:fail Webview root element not found`}),c?.())}catch(e){s?.({errMsg:`pageScrollTo:fail ${e.message}`}),c?.()}}setClipboardData(e){let{data:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{navigator.clipboard.writeText(t).then(()=>{a?.({errMsg:`setClipboardData:ok`}),s?.()}).catch(e=>{o?.({errMsg:`setClipboardData:fail ${e.message}`}),s?.()})}catch(e){o?.({errMsg:`setClipboardData:fail ${e.message}`}),s?.()}}getClipboardData(e){let{success:t,fail:n,complete:r}=e,i=this.createCallbackFunction(t),a=this.createCallbackFunction(n),o=this.createCallbackFunction(r);try{navigator.clipboard.readText().then(e=>{i?.({data:e,errMsg:`getClipboardData:ok`}),o?.()}).catch(e=>{a?.({errMsg:`getClipboardData:fail ${e.message}`}),o?.()})}catch(e){a?.({errMsg:`getClipboardData:fail ${e.message}`}),o?.()}}setStorage(e){let{key:t,data:n,success:r,fail:i,complete:a}=e,o=this.createCallbackFunction(r),s=this.createCallbackFunction(i),c=this.createCallbackFunction(a);try{let e=`${this.appId}_${t}`,r=typeof n==`object`?JSON.stringify(n):String(n);localStorage.setItem(e,r),o?.({errMsg:`setStorage:ok`})}catch(e){s?.({errMsg:`setStorage:fail ${e.message}`})}finally{c?.()}}getStorage(e){let{key:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{let e=`${this.appId}_${t}`,n=localStorage.getItem(e);if(n!==null){let e=n;try{e=JSON.parse(n)}catch{}a?.({data:e,errMsg:`getStorage:ok`})}else o?.({errMsg:`getStorage:fail data not found`})}catch(e){o?.({errMsg:`getStorage:fail ${e.message}`})}finally{s?.()}}removeStorage(e){let{key:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{let e=`${this.appId}_${t}`;localStorage.getItem(e)===null||localStorage.removeItem(e),a?.({errMsg:`removeStorage:ok`})}catch(e){o?.({errMsg:`removeStorage:fail ${e.message}`})}finally{s?.()}}clearStorage(e){let{success:t,fail:n,complete:r}=e||{},i=this.createCallbackFunction(t),a=this.createCallbackFunction(n),o=this.createCallbackFunction(r);try{let e=`${this.appId}_`,t=[];for(let n=0;n<localStorage.length;n++){let r=localStorage.key(n);r.startsWith(e)&&t.push(r)}t.forEach(e=>localStorage.removeItem(e)),i?.({errMsg:`clearStorage:ok`})}catch(e){a?.({errMsg:`clearStorage:fail ${e.message}`})}finally{o?.()}}getStorageInfo(e){let{success:t,fail:n,complete:r}=e||{},i=this.createCallbackFunction(t),a=this.createCallbackFunction(n),o=this.createCallbackFunction(r);try{let e=[],t=0,n=`${this.appId}_`;for(let r=0;r<localStorage.length;r++){let i=localStorage.key(r);if(i.startsWith(n)){let r=i.substring(n.length);e.push(r);let a=localStorage.getItem(i);t+=a?a.length*2:0}}i?.({keys:e,currentSize:t,limitSize:10485760,errMsg:`getStorageInfo:ok`})}catch(e){a?.({errMsg:`getStorageInfo:fail ${e.message}`})}finally{o?.()}}_parseExtEventKey(e){let t=Z.getExtModules();for(let n of Object.keys(t)){let t=`${n}_`;if(e.startsWith(t))return{module:n,event:e.slice(t.length)}}return{module:null,event:null}}_handleExtCall(e,t={}){t.module===void 0?t.success?this._extOnBridgeCall(e,t):this._extOffBridgeCall(e):this._extBridgeCall(e,t)}_extBridgeCall(e,t){let{module:n,data:r={},success:i,fail:a,complete:o}=t,s=this.createCallbackFunction(i),c=this.createCallbackFunction(a),l=this.createCallbackFunction(o),u=Z.getExtModule(n);if(!u){let e=`extBridge:fail module "${n}" not registered`;console.error(`[container] ${e}`),c?.({errMsg:e}),l?.();return}try{u({event:e,data:r,success:e=>{s?.(e),l?.()},fail:e=>{c?.(e),l?.()}})}catch(e){c?.({errMsg:`extBridge:fail ${e.message}`}),l?.()}}_extOnBridgeCall(e,t){let{success:n}=t,r=this.createCallbackFunction(n),{module:i,event:a}=this._parseExtEventKey(e);if(!i){console.warn(`[container] extOnBridge:fail no registered module matched for key "${e}"`);return}let o=Z.getExtModule(i);this._extSubscriptions.get(e)?.();try{let t=o({event:a,data:{isSustain:!0},success:e=>r?.(e),fail:t=>console.error(`[container] extOnBridge error (${e}):`,t)});this._extSubscriptions.set(e,t??null)}catch(e){console.error(`[container] extOnBridge:fail ${e.message}`)}}_extOffBridgeCall(e){let t=this._extSubscriptions.get(e);t&&(t(),this._extSubscriptions.delete(e))}};function W(e){let t=new Map;return function(...n){let r=n.length===1?n[0]:JSON.stringify(n);if(t.has(r))return t.get(r);let i=e.apply(this,n);return t.set(r,i),i}}var G=W(async()=>{let e=await fetch(`/appList.json`).then(e=>e.json());return e.forEach(e=>{let t=JSON.stringify(e),n=sessionStorage.getItem(t);if(n)e.logo=n;else{let n=X(e);sessionStorage.setItem(t,n),e.logo=n}}),e});async function K(e){let t=await G();for(let n of t)if(n.appId===e)return n}function q(e){if(!e||e.length===0)return`#2196F3`;let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;let n=J(Math.abs(t%360),.7+Math.abs(t%3e3)/1e4,.8+Math.abs(t%2e3)/1e4);return Y(n[0],n[1],n[2])}function J(e,t,n){let r,i,a,o=Math.floor(e/60),s=e/60-o,c=n*(1-t),l=n*(1-s*t),u=n*(1-(1-s)*t);switch(o%6){case 0:r=n,i=u,a=c;break;case 1:r=l,i=n,a=c;break;case 2:r=c,i=n,a=u;break;case 3:r=c,i=l,a=n;break;case 4:r=u,i=c,a=n;break;case 5:r=n,i=c,a=l;break}return[Math.round(r*255),Math.round(i*255),Math.round(a*255)]}function Y(e,t,n){return`#${((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)}`}function X(e){let t=[60,60],n=window.devicePixelRatio||1,r=document.createElement(`canvas`);r.style.width=t[0]+`px`,r.style.height=t[1]+`px`,r.width=t[0]*n,r.height=t[1]*n;let i=r.getContext(`2d`);i.scale(n,n),i.imageSmoothingEnabled=!0,i.imageSmoothingQuality=`high`,i.textRenderingOptimization=`optimizeQuality`,i.fillStyle=q(e.name),i.fillRect(0,0,t[0],t[1]),i.fillStyle=`rgb(255,255,255)`,i.font=`${t[0]*.6}px Arial`;let a=e.name.charAt(0),o=i.measureText(a),s=t[0]/2,c=t[1]/2+(o.actualBoundingBoxAscent-o.actualBoundingBoxDescent)/2;return i.textAlign=`center`,i.fillText(a,s,c),r.toDataURL(`image/png`,1)}var Z=class{static appStack=[];static _extModules={};static registerExtModule(e,t){this._extModules[e]=t}static getExtModule(e){return this._extModules[e]}static getExtModules(){return this._extModules}static async openApp(e,t){let{appId:n,path:r,scene:i,destroy:a,restoreStack:o}=e,{pagePath:s,query:c}=j(r),{name:l,logo:u}=await K(n);if(a)for(let e of this.appStack)e.appId!==n&&(e.bridgeList.pop()?.destroy(),t.destroyRootView(e));let d=this.getAppById(n);if(d)t.presentView(d,!0);else{let e=new U({appId:n,scene:i,name:l,logo:u,pagePath:s,query:c,restoreStack:o});this.appStack.push(e),t.presentView(e,!1)}}static getAppById(e){for(let t of this.appStack)if(t.appId===e)return t;return null}static popView(){this.appStack.pop()}static closeApp(e){e.parent.dismissView({destroy:!1})}},Q=()=>new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e))),$=(e,t,n=560)=>new Promise(r=>{let i=setTimeout(r,n),a=n=>{(!t||n.propertyName===t)&&(clearTimeout(i),e.removeEventListener(`transitionend`,a),r())};e.addEventListener(`transitionend`,a)}),te=class{constructor(){this.el=null,this.window=null,this.root=null,this.views=[],this.rootView=null,this.parent=null,this.done=!0,this.isSleeping=!1,this._queue=Promise.resolve(),this.init()}_enqueue(e){return this._queue=this._queue.then(()=>e()),this._queue}init(){this.el=document.createElement(`div`),this.el.classList.add(`dimina-application`),this.window=document.createElement(`div`),this.window.classList.add(`dimina-native-window`),this.el.appendChild(this.window)}initRootView(e){this.rootView=e,e.parent=this,e.el.classList.add(`dimina-native-view--instage`),e.el.style.zIndex=1,this.root=e,this.window.appendChild(e.el),e.viewDidLoad()}async pushView(e){if(!this.done)return;this.done=!1;let t=this.views[this.views.length-1];e.parent=this,this.views.push(e),e.el.style.zIndex=this.views.length,e.el.classList.add(`dimina-native-view--before-enter`),this.window.appendChild(e.el),e?.viewDidLoad(),await Q(),t.el.classList.remove(`dimina-native-view--instage`),t.el.classList.add(`dimina-native-view--slide-out`),t.el.classList.add(`dimina-native-view--linear-anima`),e.el.classList.add(`dimina-native-view--enter-anima`),e.el.classList.add(`dimina-native-view--instage`),await $(e.el,`transform`),t.el.classList.remove(`dimina-native-view--linear-anima`),e.el.classList.remove(`dimina-native-view--before-enter`),e.el.classList.remove(`dimina-native-view--enter-anima`),e.el.classList.remove(`dimina-native-view--instage`),this.done=!0}async popView(){if(this.views.length<2||!this.done)return;this.done=!1;let e=this.views[this.views.length-2],t=this.views[this.views.length-1];e.el.classList.remove(`dimina-native-view--slide-out`),e.el.classList.add(`dimina-native-view--instage`),e.el.classList.add(`dimina-native-view--enter-anima`),t.el.classList.remove(`dimina-native-view--instage`),t.el.classList.add(`dimina-native-view--before-enter`),t.el.classList.add(`dimina-native-view--enter-anima`),await $(t.el,`transform`),this.views.pop(),this.window.removeChild(t.el),e.el.classList.remove(`dimina-native-view--enter-anima`),this.done=!0}presentView(e,t){return this._enqueue(()=>this._presentView(e,t))}async _presentView(e,t){if(!this.done)return;this.done=!1;let n=this.views[this.views.length-1];e.parent=this,e.el.style.zIndex=this.views.length+1,e.el.classList.add(`dimina-native-view--before-present`),e.el.classList.add(`dimina-native-view--enter-anima`),n?.el.classList.add(`dimina-native-view--before-presenting`),n?.el.classList.remove(`dimina-native-view--instage`),n?.el.classList.add(`dimina-native-view--enter-anima`),n?.onPresentOut(),e.onPresentIn(),!t&&this.el.appendChild(e.el),this.views.push(e),!t&&e.viewDidLoad&&e.viewDidLoad(),t&&e.restoreColorStyle(),await Q(),n?.el.classList.add(`dimina-native-view--presenting`),e.el.classList.add(`dimina-native-view--instage`),await $(e.el,`transform`),e.el.classList.remove(`dimina-native-view--before-present`),e.el.classList.remove(`dimina-native-view--enter-anima`),n?.el.classList.remove(`dimina-native-view--enter-anima`),n?.el.classList.remove(`dimina-native-view--before-presenting`),this.done=!0}dismissView(e={}){return this._enqueue(()=>this._dismissView(e))}async _dismissView(e={}){if(!this.done)return;this.done=!1;let t=this.views[this.views.length-2],n=this.views[this.views.length-1],{destroy:r=!0}=e;n.el.classList.add(`dimina-native-view--enter-anima`),t?.el.classList.add(`dimina-native-view--enter-anima`),t?.el.classList.add(`dimina-native-view--before-presenting`),await Q(),n.el.classList.add(`dimina-native-view--before-present`),n.el.classList.remove(`dimina-native-view--instage`),t?.el.classList.remove(`dimina-native-view--presenting`),t?.onPresentIn(),n?.onPresentOut(),await $(n.el,`transform`),r&&(n.destroy(),this.el.removeChild(n.el)),this.views.pop(),t?.el.classList.remove(`dimina-native-view--enter-anima`),t?.el.classList.remove(`dimina-native-view--before-presenting`),this.done=!0}async destroyRootView(e){e.destroy(),this.el.removeChild(e.el)}getActiveView(){return this.views[this.views.length-1]||this.rootView}sleepActiveView(){this.isSleeping||(this.isSleeping=!0,this.getActiveView()?.onPresentOut?.())}wakeActiveView(){if(!this.isSleeping)return;this.isSleeping=!1;let e=this.getActiveView();e?.restoreColorStyle?.(),e?.onPresentIn?.()}updateStatusBarColor(e){this.parent?.updateDeviceBarColor(e)}},ne=`<div class="dimina-app__page-view dimina-app__mini">
|
|
72
|
+
`).join(``),i.querySelectorAll(`[data-quick-index]`).forEach((e,t)=>{e.onclick=()=>u[t].handler()})}openMiniAppMenu(){let e=this.el.querySelector(`.dimina-mini-app-menu__mask`),t=this.el.querySelector(`.dimina-mini-app-menu`);this.renderMiniAppMenu(),e.style.display=`block`,requestAnimationFrame(()=>{e.classList.add(`show`),t.classList.add(`show`)})}closeMiniAppMenu(){let e=this.el.querySelector(`.dimina-mini-app-menu__mask`),t=this.el.querySelector(`.dimina-mini-app-menu`);e.classList.remove(`show`),t.classList.remove(`show`)}registerApi(e,t){this.apiRegistry[e]=t}invokeApi(e,t,n){let r=this.apiRegistry[e];r?r.call(this,t,n):typeof this[e]==`function`?this[e](t,n):t?.module!==void 0||t?.evtId!==void 0?this._handleExtCall(e,t):this._handleUnsupportedApi(e,t)}_handleUnsupportedApi(e,t={}){let{onFail:n,onComplete:r}=this._createApiCallbacks(t),i={errMsg:`${e}:fail api is not supported`};n?n(i):console.warn(`[container] ${i.errMsg}`),r?.()}viewDidLoad(){this.initPageFrame(),this.webviewsContainer=this.el.querySelector(`.dimina-mini-app__webviews`),this.showLaunchScreen(),this.bindMoreEvent(),this.bindCloseEvent(),this.initApp()}async initApp(){await this.jscore.init(),this._bindThemeChange();let e=`main`,t=`${this.appInfo.appId}/${e}/app-config.json`,n=this.appInfo.resourceBaseUrl||`/`,[r]=await Promise.all([te(`${n}${t}`),A(560)]);if(!r)return;this.appConfig=JSON.parse(r),this._initTabBar();let i=this.appInfo.pagePath||this.appConfig.app.entryPagePath,a=this.appConfig.modules[i],o=N(this.appConfig.app,a);this.updateTargetPageColorStyle(o);let s=await this.createBridge({pagePath:i,query:this.appInfo.query,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!0,root:e,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:o});if(this.bridgeList.push(s),this._isTabBarPage(i)){let e=this._normalizePagePath(i);this.tabBarBridges.set(e,s),this.currentTabPath=e,this._setTabBarVisible(!0),this._updateTabBarSelection(e)}let c=this.appInfo.restoreStack?.length>1;s.start({visible:!c}),c&&await this.restorePageStack(this.appInfo.restoreStack.slice(1)),this._syncHash(),this.hideLaunchScreen()}async restorePageStack(e){for(let t=0;t<e.length;t++){let{pagePath:n,query:r}=e[t],i=t===e.length-1,a=n.startsWith(`/`)?n.slice(1):n,o=this.appConfig.modules[a],s=N(this.appConfig.app,o),c=await this.createBridge({pagePath:a,query:r,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!1,root:o?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:s}),l=this.bridgeList[this.bridgeList.length-1];l.webview.el.classList.remove(`dimina-native-view--instage`),l.webview.el.classList.add(`dimina-native-view--slide-out`),this.bridgeList.push(c),c.webview.el.style.zIndex=this.bridgeList.length+1,c.webview.el.classList.remove(`dimina-native-view--before-enter`),i||c.webview.el.classList.add(`dimina-native-view--slide-out`),c.start({visible:i})}if(e.length>0){let e=this.bridgeList[this.bridgeList.length-1],t=this.appConfig.modules[e.opts.pagePath],n=N(this.appConfig.app,t);this.updateTargetPageColorStyle(n),this._isTabBarPage(e.opts.pagePath)||this._setTabBarVisible(!1)}}_syncHash(){let e=this.bridgeList.map(e=>({pagePath:e.opts.pagePath.startsWith(`/`)?e.opts.pagePath.slice(1):e.opts.pagePath,query:e.opts.query||{}}));L.syncStack(this.appId,e)}async createBridge(e){let{jscore:t,configInfo:n,isRoot:r,appId:i,pagePath:a,query:o,scene:s,pages:c,root:l}=e,u=new P({jscore:t,configInfo:n,isRoot:r,appId:i,pagePath:a,query:o,scene:s,pages:c,root:l,baseUrl:this.appInfo.resourceBaseUrl||`/`});return u.parent=this,await u.init(),u}onPresentIn(){let e=this.bridgeList[this.bridgeList.length-1];e?.appShow(),e?.pageShow()}onPresentOut(){let e=this.bridgeList[this.bridgeList.length-1];e?.appHide(),e?.pageHide()}initPageFrame(){this.el.innerHTML=R}updateTargetPageColorStyle(e){let{navigationBarTextStyle:t}=e;this.updateActionColorStyle(t)}showLaunchScreen(){let e=this.el.querySelector(`.dimina-mini-app__launch-screen`),t=this.el.querySelector(`.dimina-mini-app__name`),n=this.el.querySelector(`.dimina-mini-app__logo-img-url`);this.updateActionColorStyle(`black`),t.textContent=this.appInfo.name,n.src=this.appInfo.logo,e.style.display=`block`}hideLaunchScreen(){let e=this.el.querySelector(`.dimina-mini-app__launch-screen`);e.style.display=`none`}updateActionColorStyle(e){this.color=e;let t=this.el.querySelector(`.dimina-mini-app-navigation__actions`);e===`white`?(t.classList.remove(`dimina-mini-app-navigation__actions--black`),t.classList.add(`dimina-mini-app-navigation__actions--white`)):e===`black`&&(t.classList.remove(`dimina-mini-app-navigation__actions--white`),t.classList.add(`dimina-mini-app-navigation__actions--black`)),this.parent.updateStatusBarColor(e)}restoreColorStyle(){this.updateActionColorStyle(this.color)}createCallbackFunction(e){if(e)return t=>{this.jscore.postMessage({type:`triggerCallback`,body:{id:e,args:t}})}}_createApiCallbacks({success:e,fail:t,complete:n}={}){return{onSuccess:this.createCallbackFunction(e),onFail:this.createCallbackFunction(t),onComplete:this.createCallbackFunction(n)}}async navigateTo(e){let{url:t,success:n,fail:r,complete:i}=e,{query:a,pagePath:o}=j(t),s=this.createCallbackFunction(n),c=this.createCallbackFunction(r),l=this.createCallbackFunction(i);if(this._isTabBarPage(o)){c?.({errMsg:`navigateTo:fail can not navigateTo a tabbar page`}),l?.();return}if(!this.webviewAnimaEnd){c?.({errMsg:`navigateTo:fail busy`}),l?.();return}this.webviewAnimaEnd=!1;try{let e=this.appConfig.modules[o],t=N(this.appConfig.app,e);this.updateTargetPageColorStyle(t);let n=await this.createBridge({pagePath:o,query:a,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!1,root:e?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:t}),r=this.bridgeList[this.bridgeList.length-1],i=r.webview;this.bridgeList.push(n),n.start(),this._syncHash(),i.el.classList.remove(`dimina-native-view--instage`),i.el.classList.add(`dimina-native-view--slide-out`),i.el.classList.add(`dimina-native-view--linear-anima`),r?.pageHide(),this._setTabBarVisible(!1),n.webview.el.style.zIndex=this.bridgeList.length+1,n.webview.el.classList.add(`dimina-native-view--enter-anima`),n.webview.el.classList.add(`dimina-native-view--instage`),await z(n.webview.el,`transform`),i.el.classList.remove(`dimina-native-view--linear-anima`),n.webview.el.classList.remove(`dimina-native-view--before-enter`),n.webview.el.classList.remove(`dimina-native-view--enter-anima`),n.webview.el.classList.remove(`dimina-native-view--instage`),s?.({errMsg:`navigateTo:ok`})}catch(e){c?.({errMsg:`navigateTo:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,l?.()}}reLaunch(e){let{url:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);if(!this.webviewAnimaEnd){o?.({errMsg:`reLaunch:fail busy`}),s?.();return}this.webviewAnimaEnd=!1;let{query:c,pagePath:l}=j(t);try{let e=this.appConfig.modules[l],t=N(this.appConfig.app,e);this.updateTargetPageColorStyle(t);let n=new Set([...this.bridgeList,...this.tabBarBridges.values()]);for(let e of n)e.destroy(),e.webview?.el?.remove();this.bridgeList.length=0,this.tabBarBridges.clear(),this.currentTabPath=null,this.webviewsContainer&&(this.webviewsContainer.innerHTML=``),this.createBridge({pagePath:l,query:c,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!0,root:e?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:t}).then(e=>{if(this.bridgeList.push(e),this._isTabBarPage(l)){let t=this._normalizePagePath(l);this.tabBarBridges.set(t,e),this.currentTabPath=t,this._setTabBarVisible(!0),this._updateTabBarSelection(t)}else this._setTabBarVisible(!1);e.start(),this._syncHash(),e.webview.el.style.zIndex=1,this.webviewAnimaEnd=!0,a?.({errMsg:`reLaunch:ok`}),s?.()}).catch(e=>{o?.({errMsg:`reLaunch:fail ${e.message}`}),s?.(),this.webviewAnimaEnd=!0})}catch(e){o?.({errMsg:`reLaunch:fail ${e.message}`}),s?.(),this.webviewAnimaEnd=!0}}applyUpdate(){this.reLaunch({url:this.getEntryPagePath()})}redirectTo(e){let{url:t,success:n,fail:r,complete:i}=e,{query:a,pagePath:o}=j(t),s=this.createCallbackFunction(n),c=this.createCallbackFunction(r),l=this.createCallbackFunction(i);if(this._isTabBarPage(o)){c?.({errMsg:`redirectTo:fail can not redirectTo a tabbar page`}),l?.();return}if(!this.webviewAnimaEnd){c?.({errMsg:`redirectTo:fail busy`}),l?.();return}this.webviewAnimaEnd=!1;try{let e=this.bridgeList[this.bridgeList.length-1],t=this._normalizePagePath(e.opts.pagePath),n=this.appConfig.modules[o],r=N(this.appConfig.app,n);this.updateTargetPageColorStyle(r),e.destroy(),e.opts={...e.opts,pagePath:o,query:a,configInfo:r},e.webview.applyPageStyle(r,{isRoot:e.opts.isRoot,showHomeButton:this.shouldShowHomeButton({pagePath:o,configInfo:r,isRoot:e.opts.isRoot})}),e.resetStatus(),e.start(),this._syncHash(),this.tabBarBridges.get(t)===e&&(this.tabBarBridges.delete(t),this.currentTabPath===t&&(this.currentTabPath=null)),this._setBridgeTabBarInset(e,!1),this._setTabBarVisible(!1),s?.({errMsg:`redirectTo:ok`})}catch(e){c?.({errMsg:`redirectTo:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,l?.()}}async navigateBack(e={}){let{onSuccess:t,onFail:n,onComplete:r}=this._createApiCallbacks(e);if(this.bridgeList.length<2){n?.({errMsg:`navigateBack:fail cannot navigate back at first page`}),r?.();return}if(!this.webviewAnimaEnd){n?.({errMsg:`navigateBack:fail busy`}),r?.();return}this.webviewAnimaEnd=!1;try{let e=this.bridgeList.pop(),n=this.bridgeList[this.bridgeList.length-1],r=this.appConfig.modules[n.opts.pagePath],i=N(this.appConfig.app,r);if(this.updateTargetPageColorStyle(i),e.webview.el.classList.add(`dimina-native-view--before-enter`),e.webview.el.classList.add(`dimina-native-view--enter-anima`),e.destroy(),n.webview.el.classList.remove(`dimina-native-view--slide-out`),n.webview.el.classList.add(`dimina-native-view--instage`),n.webview.el.classList.add(`dimina-native-view--enter-anima`),n.pageShow(),this._syncHash(),this._isTabBarPage(n.opts.pagePath)){let e=this._normalizePagePath(n.opts.pagePath);this.currentTabPath=e,this._setTabBarVisible(!0),this._updateTabBarSelection(e)}await z(n.webview.el,`transform`),n.webview.el.classList.remove(`dimina-native-view--enter-anima`),n.webview.el.classList.remove(`dimina-native-view--instage`),e.webview.el.parentNode.removeChild(e.webview.el),t?.({errMsg:`navigateBack:ok`})}catch(e){n?.({errMsg:`navigateBack:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,r?.()}}async switchTab(e){let{url:t,success:n,fail:r,complete:i}=e,{query:a,pagePath:o}=j(t),s=this._normalizePagePath(o),c=this.createCallbackFunction(n),l=this.createCallbackFunction(r),u=this.createCallbackFunction(i);if(!this._isTabBarPage(s)){l?.({errMsg:`switchTab:fail not a tabBar page: ${s}`}),u?.();return}if(!this.webviewAnimaEnd){l?.({errMsg:`switchTab:fail busy`}),u?.();return}if(this.currentTabPath===s&&this.bridgeList.length===1){this._setTabBarVisible(!0),this._updateTabBarSelection(s),c?.({errMsg:`switchTab:ok`}),u?.();return}this.webviewAnimaEnd=!1;try{let e=this.currentTabPath,t=e?this.tabBarBridges.get(e):null,n=!!t&&this.bridgeList.length===1&&this.bridgeList[0]===t;for(;this.bridgeList.length>0;){let e=this.bridgeList[this.bridgeList.length-1];if(this._isTabBarPage(e.opts.pagePath))break;e.pageHide(),e.destroy(),e.webview?.el?.remove(),this.bridgeList.pop()}if(t&&t!==this.tabBarBridges.get(s)){n&&t.pageHide(),t.webview?.el&&(t.webview.el.style.display=`none`);let e=this.bridgeList.indexOf(t);e>=0&&this.bridgeList.splice(e,1)}let r=this.tabBarBridges.get(s),i=this.appConfig.modules[s],o=N(this.appConfig.app,i);this.updateTargetPageColorStyle(o),r||(r=await this.createBridge({pagePath:s,query:a,scene:this.appInfo.scene,jscore:this.jscore,isRoot:!0,root:i?.root||`main`,appId:this.appInfo.appId,pages:this.appConfig.app.pages,configInfo:o}),this.tabBarBridges.set(s,r),r.start());let l=r.webview.el;this._setBridgeTabBarInset(r,!0),l.classList.remove(`dimina-native-view--before-enter`,`dimina-native-view--slide-out`,`dimina-native-view--enter-anima`,`dimina-native-view--linear-anima`,`dimina-native-view--instage`),l.style.display=``,l.style.zIndex=1,this.bridgeList.includes(r)||this.bridgeList.push(r),this.currentTabPath=s,r.pageShow(),this._setTabBarVisible(!0),this._updateTabBarSelection(s),this._syncHash(),c?.({errMsg:`switchTab:ok`})}catch(e){l?.({errMsg:`switchTab:fail ${e.message}`})}finally{this.webviewAnimaEnd=!0,u?.()}}_initTabBar(){let e=this.appConfig?.app?.tabBar;if(!(!e||!Array.isArray(e.list)||e.list.length===0)){if(this.tabBarConfig=e,this.tabBarPaths=e.list.map(e=>this._normalizePagePath(e.pagePath)),this.tabBarBadges=e.list.map(()=>``),this.tabBarRedDots=e.list.map(()=>!1),this.tabBarApiVisible=!0,this.customTabBar=e.custom===!0,this.customTabBar){this.tabBarEl=this.el.querySelector(`.dimina-mini-app__tabbar`),this.tabBarEl&&(this.tabBarEl.textContent=``,this.tabBarEl.style.display=`none`),this.tabBarHeight=0,this.el.style.setProperty(`--dimina-tabbar-height`,`0px`);return}this._renderTabBar()}}_renderTabBar(){if(this.tabBarEl=this.el.querySelector(`.dimina-mini-app__tabbar`),!this.tabBarEl)return;let{color:e,backgroundColor:t,borderStyle:n,list:r}=this.tabBarConfig,i=this._sanitizeCssColor(e)||`#999999`,a=this._sanitizeCssColor(t)||`#ffffff`;this.tabBarEl.textContent=``;let o=document.createElement(`div`);o.className=`dimina-tabbar`,o.style.backgroundColor=a,o.style.borderTopColor=this._getTabBarBorderColor(n),r.forEach((e,t)=>{let n=this._normalizePagePath(e.pagePath),r=document.createElement(`div`);r.className=`dimina-tabbar-item`,r.dataset.path=n,r.dataset.index=String(t);let a=this._resolveTabBarIcon(e.iconPath);a&&r.appendChild(this._createTabBarIcon(a,`dimina-tabbar-icon-default`));let s=this._resolveTabBarIcon(e.selectedIconPath);s&&r.appendChild(this._createTabBarIcon(s,`dimina-tabbar-icon-selected`));let c=document.createElement(`span`);c.className=`dimina-tabbar-text`,c.style.color=i,c.textContent=e.text||``,r.appendChild(c);let l=document.createElement(`span`);l.className=`dimina-tabbar-badge`,l.hidden=!0,r.appendChild(l);let u=document.createElement(`span`);u.className=`dimina-tabbar-red-dot`,u.hidden=!0,r.appendChild(u),o.appendChild(r)}),this.tabBarEl.appendChild(o),this.tabBarEl.addEventListener(`click`,e=>{let t=e.target.closest(`.dimina-tabbar-item`);if(!t)return;let n=t.dataset.path;n&&n!==this.currentTabPath&&this.switchTab({url:`/${n}`})}),typeof ResizeObserver<`u`&&(this._tabBarResizeObserver?.disconnect(),this._tabBarResizeObserver=new ResizeObserver(()=>this._syncTabBarHeightVar()),this._tabBarResizeObserver.observe(this.tabBarEl))}_createTabBarIcon(e,t){let n=document.createElement(`img`);return n.className=`dimina-tabbar-icon ${t}`,n.src=e,n.alt=``,n.addEventListener(`error`,()=>{n.style.display=`none`}),n}_sanitizeCssColor(e){if(!e||typeof e!=`string`)return``;let t=e.trim();return t.length===0||t.length>64?``:/[<>"';{}()\\]/.test(t)?/^(?:rgb|rgba|hsl|hsla)\(\s*[\d.,%\s/-]+\)$/i.test(t)?t:``:t}_getTabBarBorderColor(e){return e===`white`?`#ffffff`:`#e0e0e0`}_getTabBarHeight(){if(this.customTabBar)return 0;if(!this.tabBarEl)return this.tabBarHeight;let e=this.tabBarEl.getBoundingClientRect().height;if(!e&&this.tabBarEl.style.display===`none`){let t=this.tabBarEl.style.display,n=this.tabBarEl.style.visibility;this.tabBarEl.style.visibility=`hidden`,this.tabBarEl.style.display=`block`,e=this.tabBarEl.getBoundingClientRect().height,this.tabBarEl.style.display=t,this.tabBarEl.style.visibility=n}return e>0&&(this.tabBarHeight=e),this.tabBarHeight}_syncTabBarHeightVar(){let e=this._getTabBarHeight();this.el.style.setProperty(`--dimina-tabbar-height`,`${e}px`),this._syncTabBarBridgeInsets()}_setBridgeTabBarInset(e,t){let n=e?.webview?.el;if(n){if(!t||this.customTabBar){n.style.removeProperty(`bottom`);return}n.style.bottom=`${this._getTabBarHeight()}px`}}_syncTabBarBridgeInsets(){for(let e of this.tabBarBridges.values())this._setBridgeTabBarInset(e,!0)}_joinBaseUrl(...e){return`${`/`.endsWith(`/`)?`/`:`//`}${e.map(e=>String(e).trim().replace(/^\/+|\/+$/g,``)).filter(Boolean).join(`/`)}`}_resolveTabBarIcon(e){if(!e||typeof e!=`string`)return null;let t=e.trim();if(!t)return null;if(/^(?:data:|blob:|https?:|\/\/)/i.test(t))return t;let n=t.replace(/^\/+/,``).replace(/^\.\//,``),r=`${this.appId}/`;return n.startsWith(r)?this._joinBaseUrl(n):this._joinBaseUrl(this.appId,`main`,n)}_setTabBarVisible(e){if(!this.tabBarEl)return;if(this.customTabBar){this.tabBarEl.style.display=`none`,this._syncTabBarHeightVar();return}let t=this.bridgeList[this.bridgeList.length-1],n=this._normalizePagePath(t?.opts?.pagePath),r=!!n&&n===this.currentTabPath&&this._isTabBarPage(n),i=e&&this.tabBarApiVisible&&r;this.tabBarEl.style.display=i?`block`:`none`,this._syncTabBarHeightVar()}_updateTabBarSelection(e){if(!this.tabBarEl||!this.tabBarConfig)return;let t=this.tabBarConfig.color||`#999999`,n=this.tabBarConfig.selectedColor||`#1890ff`;this.tabBarEl.querySelectorAll(`.dimina-tabbar-item`).forEach(r=>{let i=r.getAttribute(`data-path`)===e,a=r.querySelector(`.dimina-tabbar-text`),o=r.querySelector(`.dimina-tabbar-icon-default`),s=r.querySelector(`.dimina-tabbar-icon-selected`);a&&(a.style.color=i?n:t),o&&(o.style.display=i?`none`:`block`),s&&(s.style.display=i?`block`:`none`),r.classList.toggle(`dimina-tabbar-item--selected`,i)})}_getTabBarItemEl(e){return this.tabBarEl?.querySelector(`.dimina-tabbar-item[data-index="${e}"]`)||null}_validateTabBarIndex(e,t,n,r){let i=this.tabBarConfig?.list?.length||0;if(!i||!this.tabBarEl)return n?.({errMsg:`${e}:fail tabBar not configured`}),r?.(),!1;let a=Number(t);return t==null||!Number.isInteger(a)||a<0||a>=i?(n?.({errMsg:`${e}:fail invalid index ${t}`}),r?.(),!1):!0}_replaceTabBarItemIcons(e,t){let n=e.querySelector(`.dimina-tabbar-text`);e.querySelectorAll(`.dimina-tabbar-icon-default, .dimina-tabbar-icon-selected`).forEach(e=>e.remove());let r=this._resolveTabBarIcon(t.iconPath);r&&e.insertBefore(this._createTabBarIcon(r,`dimina-tabbar-icon-default`),n);let i=this._resolveTabBarIcon(t.selectedIconPath);i&&e.insertBefore(this._createTabBarIcon(i,`dimina-tabbar-icon-selected`),n)}setTabBarStyle(e={}){let{color:t,selectedColor:n,backgroundColor:r,borderStyle:i,success:a,fail:o,complete:s}=e,c=this.createCallbackFunction(a),l=this.createCallbackFunction(o),u=this.createCallbackFunction(s);if(!this.tabBarConfig||!this.tabBarEl){l?.({errMsg:`setTabBarStyle:fail tabBar not configured`}),u?.();return}let d=i===`black`||i===`white`?i:null,f=t===void 0?null:this._sanitizeCssColor(t),p=n===void 0?null:this._sanitizeCssColor(n),m=r===void 0?null:this._sanitizeCssColor(r);f&&(this.tabBarConfig.color=f),p&&(this.tabBarConfig.selectedColor=p),m&&(this.tabBarConfig.backgroundColor=m),d&&(this.tabBarConfig.borderStyle=d);let h=this.tabBarEl.querySelector(`.dimina-tabbar`);h&&(m&&(h.style.backgroundColor=m),d&&(h.style.borderTopColor=this._getTabBarBorderColor(d))),this._updateTabBarSelection(this.currentTabPath),c?.({errMsg:`setTabBarStyle:ok`}),u?.()}setTabBarItem(e={}){let{index:t,text:n,iconPath:r,selectedIconPath:i}=e,{onSuccess:a,onFail:o,onComplete:s}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`setTabBarItem`,t,o,s))return;let c=Number(t),l=this.tabBarConfig.list[c],u={...l,text:n===void 0?l.text:n,iconPath:r===void 0?l.iconPath:r,selectedIconPath:i===void 0?l.selectedIconPath:i};this.tabBarConfig.list[c]=u;let d=this._getTabBarItemEl(c);if(d){let e=d.querySelector(`.dimina-tabbar-text`);e&&(e.textContent=u.text||``),(r!==void 0||i!==void 0)&&this._replaceTabBarItemIcons(d,u),this._updateTabBarSelection(this.currentTabPath)}a?.({errMsg:`setTabBarItem:ok`}),s?.()}showTabBar(e={}){let{onSuccess:t,onComplete:n}=this._createApiCallbacks(e);this.tabBarApiVisible=!0,this._setTabBarVisible(!0),t?.({errMsg:`showTabBar:ok`}),n?.()}hideTabBar(e={}){let{onSuccess:t,onComplete:n}=this._createApiCallbacks(e);this.tabBarApiVisible=!1,this._setTabBarVisible(!1),t?.({errMsg:`hideTabBar:ok`}),n?.()}setTabBarBadge(e={}){let{index:t,text:n=``}=e,{onSuccess:r,onFail:i,onComplete:a}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`setTabBarBadge`,t,i,a))return;let o=Number(t);this.tabBarBadges[o]=String(n),this.tabBarRedDots[o]=!1;let s=this._getTabBarItemEl(o),c=s?.querySelector(`.dimina-tabbar-badge`),l=s?.querySelector(`.dimina-tabbar-red-dot`);c&&(c.textContent=this.tabBarBadges[o],c.hidden=this.tabBarBadges[o].length===0),l&&(l.hidden=!0),r?.({errMsg:`setTabBarBadge:ok`}),a?.()}removeTabBarBadge(e={}){let{index:t}=e,{onSuccess:n,onFail:r,onComplete:i}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`removeTabBarBadge`,t,r,i))return;let a=Number(t);this.tabBarBadges[a]=``;let o=this._getTabBarItemEl(a)?.querySelector(`.dimina-tabbar-badge`);o&&(o.textContent=``,o.hidden=!0),n?.({errMsg:`removeTabBarBadge:ok`}),i?.()}showTabBarRedDot(e={}){let{index:t}=e,{onSuccess:n,onFail:r,onComplete:i}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`showTabBarRedDot`,t,r,i))return;let a=Number(t);this.tabBarRedDots[a]=!0,this.tabBarBadges[a]=``;let o=this._getTabBarItemEl(a),s=o?.querySelector(`.dimina-tabbar-badge`),c=o?.querySelector(`.dimina-tabbar-red-dot`);s&&(s.textContent=``,s.hidden=!0),c&&(c.hidden=!1),n?.({errMsg:`showTabBarRedDot:ok`}),i?.()}hideTabBarRedDot(e={}){let{index:t}=e,{onSuccess:n,onFail:r,onComplete:i}=this._createApiCallbacks(e);if(!this._validateTabBarIndex(`hideTabBarRedDot`,t,r,i))return;let a=Number(t);this.tabBarRedDots[a]=!1;let o=this._getTabBarItemEl(a)?.querySelector(`.dimina-tabbar-red-dot`);o&&(o.hidden=!0),n?.({errMsg:`hideTabBarRedDot:ok`}),i?.()}async navigateToMiniProgram(e){let{appId:t,path:n,scene:r=1037}=e,{onSuccess:i,onFail:a,onComplete:o}=this._createApiCallbacks(e);try{await X.openApp({appId:t,path:n,scene:r},this.parent),i?.({errMsg:`navigateToMiniProgram:ok`})}catch(e){a?.({errMsg:`navigateToMiniProgram:fail ${e.message}`})}finally{o?.()}}bindMoreEvent(){let e=this.el.querySelector(`.dimina-mini-app-navigation__actions-variable`),t=this.el.querySelector(`.dimina-mini-app-menu__mask`),n=this.el.querySelector(`.dimina-mini-app-menu`),r=this.el.querySelector(`.dimina-mini-app-menu__footer-btn--cancel`);t.addEventListener(`transitionend`,()=>{t.classList.contains(`show`)||(t.style.display=`none`)}),e.onclick=()=>this.openMiniAppMenu(),t.onclick=()=>this.closeMiniAppMenu(),r.onclick=()=>this.closeMiniAppMenu(),n.onclick=e=>e.stopPropagation()}bindCloseEvent(){let e=this.el.querySelector(`.dimina-mini-app-navigation__actions-close`);e.onclick=()=>{this.closeMiniProgram()}}destroy(){this._destroyed=!0;for(let e of this._extSubscriptions.values())e?.();this._extSubscriptions.clear();for(let e of this._windowResizeHandlers)globalThis.removeEventListener?.(`resize`,e);this._windowResizeHandlers.clear(),this._themeMediaQuery?.removeEventListener?this._themeMediaQuery.removeEventListener(`change`,this._themeChangeHandler):this._themeMediaQuery?.removeListener?.(this._themeChangeHandler),this._themeMediaQuery=null,this._themeChangeHandler=null,this._tabBarResizeObserver?.disconnect(),this._tabBarResizeObserver=null;for(let e of this._modalPendingTimers)clearTimeout(e);this._modalPendingTimers.clear();for(let e of this._modalStack)e.mask?.remove(),e.dialog?.remove();this._modalStack.length=0,this._unlockModalPageTouch(),this.hideToast({}),X.popView(),this.jscore.destroy()}getNetworkType(e){let{success:t}=e;this.createCallbackFunction(t)?.({networkType:`wifi`})}request({url:e,data:t,header:n={},timeout:r=0,method:i=`GET`,dataType:a=`json`,responseType:o=`text`,success:s,fail:c,complete:l}){let u={method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:e,data:t,header:n,timeout:r,method:i,dataType:a,responseType:o})},d=this.createCallbackFunction(s),f=this.createCallbackFunction(c),p=this.createCallbackFunction(l);fetch(`http://localhost:7788/proxy`,u).then(e=>{if(!e.ok){let t=Error(e.statusText);throw t.code=e.status,t}let t={};switch(e.headers.forEach((e,n)=>{t[n]=e}),a){case`json`:return e.json().then(n=>({data:JSON.parse(n),header:t,statusCode:e.status}));case`arraybuffer`:return e.arrayBuffer().then(n=>({data:n,header:t,statusCode:e.status}));default:return e.text().then(n=>({data:n,header:t,statusCode:e.status}))}}).then(e=>{d?.(e)}).catch(e=>{f?.({errMsg:e.message,errno:e.code})}).finally(()=>{p?.()})}getSystemInfoAsync(e){let t=this.parent.parent.root.querySelector(`.iphone__status-bar`).getBoundingClientRect(),n=this.parent.el.querySelector(`.dimina-native-webview__root`).getBoundingClientRect(),{success:r,complete:i}=e,a=this.createCallbackFunction(r),o=this.createCallbackFunction(i);a?.({statusBarHeight:t.height,brand:`devtools`,mode:`default`,model:`web`,platform:`devtools`,system:`web`,deviceOrientation:`portrait`,SDKVersion:`3.0.0`,language:`zh_CN`,wifiEnabled:!0,safeArea:{width:n.width,height:n.height,top:n.top,bottom:n.bottom,left:n.left,right:n.right}}),o?.()}getSystemInfo(e={}){let{onSuccess:t,onComplete:n}=this._createApiCallbacks(e);t?.({...this.getSystemInfoSync(),errMsg:`getSystemInfo:ok`}),n?.()}onWindowResize(e={}){let t=this.createCallbackFunction(e.success);if(!t||!globalThis.addEventListener)return;let n=()=>{let{windowWidth:e,windowHeight:n,deviceOrientation:r=`portrait`}=this.getSystemInfoSync();t({size:{windowWidth:e,windowHeight:n},deviceOrientation:r})};this._windowResizeHandlers??=new Set,this._windowResizeHandlers.add(n),globalThis.addEventListener(`resize`,n)}getMenuButtonBoundingClientRect(){let e=this.el.querySelector(`.dimina-mini-app-navigation__actions`).getBoundingClientRect(),t=this.el.getBoundingClientRect(),n=(this.parent.parent.root.querySelector(`.iphone__status-bar`)?.getBoundingClientRect().height||20)+4,r=n+e.height,i=e.left-t.left;return{top:n,right:e.right-t.left,bottom:r,left:i,width:e.width,height:e.height,x:i,y:n}}getHostEnvSnapshot(){return{menuRect:this.getMenuButtonBoundingClientRect(),systemInfo:this.getSystemInfoSync()}}_bindThemeChange(){let e=globalThis.matchMedia?.(`(prefers-color-scheme: dark)`);e&&(this._themeMediaQuery=e,this._themeChangeHandler=e=>{this.jscore.postMessage({type:`hostEnvUpdate`,body:{systemInfo:{...this.getSystemInfoSync(),theme:e.matches?`dark`:`light`}}})},e.addEventListener?e.addEventListener(`change`,this._themeChangeHandler):e.addListener?.(this._themeChangeHandler))}getSystemInfoSync(){let e=this.parent.parent.root.querySelector(`.iphone__status-bar`),t=this.parent.el.querySelector(`.dimina-native-webview__root`)?.getBoundingClientRect(),n=t?.width||this.el.clientWidth||375,r=t?.height||this.el.clientHeight||667,i=e?.getBoundingClientRect().height||20;return{brand:`devtools`,model:`web`,platform:`devtools`,system:`web`,SDKVersion:`3.0.0`,pixelRatio:globalThis.devicePixelRatio||1,screenWidth:n,screenHeight:r,windowWidth:n,windowHeight:r,statusBarHeight:i,safeArea:{left:0,right:n,top:i,bottom:r,width:n,height:Math.max(r-i,0)},enableDebug:!1,host:{appId:``},language:navigator.language||`zh_CN`,version:``,theme:globalThis.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches?`dark`:`light`,fontSizeScaleFactor:1,fontSizeSetting:16}}showToast(e={}){let{title:t=``,duration:n=1500,icon:r=`success`,mask:i=!1,success:a,complete:o}=e;if(!t)return;this.hideToast({});let s=this.createCallbackFunction(a),c=this.createCallbackFunction(o),l=null;i&&(l=document.createElement(`div`),l.className=`dimina-toast-mask`,this.el.appendChild(l));let u=document.createElement(`div`);u.className=`dimina-toast dimina-toast--${r}`,r===`none`&&u.classList.add(`dimina-toast--text-only`);let d=document.createElement(`p`);d.textContent=String(t),u.appendChild(d),this.el.appendChild(u),this.toastInfo.dom=u,this.toastInfo.maskEl=l,this.toastInfo.timer=setTimeout(()=>{u.remove(),l?.remove(),this.toastInfo.dom===u&&(this.toastInfo.dom=null,this.toastInfo.maskEl=null,this.toastInfo.timer=null)},n),s?.(),c?.()}hideToast(e={}){let{success:t,complete:n}=e,r=this.createCallbackFunction(t),i=this.createCallbackFunction(n);this.toastInfo.dom&&(this.toastInfo.dom.remove(),this.toastInfo.dom=null),this.toastInfo.maskEl&&(this.toastInfo.maskEl.remove(),this.toastInfo.maskEl=null),this.toastInfo.timer&&(clearTimeout(this.toastInfo.timer),this.toastInfo.timer=null),r?.(),i?.()}showLoading(e={}){this.showToast({...e,icon:`loading`})}hideLoading(e={}){this.hideToast(e)}_lockModalPageTouch(){if(this._modalPageTouchTarget)return;let e=(this.bridgeList?.[this.bridgeList.length-1])?.webview?.iframe?.contentWindow;e?.addEventListener&&(e.addEventListener(`touchmove`,V,{capture:!0,passive:!1}),this._modalPageTouchTarget=e)}_unlockModalPageTouch(){this._modalPageTouchTarget&&=(this._modalPageTouchTarget.removeEventListener(`touchmove`,V,!0),null)}showModal(e){if(this._destroyed)return;this._modalStack.length===0&&this._lockModalPageTouch();let t=this._mountModal(e||{});this._modalStack.push(t),this._updateModalView(),t.mask.classList.add(`show`);let n=setTimeout(()=>{this._modalPendingTimers.delete(n),!this._destroyed&&this._modalStack.includes(t)&&t.dialog.classList.add(`show`)},100);this._modalPendingTimers.add(n)}_updateModalView(){let e=this._modalStack.length-1;for(let t=0;t<this._modalStack.length;t++){let n=this._modalStack[t];t===e?(n.mask.classList.remove(`dimina-modal--occluded`),n.dialog.classList.remove(`dimina-modal--occluded`)):(n.mask.classList.add(`dimina-modal--occluded`),n.dialog.classList.add(`dimina-modal--occluded`))}}_mountModal(e){let{title:t=``,content:n=``,showCancel:r=!0,cancelText:i=`取消`,cancelColor:a=`#000`,confirmText:o=`确定`,confirmColor:s=`#576b95`,success:c,complete:l}=e,u=this.createCallbackFunction(c),d=this.createCallbackFunction(l),f=document.createElement(`div`);f.className=`dimina-dialog-mask`,f.addEventListener(`touchmove`,B,{passive:!1});let p=document.createElement(`div`);p.className=`dimina-dialog`;let m=this._modalStack.length;if(f.style.zIndex=String(1100+m*20),p.style.zIndex=String(1110+m*20),t){let e=document.createElement(`h2`);e.className=`dimina-dialog__title`,e.textContent=String(t),p.appendChild(e)}if(n){let e=document.createElement(`p`);e.className=`dimina-dialog__content`,e.textContent=String(n),p.appendChild(e)}let h=document.createElement(`div`);h.className=`dimina-dialog__buttons`;let g=!1,_={mask:f,dialog:p,close:null},v=e=>{if(g)return;g=!0;let t=this._modalStack.indexOf(_);t>=0&&this._modalStack.splice(t,1),this._modalStack.length===0?(f.classList.remove(`show`),p.classList.remove(`show`),setTimeout(()=>{f.remove(),p.remove()},200)):(f.remove(),p.remove()),this._updateModalView(),this._modalStack.length===0&&this._unlockModalPageTouch(),u?.(e),d?.()};if(_.close=v,r){let e=document.createElement(`button`);e.type=`button`,e.className=`dimina-dialog__button`,e.style.color=a,e.textContent=String(i),e.addEventListener(`click`,()=>{v({cancel:!0,confirm:!1,errMsg:`showModal:ok`})}),h.appendChild(e)}let y=document.createElement(`button`);return y.type=`button`,y.className=`dimina-dialog__button`,y.style.color=s,y.textContent=String(o),y.addEventListener(`click`,()=>{v({cancel:!1,confirm:!0,errMsg:`showModal:ok`})}),h.appendChild(y),p.appendChild(h),this.el.appendChild(f),this.el.appendChild(p),_}showActionSheet(e){let{itemList:t=[],itemColor:n=`#000`,success:r,fail:i,complete:a}=e||{};if(!Array.isArray(t)||t.length===0){i&&this.createCallbackFunction(i)({errMsg:`showActionSheet:fail`}),a&&this.createCallbackFunction(a)();return}let o=document.createElement(`div`);o.className=`dimina-action-sheet-mask`;let s=document.createElement(`div`);s.className=`dimina-action-sheet`;let c=()=>{o.remove(),s.remove()};t.forEach((e,t)=>{let i=document.createElement(`div`);i.className=`dimina-action-sheet-item`,i.style.color=n,i.textContent=e,i.onclick=()=>{c(),r&&this.createCallbackFunction(r)({tapIndex:t}),a&&this.createCallbackFunction(a)()},s.appendChild(i)});let l=document.createElement(`div`);l.className=`dimina-action-sheet-cancel`,l.textContent=`取消`,l.onclick=()=>{c(),i&&this.createCallbackFunction(i)({errMsg:`showActionSheet:fail cancel`}),a&&this.createCallbackFunction(a)()},s.appendChild(l),o.onclick=c,this.el.appendChild(o),this.el.appendChild(s),requestAnimationFrame(()=>requestAnimationFrame(()=>{s.classList.add(`show`),o.classList.add(`show`)}))}setNavigationBarTitle(e){let{title:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{let e=this.bridgeList[this.bridgeList.length-1].webview.el.querySelector(`.dimina-native-webview__navigation-title`);e?(e.textContent=t||``,a?.({errMsg:`setNavigationBarTitle:ok`})):o?.({errMsg:`setNavigationBarTitle:fail Navigation title element not found`})}catch(e){o?.({errMsg:`setNavigationBarTitle:fail ${e.message}`})}finally{s?.()}}setNavigationBarColor(e){let{frontColor:t,backgroundColor:n,success:r,fail:i,complete:a}=e,o=this.createCallbackFunction(r),s=this.createCallbackFunction(i),c=this.createCallbackFunction(a);try{let e=this.bridgeList[this.bridgeList.length-1].webview.el.querySelector(`.dimina-native-webview__navigation`);e?(t&&(e.querySelector(`.dimina-native-webview__navigation-title`).style.color=t),n&&(e.style.backgroundColor=n),o?.({errMsg:`setNavigationBarColor:ok`})):s?.({errMsg:`setNavigationBarColor:fail Navigation element not found`})}catch(e){s?.({errMsg:`setNavigationBarColor:fail ${e.message}`})}finally{c?.()}}pageScrollTo(e){let{scrollTop:t,duration:n=300,success:r,fail:i,complete:a}=e,o=this.createCallbackFunction(r),s=this.createCallbackFunction(i),c=this.createCallbackFunction(a);try{let e=this.bridgeList[this.bridgeList.length-1].webview.iframe.contentWindow.document.documentElement;e?(e.scrollTo({top:t,behavior:n>0?`smooth`:`auto`}),setTimeout(()=>{o?.({errMsg:`pageScrollTo:ok`}),c?.()},n)):(s?.({errMsg:`pageScrollTo:fail Webview root element not found`}),c?.())}catch(e){s?.({errMsg:`pageScrollTo:fail ${e.message}`}),c?.()}}setClipboardData(e){let{data:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{navigator.clipboard.writeText(t).then(()=>{a?.({errMsg:`setClipboardData:ok`}),s?.()}).catch(e=>{o?.({errMsg:`setClipboardData:fail ${e.message}`}),s?.()})}catch(e){o?.({errMsg:`setClipboardData:fail ${e.message}`}),s?.()}}getClipboardData(e){let{success:t,fail:n,complete:r}=e,i=this.createCallbackFunction(t),a=this.createCallbackFunction(n),o=this.createCallbackFunction(r);try{navigator.clipboard.readText().then(e=>{i?.({data:e,errMsg:`getClipboardData:ok`}),o?.()}).catch(e=>{a?.({errMsg:`getClipboardData:fail ${e.message}`}),o?.()})}catch(e){a?.({errMsg:`getClipboardData:fail ${e.message}`}),o?.()}}setStorage(e){let{key:t,data:n,success:r,fail:i,complete:a}=e,o=this.createCallbackFunction(r),s=this.createCallbackFunction(i),c=this.createCallbackFunction(a);try{let e=`${this.appId}_${t}`,r=typeof n==`object`?JSON.stringify(n):String(n);localStorage.setItem(e,r),o?.({errMsg:`setStorage:ok`})}catch(e){s?.({errMsg:`setStorage:fail ${e.message}`})}finally{c?.()}}getStorage(e){let{key:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{let e=`${this.appId}_${t}`,n=localStorage.getItem(e);if(n!==null){let e=n;try{e=JSON.parse(n)}catch{}a?.({data:e,errMsg:`getStorage:ok`})}else o?.({errMsg:`getStorage:fail data not found`})}catch(e){o?.({errMsg:`getStorage:fail ${e.message}`})}finally{s?.()}}removeStorage(e){let{key:t,success:n,fail:r,complete:i}=e,a=this.createCallbackFunction(n),o=this.createCallbackFunction(r),s=this.createCallbackFunction(i);try{let e=`${this.appId}_${t}`;localStorage.getItem(e)===null||localStorage.removeItem(e),a?.({errMsg:`removeStorage:ok`})}catch(e){o?.({errMsg:`removeStorage:fail ${e.message}`})}finally{s?.()}}clearStorage(e){let{success:t,fail:n,complete:r}=e||{},i=this.createCallbackFunction(t),a=this.createCallbackFunction(n),o=this.createCallbackFunction(r);try{let e=`${this.appId}_`,t=[];for(let n=0;n<localStorage.length;n++){let r=localStorage.key(n);r.startsWith(e)&&t.push(r)}t.forEach(e=>localStorage.removeItem(e)),i?.({errMsg:`clearStorage:ok`})}catch(e){a?.({errMsg:`clearStorage:fail ${e.message}`})}finally{o?.()}}getStorageInfo(e){let{success:t,fail:n,complete:r}=e||{},i=this.createCallbackFunction(t),a=this.createCallbackFunction(n),o=this.createCallbackFunction(r);try{let e=[],t=0,n=`${this.appId}_`;for(let r=0;r<localStorage.length;r++){let i=localStorage.key(r);if(i.startsWith(n)){let r=i.substring(n.length);e.push(r);let a=localStorage.getItem(i);t+=a?a.length*2:0}}i?.({keys:e,currentSize:t,limitSize:10485760,errMsg:`getStorageInfo:ok`})}catch(e){a?.({errMsg:`getStorageInfo:fail ${e.message}`})}finally{o?.()}}_parseExtEventKey(e){let t=X.getExtModules();for(let n of Object.keys(t)){let t=`${n}_`;if(e.startsWith(t))return{module:n,event:e.slice(t.length)}}return{module:null,event:null}}_handleExtCall(e,t={}){t.module===void 0?t.success?this._extOnBridgeCall(e,t):this._extOffBridgeCall(e):this._extBridgeCall(e,t)}_extBridgeCall(e,t){let{module:n,data:r={},success:i,fail:a,complete:o}=t,s=this.createCallbackFunction(i),c=this.createCallbackFunction(a),l=this.createCallbackFunction(o),u=X.getExtModule(n);if(!u){let e=`extBridge:fail module "${n}" not registered`;console.error(`[container] ${e}`),c?.({errMsg:e}),l?.();return}try{u({event:e,data:r,success:e=>{s?.(e),l?.()},fail:e=>{c?.(e),l?.()}})}catch(e){c?.({errMsg:`extBridge:fail ${e.message}`}),l?.()}}_extOnBridgeCall(e,t){let{success:n}=t,r=this.createCallbackFunction(n),{module:i,event:a}=this._parseExtEventKey(e);if(!i){console.warn(`[container] extOnBridge:fail no registered module matched for key "${e}"`);return}let o=X.getExtModule(i);this._extSubscriptions.get(e)?.();try{let t=o({event:a,data:{isSustain:!0},success:e=>r?.(e),fail:t=>console.error(`[container] extOnBridge error (${e}):`,t)});this._extSubscriptions.set(e,t??null)}catch(e){console.error(`[container] extOnBridge:fail ${e.message}`)}}_extOffBridgeCall(e){let t=this._extSubscriptions.get(e);t&&(t(),this._extSubscriptions.delete(e))}};function U(e){let t=new Map;return function(...n){let r=n.length===1?n[0]:JSON.stringify(n);if(t.has(r))return t.get(r);let i=e.apply(this,n);return t.set(r,i),i}}var W=U(async()=>{let e=await fetch(`/appList.json`).then(e=>e.json());return e.forEach(e=>{let t=JSON.stringify(e),n=sessionStorage.getItem(t);if(n)e.logo=n;else{let n=ae(e);sessionStorage.setItem(t,n),e.logo=n}}),e});async function G(e){let t=await W();for(let n of t)if(n.appId===e)return n}function K(e){return e.endsWith(`/`)?e:`${e}/`}async function q(e){let t=new URL(e,window.location.href),n=await fetch(t);if(!n.ok)throw Error(`manifest request failed: HTTP ${n.status}`);let r=await n.json(),i=r?.data??r;if(!i||typeof i!=`object`)throw Error(`manifest is not an object`);if(!i.appId)throw Error(`manifest missing appId`);if(!i.path)throw Error(`manifest missing path`);let a=i.webBaseUrl||i.baseUrl,o=a?new URL(a,t):new URL(`./`,t);return{...i,manifestUrl:t.href,resourceBaseUrl:K(o.href)}}function J(e){if(!e||e.length===0)return`#2196F3`;let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;let n=Y(Math.abs(t%360),.7+Math.abs(t%3e3)/1e4,.8+Math.abs(t%2e3)/1e4);return ie(n[0],n[1],n[2])}function Y(e,t,n){let r,i,a,o=Math.floor(e/60),s=e/60-o,c=n*(1-t),l=n*(1-s*t),u=n*(1-(1-s)*t);switch(o%6){case 0:r=n,i=u,a=c;break;case 1:r=l,i=n,a=c;break;case 2:r=c,i=n,a=u;break;case 3:r=c,i=l,a=n;break;case 4:r=u,i=c,a=n;break;case 5:r=n,i=c,a=l;break}return[Math.round(r*255),Math.round(i*255),Math.round(a*255)]}function ie(e,t,n){return`#${((1<<24)+(e<<16)+(t<<8)+n).toString(16).slice(1)}`}function ae(e){let t=[60,60],n=window.devicePixelRatio||1,r=document.createElement(`canvas`);r.style.width=t[0]+`px`,r.style.height=t[1]+`px`,r.width=t[0]*n,r.height=t[1]*n;let i=r.getContext(`2d`);i.scale(n,n),i.imageSmoothingEnabled=!0,i.imageSmoothingQuality=`high`,i.textRenderingOptimization=`optimizeQuality`,i.fillStyle=J(e.name),i.fillRect(0,0,t[0],t[1]),i.fillStyle=`rgb(255,255,255)`,i.font=`${t[0]*.6}px Arial`;let a=e.name.charAt(0),o=i.measureText(a),s=t[0]/2,c=t[1]/2+(o.actualBoundingBoxAscent-o.actualBoundingBoxDescent)/2;return i.textAlign=`center`,i.fillText(a,s,c),r.toDataURL(`image/png`,1)}var X=class{static appStack=[];static _extModules={};static registerExtModule(e,t){this._extModules[e]=t}static getExtModule(e){return this._extModules[e]}static getExtModules(){return this._extModules}static async openApp(e,t){let{scene:n,destroy:r,restoreStack:i}=e,a=e.appId?sessionStorage.getItem(`dimina:manifest:${e.appId}`):null,o=e.manifestUrl||a,s=o?await q(o):null,c=e.appId||s?.appId;if(!c)throw Error(`openApp requires appId or manifestUrl`);if(s&&s.appId!==c)throw Error(`manifest appId ${s.appId} does not match ${c}`);let l=e.path||s?.path;if(!l)throw Error(`mini program ${c} has no launch path`);let{pagePath:u,query:d}=j(l),f=s?null:await G(c),p=s?.name||f?.name||``,m=s?.logo||f?.logo||``;if(s&&sessionStorage.setItem(`dimina:manifest:${c}`,s.manifestUrl),r)for(let e of this.appStack)e.appId!==c&&(e.bridgeList.pop()?.destroy(),t.destroyRootView(e));let h=this.getAppById(c);if(h)t.presentView(h,!0);else{let e=new H({appId:c,scene:n,name:p,logo:m,pagePath:u,query:d,restoreStack:i,manifestUrl:s?.manifestUrl,resourceBaseUrl:s?.resourceBaseUrl});this.appStack.push(e),t.presentView(e,!1)}}static getAppById(e){for(let t of this.appStack)if(t.appId===e)return t;return null}static popView(){this.appStack.pop()}static closeApp(e){e.parent.dismissView({destroy:!1})}},Z=()=>new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e))),Q=(e,t,n=560)=>new Promise(r=>{let i=setTimeout(r,n),a=n=>{(!t||n.propertyName===t)&&(clearTimeout(i),e.removeEventListener(`transitionend`,a),r())};e.addEventListener(`transitionend`,a)}),oe=class{constructor(){this.el=null,this.window=null,this.root=null,this.views=[],this.rootView=null,this.parent=null,this.done=!0,this.isSleeping=!1,this._queue=Promise.resolve(),this.init()}_enqueue(e){return this._queue=this._queue.then(()=>e()),this._queue}init(){this.el=document.createElement(`div`),this.el.classList.add(`dimina-application`),this.window=document.createElement(`div`),this.window.classList.add(`dimina-native-window`),this.el.appendChild(this.window)}initRootView(e){this.rootView=e,e.parent=this,e.el.classList.add(`dimina-native-view--instage`),e.el.style.zIndex=1,this.root=e,this.window.appendChild(e.el),e.viewDidLoad()}async pushView(e){if(!this.done)return;this.done=!1;let t=this.views[this.views.length-1];e.parent=this,this.views.push(e),e.el.style.zIndex=this.views.length,e.el.classList.add(`dimina-native-view--before-enter`),this.window.appendChild(e.el),e?.viewDidLoad(),await Z(),t.el.classList.remove(`dimina-native-view--instage`),t.el.classList.add(`dimina-native-view--slide-out`),t.el.classList.add(`dimina-native-view--linear-anima`),e.el.classList.add(`dimina-native-view--enter-anima`),e.el.classList.add(`dimina-native-view--instage`),await Q(e.el,`transform`),t.el.classList.remove(`dimina-native-view--linear-anima`),e.el.classList.remove(`dimina-native-view--before-enter`),e.el.classList.remove(`dimina-native-view--enter-anima`),e.el.classList.remove(`dimina-native-view--instage`),this.done=!0}async popView(){if(this.views.length<2||!this.done)return;this.done=!1;let e=this.views[this.views.length-2],t=this.views[this.views.length-1];e.el.classList.remove(`dimina-native-view--slide-out`),e.el.classList.add(`dimina-native-view--instage`),e.el.classList.add(`dimina-native-view--enter-anima`),t.el.classList.remove(`dimina-native-view--instage`),t.el.classList.add(`dimina-native-view--before-enter`),t.el.classList.add(`dimina-native-view--enter-anima`),await Q(t.el,`transform`),this.views.pop(),this.window.removeChild(t.el),e.el.classList.remove(`dimina-native-view--enter-anima`),this.done=!0}presentView(e,t){return this._enqueue(()=>this._presentView(e,t))}async _presentView(e,t){if(!this.done)return;this.done=!1;let n=this.views[this.views.length-1];e.parent=this,e.el.style.zIndex=this.views.length+1,e.el.classList.add(`dimina-native-view--before-present`),e.el.classList.add(`dimina-native-view--enter-anima`),n?.el.classList.add(`dimina-native-view--before-presenting`),n?.el.classList.remove(`dimina-native-view--instage`),n?.el.classList.add(`dimina-native-view--enter-anima`),n?.onPresentOut(),e.onPresentIn(),!t&&this.el.appendChild(e.el),this.views.push(e),!t&&e.viewDidLoad&&e.viewDidLoad(),t&&e.restoreColorStyle(),await Z(),n?.el.classList.add(`dimina-native-view--presenting`),e.el.classList.add(`dimina-native-view--instage`),await Q(e.el,`transform`),e.el.classList.remove(`dimina-native-view--before-present`),e.el.classList.remove(`dimina-native-view--enter-anima`),n?.el.classList.remove(`dimina-native-view--enter-anima`),n?.el.classList.remove(`dimina-native-view--before-presenting`),this.done=!0}dismissView(e={}){return this._enqueue(()=>this._dismissView(e))}async _dismissView(e={}){if(!this.done)return;this.done=!1;let t=this.views[this.views.length-2],n=this.views[this.views.length-1],{destroy:r=!0}=e;n.el.classList.add(`dimina-native-view--enter-anima`),t?.el.classList.add(`dimina-native-view--enter-anima`),t?.el.classList.add(`dimina-native-view--before-presenting`),await Z(),n.el.classList.add(`dimina-native-view--before-present`),n.el.classList.remove(`dimina-native-view--instage`),t?.el.classList.remove(`dimina-native-view--presenting`),t?.onPresentIn(),n?.onPresentOut(),await Q(n.el,`transform`),r&&(n.destroy(),this.el.removeChild(n.el)),this.views.pop(),t?.el.classList.remove(`dimina-native-view--enter-anima`),t?.el.classList.remove(`dimina-native-view--before-presenting`),this.done=!0}async destroyRootView(e){e.destroy(),this.el.removeChild(e.el)}getActiveView(){return this.views[this.views.length-1]||this.rootView}sleepActiveView(){this.isSleeping||(this.isSleeping=!0,this.getActiveView()?.onPresentOut?.())}wakeActiveView(){if(!this.isSleeping)return;this.isSleeping=!1;let e=this.getActiveView();e?.restoreColorStyle?.(),e?.onPresentIn?.()}updateStatusBarColor(e){this.parent?.updateDeviceBarColor(e)}},se=`<div class="dimina-app__page-view dimina-app__mini">
|
|
72
73
|
<div class="dimina-app-navigation">
|
|
73
74
|
<div class="dimina-app-navigation__content">
|
|
74
75
|
<div class="dimina-app-navigation__left-btn"></div>
|
|
@@ -89,7 +90,7 @@ var e=(e=0)=>t=>`\u001B[${t+e}m`,t=(e=0)=>t=>`\u001B[${38+e};5;${t}m`,n=(e=0)=>(
|
|
|
89
90
|
</div>
|
|
90
91
|
</div>
|
|
91
92
|
</div>
|
|
92
|
-
`,
|
|
93
|
+
`,ce=class{constructor(){this.parent=null,this.el=document.createElement(`div`),this.el.classList.add(`dimina-native-view`),this.appList=[],this.filteredAppList=[],this.searchKeyword=``}viewDidLoad(){this.el.innerHTML=se,this.createAppList(),this.bindSearchEvent(),this.bindOpenMiniApp()}createAppList(){this.setListState(`加载中...`),W().then(e=>{this.appList=e,this.renderFilteredAppList()}).catch(()=>{this.appList=[],this.renderAppList([]),this.setListState(`应用列表加载失败`)})}bindSearchEvent(){this.el.querySelector(`.dimina-app__mini-search-input-placeholder`).addEventListener(`input`,e=>{this.searchKeyword=e.target.value.trim().toLocaleLowerCase(),this.renderFilteredAppList()})}bindOpenMiniApp(){let e=this.el.querySelector(`.dimina-app__mini-used-list`);e.onclick=async e=>{let t=M(e.target,`dimina-app__mini-used-list-item`);if(!t)return;let n=t.getAttribute(`data-appid`),r=await G(n);r&&X.openApp({appId:n,path:r.path,scene:1001,destroy:!0},this.parent)}}onPresentOut(){}onPresentIn(){this.parent.updateStatusBarColor(`black`)}renderFilteredAppList(){let e=this.searchKeyword;this.filteredAppList=e?this.appList.filter(t=>{let n=t.name?.toLocaleLowerCase()??``,r=t.appId?.toLocaleLowerCase()??``;return n.includes(e)||r.includes(e)}):this.appList,this.renderAppList(this.filteredAppList),this.appList.length?this.filteredAppList.length?this.setListState(``):this.setListState(`未找到匹配的小程序`):this.setListState(`暂无应用`)}renderAppList(e){let t=this.el.querySelector(`.dimina-app__mini-used-list`),n=document.createDocumentFragment();e.forEach(e=>{let t=document.createElement(`li`);t.className=`dimina-app__mini-used-list-item`,t.dataset.appid=e.appId;let r=document.createElement(`div`);r.className=`dimina-app__mini-used-logo`;let i=document.createElement(`img`);i.src=e.logo,i.alt=`${e.name} logo`,i.loading=`lazy`,i.draggable=!1,r.appendChild(i);let a=document.createElement(`p`);a.className=`dimina-app__mini-used-name`,a.textContent=e.name,t.append(r,a),n.appendChild(t)}),t.replaceChildren(n)}setListState(e){let t=this.el.querySelector(`.dimina-app__mini-used-state`);t.textContent=e,t.hidden=!e}},le=`<!-- 手机本体 -->
|
|
93
94
|
<div id="iphone">
|
|
94
95
|
<!-- 手机屏幕 -->
|
|
95
96
|
<div class="iphone__screen">
|
|
@@ -131,4 +132,4 @@ var e=(e=0)=>t=>`\u001B[${t+e}m`,t=(e=0)=>t=>`\u001B[${38+e};5;${t}m`,n=(e=0)=>(
|
|
|
131
132
|
<!-- 电源键 -->
|
|
132
133
|
<button class="power-btn" type="button" aria-label="电源键" aria-pressed="false"></button>
|
|
133
134
|
</div>
|
|
134
|
-
|
|
135
|
+
`,$=class{constructor(){this.appContainer=null,this.application=null,this.isScreenSleeping=!1,this.root=document.querySelector(`#root`),this.init()}init(){this.root.innerHTML=le,this.appContainer=this.root.querySelector(`.iphone__apps`),this.updateDeviceBarColor(`black`),this.updateStatusBarTime(),this.outerGlow(),this.bindPowerButton()}updateStatusBarTime(){let e=this.root.querySelector(`.status-bar__time`),t=()=>{let t=new Date,n=t.getHours().toString().padStart(2,`0`),r=t.getMinutes().toString().padStart(2,`0`);e.textContent=`${n}:${r}`};t(),setInterval(t,6e4)}outerGlow(){let e=this.root.querySelector(`.iphone__screen_dynamic-island`);e.addEventListener(`click`,()=>{window.open(`https://github.com/didi/dimina`,`_blank`)}),e.addEventListener(`mouseenter`,()=>{e.classList.add(`island-hover`)}),e.addEventListener(`mouseleave`,()=>{e.classList.remove(`island-hover`)});let t=null,n=0;document.body.addEventListener(`pointermove`,({x:e,y:r})=>{t={pointerX:e,pointerY:r},!n&&(n=requestAnimationFrame(()=>{let{pointerX:e,pointerY:r}=t,i=e.toFixed(2),a=r.toFixed(2),o=(e/window.innerWidth).toFixed(2),s=(r/window.innerHeight).toFixed(2);document.documentElement.style.setProperty(`--x`,i),document.documentElement.style.setProperty(`--xp`,o),document.documentElement.style.setProperty(`--y`,a),document.documentElement.style.setProperty(`--yp`,s),n=0}))})}bindPowerButton(){let e=this.root.querySelector(`.power-btn`);e?.addEventListener(`pointerdown`,e=>{e.preventDefault(),this.toggleScreen()}),e?.addEventListener(`keydown`,e=>{e.repeat||e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),this.toggleScreen())})}toggleScreen(){this.isScreenSleeping?this.wakeScreen():this.sleepScreen()}sleepScreen(){this.isScreenSleeping||(this.isScreenSleeping=!0,this.root.querySelector(`.iphone__screen`)?.classList.add(`iphone__screen--sleeping`),this.root.querySelector(`.power-btn`)?.setAttribute(`aria-pressed`,`true`),this.application?.sleepActiveView?.())}wakeScreen(){this.isScreenSleeping&&(this.isScreenSleeping=!1,this.root.querySelector(`.iphone__screen`)?.classList.remove(`iphone__screen--sleeping`),this.root.querySelector(`.power-btn`)?.setAttribute(`aria-pressed`,`false`),this.application?.wakeActiveView?.())}updateDeviceBarColor(e){let t=this.root.querySelector(`.iphone__status-bar`);e===`black`?(t.classList.remove(`iphone__status-bar--white`),t.classList.add(`iphone__status-bar--black`)):e===`white`&&(t.classList.add(`iphone__status-bar--white`),t.classList.remove(`iphone__status-bar--black`))}open(e){this.application=e,e.parent=this,this.appContainer.appendChild(e.el)}};X.registerExtModule(`DemoNativeModule`,({event:e,data:t,success:n,fail:r})=>{if(e===`getUserInfo`){setTimeout(()=>{n?.({uid:t?.uid??`unknown`,name:`Mock User`,level:3})},300);return}if(e===`onTickEvent`){let e=0,t=setInterval(()=>{e++,n?.({tick:e,timestamp:Date.now()})},1e3);return()=>clearInterval(t)}r?.({errMsg:`DemoNativeModule: unknown event "${e}"`})}),window.onload=function(){let e=new $,t=new oe,n=new ce;t.initRootView(n),e.open(t);let r=new URLSearchParams(window.location.search),i=r.get(`manifestUrl`);if(i){X.openApp({manifestUrl:i,path:r.get(`entry`)||void 0,scene:1001,destroy:!0},t);return}let a=L.parse(window.location.hash,window.location.search);if(a){let e=a.stack[0],n=e.query&&Object.keys(e.query).length>0?`${e.pagePath}?${Object.entries(e.query).map(([e,t])=>`${e}=${encodeURIComponent(t)}`).join(`&`)}`:e.pagePath;X.openApp({appId:a.appId,path:n,scene:1001,destroy:!0,restoreStack:a.stack},t)}};
|