diff --git a/blocksuite/affine/blocks/root/src/edgeless/edgeless-keyboard.ts b/blocksuite/affine/blocks/root/src/edgeless/edgeless-keyboard.ts
index 1df0ce912d..3fd19d5b9c 100644
--- a/blocksuite/affine/blocks/root/src/edgeless/edgeless-keyboard.ts
+++ b/blocksuite/affine/blocks/root/src/edgeless/edgeless-keyboard.ts
@@ -88,6 +88,9 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager {
p: () => {
this._setEdgelessTool('brush');
},
+ 'Shift-p': () => {
+ this._setEdgelessTool('highlighter');
+ },
e: () => {
this._setEdgelessTool('eraser');
},
diff --git a/blocksuite/affine/components/src/tooltip-content-with-shortcut/index.ts b/blocksuite/affine/components/src/tooltip-content-with-shortcut/index.ts
index 730fc07afb..a46483d8ef 100644
--- a/blocksuite/affine/components/src/tooltip-content-with-shortcut/index.ts
+++ b/blocksuite/affine/components/src/tooltip-content-with-shortcut/index.ts
@@ -1,5 +1,6 @@
import { css, html, LitElement } from 'lit';
import { property } from 'lit/decorators.js';
+import { repeat } from 'lit-html/directives/repeat.js';
export class TooltipContentWithShortcut extends LitElement {
static override styles = css`
@@ -9,6 +10,10 @@ export class TooltipContentWithShortcut extends LitElement {
align-items: center;
gap: 10px;
}
+ .tooltip__shortcuts {
+ display: flex;
+ gap: 2px;
+ }
.tooltip__shortcut {
font-size: 12px;
position: relative;
@@ -28,19 +33,30 @@ export class TooltipContentWithShortcut extends LitElement {
opacity: 0.2;
}
.tooltip__label {
+ display: flex;
+ flex: 1;
white-space: pre;
}
`;
+ get shortcuts() {
+ let shortcut = this.shortcut;
+ if (!shortcut) return [];
+ return shortcut.split(' ');
+ }
+
override render() {
- const { tip, shortcut, postfix } = this;
+ const { tip, shortcuts, postfix } = this;
return html`
`;
diff --git a/blocksuite/affine/gfx/brush/src/toolbar/components/pen/consts.ts b/blocksuite/affine/gfx/brush/src/toolbar/components/pen/consts.ts
new file mode 100644
index 0000000000..2e1df31d8a
--- /dev/null
+++ b/blocksuite/affine/gfx/brush/src/toolbar/components/pen/consts.ts
@@ -0,0 +1,29 @@
+import {
+ EdgelessBrushDarkIcon,
+ EdgelessBrushLightIcon,
+ EdgelessHighlighterDarkIcon,
+ EdgelessHighlighterLightIcon,
+} from './icons';
+import type { Pen } from './types';
+
+export const penIconMap = {
+ dark: {
+ brush: EdgelessBrushDarkIcon,
+ highlighter: EdgelessHighlighterDarkIcon,
+ },
+ light: {
+ brush: EdgelessBrushLightIcon,
+ highlighter: EdgelessHighlighterLightIcon,
+ },
+};
+
+export const penInfoMap: { [k in Pen]: { tip: string; shortcut: string } } = {
+ brush: {
+ tip: 'Pen',
+ shortcut: 'P',
+ },
+ highlighter: {
+ tip: 'Highlighter',
+ shortcut: '⇧ P',
+ },
+};
diff --git a/blocksuite/affine/gfx/brush/src/toolbar/components/pen/pen-menu.ts b/blocksuite/affine/gfx/brush/src/toolbar/components/pen/pen-menu.ts
index 5bc6a922b8..92c5e74706 100644
--- a/blocksuite/affine/gfx/brush/src/toolbar/components/pen/pen-menu.ts
+++ b/blocksuite/affine/gfx/brush/src/toolbar/components/pen/pen-menu.ts
@@ -7,11 +7,16 @@ import {
import type { ColorEvent } from '@blocksuite/affine-shared/utils';
import { EdgelessToolbarToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar';
import { SignalWatcher } from '@blocksuite/global/lit';
-import { computed, type Signal } from '@preact/signals-core';
+import {
+ computed,
+ type ReadonlySignal,
+ type Signal,
+} from '@preact/signals-core';
import { css, html, LitElement, type TemplateResult } from 'lit';
import { property } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js';
+import { penInfoMap } from './consts';
import type { Pen, PenMap } from './types';
export class EdgelessPenMenu extends EdgelessToolbarToolMixin(
@@ -26,8 +31,14 @@ export class EdgelessPenMenu extends EdgelessToolbarToolMixin(
.pens {
display: flex;
+ height: 100%;
padding: 0 4px;
- align-items: center;
+ align-items: flex-end;
+
+ edgeless-tool-icon-button {
+ display: flex;
+ align-self: flex-start;
+ }
.pen-wrapper {
display: flex;
@@ -36,7 +47,7 @@ export class EdgelessPenMenu extends EdgelessToolbarToolMixin(
align-items: flex-end;
justify-content: center;
position: relative;
- transform: translateY(10px);
+ transform: translateY(-2px);
transition-property: color, transform;
transition-duration: 300ms;
transition-timing-function: ease-in-out;
@@ -46,7 +57,7 @@ export class EdgelessPenMenu extends EdgelessToolbarToolMixin(
.pen-wrapper:hover,
.pen-wrapper:active,
.pen-wrapper[data-active] {
- transform: translateY(-10px);
+ transform: translateY(-22px);
}
}
@@ -56,6 +67,8 @@ export class EdgelessPenMenu extends EdgelessToolbarToolMixin(
}
menu-divider {
+ display: flex;
+ align-self: center;
height: 24px;
margin: 0 9px;
}
@@ -83,42 +96,64 @@ export class EdgelessPenMenu extends EdgelessToolbarToolMixin(
override render() {
const {
_theme$: { value: theme },
- color$: { value: currentColor },
colors$: {
value: { brush: brushColor, highlighter: highlighterColor },
},
- pen$: { value: pen },
penIconMap$: {
value: { brush: brushIcon, highlighter: highlighterIcon },
},
+ penInfo$: {
+ value: { type, color },
+ },
} = this;
return html`
-
`}
+ .tooltipOffset=${20}
+ .hover=${false}
@click=${() => this._onPickPen('brush')}
>
- ${brushIcon}
-
-
+ ${brushIcon}
+
+
+
+
`}
+ .tooltipOffset=${20}
+ .hover=${false}
@click=${() => this._onPickPen('highlighter')}
>
- ${highlighterIcon}
-
+
+ ${highlighterIcon}
+
+