@netless/fastboard-ui 1.0.0-canary.8 → 1.0.0

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 (64) hide show
  1. package/dist/full.d.ts +178 -0
  2. package/dist/index.d.ts +91 -89
  3. package/dist/index.js +7341 -3085
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +7364 -3113
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/index.svelte.mjs +7350 -3166
  8. package/dist/index.svelte.mjs.map +1 -0
  9. package/dist/lite.d.ts +178 -0
  10. package/lite.d.ts +1 -0
  11. package/package.json +19 -10
  12. package/src/actions/scroll.ts +1 -1
  13. package/src/actions/tippy.ts +6 -11
  14. package/src/behaviors/apps.ts +38 -4
  15. package/src/components/Button/Button.svelte +1 -4
  16. package/src/components/Button/Button.svelte.d.ts +1 -2
  17. package/src/components/Fastboard/Fastboard.scss +14 -2
  18. package/src/components/Fastboard/Fastboard.svelte +15 -5
  19. package/src/components/Fastboard/{Fastboard.svelte.ts → Fastboard.svelte.d.ts} +6 -2
  20. package/src/components/Fastboard/ReplayFastboard.svelte +2 -2
  21. package/src/components/Fastboard/{ReplayFastboard.svelte.ts → ReplayFastboard.svelte.d.ts} +3 -3
  22. package/src/components/Icon/Icon.svelte.d.ts +1 -1
  23. package/src/components/Icons/{PencilEraser.svelte → Drag.svelte} +2 -2
  24. package/src/components/Icons/{PencilEraserFilled.svelte → DragFilled.svelte} +1 -3
  25. package/src/components/Icons/Eraser.svelte +1 -35
  26. package/src/components/Icons/EraserFilled.svelte +2 -2
  27. package/src/components/Icons/Laser.svelte +21 -0
  28. package/src/components/Icons/LaserFilled.svelte +14 -0
  29. package/src/components/Icons/LaserPen.svelte +20 -0
  30. package/src/components/Icons/LaserPenFilled.svelte +20 -0
  31. package/src/components/Icons/index.ts +12 -7
  32. package/src/components/PageControl/PageControl.svelte +4 -3
  33. package/src/components/PageControl/PageControl.svelte.d.ts +1 -1
  34. package/src/components/PlayerControl/PlayerControl.svelte.d.ts +1 -1
  35. package/src/components/RedoUndo/RedoUndo.svelte +2 -1
  36. package/src/components/RedoUndo/RedoUndo.svelte.d.ts +1 -1
  37. package/src/components/Toolbar/Toolbar.scss +14 -4
  38. package/src/components/Toolbar/Toolbar.svelte +34 -25
  39. package/src/components/Toolbar/Toolbar.svelte.d.ts +2 -16
  40. package/src/components/Toolbar/components/Contents.scss +19 -14
  41. package/src/components/Toolbar/components/Contents.svelte +100 -204
  42. package/src/components/Toolbar/components/Slider.scss +3 -1
  43. package/src/components/Toolbar/components/Slider.svelte +0 -1
  44. package/src/components/Toolbar/components/StrokeColor.svelte +12 -7
  45. package/src/components/Toolbar/components/TextColor.svelte +12 -7
  46. package/src/components/Toolbar/components/constants.ts +23 -23
  47. package/src/components/Toolbar/components/helper.ts +24 -2
  48. package/src/components/Toolbar/definitions/Clear.svelte +13 -0
  49. package/src/components/Toolbar/definitions/Clicker.svelte +19 -0
  50. package/src/components/Toolbar/definitions/Eraser.svelte +19 -0
  51. package/src/components/Toolbar/definitions/Hand.svelte +19 -0
  52. package/src/components/Toolbar/definitions/Laser.svelte +19 -0
  53. package/src/components/Toolbar/definitions/Pencil.svelte +23 -0
  54. package/src/components/Toolbar/definitions/Selector.svelte +19 -0
  55. package/src/components/Toolbar/definitions/Shapes.svelte +41 -0
  56. package/src/components/Toolbar/definitions/Text.svelte +20 -0
  57. package/src/components/ZoomControl/ZoomControl.svelte +5 -6
  58. package/src/components/ZoomControl/ZoomControl.svelte.d.ts +1 -1
  59. package/src/components/theme.scss +4 -11
  60. package/src/helpers/index.ts +60 -64
  61. package/src/typings.ts +42 -25
  62. package/dist/index.css +0 -888
  63. package/src/components/Toolbar/components/PencilEraserSize.svelte +0 -27
  64. /package/src/components/Toolbar/components/{Shapes.svelte → SelectShapes.svelte} +0 -0
