chore(editor): change edgeless-text default color to black (#12361)

Closes: [BS-3506](https://linear.app/affine-design/issue/BS-3506/edgeless-text-默认改为黑色)

### Dark
<img width="691" alt="Screenshot 2025-05-19 at 19 32 52" src="https://github.com/user-attachments/assets/2927d13b-0300-4293-8f8f-7891fd87a680" />

### Light
<img width="639" alt="Screenshot 2025-05-19 at 19 33 05" src="https://github.com/user-attachments/assets/4429f6f9-b374-4b17-87f4-ae09204f1538" />

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved edgeless text block styling to support theme-based color, font, and alignment settings.

- **Style**
  - Updated the default text color in edgeless text blocks to black, with support for separate dark and light mode colors.

- **Bug Fixes**
  - Ensured the color picker and block rendering reflect the updated default color.

- **Tests**
  - Adjusted tests and snapshots to expect the new default color and theme-based color structure.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
fundon
2025-05-19 16:51:02 +00:00
parent cae7db07ee
commit 4d6a3731a3
13 changed files with 56 additions and 14 deletions
@@ -26,6 +26,7 @@ import {
GfxViewInteractionExtension,
type SelectedContext,
} from '@blocksuite/std/gfx';
import { computed } from '@preact/signals-core';
import { css, html } from 'lit';
import { query, state } from 'lit/decorators.js';
import { type StyleInfo, styleMap } from 'lit/directives/style-map.js';
@@ -82,6 +83,23 @@ export class EdgelessTextBlockComponent extends GfxBlockComponent<EdgelessTextBl
});
}
private readonly _style$ = computed(() => {
const {
color$: { value: color },
fontFamily$: { value: fontFamily },
fontStyle$: { value: fontStyle },
fontWeight$: { value: fontWeight },
textAlign$: { value: textAlign },
} = this.model.props;
return {
color,
fontFamily,
fontStyle,
fontWeight,
textAlign,
};
});
checkWidthOverflow(width: number) {
let wValid = true;
@@ -365,7 +383,7 @@ export class EdgelessTextBlockComponent extends GfxBlockComponent<EdgelessTextBl
override renderPageContent() {
const { color, fontFamily, fontStyle, fontWeight, textAlign } =
this.model.props;
this._style$.value;
const themeProvider = this.std.get(ThemeProvider);
const textColor = themeProvider.generateColorProperty(
color,
@@ -6,7 +6,7 @@ import {
type IModelCoord,
TextUtils,
} from '@blocksuite/affine-block-surface';
import { TextElementModel } from '@blocksuite/affine-model';
import { DefaultTheme, TextElementModel } from '@blocksuite/affine-model';
import type { RichText } from '@blocksuite/affine-rich-text';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { getSelectedRect } from '@blocksuite/affine-shared/utils';
@@ -432,7 +432,7 @@ export class EdgelessTextEditor extends WithDisposable(ShadowlessElement) {
const isEmpty = !text.length && !this._isComposition;
const color = this.std
.get(ThemeProvider)
.generateColorProperty(this.element.color, '#000000');
.generateColorProperty(this.element.color, DefaultTheme.textColor);
return html`<div
style=${styleMap({
@@ -115,7 +115,7 @@ export const DefaultTheme: Theme = {
black: Black,
white: White,
transparent: Transparent,
textColor: Medium.Blue,
textColor: Black,
shapeTextColor: pureBlack,
shapeStrokeColor: Medium.Yellow,
shapeFillColor: Medium.Yellow,
@@ -232,7 +232,7 @@ describe('apply last props', () => {
throw new Error('id is not found');
}
const text = service.crud.getElementById(id) as EdgelessTextBlockModel;
expect(text.props.color).toBe(DefaultTheme.textColor);
expect(text.props.color).toStrictEqual(DefaultTheme.textColor);
expect(text.props.fontFamily).toBe(FontFamily.Inter);
service.crud.updateElement(id, {
color: DefaultTheme.StrokeColorShortMap.Green,
@@ -61,7 +61,7 @@ test('should update color of edgeless text when switching theme', async ({
let pickedColor = await pickedColorButton.locator('svg').getAttribute('fill');
let textColor = await getEdgelessTextColor(text);
await expect(pickedColorButton.getByLabel('MediumBlue')).toHaveCount(1);
await expect(pickedColorButton.getByLabel('Black')).toHaveCount(1);
expect(pickedColor).toBe(textColor);
const blackColorButton = colorPicker
@@ -34,7 +34,10 @@
"flavour": "affine:edgeless-text",
"id": "4",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -26,7 +26,10 @@
"flavour": "affine:edgeless-text",
"id": "4",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -25,7 +25,10 @@
"flavour": "affine:edgeless-text",
"id": "4",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -26,7 +26,10 @@
"flavour": "affine:edgeless-text",
"id": "4",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -26,7 +26,10 @@
"flavour": "affine:edgeless-text",
"id": "4",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -28,7 +28,10 @@
"flavour": "affine:edgeless-text",
"id": "3",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -28,7 +28,10 @@
"flavour": "affine:edgeless-text",
"id": "3",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",
@@ -28,7 +28,10 @@
"flavour": "affine:edgeless-text",
"id": "3",
"props": {
"color": "#84cfff",
"color": {
"dark": "#ffffff",
"light": "#000000"
},
"fontFamily": "blocksuite:surface:Inter",
"fontStyle": "normal",
"fontWeight": "400",