From 9c0b48b674f366f71e58f0cfeabb0837641bf7fa Mon Sep 17 00:00:00 2001 From: hyrious Date: Tue, 16 Jan 2024 14:32:42 +0800 Subject: [PATCH] feat: new toolbar config 'placement' and 'items' --- CHANGELOG.md | 4 + packages/fastboard-react/test/main.tsx | 4 +- .../src/components/Fastboard/Fastboard.scss | 11 ++ .../src/components/Fastboard/Fastboard.svelte | 12 +- .../src/components/Toolbar/Toolbar.scss | 10 ++ .../src/components/Toolbar/Toolbar.svelte | 4 + .../Toolbar/components/Contents.scss | 7 + .../Toolbar/components/Contents.svelte | 122 +++++++----------- .../{Shapes.svelte => SelectShapes.svelte} | 0 .../Toolbar/definitions/Clear.svelte | 13 ++ .../Toolbar/definitions/Clicker.svelte | 19 +++ .../Toolbar/definitions/Eraser.svelte | 19 +++ .../Toolbar/definitions/Pencil.svelte | 20 +++ .../Toolbar/definitions/Selector.svelte | 19 +++ .../Toolbar/definitions/Shapes.svelte | 41 ++++++ .../Toolbar/definitions/Text.svelte | 20 +++ packages/fastboard-ui/src/typings.ts | 26 ++-- packages/fastboard-ui/test/App.svelte | 46 ++++++- packages/fastboard-ui/test/mock-app.ts | 9 +- 19 files changed, 313 insertions(+), 93 deletions(-) rename packages/fastboard-ui/src/components/Toolbar/components/{Shapes.svelte => SelectShapes.svelte} (100%) create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Clear.svelte create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Clicker.svelte create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Eraser.svelte create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Pencil.svelte create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Selector.svelte create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Shapes.svelte create mode 100644 packages/fastboard-ui/src/components/Toolbar/definitions/Text.svelte diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c3eb2cb..6a921613 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + +- Added toolbar config `placement: "left" | "right"` and `items: ToolbarItem[]` to further control the style of toolbar. + ## 0.3.10 - Added method `jumpPage(index)`. Requires `@netless/window-manager` at least 0.4.63. diff --git a/packages/fastboard-react/test/main.tsx b/packages/fastboard-react/test/main.tsx index 23c8288a..fb9e42bf 100644 --- a/packages/fastboard-react/test/main.tsx +++ b/packages/fastboard-react/test/main.tsx @@ -12,7 +12,7 @@ const search = new URLSearchParams(location.search); const FastboardLayout: FastboardUIConfig = { page_control: { enable: false }, redo_undo: { enable: true }, - toolbar: { enable: true }, + toolbar: { enable: true, placement: "right" }, zoom_control: { enable: true }, }; @@ -26,7 +26,7 @@ function App() { uid: genUID(), uuid: import.meta.env.VITE_ROOM_UUID, roomToken: import.meta.env.VITE_ROOM_TOKEN, - isWritable: search.get("isWritable") === "1", + isWritable: search.get("isWritable") !== "0", }, managerConfig: { cursor: true, diff --git a/packages/fastboard-ui/src/components/Fastboard/Fastboard.scss b/packages/fastboard-ui/src/components/Fastboard/Fastboard.scss index 984ddad4..35ce4fc1 100644 --- a/packages/fastboard-ui/src/components/Fastboard/Fastboard.scss +++ b/packages/fastboard-ui/src/components/Fastboard/Fastboard.scss @@ -28,6 +28,17 @@ } } +.fastboard-right { + @extend .fastboard-left; + left: auto; + right: 0; + + .fastboard-toolbar { + padding-left: 0; + padding-right: 16px; + } +} + .fastboard-bottom-left { display: flex; gap: 10px; diff --git a/packages/fastboard-ui/src/components/Fastboard/Fastboard.svelte b/packages/fastboard-ui/src/components/Fastboard/Fastboard.svelte index bada6c29..33a4140f 100644 --- a/packages/fastboard-ui/src/components/Fastboard/Fastboard.svelte +++ b/packages/fastboard-ui/src/components/Fastboard/Fastboard.svelte @@ -39,6 +39,13 @@ layout = "visible"; } + $: toolbar_has_items = + !config.toolbar || + !config.toolbar.items || + !config.toolbar.apps || + config.toolbar.items.length > 0 || + config.toolbar.apps.enable !== false; + $: try { if (app && container) { app.bindContainer(container); @@ -72,7 +79,10 @@
-
+
{#if config.toolbar?.enable !== false} {/if} diff --git a/packages/fastboard-ui/src/components/Toolbar/Toolbar.scss b/packages/fastboard-ui/src/components/Toolbar/Toolbar.scss index d36e37e5..7a298a58 100644 --- a/packages/fastboard-ui/src/components/Toolbar/Toolbar.scss +++ b/packages/fastboard-ui/src/components/Toolbar/Toolbar.scss @@ -76,3 +76,13 @@ $name: "fastboard-toolbar"; @import "./components/Slider.scss"; @import "./components/Contents.scss"; + +.fastboard-right .#{$name}.collapsed { + transform: translateX(100%); +} + +.fastboard-right .#{$name}-handler { + left: auto; + right: 100%; + transform: rotate(180deg); +} diff --git a/packages/fastboard-ui/src/components/Toolbar/Toolbar.svelte b/packages/fastboard-ui/src/components/Toolbar/Toolbar.svelte index 54188d39..157c0dc3 100644 --- a/packages/fastboard-ui/src/components/Toolbar/Toolbar.svelte +++ b/packages/fastboard-ui/src/components/Toolbar/Toolbar.svelte @@ -24,6 +24,8 @@ $: computed_height = clamp($container_height, extra_height, $scroll_height + extra_height); $: scrollable = $scroll_height + extra_height > $container_height; + $: placement = config.placement || "left"; + $: items = config.items; $: hide_apps = config.apps?.enable === false; @@ -37,6 +39,8 @@ {scroll_height} {computed_height} {scrollable} + {placement} + {items} {hide_apps} />
diff --git a/packages/fastboard-ui/src/components/Toolbar/components/Contents.scss b/packages/fastboard-ui/src/components/Toolbar/components/Contents.scss index 6b25cb9a..f138059d 100644 --- a/packages/fastboard-ui/src/components/Toolbar/components/Contents.scss +++ b/packages/fastboard-ui/src/components/Toolbar/components/Contents.scss @@ -166,3 +166,10 @@ $name: "fastboard-toolbar"; } } } + +.fastboard-right .#{$name}-triangle { + right: auto; + left: 0; + border-left: 0; + border-right: 4px solid transparent; +} diff --git a/packages/fastboard-ui/src/components/Toolbar/components/Contents.svelte b/packages/fastboard-ui/src/components/Toolbar/components/Contents.svelte index af476376..18dcc414 100644 --- a/packages/fastboard-ui/src/components/Toolbar/components/Contents.svelte +++ b/packages/fastboard-ui/src/components/Toolbar/components/Contents.svelte @@ -1,24 +1,30 @@ + + diff --git a/packages/fastboard-ui/src/components/Toolbar/definitions/Clicker.svelte b/packages/fastboard-ui/src/components/Toolbar/definitions/Clicker.svelte new file mode 100644 index 00000000..0527e5aa --- /dev/null +++ b/packages/fastboard-ui/src/components/Toolbar/definitions/Clicker.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/fastboard-ui/src/components/Toolbar/definitions/Eraser.svelte b/packages/fastboard-ui/src/components/Toolbar/definitions/Eraser.svelte new file mode 100644 index 00000000..dd51f29b --- /dev/null +++ b/packages/fastboard-ui/src/components/Toolbar/definitions/Eraser.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/fastboard-ui/src/components/Toolbar/definitions/Pencil.svelte b/packages/fastboard-ui/src/components/Toolbar/definitions/Pencil.svelte new file mode 100644 index 00000000..1515dbca --- /dev/null +++ b/packages/fastboard-ui/src/components/Toolbar/definitions/Pencil.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/fastboard-ui/src/components/Toolbar/definitions/Selector.svelte b/packages/fastboard-ui/src/components/Toolbar/definitions/Selector.svelte new file mode 100644 index 00000000..8f0eb295 --- /dev/null +++ b/packages/fastboard-ui/src/components/Toolbar/definitions/Selector.svelte @@ -0,0 +1,19 @@ + + + diff --git a/packages/fastboard-ui/src/components/Toolbar/definitions/Shapes.svelte b/packages/fastboard-ui/src/components/Toolbar/definitions/Shapes.svelte new file mode 100644 index 00000000..174816f4 --- /dev/null +++ b/packages/fastboard-ui/src/components/Toolbar/definitions/Shapes.svelte @@ -0,0 +1,41 @@ + + + diff --git a/packages/fastboard-ui/src/components/Toolbar/definitions/Text.svelte b/packages/fastboard-ui/src/components/Toolbar/definitions/Text.svelte new file mode 100644 index 00000000..8738d4f3 --- /dev/null +++ b/packages/fastboard-ui/src/components/Toolbar/definitions/Text.svelte @@ -0,0 +1,20 @@ + + + diff --git a/packages/fastboard-ui/src/typings.ts b/packages/fastboard-ui/src/typings.ts index d8e0d988..31b40dfc 100644 --- a/packages/fastboard-ui/src/typings.ts +++ b/packages/fastboard-ui/src/typings.ts @@ -23,25 +23,21 @@ export type GenericIcon = { export type I18nData = Record>; +export type ToolbarItem = "clicker" | "selector" | "pencil" | "text" | "shapes" | "eraser" | "clear"; + export interface ToolbarConfig { - apps?: { - enable?: boolean; - }; + /** @default "left" */ + placement?: "left" | "right"; + /** @default ["clicker", "selector", "pencil", "text", "shapes", "eraser", "clear"] */ + items?: ToolbarItem[]; + apps?: { enable?: boolean }; } export interface FastboardUIConfig { - toolbar?: { - enable?: boolean; - } & ToolbarConfig; - redo_undo?: { - enable?: boolean; - }; - zoom_control?: { - enable?: boolean; - }; - page_control?: { - enable?: boolean; - }; + toolbar?: { enable?: boolean } & ToolbarConfig; + redo_undo?: { enable?: boolean }; + zoom_control?: { enable?: boolean }; + page_control?: { enable?: boolean }; } export interface ReplayFastboardUIConfig { diff --git a/packages/fastboard-ui/test/App.svelte b/packages/fastboard-ui/test/App.svelte index b99879df..673b13a5 100644 --- a/packages/fastboard-ui/test/App.svelte +++ b/packages/fastboard-ui/test/App.svelte @@ -1,6 +1,6 @@