@@ -0,0 +1,20 @@
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
+ <g stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" transform="rotate(0 10 10)">
10
+ <path
11
+ class="fastboard-icon-stroke-color"
12
+ clip-rule="evenodd"
13
+ d="m9.644 13.69 7.774-7.773a2.357 2.357 0 0 0-3.334-3.334l-7.773 7.774L8 12l1.643 1.69Z"
14
+ />
15
+ <path
16
+ class="fastboard-icon-stroke-color"
17
+ d="m13.25 3.417 3.333 3.333M10 10l2-2M5 15l3-3M2.156 17.894l1-1M5.453 19.029l-.144-1.407M2.377 11.887l.866 1.118M8.354 17.273l-1.194-.758M.953 14.652l1.408.13"
18
+ />
19
+ </g>
20
+ </svg>
@@ -0,0 +1,20 @@
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
+ <g stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" transform="rotate(0 10 10)">
10
+ <path
11
+ class="fastboard-icon-fill-color"
12
+ clip-rule="evenodd"
13
+ d="m9.644 13.69 7.774-7.773a2.357 2.357 0 0 0-3.334-3.334l-7.773 7.774L8 12l1.643 1.69Z"
14
+ />
15
+ <path
16
+ class="fastboard-icon-stroke-color"
17
+ d="m13.25 3.417 3.333 3.333M10 10l2-2M5 15l3-3M2.156 17.894l1-1M5.453 19.029l-.144-1.407M2.377 11.887l.866 1.118M8.354 17.273l-1.194-.758M.953 14.652l1.408.13"
18
+ />
19
+ </g>
20
+ </svg>
@@ -1,6 +1,3 @@
1
- /* eslint-disable @typescript-eslint/ban-ts-comment */
2
- // @ts-nocheck
3
-
4
1
  import Apps from "./Apps.svelte";
5
2
  import Arrow from "./Arrow.svelte";
6
3
  import ArrowBolded from "./ArrowBolded.svelte";
@@ -13,16 +10,18 @@ import Click from "./Click.svelte";
13
10
  import ClickFilled from "./ClickFilled.svelte";
14
11
  import Diamond from "./Diamond.svelte";
15
12
  import Down from "./Down.svelte";
13
+ import Drag from "./Drag.svelte";
14
+ import DragFilled from "./DragFilled.svelte";
16
15
  import Eraser from "./Eraser.svelte";
17
16
  import EraserFilled from "./EraserFilled.svelte";
17
+ import Laser from "./Laser.svelte";
18
+ import LaserFilled from "./LaserFilled.svelte";
18
19
  import Left from "./Left.svelte";
19
20
  import Line from "./Line.svelte";
20
21
  import LineBolded from "./LineBolded.svelte";
21
22
  import Minus from "./Minus.svelte";
22
23
  import Pencil from "./Pencil.svelte";
23
24
  import PencilFilled from "./PencilFilled.svelte";
24
- import PencilEraser from "./PencilEraser.svelte";
25
- import PencilEraserFilled from "./PencilEraserFilled.svelte";
26
25
  import Plus from "./Plus.svelte";
27
26
  import Rectangle from "./Rectangle.svelte";
28
27
  import RectangleBolded from "./RectangleBolded.svelte";
@@ -46,6 +45,8 @@ import WhiteboardAdd from "./WhiteboardAdd.svelte";
46
45
  import Play from "./Play.svelte";
47
46
  import Pause from "./Pause.svelte";
48
47
  import Loading from "./Loading.svelte";
