Commit Graph

58 Commits

Author SHA1 Message Date
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
pengx17 9fd547d484 chore(core): upload flaky test traces (#9974) 2025-02-07 15:15:45 +08:00
donteatfriedrice 09c7a597be fix(core): should focus when clicking sidebar button (#9339) 2025-01-06 04:09:01 +00:00
pengx17 30d6793978 feat(core): add journal search results to bs doc search (#9052)
fix AF-1842
2024-12-12 02:25:00 +00:00
fundon a5bcfb0b14 fix: reference parameters and add test cases (#8740)
Upstreams: https://github.com/toeverything/blocksuite/pull/8689
Closes: AF-1650
2024-11-12 09:23:57 +00:00
JimmFly 6fe2e42490 feat(core): add page width property (#8775)
close AF-1655
2024-11-12 02:58:14 +00:00
EYHN 902635e60f refactor(core): desktop project struct (#8334) 2024-11-05 11:00:33 +08:00
fundon 6921c3073c refactor(core): improve scroll anchoring logic (#8269)
Upstreams: https://github.com/toeverything/blocksuite/pull/8378
2024-09-19 02:58:11 +00:00
fundon f397815ad1 chore: bump blocksuite (#8230)
## 0.17.11

### Patch Changes

- [3c61be5](https://github.com/toeverything/blocksuite/commit/3c61be5dedcc1fc37d6f09ed2541b391584c0ded): - Refactor drag handle widget
  - Split embed blocks to `@blocksuite/affine-block-embed`
  - Fix latex selected state in edgeless mode
  - Fix unclear naming
  - Fix prototype pollution
  - Fix portal interaction in affine modal
  - Fix paste linked block on edgeless
  - Add scroll anchoring widget
  - Add highlight selection
2024-09-18 12:11:14 +00:00
Saul-Mirone 56f4634c1f chore: bump bs with new extension api (#8042) 2024-09-02 10:32:22 +00:00
EYHN 3db95bafa2 feat(core): use new print pdf api (#7932) 2024-08-21 10:06:22 +00:00
hwangdev97 4ac9bd7790 feat(i18n): fix i18n en-Us & en json english style (#7834) 2024-08-12 03:19:13 +00:00
CatsJuice 3d855647c7 refactor(component): refactor the implementation of Button and IconButton (#7716)
## Button
- Remove props withoutHoverStyle
   refactor hover impl with independent layer, so that hover-color won't affect the background even if is overridden outside
- Update `type` (renamed to `variant`):
  - remove `processing` and `warning`
  - rename `default` with `secondary`
- Remove `shape` props
- Remove `icon` and `iconPosition`, replaced with `prefix: ReactNode` and `suffix: ReactNode`
- Integrate tooltip for more convenient usage
- New Storybook document
- Focus style

## IconButton
- A Wrapper base on `<Button />`
- Override Button size and variant
  - size: `'12' | '14' | '16' | '20' | '24' | number`
     These presets size are referenced from the design system.
  - variant:  `'plain' | 'solid' | 'danger' | 'custom'`
- Inset icon via Button 's prefix

## Fix
- fix some button related issues
- close AF-1159, AF-1160, AF-1161, AF-1162, AF-1163, AF-1158, AF-1157

## Storybook

![CleanShot 2024-08-03 at 14.57.20@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/f5a76110-35d0-4082-a940-efc12bed87b0.png)
2024-08-05 02:57:23 +00:00
pengx17 cc7740d8d3 fix: some regression issues on quick search refactor (#7410)
- fix PD-1370. doc link resolve issue on pasting
- fix AF-1029
- implement doc creation in doc search

added two test cases to cover the above two issues.
2024-07-03 03:24:50 +00:00
EYHN 40e381e272 refactor(core): new quick search service (#7214) 2024-07-02 09:17:54 +00:00
EYHN e2dbac6bf8 chore: bump blocksuite (#7235)
## Features
- https://github.com/toeverything/BlockSuite/pull/7340 @pengx17
- https://github.com/toeverything/BlockSuite/pull/7334 @EYHN
- https://github.com/toeverything/BlockSuite/pull/7339 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7328 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7324 @Flrande
- https://github.com/toeverything/BlockSuite/pull/7297 @pengx17
- https://github.com/toeverything/BlockSuite/pull/7318 @CatsJuice

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7343 @Saul-Mirone
- https://github.com/toeverything/BlockSuite/pull/7345 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7341 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7342 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7329 @CatsJuice
- https://github.com/toeverything/BlockSuite/pull/7337 @fundon
- https://github.com/toeverything/BlockSuite/pull/7333 @fundon
- https://github.com/toeverything/BlockSuite/pull/7326 @akumatus
- https://github.com/toeverything/BlockSuite/pull/7325 @Flrande
- https://github.com/toeverything/BlockSuite/pull/7323 @zzj3720
- https://github.com/toeverything/BlockSuite/pull/7312 @golok727
- https://github.com/toeverything/BlockSuite/pull/7317 @CatsJuice
- https://github.com/toeverything/BlockSuite/pull/7319 @akumatus

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7327 @Flrande
- https://github.com/toeverything/BlockSuite/pull/7320 @Flrande

## Misc
- https://github.com/toeverything/BlockSuite/pull/7303 @fundon
- https://github.com/toeverything/BlockSuite/pull/7321 @Saul-Mirone
2024-06-17 10:55:40 +00:00
pengx17 f78416021a chore: bump blocksuite (#7163)
## Features
- https://github.com/toeverything/BlockSuite/pull/7230 @akumatus
- https://github.com/toeverything/BlockSuite/pull/7220 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7228 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7216 @golok727
- https://github.com/toeverything/BlockSuite/pull/7224 @akumatus
- https://github.com/toeverything/BlockSuite/pull/7217 @pengx17
- https://github.com/toeverything/BlockSuite/pull/7144 @Flrande

## Bugfix
- https://github.com/toeverything/BlockSuite/pull/7231 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7229 @fourdim
- https://github.com/toeverything/BlockSuite/pull/7222 @donteatfriedrice
- https://github.com/toeverything/BlockSuite/pull/7226 @L-Sun
- https://github.com/toeverything/BlockSuite/pull/7218 @fundon
- https://github.com/toeverything/BlockSuite/pull/7213 @donteatfriedrice

## Refactor
- https://github.com/toeverything/BlockSuite/pull/7212 @Flrande

## Misc
- https://github.com/toeverything/BlockSuite/pull/7223 @fundon
2024-06-06 12:04:07 +00:00
pengx17 5bd9c7a2a3 feat: allow search for doc without showing modal (#7138)
depends on https://github.com/toeverything/blocksuite/pull/7199#pullrequestreview-2095567573

fix TOV-858, fix AFF-1132
2024-06-06 06:29:41 +00:00
JimmFly 1b91ffa6a5 chore: adjust quick search style (#6906)
close TOV-854
<img width="651" alt="image" src="https://github.com/toeverything/AFFiNE/assets/102217452/f281eb82-852c-411d-b3dd-4bf7d7ce74e8">
2024-05-14 07:28:25 +00:00
pengx17 f41d587d65 chore: upgrade cmdk to 1.0.0 (#6401)
Also include the command score into our own repo for some tweaks.

Might fix https://github.com/toeverything/AFFiNE/issues/6322
2024-03-30 08:00:21 +00:00
EYHN f2adbdaba4 style: enable import-x/no-duplicates (#6279) 2024-03-25 03:55:33 +00:00
regischen d1e6b23e1a feat: bump blocksuite (#5953) 2024-02-29 14:33:50 +08:00
EYHN ad9b0303c4 refactor(core): refactor atom to use di (#5831)
To support multiple instances, this PR removes some atoms and implements them using the new DI system.

removed atom

- `pageSettingsAtom`
- `currentPageIdAtom`
- `currentModeAtom`
2024-02-27 03:50:53 +00:00
JimmFly 8d746f17de chore: remove preloading pages (#5854) 2024-02-21 12:57:18 +00:00
JimmFly c353b0d30f chore: replace ambiguous "page" with "doc" (#5761)
close TOV-532
2024-02-21 12:47:17 +00:00
Peng Xiao d1c4e6141a refactor(component): cmdk ordering (#5722)
Replace internal CMDK command filtering/sorting logic.
The new implementation includes the following for command scoring:
- categories weights
- highlighted fragments
- original command score value

The new logic should be much cleaner and remove some hacks in the original implementation.

Not sure if this is optimal yet. Could be changed later.

fix https://github.com/toeverything/AFFiNE/issues/5699
2024-02-16 13:20:24 +00:00
Flrande 2e3ffeced9 feat: bump blocksuite (#5812) 2024-02-08 08:18:03 +08:00
Peng Xiao f41b7d7e71 feat(component): react wrapper for blocksuite editor (#5606)
A React wrapper for blocksuite editor from title/meta/doc/edgless fragments.
This PR only **clones** the `AffineEditorContainer`'s existing behavior and make it easier for extension in affine later.

fix TOV-315

### Some core issues:

A customized version of `createComponent` from `@lit/react`. The [existing and solutions in the community](https://github.com/lit/lit/issues/4435) does not work well in our case.
Alternatively in this PR the approach we have is to create web component instances in React lifecycle and then append them to DOM. However this make it hard to wrap the exported Lit component's using React and therefore we will have an additional wrapper tag for the wrapped web component.

To mitigate the migration issue on using React instead of Lit listed on last day, we now use [a proxy to mimic the wrapped React component](https://github.com/toeverything/AFFiNE/pull/5606/files#diff-5b7f0ae7b52a08739d50e78e9ec803c26ff3d3e5437581c692add0de12d3ede5R142-R183) into an `AffineEditorContainer` instance.
2024-01-22 08:25:29 +00:00
Cats Juice 70ea1e5ef8 feat(core): journal sidebar dater-picker navigation (#5558) 2024-01-18 12:34:23 +00:00
JimmFly 971f2beed1 fix(core): disable quick search when the link-popup is visitable (#5409)
close AFF-471
2024-01-04 11:36:50 +00:00
Peng Xiao 6cb62ed25d feat: bump blocksuite (#5453)
Change history: https://github.com/toeverything/blocksuite/compare/e3abcbb...master
2024-01-03 02:10:19 +00:00
Yifeng Wang af15aa06d4 feat: bump blocksuite (#5286)
Co-authored-by: donteatfriedrice <huisheng.chen7788@outlook.com>
2023-12-15 12:57:52 +08:00
Peng Xiao ce64685176 refactor(core): side bar resizing (#5280)
Rewrite sidebar panel using a customized react-resizable-panels version that supports sidebar pixel sizing (not using flex percentages).

Now the left & right sidebar using the same `ResizePanel` impl.

fix https://github.com/toeverything/AFFiNE/issues/5271
fix TOV-163
fix TOV-146
fix TOV-168
fix TOV-109
fix TOV-165
2023-12-13 07:52:01 +00:00
EYHN b782b3fb1b fix(core): polling to search in cmdk (#5274)
This is a temporary solution until https://github.com/toeverything/blocksuite/issues/5668 be solved.
2023-12-12 18:42:07 +08:00
LongYinan 923844f302 fix: add eqeqeq lint rule (#5106) 2023-11-29 04:43:31 +00:00
JimmFly f06bdd9a39 fix(core): cmdk crash when entering double quotes (#5008)
Due to a bug in the upstream repository, a temporary fix was implemented until the issue in the upstream repository is resolved.
https://github.com/pacocoursey/cmdk/issues/189
2023-11-21 12:51:22 +00:00
JimmFly 4ef1f4c046 fix(core): escape cmdk value (#4947)
Co-authored-by: LongYinan <lynweklm@gmail.com>
2023-11-20 10:49:32 +08:00
EYHN aa4c7407de refactor: new provider (#4900) 2023-11-17 15:50:01 +08:00
JimmFly 1fe5a0fffa feat(core): auto select block when jump to block (#4858)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2023-11-10 03:02:56 +00:00
JimmFly 0a88be7771 feat(core): add jump to block for cmdk (#4802) 2023-11-02 11:49:49 +00:00
JimmFly af9663d3e7 fix(core): adjust payment related text (#4797) 2023-11-02 08:22:54 +00:00
3720 ef8024c657 feat: new collections (#4530)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2023-10-27 09:06:59 +00:00
JimmFly 5226d6c568 feat(core): add search result highlighting (#4667)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2023-10-24 05:54:37 +00:00
Alex Yang d05897b724 chore: prohibit unnecessary await (#4586) 2023-10-12 05:04:58 +00:00
Alex Yang 8f5ee9234c test: remove deprecated api usage (#4577) 2023-10-11 06:05:06 +00:00
JimmFly 69db99636b feat(core): add editor commanads (#4514)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2023-10-02 03:22:12 +00:00
Peng Xiao e0063ebc9b feat: new CMD-K (#4408) 2023-09-22 14:31:26 +00:00
Alex Yang 40e094dcdd test: fix e2e (#4390) 2023-09-17 03:50:26 +00:00
Alex Yang 4f97ea8a5d test: cover share page e2e (#4126) 2023-09-02 00:57:04 -05:00
Alex Yang 70b5a9deeb test: improve data migration suite (#4124) 2023-09-02 03:31:07 +00:00