@dimina-kit/devkit 0.1.0-dev.20260422094158
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/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/fe/dimina-fe-container/assets/container-api.js +1 -0
- package/fe/dimina-fe-container/assets/container.css +2 -0
- package/fe/dimina-fe-container/assets/index.css +1 -0
- package/fe/dimina-fe-container/assets/index.js +148 -0
- package/fe/dimina-fe-container/assets/pageFrame.css +1 -0
- package/fe/dimina-fe-container/assets/pageFrame.js +27 -0
- package/fe/dimina-fe-container/assets/service.js +6 -0
- package/fe/dimina-fe-container/dimina-version.json +3 -0
- package/fe/dimina-fe-container/favicon.ico +0 -0
- package/fe/dimina-fe-container/images/icon-arrow.png +0 -0
- package/fe/dimina-fe-container/images/mini-action-white.png +0 -0
- package/fe/dimina-fe-container/images/mini-action.png +0 -0
- package/fe/dimina-fe-container/images/mini-arrow-left-white.png +0 -0
- package/fe/dimina-fe-container/images/mini-arrow-left.jpg +0 -0
- package/fe/dimina-fe-container/images/mini-arrow-left.png +0 -0
- package/fe/dimina-fe-container/images/mini-close-white.png +0 -0
- package/fe/dimina-fe-container/images/mini-close.png +0 -0
- package/fe/dimina-fe-container/images/more.png +0 -0
- package/fe/dimina-fe-container/images/search.jpg +0 -0
- package/fe/dimina-fe-container/index.html +1 -0
- package/fe/dimina-fe-container/pageFrame.html +1 -0
- package/fe/dimina-fe-server/THIRD_PARTY_NOTICES.md +13 -0
- package/fe/dimina-fe-server/index.js +68 -0
- package/fe/index.js +118 -0
- package/fe/live-reload.js +30 -0
- package/fe/server-container.js +11 -0
- package/fe/server.js +3 -0
- package/package.json +73 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 EchoTechFE and dimina-kit contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Dimina DevKit
|
|
2
|
+
|
|
3
|
+
Dimina 小程序开发工具包。提供项目编译、H5 容器预览服务、文件监听热更新等能力,可独立使用或作为 `@dimina-kit/devtools` 的编译后端。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @dimina-kit/devkit
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 使用
|
|
16
|
+
|
|
17
|
+
### openProject
|
|
18
|
+
|
|
19
|
+
核心 API。编译小程序项目并启动 H5 容器预览服务器:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { openProject } from '@dimina-kit/devkit'
|
|
23
|
+
|
|
24
|
+
const session = await openProject({
|
|
25
|
+
projectPath: '/path/to/miniapp',
|
|
26
|
+
port: 0, // 0 = 自动分配可用端口
|
|
27
|
+
sourcemap: true,
|
|
28
|
+
onRebuild: () => console.log('重新编译完成'),
|
|
29
|
+
onBuildError: (err) => console.error('编译失败', err),
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
console.log(`预览地址: http://localhost:${session.port}`)
|
|
33
|
+
console.log(`应用信息:`, session.appInfo)
|
|
34
|
+
|
|
35
|
+
// 结束时关闭会话
|
|
36
|
+
await session.close()
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
#### 参数
|
|
40
|
+
|
|
41
|
+
| 字段 | 类型 | 默认值 | 说明 |
|
|
42
|
+
| -------------- | ------------------------ | ------- | -------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `projectPath` | `string` | 必填 | 小程序项目绝对路径 |
|
|
44
|
+
| `port` | `number` | `0` | 预览服务器端口,`0` 表示自动分配 |
|
|
45
|
+
| `sourcemap` | `boolean` | `false` | 是否生成 sourcemap |
|
|
46
|
+
| `simulatorDir` | `string` | -- | 模拟器外壳静态资源目录;不传则不启用 `/simulator` 路由 |
|
|
47
|
+
| `outputDir` | `string` | -- | 编译产物输出目录,默认 `<os.tmpdir()>/dimina-kit/<projectPath 哈希前 12 位>`(每个项目独立) |
|
|
48
|
+
| `onRebuild` | `() => void` | -- | 文件变更触发重新编译后的回调 |
|
|
49
|
+
| `onBuildError` | `(err: unknown) => void` | -- | 编译出错时的回调 |
|
|
50
|
+
|
|
51
|
+
#### 返回值 ProjectSession
|
|
52
|
+
|
|
53
|
+
| 字段 | 类型 | 说明 |
|
|
54
|
+
| --------- | --------------------- | ----------------------------------- |
|
|
55
|
+
| `appInfo` | `AppInfo` | 应用信息(`appId`、`name`、`path`) |
|
|
56
|
+
| `port` | `number` | 实际监听的端口 |
|
|
57
|
+
| `close` | `() => Promise<void>` | 关闭文件监听和预览服务器 |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 工作流程
|
|
62
|
+
|
|
63
|
+
1. 调用 `@dimina/compiler` 编译小程序项目
|
|
64
|
+
2. 启动基于 Express 的 H5 容器预览服务器(含 CORS、SPA fallback、可选 live-reload)
|
|
65
|
+
3. 通过 chokidar 监听项目目录变更,自动触发增量编译和页面刷新
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 构建
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pnpm build # 编译 TypeScript(src -> dist)
|
|
73
|
+
pnpm check-types # 类型检查
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## License
|
|
79
|
+
|
|
80
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface AppInfo {
|
|
2
|
+
appId: string;
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ProjectSession {
|
|
7
|
+
appInfo: AppInfo;
|
|
8
|
+
port: number;
|
|
9
|
+
close: () => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function openProject(opts: {
|
|
12
|
+
projectPath: string;
|
|
13
|
+
port?: number;
|
|
14
|
+
sourcemap?: boolean;
|
|
15
|
+
simulatorDir?: string;
|
|
16
|
+
containerDir?: string;
|
|
17
|
+
outputDir?: string;
|
|
18
|
+
onRebuild?: () => void;
|
|
19
|
+
onBuildError?: (err: unknown) => void;
|
|
20
|
+
}): Promise<ProjectSession>;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiDA,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CACrC,GAAG,OAAO,CAAC,cAAc,CAAC,CAmF1B"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { createServer } from 'node:http';
|
|
7
|
+
import { createRequire } from 'node:module';
|
|
8
|
+
import chokidar from 'chokidar';
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
const build = require('@dimina/compiler');
|
|
12
|
+
// esbuild's native binary is shipped inside node_modules, but when packaged
|
|
13
|
+
// via electron-builder it lives in app.asar. asarUnpack puts the real binary
|
|
14
|
+
// in app.asar.unpacked — but esbuild computes its binary path from __dirname,
|
|
15
|
+
// which still points inside app.asar. Redirect it explicitly via require.resolve
|
|
16
|
+
// so we don't hard-code the hoisting depth (pnpm vs npm layouts differ).
|
|
17
|
+
if (!process.env.ESBUILD_BINARY_PATH && __dirname.includes('app.asar')) {
|
|
18
|
+
const platform = `${process.platform}-${process.arch}`;
|
|
19
|
+
try {
|
|
20
|
+
const resolved = require.resolve(`@esbuild/${platform}/bin/esbuild`);
|
|
21
|
+
process.env.ESBUILD_BINARY_PATH = resolved.replace(/app\.asar([\\/])/, 'app.asar.unpacked$1');
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// fall through — esbuild will surface a clearer error if the binary is truly missing
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function getRandomPort() {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const srv = createServer();
|
|
30
|
+
srv.listen(0, () => {
|
|
31
|
+
const port = srv.address().port;
|
|
32
|
+
srv.close(() => resolve(port));
|
|
33
|
+
});
|
|
34
|
+
srv.on('error', reject);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export async function openProject(opts) {
|
|
38
|
+
const { projectPath: rawProjectPath, port = 0, sourcemap = false, simulatorDir, containerDir: overrideContainerDir, outputDir, onRebuild, onBuildError, } = opts;
|
|
39
|
+
const projectPath = path.resolve(rawProjectPath);
|
|
40
|
+
const buildOptions = { sourcemap };
|
|
41
|
+
const resolvedPort = port === 0 ? await getRandomPort() : port;
|
|
42
|
+
const containerDir = overrideContainerDir ?? path.join(__dirname, '..', 'fe', 'dimina-fe-container');
|
|
43
|
+
const prevCwd = process.cwd();
|
|
44
|
+
const resolvedOutputDir = outputDir
|
|
45
|
+
?? path.join(os.tmpdir(), 'dimina-kit', createHash('sha1').update(projectPath).digest('hex').slice(0, 12));
|
|
46
|
+
fs.mkdirSync(resolvedOutputDir, { recursive: true });
|
|
47
|
+
let initialAppInfo;
|
|
48
|
+
try {
|
|
49
|
+
process.chdir(projectPath);
|
|
50
|
+
initialAppInfo = (await build(resolvedOutputDir, projectPath, true, buildOptions));
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
process.chdir(prevCwd);
|
|
54
|
+
}
|
|
55
|
+
const sessionApps = initialAppInfo ? [initialAppInfo] : [];
|
|
56
|
+
process.env.DIMINA_NO_OPEN_BROWSER = '1';
|
|
57
|
+
const fe = await import('../fe/index.js');
|
|
58
|
+
const start = fe.start;
|
|
59
|
+
const { server, reload } = await start({
|
|
60
|
+
port: resolvedPort,
|
|
61
|
+
containerDir,
|
|
62
|
+
outputDir: resolvedOutputDir,
|
|
63
|
+
simulatorDir,
|
|
64
|
+
liveReload: true,
|
|
65
|
+
sessionApps,
|
|
66
|
+
});
|
|
67
|
+
const watcher = chokidar.watch(projectPath, {
|
|
68
|
+
ignored: /(^|[/\\])\../,
|
|
69
|
+
persistent: true,
|
|
70
|
+
ignoreInitial: true,
|
|
71
|
+
});
|
|
72
|
+
let isBuilding = false;
|
|
73
|
+
watcher.on('change', async () => {
|
|
74
|
+
if (isBuilding)
|
|
75
|
+
return;
|
|
76
|
+
isBuilding = true;
|
|
77
|
+
try {
|
|
78
|
+
process.chdir(projectPath);
|
|
79
|
+
const rebuilt = (await build(resolvedOutputDir, projectPath, true, buildOptions));
|
|
80
|
+
if (rebuilt) {
|
|
81
|
+
const idx = sessionApps.findIndex(a => a.appId === rebuilt.appId);
|
|
82
|
+
if (idx === -1)
|
|
83
|
+
sessionApps.push(rebuilt);
|
|
84
|
+
else
|
|
85
|
+
sessionApps[idx] = rebuilt;
|
|
86
|
+
}
|
|
87
|
+
reload?.();
|
|
88
|
+
onRebuild?.();
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
onBuildError?.(e);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
process.chdir(prevCwd);
|
|
95
|
+
isBuilding = false;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
return {
|
|
99
|
+
appInfo: initialAppInfo ?? { appId: 'unknown', name: path.basename(projectPath), path: projectPath },
|
|
100
|
+
port: resolvedPort,
|
|
101
|
+
close: async () => {
|
|
102
|
+
await watcher.close();
|
|
103
|
+
server.closeAllConnections?.();
|
|
104
|
+
await new Promise(resolve => server.close(() => resolve()));
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=(e=0)=>t=>`[${t+e}m`,t=(e=0)=>t=>`[${38+e};5;${t}m`,i=(e=0)=>(t,i,s)=>`[${38+e};2;${t};${i};${s}m`,s={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(s.modifier),Object.keys(s.color),Object.keys(s.bgColor);var a=function(){const a=/* @__PURE__ */new Map;for(const[e,t]of Object.entries(s)){for(const[e,i]of Object.entries(t))s[e]={open:`[${i[0]}m`,close:`[${i[1]}m`},t[e]=s[e],a.set(i[0],i[1]);Object.defineProperty(s,e,{value:t,enumerable:!1})}return Object.defineProperty(s,"codes",{value:a,enumerable:!1}),s.color.close="[39m",s.bgColor.close="[49m",s.color.ansi=e(),s.color.ansi256=t(),s.color.ansi16m=i(),s.bgColor.ansi=e(10),s.bgColor.ansi256=t(10),s.bgColor.ansi16m=i(10),Object.defineProperties(s,{rgbToAnsi256:{value:(e,t,i)=>e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5),enumerable:!1},hexToRgb:{value(e){const t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!t)return[0,0,0];let[i]=t;3===i.length&&(i=[...i].map(e=>e+e).join(""));const s=Number.parseInt(i,16);return[s>>16&255,s>>8&255,255&s]},enumerable:!1},hexToAnsi256:{value:e=>s.rgbToAnsi256(...s.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return e-8+90;let t,i,s;if(e>=232)t=(10*(e-232)+8)/255,i=t,s=t;else{const a=(e-=16)%36;t=Math.floor(e/36)/5,i=Math.floor(a/6)/5,s=a%6/5}const a=2*Math.max(t,i,s);if(0===a)return 30;let n=30+(Math.round(s)<<2|Math.round(i)<<1|Math.round(t));return 2===a&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(e,t,i)=>s.ansi256ToAnsi(s.rgbToAnsi256(e,t,i)),enumerable:!1},hexToAnsi:{value:e=>s.ansi256ToAnsi(s.hexToAnsi256(e)),enumerable:!1}}),s}(),n=(()=>{if(!("navigator"in globalThis))return 0;if(globalThis.navigator.userAgentData){const e=navigator.userAgentData.brands.find(({brand:e})=>"Chromium"===e);if(e&&e.version>93)return 3}return/\b(Chrome|Chromium)\//.test(globalThis.navigator.userAgent)?1:0})(),o=0!==n&&{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3},r={stdout:o,stderr:o};function l(e,t,i){let s=e.indexOf(t);if(-1===s)return e;const a=t.length;let n=0,o="";do{o+=e.slice(n,s)+t+i,n=s+a,s=e.indexOf(t,n)}while(-1!==s);return o+=e.slice(n),o}var{stdout:c,stderr:d}=r,h=Symbol("GENERATOR"),p=Symbol("STYLER"),g=Symbol("IS_EMPTY"),m=["ansi","ansi","ansi256","ansi16m"],u=Object.create(null),v=e=>{const t=(...e)=>e.join(" ");return((e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");const i=c?c.level:0;e.level=void 0===t.level?i:t.level})(t,e),Object.setPrototypeOf(t,w.prototype),t};function w(e){return v(e)}Object.setPrototypeOf(w.prototype,Function.prototype);for(const[j,O]of Object.entries(a))u[j]={get(){const e=C(this,y(O.open,O.close,this[p]),this[g]);return Object.defineProperty(this,j,{value:e}),e}};u.visible={get(){const e=C(this,this[p],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var b=(e,t,i,...s)=>"rgb"===e?"ansi16m"===t?a[i].ansi16m(...s):"ansi256"===t?a[i].ansi256(a.rgbToAnsi256(...s)):a[i].ansi(a.rgbToAnsi(...s)):"hex"===e?b("rgb",t,i,...a.hexToRgb(...s)):a[i][e](...s);for(const j of["rgb","hex","ansi256"]){u[j]={get(){const{level:e}=this;return function(...t){const i=y(b(j,m[e],"color",...t),a.color.close,this[p]);return C(this,i,this[g])}}};u["bg"+j[0].toUpperCase()+j.slice(1)]={get(){const{level:e}=this;return function(...t){const i=y(b(j,m[e],"bgColor",...t),a.bgColor.close,this[p]);return C(this,i,this[g])}}}}var f=Object.defineProperties(()=>{},{...u,level:{enumerable:!0,get(){return this[h].level},set(e){this[h].level=e}}}),y=(e,t,i)=>{let s,a;return void 0===i?(s=e,a=t):(s=i.openAll+e,a=t+i.closeAll),{open:e,close:t,openAll:s,closeAll:a,parent:i}},C=(e,t,i)=>{const s=(...e)=>_(s,1===e.length?""+e[0]:e.join(" "));return Object.setPrototypeOf(s,f),s[h]=e,s[p]=t,s[g]=i,s},_=(e,t)=>{if(e.level<=0||!t)return e[g]?"":t;let i=e[p];if(void 0===i)return t;const{openAll:s,closeAll:a}=i;if(t.includes(""))for(;void 0!==i;)t=l(t,i.close,i.open),i=i.parent;const n=t.indexOf("\n");return-1!==n&&(t=function(e,t,i,s){let a=0,n="";do{const o="\r"===e[s-1];n+=e.slice(a,o?s-1:s)+t+(o?"\r\n":"\n")+i,a=s+1,s=e.indexOf("\n",a)}while(-1!==s);return n+=e.slice(a),n}(t,a,s,n)),s+t+a};Object.defineProperties(w.prototype,u);w(),w({level:d?d.level:0});function k(e){return{all:e=e||/* @__PURE__ */new Map,on:function(t,i){var s=e.get(t);s?s.push(i):e.set(t,[i])},off:function(t,i){var s=e.get(t);s&&(i?s.splice(s.indexOf(i)>>>0,1):e.set(t,[]))},emit:function(t,i){var s=e.get(t);s&&s.slice().map(function(e){e(i)}),(s=e.get("*"))&&s.slice().map(function(e){e(t,i)})}}}function S(){return Math.random().toString(36).slice(2,7)}function L(e){const t=e.split("?"),i=t[0],s=t[1],a={query:{},pagePath:i};return s?(s.split("&").forEach(e=>{const t=e.split("=")[0],i=e.split("=")[1];a.query[t]=i}),a):a}function I(e,t){const i={},s=e.window||{},a=t||{};return i.navigationBarTitleText=a.navigationBarTitleText||s.navigationBarTitleText||"",i.navigationBarBackgroundColor=a.navigationBarBackgroundColor||s.navigationBarBackgroundColor||"#000",i.navigationBarTextStyle=a.navigationBarTextStyle||s.navigationBarTextStyle||"white",i.backgroundColor=a.backgroundColor||s.backgroundColor||"#fff",i.navigationStyle=a.navigationStyle||s.navigationStyle||"default",i.usingComponents=a.usingComponents||{},i}var M=class{constructor(e){this.opts=e,this.id=`webview_${S()}`,this.el=document.createElement("div"),this.el.classList.add("dimina-native-view"),this.el.innerHTML='<div class="dimina-native-webview">\n\t\x3c!-- 导航区域 --\x3e\n\t<div class="dimina-native-webview__navigation">\n\t\t<div class="dimina-native-webview__navigation-content">\n\t\t\t<div class="dimina-native-webview__navigation-left-btn"></div>\n\t\t\t<h2 class="dimina-native-webview__navigation-title"></h2>\n\t\t</div>\n\t</div>\n\n\t\x3c!-- iframe --\x3e\n\t<div class="dimina-native-webview__body">\n\t\t<div class="dimina-native-webview__root">\n\t\t\t<iframe class="dimina-native-webview__window" title="pageFrame"></iframe>\n\t\t</div>\n\t</div>\n</div>',this.setInitialStyle(),this.iframe=this.el.querySelector(".dimina-native-webview__window"),this.iframe.src="/pageFrame.html",this.iframe.name=this.id,this.event=k(),this.bindBackEvent()}async init(e){await this.frameLoaded();const t=window.frames[this.iframe.name];t.DiminaRenderBridge.invoke=e=>{this.event.emit("invoke",e)},t.DiminaRenderBridge.publish=e=>{this.event.emit("publish",e)},e?.()}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(){this.el.querySelector(".dimina-native-webview__navigation-left-btn").onclick=()=>{this.parent.parent.navigateBack()}}frameLoaded(){return new Promise(e=>{this.iframe.onload=()=>{e()}})}setInitialStyle(){const e=this.opts.configInfo,t=this.el.querySelector(".dimina-native-webview"),i=this.el.querySelector(".dimina-native-webview__navigation-title"),s=this.el.querySelector(".dimina-native-webview__navigation"),a=this.el.querySelector(".dimina-native-webview__navigation-left-btn"),n=this.el.querySelector(".dimina-native-webview__root");this.opts.isRoot?a.style.display="none":a.style.display="block","white"===e.navigationBarTextStyle?s.classList.add("dimina-native-webview__navigation--white"):s.classList.add("dimina-native-webview__navigation--black"),"custom"===e.navigationStyle&&t.classList.add("dimina-native-webview--custom-nav"),n.style.backgroundColor=e.backgroundColor,s.style.backgroundColor=e.navigationBarBackgroundColor,i.textContent=e.navigationBarTitleText}},P=class{constructor(e){this.id=`bridge_${S()}`,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){"string"==typeof e&&(e=JSON.parse(e));const{body:t,target:i}=e;t.bridgeId&&t.bridgeId!==this.id||("service"===i?this.jscore.postMessage(e):"render"===i&&this.webview.postMessage(e))}messageInvoke(e,t){"string"==typeof t&&(t=JSON.parse(t));const{type:i,body:s,target:a}=t;if(s.bridgeId&&s.bridgeId!==this.id)return;const n={type:i,body:{bridgeId:this.id,pagePath:this.opts.pagePath,scene:this.opts.scene,query:this.opts.query,...s}};if("service"===a){if("serviceResourceLoaded"===i){if(this.serviceResource=!0,!this.isResourceLoaded())return;n.type="resourceLoaded"}else if("renderResourceLoaded"===i){if(this.renderResource=!0,!this.isResourceLoaded())return;n.type="resourceLoaded"}this.jscore.postMessage(n)}else if("container"===a&&"invokeAPI"===i){const{name:e,params:t}=s;this.parent.invokeApi(e,t)}}start(){this.webview.postMessage({type:"loadResource",body:{bridgeId:this.id,appId:this.opts.appId,pagePath:this.opts.pagePath,root:this.opts.root,baseUrl:"/"}}),this.jscore.postMessage({type:"loadResource",body:{bridgeId:this.id,appId:this.opts.appId,pagePath:this.opts.pagePath,root:this.opts.root,baseUrl:"/",hostEnv:this.parent.getHostEnvSnapshot()}})}resetStatus(){this.serviceResource=!1,this.renderResource=!1}createWebview(){return new Promise(e=>{const t=new M({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.isResourceLoaded()&&this.jscore.postMessage({type:"pageShow",body:{bridgeId:this.id}})}pageHide(){this.isResourceLoaded()&&this.jscore.postMessage({type:"pageHide",body:{bridgeId:this.id}})}destroy(){this.isResourceLoaded()&&this.jscore.postMessage({type:"pageUnload",body:{bridgeId:this.id}})}},x=class{constructor(e){this.parent=e,this.worker=null,this.event=k()}async init(){const e=this.parent.getApiNamespaces?.()||[],t=JSON.stringify({apiNamespaces:e});this.worker=new Worker("/assets/service.js",{type:"classic",name:t}),this.worker.onmessage=e=>{const 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()}},A=class{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){const t=e.indexOf("?");if(-1===t)return{pagePath:e,query:{}};const i=e.slice(0,t),s={};return e.slice(t+1).split("&").forEach(e=>{const[t,i]=e.split("=");t&&(s[decodeURIComponent(t)]=decodeURIComponent(i??""))}),{pagePath:i,query:s}}static syncStack(e,t){const i=t.map(e=>this._encodePage(e.pagePath,e.query)).join("|");history.replaceState(null,"",`#${e}|${i}`)}static clear(){history.replaceState(null,"",window.location.pathname+window.location.search)}static parse(e){if(!e||e.length<=1)return null;const t=e.slice(1).split("|");if(t.length<2)return null;const i=t[0],s=t.slice(1).map(e=>this._decodePage(e));return i&&0!==s.length?{appId:i,stack:s}:null}},B=(e,t,i=560)=>new Promise(s=>{const a=setTimeout(s,i),n=i=>{t&&i.propertyName!==t||(clearTimeout(a),e.removeEventListener("transitionend",n),s())};e.addEventListener("transitionend",n)}),q=class{constructor(e){this.id=`mini_app_${S()}`,this.parent=null,this.appId=e.appId,this.name=e.name,this.logo=e.logo,this.scene=e.scene,this.pagePath=e.pagePath,this.query=e.query,this.appConfig=null,this.bridgeList=[],this.jscore=new x(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.restoreStack=e.restoreStack,this.apiRegistry={...e.apiRegistry},this._extSubscriptions=/* @__PURE__ */new Map}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||""}async copyText(e,t){try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(e);else{const 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(){A.clear(),this.closeMiniAppMenu(),T.closeApp(this)}renderMiniAppMenu(){const e=this.el.querySelector(".dimina-mini-app-menu__app-name"),t=this.el.querySelector(".dimina-mini-app-menu__app-id"),i=this.el.querySelector(".dimina-mini-app-menu__app-desc"),s=this.el.querySelector(".dimina-mini-app-menu__app-logo-img"),a=this.el.querySelector(".dimina-mini-app-menu__quick-actions"),n=this.getCurrentPagePath(),o=this.getEntryPagePath(),r=this.getCurrentPageQuery(),l=n||o||"",c=`${l}${Object.keys(r).length?`?${new URLSearchParams(r).toString()}`:""}`,d=`${window.location.origin}${window.location.pathname}#${this.appId}|${c}`;e.textContent=this.appInfo.name||"未命名小程序",t.textContent=`AppID:${this.appId||"--"}`,i.textContent=`当前页面:${l||"--"}`,s.src=this.appInfo.logo||"";const h=[{label:"复制链接",icon:"↗",handler:()=>this.copyText(d,"链接已复制")},{label:"重新进入",icon:"↻",handler:()=>{this.closeMiniAppMenu(),this.reLaunch({url:o||n})}},{label:"关闭小程序",icon:"×",danger:!0,handler:()=>this.closeMiniProgram()}];a.innerHTML=h.map((e,t)=>`\n\t\t\t\t<button type="button" class="dimina-mini-app-menu__quick-action${e.danger?" is-danger":""}" data-quick-index="${t}">\n\t\t\t\t\t<span class="dimina-mini-app-menu__quick-action-icon">${e.icon}</span>\n\t\t\t\t\t<span class="dimina-mini-app-menu__quick-action-label">${e.label}</span>\n\t\t\t\t</button>\n\t\t\t`).join(""),a.querySelectorAll("[data-quick-index]").forEach((e,t)=>{e.onclick=()=>h[t].handler()})}openMiniAppMenu(){const 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(){const 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){const i=this.apiRegistry[e];i?i.call(this,t):"function"==typeof this[e]?this[e](t):this._handleExtCall(e,t)}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();const e="main",t=`${this.appId}/${e}/app-config.json`,[i]=await Promise.all([(a=`/${t}`,new Promise(e=>{fetch(`${a}`).then(e=>e.text()).then(t=>{e(t)}).catch(()=>{e(null)})})),(s=560,new Promise(e=>{setTimeout(()=>{e()},s)}))]);var s,a;if(!i)return;this.appConfig=JSON.parse(i);const n=this.pagePath||this.appConfig.app.entryPagePath,o=this.appConfig.modules[n],r=I(this.appConfig.app,o);this.updateTargetPageColorStyle(r);const l=await this.createBridge({pagePath:n,query:this.query,scene:this.scene,jscore:this.jscore,isRoot:!0,root:e,appId:this.appId,pages:this.appConfig.app.pages,configInfo:r});this.bridgeList.push(l),l.start(),this.restoreStack&&this.restoreStack.length>1&&await this.restorePageStack(this.restoreStack.slice(1)),this._syncHash(),this.hideLaunchScreen()}async restorePageStack(e){for(let t=0;t<e.length;t++){const{pagePath:i,query:s}=e[t],a=t===e.length-1,n=i.startsWith("/")?i.slice(1):i,o=this.appConfig.modules[n],r=I(this.appConfig.app,o),l=await this.createBridge({pagePath:n,query:s,scene:this.scene,jscore:this.jscore,isRoot:!1,root:o?.root||"main",appId:this.appId,pages:this.appConfig.app.pages,configInfo:r}),c=this.bridgeList[this.bridgeList.length-1];c.webview.el.classList.remove("dimina-native-view--instage"),c.webview.el.classList.add("dimina-native-view--slide-out"),this.bridgeList.push(l),l.webview.el.style.zIndex=this.bridgeList.length+1,l.webview.el.classList.remove("dimina-native-view--before-enter"),a||l.webview.el.classList.add("dimina-native-view--slide-out"),l.start()}if(e.length>0){const e=this.bridgeList[this.bridgeList.length-1],t=this.appConfig.modules[e.opts.pagePath],i=I(this.appConfig.app,t);this.updateTargetPageColorStyle(i)}}_syncHash(){const e=this.bridgeList.map(e=>({pagePath:e.opts.pagePath.startsWith("/")?e.opts.pagePath.slice(1):e.opts.pagePath,query:e.opts.query||{}}));A.syncStack(this.appId,e)}async createBridge(e){const{jscore:t,configInfo:i,isRoot:s,appId:a,pagePath:n,query:o,scene:r,pages:l,root:c}=e,d=new P({jscore:t,configInfo:i,isRoot:s,appId:a,pagePath:n,query:o,scene:r,pages:l,root:c});return d.parent=this,await d.init(),d}onPresentIn(){const e=this.bridgeList[this.bridgeList.length-1];e?.appShow(),e?.pageShow()}onPresentOut(){const e=this.bridgeList[this.bridgeList.length-1];e?.appHide(),e?.pageHide()}initPageFrame(){this.el.innerHTML='<div class="dimina-mini-app">\n\t\x3c!-- 右上方药丸按钮 --\x3e\n\t<ul class="dimina-mini-app-navigation__actions">\n\t\t<li class="dimina-mini-app-navigation__actions-variable"></li>\n\t\t<li class="dimina-mini-app-navigation__actions-close"></li>\n\t</ul>\n\n\t\x3c!-- webview挂载节点 --\x3e\n\t<div class="dimina-mini-app__webviews"></div>\n\n\t\x3c!-- 启动loading页面 --\x3e\n\t<div class="dimina-mini-app__launch-screen">\n\t\t<div class="dimina-mini-app__launch-screen-content">\n\t\t\t<div class="dimina-mini-app__logo">\n\t\t\t\t<div class="dimina-mini-app__logo-img">\n\t\t\t\t\t<img class="dimina-mini-app__logo-img-url" alt="logo" />\n\t\t\t\t</div>\n\t\t\t\t<div class="dimina-mini-app__logo-circle"></div>\n\t\t\t\t<span class="dimina-mini-app__green-point"></span>\n\t\t\t</div>\n\t\t\t<h1 class="dimina-mini-app__name"></h1>\n\t\t</div>\n\t</div>\n\n\t<div class="dimina-mini-app-menu__mask"></div>\n\t<div class="dimina-mini-app-menu">\n\t\t<div class="dimina-mini-app-menu__handle"></div>\n\t\t<div class="dimina-mini-app-menu__app">\n\t\t\t<div class="dimina-mini-app-menu__app-logo">\n\t\t\t\t<img class="dimina-mini-app-menu__app-logo-img" alt="logo" />\n\t\t\t</div>\n\t\t\t<div class="dimina-mini-app-menu__app-meta">\n\t\t\t\t<h2 class="dimina-mini-app-menu__app-name"></h2>\n\t\t\t\t<p class="dimina-mini-app-menu__app-id"></p>\n\t\t\t\t<p class="dimina-mini-app-menu__app-desc"></p>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="dimina-mini-app-menu__quick-actions"></div>\n\t\t<div class="dimina-mini-app-menu__footer">\n\t\t\t<button type="button" class="dimina-mini-app-menu__footer-btn dimina-mini-app-menu__footer-btn--cancel">取消</button>\n\t\t</div>\n\t</div>\n</div>\n'}updateTargetPageColorStyle(e){const{navigationBarTextStyle:t}=e;this.updateActionColorStyle(t)}showLaunchScreen(){const e=this.el.querySelector(".dimina-mini-app__launch-screen"),t=this.el.querySelector(".dimina-mini-app__name"),i=this.el.querySelector(".dimina-mini-app__logo-img-url");this.updateActionColorStyle("black"),t.innerHTML=this.name||this.appId||"",this.logo?(i.src=this.logo,i.style.display=""):(i.removeAttribute("src"),i.style.display="none"),e.style.display="block"}hideLaunchScreen(){this.el.querySelector(".dimina-mini-app__launch-screen").style.display="none"}updateActionColorStyle(e){this.color=e;const t=this.el.querySelector(".dimina-mini-app-navigation__actions");"white"===e?(t.classList.remove("dimina-mini-app-navigation__actions--black"),t.classList.add("dimina-mini-app-navigation__actions--white")):"black"===e&&(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}})}}async navigateTo(e){if(!this.webviewAnimaEnd)return;this.webviewAnimaEnd=!1;const{url:t,success:i}=e,{query:s,pagePath:a}=L(t),n=this.createCallbackFunction(i),o=this.appConfig.modules[a],r=I(this.appConfig.app,o);this.updateTargetPageColorStyle(r);const l=await this.createBridge({pagePath:a,query:s,scene:this.scene,jscore:this.jscore,isRoot:!1,root:o?.root||"main",appId:this.appId,pages:this.appConfig.app.pages,configInfo:r}),c=this.bridgeList[this.bridgeList.length-1],d=c.webview;this.bridgeList.push(l),l.start(),this._syncHash(),d.el.classList.remove("dimina-native-view--instage"),d.el.classList.add("dimina-native-view--slide-out"),d.el.classList.add("dimina-native-view--linear-anima"),c?.pageHide(),l.webview.el.style.zIndex=this.bridgeList.length+1,l.webview.el.classList.add("dimina-native-view--enter-anima"),l.webview.el.classList.add("dimina-native-view--instage"),await B(l.webview.el,"transform"),this.webviewAnimaEnd=!0,d.el.classList.remove("dimina-native-view--linear-anima"),l.webview.el.classList.remove("dimina-native-view--before-enter"),l.webview.el.classList.remove("dimina-native-view--enter-anima"),l.webview.el.classList.remove("dimina-native-view--instage"),n?.()}reLaunch(e){if(!this.webviewAnimaEnd)return;this.webviewAnimaEnd=!1;const{url:t,success:i,fail:s,complete:a}=e,{query:n,pagePath:o}=L(t),r=this.createCallbackFunction(i),l=this.createCallbackFunction(s),c=this.createCallbackFunction(a);try{const e=this.appConfig.modules[o],t=I(this.appConfig.app,e);for(this.updateTargetPageColorStyle(t);this.bridgeList.length>0;){const e=this.bridgeList.pop();e.destroy(),e.webview&&e.webview.el&&e.webview.el.remove()}this.webviewsContainer&&(this.webviewsContainer.innerHTML=""),this.createBridge({pagePath:o,query:n,scene:this.scene,jscore:this.jscore,isRoot:!0,root:e?.root||"main",appId:this.appId,pages:this.appConfig.app.pages,configInfo:t}).then(e=>{this.bridgeList.push(e),e.start(),this._syncHash(),e.webview.el.style.zIndex=1,this.webviewAnimaEnd=!0,r?.({errMsg:"reLaunch:ok"}),c?.()}).catch(e=>{l?.({errMsg:`reLaunch:fail ${e.message}`}),c?.(),this.webviewAnimaEnd=!0})}catch(d){l?.({errMsg:`reLaunch:fail ${d.message}`}),c?.(),this.webviewAnimaEnd=!0}}redirectTo(e){if(!this.webviewAnimaEnd)return;this.webviewAnimaEnd=!1;const{url:t,success:i}=e,{query:s,pagePath:a}=L(t),n=this.createCallbackFunction(i),o=this.bridgeList[this.bridgeList.length-1],r=this.appConfig.modules[a],l=I(this.appConfig.app,r);this.updateTargetPageColorStyle(l),o.destroy(),o.opts={...o.opts,pagePath:a,query:s,configInfo:l},o.resetStatus(),o.start(),this._syncHash(),this.webviewAnimaEnd=!0,n?.()}async navigateBack(){if(this.bridgeList.length<2)return;if(!this.webviewAnimaEnd)return;this.webviewAnimaEnd=!1;const e=this.bridgeList.pop(),t=this.bridgeList[this.bridgeList.length-1],i=this.appConfig.modules[t.opts.pagePath],s=I(this.appConfig.app,i);this.updateTargetPageColorStyle(s),e.webview.el.classList.add("dimina-native-view--before-enter"),e.webview.el.classList.add("dimina-native-view--enter-anima"),e?.destroy(),t.webview.el.classList.remove("dimina-native-view--slide-out"),t.webview.el.classList.add("dimina-native-view--instage"),t.webview.el.classList.add("dimina-native-view--enter-anima"),t?.pageShow(),this._syncHash(),await B(t.webview.el,"transform"),this.webviewAnimaEnd=!0,t.webview.el.classList.remove("dimina-native-view--enter-anima"),t.webview.el.classList.remove("dimina-native-view--instage"),e.webview.el.parentNode.removeChild(e.webview.el)}navigateToMiniProgram(e){const{appId:t,path:i}=e;T.openApp({appId:t,path:i,scene:1037},this.parent)}bindMoreEvent(){const e=this.el.querySelector(".dimina-mini-app-navigation__actions-variable"),t=this.el.querySelector(".dimina-mini-app-menu__mask"),i=this.el.querySelector(".dimina-mini-app-menu"),s=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(),s.onclick=()=>this.closeMiniAppMenu(),i.onclick=e=>e.stopPropagation()}bindCloseEvent(){this.el.querySelector(".dimina-mini-app-navigation__actions-close").onclick=()=>{this.closeMiniProgram()}}destroy(){for(const e of this._extSubscriptions.values())e?.();this._extSubscriptions.clear(),T.popView(),this.jscore.destroy()}getNetworkType(e){const{success:t}=e;this.createCallbackFunction(t)?.({networkType:"wifi"})}getSystemInfoAsync(e){const t=this.parent.getStatusBarRect(),i=this.parent.el.querySelector(".dimina-native-webview__root").getBoundingClientRect(),{success:s,complete:a}=e,n=this.createCallbackFunction(s),o=this.createCallbackFunction(a);n?.({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:i.width,height:i.height,top:i.top,bottom:i.bottom,left:i.left,right:i.right}}),o?.()}getMenuButtonBoundingClientRect(){const e=this.el.querySelector(".dimina-mini-app-navigation__actions").getBoundingClientRect(),t=(this.parent.parent.root.querySelector(".iphone__status-bar")?.getBoundingClientRect().height||20)+4,i=t+e.height;return{top:t,right:e.right,bottom:i,left:e.left,width:e.width,height:e.height,x:e.x,y:t}}getHostEnvSnapshot(){return{menuRect:this.getMenuButtonBoundingClientRect(),systemInfo:this.getSystemInfoSync()}}getSystemInfoSync(){const e=this.parent.parent.root.querySelector(".iphone__status-bar"),t=this.parent.el.querySelector(".dimina-native-webview__root")?.getBoundingClientRect(),i=t?.width||this.el.clientWidth||375,s=t?.height||this.el.clientHeight||667,a=e?.getBoundingClientRect().height||20;return{brand:"devtools",model:"web",platform:"devtools",system:"web",SDKVersion:"3.0.0",pixelRatio:globalThis.devicePixelRatio||1,screenWidth:i,screenHeight:s,windowWidth:i,windowHeight:s,statusBarHeight:a,safeArea:{left:0,right:i,top:a,bottom:s,width:i,height:Math.max(s-a,0)}}}showToast(e){const{title:t="",duration:i=1500,icon:s="success",success:a,complete:n}=e;if(!t)return;this.hideToast({});const o=this.createCallbackFunction(a),r=this.createCallbackFunction(n);this.toastInfo.dom=document.createElement("div"),this.toastInfo.dom.classList.add("dimina-toast",`dimina-toast--${s}`),this.toastInfo.dom.innerHTML=`<p>${t}</p>`,this.webviewsContainer.appendChild(this.toastInfo.dom),this.toastInfo.timer=setTimeout(()=>{this.webviewsContainer.removeChild(this.toastInfo.dom),this.toastInfo.dom=null},i),o?.(),r?.()}hideToast(e){const{success:t,complete:i}=e,s=this.createCallbackFunction(t),a=this.createCallbackFunction(i);this.toastInfo.dom&&(this.webviewsContainer.removeChild(this.toastInfo.dom),this.toastInfo.dom=null),this.toastInfo.timer&&(clearTimeout(this.toastInfo.timer),this.toastInfo.timer=null),s?.(),a?.()}showLoading(e){this.showToast({...e,icon:"loading"})}hideLoading(e){this.hideLoading(e)}showModal(e){const{content:t="",cancelText:i="取消",confirmText:s="确定",success:a,complete:n}=e,o=this.createCallbackFunction(a),r=this.createCallbackFunction(n),l=document.createElement("div");l.className="dimina-dialog-mask";const c=document.createElement("div");c.className="dimina-dialog",c.innerHTML=`<p>${t}</p>\n\t\t<div>\n\t\t\t<a id="cancelBtn" class="dimina-dialog__button" href="javascript:">${i}</a>\n\t\t\t<a id="confirmBtn" class="dimina-dialog__button" style="color: #576b95;" href="javascript:">${s}</a>\n \t</div>`;const d=()=>{l.remove(),c.remove()};c.querySelector("#cancelBtn").addEventListener("click",()=>{d(),o?.({cancel:!0}),r?.()}),c.querySelector("#confirmBtn").addEventListener("click",()=>{d(),o?.({confirm:!0}),r?.()}),l.onclick=d,this.webviewsContainer.appendChild(l),this.webviewsContainer.appendChild(c),requestAnimationFrame(()=>requestAnimationFrame(()=>{l.classList.add("show"),c.classList.add("show")}))}showActionSheet(e){const{itemList:t=[],itemColor:i="#000",success:s,fail:a,complete:n}=e||{};if(!Array.isArray(t)||0===t.length)return a&&this.createCallbackFunction(a)({errMsg:"showActionSheet:fail"}),void(n&&this.createCallbackFunction(n)());const o=document.createElement("div");o.className="dimina-action-sheet-mask";const r=document.createElement("div");r.className="dimina-action-sheet";const l=()=>{o.remove(),r.remove()};t.forEach((e,t)=>{const a=document.createElement("div");a.className="dimina-action-sheet-item",a.style.color=i,a.textContent=e,a.onclick=()=>{l(),s&&this.createCallbackFunction(s)({tapIndex:t}),n&&this.createCallbackFunction(n)()},r.appendChild(a)});const c=document.createElement("div");c.className="dimina-action-sheet-cancel",c.textContent="取消",c.onclick=()=>{l(),a&&this.createCallbackFunction(a)({errMsg:"showActionSheet:fail cancel"}),n&&this.createCallbackFunction(n)()},r.appendChild(c),o.onclick=l,this.webviewsContainer.appendChild(o),this.webviewsContainer.appendChild(r),requestAnimationFrame(()=>requestAnimationFrame(()=>{r.classList.add("show"),o.classList.add("show")}))}setNavigationBarTitle(e){const{title:t,success:i,fail:s,complete:a}=e,n=this.createCallbackFunction(i),o=this.createCallbackFunction(s),r=this.createCallbackFunction(a);try{const e=this.bridgeList[this.bridgeList.length-1].webview.el.querySelector(".dimina-native-webview__navigation-title");e?(e.textContent=t||"",n?.({errMsg:"setNavigationBarTitle:ok"})):o?.({errMsg:"setNavigationBarTitle:fail Navigation title element not found"})}catch(l){o?.({errMsg:`setNavigationBarTitle:fail ${l.message}`})}finally{r?.()}}setNavigationBarColor(e){const{frontColor:t,backgroundColor:i,success:s,fail:a,complete:n}=e,o=this.createCallbackFunction(s),r=this.createCallbackFunction(a),l=this.createCallbackFunction(n);try{const 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),i&&(e.style.backgroundColor=i),o?.({errMsg:"setNavigationBarColor:ok"})):r?.({errMsg:"setNavigationBarColor:fail Navigation element not found"})}catch(c){r?.({errMsg:`setNavigationBarColor:fail ${c.message}`})}finally{l?.()}}pageScrollTo(e){const{scrollTop:t,duration:i=300,success:s,fail:a,complete:n}=e,o=this.createCallbackFunction(s),r=this.createCallbackFunction(a),l=this.createCallbackFunction(n);try{const e=this.bridgeList[this.bridgeList.length-1].webview.iframe.contentWindow.document.documentElement;e?(e.scrollTo({top:t,behavior:i>0?"smooth":"auto"}),setTimeout(()=>{o?.({errMsg:"pageScrollTo:ok"}),l?.()},i)):(r?.({errMsg:"pageScrollTo:fail Webview root element not found"}),l?.())}catch(c){r?.({errMsg:`pageScrollTo:fail ${c.message}`}),l?.()}}setClipboardData(e){const{data:t,success:i,fail:s,complete:a}=e,n=this.createCallbackFunction(i),o=this.createCallbackFunction(s),r=this.createCallbackFunction(a);try{navigator.clipboard.writeText(t).then(()=>{n?.({errMsg:"setClipboardData:ok"}),r?.()}).catch(e=>{o?.({errMsg:`setClipboardData:fail ${e.message}`}),r?.()})}catch(l){o?.({errMsg:`setClipboardData:fail ${l.message}`}),r?.()}}getClipboardData(e){const{success:t,fail:i,complete:s}=e,a=this.createCallbackFunction(t),n=this.createCallbackFunction(i),o=this.createCallbackFunction(s);try{navigator.clipboard.readText().then(e=>{a?.({data:e,errMsg:"getClipboardData:ok"}),o?.()}).catch(e=>{n?.({errMsg:`getClipboardData:fail ${e.message}`}),o?.()})}catch(r){n?.({errMsg:`getClipboardData:fail ${r.message}`}),o?.()}}setStorage(e){const{key:t,data:i,success:s,fail:a,complete:n}=e,o=this.createCallbackFunction(s),r=this.createCallbackFunction(a),l=this.createCallbackFunction(n);try{const e=`${this.appId}_${t}`,s="object"==typeof i?JSON.stringify(i):String(i);localStorage.setItem(e,s),o?.({errMsg:"setStorage:ok"})}catch(c){r?.({errMsg:`setStorage:fail ${c.message}`})}finally{l?.()}}getStorage(e){const{key:t,success:i,fail:s,complete:a}=e,n=this.createCallbackFunction(i),o=this.createCallbackFunction(s),r=this.createCallbackFunction(a);try{const e=`${this.appId}_${t}`,i=localStorage.getItem(e);if(null!==i){let e=i;try{e=JSON.parse(i)}catch{}n?.({data:e,errMsg:"getStorage:ok"})}else o?.({errMsg:"getStorage:fail data not found"})}catch(l){o?.({errMsg:`getStorage:fail ${l.message}`})}finally{r?.()}}removeStorage(e){const{key:t,success:i,fail:s,complete:a}=e,n=this.createCallbackFunction(i),o=this.createCallbackFunction(s),r=this.createCallbackFunction(a);try{const e=`${this.appId}_${t}`;null!==localStorage.getItem(e)?(localStorage.removeItem(e),n?.({errMsg:"removeStorage:ok"})):n?.({errMsg:"removeStorage:ok"})}catch(l){o?.({errMsg:`removeStorage:fail ${l.message}`})}finally{r?.()}}clearStorage(e){const{success:t,fail:i,complete:s}=e||{},a=this.createCallbackFunction(t),n=this.createCallbackFunction(i),o=this.createCallbackFunction(s);try{const e=`${this.appId}_`,t=[];for(let i=0;i<localStorage.length;i++){const s=localStorage.key(i);s.startsWith(e)&&t.push(s)}t.forEach(e=>localStorage.removeItem(e)),a?.({errMsg:"clearStorage:ok"})}catch(r){n?.({errMsg:`clearStorage:fail ${r.message}`})}finally{o?.()}}getStorageInfo(e){const{success:t,fail:i,complete:s}=e||{},a=this.createCallbackFunction(t),n=this.createCallbackFunction(i),o=this.createCallbackFunction(s);try{const e=[];let t=0;const i=10485760,s=`${this.appId}_`;for(let a=0;a<localStorage.length;a++){const i=localStorage.key(a);if(i.startsWith(s)){const a=i.substring(s.length);e.push(a);const n=localStorage.getItem(i);t+=n?2*n.length:0}}a?.({keys:e,currentSize:t,limitSize:i,errMsg:"getStorageInfo:ok"})}catch(r){n?.({errMsg:`getStorageInfo:fail ${r.message}`})}finally{o?.()}}_parseExtEventKey(e){const t=T.getExtModules();for(const i of Object.keys(t)){const t=`${i}_`;if(e.startsWith(t))return{module:i,event:e.slice(t.length)}}return{module:null,event:null}}_handleExtCall(e,t={}){void 0!==t.module?this._extBridgeCall(e,t):t.success?this._extOnBridgeCall(e,t):this._extOffBridgeCall(e)}_extBridgeCall(e,t){const{module:i,data:s={},success:a,fail:n,complete:o}=t,r=this.createCallbackFunction(a),l=this.createCallbackFunction(n),c=this.createCallbackFunction(o),d=T.getExtModule(i);if(!d){const e=`extBridge:fail module "${i}" not registered`;return l?.({errMsg:e}),void c?.()}try{d({event:e,data:s,success:e=>{r?.(e),c?.()},fail:e=>{l?.(e),c?.()}})}catch(h){l?.({errMsg:`extBridge:fail ${h.message}`}),c?.()}}_extOnBridgeCall(e,t){const{success:i}=t,s=this.createCallbackFunction(i),{module:a,event:n}=this._parseExtEventKey(e);if(!a)return;const o=T.getExtModule(a);this._extSubscriptions.get(e)?.();try{const t=o({event:n,data:{isSustain:!0},success:e=>s?.(e),fail:()=>{}});this._extSubscriptions.set(e,t??null)}catch(r){}}_extOffBridgeCall(e){const t=this._extSubscriptions.get(e);t&&(t(),this._extSubscriptions.delete(e))}},T=class{static appStack=[];static apiRegistry={};static _extModules={};static registerApi(e,t){this.apiRegistry[e]=t}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){const{appId:i,path:s,scene:a,destroy:n,name:o,logo:r,restoreStack:l}=e,{pagePath:c,query:d}=L(s);if(n)for(const p of this.appStack)p.appId!==i&&(p.bridgeList.pop()?.destroy(),t.destroyRootView(p));const h=this.getAppById(i);if(h)t.presentView(h,!0);else{const e=new q({appId:i,scene:a,name:o,logo:r,pagePath:c,query:d,apiRegistry:this.apiRegistry,restoreStack:l});this.appStack.push(e),t.presentView(e,!1)}}static getAppById(e){for(const 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})}},E=()=>new Promise(e=>requestAnimationFrame(()=>requestAnimationFrame(e))),R=(e,t,i=560)=>new Promise(s=>{const a=setTimeout(s,i),n=i=>{t&&i.propertyName!==t||(clearTimeout(a),e.removeEventListener("transitionend",n),s())};e.addEventListener("transitionend",n)}),F=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;const 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 E(),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 R(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)return;if(!this.done)return;this.done=!1;const 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 R(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;const i=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"),i?.el.classList.add("dimina-native-view--before-presenting"),i?.el.classList.remove("dimina-native-view--instage"),i?.el.classList.add("dimina-native-view--enter-anima"),i?.onPresentOut(),e.onPresentIn(),!t&&this.el.appendChild(e.el),this.views.push(e),!t&&e.viewDidLoad&&e.viewDidLoad(),t&&e.restoreColorStyle(),await E(),i?.el.classList.add("dimina-native-view--presenting"),e.el.classList.add("dimina-native-view--instage"),await R(e.el,"transform"),e.el.classList.remove("dimina-native-view--before-present"),e.el.classList.remove("dimina-native-view--enter-anima"),i?.el.classList.remove("dimina-native-view--enter-anima"),i?.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;const t=this.views[this.views.length-2],i=this.views[this.views.length-1],{destroy:s=!0}=e;i.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 E(),i.el.classList.add("dimina-native-view--before-present"),i.el.classList.remove("dimina-native-view--instage"),t?.el.classList.remove("dimina-native-view--presenting"),t?.onPresentIn(),i?.onPresentOut(),await R(i.el,"transform"),s&&(i.destroy(),this.el.removeChild(i.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)}getStatusBarRect(){const e=this.parent?.root?.querySelector(".iphone__status-bar");return e?e.getBoundingClientRect():{height:0}}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;const e=this.getActiveView();e?.restoreColorStyle?.(),e?.onPresentIn?.()}updateStatusBarColor(e){this.parent?.updateDeviceBarColor(e)}};function $(e){const t=new F;e.appendChild(t.el);const i=A.parse(window.location.hash);return i&&T.openApp({appId:i.appId,path:i.path,scene:1001,destroy:!0},t),t}export{T as AppManager,F as Application,A as HashRouter,$ as openWithHash};
|
|
@@ -0,0 +1,2 @@
|
|
|
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;padding-bottom:10px;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}.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{z-index:10;box-sizing:border-box;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--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{border:0;border-radius:12px;outline:0;flex-direction:column;justify-content:space-evenly;align-items:center;width:320px;max-height:90%;margin:0 auto;padding:10px 0;display:flex;position:fixed;top:34%;left:16px;right:16px;overflow:hidden}.dimina-dialog p{padding:30px;font-size:16px}.dimina-dialog div{border-top:1px solid #0000001a;justify-content:space-around;width:100%;display:flex}.dimina-dialog .dimina-dialog__button{-webkit-user-select:none;user-select:none;text-align:center;color:#000;cursor:default;outline:none;flex:1;padding:10px 0;font-size:16px;font-weight:700;line-height:1.41176;text-decoration:none;display:block;position:relative;overflow:hidden}.dimina-dialog .dimina-dialog__button:after{content:" ";color:#0000001a;transform-origin:0 0;border-left:1px solid #0000001a;width:1px;position:absolute;top:0;bottom:0;left:0;transform:scaleX(.5)}.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-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}: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
|
+
/*$vite$:1*/
|
|
@@ -0,0 +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;padding-bottom:10px;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}.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{z-index:10;box-sizing:border-box;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--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{border:0;border-radius:12px;outline:0;flex-direction:column;justify-content:space-evenly;align-items:center;width:320px;max-height:90%;margin:0 auto;padding:10px 0;display:flex;position:fixed;top:34%;left:16px;right:16px;overflow:hidden}.dimina-dialog p{padding:30px;font-size:16px}.dimina-dialog div{border-top:1px solid #0000001a;justify-content:space-around;width:100%;display:flex}.dimina-dialog .dimina-dialog__button{-webkit-user-select:none;user-select:none;text-align:center;color:#000;cursor:default;outline:none;flex:1;padding:10px 0;font-size:16px;font-weight:700;line-height:1.41176;text-decoration:none;display:block;position:relative;overflow:hidden}.dimina-dialog .dimina-dialog__button:after{content:" ";color:#0000001a;transform-origin:0 0;border-left:1px solid #0000001a;width:1px;position:absolute;top:0;bottom:0;left:0;transform:scaleX(.5)}.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-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;height:100%;padding-top:100.672px}.dimina-app__mini-content .dimina-app__mini-search{background-color:#ededed;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{color:#000;text-align:center;background:url(/images/search.jpg) 22.88px/18.876px 18.876px no-repeat;border:none;outline:none;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;padding-left:18.304px}.dimina-app__mini-used .dimina-app__mini-used-title{color:#737373;padding:17.16px 0;font-size:14.872px;font-weight:400}.dimina-app__mini-used .dimina-app__mini-used-list{height:629.2px;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}#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<=768px){#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<=768px){#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 .12s 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<=768px){#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:5px;font-size:17px;display:flex}#iphone .iphone__screen .iphone__status-bar .status-bar__signal{opacity:1;width:18px;height:12px}#iphone .iphone__screen .iphone__status-bar .status-bar__wifi{opacity:1;width:15px;height:11px}#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),(width<=768px) and (orientation:portrait){#iphone .iphone__screen .iphone__screen_dynamic-island span img{opacity:1}}#iphone .iphone__screen .iphone__home-touch-bar{z-index:100;border-radius:100px;width:135px;height:5px;position:absolute;bottom:9px;left:50%;transform:translate(-50%)}#iphone .iphone__screen .iphone__home-touch-bar.iphone__home-touch-bar--white{background:#ffffffe6}#iphone .iphone__screen .iphone__home-touch-bar.iphone__home-touch-bar--black{background:#000000e6}@media (hover:none) and (pointer:coarse),(width<=768px){#iphone .iphone__screen .iphone__home-touch-bar{display:none}}#iphone .iphone__screen .iphone__apps{width:100%;height:100%}#iphone .mute-btn{cursor:pointer;transform-origin:100%;background:radial-gradient(#ccc,#555,#222);border-top-left-radius:4px;border-bottom-left-radius:4px;width:6px;height:36px;transition:transform 90ms,filter 90ms,box-shadow 90ms;position:absolute;top:110px;left:-4px;box-shadow:0 0 #0000}#iphone .mute-btn:active{filter:brightness(.82);transform:translate(1px)scaleX(.95);box-shadow:inset 1px 0 2px #00000059}@media (hover:none) and (pointer:coarse),(width<=768px){#iphone .mute-btn{display:none}}#iphone .volume-up-btn{cursor:pointer;transform-origin:100%;background:radial-gradient(#ccc,#555,#222);border-top-left-radius:4px;border-bottom-left-radius:4px;width:6px;height:50px;transition:transform 90ms,filter 90ms,box-shadow 90ms;position:absolute;top:180px;left:-4px;box-shadow:0 0 #0000}#iphone .volume-up-btn:active{filter:brightness(.82);transform:translate(1px)scaleX(.95);box-shadow:inset 1px 0 2px #00000059}@media (hover:none) and (pointer:coarse),(width<=768px){#iphone .volume-up-btn{display:none}}#iphone .volume-down-btn{cursor:pointer;transform-origin:100%;background:radial-gradient(#ccc,#555,#222);border-top-left-radius:4px;border-bottom-left-radius:4px;width:6px;height:50px;transition:transform 90ms,filter 90ms,box-shadow 90ms;position:absolute;top:244px;left:-4px;box-shadow:0 0 #0000}#iphone .volume-down-btn:active{filter:brightness(.82);transform:translate(1px)scaleX(.95);box-shadow:inset 1px 0 2px #00000059}@media (hover:none) and (pointer:coarse),(width<=768px){#iphone .volume-down-btn{display:none}}#iphone .power-btn{z-index:10;cursor:pointer;transform-origin:0;background:radial-gradient(#ccc,#555,#222);border-top-right-radius:4px;border-bottom-right-radius:4px;width:6px;height:80px;transition:transform 90ms,filter 90ms,box-shadow 90ms;position:absolute;top:220px;right:-4px;box-shadow:0 0 #0000}#iphone .power-btn:active{filter:brightness(.82);transform:translate(-1px)scaleX(.95);box-shadow:inset -1px 0 2px #00000059}@media (hover:none) and (pointer:coarse),(width<=768px){#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}
|