48
+ import LaserPen from "./LaserPen.svelte";
49
+ import LaserPenFilled from "./LaserPenFilled.svelte";
49
50
 
50
51
  const Icons = {
51
52
  Apps,
@@ -60,16 +61,18 @@ const Icons = {
60
61
  ClickFilled,
61
62
  Diamond,
62
63
  Down,
64
+ Drag,
65
+ DragFilled,
63
66
  Eraser,
64
67
  EraserFilled,
68
+ Laser,
69
+ LaserFilled,
65
70
  Left,
66
71
  Line,
67
72
  LineBolded,
68
73
  Minus,
69
74
  Pencil,
70
75
  PencilFilled,
71
- PencilEraser,
72
- PencilEraserFilled,
73
76
  Plus,
74
77
  Rectangle,
75
78
  RectangleBolded,
@@ -93,6 +96,8 @@ const Icons = {
93
96
  Play,
94
97
  Pause,
95
98
  Loading,
99
+ LaserPen,
100
+ LaserPenFilled,
96
101
  };
97
102
 
98
103
  export default Icons;
@@ -28,14 +28,15 @@
28
28
  const name = "fastboard-page-control";
29
29
 
30
30
  $: writable = app?.writable;
31
- $: disabled = !$writable;
31
+ $: phase = app?.phase;
32
+ $: disabled = !($writable && $phase === "connected");
32
33
  $: t = i18n[language];
33
34
 
34
35
  let type: IconType;
35
36
  $: type = disabled ? "disable" : "normal";
36
37
 
37
- $: index = app?.pageIndex;
38
- $: length = app?.pageLength;
38
+ $: index = app?.sceneIndex;
39
+ $: length = app?.sceneLength;
39
40
  $: prev_disabled = disabled || !$index;
40
41
  $: next_disabled = disabled || $length == null || $index === $length - 1;
41
42
 
@@ -1,6 +1,6 @@
1
1
  import type { FastboardApp } from "@netless/fastboard-core";
2
2
  import type { Theme, Language, GenericIcon } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
3
+ import { SvelteComponentTyped } from "../../typings";
4
4
 
5
5
  export declare interface PageControlProps {
6
6
  app?: FastboardApp | null;
@@ -1,6 +1,6 @@
1
1
  import type { FastboardPlayer } from "@netless/fastboard-core";
2
2
  import type { Theme, Language, GenericIcon } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
3
+ import { SvelteComponentTyped } from "../../typings";
4
4
 
5
5
  export declare interface PlayerControlProps {
6
6
  player?: FastboardPlayer | null;
@@ -26,7 +26,8 @@
26
26
  const name = "fastboard-redo-undo";
27
27
 
28
28
  $: writable = app?.writable;
29
- $: disabled = !$writable;
29
+ $: phase = app?.phase;
30
+ $: disabled = !($writable && $phase === "connected");
30
31
  $: t = i18n[language];
31
32
 
32
33
  let type: IconType;
@@ -1,6 +1,6 @@
1
1
  import type { FastboardApp } from "@netless/fastboard-core";
2
2
  import type { Theme, Language, GenericIcon } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
3
+ import { SvelteComponentTyped } from "../../typings";
4
4
 
5
5
  export declare interface RedoUndoProps {
6
6
  app?: FastboardApp | null;
@@ -7,12 +7,12 @@ $name: "fastboard-toolbar";
7
7
  display: flex;
8
8
  align-items: center;
9
9
  position: relative;
10
- left: 0px;
11
- transition: left 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
10
+ transform: translateX(0);
11
+ transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
12
12
  pointer-events: none;
13
13
 
14
14
  &.collapsed {
15
- left: -100%;
15
+ transform: translateX(-100%);
16
16
  }
17
17
  }
18
18
 
@@ -71,8 +71,18 @@ $name: "fastboard-toolbar";
71
71
  }
72
72
 
73
73
  .#{$name}-btn {
74
- @include btn(32px, 4px, 8px);
74
+ @include btn(32px, 4px);
75
75
  }
76
76
 
77
77
  @import "./components/Slider.scss";
78
78
  @import "./components/Contents.scss";
79
+
80
+ .fastboard-right .#{$name}.collapsed {
81
+ transform: translateX(100%);
82
+ }
83
+
84
+ .fastboard-right .#{$name}-handler {
85
+ left: auto;
86
+ right: 100%;
87
+ transform: rotate(180deg);
88
+ }
@@ -1,32 +1,48 @@
1
1
  <script lang="ts">
