Skip to content

Commit a3a0528

Browse files
committed
feat(editor): add toolbar registry extension
1 parent 6efe441 commit a3a0528

File tree

28 files changed

+980
-24
lines changed

28 files changed

+980
-24
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
1-
import { BlockViewExtension, FlavourExtension } from '@blocksuite/block-std';
1+
import { ToolbarModuleExtension } from '@blocksuite/affine-shared/services';
2+
import {
3+
BlockFlavourIdentifier,
4+
BlockViewExtension,
5+
FlavourExtension,
6+
} from '@blocksuite/block-std';
27
import type { ExtensionType } from '@blocksuite/store';
38
import { literal } from 'lit/static-html.js';
49

5-
import { AttachmentBlockNotionHtmlAdapterExtension } from './adapters/notion-html.js';
10+
import { AttachmentBlockNotionHtmlAdapterExtension } from './adapters/notion-html';
611
import {
712
AttachmentBlockService,
813
AttachmentDropOption,
9-
} from './attachment-service.js';
14+
} from './attachment-service';
1015
import {
1116
AttachmentEmbedConfigExtension,
1217
AttachmentEmbedService,
13-
} from './embed.js';
18+
} from './embed';
19+
import { BuiltinToolbarConfig } from './toolbar';
20+
21+
const Flavour = 'affine:attachment';
1422

1523
export const AttachmentBlockSpec: ExtensionType[] = [
16-
FlavourExtension('affine:attachment'),
24+
FlavourExtension(Flavour),
1725
AttachmentBlockService,
18-
BlockViewExtension('affine:attachment', model => {
26+
BlockViewExtension(Flavour, model => {
1927
return model.parent?.flavour === 'affine:surface'
2028
? literal`affine-edgeless-attachment`
2129
: literal`affine-attachment`;
@@ -24,4 +32,8 @@ export const AttachmentBlockSpec: ExtensionType[] = [
2432
AttachmentEmbedConfigExtension(),
2533
AttachmentEmbedService,
2634
AttachmentBlockNotionHtmlAdapterExtension,
35+
ToolbarModuleExtension({
36+
id: BlockFlavourIdentifier(Flavour),
37+
config: BuiltinToolbarConfig,
38+
}),
2739
];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import type {
2+
ToolbarActionGroup,
3+
ToolbarModuleConfig,
4+
} from '@blocksuite/affine-shared/services';
5+
6+
export const BuiltinToolbarConfig = {
7+
actions: [
8+
{
9+
id: 'rename',
10+
tooltip: 'Rename',
11+
run(_cx) {},
12+
},
13+
{
14+
id: 'conversions',
15+
actions: [
16+
{
17+
id: 'card-view',
18+
label: 'Card view',
19+
run(_cx) {},
20+
},
21+
{
22+
id: 'embed-view',
23+
label: 'Embed view',
24+
run(_cx) {},
25+
},
26+
],
27+
content(_cx) {
28+
this.actions;
29+
return null;
30+
},
31+
} satisfies ToolbarActionGroup,
32+
{
33+
id: 'download',
34+
tooltip: 'Download',
35+
run(_cx) {},
36+
},
37+
{
38+
id: 'caption',
39+
tooltip: 'Caption',
40+
run(_cx) {},
41+
},
42+
{
43+
id: 'clipboard',
44+
placement: 'more',
45+
actions: [
46+
{
47+
id: 'copy',
48+
label: 'Copy',
49+
run(_cx) {},
50+
},
51+
{
52+
id: 'duplicate',
53+
label: 'Duplicate',
54+
run(_cx) {},
55+
},
56+
],
57+
},
58+
{
59+
id: 'refresh',
60+
placement: 'more',
61+
actions: [
62+
{
63+
id: 'reload',
64+
label: 'Reload',
65+
run(_cx) {},
66+
},
67+
],
68+
},
69+
{
70+
id: 'delete',
71+
placement: 'more',
72+
actions: [
73+
{
74+
id: 'delete',
75+
label: 'Delete',
76+
run(_cx) {},
77+
},
78+
],
79+
},
80+
],
81+
} as const satisfies ToolbarModuleConfig;
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,32 @@
1+
import { ToolbarModuleExtension } from '@blocksuite/affine-shared/services';
12
import {
3+
BlockFlavourIdentifier,
24
BlockViewExtension,
35
CommandExtension,
46
FlavourExtension,
57
} from '@blocksuite/block-std';
68
import type { ExtensionType } from '@blocksuite/store';
79
import { literal } from 'lit/static-html.js';
810

9-
import { BookmarkBlockAdapterExtensions } from './adapters/extension.js';
10-
import { BookmarkBlockService } from './bookmark-service.js';
11-
import { commands } from './commands/index.js';
11+
import { BookmarkBlockAdapterExtensions } from './adapters/extension';
12+
import { BookmarkBlockService } from './bookmark-service';
13+
import { commands } from './commands/index';
14+
import { BuiltinToolbarConfig } from './toolbar';
15+
16+
const Flavour = 'affine:bookmark';
1217

1318
export const BookmarkBlockSpec: ExtensionType[] = [
14-
FlavourExtension('affine:bookmark'),
19+
FlavourExtension(Flavour),
1520
BookmarkBlockService,
1621
CommandExtension(commands),
17-
BlockViewExtension('affine:bookmark', model => {
22+
BlockViewExtension(Flavour, model => {
1823
return model.parent?.flavour === 'affine:surface'
1924
? literal`affine-edgeless-bookmark`
2025
: literal`affine-bookmark`;
2126
}),
2227
BookmarkBlockAdapterExtensions,
28+
ToolbarModuleExtension({
29+
id: BlockFlavourIdentifier(Flavour),
30+
config: BuiltinToolbarConfig,
31+
}),
2332
].flat();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import type {
2+
ToolbarActionGroup,
3+
ToolbarModuleConfig,
4+
} from '@blocksuite/affine-shared/services';
5+
6+
export const BuiltinToolbarConfig = {
7+
actions: [
8+
{
9+
id: 'conversions',
10+
actions: [
11+
{
12+
id: 'inline-view',
13+
label: 'Inline view',
14+
run(_cx) {},
15+
},
16+
{
17+
id: 'card-view',
18+
label: 'Card view',
19+
run(_cx) {},
20+
},
21+
],
22+
content(_cx) {
23+
this.actions;
24+
return null;
25+
},
26+
} satisfies ToolbarActionGroup,
27+
{
28+
id: 'style',
29+
tooltip: 'Card style',
30+
run(_cx) {},
31+
},
32+
{
33+
id: 'caption',
34+
tooltip: 'Caption',
35+
run(_cx) {},
36+
},
37+
{
38+
id: 'clipboard',
39+
placement: 'more',
40+
actions: [
41+
{
42+
id: 'copy',
43+
label: 'Copy',
44+
run(_cx) {},
45+
},
46+
{
47+
id: 'duplicate',
48+
label: 'Duplicate',
49+
run(_cx) {},
50+
},
51+
],
52+
},
53+
{
54+
id: 'refresh',
55+
placement: 'more',
56+
actions: [
57+
{
58+
id: 'reload',
59+
label: 'Reload',
60+
run(_cx) {},
61+
},
62+
],
63+
},
64+
{
65+
id: 'delete',
66+
placement: 'more',
67+
actions: [
68+
{
69+
id: 'delete',
70+
label: 'Delete',
71+
run(_cx) {},
72+
},
73+
],
74+
},
75+
],
76+
} as const satisfies ToolbarModuleConfig;

0 commit comments

Comments
 (0)