@netless/fastboard-ui 1.0.0-canary.7 → 1.0.0-canary.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +0 -1
- package/dist/index.d.ts +22 -19
- package/dist/index.js +5495 -1775
- package/dist/index.mjs +5467 -1763
- package/dist/index.svelte.mjs +8457 -3852
- package/package.json +3 -3
- package/src/actions/scroll.ts +1 -1
- package/src/components/Icons/Curve.svelte +10 -0
- package/src/components/Icons/CurveDashed.svelte +16 -0
- package/src/components/Icons/index.ts +4 -0
- package/src/components/Toolbar/Toolbar.svelte +2 -0
- package/src/components/Toolbar/Toolbar.svelte.d.ts +3 -0
- package/src/components/Toolbar/components/Contents.svelte +33 -0
- package/src/components/Toolbar/components/Shapes.svelte +1 -0
- package/src/components/Toolbar/components/Slider.svelte +0 -1
- package/src/components/Toolbar/components/StrokeColor.svelte +1 -0
- package/src/components/Toolbar/components/TextColor.svelte +1 -0
- package/src/components/Toolbar/components/constants.ts +17 -3
- package/src/components/ZoomControl/ZoomControl.svelte +1 -1
- package/dist/index.css.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/index.svelte.mjs.map +0 -1
- /package/src/components/Fastboard/{Fastboard.svelte.ts → Fastboard.svelte.d.ts} +0 -0
- /package/src/components/Fastboard/{ReplayFastboard.svelte.ts → ReplayFastboard.svelte.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netless/fastboard-ui",
|
|
3
|
-
"version": "1.0.0-canary.
|
|
3
|
+
"version": "1.0.0-canary.9",
|
|
4
4
|
"description": "The front-end of @netless/fastboard-core.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"svelte": "dist/index.svelte.mjs",
|
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
],
|
|
14
14
|
"repository": "netless-io/fastboard",
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@netless/fastboard-core": "1.0.0-canary.
|
|
16
|
+
"@netless/fastboard-core": "1.0.0-canary.9"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tippy.js": "^6.3.7"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@netless/esbuild-plugin-inline-sass": "0.1.0",
|
|
23
|
-
"@netless/fastboard-core": "1.0.0-canary.
|
|
23
|
+
"@netless/fastboard-core": "1.0.0-canary.9"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"cleanup": "rimraf dist",
|
package/src/actions/scroll.ts
CHANGED
|
@@ -10,7 +10,7 @@ export const scrollTop: SvelteAction<Writable<number>> = function (node, value)
|
|
|
10
10
|
|
|
11
11
|
function on_scroll() {
|
|
12
12
|
clearTimeout(timer);
|
|
13
|
-
timer = setTimeout(() => value.set(node.scrollTop), 200);
|
|
13
|
+
timer = window.setTimeout(() => value.set(node.scrollTop), 200);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
node.addEventListener("scroll", on_scroll);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Theme } from "../../typings";
|
|
3
|
+
|
|
4
|
+
export let theme: Theme = "light";
|
|
5
|
+
export let active = false;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<svg fill="none" viewBox="0 0 24 24" class="fastboard-icon {theme}" class:is-active={active}>
|
|
9
|
+
<path stroke="#5D6066" stroke-width="1.25" d="M4 4c16 0 0 16 16 16" class="fastboard-icon-stroke-color" />
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Theme } from "../../typings";
|
|
3
|
+
|
|
4
|
+
export let theme: Theme = "light";
|
|
5
|
+
export let active = false;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<svg fill="none" viewBox="0 0 24 24" class="fastboard-icon {theme}" class:is-active={active}>
|
|
9
|
+
<path
|
|
10
|
+
stroke="#5D6066"
|
|
11
|
+
stroke-dasharray="1.25 1.25"
|
|
12
|
+
stroke-width="1.25"
|
|
13
|
+
d="M4 4c16 0 0 16 16 16"
|
|
14
|
+
class="fastboard-icon-stroke-color"
|
|
15
|
+
/>
|
|
16
|
+
</svg>
|
|
@@ -46,6 +46,8 @@ import WhiteboardAdd from "./WhiteboardAdd.svelte";
|
|
|
46
46
|
import Play from "./Play.svelte";
|
|
47
47
|
import Pause from "./Pause.svelte";
|
|
48
48
|
import Loading from "./Loading.svelte";
|
|
49
|
+
import Curve from "./Curve.svelte";
|
|
50
|
+
import CurveDashed from "./CurveDashed.svelte";
|
|
49
51
|
|
|
50
52
|
const Icons = {
|
|
51
53
|
Apps,
|
|
@@ -93,6 +95,8 @@ const Icons = {
|
|
|
93
95
|
Play,
|
|
94
96
|
Pause,
|
|
95
97
|
Loading,
|
|
98
|
+
Curve,
|
|
99
|
+
CurveDashed,
|
|
96
100
|
};
|
|
97
101
|
|
|
98
102
|
export default Icons;
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
$: computed_height = clamp($container_height, extra_height, $scroll_height + extra_height);
|
|
26
26
|
$: scrollable = $scroll_height + extra_height > $container_height;
|
|
27
27
|
|
|
28
|
+
$: hide_dotted = config.pencil?.dotted === false;
|
|
28
29
|
$: hide_apps = config.apps?.enable === false;
|
|
29
30
|
$: eraser_type = config.eraser?.behavior || "both";
|
|
30
31
|
</script>
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
{scroll_height}
|
|
40
41
|
{computed_height}
|
|
41
42
|
{scrollable}
|
|
43
|
+
{hide_dotted}
|
|
42
44
|
{hide_apps}
|
|
43
45
|
{eraser_type}
|
|
44
46
|
/>
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
export let scroll_height: Writable<number>;
|
|
29
29
|
export let computed_height = 0;
|
|
30
30
|
export let scrollable = false;
|
|
31
|
+
export let hide_dotted = false;
|
|
31
32
|
export let hide_apps = false;
|
|
32
33
|
export let eraser_type: "delete" | "pencil" | "both" = "both";
|
|
33
34
|
|
|
@@ -58,6 +59,7 @@
|
|
|
58
59
|
};
|
|
59
60
|
$: memberState = app?.memberState;
|
|
60
61
|
$: appliance = $memberState?.currentApplianceName;
|
|
62
|
+
$: dotted = $memberState?.dottedLine;
|
|
61
63
|
$: shape = $memberState?.shapeType;
|
|
62
64
|
$: status = app?.appsStatus;
|
|
63
65
|
|
|
@@ -94,6 +96,12 @@
|
|
|
94
96
|
function text() {
|
|
95
97
|
app?.setAppliance("text");
|
|
96
98
|
}
|
|
99
|
+
function set_dotted() {
|
|
100
|
+
app?.toggleDottedLine(true);
|
|
101
|
+
}
|
|
102
|
+
function unset_dotted() {
|
|
103
|
+
app?.toggleDottedLine(false);
|
|
104
|
+
}
|
|
97
105
|
function select_last_shape() {
|
|
98
106
|
if (applianceShapes.includes(last_shape as Appliance)) {
|
|
99
107
|
app?.setAppliance(last_shape as Appliance);
|
|
@@ -251,6 +259,31 @@
|
|
|
251
259
|
|
|
252
260
|
<div class="{name}-panel-wrapper" style="display:none">
|
|
253
261
|
<div class="{name}-panel pencil" bind:this={pencil_panel}>
|
|
262
|
+
{#if !hide_dotted}
|
|
263
|
+
<div class="{name}-panel-btns">
|
|
264
|
+
<Button
|
|
265
|
+
class="pencil"
|
|
266
|
+
active={appliance === "pencil" && !dotted}
|
|
267
|
+
{...btn_props}
|
|
268
|
+
on:click={unset_dotted}
|
|
269
|
+
placement="top"
|
|
270
|
+
content={t.solid}
|
|
271
|
+
>
|
|
272
|
+
<Icons.Curve {theme} active={appliance === "pencil" && !dotted} />
|
|
273
|
+
</Button>
|
|
274
|
+
<Button
|
|
275
|
+
class="pencil"
|
|
276
|
+
active={appliance === "pencil" && dotted}
|
|
277
|
+
{...btn_props}
|
|
278
|
+
on:click={set_dotted}
|
|
279
|
+
placement="top"
|
|
280
|
+
content={t.dashed}
|
|
281
|
+
>
|
|
282
|
+
<Icons.CurveDashed {theme} active={appliance === "pencil" && dotted} />
|
|
283
|
+
</Button>
|
|
284
|
+
</div>
|
|
285
|
+
<div class="{name}-panel-divider" />
|
|
286
|
+
{/if}
|
|
254
287
|
<StrokeWidth {app} {theme} {disabled} />
|
|
255
288
|
<div class="{name}-panel-divider" />
|
|
256
289
|
<StrokeColor {app} {theme} {disabled} />
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
}
|
|
66
66
|
</script>
|
|
67
67
|
|
|
68
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
68
69
|
<div class="fastboard-toolbar-shapes {theme}" on:click={set_appliance_or_shape}>
|
|
69
70
|
{#each shapes as key (key)}
|
|
70
71
|
{@const is_selected = appliance === "shape" ? shape === key : appliance === key}
|
|
@@ -24,7 +24,7 @@ export const shapes = [
|
|
|
24
24
|
"speechBalloon",
|
|
25
25
|
] as const;
|
|
26
26
|
|
|
27
|
-
export type Shape = typeof shapes[number];
|
|
27
|
+
export type Shape = (typeof shapes)[number];
|
|
28
28
|
|
|
29
29
|
export const applianceShapes = shapes.slice(0, 4) as Appliance[];
|
|
30
30
|
|
|
@@ -52,7 +52,7 @@ export const shapesIconActive: Record<Shape, any> = {
|
|
|
52
52
|
|
|
53
53
|
export const erasers = ["eraser", "pencilEraser"] as const;
|
|
54
54
|
|
|
55
|
-
export type Eraser = typeof erasers[number];
|
|
55
|
+
export type Eraser = (typeof erasers)[number];
|
|
56
56
|
|
|
57
57
|
export const eraserIcon: Record<Eraser, any> = {
|
|
58
58
|
eraser: Icons.Eraser,
|
|
@@ -65,7 +65,17 @@ export const eraserIconActive: Record<Eraser, any> = {
|
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
export const i18n: I18nData<
|
|
68
|
-
|
|
68
|
+
| "clicker"
|
|
69
|
+
| "selector"
|
|
70
|
+
| "pencil"
|
|
71
|
+
| "pencilEraser"
|
|
72
|
+
| "text"
|
|
73
|
+
| "shapes"
|
|
74
|
+
| "eraser"
|
|
75
|
+
| "clear"
|
|
76
|
+
| "apps"
|
|
77
|
+
| "solid"
|
|
78
|
+
| "dashed"
|
|
69
79
|
> = {
|
|
70
80
|
en: {
|
|
71
81
|
clicker: "clicker",
|
|
@@ -77,6 +87,8 @@ export const i18n: I18nData<
|
|
|
77
87
|
shapes: "shapes",
|
|
78
88
|
clear: "clear",
|
|
79
89
|
apps: "apps",
|
|
90
|
+
solid: "solid",
|
|
91
|
+
dashed: "dashed",
|
|
80
92
|
},
|
|
81
93
|
"zh-CN": {
|
|
82
94
|
clicker: "点击",
|
|
@@ -88,6 +100,8 @@ export const i18n: I18nData<
|
|
|
88
100
|
shapes: "形状",
|
|
89
101
|
clear: "清屏",
|
|
90
102
|
apps: "Apps",
|
|
103
|
+
solid: "实线",
|
|
104
|
+
dashed: "虚线",
|
|
91
105
|
},
|
|
92
106
|
};
|
|
93
107
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
let type: IconType;
|
|
56
56
|
$: type = disabled ? "disable" : "normal";
|
|
57
57
|
|
|
58
|
-
$: camera = app?.
|
|
58
|
+
$: camera = app?.camera;
|
|
59
59
|
$: scale = $camera?.scale ?? 1;
|
|
60
60
|
$: plus_disabled = disabled || next_scale(scale, 1) <= scale;
|
|
61
61
|
$: minus_disabled = disabled || next_scale(scale, -1) >= scale;
|
package/dist/index.css.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["sass:./style.scss"],"sourcesContent":[".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}.fastboard-icon.light .fastboard-icon-stroke-color{stroke:var(--fastboard-color, #5d6066)}.fastboard-icon.light .fastboard-icon-fill-color{fill:var(--fastboard-color, #5d6066)}.fastboard-icon.light.is-active .fastboard-icon-stroke-color{stroke:var(--fastboard-active-color, #3381ff)}.fastboard-icon.light.is-active .fastboard-icon-fill-color{fill:var(--fastboard-active-color, #3381ff)}.fastboard-icon.dark .fastboard-icon-stroke-color{stroke:var(--fastboard-color, #7b7e84)}.fastboard-icon.dark .fastboard-icon-fill-color{fill:var(--fastboard-color, #7b7e84)}.fastboard-icon.dark.is-active .fastboard-icon-stroke-color{stroke:var(--fastboard-active-color, #2867cc)}.fastboard-icon.dark.is-active .fastboard-icon-fill-color{fill:var(--fastboard-active-color, #2867cc)}.fastboard-redo-undo{box-sizing:border-box;display:inline-flex;align-items:center;gap:4px;padding:4px;border:1px solid;border-radius:4px;font-size:14px;font-family:system-ui;pointer-events:auto;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.fastboard-redo-undo *{box-sizing:inherit}.fastboard-redo-undo.light{color:var(--fastboard-color, #5d6066);background-color:var(--fastboard-bg-color, rgba(255, 255, 255, .9));border-color:var(--fastboard-border-color, #e5e8f0)}.fastboard-redo-undo.dark{color:var(--fastboard-color, #7b7e84);background-color:var(--fastboard-bg-color, rgba(20, 24, 30, .9));border-color:var(--fastboard-border-color, #383b42)}.fastboard-redo-undo-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:#0000;border-radius:4px;font-size:0;line-height:1;flex-shrink:0}.fastboard-redo-undo-btn svg,.fastboard-redo-undo-btn img{width:100%;height:100%;pointer-events:none}.fastboard-redo-undo-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-redo-undo-btn.light:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #ebf2ff)}.fastboard-redo-undo-btn.light:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #ebf2ff)}.fastboard-redo-undo-btn.dark:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #383b42)}.fastboard-redo-undo-btn.dark:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #383b42)}.fastboard-zoom-control{box-sizing:border-box;display:inline-flex;align-items:center;gap:4px;padding:4px;border:1px solid;border-radius:4px;font-size:14px;font-family:system-ui;pointer-events:auto;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.fastboard-zoom-control *{box-sizing:inherit}.fastboard-zoom-control.light{color:var(--fastboard-color, #5d6066);background-color:var(--fastboard-bg-color, rgba(255, 255, 255, .9));border-color:var(--fastboard-border-color, #e5e8f0)}.fastboard-zoom-control.dark{color:var(--fastboard-color, #7b7e84);background-color:var(--fastboard-bg-color, rgba(20, 24, 30, .9));border-color:var(--fastboard-border-color, #383b42)}.fastboard-zoom-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:#0000;border-radius:4px;font-size:0;line-height:1;flex-shrink:0}.fastboard-zoom-control-btn svg,.fastboard-zoom-control-btn img{width:100%;height:100%;pointer-events:none}.fastboard-zoom-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-zoom-control-btn.light:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #ebf2ff)}.fastboard-zoom-control-btn.light:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #ebf2ff)}.fastboard-zoom-control-btn.dark:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #383b42)}.fastboard-zoom-control-btn.dark:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #383b42)}.fastboard-zoom-control-text{font-variant-numeric:tabular-nums}.fastboard-page-control{box-sizing:border-box;display:inline-flex;align-items:center;gap:4px;padding:4px;border:1px solid;border-radius:4px;font-size:14px;font-family:system-ui;pointer-events:auto;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.fastboard-page-control *{box-sizing:inherit}.fastboard-page-control.light{color:var(--fastboard-color, #5d6066);background-color:var(--fastboard-bg-color, rgba(255, 255, 255, .9));border-color:var(--fastboard-border-color, #e5e8f0)}.fastboard-page-control.dark{color:var(--fastboard-color, #7b7e84);background-color:var(--fastboard-bg-color, rgba(20, 24, 30, .9));border-color:var(--fastboard-border-color, #383b42)}.fastboard-page-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:#0000;border-radius:4px;font-size:0;line-height:1;flex-shrink:0}.fastboard-page-control-btn svg,.fastboard-page-control-btn img{width:100%;height:100%;pointer-events:none}.fastboard-page-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-page-control-btn.light:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #ebf2ff)}.fastboard-page-control-btn.light:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #ebf2ff)}.fastboard-page-control-btn.dark:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #383b42)}.fastboard-page-control-btn.dark:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #383b42)}.fastboard-page-control-text{font-variant-numeric:tabular-nums}.fastboard-player-control{box-sizing:border-box;display:inline-flex;align-items:center;gap:4px;padding:4px;border:1px solid;border-radius:4px;font-size:14px;font-family:system-ui;pointer-events:auto;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);width:100%}.fastboard-player-control *{box-sizing:inherit}.fastboard-player-control.light{color:var(--fastboard-color, #5d6066);background-color:var(--fastboard-bg-color, rgba(255, 255, 255, .9));border-color:var(--fastboard-border-color, #e5e8f0)}.fastboard-player-control.dark{color:var(--fastboard-color, #7b7e84);background-color:var(--fastboard-bg-color, rgba(20, 24, 30, .9));border-color:var(--fastboard-border-color, #383b42)}.fastboard-player-control-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:0;width:24px;height:24px;background-color:#0000;border-radius:4px;font-size:0;line-height:1;flex-shrink:0;display:inline}.fastboard-player-control-btn svg,.fastboard-player-control-btn img{width:100%;height:100%;pointer-events:none}.fastboard-player-control-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-player-control-btn.light:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #ebf2ff)}.fastboard-player-control-btn.light:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #ebf2ff)}.fastboard-player-control-btn.dark:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #383b42)}.fastboard-player-control-btn.dark:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #383b42)}.fastboard-player-control-btn.loading svg,.fastboard-player-control-btn.loading img{animation:fastboard-player-control-rotate .5s linear infinite}@keyframes fastboard-player-control-rotate{to{transform:rotate(360deg)}}.fastboard-player-control-btn.speed{width:auto;padding:4px;text-align:right;font-size:14px;font-variant-numeric:tabular-nums}.fastboard-player-control-btn.is-active.light{color:var(--fastboard-active-color, #3381ff)}.fastboard-player-control-btn.is-active.dark{color:var(--fastboard-active-color, #2867cc)}.fastboard-player-control-speed-text,.fastboard-player-control-progress{font-size:14px;font-variant-numeric:tabular-nums;line-height:16px}.fastboard-player-control-progress{display:inline-flex;align-items:center}.fastboard-player-control-panel.speed{display:flex;flex-direction:column}.fastboard-toolbar{height:100%;display:flex;align-items:center;position:relative;left:0;transition:left .5s cubic-bezier(.34,1.56,.64,1);pointer-events:none}.fastboard-toolbar.collapsed{left:-100%}.fastboard-toolbar-handler{position:absolute;left:100%;width:17px;font-size:0;border-radius:3px;cursor:pointer;pointer-events:auto}.fastboard-toolbar-handler:focus-visible{outline:2px solid -webkit-focus-ring-color}.fastboard-toolbar-handler input[type=checkbox]{position:absolute;top:0;left:0;appearance:none;margin:0;width:100%;height:100%;cursor:pointer;opacity:0;z-index:-1}.fastboard-toolbar-handler svg{opacity:0;transition:opacity .5s 1s;pointer-events:none}.fastboard-toolbar-handler.light .fastboard-toolbar-handler-bg-color{fill:var(--fastboard-bg-color, rgba(255, 255, 255, .9))}.fastboard-toolbar-handler.light .fastboard-toolbar-handler-border-color{stroke:var(--fastboard-border-color, #e5e8f0)}.fastboard-toolbar-handler.light .fastboard-toolbar-handler-image-stroke-color{stroke:var(--fastboard-color, #5d6066)}.fastboard-toolbar-handler.light .fastboard-toolbar-handler-image-fill-color{fill:var(--fastboard-color, #5d6066)}.fastboard-toolbar-handler.dark .fastboard-toolbar-handler-bg-color{fill:var(--fastboard-bg-color, rgba(20, 24, 30, .9))}.fastboard-toolbar-handler.dark .fastboard-toolbar-handler-border-color{stroke:var(--fastboard-border-color, #383b42)}.fastboard-toolbar-handler.dark .fastboard-toolbar-handler-image-stroke-color{stroke:var(--fastboard-color, #7b7e84)}.fastboard-toolbar-handler.dark .fastboard-toolbar-handler-image-fill-color{fill:var(--fastboard-color, #7b7e84)}.fastboard-toolbar:hover .fastboard-toolbar-handler svg,.fastboard-toolbar.collapsed .fastboard-toolbar-handler svg{opacity:1;transition:opacity .2s}.fastboard-toolbar-btn{appearance:none;cursor:pointer;margin:0;border:0;padding:4px;width:32px;height:32px;background-color:#0000;border-radius:8px;font-size:0;line-height:1;flex-shrink:0}.fastboard-toolbar-btn svg,.fastboard-toolbar-btn img{width:100%;height:100%;pointer-events:none}.fastboard-toolbar-btn:disabled{opacity:.5;cursor:not-allowed}.fastboard-toolbar-btn.light:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #ebf2ff)}.fastboard-toolbar-btn.light:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #ebf2ff)}.fastboard-toolbar-btn.dark:not(:disabled):hover{background-color:var(--fastboard-hover-bg-color, #383b42)}.fastboard-toolbar-btn.dark:not(:disabled).is-active{background-color:var(--fastboard-active-bg-color, #383b42)}.fastboard-slider{box-sizing:border-box;position:relative;width:100%;height:100%;display:flex;align-items:center}.fastboard-slider *{box-sizing:inherit}.fastboard-slider-track{appearance:none;background:rgba(0,0,0,0);border:0;border-radius:26px;flex:1;display:block;height:19px;margin:0;width:0;min-width:0;padding:0;transition:box-shadow .3s ease;cursor:pointer;touch-action:manipulation}.fastboard-slider-track::-webkit-slider-runnable-track{border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;user-select:none;background-color:#80808040;-webkit-user-select:none;background-image:linear-gradient(to right,currentColor var(--value, 0%),transparent var(--value, 0%))}.fastboard-slider-track::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px #23292f26,0 0 0 1px #23292f33;width:13px;height:13px;position:relative;transition:all .2s ease;cursor:grab;appearance:none;margin-top:-4px}.fastboard-slider-track::-moz-range-track{border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;user-select:none;background-color:#80808040;-webkit-user-select:none}.fastboard-slider-track::-moz-range-thumb{appearance:none;background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px #23292f26,0 0 0 1px #23292f33;width:13px;height:13px;position:relative;transition:all .2s ease;cursor:grab}.fastboard-slider-track::-moz-range-progress{background:currentColor;border-radius:2.5px;height:5px}.fastboard-slider-track::-ms-track{border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;user-select:none;background-color:#80808040;-webkit-user-select:none;color:#0000}.fastboard-slider-track::-ms-thumb{appearance:none;background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px #23292f26,0 0 0 1px #23292f33;width:13px;height:13px;position:relative;transition:all .2s ease;cursor:grab;margin-top:0}.fastboard-slider-track::-ms-tooltip{display:none}.fastboard-slider-track::-moz-focus-outer{border:0}.fastboard-slider-track.grabbing::-webkit-slider-thumb{cursor:grabbing}.fastboard-slider-track.light{color:var(--fastboard-active-color, #3381ff)}.fastboard-slider-track.dark{color:var(--fastboard-active-color, #2867cc)}.fastboard-toolbar-contents{box-sizing:border-box;display:inline-flex;align-items:center;gap:4px;border:1px solid;border-radius:4px;font-size:14px;font-family:system-ui;pointer-events:auto;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);padding:2px 0;gap:0;flex-direction:column}.fastboard-toolbar-contents *{box-sizing:inherit}.fastboard-toolbar-contents.light{color:var(--fastboard-color, #5d6066);background-color:var(--fastboard-bg-color, rgba(255, 255, 255, .9));border-color:var(--fastboard-border-color, #e5e8f0)}.fastboard-toolbar-contents.dark{color:var(--fastboard-color, #7b7e84);background-color:var(--fastboard-bg-color, rgba(20, 24, 30, .9));border-color:var(--fastboard-border-color, #383b42)}.fastboard-toolbar-contents>.fastboard-toolbar-btn{margin:2px 4px}.fastboard-toolbar-btn-interactive{position:relative}.fastboard-toolbar-triangle{width:0px;height:0px;border-bottom:3px solid;border-left:3px solid rgba(0,0,0,0);position:absolute;bottom:0;right:0}.fastboard-toolbar-btn:focus+.fastboard-toolbar-triangle{opacity:0}.fastboard-toolbar-scrollable{padding:2px 4px;overflow:hidden;display:flex;flex-direction:column;gap:0}.fastboard-toolbar-tooltip{display:inline-flex;align-items:center;gap:4px}.fastboard-toolbar-hotkey{display:inline-flex;margin-right:-4px;width:24px;height:24px;align-items:center;justify-content:center;background-color:#ffffff1a;border-radius:4px}.fastboard-toolbar-panel-wrapper{display:none}.fastboard-toolbar-panel{display:flex;flex-direction:column}.fastboard-toolbar-panel-divider{height:.5px;width:100%;margin:4px 0;background-color:#ffffff26}.fastboard-toolbar-slider.pencil-eraser-size{width:136px}.fastboard-toolbar-colors,.fastboard-toolbar-shapes{display:grid;align-self:center;grid-template:repeat(2,1fr)/repeat(4,1fr);align-items:center;justify-items:center;gap:4px}.fastboard-toolbar-shape-btn,.fastboard-toolbar-color-btn{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center}.fastboard-toolbar-color-btn{border:1px solid rgba(0,0,0,0)}.fastboard-toolbar-color-btn.light.is-active{border-color:var(--fastboard-active-color, #3381ff)}.fastboard-toolbar-color-btn.dark.is-active{border-color:var(--fastboard-active-color, #2867cc)}.fastboard-toolbar-color-item{display:inline-block;width:16px;height:16px;border-radius:4px;pointer-events:none}.fastboard-toolbar-panel.apps{display:grid;grid-template-columns:repeat(min(var(--n, 3),3),minmax(max-content,1fr));gap:4px}.fastboard-toolbar-app-btn{margin:0;border:0;border-radius:2px;padding:4px 6px;background-color:#0000;display:inline-flex;flex-direction:column;align-items:center;gap:4px;font-size:0}.fastboard-toolbar-app-btn:disabled{opacity:.8}.fastboard-toolbar-app-btn-icon{width:32px;height:32px;pointer-events:none}.fastboard-toolbar-app-btn-text{font-size:14px;line-height:1;max-width:100%;overflow:hidden;text-overflow:ellipsis}.fastboard-toolbar-app-btn.is-loading{cursor:progress}.fastboard-toolbar-app-btn.is-failed{cursor:not-allowed;opacity:.5}.fastboard-toolbar-app-btn:not(:disabled,.is-loading,.is-failed):hover.light{cursor:pointer;background-color:var(--fastboard-hover-bg-color, #ebf2ff)}.fastboard-toolbar-app-btn-text.light{color:var(--fastboard-color, #5d6066)}.fastboard-toolbar-app-btn:not(:disabled,.is-loading,.is-failed):hover.dark{cursor:pointer;background-color:var(--fastboard-hover-bg-color, #383b42)}.fastboard-toolbar-app-btn-text.dark{color:var(--fastboard-color, #7b7e84)}.fastboard-root{position:relative;width:100%;height:100%;overflow:hidden}.fastboard-view{position:absolute;top:0;left:0;width:100%;height:100%}.fastboard-left{display:flex;align-items:center;position:absolute;bottom:50px;top:8px;left:0;z-index:200;pointer-events:none}.fastboard-left .fastboard-toolbar{padding-left:8px}.fastboard-bottom-left,.fastboard-bottom,.fastboard-bottom-right{display:flex;gap:10px;position:absolute;bottom:8px;left:8px;z-index:200;pointer-events:none}.fastboard-bottom-right{left:auto;right:8px}.fastboard-bottom{right:8px}.fastboard-left.hidden *,.fastboard-bottom.hidden *,.fastboard-bottom-left.hidden *,.fastboard-bottom-right.hidden *{opacity:0;pointer-events:none}.fastboard-tip{font-family:inherit;color:#d5d9e0;background-color:#03060d}.fastboard-tip[data-placement^=right]>.tippy-arrow:before{top:4px;border-width:4px;border-right-color:#03060d}.fastboard-tip[data-placement^=top]>.tippy-arrow:before{left:4px;border-width:4px;border-top-color:#03060d}.fastboard-panel .tippy-content{padding:8px}.netless-whiteboard:focus-visible{outline:none}"],"mappings":";AAAA;AAAmD;AAAA;AAAU;AAAkB;AAAA;AAA6B;AAAW;AAAkB;AAAsB;AAAW;AAAkB;AAAe;AAAgB;AAAmB;AAAU;AAAA;AAAA;AAAA;AAAA;AAAiD;AAA6C;AAAA;AAAS;AAAoD;AAAY;AAAO;AAAuB;AAAyB;AAAA;AAA4B;AAAgD;AAAA;AAAM;AAAuD;AAAS;AAAO;AAAuB;AAA4B;AAAA;AAA+B;AAA8C;AAAA;AAAQ;AAAqD;AAA2B;AAA0B;AAAW;AAAA;AAA6B;AAA+C;AAAA;AAAO;AAAsD;AAAU;AAA2B;AAA2B;AAAA;AAA8B;AAA6C;AAAA;AAA0D;AAAa;AAAW;AAAY;AAAA;AAAW;AAAoB;AAAW;AAAkB;AAAyB;AAAA;AAAmB;AAAe;AAAkB;AAAgB;AAAA;AAAU;AAA8B;AAAc;AAAA;AAAA;AAAA;AAAqF;AAAA;AAAsB;AAAuE;AAAA;AAAsB;AAA0E;AAAA;AAAyB;AAAwE;AAAA;AAAuB;AAAyE;AAAA;AAAwB;AAA8C;AAAA;AAAsB;AAA+C;AAAA;AAAU;AAAmD;AAAA;AAAuC;AAAiD;AAAA;AAAqC;AAA6D;AAAA;AAA8C;AAA2D;AAAA;AAA4C;AAAkD;AAAA;AAAuC;AAAgD;AAAA;AAAqC;AAA4D;AAAA;AAA8C;AAA0D;AAAA;AAA4C;AAAqB;AAAsB;AAAoB;AAAmB;AAAQ;AAAY;AAAiB;AAAkB;AAAe;AAAsB;AAAoB;AAA0B;AAAA;AAAkC;AAAuB;AAAA;AAAmB;AAA2B;AAAsC;AAAoE;AAAA;AAAoD;AAA0B;AAAsC;AAAiE;AAAA;AAAoD;AAAyB;AAAgB;AAAe;AAAS;AAAS;AAAU;AAAW;AAAY;AAAuB;AAAkB;AAAY;AAAc;AAAA;AAAc;AAAA;AAA0D;AAAW;AAAY;AAAA;AAAoB;AAAkC;AAAW;AAAA;AAAmB;AAAoD;AAAA;AAA0D;AAAwD;AAAA;AAA2D;AAAmD;AAAA;AAA0D;AAAuD;AAAA;AAA2D;AAAwB;AAAsB;AAAoB;AAAmB;AAAQ;AAAY;AAAiB;AAAkB;AAAe;AAAsB;AAAoB;AAA0B;AAAA;AAAkC;AAA0B;AAAA;AAAmB;AAA8B;AAAsC;AAAoE;AAAA;AAAoD;AAA6B;AAAsC;AAAiE;AAAA;AAAoD;AAA4B;AAAgB;AAAe;AAAS;AAAS;AAAU;AAAW;AAAY;AAAuB;AAAkB;AAAY;AAAc;AAAA;AAAc;AAAA;AAAgE;AAAW;AAAY;AAAA;AAAoB;AAAqC;AAAW;AAAA;AAAmB;AAAuD;AAAA;AAA0D;AAA2D;AAAA;AAA2D;AAAsD;AAAA;AAA0D;AAA0D;AAAA;AAA2D;AAA6B;AAAA;AAAkC;AAAwB;AAAsB;AAAoB;AAAmB;AAAQ;AAAY;AAAiB;AAAkB;AAAe;AAAsB;AAAoB;AAA0B;AAAA;AAAkC;AAA0B;AAAA;AAAmB;AAA8B;AAAsC;AAAoE;AAAA;AAAoD;AAA6B;AAAsC;AAAiE;AAAA;AAAoD;AAA4B;AAAgB;AAAe;AAAS;AAAS;AAAU;AAAW;AAAY;AAAuB;AAAkB;AAAY;AAAc;AAAA;AAAc;AAAA;AAAgE;AAAW;AAAY;AAAA;AAAoB;AAAqC;AAAW;AAAA;AAAmB;AAAuD;AAAA;AAA0D;AAA2D;AAAA;AAA2D;AAAsD;AAAA;AAA0D;AAA0D;AAAA;AAA2D;AAA6B;AAAA;AAAkC;AAA0B;AAAsB;AAAoB;AAAmB;AAAQ;AAAY;AAAiB;AAAkB;AAAe;AAAsB;AAAoB;AAA0B;AAAkC;AAAA;AAAW;AAA4B;AAAA;AAAmB;AAAgC;AAAsC;AAAoE;AAAA;AAAoD;AAA+B;AAAsC;AAAiE;AAAA;AAAoD;AAA8B;AAAgB;AAAe;AAAS;AAAS;AAAU;AAAW;AAAY;AAAuB;AAAkB;AAAY;AAAc;AAAc;AAAA;AAAe;AAAA;AAAoE;AAAW;AAAY;AAAA;AAAoB;AAAuC;AAAW;AAAA;AAAmB;AAAyD;AAAA;AAA0D;AAA6D;AAAA;AAA2D;AAAwD;AAAA;AAA0D;AAA4D;AAAA;AAA2D;AAAA;AAAoF;AAAA;AAA8D;AAAA;AAA8C;AAAA;AAAA;AAA0B;AAAoC;AAAW;AAAY;AAAiB;AAAe;AAAA;AAAkC;AAA8C;AAAA;AAA6C;AAA6C;AAAA;AAA6C;AAAA;AAAwE;AAAe;AAAkC;AAAA;AAAiB;AAAmC;AAAoB;AAAA;AAAmB;AAAsC;AAAa;AAAA;AAAsB;AAAmB;AAAY;AAAa;AAAmB;AAAkB;AAAO;AAAiD;AAAA;AAAoB;AAA6B;AAAA;AAAW;AAA2B;AAAkB;AAAU;AAAW;AAAY;AAAkB;AAAe;AAAA;AAAoB;AAAyC;AAAA;AAA2C;AAAgD;AAAkB;AAAM;AAAO;AAAgB;AAAS;AAAW;AAAY;AAAe;AAAU;AAAA;AAAW;AAA+B;AAAU;AAA0B;AAAA;AAAoB;AAAqE;AAAA;AAAwD;AAAyE;AAAA;AAA8C;AAA+E;AAAA;AAAuC;AAA6E;AAAA;AAAqC;AAAoE;AAAA;AAAqD;AAAwE;AAAA;AAA8C;AAA8E;AAAA;AAAuC;AAA4E;AAAA;AAAqC;AAAA;AAAoH;AAAU;AAAA;AAAuB;AAAuB;AAAgB;AAAe;AAAS;AAAS;AAAY;AAAW;AAAY;AAAuB;AAAkB;AAAY;AAAc;AAAA;AAAc;AAAA;AAAsD;AAAW;AAAY;AAAA;AAAoB;AAAgC;AAAW;AAAA;AAAmB;AAAkD;AAAA;AAA0D;AAAsD;AAAA;AAA2D;AAAiD;AAAA;AAA0D;AAAqD;AAAA;AAA2D;AAAkB;AAAsB;AAAkB;AAAW;AAAY;AAAa;AAAA;AAAmB;AAAoB;AAAA;AAAmB;AAAwB;AAAgB;AAAyB;AAAS;AAAmB;AAAO;AAAc;AAAY;AAAS;AAAQ;AAAY;AAAU;AAA+B;AAAe;AAAA;AAA0B;AAAuD;AAAS;AAAoB;AAAW;AAA+B;AAAiB;AAA2B;AAAyB;AAAA;AAAsG;AAA8C;AAAgB;AAAS;AAAmB;AAAmD;AAAW;AAAY;AAAkB;AAAwB;AAAY;AAAgB;AAAA;AAAgB;AAA0C;AAAS;AAAoB;AAAW;AAA+B;AAAiB;AAA2B;AAAA;AAAyB;AAA0C;AAAgB;AAAgB;AAAS;AAAmB;AAAmD;AAAW;AAAY;AAAkB;AAAwB;AAAA;AAAY;AAA6C;AAAwB;AAAoB;AAAA;AAAW;AAAmC;AAAS;AAAoB;AAAW;AAA+B;AAAiB;AAA2B;AAAyB;AAAA;AAAY;AAAmC;AAAgB;AAAgB;AAAS;AAAmB;AAAmD;AAAW;AAAY;AAAkB;AAAwB;AAAY;AAAA;AAAa;AAAqC;AAAA;AAAa;AAA0C;AAAA;AAAS;AAAuD;AAAA;AAAgB;AAA8B;AAAA;AAA6C;AAA6B;AAAA;AAA6C;AAA4B;AAAsB;AAAoB;AAAmB;AAAQ;AAAiB;AAAkB;AAAe;AAAsB;AAAoB;AAA0B;AAAkC;AAAc;AAAM;AAAA;AAAsB;AAA8B;AAAA;AAAmB;AAAkC;AAAsC;AAAoE;AAAA;AAAoD;AAAiC;AAAsC;AAAiE;AAAA;AAAoD;AAAmD;AAAA;AAAe;AAAmC;AAAA;AAAkB;AAA4B;AAAU;AAAW;AAAwB;AAAoC;AAAkB;AAAS;AAAA;AAAQ;AAAyD;AAAA;AAAU;AAA8B;AAAgB;AAAgB;AAAa;AAAsB;AAAA;AAAM;AAA2B;AAAoB;AAAmB;AAAA;AAAQ;AAA0B;AAAoB;AAAkB;AAAW;AAAY;AAAmB;AAAuB;AAA2B;AAAA;AAAkB;AAAiC;AAAA;AAAa;AAAyB;AAAa;AAAA;AAAsB;AAAiC;AAAY;AAAW;AAAa;AAAA;AAA2B;AAA6C;AAAA;AAAY;AAAA;AAAoD;AAAa;AAAkB;AAA0C;AAAmB;AAAqB;AAAA;AAAQ;AAAA;AAA0D;AAAW;AAAY;AAAU;AAAoB;AAAmB;AAAA;AAAuB;AAA6B;AAAA;AAA+B;AAA6C;AAAA;AAAoD;AAA4C;AAAA;AAAoD;AAA8B;AAAqB;AAAW;AAAY;AAAkB;AAAA;AAAoB;AAA8B;AAAa;AAAyE;AAAA;AAAQ;AAA2B;AAAS;AAAS;AAAkB;AAAgB;AAAuB;AAAoB;AAAsB;AAAmB;AAAQ;AAAA;AAAY;AAAoC;AAAA;AAAW;AAAgC;AAAW;AAAY;AAAA;AAAoB;AAAgC;AAAe;AAAc;AAAe;AAAgB;AAAA;AAAuB;AAAsC;AAAA;AAAgB;AAAqC;AAAmB;AAAA;AAAW;AAA6E;AAAe;AAAA;AAA0D;AAAsC;AAAA;AAAsC;AAA4E;AAAe;AAAA;AAA0D;AAAqC;AAAA;AAAsC;AAAgB;AAAkB;AAAW;AAAY;AAAA;AAAgB;AAAgB;AAAkB;AAAM;AAAO;AAAW;AAAA;AAAY;AAAgB;AAAa;AAAmB;AAAkB;AAAY;AAAQ;AAAO;AAAY;AAAA;AAAoB;AAAmC;AAAA;AAAiB;AAAA;AAAA;AAAiE;AAAa;AAAS;AAAkB;AAAW;AAAS;AAAY;AAAA;AAAoB;AAAwB;AAAU;AAAA;AAAU;AAAkB;AAAA;AAAU;AAAA;AAAA;AAAA;AAAqH;AAAU;AAAA;AAAoB;AAAe;AAAoB;AAAc;AAAA;AAAyB;AAA0D;AAAQ;AAAiB;AAAA;AAA2B;AAAwD;AAAS;AAAiB;AAAA;AAAyB;AAAgC;AAAA;AAAY;AAAkC;AAAA;","names":[]}
|