2
- import type { FastboardApp } from "@netless/fastboard-core";
3
- import type { Language, Theme } from "../../typings";
4
- import type { ToolbarConfig } from ".";
2
+ import type { Color, FastboardApp } from "@netless/fastboard-core";
3
+ import type { Language, Theme, ToolbarConfig } from "../../typings";
5
4
  import { writable as svelte_writable } from "svelte/store";
6
5
  import { height } from "../../actions/height";
7
6
  import { clamp } from "../helpers";
7
+ import { default_items, default_colors } from "./components/constants";
8
8
  import Contents from "./components/Contents.svelte";
9
9
 
10
10
  export let app: FastboardApp | null | undefined = null;
11
11
  export let theme: Theme = "light";
12
12
  export let language: Language = "en";
13
13
  export let config: ToolbarConfig = {};
14
+ export let colors: Color[] | undefined = undefined;
14
15
 
15
16
  const name = "fastboard-toolbar";
16
17
  const extra_height = (32 + 4 + 4) * 2;
17
18
 
18
19
  $: writable = app?.writable;
19
- $: disabled = !$writable;
20
+ $: phase = app?.phase;
21
+ $: disabled = !($writable && $phase === "connected");
20
22
 
21
- let collapsed = false;
23
+ let collapsed = config.collapsed;
22
24
  let container_height = svelte_writable(0);
23
25
  let scroll_height = svelte_writable(0);
24
26
 
25
27
  $: computed_height = clamp($container_height, extra_height, $scroll_height + extra_height);
26
28
  $: scrollable = $scroll_height + extra_height > $container_height;
27
29
 
30
+ $: placement = config.placement || "left";
31
+ $: items = config.items || default_items;
28
32
  $: hide_apps = config.apps?.enable === false;
29
- $: eraser_type = config.eraser?.behavior || "both";
33
+
34
+ $: if (app?.manager && app?.manager.room) {
35
+ if (colors && !config.colors?.length) {
36
+ const floatBarOptions = (app?.manager.room as any).floatBarOptions as { colors?: Color[] };
37
+ if (floatBarOptions.colors) {
38
+ colors = floatBarOptions.colors as Color[];
39
+ }
40
+ } else {
41
+ colors = config.colors;
42
+ }
43
+ } else {
44
+ colors = default_colors;
45
+ }
30
46
  </script>
31
47
 
32
48
  <div class="{name} {theme}" class:collapsed use:height={container_height}>
@@ -39,35 +55,28 @@
39
55
  {scroll_height}
40
56
  {computed_height}
41
57
  {scrollable}
58
+ {placement}
59
+ {items}
42
60
  {hide_apps}
43
- {eraser_type}
61
+ {colors}
44
62
  />
45
63
  </div>
46
64
  <label class="{name}-handler {theme}">
47
65
  <input type="checkbox" bind:checked={collapsed} />
48
- <svg width="17" height="42" viewBox="0 0 17 42" fill="none">
66
+ <svg fill="none" stroke-width="2" viewBox="0 0 32 120">
49
67
  <path
50
- d="M0 41H12C14.2091 41 16 39.2091 16 37V5C16 2.79086 14.2091 1 12 1H0"
51
- stroke="#000"
52
68
  fill="#fff"
53
- class="{name}-handler-border-color {name}-handler-bg-color"
69
+ stroke="none"
70
+ d="m0 0 24 16q6 4 6 14v60q0 10-6 14L0 120"
71
+ class="{name}-handler-bg-color"
54
72
  />
