@netless/fastboard 0.0.11 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/LICENSE.txt +1 -1
  2. package/dist/index.js +32 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/index.mjs +7 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +24 -85
  7. package/src/index.ts +2 -49
  8. package/README.md +0 -136
  9. package/dist/index.cjs.js +0 -14
  10. package/dist/index.cjs.js.map +0 -1
  11. package/dist/index.es.js +0 -2804
  12. package/dist/index.es.js.map +0 -1
  13. package/dist/svelte.cjs.js +0 -2
  14. package/dist/svelte.cjs.js.map +0 -1
  15. package/dist/svelte.es.js +0 -32
  16. package/dist/svelte.es.js.map +0 -1
  17. package/dist/vue.cjs.js +0 -2
  18. package/dist/vue.cjs.js.map +0 -1
  19. package/dist/vue.es.js +0 -43
  20. package/dist/vue.es.js.map +0 -1
  21. package/src/WhiteboardApp.ts +0 -146
  22. package/src/behaviors/register-apps.ts +0 -39
  23. package/src/behaviors/style.ts +0 -17
  24. package/src/components/PageControl/PageControl.scss +0 -80
  25. package/src/components/PageControl/PageControl.tsx +0 -110
  26. package/src/components/PageControl/hooks.ts +0 -70
  27. package/src/components/PageControl/index.ts +0 -2
  28. package/src/components/PlayerControl/PlayerControl.scss +0 -145
  29. package/src/components/PlayerControl/PlayerControl.tsx +0 -157
  30. package/src/components/PlayerControl/components/Button.tsx +0 -55
  31. package/src/components/PlayerControl/hooks.ts +0 -88
  32. package/src/components/PlayerControl/icons/Loading.tsx +0 -13
  33. package/src/components/PlayerControl/icons/Pause.tsx +0 -13
  34. package/src/components/PlayerControl/icons/Play.tsx +0 -13
  35. package/src/components/PlayerControl/icons/index.ts +0 -10
  36. package/src/components/PlayerControl/index.ts +0 -2
  37. package/src/components/RedoUndo/RedoUndo.scss +0 -56
  38. package/src/components/RedoUndo/RedoUndo.tsx +0 -79
  39. package/src/components/RedoUndo/hooks.ts +0 -50
  40. package/src/components/RedoUndo/index.ts +0 -2
  41. package/src/components/Root.scss +0 -55
  42. package/src/components/Root.tsx +0 -65
  43. package/src/components/Toolbar/Content.tsx +0 -94
  44. package/src/components/Toolbar/Toolbar.scss +0 -281
  45. package/src/components/Toolbar/Toolbar.tsx +0 -132
  46. package/src/components/Toolbar/components/ApplianceButtons.tsx +0 -132
  47. package/src/components/Toolbar/components/AppsButton.tsx +0 -106
  48. package/src/components/Toolbar/components/Button.tsx +0 -54
  49. package/src/components/Toolbar/components/ColorBox.tsx +0 -56
  50. package/src/components/Toolbar/components/CutLine.tsx +0 -8
  51. package/src/components/Toolbar/components/Mask.tsx +0 -44
  52. package/src/components/Toolbar/components/PencilButton.tsx +0 -70
  53. package/src/components/Toolbar/components/ShapesButton.tsx +0 -143
  54. package/src/components/Toolbar/components/Slider.tsx +0 -27
  55. package/src/components/Toolbar/components/TextButton.tsx +0 -66
  56. package/src/components/Toolbar/components/UpDownButtons.tsx +0 -49
  57. package/src/components/Toolbar/components/assets/cocos.png +0 -0
  58. package/src/components/Toolbar/components/assets/collapsed.png +0 -0
  59. package/src/components/Toolbar/components/assets/countdown.png +0 -0
  60. package/src/components/Toolbar/components/assets/expanded.png +0 -0
  61. package/src/components/Toolbar/components/assets/geogebra.png +0 -0
  62. package/src/components/Toolbar/components/assets/vscode.png +0 -0
  63. package/src/components/Toolbar/const.ts +0 -32
  64. package/src/components/Toolbar/hooks.ts +0 -112
  65. package/src/components/Toolbar/icons/Apps.tsx +0 -16
  66. package/src/components/Toolbar/icons/Arrow.tsx +0 -16
  67. package/src/components/Toolbar/icons/Circle.tsx +0 -21
  68. package/src/components/Toolbar/icons/Clean.tsx +0 -16
  69. package/src/components/Toolbar/icons/Clicker.tsx +0 -19
  70. package/src/components/Toolbar/icons/Collapse.tsx +0 -17
  71. package/src/components/Toolbar/icons/Diamond.tsx +0 -17
  72. package/src/components/Toolbar/icons/Down.tsx +0 -17
  73. package/src/components/Toolbar/icons/Eraser.tsx +0 -16
  74. package/src/components/Toolbar/icons/Expand.tsx +0 -17
  75. package/src/components/Toolbar/icons/Line.tsx +0 -13
  76. package/src/components/Toolbar/icons/Pencil.tsx +0 -16
  77. package/src/components/Toolbar/icons/Rectangle.tsx +0 -13
  78. package/src/components/Toolbar/icons/Selector.tsx +0 -16
  79. package/src/components/Toolbar/icons/SpeechBalloon.tsx +0 -17
  80. package/src/components/Toolbar/icons/Star.tsx +0 -17
  81. package/src/components/Toolbar/icons/Text.tsx +0 -16
  82. package/src/components/Toolbar/icons/Triangle.tsx +0 -17
  83. package/src/components/Toolbar/icons/Up.tsx +0 -17
  84. package/src/components/Toolbar/icons/index.ts +0 -42
  85. package/src/components/Toolbar/index.ts +0 -2
  86. package/src/components/ZoomControl/ZoomControl.scss +0 -80
  87. package/src/components/ZoomControl/ZoomControl.tsx +0 -109
  88. package/src/components/ZoomControl/hooks.ts +0 -111
  89. package/src/components/ZoomControl/index.ts +0 -2
  90. package/src/components/hooks.ts +0 -80
  91. package/src/i18n/en.json +0 -31
  92. package/src/i18n/index.ts +0 -22
  93. package/src/i18n/zh-CN.json +0 -32
  94. package/src/icons/ChevronLeft.tsx +0 -21
  95. package/src/icons/ChevronRight.tsx +0 -21
  96. package/src/icons/FilePlus.tsx +0 -18
  97. package/src/icons/Minus.tsx +0 -21
  98. package/src/icons/Plus.tsx +0 -21
  99. package/src/icons/Redo.tsx +0 -24
  100. package/src/icons/Reset.tsx +0 -23
  101. package/src/icons/Undo.tsx +0 -24
  102. package/src/icons/index.tsx +0 -11
  103. package/src/internal/Instance.tsx +0 -275
  104. package/src/internal/helpers.ts +0 -86
  105. package/src/internal/hooks.ts +0 -9
  106. package/src/internal/index.ts +0 -3
  107. package/src/internal/mount-whiteboard.ts +0 -90
  108. package/src/react.tsx +0 -52
  109. package/src/style.scss +0 -35
  110. package/src/svelte.ts +0 -45
  111. package/src/theme/index.ts +0 -36
  112. package/src/types/index.ts +0 -22
  113. package/src/vue.ts +0 -74
