Saul-Mirone
9cfd1c321e
fix(editor): missing re-subscription for slots on store ( #10750 )
2025-03-11 04:07:06 +00:00
Saul-Mirone
4dd5f2ffb0
feat(editor): add viewport element service ( #10727 )
2025-03-10 04:26:18 +00:00
EYHN
4677049b5c
feat(core): add public user service ( #10695 )
2025-03-07 08:00:27 +00:00
Saul-Mirone
84e2dda3f8
refactor(editor): separate lit and slot in global ( #10666 )
2025-03-06 10:24:59 +00:00
fundon
ec9bd1f383
feat(editor): add toolbar registry extension ( #9572 )
...
### What's Changed!
#### Added
Manage various types of toolbars uniformly in one place.
* `affine-toolbar-widget`
* `ToolbarRegistryExtension`
The toolbar currently supports and handles several scenarios:
1. Select blocks: `BlockSelection`
2. Select text: `TextSelection` or `NativeSelection`
3. Hover a link: `affine-link` and `affine-reference`
#### Removed
Remove redundant toolbar implementations.
* `attachment` toolbar
* `bookmark` toolbar
* `embed` toolbar
* `formatting` toolbar
* `affine-link` toolbar
* `affine-reference` toolbar
### How to migrate?
Here is an example that can help us migrate some unrefactored toolbars:
Check out the more detailed types of [`ToolbarModuleConfig`](https://github.com/toeverything/AFFiNE/blob/c178debf2d49c40b753e1bcaa6f07270bdde7401/blocksuite/affine/shared/src/services/toolbar-service/config.ts ).
1. Add toolbar configuration file to a block type, such as bookmark block: [`config.ts`](https://github.com/toeverything/AFFiNE/blob/c178debf2d49c40b753e1bcaa6f07270bdde7401/blocksuite/affine/block-bookmark/src/configs/toolbar.ts )
```ts
export const builtinToolbarConfig = {
actions: [
{
id: 'a.preview',
content(ctx) {
const model = ctx.getCurrentModelBy(BlockSelection, BookmarkBlockModel);
if (!model) return null;
const { url } = model;
return html`<affine-link-preview .url=${url}></affine-link-preview>`;
},
},
{
id: 'b.conversions',
actions: [
{
id: 'inline',
label: 'Inline view',
run(ctx) {
},
},
{
id: 'card',
label: 'Card view',
disabled: true,
},
{
id: 'embed',
label: 'Embed view',
disabled(ctx) {
},
run(ctx) {
},
},
],
content(ctx) {
},
} satisfies ToolbarActionGroup<ToolbarAction>,
{
id: 'c.style',
actions: [
{
id: 'horizontal',
label: 'Large horizontal style',
},
{
id: 'list',
label: 'Small horizontal style',
},
],
content(ctx) {
},
} satisfies ToolbarActionGroup<ToolbarAction>,
{
id: 'd.caption',
tooltip: 'Caption',
icon: CaptionIcon(),
run(ctx) {
},
},
{
placement: ActionPlacement.More,
id: 'a.clipboard',
actions: [
{
id: 'copy',
label: 'Copy',
icon: CopyIcon(),
run(ctx) {
},
},
{
id: 'duplicate',
label: 'Duplicate',
icon: DuplicateIcon(),
run(ctx) {
},
},
],
},
{
placement: ActionPlacement.More,
id: 'b.refresh',
label: 'Reload',
icon: ResetIcon(),
run(ctx) {
},
},
{
placement: ActionPlacement.More,
id: 'c.delete',
label: 'Delete',
icon: DeleteIcon(),
variant: 'destructive',
run(ctx) {
},
},
],
} as const satisfies ToolbarModuleConfig;
```
2. Add configuration extension to a block spec: [bookmark's spec](https://github.com/toeverything/AFFiNE/blob/c178debf2d49c40b753e1bcaa6f07270bdde7401/blocksuite/affine/block-bookmark/src/bookmark-spec.ts )
```ts
const flavour = BookmarkBlockSchema.model.flavour;
export const BookmarkBlockSpec: ExtensionType[] = [
...,
ToolbarModuleExtension({
id: BlockFlavourIdentifier(flavour),
config: builtinToolbarConfig,
}),
].flat();
```
3. If the bock type already has a toolbar configuration built in, we can customize it in the following ways:
Check out the [editor's config](https://github.com/toeverything/AFFiNE/blob/c178debf2d49c40b753e1bcaa6f07270bdde7401/packages/frontend/core/src/blocksuite/extensions/editor-config/index.ts#L51C4-L54C8 ) file.
```ts
// Defines a toolbar configuration for the bookmark block type
const customBookmarkToolbarConfig = {
actions: [
...
]
} as const satisfies ToolbarModuleConfig;
// Adds it into the editor's config
ToolbarModuleExtension({
id: BlockFlavourIdentifier('custom:affine:bookmark'),
config: customBookmarkToolbarConfig,
}),
```
4. If we want to extend the global:
```ts
// Defines a toolbar configuration
const customWildcardToolbarConfig = {
actions: [
...
]
} as const satisfies ToolbarModuleConfig;
// Adds it into the editor's config
ToolbarModuleExtension({
id: BlockFlavourIdentifier('custom:affine:*'),
config: customWildcardToolbarConfig,
}),
```
Currently, only most toolbars in page mode have been refactored. Next is edgeless mode.
2025-03-06 06:46:03 +00:00
Saul-Mirone
2b30d756e2
refactor(editor): replace debounce and throttle with lodash ( #10639 )
2025-03-06 04:46:52 +00:00
EYHN
201c3438ba
feat(core): add user list service for blocksuite ( #10627 )
2025-03-05 10:06:14 +00:00
Flrande
bd62634a76
feat(editor): add callout block ( #10563 )
...
- Add `CalloutBlockModel `
- Implement `CalloutBlockComponent `
- Integrate with slash menu (/)
2025-03-05 09:28:51 +00:00
Saul-Mirone
a587abca85
feat(editor): add block meta service ( #10561 )
2025-03-03 06:13:06 +00:00
Saul-Mirone
4eae3cc66a
feat(editor): add user list services ( #10555 )
2025-03-03 03:15:00 +00:00
Saul-Mirone
fdde818ddd
feat(editor): add block meta feature flag ( #10548 )
2025-03-03 01:45:33 +00:00
Saul-Mirone
f23f29610c
refactor(editor): remove stable feature flags ( #10547 )
2025-03-02 08:41:12 +00:00
Saul-Mirone
6353e72078
feat(editor): add embed option config extension ( #10540 )
...
This PR implements a significant refactoring of the embed block services across multiple components (Figma, GitHub, Loom, and YouTube) in the BlockSuite codebase. Here are the key changes:
1. **Architecture Change**:
- Moves from a dynamic registration pattern to a more declarative configuration approach
- Replaces `EmbedOptionProvider.registerEmbedBlockOptions()` calls with a new `EmbedOptionConfig` factory function
2. **Service Refactoring**:
- For each embed block type (Figma, GitHub, Loom, YouTube):
- Separates configuration from service logic
- Creates new `EmbedBlockOptionConfig` constants using the new `EmbedOptionConfig` factory
- Removes the `mounted()` lifecycle hook from services where it was only used for registration
3. **Core Changes**:
- In `embed-option-service.ts`:
- Introduces new `EmbedOptionConfigIdentifier` for dependency injection
- Adds `EmbedOptionConfig` factory function for creating embed configurations
- Updates `EmbedOptionService` constructor to automatically register configurations
- Modifies DI setup to include `StdIdentifier` dependency
4. **Spec Updates**:
- Updates all block specs to include the new configuration objects
- Maintains existing functionality while using the new pattern
The main benefit of this refactoring is:
- More declarative configuration approach
- Better separation of concerns
- Reduced runtime registration code
- More predictable initialization of embed options
2025-03-01 16:40:18 +00:00
L-Sun
d476d3b1df
fix(editor): android keyboard can not be opened ( #10502 )
...
Close [BS-2674](https://linear.app/affine-design/issue/BS-2674/[android]-%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%8C%BA%E5%9F%9F%E7%82%B9%E5%87%BB%E5%90%8E%E6%97%A0%E6%B3%95%E6%BF%80%E6%B4%BB%E9%94%AE%E7%9B%98 ) [BS-2609](https://linear.app/affine-design/issue/BS-2609/[android]-%E8%BE%93%E5%85%A5%E7%9A%84-toolbar-%E6%B2%A1%E6%9C%89%E4%BA%86 )
2025-02-28 08:23:26 +00:00
L-Sun
b995b4f965
chore(editor): update page block telemetry ( #10487 )
...
Close [BS-2711](https://linear.app/affine-design/issue/BS-2711/page-block埋点更新 )
2025-02-27 09:58:58 +00:00
Saul-Mirone
fd6d96a38e
refactor(editor): use transformer from store when possible ( #10453 )
2025-02-26 14:15:04 +00:00
zzj3720
ba91b36cc3
feat(editor): add block creation tracking ( #10294 )
...
fix: PD-2090
2025-02-20 02:25:29 +00:00
L-Sun
e639f08b71
chore(editor): remove page block feature flag ( #10251 )
2025-02-18 09:25:05 +00:00
doouding
88095a87a8
fix: create linked-doc block when content can't be drop as gfx block ( #10250 )
2025-02-18 08:40:57 +00:00
L-Sun
85e413f8c8
chore(editor): add telemetry track to display mode of note ( #10192 )
...
Close [BS-2468](https://linear.app/affine-design/issue/BS-2468/analytics-for-page-block-polish )
2025-02-17 03:23:55 +00:00
L-Sun
9f56a21d8a
feat(editor): add animation for switching to edgeless mode firstly ( #10021 )
...
Close [BS-2327](https://linear.app/affine-design/issue/BS-2327/page-block-%E5%9C%A8-edgeless-%E5%88%87%E6%8D%A2%E7%BC%A9%E6%94%BE%E5%8A%A8%E7%94%BB )
### What Changes:
- Add a zoom animation when switching to edgeless mode firstly
- Move viewport record from `sessionStorage` to `localStorage`
https://github.com/user-attachments/assets/dac11aab-76bd-44b1-8c0e-4a8a10919841
2025-02-10 07:41:10 +00:00
L-Sun
459972fe6c
fix(editor): add missing zod schema for edgeless frame ( #10024 )
...
Related to https://github.com/toeverything/AFFiNE/pull/9970#discussion_r1944971309
### What changes:
- Add missing zod shcema for edgeless basic props
- Change `applyLastProps` to generic function for better return type inference of
- Fix: add `ZodIntersection` case to `makeDeepOptional`
2025-02-07 12:49:59 +00:00
L-Sun
891d9df0b1
feat(editor): show doc title in page block ( #9975 )
...
Close [BS-2392](https://linear.app/affine-design/issue/BS-2392/page-block-需要显示文章title )
### What Changes
- Add `<doc-title>` to edgeless page block (a.k.a the first page visible note block)
- Refactors:
- Move `<doc-title>` to `@blocksuite/affine-component`, but you can aslo import it from `@blocksuite/preset`
- Extract `<edgeless-note-mask>` and `<edgeless-note-background>` from `<affine-edgeless-note>` to a seperate file
- Rewrite styles of `<affine-edgeless-note>` with `@vanilla-extract/css`
https://github.com/user-attachments/assets/a0c03239-803e-4bfa-b30e-33b919213b12
2025-02-06 21:18:28 +00:00
Saul-Mirone
f3f6e8c6ac
refactor(editor): remove attachment and image block service ( #9909 )
2025-01-28 20:53:23 +00:00
zzj3720
5a5779c05a
feat(editor): simple table block ( #9740 )
...
close: BS-2122, BS-2125, BS-2124, BS-2420, PD-2073, BS-2126, BS-2469, BS-2470, BS-2478, BS-2471
2025-01-24 10:07:57 +00:00
doouding
1560880abd
fix: drag embed block preview ( #9791 )
...
Fixes [BS-1518](https://linear.app/affine-design/issue/BS-1518/拖拽一个-embed-view-的-linked-doc,其-indicator-是错误的 )
2025-01-20 09:25:05 +00:00
donteatfriedrice
4bd43a698c
refactor(editor): refactor linkPreviewer as an extension and remove bookmark service ( #9754 )
...
[BS-2427](https://linear.app/affine-design/issue/BS-2427/移除-bookmark-block-service ) [BS-2418](https://linear.app/affine-design/issue/BS-2418/linkpreviewer-重构成插件 )
2025-01-20 04:18:00 +00:00
L-Sun
6ba802fb17
feat(editor): append note to page button ( #9762 )
...
Close [BS-2310](https://linear.app/affine-design/issue/BS-2310/note-display-in-page-%E7%9A%84%E8%A1%8C%E4%B8%BA ), [BS-2312](https://linear.app/affine-design/issue/BS-2312/edgeless-note-%E7%9A%84-element-toolbar-%E6%B7%BB%E5%8A%A0display-in-page%E6%8C%89%E9%92%AE ) and [BS-2313](https://linear.app/affine-design/issue/BS-2313/添加display-in-page的toast提示,以及打开toc的按钮 )
2025-01-19 08:35:02 +00:00
L-Sun
ad814a0f4f
feat(editor): add sidebar service ( #9761 )
2025-01-17 23:42:50 +08:00
L-Sun
94c9717a35
feat(editor): edgeless page block toolbar ( #9707 )
...
Close [BS-2315](https://linear.app/affine-design/issue/BS-2315/page-block-header )
### What Changes
- Add header toolbar to page block (the first note in canvas)
- Add e2e tests
- Add some edgeless e2e test utils. **The package `@blocksuite/affine` was added to `"@affine-test/kit"`**
2025-01-15 12:04:44 +00:00
donteatfriedrice
4f421efb22
fix(editor): init default theme observer value according to data-theme ( #9698 )
2025-01-15 04:04:06 +00:00
Mirone
446b31b621
refactor(editor): rename job to transformer ( #9639 )
2025-01-11 12:04:07 +08:00
pengx17
f78857bb11
feat(editor): add more open doc options to editor toolbar ( #9588 )
...
fix AF-2036, AF-2092
2025-01-09 08:04:21 +00:00
Saul-Mirone
d21ef47ae8
chore(editor): rename std.doc to std.store ( #9596 )
2025-01-09 04:16:28 +00:00
Saul-Mirone
3683297ccf
feat(editor): add feature flag service ( #9592 )
2025-01-08 15:46:31 +00:00
Saul-Mirone
5842d45ab1
feat(editor): merge store and blocks ( #9591 )
2025-01-08 13:01:19 +00:00
fundon
69e73af2a8
refactor(editor): add native clipboard extension ( #9502 )
...
Closes: [BS-2239](https://linear.app/affine-design/issue/BS-2239/不应该通过window注入affine的api )
2025-01-06 15:36:43 +00:00
Saul-Mirone
f778d1a28a
refactor(editor): move extension to store ( #9552 )
2025-01-06 15:15:14 +00:00
Saul-Mirone
c773982ced
refactor(editor): rename store api ( #9518 )
2025-01-04 12:51:56 +00:00
Saul-Mirone
4457cb7266
refactor(editor): rename doc to blocks ( #9510 )
2025-01-03 12:49:33 +00:00
Saul-Mirone
897c7d4284
refactor(editor): should not rely on doc collection type ( #9501 )
2025-01-03 06:30:27 +00:00
doouding
cb5d7eaabc
feat: add scroll wheel zoom setting ( #9476 )
...
### Changed
Add `scroll wheel to zoom` setting option, when the option enables, user can zoom in and out with scroll wheel without pressing the cmd/ctrl key.
2025-01-03 06:09:10 +00:00
Saul-Mirone
8b6c81f76d
refactor(editor): reduce dependency to doc collection ( #9492 )
2025-01-03 01:59:25 +00:00
Saul-Mirone
edb5e1d87a
refactor(editor): job should not rely on doc collection directly ( #9488 )
2025-01-02 10:50:15 +00:00
Saul-Mirone
ad422d2f05
refactor(editor): move crud to doc ( #9479 )
2025-01-02 07:27:08 +00:00
fundon
b9f2650369
feat(editor): store real color values in edgeless ( #9254 )
...
### What's Changed!
* adds theme type: `ThemeSchema`
* adds default theme: `DefaultTheme`
* stores real color values
2024-12-30 03:36:35 +00:00
Saul-Mirone
cec4a4b2c0
refactor(editor): extract drag handle widget ( #9415 )
2024-12-29 06:51:48 +00:00
Flrande
cb4dd127fd
fix(editor): merge drag function and fix it ( #9329 )
2024-12-26 07:41:07 +00:00
Saul-Mirone
d63ba079ee
refactor(editor): cleanup dead code ( #9294 )
2024-12-24 15:27:36 +00:00
zzj3720
884bbd2ada
feat(editor): add tracking for the creation of linked-doc ( #9266 )
...
close: BS-2189
2024-12-24 02:49:21 +00:00