73
+ <path stroke="#000" d="m0 0 24 16q6 4 6 14v60q0 10-6 14L0 120" class="{name}-handler-border-color" />
55
74
  {#if collapsed}
56
- <path
57
- fill-rule="evenodd"
58
- clip-rule="evenodd"
59
- d="M8 19L6 17V25L8 23L10 21L8 19ZM4 17H5V25H4V17Z"
60
- fill="#fff"
61
- class="{name}-handler-image-fill-color"
62
- />
75
+ <path stroke="#000" d="M10 52v16" class="{name}-handler-image-stroke-color" />
76
+ <path fill="#000" stroke="none" d="M14 52v16l8-8z" class="{name}-handler-image-fill-color" />
63
77
  {:else}
64
- <path
65
- fill-rule="evenodd"
66
- clip-rule="evenodd"
67
- d="M6 19L8 17V25L6 23L4 21L6 19ZM10 17H9V25H10V17Z"
68
- fill="#fff"
69
- class="{name}-handler-image-fill-color"
70
- />
78
+ <path stroke="#000" d="M20 52v16" class="{name}-handler-image-stroke-color" />
79
+ <path fill="#000" stroke="none" d="M16 52v16l-8-8z" class="{name}-handler-image-fill-color" />
71
80
  {/if}
72
81
  </svg>
73
82
  </label>
@@ -1,20 +1,6 @@
1
1
  import type { FastboardApp } from "@netless/fastboard-core";
2
- import type { Theme, Language } from "../../typings";
3
- import { SvelteComponentTyped } from "svelte";
4
-
5
- export declare interface ToolbarConfig {
6
- apps?: {
7
- enable?: boolean;
8
- };
9
- eraser?: {
10
- /**
11
- * - delete: remove shapes under eraser
12
- * - pencil: wipe out part of strokes under eraser, like a real eraser
13
- * - both (default): will show a panel to choose different behavior
14
- */
15
- behavior?: "delete" | "pencil" | "both";
16
- };
17
- }
2
+ import type { Theme, Language, ToolbarConfig } from "../../typings";
3
+ import { SvelteComponentTyped } from "../../typings";
18
4
 
19
5
  export declare interface ToolbarProps {
20
6
  app?: FastboardApp | null;
@@ -20,8 +20,8 @@ $name: "fastboard-toolbar";
20
20
  .#{$name}-triangle {
21
21
  width: 0px;
22
22
  height: 0px;
23
- border-bottom: 3px solid;
24
- border-left: 3px solid transparent;
23
+ border-bottom: 4px solid;
24
+ border-left: 4px solid transparent;
25
25
  position: absolute;
26
26
  bottom: 0;
27
27
  right: 0;
@@ -36,7 +36,7 @@ $name: "fastboard-toolbar";
36
36
  overflow: hidden;
37
37
  display: flex;
38
38
  flex-direction: column;
39
- gap: 0;
39
+ gap: 4px;
40
40
  }
41
41
 
42
42
  .#{$name}-tooltip {
@@ -60,6 +60,15 @@ $name: "fastboard-toolbar";
60
60
  display: none;
61
61
  }
62
62
 
63
+ .#{$name}-panel-switch-pencil {
64
+ display: flex;
65
+ }
66
+
67
+ .#{$name}-panel-switch-btn {
68
+ width: 24px;
69
+ height: 24px;
70
+ }
71
+
63
72
  .#{$name}-panel {
64
73
  display: flex;
65
74
  flex-direction: column;
@@ -72,17 +81,6 @@ $name: "fastboard-toolbar";
72
81
  background-color: rgba(#fff, 0.15);
73
82
  }
74
83
 
75
- .#{$name}-slider.pencil-eraser-size {
76
- width: 136px;
77
- }
78
-
79
- // .#{$name}-panel-btns {
80
- // // min-width: 108px;
81
-
82
- // // .#{$name}-btn {
83
- // // }
84
- // }
85
-
86
84
  .#{$name}-colors,
87
85
  .#{$name}-shapes {
88
86
  display: grid;
@@ -177,3 +175,10 @@ $name: "fastboard-toolbar";
177
175
  }
178
176
  }
179
177
  }
178
+
179
+ .fastboard-right .#{$name}-triangle {
180
+ right: auto;
181
+ left: 0;
182
+ border-left: 0;
183
+ border-right: 4px solid transparent;
184
+ }