@netless/fastboard-ui 0.3.2-canary.5 → 0.3.3

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 (110) hide show
  1. package/LICENSE.txt +21 -21
  2. package/README.md +7 -7
  3. package/dist/index.d.ts +102 -102
  4. package/dist/index.js +30 -23
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +30 -23
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/index.svelte.mjs +22 -17
  9. package/dist/index.svelte.mjs.map +1 -1
  10. package/package.json +4 -5
  11. package/src/actions/height.ts +43 -43
  12. package/src/actions/scroll.ts +31 -31
  13. package/src/actions/tippy.ts +71 -71
  14. package/src/behaviors/apps.ts +74 -74
  15. package/src/behaviors/index.ts +1 -1
  16. package/src/components/Button/Button.svelte +51 -51
  17. package/src/components/Button/Button.svelte.d.ts +26 -26
  18. package/src/components/Button/index.ts +2 -2
  19. package/src/components/Fastboard/Fastboard.scss +61 -61
  20. package/src/components/Fastboard/Fastboard.svelte +80 -80
  21. package/src/components/Fastboard/Fastboard.svelte.ts +14 -14
  22. package/src/components/Fastboard/ReplayFastboard.svelte +43 -43
  23. package/src/components/Fastboard/ReplayFastboard.svelte.ts +13 -13
  24. package/src/components/Fastboard/index.ts +5 -5
  25. package/src/components/Icon/Icon.svelte +11 -11
  26. package/src/components/Icon/Icon.svelte.d.ts +10 -10
  27. package/src/components/Icon/index.ts +2 -2
  28. package/src/components/Icons/Apps.svelte +49 -49
  29. package/src/components/Icons/Arrow.svelte +16 -16
  30. package/src/components/Icons/ArrowBolded.svelte +17 -17
  31. package/src/components/Icons/Balloon.svelte +16 -16
  32. package/src/components/Icons/BalloonBolded.svelte +16 -16
  33. package/src/components/Icons/Circle.svelte +20 -20
  34. package/src/components/Icons/CircleBolded.svelte +20 -20
  35. package/src/components/Icons/Clean.svelte +14 -14
  36. package/src/components/Icons/Clear.svelte +16 -16
  37. package/src/components/Icons/Click.svelte +16 -16
  38. package/src/components/Icons/ClickFilled.svelte +10 -10
  39. package/src/components/Icons/Diamond.svelte +16 -16
  40. package/src/components/Icons/Down.svelte +16 -16
  41. package/src/components/Icons/Eraser.svelte +16 -16
  42. package/src/components/Icons/EraserFilled.svelte +16 -16
  43. package/src/components/Icons/Icons.scss +20 -20
  44. package/src/components/Icons/Left.svelte +16 -16
  45. package/src/components/Icons/Line.svelte +16 -16
  46. package/src/components/Icons/LineBolded.svelte +16 -16
  47. package/src/components/Icons/Loading.svelte +10 -10
  48. package/src/components/Icons/Minus.svelte +16 -16
  49. package/src/components/Icons/Pause.svelte +10 -10
  50. package/src/components/Icons/Pencil.svelte +29 -29
  51. package/src/components/Icons/PencilFilled.svelte +16 -16
  52. package/src/components/Icons/Play.svelte +10 -10
  53. package/src/components/Icons/Plus.svelte +16 -16
  54. package/src/components/Icons/Rectangle.svelte +16 -16
  55. package/src/components/Icons/RectangleBolded.svelte +16 -16
  56. package/src/components/Icons/Redo.svelte +15 -15
  57. package/src/components/Icons/Reset.svelte +26 -26
  58. package/src/components/Icons/Rhombus.svelte +16 -16
  59. package/src/components/Icons/RhombusBolded.svelte +16 -16
  60. package/src/components/Icons/Right.svelte +16 -16
  61. package/src/components/Icons/Selector.svelte +24 -24
  62. package/src/components/Icons/SelectorFilled.svelte +18 -18
  63. package/src/components/Icons/SpeechBalloon.svelte +16 -16
  64. package/src/components/Icons/Star.svelte +16 -16
  65. package/src/components/Icons/StarBolded.svelte +16 -16
  66. package/src/components/Icons/Text.svelte +16 -16
  67. package/src/components/Icons/TextFilled.svelte +17 -17
  68. package/src/components/Icons/Triangle.svelte +16 -16
  69. package/src/components/Icons/TriangleBolded.svelte +16 -16
  70. package/src/components/Icons/Undo.svelte +15 -15
  71. package/src/components/Icons/Up.svelte +16 -16
  72. package/src/components/Icons/WhiteboardAdd.svelte +34 -34
  73. package/src/components/Icons/index.ts +93 -93
  74. package/src/components/PageControl/PageControl.scss +15 -15
  75. package/src/components/PageControl/PageControl.svelte +79 -79
  76. package/src/components/PageControl/PageControl.svelte.d.ts +13 -13
  77. package/src/components/PageControl/index.ts +2 -2
  78. package/src/components/PlayerControl/PlayerControl.scss +57 -57
  79. package/src/components/PlayerControl/PlayerControl.svelte +153 -153
  80. package/src/components/PlayerControl/PlayerControl.svelte.d.ts +13 -13
  81. package/src/components/PlayerControl/index.ts +2 -2
  82. package/src/components/RedoUndo/RedoUndo.scss +11 -11
  83. package/src/components/RedoUndo/RedoUndo.svelte +60 -60
  84. package/src/components/RedoUndo/RedoUndo.svelte.d.ts +13 -13
  85. package/src/components/RedoUndo/index.ts +2 -2
  86. package/src/components/Toolbar/README.md +57 -57
  87. package/src/components/Toolbar/Toolbar.scss +78 -78
  88. package/src/components/Toolbar/Toolbar.svelte +62 -62
  89. package/src/components/Toolbar/Toolbar.svelte.d.ts +13 -13
  90. package/src/components/Toolbar/components/Contents.scss +168 -168
  91. package/src/components/Toolbar/components/Contents.svelte +202 -197
  92. package/src/components/Toolbar/components/Shapes.svelte +85 -85
  93. package/src/components/Toolbar/components/Slider.scss +119 -119
  94. package/src/components/Toolbar/components/Slider.svelte +54 -54
  95. package/src/components/Toolbar/components/StrokeColor.svelte +39 -39
  96. package/src/components/Toolbar/components/StrokeWidth.svelte +20 -20
  97. package/src/components/Toolbar/components/TextColor.svelte +39 -39
  98. package/src/components/Toolbar/components/constants.ts +80 -80
  99. package/src/components/Toolbar/components/helper.ts +24 -24
  100. package/src/components/Toolbar/index.ts +2 -2
  101. package/src/components/ZoomControl/ZoomControl.scss +15 -15
  102. package/src/components/ZoomControl/ZoomControl.svelte +99 -99
  103. package/src/components/ZoomControl/ZoomControl.svelte.d.ts +13 -13
  104. package/src/components/ZoomControl/index.ts +2 -2
  105. package/src/components/helpers.ts +3 -3
  106. package/src/components/theme.scss +92 -92
  107. package/src/components/variables.scss +69 -69
  108. package/src/index.ts +13 -13
  109. package/src/style.scss +36 -36
  110. package/src/typings.ts +38 -38