package/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 netless
3
+ Copyright (c) 2022 netless
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __reExport = (target, module2, copyDefault, desc) => {
11
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
12
+ for (let key of __getOwnPropNames(module2))
13
+ if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
14
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
15
+ }
16
+ return target;
17
+ };
18
+ var __toCommonJS = /* @__PURE__ */ ((cache) => {
19
+ return (module2, temp) => {
20
+ return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
21
+ };
22
+ })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
23
+
24
+ // src/index.ts
25
+ var src_exports = {};
26
+ __export(src_exports, {
27
+ mount: () => import_fastboard_react.mount
28
+ });
29
+ __reExport(src_exports, require("@netless/fastboard-core"));
30
+ var import_fastboard_react = require("@netless/fastboard-react");
31
+ module.exports = __toCommonJS(src_exports);
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"@netless/fastboard-core\";\nexport { mount } from \"@netless/fastboard-react\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAc;AACd,6BAAsB;","names":[]}
package/dist/index.mjs ADDED
@@ -0,0 +1,7 @@
1
+ // src/index.ts
2
+ export * from "@netless/fastboard-core";
3
+ import { mount } from "@netless/fastboard-react";
4
+ export {
5
+ mount
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"@netless/fastboard-core\";\nexport { mount } from \"@netless/fastboard-react\";\n"],"mappings":";AAAA;AACA;","names":[]}
package/package.json CHANGED
@@ -1,96 +1,35 @@
1
1
  {
2
2
  "name": "@netless/fastboard",
3
- "version": "0.0.11",
4
- "description": "An open sourced sdk based on white-web-sdk.",
5
- "main": "./dist/index.cjs.js",
6
- "module": "./dist/index.es.js",
7
- "types": "./src/index.ts",
8
- "exports": {
9
- ".": {
10
- "node": {
11
- "import": "./dist/index.es.js",
12
- "require": "./dist/index.cjs.js"
13
- },
14
- "default": "./dist/index.es.js",
15
- "types": "./src/index.ts"
16
- },
17
- "./vue": {
18
- "node": {
19
- "import": "./dist/vue.es.js",
20
- "require": "./dist/vue.cjs.js"
21
- },
22
- "default": "./dist/vue.es.js",
23
- "types": "./src/vue.ts"
24
- },
25
- "./svelte": {
26
- "node": {
27
- "import": "./dist/svelte.es.js",
28
- "require": "./dist/svelte.cjs.js"
29
- },
30
- "default": "./dist/svelte.es.js",
31
- "types": "./src/svelte.ts"
32
- },
33
- "./package.json": "./package.json"
34
- },
3
+ "version": "0.2.1",
4
+ "description": "A tiny wrapper of white-web-sdk and @netless/window-manager.",
5
+ "main": "dist/index.js",
35
6
  "files": [
36
7
  "src",
37
8
  "dist"
38
9
  ],
39
- "contributors": [
40
- {
41
- "name": "hyrious",
42
- "email": "hyrious@outlook.com"
43
- },
44
- {
45
- "name": "l1shen",
46
- "email": "lishen1635@gmail.com"
47
- }
48
- ],
49
- "license": "MIT",
10
+ "dependencies": {
11
+ "@netless/fastboard-core": "0.2.1",
12
+ "@netless/fastboard-react": "0.2.1"
13
+ },
50
14
  "peerDependencies": {
51
- "@netless/app-countdown": "*",
52
- "@netless/app-geogebra": "*",
53
- "@netless/app-monaco": "*",
54
- "@netless/app-slide": "*",
55
- "@netless/window-manager": "*",
56
- "@vue/composition-api": "*",
57
- "react": "*",
58
- "react-dom": "*",
59
- "svelte": "*",
60
- "vue": "*",
61
- "white-web-sdk": "*"
15
+ "@netless/window-manager": ">=0.4.0",
16
+ "white-web-sdk": ">=2.16.0"
62
17
  },
63
- "peerDependenciesMeta": {
64
- "@netless/app-slide": {
65
- "optional": true
66
- },
67
- "@netless/app-monaco": {
68
- "optional": true
69
- },
70
- "@netless/app-countdown": {
71
- "optional": true
72
- },
73
- "@netless/app-geogebra": {
74
- "optional": true
75
- },
76
- "@vue/composition-api": {
77
- "optional": true
78
- },
79
- "svelte": {
80
- "optional": true
81
- },
82
- "vue": {
83
- "optional": true
84
- }
18
+ "devDependencies": {
19
+ "@netless/window-manager": "^0.4.0-canary.24",
20
+ "tsup": "^5.11.11",
21
+ "white-web-sdk": "^2.16.3"
85
22
  },
86
- "dependencies": {
87
- "@tippyjs/react": "^4.2.6",
88
- "clsx": "^1.1.1",
89
- "framer-motion": "^5.5.6",
90
- "i18next": "^21.6.5",
91
- "rc-slider": "^9.7.5",
92
- "tippy.js": "^6.3.7",
93
- "vue-demi": "^0.12.1"
23
+ "publishConfig": {
24
+ "main": "dist/index.js",
25
+ "module": "dist/index.mjs",
26
+ "types": "src/index.ts"
27
+ },
28
+ "scripts": {
29
+ "build": "tsup",
30
+ "cleanup": "rimraf dist",
31
+ "check": "tsc --noEmit"
94
32
  },
95
- "readme": "# @netless/fastboard\n\nA whiteboard starter, based on [white-web-sdk](https://www.npmjs.com/package/white-web-sdk), [@netless/window-manager](https://www.npmjs.com/package/@netless/window-manager)\nand [netless-app](https://github.com/netless-io/netless-app).\n\n## 目录\n\n- [安装](#install)\n- [使用](#usage)\n- [进阶](./docs/advanced.md)\n- [开发](#开发)\n\n<h2 id=\"install\">安装</h2>\n\n```bash\nnpm add @netless/fastboard @netless/window-manager white-web-sdk react react-dom\n```\n\n<h2 id=\"usage\">使用</h2>\n\n<h3 id=\"mount-whiteboard\">挂载白板</h3>\n\n> 原生 `javascript`\n\n```js\nimport { createWhiteboardApp } from \"@netless/fastboard\";\n\nlet app = await createWhiteboardApp({\n // [1]\n sdkConfig: {\n appIdentifier: \"whiteboard-appid\",\n },\n // [2]\n joinRoom: {\n uid: \"unique_id_for_each_client\",\n uuid: \"room-uuid\",\n roomToken: \"NETLESSROOM_...\",\n },\n // [3]\n managerConfig: {\n cursor: true,\n },\n});\n\napp.bindElement(document.getElementById(\"whiteboard\"));\n```\n\n> 使用 `React`\n\n```jsx\nimport { createWhiteboardApp, Fastboard } from \"@netless/fastboard\";\nimport ReactDOM from \"react-dom\";\n\nlet app = await createWhiteboardApp({\n /* ... */\n});\n\nfunction App() {\n return <Fastboard app={app} />;\n}\nReactDOM.render(<App />, document.getElementById(\"root\"));\n```\n\n[1] 关于 SDK 更多配置请看 [构造 WhiteWebSDK](https://developer.netless.link/javascript-zh/home/construct-white-web-sdk)\n\n[2] 加入房间更多配置请看 [构造 Room 与 Player 对象](https://developer.netless.link/javascript-zh/home/construct-room-and-player)\n\n[3] 配置 `WindowManager` 请看 [WindowManager](https://github.com/netless-io/window-manager#mount)\n\n关于窗口最小化后显示的小图标,可以通过 CSS 覆盖样式的方式修改它的位置:\n\n```css\n.telebox-collector {\n right: 20px;\n bottom: 40px;\n}\n```\n\n### 使用 APPS\n\n**注意:** 需要先安装对应的 APP\n\n```bash\nnpm add @netless/app-slide\n```\n\n```typescript\n// 插入动态 PPTX 至白板\nconst appId = await app.insertDocs({\n fileType: \"pptx\",\n params: {\n scenePath: `/ppt/${uuid}`, // [1]\n title: \"a.pptx\",\n taskId: \"1234567...\", // [2]\n url: \"https://convertcdn.netless.link/dynamicConvert\", // [3]\n },\n});\n\n// 插入 PDF/静态 PPT 至白板\nconst appId = await app.insertDocs({\n fileType: \"pdf\", // or ppt\n options: {\n scenePath: `/pdf${uuid}`,\n title: \"a.pdf\", // 可选\n scenes: [], // SceneDefinition[] 静态/动态 Scene 数据\n },\n});\n\n// 插入音频/视频至白板\nconst appId = await app.manager.addApp({\n kind: \"MediaPlayer\",\n options: {\n title: \"test.mp3\", // 可选\n },\n attributes: {\n src: \"xxxx\", // 音视频 url\n },\n});\n```\n\n更多 `app` 请看 [netless-app](#https://github.com/netless-io/netless-app)\n\n## Develop\n\n```bash\npnpm i\n# upgrade dependencies\npnpm up -Li\n# build and see bundle size\npnpm build\nopen node_modules/.visualizer/stats.html\n```\n\n## License\n\nMIT @ [netless](https://github.com/netless-io)\n"
33
+ "module": "dist/index.mjs",
34
+ "types": "src/index.ts"
96
35
  }
package/src/index.ts CHANGED
@@ -1,49 +1,2 @@
1
- import { WindowManager } from "@netless/window-manager";
2
-
3
- import "./behaviors/register-apps";
4
- import "./behaviors/style";
5
-
6
- import { WhiteboardApp, type WhiteboardAppConfig } from "./WhiteboardApp";
7
-
8
- export { version } from "../package.json";
9
- export {
10
- PageControl,
11
- usePageControl,
12
- type PageControlProps,
13
- } from "./components/PageControl";
14
- export {
15
- RedoUndo,
16
- useRedoUndo,
17
- type RedoUndoProps,
18
- } from "./components/RedoUndo";
19
- export { Toolbar, useToolbar, type ToolbarProps } from "./components/Toolbar";
20
- export {
21
- ZoomControl,
22
- useZoomControl,
23
- type ZoomControlProps,
24
- } from "./components/ZoomControl";
25
- export {
26
- PlayerControl,
27
- usePlayerControl,
28
- type PlayerControlProps,
29
- } from "./components/PlayerControl";
30
- export {};
31
-
32
- export * from "./WhiteboardApp";
33
- export * from "./react";
34
-
35
- export const register = WindowManager.register.bind(WindowManager);
36
-
37
- /**
38
- * @example
39
- * let app = await createWhiteboardApp(config)
40
- * app.bindElement(el)
41
- */
42
- export async function createWhiteboardApp(
43
- config: WhiteboardAppConfig
44
- ): Promise<WhiteboardApp> {
45
- const app = new WhiteboardApp(config);
46
- // @ts-expect-error // eslint-disable-line
47
- await app._instance.readyPromise;
48
- return app;
49
- }
1
+ export * from "@netless/fastboard-core";
2
+ export { mount } from "@netless/fastboard-react";
package/README.md DELETED
@@ -1,136 +0,0 @@
1
- # @netless/fastboard
2
-
3
- A whiteboard starter, based on [white-web-sdk](https://www.npmjs.com/package/white-web-sdk), [@netless/window-manager](https://www.npmjs.com/package/@netless/window-manager)
4
- and [netless-app](https://github.com/netless-io/netless-app).
5
-
6
- ## 目录
7
-
8
- - [安装](#install)
9
- - [使用](#usage)
10
- - [进阶](./docs/advanced.md)
11
- - [开发](#开发)
12
-
13
- <h2 id="install">安装</h2>
14
-
15
- ```bash
16
- npm add @netless/fastboard @netless/window-manager white-web-sdk react react-dom
17
- ```
18
-
19
- <h2 id="usage">使用</h2>
20
-
21
- <h3 id="mount-whiteboard">挂载白板</h3>
22
-
23
- > 原生 `javascript`
24
-
25
- ```js
26
- import { createWhiteboardApp } from "@netless/fastboard";
27
-
28
- let app = await createWhiteboardApp({
29
- // [1]
30
- sdkConfig: {
31
- appIdentifier: "whiteboard-appid",
32
- },
33
- // [2]
34
- joinRoom: {
35
- uid: "unique_id_for_each_client",
36
- uuid: "room-uuid",
37
- roomToken: "NETLESSROOM_...",
38
- },
39
- // [3]
40
- managerConfig: {
41
- cursor: true,
42
- },
43
- });
44
-
45
- app.bindElement(document.getElementById("whiteboard"));
46
- ```
47
-
48
- > 使用 `React`
49
-
50
- ```jsx
51
- import { createWhiteboardApp, Fastboard } from "@netless/fastboard";
52
- import ReactDOM from "react-dom";
53
-
54
- let app = await createWhiteboardApp({
55
- /* ... */
56
- });
57
-
58
- function App() {
59
- return <Fastboard app={app} />;
60
- }
61
- ReactDOM.render(<App />, document.getElementById("root"));
62
- ```
63
-
64
- [1] 关于 SDK 更多配置请看 [构造 WhiteWebSDK](https://developer.netless.link/javascript-zh/home/construct-white-web-sdk)
65
-
66
- [2] 加入房间更多配置请看 [构造 Room 与 Player 对象](https://developer.netless.link/javascript-zh/home/construct-room-and-player)
67
-
68
- [3] 配置 `WindowManager` 请看 [WindowManager](https://github.com/netless-io/window-manager#mount)
69
-
70
- 关于窗口最小化后显示的小图标,可以通过 CSS 覆盖样式的方式修改它的位置:
71
-
72
- ```css
73
- .telebox-collector {
74
- right: 20px;
75
- bottom: 40px;
76
- }
77
- ```
78
-
79
- ### 使用 APPS
80
-
81
- **注意:** 需要先安装对应的 APP
82
-
83
- ```bash
84
- npm add @netless/app-slide
85
- ```
86
-
87
- ```typescript
88
- // 插入动态 PPTX 至白板
89
- const appId = await app.insertDocs({
90
- fileType: "pptx",
91
- params: {
92
- scenePath: `/ppt/${uuid}`, // [1]
93
- title: "a.pptx",
94
- taskId: "1234567...", // [2]
95
- url: "https://convertcdn.netless.link/dynamicConvert", // [3]
96
- },
97
- });
98
-
99
- // 插入 PDF/静态 PPT 至白板
100
- const appId = await app.insertDocs({
101
- fileType: "pdf", // or ppt
102
- options: {
103
- scenePath: `/pdf${uuid}`,
104
- title: "a.pdf", // 可选
105
- scenes: [], // SceneDefinition[] 静态/动态 Scene 数据
106
- },
107
- });
108
-
109
- // 插入音频/视频至白板
110
- const appId = await app.manager.addApp({
111
- kind: "MediaPlayer",
112
- options: {
113
- title: "test.mp3", // 可选
114
- },
115
- attributes: {
116
- src: "xxxx", // 音视频 url
117
- },
118
- });
119
- ```
120
-
121
- 更多 `app` 请看 [netless-app](#https://github.com/netless-io/netless-app)
122
-
123
- ## Develop
124
-
125
- ```bash
126
- pnpm i
127
- # upgrade dependencies
128
- pnpm up -Li
129
- # build and see bundle size
130
- pnpm build
131
- open node_modules/.visualizer/stats.html
132
- ```
133
-
134
- ## License
135
-
136
- MIT @ [netless](https://github.com/netless-io)
package/dist/index.cjs.js DELETED
@@ -1,14 +0,0 @@
1
- "use strict";var qe=Object.defineProperty,_e=Object.defineProperties;var $e=Object.getOwnPropertyDescriptors;var K=Object.getOwnPropertySymbols;var ke=Object.prototype.hasOwnProperty,Ce=Object.prototype.propertyIsEnumerable;var ne=(e,t,o)=>t in e?qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,I=(e,t)=>{for(var o in t||(t={}))ke.call(t,o)&&ne(e,o,t[o]);if(K)for(var o of K(t))Ce.call(t,o)&&ne(e,o,t[o]);return e},j=(e,t)=>_e(e,$e(t));var X=(e,t)=>{var o={};for(var a in e)ke.call(e,a)&&t.indexOf(a)<0&&(o[a]=e[a]);if(e!=null&&K)for(var a of K(e))t.indexOf(a)<0&&Ce.call(e,a)&&(o[a]=e[a]);return o};var S=(e,t,o)=>(ne(e,typeof t!="symbol"?t+"":t,o),o);Object.defineProperty(exports,"__esModule",{value:!0});exports[Symbol.toStringTag]="Module";var z=require("@netless/window-manager"),f=require("white-web-sdk"),et=require("i18next"),i=require("react"),tt=require("react-dom"),ie=require("framer-motion"),ot=require("clsx"),rt=require("@tippyjs/react"),at=require("rc-slider");function Z(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}function q(e){if(e&&e.__esModule)return e;var t={__proto__:null,[Symbol.toStringTag]:"Module"};return e&&Object.keys(e).forEach(function(o){if(o!=="default"){var a=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,a.get?a:{enumerable:!0,get:function(){return e[o]}})}}),t.default=e,Object.freeze(t)}var ve=Z(et),se=Z(i),_=Z(tt),u=Z(ot),P=Z(rt),Ae=Z(at);z.WindowManager.register({kind:"Slide",appOptions:{debug:!1},src:async()=>{var t;const e=await Promise.resolve().then(function(){return q(require("@netless/app-slide"))});return(t=e.default)!=null?t:e}});z.WindowManager.register({kind:"Monaco",src:async()=>{var t;const e=await Promise.resolve().then(function(){return q(require("@netless/app-monaco"))});return(t=e.default)!=null?t:e}});z.WindowManager.register({kind:"Countdown",src:async()=>{var t;const e=await Promise.resolve().then(function(){return q(require("@netless/app-countdown"))});return(t=e.default)!=null?t:e}});z.WindowManager.register({kind:"GeoGebra",src:async()=>{var t;const e=await Promise.resolve().then(function(){return q(require("@netless/app-geogebra"))});return(t=e.default)!=null?t:e},appOptions:{HTML5Codebase:"https://flat-storage-cn-hz.whiteboard.agora.io/GeoGebra/HTML5/5.0/web3d"}});function G(){}function nt(e){const t=document.createElement("style");return t.appendChild(document.createTextNode(e)),document.head.appendChild(t),t}function le(e,t,o){return e<t?t:e>o?o:e}function it(e,t){return e.length===t.length&&e.every((o,a)=>o===t[a])}class st{constructor(){S(this,"running",!1);S(this,"nextFn",null);S(this,"step",()=>{if(this.nextFn){const t=this.nextFn;this.nextFn=null,Promise.resolve(t()).then(this.step)}else this.running=!1})}schedule(t){this.running?this.nextFn=t:(this.running=!0,Promise.resolve(t()).then(this.step))}}const ye="!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",lt=ye.length,Ie=20,Se=Array(Ie),ct=()=>{for(let e=0;e<Ie;e++)Se[e]=ye.charAt(Math.random()*lt);return Se.join("")};function dt(e){const t=[];let o="",a="";const n=/^pptx?(?<prefix>:\/\/\S+?dynamicConvert)\/(?<taskId>\w+)\//;for(const{name:s,ppt:l}of e){if(t.push({name:s}),!l||!l.src.startsWith("ppt"))continue;const c=n.exec(l.src);if(!(!c||!c.groups)){o=c.groups.taskId,a="https"+c.groups.prefix;break}}return{scenesWithoutPPT:t,taskId:o,url:a}}const pt={clicker:"clicker",selector:"selector",text:"text",pencil:"pencil",arrow:"arrow",hand:"hand",eraser:"eraser",laser:"laser",collapse:"Collapse",expand:"Expand",zoomIn:"Zoom In",zoomOut:"Zoom Out",reset:"Reset",prevPage:"Prev Page",nextPage:"Next Page",addPage:"Add Page",redo:"Redo",undo:"Undo",shape:"Shape",triangle:"Triangle",rhombus:"Rhombus",pentagram:"Pentagram",speechBalloon:"Speech Balloon",rectangle:"Rectangle",ellipse:"Ellipse",straight:"Straight",speed:"Speed"};var bt={translation:pt};const ft={clicker:"\u70B9\u51FB",selector:"\u9009\u62E9",text:"\u6587\u5B57",pencil:"\u94C5\u7B14",arrow:"\u7BAD\u5934",hand:"\u6293\u624B",eraser:"\u6A61\u76AE",laser:"\u6FC0\u5149\u7B14",zoomIn:"\u653E\u5927",zoomOut:"\u7F29\u5C0F",reset:"\u91CD\u7F6E",prevPage:"\u4E0A\u4E00\u9875",nextPage:"\u4E0B\u4E00\u9875",addPage:"\u6DFB\u52A0\u9875\u9762",redo:"\u91CD\u505A",undo:"\u64A4\u9500",collapse:"\u6536\u8D77",expand:"\u5C55\u5F00",clean:"\u6E05\u5C4F",shape:"\u5F62\u72B6",triangle:"\u4E09\u89D2\u5F62",rhombus:"\u83F1\u5F62",pentagram:"\u4E94\u89D2\u661F",speechBalloon:"\u6C14\u7403",rectangle:"\u77E9\u5F62",ellipse:"\u692D\u5706",straight:"\u76F4\u7EBF",speed:"\u901F\u5EA6"};var ut={translation:ft};const gt=async e=>{const t=navigator.language||"zh-CN",o=e.language||t;return await ve.default.init({lng:o,resources:{en:bt,"zh-CN":ut}}),ve.default};function ht(e){(!e.invisiblePlugins||!e.invisiblePlugins.includes(z.WindowManager))&&(e.invisiblePlugins=[...e.invisiblePlugins||[],z.WindowManager])}const U={changeToSelector:"s",changeToLaserPointer:"z",changeToPencil:"p",changeToRectangle:"r",changeToEllipse:"c",changeToEraser:"e",changeToText:"t",changeToStraight:"l",changeToArrow:"a",changeToHand:"h"};async function xt(e,t,o,a){const n=new f.WhiteWebSdk(j(I({},e),{useMobXState:!0}));ht(t),t=I({},t);const s=t.callbacks;delete t.callbacks;const l=j(I({floatBar:!0,hotKeys:I(I({},f.DefaultHotKeys),U)},t),{useMultiViews:!0,disableNewPencil:!1,disableMagixEventDispatchLimit:!0}),c=await n.joinRoom(l,s),p=await z.WindowManager.mount(j(I({cursor:!0,debug:!1},o),{room:c})),d=await gt({language:a});return{sdk:n,room:c,manager:p,i18n:d}}function $(e){const[t,o]=i.useState(!1);return i.useEffect(()=>{if(e){o(e.isWritable),e.isWritable&&(e.disableSerialization=!1);const a=()=>o(e.isWritable);return e.callbacks.on("onEnableWriteNowChanged",a),()=>{e.callbacks.off("onEnableWriteNowChanged",a)}}},[e]),t}function mt(e){const[t,o]=i.useState();return i.useEffect(()=>{if(e)return o(e.boxState),e.emitter.on("boxStateChange",o),()=>{e.emitter.off("boxStateChange",o)}},[e]),t}function wt(e){const[t,o]=i.useState();return i.useEffect(()=>{if(e)return o(e.focused),e.emitter.on("focusedChange",o),()=>{e.emitter.off("focusedChange",o)}},[e]),t}function kt(e){return mt(e)==="maximized"}function Ct(e){const t=kt(e),o=wt(e);return t?Object.values(z.BuiltinApps).some(a=>o==null?void 0:o.includes(a))?"toolbar-only":!0:!1}function vt(e){const[t,o]=i.useState(void 0);return i.useEffect(()=>{if(e){o(e.state.memberState);const a=n=>{n.memberState&&o(n.memberState)};return e.callbacks.on("onRoomStateChanged",a),()=>e.callbacks.off("onRoomStateChanged",a)}},[e]),{memberState:t}}function Pe(e,t){const o=$(e),{memberState:a}=vt(e),n=i.useCallback(()=>{t?t.mainView.cleanCurrentScene():e&&e.cleanCurrentScene()},[t,e]),s=i.useCallback((p,d)=>{const b={currentApplianceName:p,shapeType:d};t?t.mainView.setMemberState(b):e&&e.setMemberState(b)},[t,e]),l=i.useCallback(p=>{t?t.mainView.setMemberState({strokeWidth:p}):e&&e.setMemberState({strokeWidth:p})},[t,e]),c=i.useCallback(p=>{t?t.mainView.setMemberState({strokeColor:p}):e&&e.setMemberState({strokeColor:p})},[t,e]);return{writable:o,memberState:a,cleanCurrentScene:n,setAppliance:s,setStrokeWidth:l,setStrokeColor:c}}const At={writable:!1,memberState:void 0,cleanCurrentScene:G,setAppliance:G,setStrokeWidth:G,setStrokeColor:G};var ee={exports:{}},J={};/*
2
- object-assign
3
- (c) Sindre Sorhus
4
- @license MIT
5
- */var Me=Object.getOwnPropertySymbols,yt=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable;function St(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function Pt(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},o=0;o<10;o++)t["_"+String.fromCharCode(o)]=o;var a=Object.getOwnPropertyNames(t).map(function(s){return t[s]});if(a.join("")!=="0123456789")return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(s){n[s]=s}),Object.keys(Object.assign({},n)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Pt();/** @license React v17.0.2
6
- * react-jsx-runtime.production.min.js
7
- *
8
- * Copyright (c) Facebook, Inc. and its affiliates.
9
- *
10
- * This source code is licensed under the MIT license found in the
11
- * LICENSE file in the root directory of this source tree.
12
- */var Mt=se.default,Ne=60103;J.Fragment=60107;if(typeof Symbol=="function"&&Symbol.for){var ze=Symbol.for;Ne=ze("react.element"),J.Fragment=ze("react.fragment")}var Nt=Mt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,zt=Object.prototype.hasOwnProperty,Lt={key:!0,ref:!0,__self:!0,__source:!0};function Le(e,t,o){var a,n={},s=null,l=null;o!==void 0&&(s=""+o),t.key!==void 0&&(s=""+t.key),t.ref!==void 0&&(l=t.ref);for(a in t)zt.call(t,a)&&!Lt.hasOwnProperty(a)&&(n[a]=t[a]);if(e&&e.defaultProps)for(a in t=e.defaultProps,t)n[a]===void 0&&(n[a]=t[a]);return{$$typeof:Ne,type:e,key:s,ref:l,props:n,_owner:Nt.current}}J.jsx=Le;J.jsxs=Le;ee.exports=J;const r=ee.exports.jsx,h=ee.exports.jsxs,te=ee.exports.Fragment;function m({fallback:e,src:t,alt:o="[icon]"}){return t?r("img",{src:t,alt:o,title:o}):e}const Te={color:"#5D5D5D",activeColor:"#3381FF",backgroundColor:"#fff",hoverBackgroundColor:"rgba(51, 129, 255, 0.1)"},Tt=j(I({},Te),{color:"#eee",backgroundColor:"#111"}),N={light:Te,dark:Tt},x=e=>{let t;return e.theme?t=N[e.theme]:t=N.light,e.active?t.activeColor:t.color},L=[0,11],V=[0,11],Bt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:h("g",{fill:t,children:[r("path",{d:"M17.667 4.5h-3.334c-1.012 0-1.833.82-1.833 1.833V11.5h5.167c1.012 0 1.833-.82 1.833-1.833V6.333c0-1.012-.82-1.833-1.833-1.833Zm-3.334 1h3.334c.46 0 .833.373.833.833v3.334l-.006.104a.833.833 0 0 1-.827.729H13.5V6.333c0-.46.373-.833.833-.833Z"}),r("path",{d:"M6.333 19.5A1.833 1.833 0 0 1 4.5 17.667v-3.334c0-.525.221-1 .576-1.334a1.822 1.822 0 0 1-.576-1.332V8.333c0-1.012.82-1.833 1.833-1.833H10A1.5 1.5 0 0 1 11.5 8v4.5h4.167c.962 0 1.75.74 1.827 1.683l.006.15v3.334c0 1.012-.82 1.833-1.833 1.833Zm4.167-6H6.333a.833.833 0 0 0-.827.729l-.006.104v3.334c0 .46.373.833.833.833H10.5v-5Zm5.167 0H11.5v5h4.167c.46 0 .833-.373.833-.833v-3.334a.833.833 0 0 0-.833-.833ZM10 7.5H6.333a.833.833 0 0 0-.833.833v3.334c0 .46.373.833.833.833H10.5V8a.5.5 0 0 0-.41-.492L10 7.5Z"})]})})},jt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"M19 5v6l-2.647-2.646L5.99 18.718l-.708-.708L15.645 7.646 13 5h6Z"})})},Dt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("rect",{width:"15",height:"15",x:"4.5",y:"4.5",fill:"none",stroke:t,rx:"7.5"})})},Et=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"M9.754 11.99c0 1.856-.711 3.62-1.96 4.951l-.151.155h1.403l.855-.853h.707l.853.853h2.635l.094-.064a6.237 6.237 0 0 0 2.559-4.781l.005-.26h1a7.237 7.237 0 0 1-2.994 5.862l-.229.16-.277.083h-3l-.353-.146-.647-.647-.646.647-.354.146h-3l-.286-.91.214-.148a6.237 6.237 0 0 0 2.567-4.787l.005-.26h1Zm4.772-6.502v2l.35.039a2.98 2.98 0 0 1 2.644 2.78l.006.181h-8a2.98 2.98 0 0 1 2.65-2.961l.35-.039v-2h2Z"})})},Rt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:h("g",{fill:"none",children:[r("path",{d:"M0 0h24v24H0z"}),r("path",{fill:t,d:"m7 5.072 10.33 7.892-4.879.549 3.232 5.598-.866.5-3.233-5.597-2.914 3.95L7 5.072Z"})]})})},Zt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"m8 10-2 2 2 2m10-8H6m12 12H6m12-4h-8m8-4h-8"})})},Ot=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"M4.222 12 12 4.222 19.778 12 12 19.778z"})})},Wt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"m16 13-2 2-2 2-2-2-2-2m8-6-2 2-2 2-2-2-2-2"})})},Gt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"m14.333 5.183.165.007c.494.037.978.245 1.356.623l2.333 2.333a2.15 2.15 0 0 1 0 3.04l-5.833 5.834a3.8 3.8 0 0 1-5.374 0l-1.167-1.166a2.15 2.15 0 0 1 0-3.04l7-7c.42-.42.97-.63 1.52-.63ZM11.52 8.52l-4.999 5a1.15 1.15 0 0 0 0 1.626l1.167 1.167a2.8 2.8 0 0 0 3.96 0l3.832-3.833-3.96-3.96Z"})})},Ut=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"m16 10 2 2-2 2M6 6h12M6 18h12M6 14h8m-8-4h8"})})},Jt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"m18.01 5.282.708.708L5.99 18.718l-.708-.708z"})})},Vt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"m17.497 4.84.116.105 1.442 1.442a1.52 1.52 0 0 1 .104 2.034l-.104.116L8.733 18.858l-4.347.756.756-4.347L15.463 4.945a1.52 1.52 0 0 1 2.034-.104ZM5.967 16.349l-.353 2.037 2.037-.354-1.683-1.683Zm8.407-8.901-7.946 7.946 2.178 2.178 7.946-7.946-2.178-2.178Zm-.728 2.2.708.707-5 5-.708-.708 5-5Zm2.596-4.055-.072.06-1.09 1.088 2.179 2.178 1.089-1.088a.52.52 0 0 0 .105-.584l-.045-.08-.06-.072-1.442-1.442a.52.52 0 0 0-.664-.06Z"})})},Ft=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"M5.5 5.5h13v13h-13z"})})},Ht=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"m12 12 8 2.667-3.556 1.777L14.667 20 12 12Zm3-8v7.5h-1V5H5v9h6.5v1H4V4h11Z"})})},Qt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"M17 4.5c.414 0 .79.168 1.06.44.272.27.44.646.44 1.06v9c0 .414-.168.79-.44 1.06a1.49 1.49 0 0 1-1.06.44h-4.207l-2.715 2.715-1.81-2.715H7a1.49 1.49 0 0 1-1.06-.44A1.495 1.495 0 0 1 5.5 15V6c0-.414.168-.79.44-1.06A1.49 1.49 0 0 1 7 4.5Z"})})},Yt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"m12 3.523 1.993 5.734 6.07.123-4.838 3.668 1.758 5.81L12 15.391l-4.983 3.467 1.758-5.81L3.938 9.38l6.069-.123L12 3.523Z"})})},Kt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:t,d:"M18.5 5.5V8h-1V6.5H13v11h2v1H9v-1h2v-11H6.5V8h-1V5.5h13Z"})})},Xt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"M12 6.008 19.138 18.5H4.862L12 6.008Z"})})},qt=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:t,d:"m16 11-2-2-2-2-2 2-2 2m8 6-2-2-2-2-2 2-2 2"})})},C={Clicker:i.memo(Rt),Collapse:i.memo(Zt),Eraser:i.memo(Gt),Expand:i.memo(Ut),Pencil:i.memo(Vt),Selector:i.memo(Ht),Rectangle:i.memo(Ft),Text:i.memo(Kt),Apps:i.memo(Bt),Clean:i.memo(Et),Circle:i.memo(Dt),Line:i.memo(Jt),Arrow:i.memo(jt),Star:i.memo(Yt),Diamond:i.memo(Ot),SpeechBalloon:i.memo(Qt),Triangle:i.memo(Xt),Up:i.memo(qt),Down:i.memo(Wt)},ce={[f.ApplianceNames.rectangle]:C.Rectangle,[f.ApplianceNames.ellipse]:C.Circle,[f.ApplianceNames.straight]:C.Line,[f.ApplianceNames.arrow]:C.Arrow,[f.ShapeType.Pentagram]:C.Star,[f.ShapeType.Rhombus]:C.Diamond,[f.ShapeType.Triangle]:C.Triangle,[f.ShapeType.SpeechBalloon]:C.SpeechBalloon},Be=[f.ApplianceNames.rectangle,f.ApplianceNames.ellipse,f.ApplianceNames.straight,f.ApplianceNames.arrow],je=[f.ShapeType.Pentagram,f.ShapeType.Rhombus,f.ShapeType.Triangle,f.ShapeType.SpeechBalloon],F=32+4,De=8,_t=F*De-4,$t=F*2-4,M=i.forwardRef((e,t)=>{const{content:o,disabled:a,active:n,onClick:s,interactive:l,placement:c="right",children:p}=e,{writable:d,theme:b}=i.useContext(v);return r(P.default,{className:"fastboard-tip",content:o,interactive:l,theme:b,disabled:a||!d,placement:c,offset:c.includes("right")?V:void 0,duration:300,children:r("button",{ref:t,className:u.default("fastboard-toolbar-btn",b,{active:n}),onClick:s,disabled:a||!d,children:p})})});function H(){const{theme:e}=i.useContext(v);return r("span",{className:u.default(`${O}-cut-line`,e)})}function eo({disabled:e,scrollTo:t}){const{theme:o,icons:a}=i.useContext(v),n=i.useCallback(()=>t(-F),[t]);return h(te,{children:[r(M,{content:"Up",disabled:e,onClick:n,children:r(m,{fallback:r(C.Up,{theme:o}),src:e?a==null?void 0:a.upIconDisable:a==null?void 0:a.upIcon,alt:"[up]"})}),r(H,{})]})}function to({disabled:e,scrollTo:t}){const{theme:o,icons:a}=i.useContext(v),n=i.useCallback(()=>t(F),[t]);return h(te,{children:[r(H,{}),r(M,{content:"Down",disabled:e,onClick:n,children:r(m,{fallback:r(C.Down,{theme:o}),src:e?a==null?void 0:a.downIconDisable:a==null?void 0:a.downIcon,alt:"[down]"})})]})}function Q(e,t){return typeof t!="string"?e:h("span",{className:"fastboard-toolbar-tooltip",children:[r("span",{children:e}),r("span",{className:"fastboard-toolbar-hotkey",children:t.toUpperCase()})]})}function oo(){var w;const e=E(),{theme:t,icons:o,writable:a,setAppliance:n,memberState:s,i18n:l}=i.useContext(v),c=i.useCallback(()=>n(f.ApplianceNames.clicker),[n]),p=(w=e==null?void 0:e.config.joinRoom.hotKeys)==null?void 0:w.changeToClick,b=(s==null?void 0:s.currentApplianceName)===f.ApplianceNames.clicker,g=!a;return r(M,{content:Q(l==null?void 0:l.t("clicker"),p),onClick:c,active:b,children:r(m,{fallback:r(C.Clicker,{theme:t,active:b}),src:g?o==null?void 0:o.clickerIconDisable:o==null?void 0:o.clickerIcon,alt:"[clicker]"})})}function ro(){const e=E(),{theme:t,icons:o,writable:a,setAppliance:n,memberState:s,i18n:l}=i.useContext(v),c=i.useCallback(()=>n(f.ApplianceNames.selector),[n]),d=(s==null?void 0:s.currentApplianceName)===f.ApplianceNames.selector,b=!a,g=((e==null?void 0:e.config.joinRoom.hotKeys)||U).changeToSelector;return r(M,{content:Q(l==null?void 0:l.t("selector"),g),onClick:c,active:d,children:r(m,{fallback:r(C.Selector,{theme:t,active:d}),src:b?o==null?void 0:o.selectorIconDisable:o==null?void 0:o.selectorIcon,alt:"[selector]"})})}function ao(){const e=E(),{theme:t,icons:o,writable:a,setAppliance:n,memberState:s,i18n:l}=i.useContext(v),c=i.useCallback(()=>n(f.ApplianceNames.eraser),[n]),d=(s==null?void 0:s.currentApplianceName)===f.ApplianceNames.eraser,b=!a,g=((e==null?void 0:e.config.joinRoom.hotKeys)||U).changeToEraser;return r(M,{content:Q(l==null?void 0:l.t("eraser"),g),onClick:c,active:d,children:r(m,{fallback:r(C.Eraser,{theme:t,active:d}),src:b?o==null?void 0:o.eraserIconDisable:o==null?void 0:o.eraserIcon,alt:"[eraser]"})})}function no(){const{theme:e,icons:t,writable:o,cleanCurrentScene:a,i18n:n}=i.useContext(v),s=!o;return r(M,{content:n==null?void 0:n.t("clean"),onClick:a,children:r(m,{fallback:r(C.Clean,{theme:e}),src:s?t==null?void 0:t.cleanIconDisable:t==null?void 0:t.cleanIcon,alt:"[clean]"})})}var io="data:image/png;base64,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",so="data:image/png;base64,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",lo="data:image/png;base64,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";function co({content:e,onClick:t}){const{theme:o,icons:a,writable:n}=i.useContext(v),s=!n,l=r(M,{content:"Apps",onClick:t,children:r(m,{fallback:r(C.Apps,{theme:o}),src:s?a==null?void 0:a.appsIconDisable:a==null?void 0:a.appsIcon,alt:"[apps]"})});return e===!1?l:r("span",{className:"fastboard-toolbar-btn-interactive",children:r(P.default,{className:"fastboard-tip",content:po(e),theme:o,placement:"right-end",trigger:"click",offset:V,arrow:!1,interactive:!0,children:l})})}function po(e){return r("div",{className:"fastboard-toolbar-panel apps",children:r("div",{className:"fastboard-toolbar-apps",children:e||r(bo,{})})})}function bo(){const e=E();return h(te,{children:[r(de,{title:"Code Editor",src:io,alt:"[code editor]",onClick:e==null?void 0:e.insertCodeEditor.bind(e)}),r(de,{title:"GeoGebra",src:so,alt:"[geogebra]",onClick:e==null?void 0:e.insertGeoGebra.bind(e)}),r(de,{title:"Countdown",src:lo,alt:"[countdown]",onClick:e==null?void 0:e.insertCountdown.bind(e)})]})}function de({title:e,src:t,alt:o,onClick:a}){return h("span",{className:"fastboard-toolbar-app-icon",children:[r(M,{placement:"top",content:e,onClick:a,children:r("img",{src:t,alt:o,title:e})}),r("span",{className:"fastboard-toolbar-app-icon-text",children:e})]})}const oe={"#E02020":[224,32,32],"#F7B500":[247,181,0],"#6DD400":[109,212,0],"#32C5FF":[50,197,255],"#0091FF":[0,145,255],"#6236FF":[98,54,255],"#B620E0":[182,32,224],"#6D7278":[109,114,120]},fo=Object.keys(oe);function pe(){const{theme:e,memberState:t,setStrokeColor:o,writable:a}=i.useContext(v),n=t==null?void 0:t.strokeColor,s=!a;return r("div",{className:u.default("fastboard-toolbar-color-box",e),children:fo.map(l=>r("div",{className:u.default("fastboard-toolbar-color-item",e),onClick:()=>o(oe[l]),children:r("div",{className:u.default("fastboard-toolbar-color-border",e,{active:n&&it(n,oe[l])}),children:r("button",{className:u.default("fastboard-toolbar-color-btn"),style:{background:l},disabled:s,onClick:c=>{c.stopPropagation(),o(oe[l])}})})},l))})}function Ee(){const{theme:e,writable:t,memberState:o,setStrokeWidth:a}=i.useContext(v),{activeColor:n}=N[e],s=(o==null?void 0:o.strokeWidth)||0;return r(Ae.default,{disabled:!t,className:u.default("fastboard-toolbar-slider",e),trackStyle:{background:n},handleStyle:{border:`1px solid ${n}`},value:s,onChange:a,min:1,max:32})}function uo(){const e=E(),{theme:t,icons:o,writable:a,setAppliance:n,memberState:s,i18n:l}=i.useContext(v),c=i.useCallback(()=>{n(f.ApplianceNames.pencil)},[n]),d=(s==null?void 0:s.currentApplianceName)===f.ApplianceNames.pencil,b=!a,g=((e==null?void 0:e.config.joinRoom.hotKeys)||U).changeToPencil;return r("span",{className:"fastboard-toolbar-btn-interactive",children:r(P.default,{className:"fastboard-tip",content:go(),theme:t,placement:"right-start",trigger:"click",offset:V,arrow:!1,interactive:!0,children:h(M,{content:Q(l==null?void 0:l.t("pencil"),g),active:d,onClick:c,children:[r(m,{fallback:r(C.Pencil,{theme:t,active:d}),src:b?o==null?void 0:o.pencilIconDisable:o==null?void 0:o.pencilIcon,alt:"[pencil]"}),r("span",{className:"fastboard-toolbar-triangle"})]})})})}function go(){return h("div",{className:"fastboard-toolbar-panel pencil",children:[r(Ee,{}),r(H,{}),r(pe,{})]})}function ho(){const e=E(),{theme:t,icons:o,writable:a,setAppliance:n,memberState:s,i18n:l}=i.useContext(v),c=i.useCallback(()=>{n(f.ApplianceNames.text)},[n]),d=(s==null?void 0:s.currentApplianceName)===f.ApplianceNames.text,b=!a,g=((e==null?void 0:e.config.joinRoom.hotKeys)||U).changeToText;return r("span",{className:"fastboard-toolbar-btn-interactive",children:r(P.default,{className:"fastboard-tip",content:xo(),theme:t,placement:"right-start",trigger:"click",offset:V,arrow:!1,interactive:!0,children:h(M,{content:Q(l==null?void 0:l.t("text"),g),active:d,onClick:c,children:[r(m,{fallback:r(C.Text,{theme:t,active:d}),src:b?o==null?void 0:o.textIconDisable:o==null?void 0:o.textIcon,alt:"[text]"}),r("span",{className:"fastboard-toolbar-triangle"})]})})})}function xo(){return r("div",{className:"fastboard-toolbar-panel text",children:r(pe,{})})}const mo=new Set([...Be,...je]);function wo(){const{theme:e,memberState:t,i18n:o}=i.useContext(v),a=t==null?void 0:t.currentApplianceName,n=t==null?void 0:t.shapeType,s=a===f.ApplianceNames.shape?n:a,l=mo.has(s),c=ce[s]||C.Rectangle;return r("span",{className:"fastboard-toolbar-btn-interactive",children:r(P.default,{className:"fastboard-tip",content:ko(),theme:e,placement:"right-start",trigger:"click",offset:V,arrow:!1,interactive:!0,children:h(M,{content:o==null?void 0:o.t("shape"),active:l,children:[r(c,{theme:e,active:l}),r("span",{className:"fastboard-toolbar-triangle"})]})})})}function ko(){return h("div",{className:"fastboard-toolbar-panel shapes",children:[r(Co,{}),r(H,{}),r(Ee,{}),r(H,{}),r(pe,{})]})}function Co(){const{i18n:e}=i.useContext(v);return h("div",{className:"fastboard-toolbar-shapes",children:[Be.map(t=>r(vo,{content:e==null?void 0:e.t(t),Appliance:t,Icon:ce[t]},t)),je.map(t=>r(Ao,{content:e==null?void 0:e.t(t),shape:t,Icon:ce[t]},t))]})}function vo({content:e,Appliance:t,Icon:o}){const{theme:a,writable:n,setAppliance:s,memberState:l}=i.useContext(v),c=l==null?void 0:l.currentApplianceName;return r(M,{content:e,disabled:!n,placement:"top",onClick:()=>s(t),children:r(o,{theme:a,active:c===t})})}function Ao({content:e,shape:t,Icon:o}){const{theme:a,writable:n,setAppliance:s,memberState:l}=i.useContext(v),p=(l==null?void 0:l.currentApplianceName)===f.ApplianceNames.shape&&(l==null?void 0:l.shapeType);return r(M,{content:e,disabled:!n,placement:"top",onClick:()=>s(f.ApplianceNames.shape,t),children:r(o,{theme:a,active:p===t})})}const yo=se.default.memo(()=>{var A,y,k,Y,ue,ge,he;const e=E(),t=i.useRef(null),[o,a]=i.useState(0),[n,s]=i.useState(0),l=(k=(y=(A=e==null?void 0:e.config.toolbar)==null?void 0:A.apps)==null?void 0:y.enable)!=null?k:!0,c=n<F*De+48,p=le(n-48*(c?3:1),$t,_t),d=Math.max(n-p-1,0),b=o===0,g=o===d,w=i.useCallback(R=>{a(le(o+R,0,d))},[d,o]);return i.useEffect(()=>{t.current&&(t.current.scrollTop=o)},[o]),i.useEffect(()=>{var xe,me;const R=(me=(xe=t.current)==null?void 0:xe.parentElement)==null?void 0:me.parentElement;if(R){const{paddingTop:Ye,paddingBottom:Ke}=getComputedStyle(R),Xe=parseInt(Ye)+parseInt(Ke)||0,we=new ResizeObserver(()=>{s(R.getBoundingClientRect().height-Xe)});return we.observe(R),()=>we.disconnect()}},[]),h(te,{children:[c&&r(eo,{scrollTo:w,disabled:b}),h("div",{ref:t,className:u.default(`${O}-section`),style:{height:`${p}px`,overflow:c?"hidden":"visible"},children:[r(oo,{}),r(ro,{}),r(uo,{}),r(ho,{}),r(wo,{}),r(ao,{}),r(no,{}),l&&r(co,{content:(ue=(Y=e==null?void 0:e.config.toolbar)==null?void 0:Y.apps)==null?void 0:ue.content,onClick:(he=(ge=e==null?void 0:e.config.toolbar)==null?void 0:ge.apps)==null?void 0:he.onClick})]}),c&&r(to,{scrollTo:w,disabled:g})]})});var Io="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAB8CAYAAAAMw2JFAAAAAXNSR0IArs4c6QAAA49JREFUeF7tnLFv00AUh5/TFVYkxIDEnKFjJ/gb2CIqpUPagYXNEV2LRGk7tAiRSA0bWcC0QzowwQKuVDnCLE2KTZCMSNLkHCLalCpBkdFVMTKh8TXO+c4S16XDSb0vv/vyfE3fqwQR+ZIA4AoAdADgJ08mSVXVV9ls9nE+nzcBAAFAnweQ1Gg06gihrmEYubm5OeX4+LgBAD9Yw0iO49S63S7U6/VYq9UyCoXC2tLS0kcAwEA9VkBnIO5m7XYbJwTVanVLluWcruvfAOA7ADhhA/0Fgjfr9/tweHgYs20baZq2sbCw8HaQTqgy/wPivvKTkxN8XFPNZvMdC5lHgmAgx3EAISQhhHqGYWyGKbMviJsOC5kvBOIjcxUAWjRkHgtkSGZb07R1WjKPDeIj82cAaAatzIFBhmU2TTOXTCZfBq3ME4HQlJkKCA2ZqYJMIjN1kKAyhwYyrsyhgpwns6IoyysrK/rgQfrnqc4ExCtzrVb7tbe39yCVSr0GAFyZz2CYguANT09PwbIsaWdn5146nX4zuO+wB8EwnU5HqlQqdiKRuHNwcFDC1Zh5Iu4xWZYVU1V1eXZ29jlOhRvI0dGRVC6XP8zMzNwFgK/cQHq9HpTLZXt6evo2AFS4geDbX6lUisXj8VsA8IkbCHZlf39/Kh6P3xQg7jtHJDL826JIRCRC+gRBOCIcEY6QEhCOkBISdUQ4IhwhJSAcISUk6kjojjxaXbt0Py3jP1DCtes3ruLvVetLnenRYIgnT7OX3Y25gLgQ3gSYg3ghuIEMQ3ABOQ+COcgoCKYgfhD/Jwh+1ZE4GrdKRkJWPxhulTUSBe28ZLglMgzDHcR9N3G/BpDuHH7r4qoY+lUx6PGIoxFHQ3JHOCIcEY6QEhCOkBISdUQ4IhwhJSAcISUk6ohwxM+RyLR/RaYhLjItgpFomoxEG2kkGmvxRBPXVmPPWIypKMpD5s3X3kEh0zSfJZPJF6NmK0JrI3VHpxBCaiaTWc/n877TJtRBPMNkdrFY3Jifn8ed3njUzneYjCqIZ7xue3FxMadpGh6vu9BEEhUQr4yFQmE1yMDhRCDjyEi6JAUGGVdG6iBBZaQK4pVRluVNXdfZjsfRkHGiRGjKGBjEI+P7TCazQaqMpI1I635jtmNVRtJGpPVRg8fbtGW8EAiL6VUiyGA4vUd6TJN+0KTr0u7u7hYLGUmg0fkHBiRSVuu/AWpfZNft9vFDAAAAAElFTkSuQmCC",So="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAB8CAYAAAAMw2JFAAAAAXNSR0IArs4c6QAAA5xJREFUeF7tnL9v00AUx5/TlRkJMSAxZ+jYCf4GtopK6dB2qBBsjshaJErboWVJpYaNLGDaIR2YYAFXqlxhlvzAJkhGJGlyDhVNSpWgyOiqBJnQ+urznW2Jy1JVVnKffv3x8yV9LxLE5CEBwFUA6ALAzyiZJFVVX21ubj7N5/MmACAAGEQBJDWbzQZCqGcYRm52dlbpdDpNAPgRNozkOE691+tBo9FItNtto1AorC0tLX0EAAzUDwvoDGS02NHREU4IarXatizLOV3XvwHAdwBweAP9BYIXGwwGcHh4mLBtG2matrGwsPB2mA5Xmf8BGf3lJycn+HRNtFqtd2HIfCEIBnIcBxBCEkKobxjGFk+ZPUFG6YQh86VAPGSuAUCbhcy+QMZktjVNW2cls28QD5k/A0CLtjJTg4zLbJpmLpVKvaStzIFAWMrMBISFzExBgsjMHIRWZm4gfmXmCnKezIqiLK+srOjDG+mfu3ooIG6Z6/X6r/39/Udzc3OvAQBX5jOYUEHwgqenp2BZlrS7u/sgnU6/Ge53wgfBMN1uV6pWq/b09PTdSqVSwtU49ERGp8myrISqqsszMzPPcSqRgRwfH0vlcvnD1NTUIgB8jQyk3+9DuVy2Jycn7wBANTIQvPsrlUqJZDJ5GwA+RQaCXSkWixPJZPKWABldOSKR8XeLIhGRCOkTBOGIcEQ4QkpAOEJKSNQR4YhwhJSAcISUkKgjTBy5fuPmNfxCNetLA/98srp25WFaxv+UpH5QnZpxEPz7/XuLnSAwzEBwFEFgmIIEgWEOQgvDBYQGhhuIXxiuIH5g/g8QP5czt0T8QFB/mHdeZXXXdr8QXEBoIJiD0EIwBQkCwQwksm0A9abD44lUl68A4ZEAkz0rDzDhiDg1JK+EI8IR4QgpAeEIKSFRR4QjwhFSAsIRUkKijsTSkdi0f8WmIS42LYKxaJqMRRtpLBpr8URTpK3GrrEYU1GUx6E3X7sHhUzTfJZKpV5cNFvBrY10NDqFEFKz2ex6Pp/3nDZhDuIaJrMPDg425ufncac3HrXzHCZjCuIar9vJZDI5TdPweN2lJpKYgLhlLBQKqzQDh4FA/MhI2ptQg/iVkTkIrYxMQdwyyrK8pet6uONxLGQMlAhLGalBXDK+z2azG6TKSFqIdNxrzNZXZSQtRDp+0eDxDmsZLwUSxvQqEWQ4nN4n3aZJLxT0uLS3t7cdhowk0Ph8gQGJNKzjvwGKWUjXcvHclAAAAABJRU5ErkJggg==";const Po=se.default.memo(({toolbar:e,children:t})=>{const[o]=i.useState(()=>{const a=document.createElement("div");return a.style.position="absolute",a});return i.useEffect(()=>{e&&o&&e.appendChild(o)},[o,e]),i.useEffect(()=>{if(o&&e){e.appendChild(o);const n=e.getBoundingClientRect().height/2-31;return o.style.top=n+"px",o.style.left="41px",o.style.width="17px",o.style.height="62px",()=>{e.removeChild(o)}}},[o,e]),o?_.default.createPortal(t,o):null}),v=i.createContext(I({theme:"light"},At)),O="fastboard-toolbar",Re=({theme:e="light",icons:t,room:o,manager:a,i18n:n})=>{const[s,l]=i.useState(!0),c=Pe(o,a),[p,d]=i.useState(null),[b,g]=i.useState(!1),[w,A]=i.useState(!0),y=!c.writable,k=i.useCallback(()=>{l(Y=>!Y)},[]);return r(v.Provider,{value:j(I({theme:e,icons:t},c),{i18n:n}),children:r(ie.AnimatePresence,{children:s?h(ie.motion.div,{initial:{x:-100},animate:{x:0,transition:{duration:.5}},ref:d,className:u.default(O,e),onPointerEnter:()=>{s&&g(!0)},onMouseLeave:()=>g(!1),exit:{x:-100,transition:{duration:.5}},onAnimationStart:()=>A(!1),onAnimationComplete:()=>A(!0),style:{pointerEvents:w?"auto":"none"},children:[r(yo,{}),s&&b&&r(Po,{toolbar:p,children:r("div",{onClick:k,children:r("img",{draggable:!1,className:u.default(`${O}-mask-btn`,e),src:Io})})})]},"toolbar"):r(ie.motion.div,{className:u.default(`${O}-expand-btn`,e),onClick:k,initial:{x:-100},animate:{x:0,transition:{duration:.5}},children:!s&&r(m,{fallback:r("img",{draggable:!1,src:So,className:u.default(`${O}-mask-btn`,e)}),src:y?t==null?void 0:t.expandIconDisable:t==null?void 0:t.expandIcon})},"expand")})})};function Ze(e,t){const[o,a]=i.useState(0),[n,s]=i.useState(0);i.useEffect(()=>{if(t)return t.mainView.callbacks.on("onCanUndoStepsUpdate",a),t.mainView.callbacks.on("onCanRedoStepsUpdate",s),()=>{t.mainView.callbacks.off("onCanUndoStepsUpdate",a),t.mainView.callbacks.off("onCanRedoStepsUpdate",s)};if(e)return e.callbacks.on("onCanUndoStepsUpdate",a),e.callbacks.on("onCanRedoStepsUpdate",s),()=>{e.callbacks.off("onCanUndoStepsUpdate",a),e.callbacks.off("onCanRedoStepsUpdate",s)}},[e,t]);const l=i.useCallback(()=>{t?t.mainView.undo():e&&e.undo()},[t,e]),c=i.useCallback(()=>{t?t.mainView.redo():e&&e.redo()},[t,e]);return{redoSteps:n,undoSteps:o,redo:c,undo:l}}function Mo({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:h("g",{fill:"none",fillRule:"evenodd",stroke:a,strokeLinecap:"round",strokeLinejoin:"round",children:[r("path",{d:"M10 14H6v-4"}),r("path",{d:"m6 14 .788-.9A7.005 7.005 0 0 1 18 14h0"})]})})}function No({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:h("g",{fill:"none",fillRule:"evenodd",stroke:a,strokeLinecap:"round",strokeLinejoin:"round",children:[r("path",{d:"M14 14h4v-4"}),r("path",{d:"m18 14-.788-.9A7.005 7.005 0 0 0 6 14h0"})]})})}const be="fastboard-redo-undo";function Oe({room:e,manager:t,theme:o="light",undoIcon:a,undoIconDisable:n,redoIcon:s,redoIconDisable:l,i18n:c}){const p=$(e),{redoSteps:d,undoSteps:b,redo:g,undo:w}=Ze(e,t),A=!p;return h("div",{className:u.default(be,o),children:[r(P.default,{className:"fastboard-tip",content:c==null?void 0:c.t("undo"),theme:o,disabled:A,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${be}-btn`,"undo",o),disabled:A||b===0,onClick:w,children:r(m,{fallback:r(Mo,{theme:o}),src:b===0?n:a,alt:"[undo]"})})}),r(P.default,{className:"fastboard-tip",content:c==null?void 0:c.t("redo"),theme:o,disabled:A,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${be}-btn`,"redo",o),disabled:A||d===0,onClick:g,children:r(m,{fallback:r(No,{theme:o}),src:d===0?l:s,alt:"[redo]"})})})]})}const B=[.10737418240000011,.13421772800000012,.16777216000000014,.20971520000000016,.26214400000000015,.3276800000000002,.4096000000000002,.5120000000000001,.6400000000000001,.8,1,1.26,1.5876000000000001,2.000376,2.5204737600000002,3.1757969376000004,4.001504141376,5.041895218133761,6.352787974848539,8.00451284830916,10];function re(e,t){const{length:o}=B,a=o-1;if(e<B[0])return B[0];if(e>B[a])return B[a];for(let n=0;n<o;++n){const s=B[n],l=n===0?-1/0:(B[n-1]+s)/2,c=n===a?1/0:(B[n+1]+s)/2;if(l<=e&&e<=c)return B[le(n+t,0,a)]}return 1}function We(e,t){const[o,a]=i.useState(1),n=i.useCallback(()=>{if(t)t.mainView.moveCamera({scale:1,centerX:0,centerY:0});else if(e){const{scenes:c,index:p}=e.state.sceneState;c[p].ppt?e.scalePptToFit():e.moveCamera({scale:1,centerX:0,centerY:0})}},[e,t]),s=i.useCallback(()=>{t?t.mainView.moveCamera({scale:re(o,1),centerX:0,centerY:0}):e&&e.moveCamera({scale:re(o,1),centerX:0,centerY:0})},[e,t,o]),l=i.useCallback(()=>{t?t.mainView.moveCamera({scale:re(o,-1),centerX:0,centerY:0}):e&&e.moveCamera({scale:re(o,-1),centerX:0,centerY:0})},[e,t,o]);return i.useEffect(()=>{if(t){a(t.mainView.camera.scale);const c=({scale:p})=>a(p);return t.mainView.callbacks.on("onCameraUpdated",c),()=>{t.mainView.callbacks.off("onCameraUpdated",c)}}if(e){a(e.state.cameraState.scale);const c=p=>{p.cameraState&&a(p.cameraState.scale)};return e.callbacks.on("onRoomStateChanged",c),()=>{e.callbacks.off("onRoomStateChanged",c)}}},[e,t]),{scale:o,resetCamera:n,zoomIn:s,zoomOut:l}}function zo({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:a,strokeLinecap:"round",strokeLinejoin:"round",d:"M7 12h10"})})}function Lo({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:a,strokeLinecap:"round",strokeLinejoin:"round",d:"M12 7v10m-5-5h10"})})}function To({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:h("g",{fill:"none",fillRule:"evenodd",transform:"translate(-176 -684)",children:[r("path",{stroke:a,strokeLinejoin:"round",d:"M188 688v4m0 8v4m8-8h-4m-8 0h-4"}),r("circle",{cx:"188",cy:"696",r:"6",stroke:a}),r("circle",{cx:"188",cy:"696",r:"1",fill:a})]})})}const W="fastboard-zoom-control";function Ge({room:e,manager:t,theme:o="light",resetIcon:a,resetIconDisable:n,minusIcon:s,minusIconDisable:l,plusIcon:c,plusIconDisable:p,i18n:d}){const b=$(e),{scale:g,resetCamera:w,zoomIn:A,zoomOut:y}=We(e,t),k=!b;return h("div",{className:u.default(W,o),children:[r(P.default,{className:"fastboard-tip",content:d==null?void 0:d.t("zoomOut"),theme:o,disabled:k,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${W}-btn`,"minus",o),disabled:k,onClick:y,children:r(m,{fallback:r(zo,{theme:o}),src:k?l:s,alt:"[minus]"})})}),r("span",{className:u.default(`${W}-scale`,o),children:Math.ceil(g*100)}),r("span",{className:u.default(`${W}-percent`,o),children:"%"}),r(P.default,{className:"fastboard-tip",content:d==null?void 0:d.t("zoomIn"),theme:o,disabled:k,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${W}-btn`,"plus",o),disabled:k,onClick:A,children:r(m,{fallback:r(Lo,{theme:o}),src:k?p:c,alt:"[plus]"})})}),r(P.default,{className:"fastboard-tip",content:d==null?void 0:d.t("reset"),theme:o,disabled:k,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${W}-btn`,"reset",o),disabled:k,onClick:w,children:r(m,{fallback:r(To,{theme:o}),src:k?n:a,alt:"[reset]"})})})]})}function Ue(e,t){const[o,a]=i.useState(0),[n,s]=i.useState(0),l=i.useCallback(async()=>{if(t&&e){await t.switchMainViewToWriter();const d=e.state.sceneState.contextPath;e.putScenes(d,[{}],o+1),await t.setMainViewSceneIndex(o+1)}else if(!t&&e){const d=e.state.sceneState.contextPath;e.putScenes(d,[{}],o+1),e.setSceneIndex(o+1)}},[e,t,o]),c=i.useCallback(()=>{t?t.setMainViewSceneIndex(o-1):e&&e.pptPreviousStep()},[e,t,o]),p=i.useCallback(()=>{t?t.setMainViewSceneIndex(o+1):e&&e.pptNextStep()},[e,t,o]);return i.useEffect(()=>{if(e){if(a(e.state.sceneState.index),s(e.state.sceneState.scenes.length),t)return t.emitter.on("mainViewSceneIndexChange",a),()=>{t.emitter.off("mainViewSceneIndexChange",a)};{const d=b=>{b.sceneState&&(a(b.sceneState.index),s(b.sceneState.scenes.length))};return e.callbacks.on("onRoomStateChanged",d),()=>{e.callbacks.off("onRoomStateChanged",d)}}}},[e,t]),{pageIndex:o,pageCount:n,prevPage:c,nextPage:p,addPage:l}}function Bo({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:a,d:"M12 7.5a.5.5 0 0 1 .09.992L12 8.5H8a1.5 1.5 0 0 0-1.493 1.356L6.5 10v6a1.5 1.5 0 0 0 1.356 1.493L8 17.5h6a1.5 1.5 0 0 0 1.493-1.356L15.5 16v-4a.5.5 0 0 1 .992-.09l.008.09v4a2.5 2.5 0 0 1-2.336 2.495L14 18.5H8a2.5 2.5 0 0 1-2.495-2.336L5.5 16v-6a2.5 2.5 0 0 1 2.336-2.495L8 7.5h4Zm4-2a.5.5 0 0 1 .492.41L16.5 6v1.5H18a.5.5 0 0 1 .09.992L18 8.5h-1.5V10a.5.5 0 0 1-.992.09L15.5 10V8.5H14a.5.5 0 0 1-.09-.992L14 7.5h1.5V6a.5.5 0 0 1 .5-.5Z"})})}function jo({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:a,strokeLinecap:"round",strokeLinejoin:"round",d:"m14 16-2-2-2-2 2-2 2-2"})})}function Do({theme:e="light",active:t}){const o=N[e],a=t?o.activeColor:o.color;return r("svg",{viewBox:"0 0 24 24",children:r("path",{fill:"none",stroke:a,strokeLinecap:"round",strokeLinejoin:"round",d:"m10 16 2-2 2-2-2-2-2-2"})})}const D="fastboard-page-control";function Je({room:e,manager:t,theme:o="light",addIcon:a,addIconDisable:n,prevIcon:s,prevIconDisable:l,nextIcon:c,nextIconDisable:p,i18n:d}){const b=$(e),k=Ue(e,t),{pageIndex:g,pageCount:w}=k,A=X(k,["pageIndex","pageCount"]),y=!b;return h("div",{className:u.default(D,o),children:[r(P.default,{className:"fastboard-tip",content:d==null?void 0:d.t("prevPage"),theme:o,disabled:y,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${D}-btn`,"prev",o),disabled:y||g===0,onClick:A.prevPage,children:r(m,{fallback:r(jo,{theme:o}),src:y?l:s,alt:"[prev]"})})}),r("span",{className:u.default(`${D}-page`,o),children:w===0?"\u2026":g+1}),r("span",{className:u.default(`${D}-slash`,o),children:"/"}),r("span",{className:u.default(`${D}-page-count`,o),children:w}),r(P.default,{className:"fastboard-tip",content:d==null?void 0:d.t("nextPage"),theme:o,disabled:y,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${D}-btn`,"next",o),disabled:y||g===w-1,onClick:A.nextPage,children:r(m,{fallback:r(Do,{theme:o}),src:y?p:c,alt:"[next]"})})}),r(P.default,{className:"fastboard-tip",content:d==null?void 0:d.t("addPage"),theme:o,disabled:y,placement:"top",duration:300,offset:L,children:r("button",{className:u.default(`${D}-btn`,"add",o),disabled:y,onClick:A.addPage,children:r(m,{fallback:r(Bo,{theme:o}),src:y?n:a,alt:"[add]"})})})]})}function Eo({instance:e}){const[t]=i.useState(()=>new st),o=i.useCallback(b=>t.schedule(b?()=>e.mount(b):()=>e.unmount()),[e,t]),a=Ct(e.manager),n=!a,s={room:e.room,manager:e.manager,i18n:e.i18n},{Toolbar:l=n||a==="toolbar-only",RedoUndo:c=n,ZoomControl:p=n,PageControl:d=n}=e.config.layout||{};return r(ae.Context.Provider,{value:e,children:h("div",{className:"fastboard-root",children:[!e.room&&r("div",{className:"fastboard-loading",children:"Loading\u2026"}),r("div",{className:"fastboard-view",ref:o}),l&&r("div",{className:"fastboard-left",children:r(Re,I({},s))}),(c||p)&&h("div",{className:"fastboard-bottom-left",children:[c&&r(Oe,I({},s)),p&&r(Ge,I({},s))]}),d&&r("div",{className:"fastboard-bottom-right",children:r(Je,I({},s))})]})})}class ae{constructor(t){S(this,"config");S(this,"sdk",null);S(this,"room",null);S(this,"manager",null);S(this,"i18n",null);S(this,"ready",!1);S(this,"resolveReady");S(this,"readyPromise");S(this,"target",null);S(this,"collector",null);this.config=I({},t),this.refreshReadyPromise(),this.initialize()}refreshReadyPromise(){this.readyPromise=new Promise(t=>{this.resolveReady=()=>{this.resolveReady=G,this.ready=!0,t()}})}async initialize(){const t=await xt(this.config.sdkConfig,this.config.joinRoom,this.config.managerConfig||{},this.config.language||"en-US");this.accept(t),this.resolveReady()}bindElement(t){this.target&&this.target!==t&&_.default.unmountComponentAtNode(this.target),this.target=t,this.forceUpdate()}bindCollector(t){this.collector=t,this.manager&&t&&this.manager.bindCollectorContainer(t)}updateLayout(t){this.config.layout=t,this.forceUpdate()}async forceUpdate(){await this.readyPromise,this.target&&_.default.render(r(Eo,{instance:this}),this.target)}accept({sdk:t,room:o,manager:a,i18n:n}){this.sdk=t,this.room=o,this.manager=a,this.i18n=n,this.forceUpdate()}async dispose(){this.room&&await this.unmount(),this.target&&(_.default.unmountComponentAtNode(this.target),this.sdk=this.room=this.manager=this.target=null)}async mount(t){if(await this.readyPromise,!this.manager)throw new Error("[WhiteboardApp] mounted, but not found window manager");this.manager.bindContainer(t),this.collector&&this.manager.bindCollectorContainer(this.collector)}async unmount(){if(this.manager&&(this.manager.destroy(),this.manager=null),this.room){try{await this.room.disconnect()}catch{}this.room=null}this.refreshReadyPromise()}insertDocs(t){if(!this.manager)throw new Error("[WhiteboardApp] cannot insert doc before mounted");switch(t.fileType){case"pdf":case"ppt":return this.manager.addApp({kind:"DocsViewer",options:{scenePath:t.scenePath,title:t.title,scenes:t.scenes}});case"pptx":return this.manager.addApp({kind:"Slide",options:{scenePath:t.scenePath,title:t.title,scenes:t.scenes},attributes:{taskId:t.taskId,url:t.url}})}}insertCodeEditor(){if(!this.manager)throw new Error("[WhiteboardApp] cannot insert app before mounted");return this.manager.addApp({kind:"Monaco",options:{title:"Code Editor"}})}insertGeoGebra(){if(!this.manager)throw new Error("[WhiteboardApp] cannot insert app before mounted");return this.manager.addApp({kind:"GeoGebra",options:{title:"GeoGebra"}})}insertCountdown(){if(!this.manager)throw new Error("[WhiteboardApp] cannot insert app before mounted");return this.manager.addApp({kind:"Countdown",options:{title:"Countdown"}})}insertMedia({title:t,src:o}){if(!this.manager)throw new Error("[WhiteboardApp] cannot insert app before mounted");return this.manager.addApp({kind:z.BuiltinApps.MediaPlayer,options:{title:t},attributes:{src:o}})}async changeLanguage(t){var o;try{await((o=this.i18n)==null?void 0:o.changeLanguage(t))}finally{await this.forceUpdate()}}}S(ae,"Context",i.createContext(null));function E(){return i.useContext(ae.Context)}var Ro=`.page-renderer-pages-container{position:relative;overflow:hidden}.page-renderer-page{position:absolute;top:0;left:0;will-change:transform;background-position:center;background-size:cover;background-repeat:no-repeat}.page-renderer-page-img{display:block;width:100%;height:auto;user-select:none}.netless-app-docs-viewer-static-scrollbar{position:absolute;top:0;right:0;z-index:2147483647;width:8px;min-height:30px;margin:0;padding:0;border:none;outline:none;border-radius:4px;background:rgba(68,78,96,.4);box-shadow:1px 1px 8px #ffffffb3;opacity:0;transition:background .4s,opacity .4s 3s,transform .2s;will-change:transform,height;user-select:none}.netless-app-docs-viewer-static-scrollbar.netless-app-docs-viewer-static-scrollbar-dragging{background:rgba(68,78,96,.6);opacity:1;transition:background .4s,opacity .4s 3s!important}.netless-app-docs-viewer-static-scrollbar:hover,.netless-app-docs-viewer-static-scrollbar:focus{background:rgba(68,78,96,.5)}.netless-app-docs-viewer-static-scrollbar:active{background:rgba(68,78,96,.6)}.netless-app-docs-viewer-content:hover .netless-app-docs-viewer-static-scrollbar{opacity:1;transition:background .4s,opacity .4s,transform .2s}.netless-app-docs-viewer-readonly .netless-app-docs-viewer-static-scrollbar{display:none}.netless-app-docs-viewer-static-pages:hover .netless-app-docs-viewer-static-scrollbar{opacity:1;transition:background .4s,opacity .4s,transform .2s}.netless-window-manager-playground{width:100%;height:100%;position:relative;z-index:1;overflow:hidden;user-select:none}.netless-window-manager-sizer{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden;display:flex}.netless-window-manager-sizer-horizontal{flex-direction:column}.netless-window-manager-sizer:before,.netless-window-manager-sizer:after{flex:1;content:"";display:block}.netless-window-manager-chess-sizer:before,.netless-window-manager-chess-sizer:after{background-image:linear-gradient(45deg,#b0b0b0 25%,transparent 25%),linear-gradient(-45deg,#b0b0b0 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#b0b0b0 75%),linear-gradient(-45deg,transparent 75%,#b0b0b0 75%);background-color:#fff;background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0px}.netless-window-manager-wrapper{position:relative;z-index:1;width:100%;height:100%;overflow:hidden}.netless-window-manager-main-view{width:100%;height:100%}.netless-window-manager-cursor-pencil-image,.netless-window-manager-cursor-eraser-image{width:26px;height:26px}.netless-window-manager-cursor-selector-image{width:24px;height:24px}.netless-window-manager-cursor-selector-avatar{border-radius:50%;border-style:solid;border-width:2px;border-color:#fff;margin-bottom:2px}.netless-window-manager-cursor-selector-avatar img{width:12px}.netless-window-manager-cursor-inner{border-radius:4px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:4px;padding-right:4px;font-size:12px}.netless-window-manager-cursor-inner-mellow{height:32px;border-radius:16px;display:flex;align-items:center;justify-content:center;flex-direction:row;padding-left:16px;padding-right:16px}.netless-window-manager-cursor-tag-name{font-size:12px;margin-left:4px;padding:2px 8px;border-radius:4px}.netless-window-manager-cursor-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:26px;height:26px;z-index:2147483647;left:0;top:0;will-change:transform;transition:transform .05s;transform-origin:0 0;user-select:none}.netless-window-manager-cursor-pencil-offset{margin-left:-20px}.netless-window-manager-cursor-selector-offset{margin-left:-22px;margin-top:56px}.netless-window-manager-cursor-text-offset{margin-left:-30px;margin-top:18px}.netless-window-manager-cursor-shape-offset{display:flex;flex-direction:column;align-items:center;justify-content:center;position:absolute;width:180px;height:64px;margin-left:-30px;margin-top:12px}.netless-window-manager-cursor-name{width:100%;height:48px;display:flex;align-items:center;justify-content:center;position:absolute;top:-40px}.cursor-image-wrapper{display:flex;justify-content:center}.telebox-collector{position:absolute;right:10px;bottom:15px}.tele-fancy-scrollbar{overscroll-behavior:contain;overflow:auto;overflow-y:scroll;overflow-y:overlay;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;scrollbar-width:auto}.tele-fancy-scrollbar::-webkit-scrollbar{height:8px;width:8px}.tele-fancy-scrollbar::-webkit-scrollbar-track{background-color:transparent}.tele-fancy-scrollbar::-webkit-scrollbar-thumb{background-color:#444e601a;background-color:transparent;border-radius:4px;transition:background-color .4s}.tele-fancy-scrollbar:hover::-webkit-scrollbar-thumb{background-color:#444e601a}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#444e6033}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:active{background-color:#444e6033}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:vertical{min-height:50px}.tele-fancy-scrollbar::-webkit-scrollbar-thumb:horizontal{min-width:50px}.telebox-box{position:absolute;top:0;left:0;z-index:100;will-change:transform;transition:width .4s cubic-bezier(.4,.9,.71,1.02),height .4s cubic-bezier(.55,.82,.63,.95),opacity .6s cubic-bezier(.7,0,.84,0),transform .4s ease}.telebox-box-main{position:relative;width:100%;height:100%;display:flex;flex-direction:column;overflow:hidden;background:#f9f9fc;box-shadow:0 4px 10px #2f419226;border-radius:6px;border:1px solid #e3e3ec}.telebox-titlebar-wrap{flex-shrink:0;position:relative;z-index:1}.telebox-content-wrap{flex:1;width:100%;overflow:hidden;display:flex;justify-content:center;align-items:center}.telebox-content{width:100%;height:100%;position:relative}.telebox-footer-wrap{flex-shrink:0;display:flex;flex-direction:column}.telebox-footer-wrap:before{content:"";display:block;flex:1}.telebox-resize-handle{position:absolute;z-index:2147483647}.telebox-n{width:100%;height:5px;left:0;top:-5px;cursor:n-resize}.telebox-s{width:100%;height:5px;left:0;bottom:-5px;cursor:s-resize}.telebox-w{width:5px;height:100%;left:-5px;top:0;cursor:w-resize}.telebox-e{width:5px;height:100%;right:-5px;top:0;cursor:e-resize}.telebox-nw{width:15px;height:15px;top:-5px;left:-5px;cursor:nw-resize}.telebox-ne{width:15px;height:15px;top:-5px;right:-5px;cursor:ne-resize}.telebox-se{width:15px;height:15px;bottom:-5px;right:-5px;cursor:se-resize}.telebox-sw{width:15px;height:15px;bottom:-5px;left:-5px;cursor:sw-resize}.telebox-track-mask{position:fixed;top:0;left:0;z-index:2147483647;width:100%;height:100%;background:rgba(0,0,0,.0001);cursor:move}.telebox-cursor-n{cursor:n-resize}.telebox-cursor-s{cursor:s-resize}.telebox-cursor-w{cursor:w-resize}.telebox-cursor-e{cursor:e-resize}.telebox-cursor-nw{cursor:nw-resize}.telebox-cursor-ne{cursor:ne-resize}.telebox-cursor-se{cursor:se-resize}.telebox-cursor-sw{cursor:sw-resize}.telebox-maximized .telebox-resize-handles,.telebox-no-resize .telebox-resize-handles{display:none}.telebox-maximized{box-shadow:none;transition:none}.telebox-minimized{will-change:transform;transition:width 50ms cubic-bezier(.4,.9,.71,1.02),height 50ms cubic-bezier(.55,.82,.63,.95),opacity .6s cubic-bezier(.7,0,.84,0),transform .6s ease;opacity:0;pointer-events:none;user-select:none}.telebox-transforming{will-change:transform;transition:opacity .6s cubic-bezier(.7,0,.84,0)}.telebox-readonly .telebox-resize-handle{cursor:initial!important;pointer-events:none!important}.telebox-color-scheme-dark .telebox-box-main{color:#e9e9e9;background:#212126;border-color:#43434d}.telebox-titlebar{box-sizing:border-box;height:26px;display:flex;align-items:center;padding:0 16px;background:#fff;user-select:none;border-bottom:1px solid #eeeef7}.telebox-title{overflow:hidden;margin:0 24px 0 0;padding:0;font-size:14px;font-weight:400;font-family:PingFangSC-Regular,PingFang SC;white-space:nowrap;word-break:keep-all;text-overflow:ellipsis;color:#191919}.telebox-titlebar-btns{white-space:nowrap;word-break:keep-all;margin-left:auto;font-size:0}.telebox-titlebar-btn{width:22px;height:22px;padding:0;outline:0;border:none;background:0 0;cursor:pointer}.telebox-titlebar-btn~.telebox-titlebar-btn{margin-left:10px}.telebox-titlebar-btn-icon{width:22px;height:22px}.telebox-readonly .telebox-titlebar-btn{cursor:not-allowed}.telebox-titlebar-icon-minimize{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjh2MjhIMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxtYXNrIGlkPSJiIiBmaWxsPSIjZmZmIj4KICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjYSIgLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPHBhdGggZmlsbD0iI0E3QTdDQSIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOSAxM2gxMHYxLjZIOXoiIG1hc2s9InVybCgjYikiIC8+CiAgICA8L2c+Cjwvc3ZnPgo=)}.telebox-titlebar-icon-maximize{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjh2MjhIMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxtYXNrIGlkPSJiIiBmaWxsPSIjZmZmIj4KICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjYSIgLz4KICAgICAgICA8L21hc2s+CiAgICAgICAgPGcgZmlsbD0iI0E3QTdDQSIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI2IpIj4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgIGQ9Ik0yMC40ODEgMTcuMWgxLjJ2NC41ODFIMTcuMXYtMS4yaDMuMzgxVjE3LjF6bS0xNC4xOTA1LS4wMDloMS4ydjMuMzgxaDMuMzgwOXYxLjJoLTQuNTgxdi00LjU4MXpNMTcuMSA2LjE5MDVoNC41ODF2NC41ODA5aC0xLjJ2LTMuMzgxSDE3LjF2LTEuMnptLTEwLjcwMDguMTA4N2g0Ljc5ODV2MS4ySDcuNTk5MnYzLjU5ODVoLTEuMlY2LjI5OTJ6IiAvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==)}.telebox-titlebar-icon-maximize.is-active{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjggMjgiPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjZ2MjZIMHoiIC8+CiAgICAgICAgPHBhdGggaWQ9ImMiIGQ9Ik0yNi44NjkgMEwyOCAxLjEzMVYyNi44N0wyNi44NjkgMjhIMS4xM0wwIDI2Ljg3VjEuMTMxTDEuMTMgMHoiIC8+CiAgICA8L2RlZnM+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiPgogICAgICAgICAgICA8bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNhIiAvPgogICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0tNC42NDI5LTQuNjQyOWgzNS4yODU4djM1LjI4NThILTQuNjQyOXoiIG1hc2s9InVybCgjYikiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnPgogICAgICAgICAgICA8bWFzayBpZD0iZCIgZmlsbD0iI2ZmZiI+CiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNjIiAvPgogICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0tMTcuNTE2OCAxNEwxNC0xNy41MTY4IDQ1LjUxNjggMTQgMTQgNDUuNTE2OHoiIG1hc2s9InVybCgjZCkiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoIHN0cm9rZT0iI0E3QTdDQSIgc3Ryb2tlLXdpZHRoPSIxLjIiCiAgICAgICAgICAgIGQ9Ik0xMC4wODg2IDIxLjQ4NjV2LTMuNjk2Nkg2LjM5Mk0yMS4zODU1IDEwLjE4OTVoLTMuNjk2NlY2LjQ5M00yMS40MDIgMTcuNzk4M2gtMy42OTY2djMuNjk2Nk0xMC4yNTAzIDYuMTQ5OHYzLjg5ODVINi4zNTE3IiAvPgogICAgPC9nPgo8L3N2Zz4K)}.telebox-titlebar-icon-close{background:center/cover no-repeat url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyOCAyOCI+CiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iI0E3QTdDQSIgc3Ryb2tlLXdpZHRoPSIxLjQiPgogICAgICAgIDxwYXRoIGQ9Ik04LjM1MyAyMC4zMzIxTDIwLjMzMiA4LjM1M00yMC4zMzIyIDIwLjMzMjFMOC4zNTMgOC4zNTMiIC8+CiAgICA8L2c+Cjwvc3ZnPgo=)}.telebox-color-scheme-dark .telebox-titlebar{color:#e9e9e9;background:#43434d;border-bottom:none}.telebox-collector{visibility:hidden;display:block;position:absolute;z-index:200;width:40px;height:40px;margin:0;padding:0;border:none;outline:0;font-size:0;border-radius:50%;background:#fff;box-shadow:0 2px 6px #2f419226;cursor:pointer;user-select:none;pointer-events:none;background-repeat:no-repeat;background-size:18px 16px;background-position:center}.telebox-collector-visible{visibility:visible;pointer-events:initial}.telebox-collector-readonly{cursor:not-allowed}.telebox-color-scheme-dark.telebox-collector{background-color:#43434d}.telebox-max-titlebar{display:none;position:absolute;top:0;left:0;z-index:50000;user-select:none}.telebox-max-titlebar-maximized{display:flex}.telebox-titles{flex:1;height:100%;margin:0 16px 0 -16px;overflow-y:hidden;overflow-x:scroll;overflow-x:overlay;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;scrollbar-width:auto}.telebox-titles::-webkit-scrollbar{height:8px;width:8px}.telebox-titles::-webkit-scrollbar-track{background-color:transparent}.telebox-titles::-webkit-scrollbar-thumb{background-color:#eeeef7cc;background-color:transparent;border-radius:4px;transition:background-color .4s}.telebox-titles:hover::-webkit-scrollbar-thumb{background-color:#eeeef7cc}.telebox-titles::-webkit-scrollbar-thumb:hover{background-color:#eeeef7}.telebox-titles::-webkit-scrollbar-thumb:active{background-color:#eeeef7}.telebox-titles::-webkit-scrollbar-thumb:vertical{min-height:50px}.telebox-titles::-webkit-scrollbar-thumb:horizontal{min-width:50px}.telebox-titles-content{height:100%;display:flex;flex-wrap:nowrap;align-items:center;padding:0}.telebox-titles-tab{overflow:hidden;max-width:182px;min-width:50px;padding:0 26px 0 16px;outline:0;font-size:13px;font-family:PingFangSC-Regular,PingFang SC;font-weight:400;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all;border:none;border-right:1px solid #e5e5f0;color:#7b88a0;background:0 0;cursor:pointer}.telebox-titles-tab~.telebox-titles-tab{margin-left:2px}.telebox-titles-tab-focus{color:#357bf6}.telebox-readonly .telebox-titles-tab{cursor:not-allowed}.telebox-color-scheme-dark{color-scheme:dark}.telebox-color-scheme-dark.telebox-titlebar{color:#e9e9e9;background:#43434d;border-bottom:none}.telebox-color-scheme-dark .telebox-titles-tab{border-right-color:#7b88a0}.telebox-color-scheme-dark .telebox-title{color:#e9e9e9}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}.tippy-box[data-theme~=light]{color:#26323d;box-shadow:0 0 20px 4px #9aa1b126,0 4px 80px -8px #24282f40,0 4px 4px -2px #5b5e6926;background-color:#fff}.tippy-box[data-theme~=light][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=light][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff}.tippy-box[data-theme~=light][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=light][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff}.tippy-box[data-theme~=light]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=light]>.tippy-svg-arrow{fill:#fff}.rc-slider{position:relative;height:14px;padding:5px 0;width:100%;border-radius:6px;touch-action:none;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{position:absolute;width:100%;background-color:#e9e9e9;height:4px;border-radius:6px}.rc-slider-track{position:absolute;left:0;height:4px;border-radius:6px;background-color:#abe2fb}.rc-slider-handle{position:absolute;width:14px;height:14px;cursor:pointer;cursor:-webkit-grab;margin-top:-5px;cursor:grab;border-radius:50%;border:solid 2px #96dbfa;background-color:#fff;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-handle,.rc-slider-disabled .rc-slider-dot{border-color:#ccc;box-shadow:none;background-color:#fff;cursor:not-allowed}.rc-slider-disabled .rc-slider-mark-text,.rc-slider-disabled .rc-slider-dot{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{height:100%;width:4px}.rc-slider-vertical .rc-slider-track{left:5px;bottom:0;width:4px}.rc-slider-vertical .rc-slider-handle{margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{height:100%;width:4px}.rc-slider-vertical .rc-slider-dot{left:2px;margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:first-child{margin-bottom:-4px}.rc-slider-vertical .rc-slider-dot:last-child{margin-bottom:-4px}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-leave{animation-duration:.3s;animation-fill-mode:both;display:block!important;animation-play-state:paused}.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active,.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;transform-origin:50% 100%;transform:scale(0)}to{transform-origin:50% 100%;transform:scale(1)}}@keyframes rcSliderTooltipZoomDownOut{0%{transform-origin:50% 100%;transform:scale(1)}to{opacity:0;transform-origin:50% 100%;transform:scale(0)}}.rc-slider-tooltip{position:absolute;left:-9999px;top:-9999px;visibility:visible;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{padding:6px 2px;min-width:24px;height:24px;font-size:12px;line-height:1;color:#fff;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c}.fastboard-root{position:relative;width:100%;height:100%;overflow:hidden}.fastboard-loading{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;opacity:.6}.fastboard-view{position:absolute;top:0;left:0;width:100%;height:100%}.fastboard-left{position:absolute;top:0;left:0;height:calc(100% - 48px);padding:16px;z-index:201;display:flex;align-items:center}.fastboard-bottom-left,.fastboard-bottom-right{display:flex;gap:10px;position:absolute;bottom:8px;left:8px;padding:8px;z-index:200}.fastboard-bottom-right{left:initial;right:8px}.fastboard-redo-undo{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-redo-undo.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-redo-undo.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-redo-undo-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-redo-undo-btn svg,.fastboard-redo-undo-btn img{width:1em;height:1em}.fastboard-redo-undo-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-redo-undo-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-redo-undo-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-page-control{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-page-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-page-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-page-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-page-control-btn svg,.fastboard-page-control-btn img{width:1em;height:1em}.fastboard-page-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-page-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-page-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-page-control-cut-line{height:24px;width:.5px}.fastboard-page-control-cut-line.light{background-color:#e7e7e7}.fastboard-page-control-cut-line.dark{background-color:#ffffff26}.fastboard-page-control-slash{opacity:.6}.fastboard-page-control-page,.fastboard-page-control-slash,.fastboard-page-control-page-count{font-size:12px;font-variant-numeric:tabular-nums}.fastboard-zoom-control{position:relative;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-zoom-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-zoom-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-zoom-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1}.fastboard-zoom-control-btn svg,.fastboard-zoom-control-btn img{width:1em;height:1em}.fastboard-zoom-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-zoom-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-zoom-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-zoom-control-cut-line{height:24px;width:.5px}.fastboard-zoom-control-cut-line.light{background-color:#e7e7e7}.fastboard-zoom-control-cut-line.dark{background-color:#ffffff26}.fastboard-zoom-control-percent{opacity:.6}.fastboard-zoom-control-scale,.fastboard-zoom-control-percent{font-size:12px;font-variant-numeric:tabular-nums}.fastboard-toolbar{display:flex;align-items:center;padding:4px;border-radius:4px;flex-direction:column;gap:4px;position:absolute;z-index:100;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-toolbar .rc-slider{padding:6px 0}.fastboard-toolbar .rc-slider-rail,.fastboard-toolbar .rc-slider-track{height:2px}.fastboard-toolbar .tippy-content{padding:8px}.fastboard-toolbar .tippy-box{border:1px solid rgba(0,0,0,.15);background-color:#333333f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-toolbar .tippy-box[data-theme~=light]{background-color:#fffffff2;box-shadow:0 5px 10px #00000040}.fastboard-toolbar.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-toolbar.expanded{border:1px solid rgba(0,0,0,.15)}.fastboard-toolbar.dark{color:#ddd;background-color:#333333d9}.fastboard-toolbar.expanded:hover{box-shadow:0 0 5px #00000040;transform:translate(0)}.fastboard-toolbar.collapsed{padding:0;background-color:transparent}.fastboard-toolbar-tooltip{display:inline-flex;align-items:center;gap:4px}.fastboard-toolbar-hotkey{margin-right:-4px;width:24px;height:24px;border-radius:4px;background-color:#ffffff1a;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:4px;width:32px;height:32px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1;position:relative}.fastboard-toolbar-btn-interactive{display:inline-block;width:32px;height:32px}.fastboard-toolbar-btn svg,.fastboard-toolbar-btn img{width:1em;height:1em}.fastboard-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-toolbar-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-toolbar-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-toolbar-triangle{width:0px;height:0px;border-bottom:4px solid;border-left:4px solid transparent;position:absolute;bottom:0;right:0}.fastboard-toolbar-cut-line{display:inline-block;height:.5px;width:100%}.fastboard-toolbar-cut-line.light{background-color:#e7e7e7}.fastboard-toolbar-cut-line.dark{background-color:#ffffff26}.fastboard-toolbar-section{display:inline-flex;flex-flow:column nowrap;gap:4px;scroll-behavior:smooth}.fastboard-toolbar-section.collapsed{transform:translate(-100%);transition:1s transform}.fastboard-toolbar-panel{width:120px;padding:0;display:flex;flex-flow:column nowrap;align-items:center;gap:8px}.fastboard-toolbar-panel.apps{width:224px}.fastboard-toolbar-color-box,.fastboard-toolbar-shapes{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;align-items:center;justify-items:center}.fastboard-toolbar-color-box .fastboard-toolbar-btn,.fastboard-toolbar-shapes .fastboard-toolbar-btn{padding:0;width:24px;height:24px}.fastboard-toolbar-apps{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;align-items:center;justify-items:center}.fastboard-toolbar-apps .fastboard-toolbar-btn{width:40px;height:40px;font-size:40px}.fastboard-toolbar-app-icon{padding-top:4px;display:inline-flex;flex-flow:column nowrap;align-items:center;gap:4px}.fastboard-toolbar-app-icon .fastboard-toolbar-btn{padding:0}.fastboard-toolbar-app-icon-text{font-size:12px;color:#5d5d5d;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fastboard-toolbar-color-item{width:24px;height:24px;border-radius:4px;cursor:pointer}.fastboard-toolbar-color-item *.light:hover{background-color:#f5f5f5}.fastboard-toolbar-color-item *.dark:hover{background-color:#333}.fastboard-toolbar-color-border{width:24px;height:24px;border:1px solid transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-color-border.active.light,.fastboard-toolbar-color-border.active.dark{border:1px solid rgba(51,129,255,.8)}.fastboard-toolbar-color-btn{margin:0;border:1px solid rgba(0,0,0,.24);padding:0;appearance:none;width:16px;height:16px;border-radius:4px;cursor:pointer}.fastboard-toolbar-color-btn:focus-visible{outline-offset:2px}.fastboard-toolbar-mask-btn{width:17px;height:62px;cursor:pointer}.fastboard-toolbar-mask-btn.dark{filter:invert(.8)}.fastboard-toolbar-expand-btn{display:flex;align-items:center;position:absolute;left:0}.fastboard-player-control{width:100%;display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:4px;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-player-control.auto-hide{opacity:0;transition:opacity .2s}.fastboard-player-control.auto-hide:hover{opacity:1}.fastboard-player-control .rc-slider-disabled{background:transparent;opacity:.5}.fastboard-player-control .rc-slider-rail,.fastboard-player-control .rc-slider-track{height:2px}.fastboard-player-control .tippy-content{padding:8px}.fastboard-player-control .tippy-box{border:1px solid rgba(0,0,0,.15);background-color:#333333f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fastboard-player-control .tippy-box[data-theme~=light]{background-color:#fffffff2;box-shadow:0 5px 10px #00000040}.fastboard-player-control.light{color:#333;background-color:#ffffffd9;border:1px solid rgba(0,0,0,.15)}.fastboard-player-control.dark{color:#ddd;background-color:#333333d9;border:1px solid rgba(0,0,0,.45)}.fastboard-player-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;min-width:24px;height:24px;background-color:transparent;border-radius:4px;font-size:24px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.fastboard-player-control-btn svg,.fastboard-player-control-btn img{width:1em;height:1em}.fastboard-player-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-player-control-btn.light:not(:disabled):hover{background-color:#3381ff1a}.fastboard-player-control-btn.dark:not(:disabled):hover{background-color:#3381ff40}.fastboard-player-control-btn.loading{animation:fastboard-player-control-rotate .5s linear infinite}@keyframes fastboard-player-control-rotate{to{transform:rotate(360deg)}}.fastboard-player-control-panel{padding:0;display:flex;flex-flow:column nowrap;align-items:stretch;gap:4px}.fastboard-player-control-panel .fastboard-player-control-btn{width:initial;height:initial;user-select:none;font-size:12px;padding:4px;justify-content:flex-end}.fastboard-player-control-panel .fastboard-player-control-btn.active{color:#3381ff}.fastboard-player-control-slider{width:100%;padding:0 7px}.fastboard-player-control-slider.loading{cursor:not-allowed}.fastboard-player-control-slash{opacity:.6}.fastboard-player-control-current,.fastboard-player-control-slash,.fastboard-player-control-total,.fastboard-player-control-speed-text{font-size:12px;font-variant-numeric:tabular-nums}.fastboard{width:100%;height:100%;position:relative}.tippy-box.fastboard-tip{color:#eee;background-color:#000000f2;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.tippy-box.fastboard-tip[data-placement^=right]>.tippy-arrow:before{top:4px;border-width:4px;border-right-color:#000}.tippy-box.fastboard-tip[data-placement^=top]>.tippy-arrow:before{left:4px;border-width:4px;border-top-color:#000}
13
- `;nt(Ro);class Ve{constructor(t){S(this,"_instance");this.config=t,this._instance=new ae(t)}get room(){return this._instance.room}get manager(){return this._instance.manager}get sdk(){return this._instance.sdk}get i18n(){return this._instance.i18n}get target(){return this._instance.target}get collector(){return this._instance.collector}bindElement(t){this._instance.bindElement(t||null)}bindCollector(t){this._instance.bindCollector(t||null)}get layout(){return this._instance.config.layout}updateLayout(t){this._instance.updateLayout(t)}insertMedia(t){this._instance.insertMedia(t)}insertDocs(t,o){if(typeof t=="object"&&"fileType"in t)return this._instance.insertDocs(t);if(o&&o.status!=="Finished")throw new Error("[WhiteboardApp] cannot insert a converting doc");if(o&&o.progress){const a=o.progress.convertedFileList.map((d,b)=>({name:String(b+1),ppt:{src:d.conversionFileUrl,width:d.width,height:d.height,previewURL:d.preview}})),n=ct(),s=`/${o.uuid}/${n}`,{scenesWithoutPPT:l,taskId:c,url:p}=dt(a);return c&&p?this._instance.insertDocs({fileType:"pptx",scenePath:s,taskId:c,title:t,url:p,scenes:l}):this._instance.insertDocs({fileType:"pdf",scenePath:s,scenes:a,title:t})}}insertCodeEditor(){return this._instance.insertCodeEditor()}insertGeoGebra(){return this._instance.insertGeoGebra()}insertCountdown(){return this._instance.insertCountdown()}changeLanguage(t){return this._instance.changeLanguage(t)}dispose(){return this._instance.dispose()}}const Zo="0.0.11";function Fe(e){const t=i.useRef(e);return i.useEffect(()=>{t.current=e},[e]),t.current}const Oo=[];function Wo(){const[,e]=i.useState({});return i.useCallback(()=>e({}),Oo)}function He(e){const t=i.useCallback(()=>{if(e)switch(e.phase){case f.PlayerPhase.WaitingFirstFrame:case f.PlayerPhase.Pause:case f.PlayerPhase.Ended:{e.play();break}case f.PlayerPhase.Playing:{e.pause();break}}},[e]),o=i.useCallback(b=>{e&&e.seekToProgressTime(b)},[e]),a=Fe(e),n=Wo(),s=i.useCallback(b=>{e&&(e.playbackSpeed=b,n())},[n,e]);i.useEffect(()=>{!a&&e&&n()},[n,a,e]),i.useEffect(()=>{if(e)return e.callbacks.on("onPhaseChanged",n),e.callbacks.on("onProgressTimeChanged",n),()=>{e.callbacks.off("onPhaseChanged",n),e.callbacks.off("onProgressTimeChanged",n)}},[n,e]);const l=e?e.phase:f.PlayerPhase.WaitingFirstFrame,c=e?e.progressTime:0,p=e?e.timeDuration:0,d=e?e.playbackSpeed:1;return{phase:l,currentTime:c,totalTime:p,speed:d,setSpeed:s,togglePlay:t,seekToProgressTime:o}}const Go=i.forwardRef((e,t)=>{const{theme:o,content:a,disabled:n,active:s,onClick:l,interactive:c,placement:p="top",children:d}=e;return r(P.default,{className:"fastboard-tip",content:a,interactive:c,theme:o,disabled:n,placement:p,offset:L,duration:300,children:r("button",{ref:t,className:u.default("fastboard-player-control-btn",o,{active:s}),onClick:l,disabled:n,children:d})})}),Uo=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{d:"M12 4V2A10 10 0 0 0 2 12h2a8 8 0 0 1 8-8z",fill:t})})},Jo=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{d:"M14 19h4V5h-4M6 19h4V5H6v14z",fill:t})})},Vo=e=>{const t=x(e);return r("svg",{viewBox:"0 0 24 24",children:r("path",{d:"M8 5.14v14l11-7l-11-7z",fill:t})})},fe={Play:i.memo(Vo),Pause:i.memo(Jo),Loading:i.memo(Uo)},T="fastboard-player-control";function Fo(s){var l=s,{autoHide:e=!1,player:t,theme:o="light",i18n:a}=l,n=X(l,["autoHide","player","theme","i18n"]);const[c,p]=i.useState(0),d=He(t);i.useEffect(()=>{p(d.currentTime)},[d.currentTime]),i.useEffect(()=>{d.currentTime!==c&&d.seekToProgressTime(c)},[c]);const b=d.phase===f.PlayerPhase.WaitingFirstFrame||d.phase===f.PlayerPhase.Buffering,g=d.phase===f.PlayerPhase.Playing,{activeColor:w}=N[o];return h("div",{className:u.default(T,o,{"auto-hide":e}),children:[r("button",{className:u.default(`${T}-btn`,b?"loading":g?"pause":"play",o),disabled:b,onClick:d.togglePlay,children:r(m,{fallback:b?r(fe.Loading,{theme:o}):g?r(fe.Pause,{theme:o}):r(fe.Play,{theme:o}),src:b?n.loadingIcon:g?n.pauseIcon:n.playIcon,alt:b?"[loading]":g?"[pause]":"[play]"})}),r("span",{className:u.default(`${T}-slider`,{loading:b},o),children:r(Ae.default,{disabled:b,trackStyle:{background:w},handleStyle:{border:`1px solid ${w}`},value:c,onChange:p,min:0,max:d.totalTime,step:100})}),r("span",{className:u.default(`${T}-current`,o),children:Qe(d.currentTime)}),r("span",{className:u.default(`${T}-slash`,o),children:"/"}),r("span",{className:u.default(`${T}-total`,o),children:Qe(d.totalTime)}),r("span",{className:`${T}-btn-interactive`,children:r(P.default,{className:"fastboard-tip",content:Qo(d),theme:o,placement:"top-end",trigger:"click",offset:L,arrow:!1,interactive:!0,children:r(Go,{content:a==null?void 0:a.t("speed"),theme:o,disabled:b,children:h("span",{className:u.default(`${T}-speed-text`,o),children:[d.speed,"x"]})})})})]})}function Qe(e){let t=e/1e3;const o=Math.floor(t/60);return t=Math.floor(t)%60,`${String(o).padStart(2,"0")}:${String(t).padStart(2,"0")}`}const Ho=[2,1.5,1.25,1,.75,.5];function Qo({speed:e,setSpeed:t}){return r("div",{className:u.default(`${T}-panel`,"speed"),children:Ho.map(o=>h("button",{className:u.default(`${T}-btn`,"speed",{active:o===e}),onClick:()=>t(o),children:[o,"x"]},o))})}function Yo(...e){const t=i.useRef(null);return i.useEffect(()=>{for(const o of e)!o||(typeof o=="function"?o(t.current):o.current=t.current)},[e]),t}const Ko=i.forwardRef((a,o)=>{var n=a,{app:e}=n,t=X(n,["app"]);const s=i.useRef(null),l=Yo(o,s),c=Fe(e);return i.useEffect(()=>{c&&c!==e&&c.bindElement(null),e&&e.bindElement(l.current)},[e,c,l]),r("div",j(I({className:"fastboard"},t),{ref:l}))}),Xo=z.WindowManager.register.bind(z.WindowManager);async function qo(e){const t=new Ve(e);return await t._instance.readyPromise,t}exports.Fastboard=Ko;exports.PageControl=Je;exports.PlayerControl=Fo;exports.RedoUndo=Oe;exports.Toolbar=Re;exports.WhiteboardApp=Ve;exports.ZoomControl=Ge;exports.createWhiteboardApp=qo;exports.register=Xo;exports.usePageControl=Ue;exports.usePlayerControl=He;exports.useRedoUndo=Ze;exports.useToolbar=Pe;exports.useZoomControl=We;exports.version=Zo;
14
- //# sourceMappingURL=index.cjs.js.map