@@ -1,13 +1,13 @@
1
- import type { FastboardApp } from "@netless/fastboard-core";
2
- import type { Theme, Language, GenericIcon } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
4
-
5
- export declare interface PageControlProps {
6
- app?: FastboardApp | null;
7
- theme?: Theme;
8
- language?: Language;
9
- icons?: GenericIcon<"prev" | "next" | "add">;
10
- }
11
-
12
- declare class PageControl extends SvelteComponentTyped<PageControlProps> {}
13
- export default PageControl;
1
+ import type { FastboardApp } from "@netless/fastboard-core";
2
+ import type { Theme, Language, GenericIcon } from "../../typings";
3
+ import { SvelteComponentTyped } from "svelte";
4
+
5
+ export declare interface PageControlProps {
6
+ app?: FastboardApp | null;
7
+ theme?: Theme;
8
+ language?: Language;
9
+ icons?: GenericIcon<"prev" | "next" | "add">;
10
+ }
11
+
12
+ declare class PageControl extends SvelteComponentTyped<PageControlProps> {}
13
+ export default PageControl;
@@ -1,2 +1,2 @@
1
- export { default } from "./PageControl.svelte";
2
- export * from "./PageControl.svelte";
1
+ export { default } from "./PageControl.svelte";
2
+ export * from "./PageControl.svelte";
@@ -1,57 +1,57 @@
1
- @import "../theme.scss";
2
-
3
- $name: "fastboard-player-control";
4
-
5
- .#{$name} {
6
- @include container;
7
- width: 100%;
8
- }
9
-
10
- .#{$name}-btn {
11
- @include btn;
12
- display: inline;
13
-
14
- &.loading {
15
- svg,
16
- img {
17
- animation: fastboard-player-control-rotate 0.5s linear infinite;
18
- }
19
- }
20
-
21
- @keyframes fastboard-player-control-rotate {
22
- 100% {
23
- transform: rotate(360deg);
24
- }
25
- }
26
-
27
- &.speed {
28
- width: auto;
29
- padding: 4px;
30
- text-align: right;
31
- font-size: 14px;
32
- font-variant-numeric: tabular-nums;
33
- }
34
-
35
- @each $name, $theme in $themes {
36
- &.is-active.#{$name} {
37
- color: read($theme, "active-color");
38
- }
39
- }
40
- }
41
-
42
- .#{$name}-speed-text {
43
- font-size: 14px;
44
- font-variant-numeric: tabular-nums;
45
- line-height: 16px;
46
- }
47
-
48
- .#{$name}-progress {
49
- @extend .#{$name}-speed-text;
50
- display: inline-flex;
51
- align-items: center;
52
- }
53
-
54
- .#{$name}-panel.speed {
55
- display: flex;
56
- flex-direction: column;
57
- }
1
+ @import "../theme.scss";
2
+
3
+ $name: "fastboard-player-control";
4
+
5
+ .#{$name} {
6
+ @include container;
7
+ width: 100%;
8
+ }
9
+
10
+ .#{$name}-btn {
11
+ @include btn;
12
+ display: inline;
13
+
14
+ &.loading {
15
+ svg,
16
+ img {
17
+ animation: fastboard-player-control-rotate 0.5s linear infinite;
18
+ }
19
+ }
20
+
21
+ @keyframes fastboard-player-control-rotate {
22
+ 100% {
23
+ transform: rotate(360deg);
24
+ }
25
+ }
26
+
27
+ &.speed {
28
+ width: auto;
29
+ padding: 4px;
30
+ text-align: right;
31
+ font-size: 14px;
32
+ font-variant-numeric: tabular-nums;
33
+ }
34
+
35
+ @each $name, $theme in $themes {
36
+ &.is-active.#{$name} {
37
+ color: read($theme, "active-color");
38
+ }
39
+ }
40
+ }
41
+
42
+ .#{$name}-speed-text {
43
+ font-size: 14px;
44
+ font-variant-numeric: tabular-nums;
45
+ line-height: 16px;
46
+ }
47
+
48
+ .#{$name}-progress {
49
+ @extend .#{$name}-speed-text;
50
+ display: inline-flex;
51
+ align-items: center;
52
+ }
53
+
54
+ .#{$name}-panel.speed {
55
+ display: flex;
56
+ flex-direction: column;
57
+ }
@@ -1,153 +1,153 @@
1
- <script lang="ts" context="module">
2
- import type { FastboardPlayer } from "@netless/fastboard-core";
3
- import type { GenericIcon, I18nData, IconType, Language, Theme } from "../../typings";
4
-
5
- const speeds = [2.0, 1.5, 1.25, 1.0, 0.75, 0.5];
6
-
7
- const i18n: I18nData<"play" | "pause" | "speed"> = {
8
- en: {
9
- play: "Play",
10
- pause: "Pause",
11
- speed: "Speed",
12
- },
13
- "zh-CN": {
14
- play: "播放",
15
- pause: "暂停",
16
- speed: "速度",
17
- },
18
- };
19
-
20
- function format(ms: number) {
21
- const s = Math.floor(ms / 1000);
22
- const m = Math.floor(s / 60);
23
- return String(m).padStart(2, "0") + ":" + String(s % 60).padStart(2, "0");
24
- }
25
- </script>
26
-
27
- <script lang="ts">
28
- import Icon from "../Icon";
29
- import Icons from "../Icons";
30
- import Button from "../Button";
31
- import Slider from "../Toolbar/components/Slider.svelte";
32
-
33
- export let player: FastboardPlayer | null | undefined = null;
34
- export let theme: Theme = "light";
35
- export let language: Language = "en";
36
- export let icons: GenericIcon<"play" | "pause" | "loading"> | undefined = undefined;
37
-
38
- const name = "fastboard-player-control";
39
-
40
- $: t = i18n[language];
41
-
42
- let type: IconType;
43
- $: type = disabled ? "disable" : "normal";
44
-
45
- $: canPlay = player?.canplay;
46
- $: disabled = !canPlay;
47
- $: duration = player?.duration;
48
- $: current = player?.currentTime;
49
- $: playbackRate = player?.playbackRate;
50
-
51
- $: phase = player?.phase;
52
- $: loading = $phase === "waitingFirstFrame" || $phase === "buffering";
53
- $: playing = $phase === "playing";
54
- $: className = [loading ? "loading" : "", playing ? "pause" : "play"].filter(Boolean).join(" ");
55
-
56
- let speed_panel: HTMLDivElement;
57
-
58
- function toggle() {
59
- if (!player) return;
60
- switch (player.player.phase) {
61
- case "waitingFirstFrame":
62
- case "pause":
63
- case "ended": {
64
- player.play();
65
- break;
66
- }
67
- case "playing": {
68
- player.pause();
69
- break;
70
- }
71
- }
72
- }
73
-
74
- function seek({ detail: seconds }: CustomEvent<number>) {
75
- if (!player) return;
76
- player.seek(seconds * 1000);
77
- }
78
-
79
- function setPlaybackRate(speed: number) {
80
- if (!player) return;
81
- player.setPlaybackRate(speed);
82
- }
83
- </script>
84
-
85
- <div class="{name} {theme}">
86
- <Button
87
- class={className}
88
- {name}
89
- {theme}
90
- {disabled}
91
- on:click={toggle}
92
- content={loading ? "" : playing ? t.pause : t.play}
93
- >
94
- {#if loading}
95
- <Icon src={icons?.loading[type]} alt="[loading]">
96
- <Icons.Loading {theme} />
97
- </Icon>
98
- {:else if playing}
99
- <Icon src={icons?.pause[type]} alt="[pause]">
100
- <Icons.Pause {theme} />
101
- </Icon>
102
- {:else}
103
- <Icon src={icons?.play[type]} alt="[play]">
104
- <Icons.Play {theme} />
105
- </Icon>
106
- {/if}
107
- </Button>
108
- {#if $current == null || $duration == null || $duration === 0}
109
- <Slider class="{name}-slider" disabled />
110
- <span class="{name}-progress loading">&hellip;/&hellip;</span>
111
- {:else}
112
- <Slider
113
- class="{name}-slider"
114
- {theme}
115
- value={$current / 1000}
116
- min={0}
117
- max={$duration / 1000}
118
- on:change={seek}
119
- />
120
- <span class="{name}-progress">
121
- <span class="{name}-current">{format($current)}</span>
122
- <span class="{name}-slash">/</span>
123
- <span class="{name}-duration">{format($duration)}</span>
124
- </span>
125
- {/if}
126
- <Button
127
- class="speed"
128
- {name}
129
- {theme}
130
- {disabled}
131
- content={t.speed}
132
- menu={speed_panel}
133
- menu_placement="top-end"
134
- >
135
- <span class="{name}-speed-text">{$playbackRate || 1}x</span>
136
- </Button>
137
- </div>
138
-
139
- <div style="display:none">
140
- <div class="{name}-panel speed" bind:this={speed_panel}>
141
- {#each speeds as s (s)}
142
- <Button
143
- class="speed {s === $playbackRate ? 'is-active' : ''}"
144
- {name}
145
- {theme}
146
- {disabled}
147
- on:click={() => setPlaybackRate(s)}
148
- >
149
- {s}x
150
- </Button>
151
- {/each}
152
- </div>
153
- </div>
1
+ <script lang="ts" context="module">
2
+ import type { FastboardPlayer } from "@netless/fastboard-core";
3
+ import type { GenericIcon, I18nData, IconType, Language, Theme } from "../../typings";
4
+
5
+ const speeds = [2.0, 1.5, 1.25, 1.0, 0.75, 0.5];
6
+
7
+ const i18n: I18nData<"play" | "pause" | "speed"> = {
8
+ en: {
9
+ play: "Play",
10
+ pause: "Pause",
11
+ speed: "Speed",
12
+ },
13
+ "zh-CN": {
14
+ play: "播放",
15
+ pause: "暂停",
16
+ speed: "速度",
17
+ },
18
+ };
19
+
20
+ function format(ms: number) {
21
+ const s = Math.floor(ms / 1000);
22
+ const m = Math.floor(s / 60);
23
+ return String(m).padStart(2, "0") + ":" + String(s % 60).padStart(2, "0");
24
+ }
25
+ </script>
26
+
27
+ <script lang="ts">
28
+ import Icon from "../Icon";
29
+ import Icons from "../Icons";
30
+ import Button from "../Button";
31
+ import Slider from "../Toolbar/components/Slider.svelte";
32
+
33
+ export let player: FastboardPlayer | null | undefined = null;
34
+ export let theme: Theme = "light";
35
+ export let language: Language = "en";
36
+ export let icons: GenericIcon<"play" | "pause" | "loading"> | undefined = undefined;
37
+
38
+ const name = "fastboard-player-control";
39
+
40
+ $: t = i18n[language];
41
+
42
+ let type: IconType;
43
+ $: type = disabled ? "disable" : "normal";
44
+
45
+ $: canPlay = player?.canplay;
46
+ $: disabled = !canPlay;
47
+ $: duration = player?.duration;
48
+ $: current = player?.currentTime;
49
+ $: playbackRate = player?.playbackRate;
50
+
51
+ $: phase = player?.phase;
52
+ $: loading = $phase === "waitingFirstFrame" || $phase === "buffering";
53
+ $: playing = $phase === "playing";
54
+ $: className = [loading ? "loading" : "", playing ? "pause" : "play"].filter(Boolean).join(" ");
55
+
56
+ let speed_panel: HTMLDivElement;
57
+
58
+ function toggle() {
59
+ if (!player) return;
60
+ switch (player.player.phase) {
61
+ case "waitingFirstFrame":
62
+ case "pause":
63
+ case "ended": {
64
+ player.play();
65
+ break;
66
+ }
67
+ case "playing": {
68
+ player.pause();
69
+ break;
70
+ }
71
+ }
72
+ }
73
+
74
+ function seek({ detail: seconds }: CustomEvent<number>) {
75
+ if (!player) return;
76
+ player.seek(seconds * 1000);
77
+ }
78
+
79
+ function setPlaybackRate(speed: number) {
80
+ if (!player) return;
81
+ player.setPlaybackRate(speed);
82
+ }
83
+ </script>
84
+
85
+ <div class="{name} {theme}">
86
+ <Button
87
+ class={className}
88
+ {name}
89
+ {theme}
90
+ {disabled}
91
+ on:click={toggle}
92
+ content={loading ? "" : playing ? t.pause : t.play}
93
+ >
94
+ {#if loading}
95
+ <Icon src={icons?.loading[type]} alt="[loading]">
96
+ <Icons.Loading {theme} />
97
+ </Icon>
98
+ {:else if playing}
99
+ <Icon src={icons?.pause[type]} alt="[pause]">
100
+ <Icons.Pause {theme} />
101
+ </Icon>
102
+ {:else}
103
+ <Icon src={icons?.play[type]} alt="[play]">
104
+ <Icons.Play {theme} />
105
+ </Icon>
106
+ {/if}
107
+ </Button>
108
+ {#if $current == null || $duration == null || $duration === 0}
109
+ <Slider class="{name}-slider" disabled />
110
+ <span class="{name}-progress loading">&hellip;/&hellip;</span>
111
+ {:else}
112
+ <Slider
113
+ class="{name}-slider"
114
+ {theme}
115
+ value={$current / 1000}
116
+ min={0}
117
+ max={$duration / 1000}
118
+ on:change={seek}
119
+ />
120
+ <span class="{name}-progress">
121
+ <span class="{name}-current">{format($current)}</span>
122
+ <span class="{name}-slash">/</span>
123
+ <span class="{name}-duration">{format($duration)}</span>
124
+ </span>
125
+ {/if}
126
+ <Button
127
+ class="speed"
128
+ {name}
129
+ {theme}
130
+ {disabled}
131
+ content={t.speed}
132
+ menu={speed_panel}
133
+ menu_placement="top-end"
134
+ >
135
+ <span class="{name}-speed-text">{$playbackRate || 1}x</span>
136
+ </Button>
137
+ </div>
138
+
139
+ <div style="display:none">
140
+ <div class="{name}-panel speed" bind:this={speed_panel}>
141
+ {#each speeds as s (s)}
142
+ <Button
143
+ class="speed {s === $playbackRate ? 'is-active' : ''}"
144
+ {name}
145
+ {theme}
146
+ {disabled}
147
+ on:click={() => setPlaybackRate(s)}
148
+ >
149
+ {s}x
150
+ </Button>
151
+ {/each}
152
+ </div>
153
+ </div>
@@ -1,13 +1,13 @@
1
- import type { FastboardPlayer } from "@netless/fastboard-core";
2
- import type { Theme, Language, GenericIcon } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
4
-
5
- export declare interface PlayerControlProps {
6
- player?: FastboardPlayer | null;
7
- theme?: Theme;
8
- language?: Language;
9
- icons?: GenericIcon<"play" | "pause" | "loading">;
10
- }
11
-
12
- declare class PlayerControl extends SvelteComponentTyped<PlayerControlProps> {}
13
- export default PlayerControl;
1
+ import type { FastboardPlayer } from "@netless/fastboard-core";
2
+ import type { Theme, Language, GenericIcon } from "../../typings";
3
+ import { SvelteComponentTyped } from "svelte";
4
+
5
+ export declare interface PlayerControlProps {
6
+ player?: FastboardPlayer | null;
7
+ theme?: Theme;
8
+ language?: Language;
9
+ icons?: GenericIcon<"play" | "pause" | "loading">;
10
+ }
11
+
12
+ declare class PlayerControl extends SvelteComponentTyped<PlayerControlProps> {}
13
+ export default PlayerControl;
@@ -1,2 +1,2 @@
1
- export { default } from "./PlayerControl.svelte";
2
- export * from "./PlayerControl.svelte";
1
+ export { default } from "./PlayerControl.svelte";
2
+ export * from "./PlayerControl.svelte";
@@ -1,11 +1,11 @@
1
- @import "../theme.scss";
2
-
3
- $name: "fastboard-redo-undo";
4
-
5
- .#{$name} {
6
- @include container;
7
- }
8
-
9
- .#{$name}-btn {
10
- @include btn;
11
- }
1
+ @import "../theme.scss";
2
+
3
+ $name: "fastboard-redo-undo";
4
+
5
+ .#{$name} {
6
+ @include container;
7
+ }
8
+
9
+ .#{$name}-btn {
10
+ @include btn;
11
+ }
@@ -1,60 +1,60 @@
1
- <script lang="ts" context="module">
2
- import type { FastboardApp } from "@netless/fastboard-core";
3
- import type { GenericIcon, I18nData, IconType, Language, Theme } from "../../typings";
4
- const i18n: I18nData<"redo" | "undo"> = {
5
- en: {
6
- redo: "Redo",
7
- undo: "Undo",
8
- },
9
- "zh-CN": {
10
- redo: "重做",
11
- undo: "撤销",
12
- },
13
- };
14
- </script>
15
-
16
- <script lang="ts">
17
- import Icon from "../Icon";
18
- import Icons from "../Icons";
19
- import Button from "../Button";
20
-
21
- export let app: FastboardApp | null | undefined = null;
22
- export let theme: Theme = "light";
23
- export let language: Language = "en";
24
- export let icons: GenericIcon<"undo" | "redo"> | undefined = undefined;
25
-
26
- const name = "fastboard-redo-undo";
27
-
28
- $: writable = app?.writable;
29
- $: disabled = !$writable;
30
- $: t = i18n[language];
31
-
32
- let type: IconType;
33
- $: type = disabled ? "disable" : "normal";
34
-
35
- $: undoSteps = app?.canUndoSteps;
36
- $: redoSteps = app?.canRedoSteps;
37
- $: undo_disabled = disabled || !$undoSteps;
38
- $: redo_disabled = disabled || !$redoSteps;
39
-
40
- function undo() {
41
- app?.undo();
42
- }
43
-
44
- function redo() {
45
- app?.redo();
46
- }
47
- </script>
48
-
49
- <div class="{name} {theme}">
50
- <Button class="undo" {name} {theme} disabled={undo_disabled} on:click={undo} content={t.undo}>
51
- <Icon src={icons?.undo[type]} alt="[undo]">
52
- <Icons.Undo {theme} />
53
- </Icon>
54
- </Button>
55
- <Button class="redo" {name} {theme} disabled={redo_disabled} on:click={redo} content={t.redo}>
56
- <Icon src={icons?.redo[type]} alt="[redo]">
57
- <Icons.Redo {theme} />
58
- </Icon>
59
- </Button>
60
- </div>
1
+ <script lang="ts" context="module">
2
+ import type { FastboardApp } from "@netless/fastboard-core";
3
+ import type { GenericIcon, I18nData, IconType, Language, Theme } from "../../typings";
4
+ const i18n: I18nData<"redo" | "undo"> = {
5
+ en: {
6
+ redo: "Redo",
7
+ undo: "Undo",
8
+ },
9
+ "zh-CN": {
10
+ redo: "重做",
11
+ undo: "撤销",
12
+ },
13
+ };
14
+ </script>
15
+
16
+ <script lang="ts">
17
+ import Icon from "../Icon";
18
+ import Icons from "../Icons";
19
+ import Button from "../Button";
20
+
21
+ export let app: FastboardApp | null | undefined = null;
22
+ export let theme: Theme = "light";
23
+ export let language: Language = "en";
24
+ export let icons: GenericIcon<"undo" | "redo"> | undefined = undefined;
25
+
26
+ const name = "fastboard-redo-undo";
27
+
28
+ $: writable = app?.writable;
29
+ $: disabled = !$writable;
30
+ $: t = i18n[language];
31
+
32
+ let type: IconType;
33
+ $: type = disabled ? "disable" : "normal";
34
+
35
+ $: undoSteps = app?.canUndoSteps;
36
+ $: redoSteps = app?.canRedoSteps;
37
+ $: undo_disabled = disabled || !$undoSteps;
38
+ $: redo_disabled = disabled || !$redoSteps;
39
+
40
+ function undo() {
41
+ app?.undo();
42
+ }
43
+
44
+ function redo() {
45
+ app?.redo();
46
+ }
47
+ </script>
48
+
49
+ <div class="{name} {theme}">
50
+ <Button class="undo" {name} {theme} disabled={undo_disabled} on:click={undo} content={t.undo}>
51
+ <Icon src={icons?.undo[type]} alt="[undo]">
52
+ <Icons.Undo {theme} />
53
+ </Icon>
54
+ </Button>
55
+ <Button class="redo" {name} {theme} disabled={redo_disabled} on:click={redo} content={t.redo}>
56
+ <Icon src={icons?.redo[type]} alt="[redo]">
57
+ <Icons.Redo {theme} />
58
+ </Icon>
59
+ </Button>
60
+ </div>
@@ -1,13 +1,13 @@
1
- import type { FastboardApp } from "@netless/fastboard-core";
2
- import type { Theme, Language, GenericIcon } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
4
-
5
- export declare interface RedoUndoProps {
6
- app?: FastboardApp | null;
7
- theme?: Theme;
8
- language?: Language;
9
- icons?: GenericIcon<"undo" | "redo">;
10
- }
11
-
12
- declare class RedoUndo extends SvelteComponentTyped<RedoUndoProps> {}
13
- export default RedoUndo;
1
+ import type { FastboardApp } from "@netless/fastboard-core";
2
+ import type { Theme, Language, GenericIcon } from "../../typings";
3
+ import { SvelteComponentTyped } from "svelte";
4
+
5
+ export declare interface RedoUndoProps {
6
+ app?: FastboardApp | null;
7
+ theme?: Theme;
8
+ language?: Language;
9
+ icons?: GenericIcon<"undo" | "redo">;
10
+ }
11
+
12
+ declare class RedoUndo extends SvelteComponentTyped<RedoUndoProps> {}
13
+ export default RedoUndo;
@@ -1,2 +1,2 @@
1
- export { default } from "./RedoUndo.svelte";
2
- export * from "./RedoUndo.svelte";
1
+ export { default } from "./RedoUndo.svelte";
2
+ export * from "./RedoUndo.svelte";