Compare commits

...

523 Commits

Author SHA1 Message Date
Hwang
cc2b90daa6 Merge branch 'apple-intelligent-2.0-2' into hwang/intelligence-ui 2025-06-19 17:01:39 +08:00
Hwang
74819f6141 add icon & colors 2025-06-19 16:34:11 +08:00
Lakr
ab758b01b3 chore: clean up 2025-06-19 02:58:34 +08:00
Lakr
a505e65f32 chore: easy delete image 2025-06-19 02:52:03 +08:00
Lakr
cbcc708073 chore: downgrade target 16.0 2025-06-19 02:47:54 +08:00
Lakr
876ea3a987 feat: editor working 2025-06-19 02:37:48 +08:00
Lakr
92887791fc feat: input box menu 2025-06-19 01:25:11 +08:00
Lakr
1e861e54ee chore: update ui 2025-06-19 01:09:54 +08:00
Lakr
c19ef05534 chore: input box ux 2025-06-18 19:58:37 +08:00
Lakr
ea1e7076d7 chroe: input box view model 2025-06-18 18:52:44 +08:00
Lakr
8065fa4bf4 feat: input box ui 2025-06-18 01:52:37 +08:00
Lakr
1aca314299 feat: ai v2 nav bar 2025-06-17 13:58:13 +08:00
Lakr
f6b281d12f chore: clean up code and architect v2 2025-06-17 13:28:20 +08:00
Lakr
6d0516175d refactor: continue cleanup for 2.0 2025-06-16 16:50:40 +08:00
Lakr
d3591dcdc1 Clean Up 2025-06-16 15:35:36 +08:00
Lakr
333edab3b6 Update CodeGen Apollo 2025-06-16 15:35:36 +08:00
DarkSky
deeca60efa chore(ios): update gql schema 2025-06-16 15:21:42 +08:00
liuyi
a1abb60dec fix(server): should save end date of subscription in db (#12814)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Bug Fixes**
- Subscription end dates are now correctly saved and updated for Stripe
subscriptions, ensuring accurate display and management of subscription
periods.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-13 18:31:18 +08:00
EYHN
04f3d88e2c feat(nbstore): add more data to indexer (#12815)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Bug Fixes**
- Improved display of image and attachment blocks by ensuring image
captions are shown as content for images, while attachment names remain
as content for attachments.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


#### PR Dependency Tree


* **PR #12815** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

---------

Co-authored-by: fengmk2 <fengmk2@gmail.com>
2025-06-13 18:30:57 +08:00
DarkSky
e98f035f97 feat(server): split embedding client (#12809) 2025-06-13 12:37:05 +08:00
fengmk2
1d4bc81e90 fix(server): use Query instead of Args (#12813)
#### PR Dependency Tree


* **PR #12813** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)
2025-06-13 04:12:54 +00:00
EYHN
deeea3428e feat(core): update build in server config (#12807)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added support for Apple as an OAuth login provider across all server
configurations.
	- Introduced Copilot Embedding as a new server feature.

- **Changes**
- Updated server features to replace Captcha with Indexer in all
configurations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-13 10:28:49 +08:00
fengmk2
8b0dd3c067 fix(server): increase doc-service liveness probe timeout from 1s to 5s (#12804)
yjs operations may take more than 1 second

before

![image](https://github.com/user-attachments/assets/feb7e375-ea73-4f5f-84f2-d85934f94844)

after

![image](https://github.com/user-attachments/assets/e760ee1f-a1c6-4f9d-8dbc-a4796efbd77a)


#### PR Dependency Tree


* **PR #12804** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

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

## Summary by CodeRabbit

- **New Features**
- Added configurable timeout settings for liveness and readiness probes
in Helm chart deployments, allowing users to specify probe timeout
duration.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 21:04:37 +08:00
Richard Lora
8ca17864f1 fix(editor): show added or deleted rows immediately in grouped table and Kanban views (#12731)
https://github.com/user-attachments/assets/214fbe4f-b667-44b7-85a3-77ef4cfa8cca

This PR fixes a bug where adding or deleting rows in a grouped table
view did not visually update the UI until the user manually refreshed
the page or navigated away and back. The issue gave the impression that
the action had not completed.

Same issue for Kanban cards.

The result now is:
Users now see new rows or deleted rows reflected in real-time without
needing to reload or navigate away. This applies to both grouped table
views and Kanban cards.

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

- **Bug Fixes**
- Ensured the UI updates immediately after adding, deleting, or moving
cards and rows in Kanban and Table views on both mobile and desktop.
- Fixed issues where UI changes were not reflected after certain
actions, such as ungrouping, deleting, or inserting items.
- Improved row locking behavior during add and delete operations to
prevent UI inconsistencies.
- **Tests**
- Added comprehensive tests for row operations and menu interactions to
verify UI updates and correct method calls in data views.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: zzj3720 <zuozijian1994@gmail.com>
2025-06-12 16:02:37 +08:00
Aadi
d2664480f7 fix(editor): unable to delete content backward in database title cell (#12738)
fix: https://github.com/toeverything/blocksuite/issues/8578

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

- **New Features**
- Improved keyboard event handling within inline editors for database
headers and table cells, enhancing user control over key interactions
like 'Tab' and 'Escape'.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 15:58:52 +08:00
Aadi
b986a39da3 fix(editor): cursor not visible on empty line when line numbers are disabled in code block (#12694)
This fixes an issue where, if line numbers are turned off in a code
block, focusing on an empty line would cause the text cursor to be
hidden.

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

- **Style**
- Updated code block layout to improve appearance when line numbers are
disabled.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: L-Sun <zover.v@gmail.com>
2025-06-12 15:52:54 +08:00
Aadi
097a63362c fix(editor): firefox can't paste image in edgeless (#12729)
fix: https://github.com/toeverything/blocksuite/issues/8718
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

- **Bug Fixes**
- Improved clipboard handling to prevent creating empty notes when
pasting blank text.
- Enhanced detection of files and SVG images in clipboard content for
more reliable pasting behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 15:52:14 +08:00
EYHN
7284320355 fix(nbstore): fix search slow (#12800)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Bug Fixes**
- Improved search results by ensuring links to the current document are
properly excluded from related document and database searches.
- Enhanced session management in quick search by ensuring all active
sessions are cleaned up before processing new search results.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 15:43:55 +08:00
DarkSky
b4401a8abf chore(server): bump model version (#12798) 2025-06-12 07:40:28 +00:00
Aadi
0351fbcb86 fix(editor): remove duplicate event listeners (#12735)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Bug Fixes**
- Improved keyboard interaction reliability in text and rich text cells
by eliminating duplicate event listeners.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 15:13:54 +08:00
Peng Xiao
6eed9c686b fix(component): fix storybook migration v9 (#12797) 2025-06-12 07:01:58 +00:00
L-Sun
8d2214424c fix(editor): behavior of deleting at the start of line (#12787)
Close BS-3182, #12736 




#### PR Dependency Tree


* **PR #12787** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

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

## Summary by CodeRabbit

- **Bug Fixes**
- Improved the behavior when deleting empty lines and merging blocks,
ensuring more accurate handling of block deletion and cursor focus in
various scenarios.
- **Tests**
- Added new end-to-end tests to verify correct deletion of lines in
edgeless text and paragraph blocks, including checks for block removal
and cursor position.
- Introduced a utility function to retrieve block IDs for testing
purposes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 14:58:03 +08:00
Peng Xiao
d12954f8c3 fix(electron): web dev server ws does not work for electron renderer (#12711) 2025-06-12 14:44:30 +08:00
DarkSky
83733cd828 feat(server): improve prompts (#12788) 2025-06-12 13:31:16 +08:00
DarkSky
ed56f076ed feat(server): improve rerank performance (#12775)
fix AI-183
2025-06-12 13:31:01 +08:00
Cats Juice
2d17c265ca fix: memory leak due to missing unsubscribe (#12777)
- unsubscribe `Signal` not correctly
- missing un-subscription for `Livedata.signal`

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

- **Bug Fixes**
- Improved resource management to ensure subscriptions are properly
cleaned up, reducing potential memory leaks and improving overall app
stability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 12:35:14 +08:00
L-Sun
2a9f7e1835 fix(editor): can not clear embed card alias description (#12794)
Close
[BS-3600](https://linear.app/affine-design/issue/BS-3600/card-view下,编辑alias清空保存无效,无法实现清空)
Close
[BS-3599](https://linear.app/affine-design/issue/BS-3599/page-和canvas-mode下的note,对文本中的-embed-view-doc,隐藏掉-edit-按钮,避免误导,card)



#### PR Dependency Tree


* **PR #12794** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

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

- **New Features**
- The edit option has been removed from the toolbar for embedded synced
documents.
- **Bug Fixes**
- The description field is now always included when editing embedded
cards, even if left empty.
- **Tests**
- Removed tests related to editing and view switching of linked document
embeds.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-12 12:33:57 +08:00
Fangdun Tsai
a71904e641 feat(editor): add replace action in attachment toolbar (#12512)
Closes:
[BS-3549](https://linear.app/affine-design/issue/BS-3549/附件-toolbar-上添加-replace-action)

[Screen Recording 2025-06-04 at 15.37.40.mov <span
class="graphite__hidden">(uploaded via Graphite)</span> <img
class="graphite__hidden"
src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/8ypiIKZXudF5a0tIgIzf/480c8690-7ec9-4188-92fd-ee3339afb558.mov"
/>](https://app.graphite.dev/media/video/8ypiIKZXudF5a0tIgIzf/480c8690-7ec9-4188-92fd-ee3339afb558.mov)



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

- **New Features**
- Added the ability to replace attachments directly from the toolbar,
allowing users to select and update files seamlessly.
- **Bug Fixes**
- Improved handling when replacing embedded attachments with unsupported
file types, ensuring the view falls back to a card view as needed.
- **Tests**
- Introduced end-to-end tests to verify attachment replacement and
correct UI behavior in both standard and edgeless editing modes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-11 06:57:31 +00:00
L-Sun
814364489f chore(editor): remove unused codes (#12784)
Continue #12778 

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

## Summary by CodeRabbit

- **Chores**
- Removed internal string utility functions related to markdown prefix
and horizontal rule detection. No impact on user-facing features.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-11 06:40:51 +00:00
L-Sun
24448659a4 fix(editor): support markdown transform when using IME (#12778)
Fix #12284 
Close
[BS-3517](https://linear.app/affine-design/issue/BS-3517/微软新注音输入法无法使用markdown语法)

This PR refactor the markdown transform during inputting, including:
- Transfrom markdown syntax input in `inlineEditor.slots.inputting`,
where we can detect the space character inputed by IME like Microsoft
Bopomofo, but `keydown` event can't.
- Remove `markdown-input.ts` which was used in `KeymapExtension` of
paragraph, and refactor with `InlineMarkdownExtension`
- Adjust existing `InlineMarkdownExtension` since the space is included
in text.
- Add two `InlineMarkdownExtension` for paragraph and list to impl
Heading1-6, number, bullet, to-do list conversion.

Other changes:
- Improve type hint for parameter of `store.addBlock`

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

## Summary by CodeRabbit

- **New Features**
- Added markdown shortcuts for creating code blocks and dividers in the
rich text editor.
- Introduced enhanced paragraph markdown support for headings and
blockquotes with inline markdown patterns.
- Integrated new list markdown extension supporting numbered, bulleted,
and todo lists with checked states.

- **Improvements**
- Updated markdown formatting patterns to require trailing spaces for
links, LaTeX, and inline styles, improving detection accuracy.
- Markdown transformations now respond to input events instead of
keydown for smoother editing experience.
- Added focus management after markdown transformations to maintain
seamless editing flow.

- **Bug Fixes**
- Removed unnecessary prevention of default behavior on space and
shift-space key presses in list and paragraph editors.

- **Refactor**
- Enhanced event handling and typing for editor input events, improving
reliability and maintainability.
- Refined internal prefix text extraction logic for markdown processing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-11 14:12:28 +08:00
darkskygit
c846c57a12 fix(server): list context status (#12771)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Improved handling of document statuses to ensure documents without a finished or existing status are now explicitly marked as "processing" instead of remaining undefined.

- **Tests**
  - Added comprehensive new tests and snapshot entries to verify document status merging, including edge cases and concurrent operations, ensuring robust and consistent behavior.

- **Enhancements**
  - Updated context document listings to display the processing status for relevant documents.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-10 02:35:09 +00:00
L-Sun
e82c9d2ddc fix(editor): add title to edgeless page block ai context (#12763)
Close [BS-3590](https://linear.app/affine-design/issue/BS-3590/page-block-的标题没有被作为上下文输入)
2025-06-10 02:14:01 +00:00
yoyoyohamapi
3c29f62224 refactor(core): hide emebedding status tip if completed (#12720)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added real-time embedding status tracking and progress messages to the AI chat composer, with automatic updates every 10 seconds.
- **Refactor**
  - Simplified the embedding status tooltip to display a static message, removing dynamic status updates and hover-based refresh.
- **Tests**
  - Enhanced embedding status tooltip test by creating sample documents and extending visibility timeout to 50 seconds.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-10 01:54:13 +00:00
fundon
b5ef361f87 fix(editor): toolbar shaking when setting inline style (#12765)
Closes: [BS-1748](https://linear.app/affine-design/issue/BS-1748/improvement-toolbar-应用样式后会移动)

[Screen Recording 2025-06-09 at 17.59.01.mov <span class="graphite__hidden">(uploaded via Graphite)</span> <img class="graphite__hidden" src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/8ypiIKZXudF5a0tIgIzf/a3941ec8-6b97-48e5-ba9b-484deb792d44.mov" />](https://app.graphite.dev/media/video/8ypiIKZXudF5a0tIgIzf/a3941ec8-6b97-48e5-ba9b-484deb792d44.mov)

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

## Summary by CodeRabbit

- **New Features**
  - Improved animation and transition effects for inline toolbars, providing a smoother user experience when toolbars appear or disappear.
- **Bug Fixes**
  - Ensured that the inline attribute is correctly removed when the toolbar is hidden, preventing visual inconsistencies.
- **Style**
  - Updated toolbar transition timing for more natural animations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-09 11:19:13 +00:00
mkihr-ojisan
4fa85416ae fix: size of canvas in PDFPageRenderer (#12722)
Co-authored-by: Fangdun Tsai <fundon@pindash.io>
2025-06-09 14:37:44 +08:00
Aadi
f69a98eb8c fix(editor): pasting into database multiselect input auto adds a new tag (#12693)
Co-authored-by: 3720 <zuozijian1994@gmail.com>
2025-06-09 09:37:54 +08:00
renovate
115496aa8e chore: bump up nestjs to v11.1.3 (#12737)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@nestjs/common](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/common)) | [`11.1.2` -> `11.1.3`](https://renovatebot.com/diffs/npm/@nestjs%2fcommon/11.1.2/11.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcommon/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcommon/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcommon/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcommon/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/core](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/core)) | [`11.1.2` -> `11.1.3`](https://renovatebot.com/diffs/npm/@nestjs%2fcore/11.1.2/11.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcore/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcore/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcore/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcore/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-express](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-express)) | [`11.1.2` -> `11.1.3`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-express/11.1.2/11.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-express/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-express/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-express/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-express/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-socket.io](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-socket.io)) | [`11.1.2` -> `11.1.3`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-socket.io/11.1.2/11.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-socket.io/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-socket.io/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-socket.io/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-socket.io/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/websockets](https://redirect.github.com/nestjs/nest) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/websockets)) | [`11.1.2` -> `11.1.3`](https://renovatebot.com/diffs/npm/@nestjs%2fwebsockets/11.1.2/11.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fwebsockets/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fwebsockets/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fwebsockets/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fwebsockets/11.1.2/11.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>nestjs/nest (@&#8203;nestjs/common)</summary>

### [`v11.1.3`](https://redirect.github.com/nestjs/nest/compare/v11.1.2...1613f503cfd3fa5a6edddc0d7296aeca78f844a7)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.2...v11.1.3)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/core)</summary>

### [`v11.1.3`](https://redirect.github.com/nestjs/nest/compare/v11.1.2...1613f503cfd3fa5a6edddc0d7296aeca78f844a7)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.2...v11.1.3)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/platform-express)</summary>

### [`v11.1.3`](https://redirect.github.com/nestjs/nest/compare/v11.1.2...1613f503cfd3fa5a6edddc0d7296aeca78f844a7)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.2...v11.1.3)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/platform-socket.io)</summary>

### [`v11.1.3`](https://redirect.github.com/nestjs/nest/releases/tag/v11.1.3)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.2...v11.1.3)

#### v11.1.3 (2025-06-06)

##### Bug fixes

-   `core`
    -   [#&#8203;15201](https://redirect.github.com/nestjs/nest/pull/15201) fix(core): gracefully shutdown the app when repl exits ([@&#8203;dzhlobo](https://redirect.github.com/dzhlobo))

##### Enhancements

-   `common`
    -   [#&#8203;15209](https://redirect.github.com/nestjs/nest/pull/15209) feat: add string array type to disposition ([@&#8203;fjodor-rybakov](https://redirect.github.com/fjodor-rybakov))
-   `common`, `core`
    -   [#&#8203;15203](https://redirect.github.com/nestjs/nest/pull/15203) feat(core): defer initialization connected microservice ([@&#8203;isaryy](https://redirect.github.com/isaryy))

##### Dependencies

-   `platform-express`
    -   [#&#8203;15232](https://redirect.github.com/nestjs/nest/pull/15232) chore(deps): bump multer from 2.0.0 to 2.0.1 ([@&#8203;dependabot\[bot\]](https://redirect.github.com/apps/dependabot))

##### Committers: 3

-   Dmitry Zhlobo ([@&#8203;dzhlobo](https://redirect.github.com/dzhlobo))
-   [@&#8203;fjodor-rybakov](https://redirect.github.com/fjodor-rybakov)
-   [@&#8203;isaryy](https://redirect.github.com/isaryy)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40MC4zIiwidXBkYXRlZEluVmVyIjoiNDAuNDAuMyIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-06-07 09:03:02 +00:00
EYHN
7aafbf12a5 chore(ios): update ios app version (#12734)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Updated the app version number to 0.22.2 for iOS.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-06 08:54:24 +00:00
pengx17
0f9b7d4a0d fix(electron): increase recording timeout (#12733)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Removed the automatic timeout that stopped recordings after 1.5 hours. Recordings will no longer be stopped automatically based on duration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-06 08:40:05 +00:00
renovate
2817b5aec4 chore: bump up @googleapis/androidpublisher version to v28 (#12713)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@googleapis/androidpublisher](https://redirect.github.com/googleapis/google-api-nodejs-client) | [`^27.0.0` -> `^28.0.0`](https://renovatebot.com/diffs/npm/@googleapis%2fandroidpublisher/27.0.0/28.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@googleapis%2fandroidpublisher/28.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@googleapis%2fandroidpublisher/28.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@googleapis%2fandroidpublisher/27.0.0/28.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@googleapis%2fandroidpublisher/27.0.0/28.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/google-api-nodejs-client (@&#8203;googleapis/androidpublisher)</summary>

### [`v28.0.1`](https://redirect.github.com/googleapis/google-api-nodejs-client/releases/tag/v28.0.1): 28.0.1

[Compare Source](https://redirect.github.com/googleapis/google-api-nodejs-client/compare/v27.0.0...v28.0.1)

This release fixes the release bug in v28.0.0.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40MC4zIiwidXBkYXRlZEluVmVyIjoiNDAuNDAuMyIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-06-06 08:24:22 +00:00
forehalo
72e66aca11 ci: do not deny rust nightly warnings 2025-06-06 12:02:36 +08:00
fundon
7d1f2adb7f fix(editor): support copying single image from edgeless and pasting to page (#12709)
Closes: [BS-3586](https://linear.app/affine-design/issue/BS-3586/复制白板图片,然后粘贴到-page,图片失败)

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

- **New Features**
  - Copying a single selected image in edgeless mode now places the image directly onto the system clipboard as a native image blob for smoother pasting.

- **Bug Fixes**
  - Enhanced clipboard handling to better manage image and text data inclusion, with improved fallback for snapshot HTML.

- **Tests**
  - Added an end-to-end test verifying image copy-paste functionality between edgeless and page editor modes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-06 01:17:58 +00:00
akumatus
512a908fd4 fix(core): generate the image cannot enter text prompt (#12717)
Close [AI-167](https://linear.app/affine-design/issue/AI-167)

![截屏2025-06-05 12.15.49.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/c1afff0e-1197-46dc-ae43-ff7257039509.png)

![截屏2025-06-05 12.14.07.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/1439b0a7-1cca-4848-aea2-84bc73c536c5.png)

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

- **New Features**
  - Improved AI panel behavior with explicit modes for input and answer generation, providing a more intuitive user experience when interacting with AI features.

- **Refactor**
  - Streamlined AI panel toggling logic for more consistent and predictable panel states during different actions.

- **Tests**
  - Enhanced AI image generation test to simulate user input and send actions for more accurate end-to-end validation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 09:17:28 +00:00
liuyi
71be1d424a fix(server): oidc registration (#12723) 2025-06-05 09:16:21 +00:00
renovate
d6a26b8093 chore: bump up multer version to v2.0.1 [SECURITY] (#12716)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [multer](https://redirect.github.com/expressjs/multer) | [`2.0.0` -> `2.0.1`](https://renovatebot.com/diffs/npm/multer/2.0.0/2.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/multer/2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/multer/2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/multer/2.0.0/2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/multer/2.0.0/2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

### GitHub Vulnerability Alerts

#### [CVE-2025-48997](https://redirect.github.com/expressjs/multer/security/advisories/GHSA-g5hg-p3ph-g8qg)

### Impact

A vulnerability in Multer versions >=1.4.4-lts.1, <2.0.1 allows an attacker to trigger a Denial of Service (DoS) by sending an upload file request with an empty string field name. This request causes an unhandled exception, leading to a crash of the process.

### Patches

Users should upgrade to `2.0.1`

### Workarounds

None

### References

35a3272b61
[https://github.com/expressjs/multer/issues/1233](https://redirect.github.com/expressjs/multer/issues/1233)
[https://github.com/expressjs/multer/pull/1256](https://redirect.github.com/expressjs/multer/pull/1256)

---

### Release Notes

<details>
<summary>expressjs/multer (multer)</summary>

### [`v2.0.1`](https://redirect.github.com/expressjs/multer/blob/HEAD/CHANGELOG.md#201)

[Compare Source](https://redirect.github.com/expressjs/multer/compare/v2.0.0...v2.0.1)

-   Fix [CVE-2025-48997](https://www.cve.org/CVERecord?id=CVE-2025-48997) ([GHSA-g5hg-p3ph-g8qg](https://redirect.github.com/expressjs/multer/security/advisories/GHSA-g5hg-p3ph-g8qg))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40MC4zIiwidXBkYXRlZEluVmVyIjoiNDAuNDAuMyIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-06-05 07:39:03 +00:00
EYHN
5e05952f6e feat(core): optimize tag performance (#12719)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Improved tag options management to use a reactive, real-time approach, ensuring tag options are always up to date throughout the application.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 07:13:31 +00:00
JimmFly
c1930c5937 chore: adjust general access button styles (#12718)
close AF-2685

When the button is disabled, the frontmost icon is not positioned correctly. This commit is to fix the icon position.

![CleanShot 2025-06-05 at 12 38 55@2x](https://github.com/user-attachments/assets/af2f80bc-69a0-4e33-bc8f-e5e169f769fc)

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

## Summary by CodeRabbit

- **Style**
  - Improved the layout of the share menu trigger text by aligning its content vertically and adding spacing between elements for a cleaner appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 06:59:18 +00:00
fengmk2
b7ebd33389 chore(server): ignore rolled back error on the first time (#12714)
close #12692

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

- **Bug Fixes**
  - Improved error handling during migration rollbacks to better recognize and safely skip specific migration errors.
  - Enhanced logging for migration rollback failures to provide clearer information without interrupting the process.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 04:00:21 +00:00
Brooooooklyn
de9a3e1428 ci: fix missing environment in build-server-native (#12712)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Updated workflow configuration to set the environment for the build process based on input parameters.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 03:44:35 +00:00
fengmk2
374eee9196 chore(server): disable indexer by default (#12710)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
	- Updated the default setting for the indexer feature to be disabled by default.
	- Added a sample environment variable for enabling the indexer in the example configuration file.
	- Introduced a new environment variable for the indexer in the CI workflow configuration.
- **Tests**
	- Adjusted test configurations to explicitly enable the indexer feature during test execution.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 03:28:12 +00:00
donteatfriedrice
1bdccdbd57 feat(editor): track citation events (#12664)
Closes: [BS-3551](https://linear.app/affine-design/issue/BS-3551/citation埋点)

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

- **New Features**
  - Enhanced citation tracking across attachments, bookmarks, embedded documents, paragraphs, footnotes, rename modals, and toolbars for actions like editing, deleting, expanding, and hovering on citations.
  - Introduced a centralized citation service to unify citation detection and telemetry event management.
- **Chores**
  - Updated service exports and telemetry modules to include the new citation service and citation-related event types.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 03:09:24 +00:00
donteatfriedrice
053efb61f0 fix(editor): should set event dispatcher active as false when document is hidden (#12559)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - The application now automatically becomes inactive when the document is hidden, improving resource management and responsiveness to visibility changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-05 02:28:32 +00:00
pengx17
c7aebd0412 fix(electron): revert back electron to v35 (#12704)
v36 breaks worker loading in Electron's renderer
this use to work by turning off "PlzDedicatedWorker"
related to https://github.com/electron/electron/issues/43556

Before we know the root cause, revert back the electron version.

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

## Summary by CodeRabbit

- **Chores**
  - Updated the version of Electron used in the application.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 15:17:51 +00:00
renovate
01aa6979eb chore: bump up @nestjs-cls/transactional-adapter-prisma version to v1.2.23 (#12680)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@nestjs-cls/transactional-adapter-prisma](https://papooch.github.io/nestjs-cls/) ([source](https://redirect.github.com/Papooch/nestjs-cls)) | [`1.2.21` -> `1.2.23`](https://renovatebot.com/diffs/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.21/1.2.23) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.23?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.23?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.21/1.2.23?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.21/1.2.23?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>Papooch/nestjs-cls (@&#8203;nestjs-cls/transactional-adapter-prisma)</summary>

### [`v1.2.23`](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional-adapter-prisma@1.2.22...@nestjs-cls/transactional-adapter-prisma@1.2.23)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional-adapter-prisma@1.2.22...@nestjs-cls/transactional-adapter-prisma@1.2.23)

### [`v1.2.22`](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional-adapter-prisma@1.2.21...@nestjs-cls/transactional-adapter-prisma@1.2.22)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional-adapter-prisma@1.2.21...@nestjs-cls/transactional-adapter-prisma@1.2.22)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuNDAuMyIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-06-04 13:00:41 +00:00
akumatus
c32f7c7964 fix(core): read-only editor does not support code preview (#12700)
Close [AI-160](https://linear.app/affine-design/issue/AI-160)

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

## Summary by CodeRabbit

- **New Features**
  - Improved preview state management for code blocks, ensuring consistent behavior in both editable and readonly modes.

- **Refactor**
  - Streamlined the way preview state is toggled and displayed for code blocks, resulting in a more reliable and maintainable user experience.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 12:41:10 +00:00
fengmk2
d219c92e98 chore(server): ignore never applied rolled back error (#12703)
closes #12701

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved error handling during migration rollbacks to prevent unnecessary errors when migrations were never applied.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 11:37:32 +00:00
darkskygit
063072457c fix(server): chat with image (#12699)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Improved the handling of attachments in chat messages for more efficient processing of images and files without impacting user experience.
- **Chores**
  - Added internal logging to enhance monitoring of AI model interactions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 08:51:02 +00:00
darkskygit
13fa4f922a fix(server): token calculate (#12667) 2025-06-04 07:09:33 +00:00
fengmk2
f54bc0c047 chore(server): auto roll back failed migrations (#12697) 2025-06-04 14:45:42 +08:00
akumatus
1f0cc51462 fix(core): ai retry missing reasoning and webSearch params (#12690)
Close [AI-165](https://linear.app/affine-design/issue/AI-165)

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

- **New Features**
  - Enhanced chat components to support advanced reasoning and network search options, providing more control over AI-powered interactions.
  - Improved polling for context documents and files, now also triggered by additional chip types for more comprehensive updates.

- **Bug Fixes**
  - Ensured consistent application of configuration settings across all relevant chat components.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 03:42:25 +00:00
EYHN
160e4c2a38 feat(core): add title order by (#12696)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for ordering documents by their title.
  - Introduced a new "title" system property type with an associated icon and display name.

- **Improvements**
  - Enhanced system property types to allow more flexible filtering options.
  - Improved filter condition handling to show an unknown filter UI when filtering methods or values are unavailable.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 02:41:55 +00:00
darkskygit
99198e246b fix: migration compatible for postgres (#12659)
fix AI-162

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

- **Chores**
  - Improved database migration scripts to prevent errors by ensuring changes are only applied if relevant tables exist. No visible changes to user features or functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-04 02:21:57 +00:00
darkskygit
44e1eb503f feat(server): improve embedding & rerank speed (#12666)
fix AI-109
2025-06-03 11:12:35 +00:00
CatsJuice
2288cbe54d chore(core): remove calendar integration feature flag (#12689)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - All available integrations are now shown without restriction; calendar integration is always visible.

- **Chores**
  - Removed an obsolete feature flag related to calendar integration.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 10:58:19 +00:00
JimmFly
23ff398994 feat(mobile): add delete account function (#12688)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a "Delete my account" option in mobile settings with role-based warnings and confirmation modals.
- **Enhancements**
  - Added flexible row and reverse row layout options for modal footers and action buttons on mobile.
- **Localization**
  - Added English translation for the "Delete my account" setting.
- **Style**
  - Updated styles for modal footers and action buttons on mobile.
  - Added styling for account deletion dialog descriptions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 10:17:45 +00:00
forehalo
ee931d546e fix(server): oauth should follow sign up restriction (#12683)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
	- Enforced signup restrictions for OAuth login based on configuration settings. Users will not be able to sign up via OAuth if signup is disabled by the administrator.
- **Bug Fixes**
	- Improved error handling during OAuth login when signup is not permitted.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 08:53:00 +00:00
aki-chang-dev
a02eed382d feat(android): chat base feature (#12684)
- **feat(android): chat send & receive**
- **[WIP] feat(android): markdown style for chat**
- **fix(android): fix auto scroll & ai message id replacement**
- **feat(android): replace icons**
- **refactor(android): design system**
- **feat(android): markdown style for chat**

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

- **New Features**
  - Introduced a comprehensive custom theme system with new color palettes, typography, and theme modes (Light, Dark, System).
  - Added support for rendering Markdown-formatted text in chat messages with custom styling.
  - Integrated new vector icons for UI elements such as lists, camera, image, send, close, and more.
  - Added composable icon and icon button components for consistent icon usage across the app.

- **Enhancements**
  - Updated chat UI to use the new theme, icons, and Markdown rendering for AI messages.
  - Improved chat message management and send button state handling with enhanced session retrieval and SSE stream processing.
  - Refined app bar and dropdown menu components with updated icons and theme integration.
  - Enhanced floating action button appearance with tinted vector drawable.
  - Unified UI components and styling under the AFFiNE design system in chat input and app bars.

- **Bug Fixes**
  - Corrected application and theme class naming for consistency.

- **Chores**
  - Added new dependencies for rich text and Markdown support.
  - Updated color and icon resources for a unified visual style.
  - Removed deprecated headers from authentication requests.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 07:35:48 +00:00
L-Sun
ab78b8e3ab fix(editor): playground init error (#12565)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
	- Improved stability when observing document title changes by ensuring internal checks before updating.
	- Enhanced document initialization to reuse existing documents when available, reducing unnecessary duplication and improving performance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 07:18:29 +00:00
yoyoyohamapi
3fe2ac4e46 refactor(core): add to edgeless as note icon (#12656)
### TL;DR

refactor(core): add to edgeless as note icon

> CLOSE AI-152

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

- **Style**
  - Updated the icon for the "Add to Edgeless as Note" chat action to improve visual representation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 07:02:04 +00:00
Brooooooklyn
d02aa8c7e0 fix(native): opt out napi-derive noop feature (#12686)
It would cause the napi-derive not work as expect in workspace level

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

- **Refactor**
  - Improved internal handling and type definitions for document parsing, resulting in clearer and more maintainable data structures.
- **Chores**
  - Introduced a new feature flag for mobile native builds, enabling conditional compilation for enhanced flexibility across Android and iOS.
  - Updated build scripts to support the new feature flag for both Android and iOS platforms.
  - Updated iOS app dependencies to newer versions, including Apollo iOS, ChidoriMenu, and swift-collections, and removed SQLite.swift.
- **Tests**
  - Enhanced Rust linting and testing workflows to run selectively across workspace packages with the new feature flag enabled.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 06:46:55 +00:00
akumatus
cce756365a feat(core): use claude 4 as default chat model (#12596)
Support [AI-59](https://linear.app/affine-design/issue/AI-59)

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

- **New Features**
  - Updated the default AI model for chat prompts to use Claude Sonnet 4.
- **Bug Fixes**
  - Improved model selection logic to better support reasoning features across more AI models.
- **Tests**
  - Enhanced test cases with consistent instructions for response length.
  - Skipped certain chat-related tests to refine test suite stability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 06:32:27 +00:00
yoyoyohamapi
a88dcc0951 fix(core): copy & paste ai message failed (#12655)
### TL;DR
* fix: ai message copy bug
  * Select a section of content in the Page
  * Choose the user's question from the AI chat conversation history and copy it
  * The copied (pasted) content will be the selected section from the Page

* fix: ai message paste bug
  * Select a section of content in the Page
  * Choose the user's question from the AI chat conversation history and copy it
  * Paste it into the AI Input, and the content will be pasted back into the original Page text

> CLOSE AF-2683

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

- **Bug Fixes**
  - Improved handling of copy and paste events in chat components to prevent unintended interactions with surrounding elements.
  - Enhanced test stability by adding error handling during embedding progress checks.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 06:09:44 +00:00
darkskygit
57208a3de4 fix(server): lost context after merge template (#12682)
fix AI-163
fix AI-164

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

## Summary by CodeRabbit

- **Tests**
  - Added a new test to verify multi-turn chat interactions, ensuring accurate handling of chat history and correct responses for translation and explanation requests.
- **Bug Fixes**
  - Improved chat session logic to better merge user messages and attachments, enhancing the accuracy and continuity of multi-step conversations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 05:46:18 +00:00
L-Sun
d8cbeb1bb1 fix(editor): can move frame by dragging title (#12661)
Close [BS-3351](https://linear.app/affine-design/issue/BS-3351/无法通过拖拽frame-title来拖拽frame)

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

- **New Features**
  - Improved rendering performance and consistency for widgets within frames.
  - Frame titles are now directly associated with individual frames and are draggable.

- **Bug Fixes**
  - Selection logic for frames has been refined to better handle locked states and title area interactions.

- **Refactor**
  - Frame title widget and related components have been simplified for clarity and maintainability.
  - Removed dynamic positioning and click toggling from frame titles for a cleaner interaction model.

- **Tests**
  - Added a test to verify that frame titles are draggable.
  - Temporarily disabled tests related to frame title stacking and selection due to ongoing changes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 05:14:39 +00:00
yoyoyohamapi
418b38e8de test(core): support fast embedding progress (#12685)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Tests**
  - Improved test stability by handling potential errors during embedding progress checks in end-to-end tests.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 05:00:21 +00:00
doouding
00ff373c01 fix: tuning drag and resize snapping (#12657)
### Changed
- Better snapping when resize elements

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

- **New Features**
  - Improved resizing behavior with enhanced alignment and snapping during element resizing, supporting rotation and multiple element selection.
  - Alignment lines now display more accurately when resizing elements.

- **Refactor**
  - Resizing logic updated to use scale factors instead of position deltas, enabling smoother and more precise resize operations.
  - Resize event data now includes richer details about handle positions, scaling, and original bounds.
  - Coordinate transformations and scaling now account for rotation and aspect ratio locking more robustly.
  - Cursor updates are disabled during active resize or rotate interactions for a smoother user experience.

- **Tests**
  - Updated resizing tests to use square shapes, ensuring consistent verification of aspect ratio maintenance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 04:12:57 +00:00
darkskygit
39830a410a feat(server): add metrics for copilot job event (#12575)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
	- Improved internal monitoring for AI embedding operations to enhance reliability and performance tracking. No changes to user-facing features.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 03:37:02 +00:00
fundon
ef3be4a816 fix(editor): font weight of label on open doc menu (#12672)
Closes: [BS-3496](https://linear.app/affine-design/issue/BS-3496/toolbar-菜单字重)

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

## Summary by CodeRabbit

- **Style**
  - Updated dropdown menu appearance by removing bold styling from button labels.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 03:22:18 +00:00
fundon
658393159b fix(editor): should check url origin and ip address url (#12663)
Closes: [BS-3578](https://linear.app/affine-design/issue/BS-3578/复制本的-url-无法识别)

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

- **New Features**
  - Improved URL validation to recognize and allow IPv4 addresses when the origin matches the provided base URL.

- **Tests**
  - Added a test to ensure URLs with IP addresses (e.g., http://127.0.0.1) are considered valid when the origin matches.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-06-03 03:08:17 +00:00
renovate[bot]
ac3f247f01 chore: bump up apollographql/apollo-ios version to v1.22.0 (#12670)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-03 10:32:12 +08:00
LongYinan
065d9c3b73 ci: fix release-mobile pipeline 2025-06-02 13:28:13 +08:00
LongYinan
2e58c11799 ci: do not use namespace runner anymore 2025-06-01 14:54:12 +08:00
L-Sun
10da3ad28e fix(editor): update card style after dragging it to note (#12660)
Close [BS-3148](https://linear.app/affine-design/issue/BS-3148/拖拽到note后,更新card样式)

### What Changes
- fix the style of card not updated after draggin it from canvas to note
- narrow type of specific card style by using `as const satisfies EmbedCardStyle[]`
- add type hint to the `props`, the second parameter  of `store.updateBlock`

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

- **New Features**
  - Added middleware to automatically update card styles when dragging blocks into notes.
- **Bug Fixes**
  - Ensured that dragging a bookmark card into a note preserves its style.
- **Tests**
  - Introduced an end-to-end test to verify bookmark card style is retained after drag-and-drop.
- **Refactor**
  - Enhanced type safety and clarity for card style configurations and block properties.
- **Chores**
  - Refined type annotations and assertions across multiple block style constants and toolbar configurations.
  - Improved generic typing for block update methods to increase type precision.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 10:55:29 +00:00
darkskygit
887a496f8b feat(server): add attachment fallback for ai sdk (#12639)
fix AI-161
2025-05-30 08:39:32 +00:00
darkskygit
ada69c80f6 feat(server): only trigger embedding in workspace sync (#12634)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Improved handling of workspace embedding events to ensure they are only triggered for workspace-type spaces.

- **Chores**
  - Added additional debug logging for document embedding jobs to aid in monitoring and troubleshooting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 08:04:18 +00:00
doufa
7b82dd656b fix(editor): connector not added as frame child (#12611)
Co-authored-by: L-Sun <zover.v@gmail.com>
2025-05-30 13:29:42 +08:00
EYHN
5c96566dd8 feat(core): save all docs options by mode (#12654)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Improved state management for display preferences, view mode, and selected collection in the "All Docs" page, making the experience more modular and consistent, especially when using multiple views.
  - Updated the header component to handle view changes more directly, allowing smoother toggling between different document views.

- **New Features**
  - Enhanced support for independent display settings in split view or multiple "All Docs" instances.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 04:42:27 +00:00
zzj3720
a35e1b1882 feat(editor): add database filter event tracking (#12645)
close: BS-3568

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

## Summary by CodeRabbit

- **New Features**
	- Added event tracking for filter creation in database views to improve activity monitoring and analytics.

- **Chores**
	- Updated internal event types to support new database view tracking.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 04:27:31 +00:00
yoyoyohamapi
756847d3cb fix(core): prevent ai input tip loop-play (#12600)
### TL;DR

* fix(core): prevent ai input tip loop-play

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

- **New Features**
  - Added an option to control whether tips in the AI chat composer scroll continuously or stop after the last tip.

- **Style**
  - Improved layout and spacing in the embedding status tooltip for better readability and alignment.

- **Refactor**
  - Updated the structure of elements in the embedding status tooltip for more consistent formatting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 03:40:11 +00:00
forehalo
3c3a8bb107 feat(server): time duration helper (#12562)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced support for parsing and converting duration strings (e.g., "1h30m") into milliseconds and seconds.
  - Added utility methods to handle a wide range of time units and their combinations.
  - Added functions to calculate dates offset before or after a given date by specified durations.
- **Tests**
  - Implemented comprehensive automated tests to ensure accurate parsing and conversion of duration strings.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 03:21:31 +00:00
forehalo
88eec2cdfb chore(server): disable version check for oauth callback (#12640)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved Apple OAuth login reliability by ensuring client version checks do not block the callback process.

- **New Features**
  - Enhanced OAuth account information by including an optional display name field.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 03:05:38 +00:00
renovate
52777b0064 chore: bump up @types/mime-types version to v3 (#12653)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@types/mime-types](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mime-types) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mime-types)) | [`^2.1.4` -> `^3.0.0`](https://renovatebot.com/diffs/npm/@types%2fmime-types/2.1.4/3.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fmime-types/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fmime-types/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fmime-types/2.1.4/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fmime-types/2.1.4/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-30 02:49:07 +00:00
JimmFly
00ccd2d865 chore: display join button text based on invitation type (#12650)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - The button on the Request to Join page now dynamically updates its label to show "accept invitation" when an invitation is pending, improving clarity for users responding to workspace invites.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 02:18:25 +00:00
doodlewind
5d94bd41a4 feat(editor): support triangle and diamond shape in shape dom renderer (#12331)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/lEGcysB4lFTEbCwZ8jMv/ebfcee12-cebb-4b98-81e2-f9f670b4de96.png)

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

- **New Features**
  - Improved rendering for diamond and triangle shapes using SVG, resulting in more accurate stroke and fill display.
- **Bug Fixes**
  - Ensured background and border styles do not interfere with SVG-based shapes.
- **Tests**
  - Added tests to verify correct DOM rendering for diamond and triangle shapes.
- **Refactor**
  - Streamlined and clarified the rendering logic for polygonal shapes, separating SVG and CSS rendering paths.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 02:04:09 +00:00
fundon
20d8d6131a fix(editor): text color of buttons on toolbar (#12642)
Closes: [BS-3574](https://linear.app/affine-design/issue/BS-3574/affine-light-模式,画板dark-模式,toolbar配色崩坏)

<img width="1068" alt="Screenshot 2025-05-29 at 17 46 38" src="https://github.com/user-attachments/assets/66a731dc-0bc6-4b0c-9712-787a78525ddf" />
<img width="1095" alt="Screenshot 2025-05-29 at 17 46 17" src="https://github.com/user-attachments/assets/3317ea83-837f-4c50-abee-ebb859fce3d9" />
<img width="1075" alt="Screenshot 2025-05-29 at 17 46 05" src="https://github.com/user-attachments/assets/3291810b-3aa1-4fce-aa8b-415be5e10c46" />
<img width="1096" alt="Screenshot 2025-05-29 at 17 45 54" src="https://github.com/user-attachments/assets/a5ad5e41-4eb9-4578-85a6-c6b773a03da9" />

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

## Summary by CodeRabbit

- **Style**
  - Updated toolbar theme styles to include an additional color variable for improved customization.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 01:47:50 +00:00
doodlewind
94539ac0d0 perf(editor): lazy rendering for dom renderer (#12638)
Before (brush updated even when it's not being dragged):

https://github.com/user-attachments/assets/e56ce326-56ae-4cac-a5f8-86be35fd8fcd

After (fine-grained element level update):

https://github.com/user-attachments/assets/712f4e22-0830-455d-bbe1-0f575e8920ac

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

- **New Features**
  - Improved rendering performance by introducing incremental updates, ensuring only changed elements are updated instead of re-rendering everything.
  - Enhanced responsiveness when elements are added, removed, or updated, as well as during viewport, size, or zoom changes.

- **Bug Fixes**
  - Reduced unnecessary full re-renders, leading to smoother and more efficient user interactions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-30 01:32:36 +00:00
Brooooooklyn
e1ce42a6fc feat(native): upgrade NAPI-RS to 3.0.0 beta (#12652)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Added a default export for the native binding in the frontend native module, allowing easier imports.

- **Refactor**
	- Streamlined and updated Rust-to-JavaScript type conversions and lifetime handling for improved safety and consistency.
	- Improved object and array construction in Rust modules for more idiomatic usage.
	- Simplified boolean and null value handling in JavaScript interop layers.

- **Chores**
	- Upgraded several dependencies and development tools to newer versions across backend, frontend, and common packages.
	- Updated build scripts for the frontend native package to simplify commands.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 16:09:32 +00:00
renovate
2a7f0162cf chore: bump up nestjs-cls version to v6 (#12648)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [nestjs-cls](https://papooch.github.io/nestjs-cls/) ([source](https://redirect.github.com/Papooch/nestjs-cls)) | [`^5.0.0` -> `^6.0.0`](https://renovatebot.com/diffs/npm/nestjs-cls/5.4.3/6.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nestjs-cls/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nestjs-cls/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nestjs-cls/5.4.3/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nestjs-cls/5.4.3/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>Papooch/nestjs-cls (nestjs-cls)</summary>

### [`v6.0.0`](https://redirect.github.com/Papooch/nestjs-cls/releases/tag/nestjs-cls%406.0.0)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/nestjs-cls@5.4.3...nestjs-cls@6.0.0)

##### Breaking Changes

-   The experimental Plugin API has been changed ([4623607](https://redirect.github.com/Papooch/nestjs-cls/commits/4623607))
-   Access to Proxy providers moved to a dedicated `proxy` property on the ClsService ([82cdeef](https://redirect.github.com/Papooch/nestjs-cls/commits/82cdeef))

##### Features

-   **core**: introduce hooks for the Plugin API ([#&#8203;283](https://redirect.github.com/Papooch/nestjs-cls/issues/283)) ([4623607](https://redirect.github.com/Papooch/nestjs-cls/commits/4623607))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-29 15:45:33 +00:00
renovate
34a5d9dec3 chore: bump up @nestjs-cls/transactional-adapter-prisma version to v1.2.21 (#12643)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@nestjs-cls/transactional-adapter-prisma](https://papooch.github.io/nestjs-cls/) ([source](https://redirect.github.com/Papooch/nestjs-cls)) | [`1.2.20` -> `1.2.21`](https://renovatebot.com/diffs/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.20/1.2.21) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.20/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.20/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>Papooch/nestjs-cls (@&#8203;nestjs-cls/transactional-adapter-prisma)</summary>

### [`v1.2.21`](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional-adapter-prisma@1.2.20...@nestjs-cls/transactional-adapter-prisma@1.2.21)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional-adapter-prisma@1.2.20...@nestjs-cls/transactional-adapter-prisma@1.2.21)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-29 15:29:07 +00:00
renovate
c68598c0e0 chore: bump up opentelemetry (#12183)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@opentelemetry/exporter-prometheus](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.201.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fexporter-prometheus/0.57.2/0.201.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fexporter-prometheus/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fexporter-prometheus/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fexporter-prometheus/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fexporter-prometheus/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/host-metrics](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/opentelemetry-host-metrics#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.35.4` -> `^0.36.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fhost-metrics/0.35.5/0.36.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fhost-metrics/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fhost-metrics/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fhost-metrics/0.35.5/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fhost-metrics/0.35.5/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.201.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation/0.57.2/0.201.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-graphql](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-graphql#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.47.0` -> `^0.49.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-graphql/0.47.1/0.49.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-graphql/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-graphql/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-graphql/0.47.1/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-graphql/0.47.1/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-http](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.201.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-http/0.57.2/0.201.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-http/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-http/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-http/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-http/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-ioredis](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-ioredis#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.47.0` -> `^0.49.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-ioredis/0.47.1/0.49.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-ioredis/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-ioredis/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-ioredis/0.47.1/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-ioredis/0.47.1/0.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-nestjs-core](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-nestjs-core#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.44.0` -> `^0.47.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-nestjs-core/0.44.1/0.47.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-nestjs-core/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-nestjs-core/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-nestjs-core/0.44.1/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-nestjs-core/0.44.1/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-socket.io](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-socket.io#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.46.0` -> `^0.48.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-socket.io/0.46.1/0.48.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-socket.io/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-socket.io/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-socket.io/0.46.1/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-socket.io/0.46.1/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/sdk-node](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-sdk-node) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.201.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsdk-node/0.57.2/0.201.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsdk-node/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsdk-node/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsdk-node/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsdk-node/0.57.2/0.201.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/semantic-conventions](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`1.33.0` -> `1.34.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsemantic-conventions/1.33.0/1.34.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsemantic-conventions/1.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsemantic-conventions/1.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsemantic-conventions/1.33.0/1.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsemantic-conventions/1.33.0/1.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>open-telemetry/opentelemetry-js (@&#8203;opentelemetry/exporter-prometheus)</summary>

### [`v0.201.1`](4ce5bd1651...9dbd1e446b)

[Compare Source](4ce5bd1651...9dbd1e446b)

### [`v0.201.0`](7fde94081e...4ce5bd1651)

[Compare Source](7fde94081e...4ce5bd1651)

### [`v0.200.0`](ac8641a5db...7fde94081e)

[Compare Source](ac8641a5db...7fde94081e)

</details>

<details>
<summary>open-telemetry/opentelemetry-js-contrib (@&#8203;opentelemetry/host-metrics)</summary>

### [`v0.36.0`](d4d3c4f14f...32abc4c3c0)

[Compare Source](d4d3c4f14f...32abc4c3c0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC4zMy42IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-29 15:10:07 +00:00
Flrande
9c81c24fbe fix(editor): clear selection after toggle latex editor (#12637)
- **fix(editor): clear selection after toggle latex editor**
- **chore: remove useless test**

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

- **New Features**
  - LaTeX rendering now outputs MathML format for improved accessibility and compatibility.
  - Added support for KaTeX styling to enhance LaTeX display in the playground.

- **Bug Fixes**
  - Improved editor behavior by resetting the selection group before opening the LaTeX editor.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 14:37:41 +00:00
congzhou09
517aec79ba fix(editor): invoke subscriber.unsubscribe() during cleanup (#12628) 2025-05-29 22:30:55 +08:00
fengmk2
31a1841e25 chore(server): log removed job id (#12646)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
	- Improved log messages to include job IDs when jobs are removed from the queue, enhancing traceability for users monitoring job activity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 11:48:16 +00:00
L-Sun
625e8392a6 fix(editor): missing block in select-all set (#12627)
This PR fixed that the block is missing in the selecte-all set after undo a dragging from canvas to note. Related to #12473

### Before

https://github.com/user-attachments/assets/828b4f48-689a-4975-bba6-f380f324de3c

### After

https://github.com/user-attachments/assets/9996c1ca-c3ea-415c-ab2b-359d826a1ffa

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

- **Bug Fixes**
  - Improved handling of changes to child elements, ensuring more accurate updates when items are added or removed. This results in more reliable display and interaction with nested components.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 11:04:01 +00:00
pengx17
f616bd29d3 fix(core): adjust some uis for sharing (#12486)
fix AF-2660

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

## Summary by CodeRabbit

- **Style**
  - Improved visual appearance of sidebar buttons and quick search input, including reduced sizes, updated padding, and enhanced hover effects.
  - Adjusted layout spacing for quick search and new page elements in the sidebar.
  - Updated share button styling to use the primary variant.

- **New Features**
  - Notification cards now only display messages and action footers when relevant, providing a cleaner interface.

- **Refactor**
  - Removed shortcut hint and spotlight elements from the quick search input for a simplified user experience.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 09:40:11 +00:00
CatsJuice
d6b9e9c60a feat(mobile): share page support (#12351)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved server context awareness for workspaces on mobile web.
  - Enhanced handling for missing workspaces by displaying a share page when accessing a document detail route in mobile web environments.

- **Bug Fixes**
  - Workspace list now refreshes automatically when switching workspace IDs.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 09:16:13 +00:00
donteatfriedrice
bc67766bb9 fix(editor): cleanup transformer middleware slot subscriptions (#12630)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved resource management by introducing explicit cleanup for various middleware components, ensuring that resources are properly released when no longer needed.

- **Refactor**
  - Updated middleware logic to support cleanup functions, enhancing the stability and performance of the application by preventing potential memory leaks.

- **Chores**
  - Enhanced lifecycle management in core systems to automatically dispose of resources when appropriate.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 08:33:30 +00:00
L-Sun
9a96cfded0 fix(editor): viewportElement is undefined in edgeless root block (#12626)
This PR fixed that `rootComponent.viewportElement` is undefeined in edgeless mode, which leads that toast can not be render in playground.

388641bc89/blocksuite/affine/components/src/toast/create.ts (L23-L35)

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

## Summary by CodeRabbit

- **Refactor**
  - Improved internal code organization for better maintainability. No changes to visible features or functionality.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 08:10:54 +00:00
L-Sun
77392efaa2 chore(editor): remove feature flag of embed doc with alias (#12620)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Toolbar actions related to embedding and duplicating documents are now always available without restrictions.

- **Chores**
  - Removed the feature flag controlling embed document alias features for a simpler user experience.

- **Tests**
  - Updated test setup to remove reliance on the deprecated feature flag.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 07:55:52 +00:00
L-Sun
927b4f4430 chore(editor): adjust format of date time in slash menu (#12631)
Closes: #12624

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

## Summary by CodeRabbit

- **Refactor**
  - Updated the time formatting to display dates as "yyyy-mm-dd hh:mm" instead of "mm-dd hh:mm".

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 07:32:35 +00:00
renovate
9ec1d08d98 chore: bump up @chromatic-com/storybook version to v4 (#12618)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@chromatic-com/storybook](https://redirect.github.com/chromaui/addon-visual-tests) | [`^3.2.2` -> `^4.0.0`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.6/4.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@chromatic-com%2fstorybook/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@chromatic-com%2fstorybook/3.2.6/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.6/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>chromaui/addon-visual-tests (@&#8203;chromatic-com/storybook)</summary>

### [`v4.0.0`](https://redirect.github.com/chromaui/addon-visual-tests/compare/v3.2.6...814ef25cc6d4fd763d089f67b21f8b56429d6512)

[Compare Source](https://redirect.github.com/chromaui/addon-visual-tests/compare/v3.2.6...v4.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-29 07:17:38 +00:00
JimmFly
86cd92a878 fix(core): add loading status to share page button (#12288)
close AF-2615

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

## Summary by CodeRabbit

- **Enhancements**
  - Improved the share menu's user experience by showing a loading indicator and disabling the public page button during revalidation. This prevents user interaction while the share info is updating.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 07:02:43 +00:00
akumatus
ab28213df2 feat(core): support synchronization of ai playground input value and send button (#12607)
Close [AI-86](https://linear.app/affine-design/issue/AI-86)

[123.mov <span class="graphite__hidden">(uploaded via Graphite)</span> <img class="graphite__hidden" src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/01ca98ef-60a3-4a42-9bef-62993f6a657b.mov" />](https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/01ca98ef-60a3-4a42-9bef-62993f6a657b.mov)
2025-05-29 06:26:32 +00:00
fengmk2
39cb1afedb fix(server): limit rootDoc snapshot size (#12625)
close CLOUD-225

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

## Summary by CodeRabbit

- **New Features**
  - Added support for reading document blocks without requiring a workspace or root document snapshot.
- **Bug Fixes**
  - Improved handling of large workspace snapshots by skipping them when they exceed 10MB.
- **Tests**
  - Introduced new test cases to cover scenarios where root or workspace snapshots are absent.
  - Expanded snapshot tests for document block reading.
- **Refactor**
  - Updated several function signatures to make root and workspace snapshot parameters optional for greater flexibility.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 05:32:31 +00:00
JimmFly
1eb9e62075 fix(core): adjust sign in page z-index (#12476)
![CleanShot 2025-05-23 at 14 13 11@2x](https://github.com/user-attachments/assets/b5a26ece-1a37-4c89-be88-b3026331999d)

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

## Summary by CodeRabbit

- **Style**
  - Improved layering of the sign-in page container to ensure it displays above other elements when necessary.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 05:18:14 +00:00
JimmFly
ef5f96bfb6 fix(core): loadDoc tracking events not tracking correctly (#11960)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Improved the reliability and clarity of loading state and error tracking in the editor, resulting in more accurate feedback during document loading.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 05:03:27 +00:00
yoyoyohamapi
b9c70985a1 fix(core): workspace embedding settings icon (#12622)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Updated the icon for the embedding workspace setting to a new design for improved visual clarity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 04:48:56 +00:00
yoyoyohamapi
66db63c845 feat(core): no-access & local for workspace embedding (#12598)
## TL;DR

Workspace embedding settings opt:

* **local workspace**: show enable cloud panel
* **no-access workspace**: disable settings panel

![截屏2025-05-28 14.59.36.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/58e1f511-9bde-487e-a4cd-f0818c582fcb.png)

![截屏2025-05-28 15.00.19.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/25c3db30-bf31-4c92-a771-55ce871c9a7a.png)

> CLOSE AI-155

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

- **New Features**
  - Embedding settings UI now displays a tooltip indicating that only workspace owners can enable Workspace Embedding.
  - Embedding settings are modularized for local and cloud workspaces, with clear separation and appropriate enablement controls.
  - Attachments in embedding settings cannot be deleted when the settings are disabled.

- **Accessibility**
  - Settings wrapper now includes an aria-disabled attribute for improved assistive technology support.

- **Localization**
  - Added a new tooltip message: "Only the workspace owner can enable Workspace Embedding."

- **Tests**
  - Added end-to-end tests for local workspace UI and disabled state when not the workspace owner.

- **UI Improvements**
  - Updated settings panel to better reflect disabled states with tooltips and conditional controls.
  - Improved synchronization when opening the embedding settings panel for a smoother user experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 04:33:07 +00:00
L-Sun
32a29657e4 fix(editor): incorrect position of toolbar in android (#12614)
### Before
Extra padding between toolbaar and keyboard
![CleanShot 2025-05-28 at 18 56 02](https://github.com/user-attachments/assets/9c865f7c-3acf-41b6-9436-d8d2d4c89c83)

### After
![CleanShot 2025-05-28 at 18 55 19](https://github.com/user-attachments/assets/0a4aeb01-32af-4420-b204-feca3981641b)

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved accuracy of keyboard height calculations by properly accounting for the navigation bar height on Android devices.

- **Refactor**
  - Standardized naming conventions for navigation bar height methods and unit conversion utilities to enhance consistency across the app.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 04:19:01 +00:00
renovate
1aa0cd27d5 chore: bump up storybook monorepo to v9 (major) (#12616)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@storybook/addon-links](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/links) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/links)) | [`^8.4.7` -> `^9.0.0`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/8.6.14/9.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@storybook/react](https://redirect.github.com/storybookjs/storybook/tree/next/code/renderers/react) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/renderers/react)) | [`^8.4.7` -> `^9.0.0`](https://renovatebot.com/diffs/npm/@storybook%2freact/8.6.14/9.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@storybook/react-vite](https://redirect.github.com/storybookjs/storybook/tree/next/code/frameworks/react-vite) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite)) | [`^8.4.7` -> `^9.0.0`](https://renovatebot.com/diffs/npm/@storybook%2freact-vite/8.6.14/9.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact-vite/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact-vite/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact-vite/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact-vite/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [storybook](https://storybook.js.org) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/core)) | [`^8.4.7` -> `^9.0.0`](https://renovatebot.com/diffs/npm/storybook/8.6.14/9.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/8.6.14/9.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>storybookjs/storybook (@&#8203;storybook/addon-links)</summary>

### [`v9.0.0`](https://redirect.github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#900)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.6.14...v9.0.0)

##### Storybook 9.0 is here

This is a huge release focused on testing and bundle size.

-   Component testing
    -   👆 Interactions
    -   ️ Accessibility
    -   👁️ Visual changes
    -   🛡️ Coverage
-   🪶 48% lighter bundle
-   🏷️ Tags-based organization
-   🌐 Story globals
-   🏗️ Major upgrades: Svelte, Next, React Native, Angular

Please checkout our [Migration guide](https://storybook.js.org/docs/9/migration-guide) to upgrade from earlier versions of Storybook. To see a comprehensive list of changes that went into 9.0, you can refer to the [9.0 prerelease changelogs](./CHANGELOG.prerelease.md)

<details>
<summary>List of all updates</summary>

-   Addon A11y: Add `linkPath` to Axe results and use it in copy link action - [#&#8203;31009](https://redirect.github.com/storybookjs/storybook/pull/31009), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon A11y: Fix setup as part of storybook create - [#&#8203;31403](https://redirect.github.com/storybookjs/storybook/pull/31403), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon A11y: Fix usage of axe-core in pnpm projects - [#&#8203;31422](https://redirect.github.com/storybookjs/storybook/pull/31422), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon A11y: Fix various issues and inconsistencies - [#&#8203;31432](https://redirect.github.com/storybookjs/storybook/pull/31432), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon A11y: Improve selector automigration detection - [#&#8203;31392](https://redirect.github.com/storybookjs/storybook/pull/31392), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon A11y: Only run checks in story mode - [#&#8203;30976](https://redirect.github.com/storybookjs/storybook/pull/30976), thanks [@&#8203;kroeder](https://redirect.github.com/kroeder)!
-   Addon A11y: Provide full report in a11y manual runs - [#&#8203;31325](https://redirect.github.com/storybookjs/storybook/pull/31325), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon A11y: Use short titles and friendly summary messages in A11y report - [#&#8203;31185](https://redirect.github.com/storybookjs/storybook/pull/31185), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon Controls: Fix loading state UI in addon panel - [#&#8203;31168](https://redirect.github.com/storybookjs/storybook/pull/31168), thanks [@&#8203;iineineno03k](https://redirect.github.com/iineineno03k)!
-   Addon Docs: Fix `layout: centered` in conjunction with `inline: false` - [#&#8203;31430](https://redirect.github.com/storybookjs/storybook/pull/31430), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon Docs: Fix docs-content overflow with TOC - [#&#8203;27167](https://redirect.github.com/storybookjs/storybook/pull/27167), thanks [@&#8203;njsokol](https://redirect.github.com/njsokol)!
-   Addon Docs: Fix iframe content width in centered layout - [#&#8203;31320](https://redirect.github.com/storybookjs/storybook/pull/31320), thanks [@&#8203;Audie80](https://redirect.github.com/Audie80)!
-   Addon Docs: Improve TableOfContents HTML structure and a11y - [#&#8203;31327](https://redirect.github.com/storybookjs/storybook/pull/31327), thanks [@&#8203;Sidnioulz](https://redirect.github.com/Sidnioulz)!
-   Addon Docs: Reset error boundary when story changes to recover from erros - [#&#8203;31242](https://redirect.github.com/storybookjs/storybook/pull/31242), thanks [@&#8203;yatishgoel](https://redirect.github.com/yatishgoel)!
-   Addon Docs: Simplify color parsing and color cycling logic - [#&#8203;29840](https://redirect.github.com/storybookjs/storybook/pull/29840), thanks [@&#8203;leyvae](https://redirect.github.com/leyvae)!
-   Addon Docs: Update telejson - [#&#8203;31115](https://redirect.github.com/storybookjs/storybook/pull/31115), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addon Pseudo States: Move package into monorepo - [#&#8203;31123](https://redirect.github.com/storybookjs/storybook/pull/31123), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon Test: Improve unhandled error messages - [#&#8203;30755](https://redirect.github.com/storybookjs/storybook/pull/30755), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon Test: Rename `@storybook/experimental-addon-test` to `@storybook/addon-vitest` - [#&#8203;31014](https://redirect.github.com/storybookjs/storybook/pull/31014), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addon Vitest: Ensure vitest exclusions are relative to the project root, not cwd - [#&#8203;31514](https://redirect.github.com/storybookjs/storybook/pull/31514), thanks [@&#8203;mrginglymus](https://redirect.github.com/mrginglymus)!
-   Addon Vitest: Fix broken docs links - [#&#8203;31445](https://redirect.github.com/storybookjs/storybook/pull/31445), thanks [@&#8203;kylegach](https://redirect.github.com/kylegach)!
-   Addon Vitest: Fix watch mode for new files - [#&#8203;31156](https://redirect.github.com/storybookjs/storybook/pull/31156), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addon Vitest: Ignore mdx files as part of tests - [#&#8203;31457](https://redirect.github.com/storybookjs/storybook/pull/31457), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon Vitest: Improve handling multiple browser mode projects - [#&#8203;31508](https://redirect.github.com/storybookjs/storybook/pull/31508), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon Vitest: Support `vitest.projects.ts` file as workspace file during postinstall - [#&#8203;31565](https://redirect.github.com/storybookjs/storybook/pull/31565), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon Vitest: Transform [@&#8203;storybook/nextjs](https://redirect.github.com/storybook/nextjs) imports to [@&#8203;storybook/nextjs-vite](https://redirect.github.com/storybook/nextjs-vite) during init - [#&#8203;31180](https://redirect.github.com/storybookjs/storybook/pull/31180), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addon Vitest: Use its own cache directory - [#&#8203;31439](https://redirect.github.com/storybookjs/storybook/pull/31439), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Addon-a11y: Replace `element` parameter with `context` - [#&#8203;31036](https://redirect.github.com/storybookjs/storybook/pull/31036), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-A11y: Various improvements - [#&#8203;30774](https://redirect.github.com/storybookjs/storybook/pull/30774), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Addon-Essentials: Remove addon-docs - [#&#8203;30856](https://redirect.github.com/storybookjs/storybook/pull/30856), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Addon-Test: Automatically load before all - [#&#8203;30584](https://redirect.github.com/storybookjs/storybook/pull/30584), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Addon-test: Exclude `storybook-static` from coverage reports - [#&#8203;31005](https://redirect.github.com/storybookjs/storybook/pull/31005), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-test: Fix watching non-story files, run all tests on preview change - [#&#8203;31045](https://redirect.github.com/storybookjs/storybook/pull/31045), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-Test: Migrate to new test provider API, drop Vitest 2 support - [#&#8203;30875](https://redirect.github.com/storybookjs/storybook/pull/30875), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-Vitest: Always clean coverage before (re)running - [#&#8203;31540](https://redirect.github.com/storybookjs/storybook/pull/31540), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-vitest: Fix coverage being disabled with Run All button - [#&#8203;31074](https://redirect.github.com/storybookjs/storybook/pull/31074), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-vitest: Fix coverage when restarting Vitest due to config change - [#&#8203;31069](https://redirect.github.com/storybookjs/storybook/pull/31069), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-vitest: Fix wrong test count in telemetry - [#&#8203;31504](https://redirect.github.com/storybookjs/storybook/pull/31504), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-vitest: Remove internal log for `staticDir` - [#&#8203;31340](https://redirect.github.com/storybookjs/storybook/pull/31340), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Addon-vitest: Support paths with spaces - [#&#8203;31437](https://redirect.github.com/storybookjs/storybook/pull/31437), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Addons: Add shim Storybook addons for previously removed addons - [#&#8203;31520](https://redirect.github.com/storybookjs/storybook/pull/31520), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addons: Move [@&#8203;storybook/addon-interactions](https://redirect.github.com/storybook/addon-interactions) into core - [#&#8203;30916](https://redirect.github.com/storybookjs/storybook/pull/30916), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addons: Remove [@&#8203;storybook/addon-storysource](https://redirect.github.com/storybook/addon-storysource) - [#&#8203;31007](https://redirect.github.com/storybookjs/storybook/pull/31007), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Addons: Update the Viewport and Background Addon - [#&#8203;30841](https://redirect.github.com/storybookjs/storybook/pull/30841), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   AddonVitest: Use framework package, not renderer - [#&#8203;31133](https://redirect.github.com/storybookjs/storybook/pull/31133), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   All packages: Remove unused dependencies - [#&#8203;31227](https://redirect.github.com/storybookjs/storybook/pull/31227), thanks [@&#8203;webpro](https://redirect.github.com/webpro)!
-   Angular: Add [@&#8203;angular-devkit/build-angular](https://redirect.github.com/angular-devkit/build-angular) to default installed pacakages in angular - [#&#8203;30790](https://redirect.github.com/storybookjs/storybook/pull/30790), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Angular: Filter non-inputs from controls - [#&#8203;30550](https://redirect.github.com/storybookjs/storybook/pull/30550), thanks [@&#8203;robertIsaac](https://redirect.github.com/robertIsaac)!
-   Angular: remove invalid defaults for start-storybook - [#&#8203;31337](https://redirect.github.com/storybookjs/storybook/pull/31337), thanks [@&#8203;AgentEnder](https://redirect.github.com/AgentEnder)!
-   ArgTypes: Always extract argTypes, even without `addon-docs` - [#&#8203;31488](https://redirect.github.com/storybookjs/storybook/pull/31488), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Autoblock: Add autoblocker for addon-test - [#&#8203;31068](https://redirect.github.com/storybookjs/storybook/pull/31068), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Autoblock: Fix link - [#&#8203;31236](https://redirect.github.com/storybookjs/storybook/pull/31236), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   AutoBlocker: Add major version upgrade blocker - [#&#8203;30714](https://redirect.github.com/storybookjs/storybook/pull/30714), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Automigrate: Disable `missingStorybookDependencies` for 9.0 - [#&#8203;30769](https://redirect.github.com/storybookjs/storybook/pull/30769), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Automigrate: Prefer framework import - [#&#8203;30785](https://redirect.github.com/storybookjs/storybook/pull/30785), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Automigration: Add new Storybook addons to consolidated packages mapping - [#&#8203;30993](https://redirect.github.com/storybookjs/storybook/pull/30993), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Adjust addon-docs install condition - [#&#8203;31343](https://redirect.github.com/storybookjs/storybook/pull/31343), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Always scan file system to substitute essential addons - [#&#8203;31176](https://redirect.github.com/storybookjs/storybook/pull/31176), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Correctly apply the wrap-require automigration in ESM modules - [#&#8203;31420](https://redirect.github.com/storybookjs/storybook/pull/31420), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Enhance import transformation to handle partial package matches - [#&#8203;31033](https://redirect.github.com/storybookjs/storybook/pull/31033), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Ensure correct addition of missing dependencies - [#&#8203;31023](https://redirect.github.com/storybookjs/storybook/pull/31023), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Fix an issue when main.js addons have dynamic values - [#&#8203;31273](https://redirect.github.com/storybookjs/storybook/pull/31273), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Fix consolidated-imports with sub-paths - [#&#8203;31135](https://redirect.github.com/storybookjs/storybook/pull/31135), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Automigration: Fix wrap require wrapper - [#&#8203;31569](https://redirect.github.com/storybookjs/storybook/pull/31569), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Improve renderer to framework automigration - [#&#8203;31397](https://redirect.github.com/storybookjs/storybook/pull/31397), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Migrate users to codePanel - [#&#8203;31313](https://redirect.github.com/storybookjs/storybook/pull/31313), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Misc addon-essentials migration fixes - [#&#8203;31072](https://redirect.github.com/storybookjs/storybook/pull/31072), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Pass over flags when calling automigrations - [#&#8203;31342](https://redirect.github.com/storybookjs/storybook/pull/31342), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Remove `@storybook/addon-essentials` proper - [#&#8203;31015](https://redirect.github.com/storybookjs/storybook/pull/31015), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Automigration: Remove `docs.autodocs` field - [#&#8203;31203](https://redirect.github.com/storybookjs/storybook/pull/31203), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Automigration: Respect config-dir option - [#&#8203;31233](https://redirect.github.com/storybookjs/storybook/pull/31233), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigration: Update mapping for '[@&#8203;storybook/experimental-nextjs-vite](https://redirect.github.com/storybook/experimental-nextjs-vite)' - [#&#8203;30991](https://redirect.github.com/storybookjs/storybook/pull/30991), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigrations: Add logging - [#&#8203;31066](https://redirect.github.com/storybookjs/storybook/pull/31066), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigrations: Fix installation of addon-docs - [#&#8203;31399](https://redirect.github.com/storybookjs/storybook/pull/31399), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Automigrations: Re-add renderer-to-framework and fix issue in monorepositories - [#&#8203;31011](https://redirect.github.com/storybookjs/storybook/pull/31011), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Backgrounds/Viewport: Fix resetting - [#&#8203;31386](https://redirect.github.com/storybookjs/storybook/pull/31386), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Blocks: IconGallery improvement - [#&#8203;30743](https://redirect.github.com/storybookjs/storybook/pull/30743), thanks [@&#8203;leeovictor](https://redirect.github.com/leeovictor)!
-   Build: Update import paths and enable syntax minification - [#&#8203;31390](https://redirect.github.com/storybookjs/storybook/pull/31390), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Cleanup: Remove obsolete dependency - [#&#8203;31177](https://redirect.github.com/storybookjs/storybook/pull/31177), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   CLI: Add `storybook-static` to `.gitignore` on init - [#&#8203;31201](https://redirect.github.com/storybookjs/storybook/pull/31201), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   CLI: Add detection for the storybook package being behind any other core packages - [#&#8203;30861](https://redirect.github.com/storybookjs/storybook/pull/30861), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   CLI: Add index command / API - [#&#8203;30071](https://redirect.github.com/storybookjs/storybook/pull/30071), thanks [@&#8203;shilman](https://redirect.github.com/shilman)!
-   CLI: Add React Native `.rnstorybook` CLI automigration - [#&#8203;30882](https://redirect.github.com/storybookjs/storybook/pull/30882), thanks [@&#8203;shilman](https://redirect.github.com/shilman)!
-   CLI: Detect correct storybook version on upgrade - [#&#8203;31393](https://redirect.github.com/storybookjs/storybook/pull/31393), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   CLI: Do not install renderer package on `init` - [#&#8203;30799](https://redirect.github.com/storybookjs/storybook/pull/30799), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   CLI: Enhance compatibility check: deprecated detection - [#&#8203;31317](https://redirect.github.com/storybookjs/storybook/pull/31317), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   CLI: Fix framework for preview imports - [#&#8203;31101](https://redirect.github.com/storybookjs/storybook/pull/31101), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   CLI: Fix get versions utility for NPM - [#&#8203;29577](https://redirect.github.com/storybookjs/storybook/pull/29577), thanks [@&#8203;johnrcui](https://redirect.github.com/johnrcui)!
-   CLI: Improve CLI upgrade process for [@&#8203;latest](https://redirect.github.com/latest) and [@&#8203;next](https://redirect.github.com/next) - [#&#8203;31356](https://redirect.github.com/storybookjs/storybook/pull/31356), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   CLI: Improve package upgrade logic - [#&#8203;31406](https://redirect.github.com/storybookjs/storybook/pull/31406), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   CLI: Install prereleases of `@chromatic-com/storybook` - [#&#8203;30662](https://redirect.github.com/storybookjs/storybook/pull/30662), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   CLI: Make sure that the add commands logs all output to the console - [#&#8203;30865](https://redirect.github.com/storybookjs/storybook/pull/30865), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   CLI: Remove `@latest` from `yarn create` commands - [#&#8203;31458](https://redirect.github.com/storybookjs/storybook/pull/31458), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   CLI: Supress npm notice update log messages - [#&#8203;31334](https://redirect.github.com/storybookjs/storybook/pull/31334), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   CLI: Tweak init prompt - [#&#8203;31376](https://redirect.github.com/storybookjs/storybook/pull/31376), thanks [@&#8203;shilman](https://redirect.github.com/shilman)!
-   CLI: Update nx docs in Storybook detection error - [#&#8203;31266](https://redirect.github.com/storybookjs/storybook/pull/31266), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   CLI: Wrap object addon names in wrap-require migration - [#&#8203;31285](https://redirect.github.com/storybookjs/storybook/pull/31285), thanks [@&#8203;yatishgoel](https://redirect.github.com/yatishgoel)!
-   CodePanel: Show originalSource code - [#&#8203;31456](https://redirect.github.com/storybookjs/storybook/pull/31456), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Controls: Embed addon-controls into the core - [#&#8203;30864](https://redirect.github.com/storybookjs/storybook/pull/30864), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Controls: Remove empty state video link - [#&#8203;31539](https://redirect.github.com/storybookjs/storybook/pull/31539), thanks [@&#8203;kylegach](https://redirect.github.com/kylegach)!
-   Core / Addon A11y: Emit `STORY_HOT_UPDATED` and rerun A11y tests on HMR - [#&#8203;31423](https://redirect.github.com/storybookjs/storybook/pull/31423), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Add error boundary to tabs to prevent addon errors breaking Storybook - [#&#8203;30952](https://redirect.github.com/storybookjs/storybook/pull/30952), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Core: Add highlight as public API - [#&#8203;31134](https://redirect.github.com/storybookjs/storybook/pull/31134), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Core: Add preview navigator and `--preview-only` CLI flag - [#&#8203;31102](https://redirect.github.com/storybookjs/storybook/pull/31102), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Automatically expand testing module on unhandled error - [#&#8203;31028](https://redirect.github.com/storybookjs/storybook/pull/31028), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Avoid pre-bundling of preview-api in manager entries - [#&#8203;31385](https://redirect.github.com/storybookjs/storybook/pull/31385), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Core: Bring back loading globals from global types in portable stories - [#&#8203;31328](https://redirect.github.com/storybookjs/storybook/pull/31328), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Core: Builder-manager disable metafile - [#&#8203;31467](https://redirect.github.com/storybookjs/storybook/pull/31467), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Core: Change require.resolve path for storybook/package.json - [#&#8203;31230](https://redirect.github.com/storybookjs/storybook/pull/31230), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Core: Cleanup dependencies - [#&#8203;31222](https://redirect.github.com/storybookjs/storybook/pull/31222), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Create `features` for addons moved into core - [#&#8203;31146](https://redirect.github.com/storybookjs/storybook/pull/31146), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Core: Do not show 'Render story' step in interactions - [#&#8203;31452](https://redirect.github.com/storybookjs/storybook/pull/31452), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Draw highlights on top of canvas and add various new features - [#&#8203;30894](https://redirect.github.com/storybookjs/storybook/pull/30894), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Fix core annotations applied twice - [#&#8203;31361](https://redirect.github.com/storybookjs/storybook/pull/31361), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Core: Fix favicon issue on dev server - [#&#8203;30818](https://redirect.github.com/storybookjs/storybook/pull/30818), thanks [@&#8203;MuhdHishamP](https://redirect.github.com/MuhdHishamP)!
-   Core: Fix flaky unit tests related to stores - [#&#8203;30963](https://redirect.github.com/storybookjs/storybook/pull/30963), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Fix highlight `clickEvent` serialization and export public types - [#&#8203;31179](https://redirect.github.com/storybookjs/storybook/pull/31179), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Fix highlight conflicts - [#&#8203;31204](https://redirect.github.com/storybookjs/storybook/pull/31204), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Fix highlighting zero-pixel elements and focus on single element - [#&#8203;31183](https://redirect.github.com/storybookjs/storybook/pull/31183), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Fix sidebar accessibility order for screen readers - [#&#8203;31250](https://redirect.github.com/storybookjs/storybook/pull/31250), thanks [@&#8203;yatishgoel](https://redirect.github.com/yatishgoel)!
-   Core: Improve unhandled error detection - [#&#8203;31440](https://redirect.github.com/storybookjs/storybook/pull/31440), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Core: Increase compile targets for node & browsers - [#&#8203;31139](https://redirect.github.com/storybookjs/storybook/pull/31139), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Make sure to only mutate writable arrays - [#&#8203;31578](https://redirect.github.com/storybookjs/storybook/pull/31578), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Core: Move [@&#8203;storybook/addon-actions](https://redirect.github.com/storybook/addon-actions) into storybook - [#&#8203;30765](https://redirect.github.com/storybookjs/storybook/pull/30765), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Core: Move [@&#8203;storybook/instrumenter](https://redirect.github.com/storybook/instrumenter) into core - [#&#8203;30740](https://redirect.github.com/storybookjs/storybook/pull/30740), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Core: New Status Store - [#&#8203;30764](https://redirect.github.com/storybookjs/storybook/pull/30764), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: New Test Provider Store - [#&#8203;30828](https://redirect.github.com/storybookjs/storybook/pull/30828), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Prebundle jsdoc-type-pratt-parser again - [#&#8203;30923](https://redirect.github.com/storybookjs/storybook/pull/30923), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Core: Re-Export renderers from frameworks - [#&#8203;30771](https://redirect.github.com/storybookjs/storybook/pull/30771), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Core: Remove `util`, `browser-assert`, `process` deps - [#&#8203;30805](https://redirect.github.com/storybookjs/storybook/pull/30805), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Core: Remove `uuid` package from core - [#&#8203;31219](https://redirect.github.com/storybookjs/storybook/pull/31219), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Remove deprecated parts of test provider API - [#&#8203;30962](https://redirect.github.com/storybookjs/storybook/pull/30962), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Remove duplicate notification dot on sidebar buttons on mobile - [#&#8203;31485](https://redirect.github.com/storybookjs/storybook/pull/31485), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Remove maximum-scale=1 from viewport meta tag - [#&#8203;31283](https://redirect.github.com/storybookjs/storybook/pull/31283), thanks [@&#8203;yatishgoel](https://redirect.github.com/yatishgoel)!
-   Core: Rename local tests to interactions - [#&#8203;31141](https://redirect.github.com/storybookjs/storybook/pull/31141), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Core: Set a minimum height/width for the targetable area of highlights - [#&#8203;31486](https://redirect.github.com/storybookjs/storybook/pull/31486), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Show "Render story" event explicitly in Component Tests event trace - [#&#8203;31027](https://redirect.github.com/storybookjs/storybook/pull/31027), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Support groups and info icon in highlight popover menu - [#&#8203;31475](https://redirect.github.com/storybookjs/storybook/pull/31475), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Support React Native environment without static class blocks - [#&#8203;31282](https://redirect.github.com/storybookjs/storybook/pull/31282), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Core: Testing Module UI improvements - [#&#8203;30773](https://redirect.github.com/storybookjs/storybook/pull/30773), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Core: Wait for animations before completing render cycle - [#&#8203;31287](https://redirect.github.com/storybookjs/storybook/pull/31287), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   CSF-Tools: Add support for existing node imports and improve import handling - [#&#8203;31497](https://redirect.github.com/storybookjs/storybook/pull/31497), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Csf-Tools: Enhance setFieldNode logic to handle variable declarations - [#&#8203;31056](https://redirect.github.com/storybookjs/storybook/pull/31056), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   CSF: Fix handling of renamed story exports - [#&#8203;31519](https://redirect.github.com/storybookjs/storybook/pull/31519), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Dependencies: Update dependencies - [#&#8203;31143](https://redirect.github.com/storybookjs/storybook/pull/31143), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Dependencies: Update docgen - [#&#8203;31465](https://redirect.github.com/storybookjs/storybook/pull/31465), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Dependencies: Upgrade [@&#8203;types/estree](https://redirect.github.com/types/estree) package to version v1.0.6 - [#&#8203;29477](https://redirect.github.com/storybookjs/storybook/pull/29477), thanks [@&#8203;hakshu25](https://redirect.github.com/hakshu25)!
-   Dependencies: Upgrade `telejson` - [#&#8203;30998](https://redirect.github.com/storybookjs/storybook/pull/30998), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Dependencies: Upgrades - [#&#8203;30515](https://redirect.github.com/storybookjs/storybook/pull/30515), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Dependencies: Upgrades for security - [#&#8203;31235](https://redirect.github.com/storybookjs/storybook/pull/31235), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Dependencies: Upgrades for security - [#&#8203;31276](https://redirect.github.com/storybookjs/storybook/pull/31276), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Dependencies: Upgrades for security - [#&#8203;31291](https://redirect.github.com/storybookjs/storybook/pull/31291), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Docs: Consolidate blocks into addon-docs - [#&#8203;31097](https://redirect.github.com/storybookjs/storybook/pull/31097), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Docs: Fix source code panel - [#&#8203;31245](https://redirect.github.com/storybookjs/storybook/pull/31245), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Eslint-plugin: Handle JSON5 format - [#&#8203;31336](https://redirect.github.com/storybookjs/storybook/pull/31336), thanks [@&#8203;yatishgoel](https://redirect.github.com/yatishgoel)!
-   ESLint: Fix flat config setup - [#&#8203;31192](https://redirect.github.com/storybookjs/storybook/pull/31192), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Essentials: Move remaining addons into core - [#&#8203;30924](https://redirect.github.com/storybookjs/storybook/pull/30924), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Highlights: Dont run highlights when the feature is disabled - [#&#8203;31239](https://redirect.github.com/storybookjs/storybook/pull/31239), thanks [@&#8203;dannyhw](https://redirect.github.com/dannyhw)!
-   Hooks: Stabilize experimental afterEach hook - [#&#8203;31438](https://redirect.github.com/storybookjs/storybook/pull/31438), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   HTML Framework: Remove support for HTML Webpack 5 - [#&#8203;30990](https://redirect.github.com/storybookjs/storybook/pull/30990), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Indexer: Do not create autodocs entries unless addon-docs installed - [#&#8203;31331](https://redirect.github.com/storybookjs/storybook/pull/31331), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Init: Install framework stories instead of renderer stories - [#&#8203;31160](https://redirect.github.com/storybookjs/storybook/pull/31160), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Instrumenter: Fix `preview-api` import for react-native - [#&#8203;31057](https://redirect.github.com/storybookjs/storybook/pull/31057), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Interactions: Rename component test panel - [#&#8203;31130](https://redirect.github.com/storybookjs/storybook/pull/31130), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Maintenance: Drop tooling support - [#&#8203;30940](https://redirect.github.com/storybookjs/storybook/pull/30940), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Maintenance: Merge `@storybook/core` with `storybook` - [#&#8203;30168](https://redirect.github.com/storybookjs/storybook/pull/30168), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Maintenance: Migrate eslint-storybook-plugin into the monorepo - [#&#8203;31151](https://redirect.github.com/storybookjs/storybook/pull/31151), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Maintenance: Remove aliasses in builder configurations & scripts - [#&#8203;31344](https://redirect.github.com/storybookjs/storybook/pull/31344), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Maintenance: Remove deprecated APIs - [#&#8203;30926](https://redirect.github.com/storybookjs/storybook/pull/30926), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Maintenance: Remove deprecated packages - [#&#8203;30690](https://redirect.github.com/storybookjs/storybook/pull/30690), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Maintenance: Remove obsolete automigrations - [#&#8203;30945](https://redirect.github.com/storybookjs/storybook/pull/30945), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Maintenance: Specify that Addon Test now requires Vitest 3.0 - [#&#8203;30948](https://redirect.github.com/storybookjs/storybook/pull/30948), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Manager: Add reactivity to useParameter - [#&#8203;31579](https://redirect.github.com/storybookjs/storybook/pull/31579), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Manager: Fix `Uncaught ReferenceError: global is not defined` - [#&#8203;30970](https://redirect.github.com/storybookjs/storybook/pull/30970), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Migration: Add auto-automigration for merged packages - [#&#8203;30753](https://redirect.github.com/storybookjs/storybook/pull/30753), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Migration: Improve glob question text - [#&#8203;31118](https://redirect.github.com/storybookjs/storybook/pull/31118), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Next.js-Vite: Stabilize [@&#8203;storybook/experimental-nextjs-vite](https://redirect.github.com/storybook/experimental-nextjs-vite) - [#&#8203;30956](https://redirect.github.com/storybookjs/storybook/pull/30956), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Next.js: Remove deprecated compatibility files - [#&#8203;31295](https://redirect.github.com/storybookjs/storybook/pull/31295), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Next.js: Upgrade image-size to 2.0 - [#&#8203;30741](https://redirect.github.com/storybookjs/storybook/pull/30741), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Nextjs Vite: Add runtime check for malformed postcss config - [#&#8203;31184](https://redirect.github.com/storybookjs/storybook/pull/31184), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Nextjs-Vite: Update vite-plugin-storybook-nextjs version and add optimizeDeps - [#&#8203;31037](https://redirect.github.com/storybookjs/storybook/pull/31037), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Node.js: Align Node.js version support - [#&#8203;31041](https://redirect.github.com/storybookjs/storybook/pull/31041), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Preact: Remove support for Preact Webpack 5 - [#&#8203;30957](https://redirect.github.com/storybookjs/storybook/pull/30957), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Presets: Use `.js` files when `.cjs` files are passed for entries that should be ESM - [#&#8203;31556](https://redirect.github.com/storybookjs/storybook/pull/31556), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Pseudo States: Ignore escaped pseudo-class names - [#&#8203;31515](https://redirect.github.com/storybookjs/storybook/pull/31515), thanks [@&#8203;sentience](https://redirect.github.com/sentience)!
-   React Native Web: Add RNW to vitest supported frameworks - [#&#8203;31253](https://redirect.github.com/storybookjs/storybook/pull/31253), thanks [@&#8203;dannyhw](https://redirect.github.com/dannyhw)!
-   React Native: Fix support for 9.0 - [#&#8203;31518](https://redirect.github.com/storybookjs/storybook/pull/31518), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   React-Native: Fix `__STORYBOOK_ADDON_INTERACTIONS_INSTRUMENTER_STATE__` access - [#&#8203;30820](https://redirect.github.com/storybookjs/storybook/pull/30820), thanks [@&#8203;dannyhw](https://redirect.github.com/dannyhw)!
-   React-Native: Fix `userEvent.setup()` errors in jest - [#&#8203;30833](https://redirect.github.com/storybookjs/storybook/pull/30833), thanks [@&#8203;dannyhw](https://redirect.github.com/dannyhw)!
-   React-Native: Fix `userEvent.setup()` errors outside browser context - [#&#8203;30831](https://redirect.github.com/storybookjs/storybook/pull/30831), thanks [@&#8203;dannyhw](https://redirect.github.com/dannyhw)!
-   React-Native: Update config directory to .rnstorybook - [#&#8203;30819](https://redirect.github.com/storybookjs/storybook/pull/30819), thanks [@&#8203;dannyhw](https://redirect.github.com/dannyhw)!
-   React: Don't use Act wrapper in Storybook when rendering in docs - [#&#8203;31483](https://redirect.github.com/storybookjs/storybook/pull/31483), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   React: Ensure render functions and decorators are react components - [#&#8203;30869](https://redirect.github.com/storybookjs/storybook/pull/30869), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   React: Export returntype of ReactMeta#story - [#&#8203;30580](https://redirect.github.com/storybookjs/storybook/pull/30580), thanks [@&#8203;mrginglymus](https://redirect.github.com/mrginglymus)!
-   React: Remove react import in template files - [#&#8203;30757](https://redirect.github.com/storybookjs/storybook/pull/30757), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Refactor: Update panel IDs in vitest addon to use new constants - [#&#8203;31132](https://redirect.github.com/storybookjs/storybook/pull/31132), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Remove: Addon mdx-gfm (`@storybook/addon-mdx-gfm`) - [#&#8203;30996](https://redirect.github.com/storybookjs/storybook/pull/30996), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Revert "Svelte: Adjust Svelte typings to include Svelte 5 function components" - [#&#8203;30851](https://redirect.github.com/storybookjs/storybook/pull/30851), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Save from Controls: Replace rendererPackage with frameworkPackage - [#&#8203;31114](https://redirect.github.com/storybookjs/storybook/pull/31114), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Source Loader: Remove package - [#&#8203;31466](https://redirect.github.com/storybookjs/storybook/pull/31466), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Source: Support async parameters.docs.source.transform - [#&#8203;30426](https://redirect.github.com/storybookjs/storybook/pull/30426), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Svelte-vite: Improve SvelteKit detection error - [#&#8203;31038](https://redirect.github.com/storybookjs/storybook/pull/31038), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Svelte: Adjust Svelte typings to include Svelte 5 function components - [#&#8203;30812](https://redirect.github.com/storybookjs/storybook/pull/30812), thanks [@&#8203;dummdidumm](https://redirect.github.com/dummdidumm)!
-   Svelte: Drop Support for Svelte < 5 - [#&#8203;30703](https://redirect.github.com/storybookjs/storybook/pull/30703), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Svelte: Fix missing `ts-dedent` dependency - [#&#8203;31289](https://redirect.github.com/storybookjs/storybook/pull/31289), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Svelte: Install `latest` version of `@storybook/addon-svelte-csf` - [#&#8203;31398](https://redirect.github.com/storybookjs/storybook/pull/31398), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Svelte: Pin svelte2tsx to solve argType regression - [#&#8203;30783](https://redirect.github.com/storybookjs/storybook/pull/30783), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Svelte: Remove dependency on `sveltedoc-parser` - [#&#8203;31246](https://redirect.github.com/storybookjs/storybook/pull/31246), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Svelte: Remove unused `svelte-preprocess` dependency - [#&#8203;31332](https://redirect.github.com/storybookjs/storybook/pull/31332), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   SvelteKit: Forward form events when mocking `enhance` - [#&#8203;31360](https://redirect.github.com/storybookjs/storybook/pull/31360), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   Telemetry: Add Svelte CSF usage - [#&#8203;31255](https://redirect.github.com/storybookjs/storybook/pull/31255), thanks [@&#8203;shilman](https://redirect.github.com/shilman)!
-   Telemetry: Use version from our package.json for `storybookVersion` - [#&#8203;31577](https://redirect.github.com/storybookjs/storybook/pull/31577), thanks [@&#8203;tmeasday](https://redirect.github.com/tmeasday)!
-   Test Addon: Stabilize and remove experimental status - [#&#8203;30727](https://redirect.github.com/storybookjs/storybook/pull/30727), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Test: Allow generics in expect matchers - [#&#8203;31395](https://redirect.github.com/storybookjs/storybook/pull/31395), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!
-   Test: Handle non-configurable properties in instrumenter for expect.toThrow - [#&#8203;30876](https://redirect.github.com/storybookjs/storybook/pull/30876), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Test: Make sure that expect has no different behavior after instrumentation - [#&#8203;30935](https://redirect.github.com/storybookjs/storybook/pull/30935), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Test: Move `@storybook/test` into `storybook/test` - [#&#8203;30742](https://redirect.github.com/storybookjs/storybook/pull/30742), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Test: Patch HTMLElement.prototype.focus method for settable focus in tests - [#&#8203;31487](https://redirect.github.com/storybookjs/storybook/pull/31487), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Test: Remove legacy Vitest v2 code - [#&#8203;31271](https://redirect.github.com/storybookjs/storybook/pull/31271), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Test: Upgrade to vitest 3 - [#&#8203;30840](https://redirect.github.com/storybookjs/storybook/pull/30840), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Test: Use [@&#8203;testing-library/dom](https://redirect.github.com/testing-library/dom) as devDependency - [#&#8203;31188](https://redirect.github.com/storybookjs/storybook/pull/31188), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Toolbars: Embed addon-toolbars into the core - [#&#8203;30871](https://redirect.github.com/storybookjs/storybook/pull/30871), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Typescript: Drop Typescript < 4.9 support - [#&#8203;30736](https://redirect.github.com/storybookjs/storybook/pull/30736), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   UI: Add options to hide sidebar and toolbar per story - [#&#8203;29516](https://redirect.github.com/storybookjs/storybook/pull/29516), thanks [@&#8203;Sidnioulz](https://redirect.github.com/Sidnioulz)!
-   UI: Clear filters on run all and clear all statuses - [#&#8203;31073](https://redirect.github.com/storybookjs/storybook/pull/31073), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   UI: Don't include error state in sidebar context menu - [#&#8203;31054](https://redirect.github.com/storybookjs/storybook/pull/31054), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   UI: Fix status missing from sidebar - [#&#8203;30830](https://redirect.github.com/storybookjs/storybook/pull/30830), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   UI: Visual tweaks to badges and improved layout for a11y panel - [#&#8203;30955](https://redirect.github.com/storybookjs/storybook/pull/30955), thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
-   Update react-router-dom to lowest React19 type-compatible version - [#&#8203;31358](https://redirect.github.com/storybookjs/storybook/pull/31358), thanks [@&#8203;mrginglymus](https://redirect.github.com/mrginglymus)!
-   Viewport: Embed addon-viewport in the core - [#&#8203;30909](https://redirect.github.com/storybookjs/storybook/pull/30909), thanks [@&#8203;ndelangen](https://redirect.github.com/ndelangen)!
-   Viewport: Fix globals type - [#&#8203;31374](https://redirect.github.com/storybookjs/storybook/pull/31374), thanks [@&#8203;flaval](https://redirect.github.com/flaval)!
-   Vite-Builder: Handle undefined previewConfig - [#&#8203;31216](https://redirect.github.com/storybookjs/storybook/pull/31216), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Vite: Add 'storybook/viewport' to INCLUDE_CANDIDATES in optimizeDeps.ts - [#&#8203;31039](https://redirect.github.com/storybookjs/storybook/pull/31039), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Vite: Improve handling of preview annotations - [#&#8203;28798](https://redirect.github.com/storybookjs/storybook/pull/28798), thanks [@&#8203;tobiasdiez](https://redirect.github.com/tobiasdiez)!
-   Vite: Normalize preview annotation paths - [#&#8203;31238](https://redirect.github.com/storybookjs/storybook/pull/31238), thanks [@&#8203;mrginglymus](https://redirect.github.com/mrginglymus)!
-   Vite: Support Vite 6 and Docs - [#&#8203;31061](https://redirect.github.com/storybookjs/storybook/pull/31061), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Vitest: Remove beforeAll in vitest.setup.ts in automigration - [#&#8203;31460](https://redirect.github.com/storybookjs/storybook/pull/31460), thanks [@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen)!
-   Vue3: Remove support for Webpack 5 - [#&#8203;30958](https://redirect.github.com/storybookjs/storybook/pull/30958), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Web Components: Remove Webpack 5 support - [#&#8203;30988](https://redirect.github.com/storybookjs/storybook/pull/30988), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Yarn: Update Yarn package command execution to use 'exec' - [#&#8203;31065](https://redirect.github.com/storybookjs/storybook/pull/31065), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!

Total contributions: 240
Unique contributors: 29

</details>

</details>

<details>
<summary>storybookjs/storybook (storybook)</summary>

### [`v9.0.0`](https://redirect.github.com/storybookjs/storybook/compare/v8.6.14...5dd81ae54583e9d445c515fa6640f26de0056592)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.6.14...v9.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4zMy42IiwidXBkYXRlZEluVmVyIjoiNDAuMzMuNiIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-29 04:05:23 +00:00
akumatus
58bbb017a0 feat(core): add ai playground components (#12588)
Close [AI-86](https://linear.app/affine-design/issue/AI-86)

![截屏2025-05-28 11.56.18.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/bdf157ce-150c-407c-877f-24a88e7927b1.png)

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

- **New Features**
  - Introduced an AI Playground accessible from the chat panel, allowing users to experiment with AI chat sessions in a dedicated modal interface.
  - Added a playground icon to the chat panel for quick access to the new playground feature.
  - Added new interactive components for managing AI chat sessions, including chat panels, session lists, and modal dialogs.

- **Improvements**
  - Enhanced chat panel session management for a smoother experience by simplifying session filtering.
  - Updated property names in chat input and composer components for improved clarity and consistency.
  - Made tracking options optional in chat input and composer components to improve flexibility.

- **Bug Fixes**
  - Corrected property bindings in AI chat composer to ensure proper panel sizing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 02:49:11 +00:00
L-Sun
c91a4eb0aa fix(editor): shloud get closest viewport element from editor (#12603)
Close [BS-3338](https://linear.app/affine-design/issue/BS-3338/center-peek-框选会出现奇怪的选区)

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

## Summary by CodeRabbit

- **Refactor**
  - Improved the method for locating the viewport element to ensure it is found relative to a scoped host element rather than the entire document. No visible changes to user-facing features.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 02:34:15 +00:00
fundon
5590cdd8f1 fix(editor): improve status display of attachments and images (#12573)
Closes: [BS-3564](https://linear.app/affine-design/issue/BS-3564/ui-embed-view-报错-ui-加-title)
Closes: [BS-3454](https://linear.app/affine-design/issue/BS-3454/点击-reload-后应该隐藏-attachment-embed-view-左下角-status(待新状态))

<img width="807" alt="Screenshot 2025-05-28 at 17 23 26" src="https://github.com/user-attachments/assets/9ecc29f8-73c6-4441-bc38-dfe9bd876542" />

<img width="820" alt="Screenshot 2025-05-28 at 17 45 37" src="https://github.com/user-attachments/assets/68e6db17-a814-4df4-a9fa-067ca03dec30" />

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

## Summary by CodeRabbit

- **New Features**
  - Added support for retrying failed uploads of attachments and images, allowing users to re-upload files directly from the error status interface.
  - The error status dialog now dynamically displays "Retry" for upload failures and "Reload" for download failures, with appropriate actions for each.
- **Enhancements**
  - Improved clarity and consistency in file type display and icon usage for attachments and citations.
  - Button labels in the attachment interface now have capitalized text for better readability.
- **Bug Fixes**
  - Streamlined error handling and status updates for attachment and image uploads/downloads, reducing redundant UI elements.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 02:18:51 +00:00
fundon
de00040389 chore(editor): update loading css vars (#12557)
Related to: [BS-3559](https://linear.app/affine-design/issue/BS-3559/ui-%E5%9B%BE%E7%89%87-loading-%E5%8F%98%E9%87%8F%E6%9B%B4%E6%96%B0)

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

- **Style**
  - Improved the appearance of image loading indicators by updating background and ring colors for a more consistent visual experience.

- **New Features**
  - Added customization options for the loading icon's ring color.

- **Chores**
  - Updated the "@toeverything/theme" dependency to version ^1.1.15 across multiple packages for improved consistency and compatibility.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 02:01:06 +00:00
L-Sun
1b881cfb01 chore(editor): add max height to the dragging preview of toc card (#12605)
Close [BS-3030](https://linear.app/affine-design/issue/BS-3030/侧边栏:toc-目录,这里拖动要限定一个最大高度,建议就-500-px)

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

- **Style**
  - Limited the drag preview container's height to 500px and hid overflow content for improved visual consistency during drag operations.

- **Bug Fixes**
  - Enhanced drag preview appearance to prevent content from spilling outside the container.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-29 01:47:31 +00:00
EYHN
6e190b9703 fix(core): migrate collection info before update it (#12617)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved reliability when updating collection information, ensuring data is correctly migrated and validated before saving changes. This prevents issues with incomplete or invalid collection data.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 14:40:31 +00:00
darkskygit
acf92aa3da fix(server): handle edge case of empty docs (#12608)
fix AI-130
2025-05-28 11:25:53 +00:00
zzj3720
9f0d4536c7 feat(editor): add view event tracking (#12602)
close: BS-3567

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

## Summary by CodeRabbit

- **Refactor**
  - Improved the process for adding new views by centralizing related logic, resulting in a more streamlined and consistent user experience.
- **Chores**
  - Enhanced event tracking for database views to support better analytics.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 11:10:33 +00:00
L-Sun
9a651a5b53 fix(editor): tool panel not closed when user close keyboard with default gesture in android (#12613)
Close [BS-3159](https://linear.app/affine-design/issue/BS-3159/输入法自带的键盘收起操作后-占位符还留着)

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

## Summary by CodeRabbit

- **Bug Fixes**
  - The toolbar now automatically closes when the keyboard is dismissed and no panel is open, ensuring smoother user experience.
  - Improved cleanup to prevent delayed actions after the toolbar is closed, enhancing stability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 10:55:32 +00:00
Flrande
d4c5b40284 fix(editor): code block ui issues (#12609)
Close BS-3423
Close BS-3505

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

- **Style**
  - Updated toolbar button background color and adjusted layout spacing for toolbar and preview buttons to improve visual consistency.
- **Refactor**
  - Reorganized toolbar menu groups for better clarity, separating toggle and clipboard actions within the code block toolbar.
- **Bug Fixes**
  - Improved UI interaction in code block tests to ensure menus behave as expected without closing prematurely.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 10:38:23 +00:00
fengmk2
85def83f5e chore(server): set log level to debug on canary (#12612)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Adjusted logging verbosity to be more detailed in the 'canary' environment, providing debug-level logs, while maintaining info-level logs elsewhere.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 10:23:16 +00:00
Flrande
f610d7b8af chore(editor): add event track for html preview (#12592)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Enhanced tracking for code block interactions, including language selection and preview toggling.
  - Improved error reporting for HTML block preview failures, providing better visibility into issues.
- **Bug Fixes**
  - Added explicit feedback and tracking when cross-origin isolation is not supported during code block preview setup.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 10:08:19 +00:00
fengmk2
9e5d132bd0 chore(server): log job start and finish (#12610)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Improved visibility of job start and finish events by updating logging level, making these events more prominent in logs.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 09:51:37 +00:00
darkskygit
7ae564238d fix(server): link format in chat (#12606)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Documentation**
  - Clarified citation formatting rules, specifying that multiple citations should not be grouped within a single bracket.
  - Added support and examples for citing web URLs in the allowed citation formats.
  - Improved formatting in the "About AFFiNE" section for better readability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 09:35:45 +00:00
fengmk2
9abbfa3ab4 chore(server): print jobId (#12593)
Need to query the payload through job id for debugging

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

## Summary by CodeRabbit

- **Tests**
  - Updated job metrics test to include an explicit job ID during execution.

- **Refactor**
  - Enhanced job execution to support an optional job ID, improving job tracking and logging.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 08:48:38 +00:00
CatsJuice
793823a9f9 feat(core): track web-clipper import (#12599)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added tracking for document creation when importing with the clipper tool.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 08:34:22 +00:00
EYHN
2d5b9022fd feat(core): update migration data notification (#12594)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Updated the migration notification with a clearer header and description to better guide users through the data migration process.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 08:19:19 +00:00
EYHN
b847de4980 fix(core): remove quota modal (#12586)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Removed Features**
  - Removed all quota-reached modal dialogs, including both cloud and local storage quota notifications.
  - Users will no longer see modal alerts when storage limits are reached in workspaces.
- **User Interface**
  - Quota-reached modals and related styles have been removed from workspace layouts on both desktop and mobile.
- **Other Changes**
  - Quota notification logic and related settings have been eliminated from the application.
  - Maximum blob size enforcement and related callbacks have been removed from blob management.
  - Localization entries related to file upload size limits and quota tips have been removed.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 08:04:22 +00:00
fengmk2
274319dd6c fix(server): 4xx error property is optional (#12595)
close CLOUD-223

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved error handling for search requests to prevent issues when error details are missing, ensuring clearer fallback messages for unknown errors.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 07:50:05 +00:00
akumatus
eb49ffaedb feat(core): support fork session without latestMessageId (#12587)
Close [AI-86](https://linear.app/affine-design/issue/AI-86)

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

## Summary by CodeRabbit

- **New Features**
  - Improved chat session forking to allow creating a fork without specifying the latest message, enabling more flexible session management.

- **Bug Fixes**
  - Forking a chat session with an invalid latest message ID now correctly returns an error.

- **Tests**
  - Added and updated test cases to cover session forking with missing or invalid latest message IDs, ensuring robust behavior in these scenarios.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 07:34:23 +00:00
EYHN
a045786c6a fix(core): fix groupBy and orderBy error handling (#12584)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved error handling for ordering and grouping features to prevent disruptions and ensure the app continues running smoothly if errors occur.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 06:58:26 +00:00
github-actions[bot]
ace4b844fd chore(i18n): sync translations (#12549)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-05-28 06:57:47 +00:00
pengx17
d5dd680855 fix(core): update favicon (#12581)
not changing the favicon.ico file to make sure the change will be updated on the user's browser to get rid of caching

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

- **Style**
  - Updated the favicon URL across the application and link previews to include a version query parameter (`?v=2`) for better cache control.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 05:52:16 +00:00
darkskygit
f4e7595f4b feat(server): add copilot embedding feature (#12590)
fix AI-154
2025-05-28 04:36:37 +00:00
Saul-Mirone
88339b4022 fix(editor): inline code style (#12585)
Closes: #12576
Closes: [BS-2080](https://linear.app/affine-design/issue/BS-2080/update-inline-code-font-size)

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

## Summary by CodeRabbit

- **Style**
  - Improved the appearance of code elements within lists by adjusting font size and padding.
  - Updated inline code styling for better vertical alignment and consistency with surrounding text.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 04:11:02 +00:00
doouding
d49ecfbecc fix: avoid unnecessary rerendering of selected-rect (#12583)
### Changed

- Note scale issue
- Overlay should call refresh when `clear` is called
- Optimize edgeless-selected-rect to avoid unecessary rerendering

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

- **New Features**
  - Edgeless note blocks now respect both minimum and maximum size limits when resizing.

- **Improvements**
  - Enhanced performance and responsiveness of resize and rotate handles in selection overlays by caching allowed handles and optimizing cursor management.
  - Cursor styles for resize and rotate handles are now set more reliably and efficiently through declarative styling.

- **Bug Fixes**
  - Ensured overlay clearing now properly refreshes the renderer for more consistent visual updates.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 03:53:51 +00:00
EYHN
87dfd2b77d fix(core): fix share icon to filter type item (#12582)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Style**
  - Updated the icon for the "shared" property to use a new visual representation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 03:21:32 +00:00
fundon
c43e1bcc4e refactor(editor): split openFileOrFiles into openSingleFileWith and openFilesWith (#12523)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Improved file selection dialogs for attachments, imports, and uploads, allowing for more consistent and streamlined file picking across the app.

- **Bug Fixes**
	- Resolved inconsistencies when selecting single or multiple files, ensuring a smoother user experience during file import and upload.

- **Refactor**
	- Unified and simplified file selection logic throughout the app for better reliability and maintainability.
	- Standardized import functions to uniformly handle arrays of files, enhancing consistency in file processing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 03:06:33 +00:00
doouding
cf456c888f feat: support snap when resizing element (#12563)
Fixes [BS-2753](https://linear.app/affine-design/issue/BS-2753/)

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

- **New Features**
  - Added snapping support when resizing elements, improving alignment and precision during resize operations.
  - Introduced new resize event handlers allowing extensions to customize resize behavior with start, move, and end callbacks.

- **Bug Fixes**
  - Improved handling of snapping state to prevent errors during drag and resize actions.

- **Tests**
  - Updated resizing tests to ensure consistent snapping behavior by removing default elements that could interfere with test results.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 02:47:01 +00:00
Saul-Mirone
f5f959692a fix(editor): latex wrong config (#12578)
Closes: BS-2782

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

- **New Features**
  - Added KaTeX as a dependency to improve LaTeX rendering support.
  - KaTeX styles are now applied globally for consistent math formatting.

- **Refactor**
  - Updated LaTeX rendering to use inline math mode and removed MathML output.

- **Tests**
  - Enhanced inline LaTeX tests with snapshot-based verification for consistent rendering.
  - Added new snapshot files capturing expected LaTeX rendering outputs for various scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-28 02:23:45 +00:00
darkskygit
9220b973c7 feat(server): increase embedding jobs concurrency & handle empty content after trim (#12574)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Improvements**
  - Increased the default concurrency for background tasks, enhancing processing efficiency.
  - Improved handling of empty or unsupported documents to ensure consistent processing.
  - Optimized document filtering to exclude certain documents from processing, improving performance.

- **Bug Fixes**
  - Enhanced detection of empty document summaries, reducing errors during processing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 14:28:34 +00:00
Saul-Mirone
7eb6b268a6 fix(editor): auto focus between tab switch (#12572)
Closes: BS-2290

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved focus behavior when switching between tabs to prevent unwanted automatic focusing of the content-editable area.
  - Enhanced selection clearing to avoid unnecessary blurring when the main editable element is already focused.
  - Refined focus checks in tests to specifically target contenteditable elements, ensuring more accurate validation of focus behavior.
  - Adjusted test assertions for block selection to be less strict and removed redundant blur operations for smoother test execution.
  - Updated toolbar dropdown closing method to use keyboard interaction for better reliability.
- **New Features**
  - Added a recoverable property to selection types, improving selection state management and recovery.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 13:38:02 +00:00
forehalo
dc7cd0487b refactor(server): decrypt license with provided aes key (#12570)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for a new AES key for license management, improving license encryption and decryption processes.

- **Bug Fixes**
  - Improved error messages and handling when activating expired or invalid licenses.

- **Refactor**
  - Updated license decryption logic to use a fixed AES key instead of deriving one from the workspace ID.
  - Added validation for environment variable values to prevent invalid configurations.

- **Tests**
  - Enhanced license-related tests to cover new key usage and updated error messages.
  - Updated environment variable validation tests with clearer error messages.

- **Chores**
  - Updated environment variable handling for improved consistency.
  - Set production environment variable explicitly in build configuration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 11:54:28 +00:00
darkskygit
7175019a0a feat(server): improve pdf parsing (#12356) 2025-05-27 11:36:48 +00:00
darkskygit
3c0fa429c5 feat(server): switch i2i to gpt (#12238)
fix AI-14
fix AI-17
fix AI-39
fix AI-112

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

- **New Features**
  - Expanded and reorganized prompt options for text and image actions, adding new prompts for image generation, style conversions, upscaling, background removal, and sticker creation.
  - Enhanced image editing capabilities with direct support for image attachments in prompts.

- **Improvements**
  - Updated prompt names and descriptions to be more user-friendly and descriptive.
  - Simplified and clarified prompt selection and image processing workflows with improved default behaviors.
  - Better organization of prompts through clear grouping and categorization.

- **Bug Fixes**
  - Improved validation and handling of image attachments during editing requests.

- **Refactor**
  - Internal code restructuring of prompts and provider logic for clarity and maintainability without affecting user workflows.
  - Refined message handling and content merging logic to ensure consistent prompt processing.
  - Adjusted image attachment rendering logic for improved display consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 11:36:47 +00:00
darkskygit
1e9cbdb65d feat(server): use generative ai api for transcript (#12569)
fix AI-151
2025-05-27 11:36:47 +00:00
CatsJuice
192266c0fd feat(core): move sign in button to workspace list (#12566)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved the appearance and layout of the "Sign in" menu item with updated styling and icon.
  - The "Sign in" option now appears as a standalone menu item in the workspace list when the user is not authenticated.

- **Style**
  - Enhanced visual consistency for the "Sign in" menu item to better match the overall theme.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 11:22:17 +00:00
pengx17
4ad008f712 fix(electron): optimize meeting privacy settings (#12530)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added support for requesting screen recording permission on macOS in addition to microphone permission.
  - Introduced a new "Permission issues" section in meeting privacy settings, including a button to restart the app if permission status is not updated.
- **Improvements**
  - Unified permission handling for screen and microphone settings, simplifying the user experience.
  - Added new localized strings for enhanced clarity regarding permission issues and app restart instructions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 11:08:06 +00:00
forehalo
d6476db64d chore: use PodMonitoring in charts instead (#12571)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Updated monitoring configuration to use a different resource type with simplified naming and label selectors for Kubernetes manifests.
- **Chores**
  - Removed Google Cloud Platform–specific monitoring configuration files from multiple components.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 10:53:38 +00:00
donteatfriedrice
af3c002022 chore: remove link preview cache feature flag (#12568) 2025-05-27 10:07:33 +00:00
donteatfriedrice
69c7767003 chore: remove citation feature flag (#12567)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Footnote definitions and "Sources" headings are now always included in notes, without requiring a feature flag.
  - Enhanced footnote-related content with additional citation-style blocks such as bookmarks, embedded documents, and attachments.

- **Chores**
  - Removed the citation feature flag and its related configuration, logic, and translations from the application.

- **Documentation**
  - Updated localization files to remove entries related to the citation experimental feature.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 10:07:32 +00:00
renovate
28d8b35600 chore: bump up nestjs to v11.1.2 (#12524)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@nestjs/common](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/common)) | [`11.1.1` -> `11.1.2`](https://renovatebot.com/diffs/npm/@nestjs%2fcommon/11.1.1/11.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcommon/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcommon/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcommon/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcommon/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/core](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/core)) | [`11.1.1` -> `11.1.2`](https://renovatebot.com/diffs/npm/@nestjs%2fcore/11.1.1/11.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcore/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcore/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcore/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcore/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-express](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-express)) | [`11.1.1` -> `11.1.2`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-express/11.1.1/11.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-express/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-express/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-express/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-express/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-socket.io](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-socket.io)) | [`11.1.1` -> `11.1.2`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-socket.io/11.1.1/11.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-socket.io/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-socket.io/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-socket.io/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-socket.io/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/websockets](https://redirect.github.com/nestjs/nest) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/websockets)) | [`11.1.1` -> `11.1.2`](https://renovatebot.com/diffs/npm/@nestjs%2fwebsockets/11.1.1/11.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fwebsockets/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fwebsockets/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fwebsockets/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fwebsockets/11.1.1/11.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>nestjs/nest (@&#8203;nestjs/common)</summary>

### [`v11.1.2`](https://redirect.github.com/nestjs/nest/compare/v11.1.1...32b5febcfaf4c8e01bc0d664d875d186a4f76cee)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.1...v11.1.2)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/core)</summary>

### [`v11.1.2`](https://redirect.github.com/nestjs/nest/compare/v11.1.1...32b5febcfaf4c8e01bc0d664d875d186a4f76cee)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.1...v11.1.2)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/platform-express)</summary>

### [`v11.1.2`](https://redirect.github.com/nestjs/nest/compare/v11.1.1...32b5febcfaf4c8e01bc0d664d875d186a4f76cee)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.1...v11.1.2)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/platform-socket.io)</summary>

### [`v11.1.2`](https://redirect.github.com/nestjs/nest/releases/tag/v11.1.2)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.1...v11.1.2)

#### v11.1.2 (2025-05-26)

##### Bug fixes

-   `microservices`
    -   [#&#8203;15172](https://redirect.github.com/nestjs/nest/pull/15172) fix(microservices): support custom strategy in async usefactory config ([@&#8203;mag123c](https://redirect.github.com/mag123c))
    -   [#&#8203;15166](https://redirect.github.com/nestjs/nest/pull/15166) fix(microservice): prevent error logs during redis client shutdown ([@&#8203;janroker](https://redirect.github.com/janroker))

##### Dependencies

-   `common`
    -   [#&#8203;15185](https://redirect.github.com/nestjs/nest/pull/15185) chore(deps): bump file-type from 20.5.0 to 21.0.0 ([@&#8203;dependabot\[bot\]](https://redirect.github.com/apps/dependabot))
-   `platform-express`
    -   [#&#8203;15159](https://redirect.github.com/nestjs/nest/pull/15159) chore(deps): bump multer from 1.4.5-lts.2 to 2.0.0 ([@&#8203;dependabot\[bot\]](https://redirect.github.com/apps/dependabot))

##### Committers: 2

-   JaeHo Jang ([@&#8203;mag123c](https://redirect.github.com/mag123c))
-   Jan Roček ([@&#8203;janroker](https://redirect.github.com/janroker))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-27 09:53:13 +00:00
zzj3720
0f1a3c212d refactor(editor): add a layer of ui-logic to enhance type safety (#12511)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced modular UI logic layers for Kanban and Table views, enhancing maintainability and scalability.
  - Added new CSS-in-JS style modules for database blocks and table views, improving visual consistency.
  - Expanded telemetry event tracking for database views, properties, filters, and groups.
  - Added utility functions for lazy initialization and cached computed values.

- **Refactor**
  - Unified logic and state management across Kanban and Table views by replacing direct component dependencies with logic-centric architecture.
  - Updated components and widgets to use the new logic-based approach for state, selection, and event handling.
  - Replaced inline styles with CSS classes; updated class names to align with new component structure.
  - Centralized state access through UI logic instances, eliminating direct DOM queries and simplifying dependencies.
  - Consolidated Kanban and Table view presets effects for streamlined initialization.
  - Replaced Lit reactive state with Preact signals in multiple components for improved reactivity.
  - Split monolithic components into separate logic and UI classes for clearer separation of concerns.
  - Removed obsolete components and consolidated exports for cleaner API surface.

- **Bug Fixes**
  - Enhanced selection and interaction reliability in database cells and views.
  - Fixed scrolling issues on mobile table views for improved compatibility.

- **Chores**
  - Updated end-to-end test selectors to reflect new component names and structure.
  - Removed deprecated utilities and cleaned up unused imports.

- **Documentation**
  - Improved type definitions and public API exports for better developer experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 09:36:44 +00:00
pengx17
9bf86e3f61 fix(core): add invite members button to sidebar (#12491)
fix AF-2661

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

- **New Features**
  - Added an "Invite Members" button to the sidebar, allowing users to quickly access workspace member settings (visible only for non-local workspaces).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 09:20:18 +00:00
yoyoyohamapi
c649ae5628 fix(core): ai chat button align (#12555)
> CLOSE AI-134

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

## Summary by CodeRabbit

- **Style**
  - Improved alignment and layout of the chat panel send button for a more visually balanced appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 09:04:33 +00:00
EYHN
dd1cc28194 fix(core): fix relative date filter (#12561)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Corrected date filtering to ensure months are consistently interpreted, improving accuracy when comparing dates.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 08:49:43 +00:00
EYHN
ace5531b1f feat(core): remove old all docs code (#12558)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Removed Features**
  - The "All Pages (Old)" workspace view and its associated header have been removed.
  - The previous page list UI, including virtualized lists, group headers, and multi-selection, is no longer available.
  - Search and tag aggregation features within the old page list have been removed.

- **Style**
  - Styles related to the old page list and its components have been deleted.

- **Navigation**
  - The "All Pages (Old)" route has been removed from workspace navigation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 08:33:43 +00:00
EYHN
5033142a77 feat(core): all docs tracks (#12556)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added enhanced tracking for user interactions across document lists, navigation, display menus, quick actions, and collection operations.
  - User actions such as opening documents, editing collections, toggling favorites, changing view modes, and navigating collections are now logged for analytics.

- **Chores**
  - Expanded internal event tracking capabilities to support more detailed analytics on user interactions throughout the interface.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 08:17:14 +00:00
JimmFly
8d3b20ecc7 feat(core): add account deletion entry to account settings (#12385)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Implemented account deletion functionality with confirmation dialogs and success notifications.
  - Added a warning modal for team workspace owners before account deletion.
  - Introduced a new, richly formatted internationalized message for account deletion confirmation.
  - Added a new dialog component to inform users of successful account deletion.
- **Improvements**
  - Updated localization strings to provide detailed guidance and warnings for account deletion.
  - Enhanced error handling by converting errors into user-friendly notifications.
  - Simplified and improved the sign-out process with better error handling and streamlined navigation.
- **Style**
  - Added new style constants for success and warning modals related to account deletion.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 08:00:44 +00:00
EYHN
18da2fe4e6 feat(core): adjust filter area style (#12534)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added support for displaying the "Add Filter" action as either an icon button or a labeled button, depending on the filter state.
  - Introduced a localized label for the "Add Filter" button.

- **Style**
  - Improved filter area layout and styling for better visual consistency.
  - Adjusted padding and added styles to hide empty filter values.

- **Bug Fixes**
  - Updated test identifiers for filter value elements to improve test reliability.

- **Documentation**
  - Added a new English localization string for the "Add Filter" button.

- **Chores**
  - Updated translation completeness percentages for various locales.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 07:46:28 +00:00
yoyoyohamapi
1837c1fe84 feat(core): ai input scrolling carousel tips (#12540)
### TL;DR

feat: scrolling carousel for ai input tips

> CLOSE BS-3537
2025-05-27 07:29:15 +00:00
akumatus
f4cba7d6ee refactor(core): add text stream parser (#12459)
Support [AI-82](https://linear.app/affine-design/issue/AI-82).

Added a `TextStreamParser` class to standardize formatting of different types of AI stream chunks across providers.

### What changed?

- Created a new `TextStreamParser` class in `utils.ts` that handles formatting of various chunk types (text-delta, reasoning, tool-call, tool-result, error)
- Refactored the Anthropic, Gemini, and OpenAI providers to use this shared parser instead of duplicating formatting logic
- Added comprehensive tests for the new `TextStreamParser` class, including tests for individual chunk types and sequences of chunks
- Defined a common `AITools` type to standardize tool interfaces across providers

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

- **New Features**
	- Enhanced formatting and structure for streamed AI responses, including improved handling of callouts, web search, and web crawl results.
- **Refactor**
	- Streamlined and unified the processing of streamed AI response chunks across providers for more consistent output.
- **Bug Fixes**
	- Improved error handling and display for streamed responses.
- **Tests**
	- Added comprehensive tests to ensure correct formatting and handling of various streamed message types.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 07:14:17 +00:00
yoyoyohamapi
83caf98618 fix(core): space inside menu input triggers ai menu (#12552)
> CLOSE AI-137

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved input field behavior in context menus by preventing unintended actions caused by keypress events.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 06:58:27 +00:00
fengmk2
409e71ff8b fix(server): use /_bulk endpoint instead (#12542)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
	- Improved reliability of batch write operations to search providers, ensuring documents are correctly indexed and retrievable.
- **Tests**
	- Added new test cases and snapshots to verify batch write functionality and confirm resolution of prior batch processing issues.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 06:43:26 +00:00
CatsJuice
b5b911b5d2 feat(core): doc explorer list item drag preview (#12553)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Improved the appearance of drag preview elements in the document list, including updated layout, spacing, background, and icon size for a more polished visual experience when dragging items.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 06:29:13 +00:00
forehalo
2f139bd02c chore(admin): remove useless config diff (#12545)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added a GraphQL mutation to validate multiple app configuration updates, returning detailed validation results for each item.
  - Extended the API schema to support validation feedback, enabling client-side checks before applying changes.
  - Introduced a detailed, parameterized error message system for configuration validation errors.
  - Enabled validation of configuration inputs via the admin UI with clear, descriptive error messages.

- **Improvements**
  - Enhanced error reporting with specific, context-rich messages for invalid app configurations.
  - Simplified admin settings UI by removing the confirmation dialog and streamlining save actions.
  - Improved clarity and maintainability of validation logic and error handling components.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 06:07:26 +00:00
EYHN
eed95366c9 fix(core): fix all docs permissions check (#12538) 2025-05-27 14:06:55 +08:00
EYHN
32c7a135f4 feat(core): adjust pinned collections edit button (#12533)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Added a centralized "Edit collection rules" button in the pinned collections footer, enabling users to edit collection rules via a dialog.
- **Style**
	- Removed hover effects and visual styling from the edit icon button in pinned collections.
- **Bug Fixes**
	- Removed per-item edit buttons to streamline the editing process.
- **Documentation**
	- Added a new localized label for the edit collection rules action.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 05:41:12 +00:00
fengmk2
3e6384604c chore(server): remove request success log (#12550)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Removed detailed verbose logging for Elasticsearch requests to reduce log noise.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 05:26:04 +00:00
fundon
9465d0dc73 fix(editor): loading style (#12537)
Closes: [BS-3555](https://linear.app/affine-design/issue/BS-3555/ui-attachment-loading-变量更新)
Closes: [BS-3559](https://linear.app/affine-design/issue/BS-3559/ui-图片-loading-变量更新)

### Dark
<img width="625" alt="Screenshot 2025-05-26 at 20 32 36" src="https://github.com/user-attachments/assets/93501e3d-8fc6-45f9-84a0-ac147e5c5f9f" />

### Light
<img width="623" alt="Screenshot 2025-05-26 at 20 32 25" src="https://github.com/user-attachments/assets/7d5bc128-6667-45b5-982d-dab3a22706a7" />

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

- **New Features**
  - Loading icons are now invoked as functions, allowing for more flexible and customizable rendering with parameters like size and progress.

- **Refactor**
  - Replaced theme-dependent and static loading icon references with a unified `LoadingIcon()` component across multiple components and blocks.
  - Removed legacy icon variants and simplified icon import statements, centralizing icon rendering logic.

- **Style**
  - Updated styles for loading and reload buttons to use theme-aware CSS variables.
  - Enlarged and repositioned loading indicators in image blocks for better visibility.

- **Bug Fixes**
  - Achieved consistent loading icon rendering across various blocks and components by standardizing icon invocation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 05:10:27 +00:00
JimmFly
1b715e588c feat(core): support install license for self hosted client (#12287)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added the ability to upload and replace license files for self-hosted team workspaces via a new modal dialog.
  - Introduced clearer UI flows for activating, deactivating, and managing team licenses, including one-time purchase licenses.
  - Provided direct links and guidance for requesting licenses and managing payments.

- **Enhancements**
  - Improved license management interface with updated button labels and descriptions.
  - Added new styles for better layout and clarity in license dialogs.
  - Updated internationalization with new and revised texts for license operations.

- **Bug Fixes**
  - Prevented duplicate opening of license or plan dialogs when already open.

- **Chores**
  - Updated support and pricing links for clarity and accuracy.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 04:56:14 +00:00
fengmk2
382c237dac fix(server): return empty summary field value (#12517)
close AF-2658

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

- **Tests**
  - Added new test cases and snapshots to enhance coverage for search results involving empty or missing fields like summary, title, and ref_doc_id.
  - Verified consistent handling of empty string values and absence of fields across different search providers.

- **Bug Fixes**
  - Improved handling of empty string values for specific fields by converting them to null to ensure consistent search result formatting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 04:42:54 +00:00
EYHN
3676f3b769 feat(core): add default group and order (#12526)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added default sorting and grouping by "Last Updated" for document views.
  - Introduced clearer group headers for documents grouped by creation or update date, displaying relative dates or appropriate fallback text.

- **Improvements**
  - Enhanced date grouping headers with capitalized, user-friendly text and improved handling of missing dates.
  - Added a new localization for "Never updated" to improve clarity in document groupings.
  - Initialized document update timestamps at creation to improve date accuracy.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 04:08:57 +00:00
pengx17
ed8e50bca6 fix(electron): potential app crash on quit (#12480)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
	- Improved stability during shutdown by preventing potential crashes when removing audio property listeners on macOS.
	- Suppressed unnecessary error logs related to device listener removal during system shutdown.
	- Enhanced handling of internal subscriptions to avoid redundant operations and improve reliability when loading or destroying views.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 03:43:27 +00:00
pengx17
bfe743b68b fix(core): audio block actions not showing (#12527)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Updated audio block containers to remove borders and allow visible overflow, improving the appearance of audio attachments.

- **Bug Fixes**
  - Ensured that the actions field is always present in audio transcription job results, defaulting to an empty string when not specified.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 03:29:10 +00:00
pengx17
83a483a06d fix(electron): optimize tab switching (#12518)
fix AF-2670

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

- **Style**
  - Updated styling so that opacity and transition effects apply only when a translucent background is present, enhancing visual precision.
- **Chores**
  - Renamed a data attribute in the app container for improved consistency.
  - Disabled background throttling for specific views to maintain performance when running in the background.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 03:14:12 +00:00
pengx17
502fb96f55 fix(electron): disable translucent sidebar by default (#12477)
fix AF-2662

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

## Summary by CodeRabbit

- **Chores**
  - Changed the default setting for blur background effect to be disabled for new users. Existing users' preferences remain unaffected.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 02:58:27 +00:00
L-Sun
1229ee134b fix(editor): drag handle disappeard when hover on the extra area between note and its background (#12536)
Close [BS-3391](https://linear.app/affine-design/issue/BS-3391/无法从note中拖出embed-synced-doc到白板)

### Before
can not hover on drag handle

https://github.com/user-attachments/assets/5596538e-e922-4d7f-8188-b719b234f3ee

### After
can hover on drag handle

https://github.com/user-attachments/assets/855743ec-7601-48a8-8453-cd5aa395bd06

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

## Summary by CodeRabbit

- **Bug Fixes**
	- Improved detection of hovering over notes in edgeless mode, ensuring the drag handle appears correctly when hovering on the background of a selected note.
	- Enhanced background style updates for edgeless notes, providing more accurate visual feedback.

- **Tests**
	- Added a test to verify that the drag handle is visible when hovering over the background of a selected edgeless note.
	- Updated undo/redo tests to improve accuracy of background color evaluation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 02:43:27 +00:00
EYHN
9c5af576ee feat(nbstore): add more blob sync state (#12516) 2025-05-27 02:20:49 +00:00
EYHN
4aa9ae5e68 fix(nbstore): fix http request timeout handling (#12515)
`AbortSignal.timeout` will cause a timeout when transferring large blobs.  by using `setTimeout` currently, the timeout only covers the phase of establishing a connection.

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

- **Bug Fixes**
  - Improved reliability of request cancellation and timeout handling for HTTP requests.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 02:20:49 +00:00
yoyoyohamapi
6a912d1031 fix(core): workspace embedding ui opt (#12532)
### TL;DR

fix: workspace embedding ui optimization

> CLOSE BS-3531
> CLOSE BS-3532
> CLOSE BS-3533
> CLOSE BS-3534
> CLOSE BS-3535
> CLOSE BS-3536
> CLOSE BS-3553

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

## Summary by CodeRabbit

- **New Features**
  - Added a localized "Upload file" label for improved internationalization in embedding settings.

- **Style**
  - Improved layout and text overflow handling for attachments and ignored documents.
  - Enhanced visual alignment and consistency across embedding-related components.
  - Updated progress indicator color for better theme integration.

- **Bug Fixes**
  - Adjusted text truncation and spacing to prevent layout issues with long filenames and document titles.

- **Chores**
  - Updated translation completeness percentage for the "es-CL" locale.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-27 02:00:42 +00:00
darkskygit
8952ce4fb3 feat(server): update prompts (#12539)
fix AI-63
fix PD-2567
fix AI-150
fix AI-149
fix AI-148
fix AI-147
fix AI-146
fix AI-145
fix AI-144
fix AI-143

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

- **New Features**
  - Enhanced AI-generated responses for writing and code-related prompts with detailed, structured instructions for improved clarity and consistency.
  - Updated AI model for multiple prompts to deliver faster and more accurate results.

- **Bug Fixes**
  - Improved test validation for code explanation and error-checking prompts to better recognize correct outputs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 19:35:56 +00:00
akumatus
8b76644fc1 feat(core): use the same prompt for Search With AFFiNE AI (#12496)
Support [AI-59](https://linear.app/affine-design/issue/AI-59)

Deprecated use of the perplexity model. Makes chat and search use the same prompt content.

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

- **New Features**
  - Added support for two new AI models: Claude Opus 4 and Claude Sonnet 4, enabling enhanced text and image input capabilities.
  - Introduced a new chat prompt with detailed instructions for specialized AI interactions within AFFiNE.

- **Refactor**
  - Improved prompt management for AI chat and search features by centralizing shared settings for better consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 22:42:49 +08:00
akumatus
5fcdad46eb feat(core): add google vertex ai (#12423)
Close [AI-125](https://linear.app/affine-design/issue/AI-125)

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

- **New Features**
  - Added new provider configurations `geminiVertex` and `anthropicVertex` for Google Vertex AI in backend schema, provider classes, and admin config.
  - Introduced `GeminiVertexProvider` and `AnthropicVertexProvider` classes supporting Vertex AI models with specific capabilities.
  - Expanded model options for transcription prompts with newer Gemini models.
  - Re-exported provider modules to include Vertex AI variants.

- **Improvements**
  - Extended provider architecture to support separate Vertex AI configurations and models.
  - Updated test setup to replace deprecated provider references with new Vertex variants.
  - Consolidated environment variables for server testing with a single `SERVER_CONFIG`.

- **Bug Fixes**
  - Updated mock models and import references in tests to align with new provider classes.

- **Chores**
  - Added `@ai-sdk/google-vertex` dependency for Vertex AI support.
  - Updated dependency list to include `@ai-sdk/google-vertex`.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 13:09:29 +00:00
darkskygit
eb26e99ecd fix(server): skip embedding when not configured (#12544)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Improved reliability by ensuring certain features are only enabled when required support and configuration are present, reducing the risk of runtime errors.
  - Enhanced platform detection logic for better accuracy across different environments, including macOS and Windows systems.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 12:52:15 +00:00
forehalo
c2ffcb2c2c chore: remove multiple cloud server flag (#12531)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - The "Add Selfhosted" and "Add Server" options are now displayed whenever the build configuration is native, without relying on feature flags.

- **Refactor**
  - Simplified conditional rendering for server addition buttons by replacing feature flag checks with build configuration checks.

- **Chores**
  - Removed the "Multiple Cloud Servers" feature flag and its related localization strings, streamlining feature management and UI labels.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 12:37:15 +00:00
forehalo
7f2b094eb5 chore: get dev server url from browser url (#12525)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved development server with automatic handling of exit signals.
  - Configured default WebSocket URL for enhanced client-server communication during development.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 12:22:20 +00:00
Saul-Mirone
41f0a2d01a feat(editor): add at member highlight (#12535)
Closes: BS-2896

<img width="468" alt="image" src="https://github.com/user-attachments/assets/2b84c484-29b8-4650-b74c-da7afd3a1e41" />

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

## Summary by CodeRabbit

- **New Features**
  - Enhanced member search results with highlighted text, making it easier to visually identify matched parts of member names during searches.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 12:08:03 +00:00
Flrande
53a23dd4bf fix(editor): do not display emoji container when it is empty string (#12543)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - The emoji container in callout blocks now automatically hides when no emoji is present, providing a cleaner appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 11:40:17 +00:00
doouding
0be30f15ea fix: dnd not working in initial doc (#12519)
Fixes [BS-3152](https://linear.app/affine-design/issue/BS-3152/)

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

- **Bug Fixes**
  - Improved widget stability by removing the event listener that caused the widget to hide on block updates, leaving only viewport changes to trigger hiding.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 11:25:15 +00:00
Flrande
5d28657d76 chore(editor): add track event for latex (#12541)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Enhanced telemetry tracking for LaTeX and equation creation actions, capturing detailed context such as editor mode and location within the app.
- **Chores**
  - Expanded telemetry event types to include LaTeX-specific actions for improved analytics and observability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 11:10:32 +00:00
Saul-Mirone
9343e29fea fix: linked doc popover selector error (#12528)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved scrolling behavior to the focused item in the linked document popover, ensuring reliable navigation regardless of special characters in item identifiers.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 10:06:04 +00:00
EYHN
01369954d6 feat(core): save last opened workspace id when import clipper (#12487)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - The app now remembers the last selected workspace when importing, improving continuity for future imports.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 09:51:09 +00:00
Yifeng Wang
9d2330fc2b fix(editor): possible race condition in viewport clipping (#12503) 2025-05-26 17:08:31 +08:00
Saul-Mirone
051dc4296d fix(editor): limit at members list length (#12529)
Closes: BS-3009

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

- **New Features**
  - The mention members menu now displays up to three members, with a localized hint indicating the number of additional hidden members.
- **Localization**
  - Added a new translation key for the overflow members hint in the English language pack.
- **Chores**
  - Updated translation completeness statistics for the "es-CL" locale.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 08:37:33 +00:00
yoyoyohamapi
0e8f19b92c refactor(core): workspace embedding entities (#12490)
### TL;DR

refactor: split workspace embedding module entities into:

* additional-attachments
* ignored-docs
* embedding-enabled
* embedding-progress
2025-05-26 07:17:38 +00:00
yoyoyohamapi
c06c72e108 refactor(core): workspace mutation effect (#12488)
### TL;DR

* refactor: workspace embedding mutation effect
* tests: error display for workspace embedding
2025-05-26 07:17:37 +00:00
yoyoyohamapi
da22391910 refactor(core): using computed data & optimizing data fetching timing & loading initial values (#12478)
## TL;DR

refactor workspace embedding:

* using computed data
* optimizing data fetching timing(constructor -> component mounted)
* set loading initial values to `true`

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

## Summary by CodeRabbit

- **New Features**
  - Improved loading indicators and state handling for embedding settings, including a more accurate loading state for the embedding toggle.
- **Bug Fixes**
  - The embedding toggle now safely handles unknown or loading states and is disabled while loading, preventing unintended interactions.
- **Refactor**
  - Simplified pagination logic and optimized initial data fetching for a smoother user experience.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 07:17:37 +00:00
Saul-Mirone
d06bb0222f fix: codebar language search hotkey conflict (#12522)
Closes: BS-3395

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved keyboard input handling in filterable lists to prevent unintended interactions when using arrow keys, Enter, or Escape.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 06:42:02 +00:00
forehalo
25aa5701bd chore(core): fix mixpanel init (#12513)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Adjusted telemetry settings to ensure Sentry is disabled when telemetry is enabled and clarified Mixpanel’s automatic opt-out behavior.

- **Documentation**
  - Added a comment explaining Mixpanel’s handling of telemetry preferences for improved transparency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 06:28:32 +00:00
Saul-Mirone
8ba4584b88 fix: latex editor max-height (#12520)
Closes: BS-3538

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

## Summary by CodeRabbit

- **Refactor**
  - Improved click handling for LaTeX blocks, making interactions more consistent and maintainable.
  - Updated LaTeX editor menu layout to enhance vertical scrolling, ensuring better usability with large content.

- **Style**
  - Added a maximum height and vertical scrolling to the LaTeX editor for improved user experience with lengthy formulas.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 06:14:17 +00:00
L-Sun
7aacfee789 feat(editor): bring back line width panel of brush in edgelss toolbar (#12514)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added the ability to select line width for pen tools, allowing users to customize brush and highlighter thickness in the toolbar menu.

- **Bug Fixes**
  - Restored and verified the functionality for adding brush elements with different sizes, ensuring accurate rendering of brush strokes based on selected size.

- **Improvements**
  - Enhanced slider component interaction by refining pointer event handling and updated slider styles for better touch interaction support.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 05:49:31 +00:00
doouding
81be5818cc fix: edgeless note mask does not restore after dnd dropping (#12495) 2025-05-26 05:03:10 +00:00
doouding
6518c5904e fix: linked-doc and figma scale issue (#12493)
Fixes [BS-2993](https://linear.app/affine-design/issue/BS-2993/)
2025-05-26 05:03:10 +00:00
doouding
3d0dc64516 fix: bookmark link can be click only when selected (#12450)
Fixes [BS-3390](https://linear.app/affine-design/issue/BS-3390/)
2025-05-26 05:03:09 +00:00
doouding
5de63c29f5 fix: rewrite selection logic and frame selection handling logic (#12421)
Fixes [BS-3528](https://linear.app/affine-design/issue/BS-3528)
Fixes [BS-3331](https://linear.app/affine-design/issue/BS-3331/frame-移动逻辑很奇怪)

### Changed
- Remove `onSelected` method from gfx view, use `handleSelection` provided by `GfxViewInteraction` instead.
- Add `selectable` to allow model to filter out itself from selection.
- Frame can be selected by body only if it's locked or its background is not transparent.

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

- **New Features**
  - Enhanced selection behavior for frames, edgeless text, notes, and mind map elements with refined control based on lock state and background transparency.
  - Introduced group-aware selection logic promoting selection of appropriate group ancestors.
  - Added support for element selection events in interactivity extensions.

- **Bug Fixes**
  - Resolved frame selection issues by enabling selection via title clicks and restricting body selection to locked frames or those with non-transparent backgrounds.

- **Documentation**
  - Added clarifying comments for group retrieval methods.

- **Tests**
  - Updated and added end-to-end tests for frame and lock selection reflecting new selection conditions.

- **Refactor**
  - Unified and simplified selection handling by moving logic from component methods to interaction handlers and removing deprecated selection methods.
  - Streamlined selection candidate processing with extension-driven target suggestion.
  - Removed legacy group element retrieval and selection helper methods to simplify interaction logic.

- **Style**
  - Renamed types and improved type signatures for selection context and interaction configurations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 05:03:09 +00:00
JimmFly
14a89c1e8a feat(core): highlight the share button (#12470)
close AF-2659
![CleanShot 2025-05-23 at 11 07 24@2x](https://github.com/user-attachments/assets/9d2047a8-4f84-40dd-8f0d-9d8a6abac616)

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

## Summary by CodeRabbit

- **Style**
  - Updated the share button to use the primary styling for improved visual emphasis.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 04:01:34 +00:00
pengx17
f619762b0c fix(core): setting modal max-width (#12494)
fix AF-2670

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

## Summary by CodeRabbit

- **Style**
  - Updated the maximum width of the settings modal for improved adaptability across different screen sizes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 03:47:17 +00:00
fengmk2
d6000ce70b chore(tools): add @affine/admin to available packages (#12507)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/52e2017b-cd59-4549-8c24-be84b7000d56.png)

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

## Summary by CodeRabbit

- **New Features**
  - Added '@affine/admin' to the list of selectable packages for development commands.
- **Enhancements**
  - Improved package selection prompt by displaying up to 10 choices at a time for easier navigation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 03:31:32 +00:00
CatsJuice
20af4c35ee feat(core): card view drag handle for doc explorer (#12431)
close AF-2624, AF-2628, AF-2581

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

- **New Features**
  - Introduced a draggable handle to document cards in the explorer, visible on hover in card view.
  - Added an option to remove grouping in the display menu.
  - Added contextual tooltips for user avatars indicating creation or last update.
  - Enabled optional tooltips on public user labels.
  - Extended dropdown buttons to accept custom styling classes.
  - Added a new masonry story showcasing item heights determined by ratios.

- **Style**
  - Enhanced drag handle appearance and visibility for card view items.
  - Replaced static shadows with theme-aware, smoothly transitioning shadows on card items.
  - Adjusted spacing between items in the document explorer for improved layout, with increased horizontal and (in card view) vertical gaps.
  - Reduced top padding in workspace page styles.
  - Added new button background style for secondary buttons.

- **Bug Fixes**
  - Removed duplicate internal property declarations to eliminate redundancy.

- **Refactor**
  - Simplified layout props by removing fixed height parameters in multiple components.
  - Updated masonry layout logic to support ratio-based item sizing alongside fixed heights.
  - Removed randomized skeleton loading placeholders, replacing them with fixed or no placeholders.
  - Refined masonry component typings and scrollbar placement for improved styling and layout.
  - Improved selection logic to activate selection mode when selecting all documents.

- **Localization**
  - Added new translation keys for grouping removal and user attribution tooltips.
  - Updated English locale with new strings for "Remove group" and user-created/updated tooltips.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 03:17:19 +00:00
EYHN
7d3b7a8555 feat(core): add migration background cover (#12485)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added a background image to migration notifications that adapts to light or dark theme settings.

- **Style**
  - Improved padding for migration notification containers for a more balanced appearance.
  - Introduced new styling for the migration background image.

- **Chores**
  - Updated translation completeness percentage for Argentinian Spanish.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 02:49:30 +00:00
fengmk2
e3d63896bf chore(server): add job backoff strategies (#12499)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Implemented an exponential backoff retry strategy for job queues, resulting in progressively longer wait times between retry attempts.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 02:33:58 +00:00
CatsJuice
adbdf32d8b fix(core): doc explorer navigation padding (#12430)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Updated navigation header to include additional left padding for improved spacing.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 02:06:03 +00:00
doodlewind
2192f28500 fix(editor): allow space-drag in presentation mode (#12501)
### TL;DR

Fix presentation mode space-drag interaction by disabling black background during panning and properly restoring presentation state.

### What changed?

- Modified how the presentation tool handles state restoration after panning
- Disabled black background during space-drag and middle-mouse panning in presentation mode
- Fixed tool state management to properly restore presentation mode after space panning
- Added direct modification of the current tool's activated options instead of triggering a full tool change

### How to test?

1. Create a frame in edgeless mode
2. Enter presentation mode
3. Press space and drag to pan around
4. Verify the black background disappears during panning
5. Verify presentation mode is properly restored after releasing space
6. Try the same with middle-mouse button dragging

### Why make this change?

The black background in presentation mode was causing visibility issues during panning operations. Additionally, the presentation state wasn't being properly restored after space-drag panning. These changes improve the user experience by making content visible during navigation while maintaining the presentation mode state.

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

- **New Features**
  - Presentation mode now automatically hides the black background overlay when dragging with the space key or middle mouse button, improving visibility during navigation.

- **Bug Fixes**
  - Improved handling of tool switching after panning in presentation mode, ensuring smoother transitions and state restoration.

- **Tests**
  - Added an end-to-end test to verify that the black background is hidden during space-drag actions in presentation mode.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-26 01:16:32 +00:00
CatsJuice
9599494e87 feat(core): new doc list for trash page (#12429)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added "Delete permanently" and "Restore" quick actions for documents in the Trash, enabling users to restore or permanently delete trashed documents directly from the UI.
  - Introduced multi-restore support, allowing batch restoration of selected trashed documents.
- **Improvements**
  - Quick action tooltips are now localized for better international user experience.
  - Trash page now uses an updated explorer interface for a more consistent and reactive document management experience.
  - Enhanced quick actions with optional click handlers for better extensibility.
- **Documentation**
  - Added new translation keys for "Delete permanently" and "Restore" actions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-24 12:45:41 +00:00
fengmk2
dfa62f7683 chore(server): support dynamic disable indexer (#12498)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved system stability by ensuring that indexing jobs do not run when the indexer feature is disabled.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-24 12:27:53 +00:00
renovate
0f19a506ac chore: bump up file-type version to v21 (#12500)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [file-type](https://redirect.github.com/sindresorhus/file-type) | [`^20.0.0` -> `^21.0.0`](https://renovatebot.com/diffs/npm/file-type/20.5.0/21.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/file-type/21.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/file-type/21.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/file-type/20.5.0/21.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/file-type/20.5.0/21.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>sindresorhus/file-type (file-type)</summary>

### [`v21.0.0`](https://redirect.github.com/sindresorhus/file-type/releases/tag/v21.0.0)

[Compare Source](https://redirect.github.com/sindresorhus/file-type/compare/v20.5.0...v21.0.0)

##### Breaking

-   Require Node.js 20  [`24aec1f`](https://redirect.github.com/sindresorhus/file-type/commit/24aec1f)
-   Drop Adobe Illustrator (.ai) detection support ([#&#8203;743](https://redirect.github.com/sindresorhus/file-type/issues/743))  [`af169f3`](https://redirect.github.com/sindresorhus/file-type/commit/af169f3)
-   Correct Matroska (video) MIME-type to formal IANA registration ([#&#8203;753](https://redirect.github.com/sindresorhus/file-type/issues/753))  [`f53f5ff`](https://redirect.github.com/sindresorhus/file-type/commit/f53f5ff)
-   Correct FLAC MIME-type to formal IANA registration ([#&#8203;755](https://redirect.github.com/sindresorhus/file-type/issues/755))  [`b9fda36`](https://redirect.github.com/sindresorhus/file-type/commit/b9fda36)
-   Correct Apache Parquet MIME-type to formal IANA registration ([#&#8203;748](https://redirect.github.com/sindresorhus/file-type/issues/748))  [`98e3f8e`](https://redirect.github.com/sindresorhus/file-type/commit/98e3f8e)
-   Correct Apache Arrow MIME-type to formal IANA registration ([#&#8203;754](https://redirect.github.com/sindresorhus/file-type/issues/754))  [`7184775`](https://redirect.github.com/sindresorhus/file-type/commit/7184775)

##### Improvements

-   Allow options to be directly passed to exported functions ([#&#8203;752](https://redirect.github.com/sindresorhus/file-type/issues/752))  [`d264029`](https://redirect.github.com/sindresorhus/file-type/commit/d264029)
-   Add `mpegOffsetTolerance` option ([#&#8203;646](https://redirect.github.com/sindresorhus/file-type/issues/646))  [`c40840a`](https://redirect.github.com/sindresorhus/file-type/commit/c40840a)

##### Fixes

-   Fix detection of some PAX TAR formats ([#&#8203;762](https://redirect.github.com/sindresorhus/file-type/issues/762))  [`574d0d6`](https://redirect.github.com/sindresorhus/file-type/commit/574d0d6)

***

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-24 02:55:26 +00:00
L-Sun
7223d35c89 fix(editor): shape tool should be the last used shape (#12425)
Close [BS-3305](https://linear.app/affine-design/issue/BS-3305/白板按s应该使用上次的shape形状)

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

- **New Features**
  - Added a method to cycle through shape types when using the shape tool.

- **Bug Fixes**
  - Improved shape tool behavior to ensure the selected shape type does not change unexpectedly after adding a new shape.

- **Tests**
  - Added an end-to-end test to verify that the shape tool retains the selected shape type after adding a new shape.
  - Enhanced shortcut tests to verify cycling shapes forward and backward using 's' and 'Shift+s' keys.

- **Refactor**
  - Streamlined the logic for cycling through shape types and connector modes for improved maintainability.
  - Removed external utility for cycling shapes, integrating the functionality directly into the shape tool.
  - Updated keyboard shortcut handling to use the new cycling method within the shape tool.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 16:31:02 +00:00
zzj3720
3f753eddf5 fix(editor): simple table will disappear when converted from a note to a linked doc (#12482)
fix: https://github.com/toeverything/AFFiNE/issues/12403

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

- **Bug Fixes**
	- Improved handling of certain table cell content to prevent potential display or behavior issues when content is missing.
	- Updated language completeness data for Spanish (Argentina) locale.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 16:16:35 +00:00
donteatfriedrice
a828c74f87 feat(editor): add experimental feature adapter panel to AFFiNE canary (#12489)
Closes: [BS-2539](https://linear.app/affine-design/issue/BS-2539/为-affine-添加-ef,并且支持在-affine-预览对应的功能)

> [!warning]
> This feature is only available in the canary build and is intended for debugging purposes.

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

- **New Features**
  - Introduced an "Adapter Panel" feature with a new sidebar tab for previewing document content in multiple formats (Markdown, PlainText, HTML, Snapshot), controllable via a feature flag.
  - Added a fully integrated adapter panel component with reactive UI elements for selecting adapters, toggling HTML preview modes, and updating content.
  - Provided a customizable adapter panel for both main app and playground environments, supporting content transformation pipelines and export previews.
  - Enabled seamless toggling and live updating of adapter panel content through intuitive menus and controls.

- **Localization**
  - Added English translations and descriptive settings for the Adapter Panel feature.

- **Chores**
  - Added new package and workspace dependencies along with TypeScript project references to support the Adapter Panel modules and components.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 14:08:12 +00:00
darkskygit
2a80fbb993 feat(server): workspace embedding improve (#12022)
fix AI-10
fix AI-109
fix PD-2484

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

- **New Features**
  - Added a method to check if a document requires embedding, improving embedding efficiency.
  - Enhanced document embeddings with enriched metadata, including title, summary, creation/update dates, and author information.
  - Introduced a new type for document fragments with extended metadata fields.

- **Improvements**
  - Embedding logic now conditionally processes only documents needing updates.
  - Embedding content now includes document metadata for more informative context.
  - Expanded and improved test coverage for embedding scenarios and workspace behaviors.
  - Event emission added for workspace embedding updates on client version mismatch.
  - Job queueing enhanced with prioritization and explicit job IDs for better management.
  - Job queue calls updated to include priority and context identifiers in a structured format.

- **Bug Fixes**
  - Improved handling of ignored documents in embedding matches.
  - Fixed incorrect document ID assignment in embedding job queueing.

- **Tests**
  - Added and updated snapshot and behavioral tests for embedding and workspace document handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 10:16:15 +00:00
CatsJuice
262f1a47a4 feat(core): track for calendar integration (#12378) 2025-05-23 10:01:14 +00:00
CatsJuice
fe99e51d5b chore(core): replace integration icon color (#12365)
chore(core): replace integration icon color

feat(core): track for calendar integration

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

- **Style**
  - Updated icon color in workspace integration card for improved visual consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 10:01:14 +00:00
fengmk2
a7e6c511a9 chore(server): manticore v9.3.2 (#12475) 2025-05-23 09:45:31 +00:00
fengmk2
bd72c931c4 chore(server): disable indexer on self-host by default (#12452)
enable indexer using `compose.indexer.yml` on self-host:

```bash
docker compose -f compose.yml -f compose.indexer.yml up
```

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

- **Chores**
  - Updated the build process in the development container to include building the reader package.
  - Added and configured a Manticore Search indexer service in the development container.
  - Removed the indexer service and related environment variables from the self-hosted Docker Compose setup and environment example file.

- **Documentation**
  - Improved documentation formatting for better readability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 09:45:31 +00:00
fundon
cb88156188 fix(editor): update shared deps (#12479)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Updated dependency management to include "@types/bytes" in the main dependencies.
- **Localization**
  - Slight adjustment to Spanish (Argentina) translation completeness.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 09:30:32 +00:00
fundon
952650e1bc refactor(nbstore): improve HTTP connection timeout handling (#11985)
Closes: [BS-3344](https://linear.app/affine-design/issue/BS-3344/改进请求超时提示)

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

- **Refactor**
  - Improved internal request timeout handling for cloud operations, resulting in more robust and reliable network requests. No changes to user-facing features or functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 09:13:59 +00:00
EYHN
797646442d feat(core): add number property filter and group by (#12483)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Enhanced filtering options for number properties with multiple comparison operators and empty/not empty checks.
  - Added support for grouping and ordering by number properties.
  - Introduced new UI components for number property filtering and group headers.
  - Improved draft completion behavior for text and tags filters using empty/not empty methods.

- **Bug Fixes**
  - Improved consistency in draft completion behavior when filtering by text or tags using empty/not empty methods.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 08:54:22 +00:00
fengmk2
4b9313ce37 chore(i18n): ignore i18n-completenesses.json (#12484)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Updated workflow to revert changes to a specific i18n file after running the i18n build step during automated checks. No impact on user-facing features.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 08:38:43 +00:00
EYHN
ac4954f7ad feat(core): add more collection rules (#12458) 2025-05-23 15:46:02 +08:00
L-Sun
0902b2b9c9 fix(editor): can not select the block after undo the drag from canvas to note (#12473)
Close [BS-3509](https://linear.app/affine-design/issue/BS-3509/embed拖入note,然后撤销,形成的block刷新后才可选中,且只能进行有限交互)

### Before

https://github.com/user-attachments/assets/4c83f9ba-1a99-427f-824d-7e946e55e737

### After

https://github.com/user-attachments/assets/e6a28478-0af4-4358-a353-e0c2e8edb0f9

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

## Summary by CodeRabbit

- **Bug Fixes**
	- Improved block selection reliability after dragging a block into a note and performing an undo action, ensuring the block remains selectable.

- **Tests**
	- Added an end-to-end test to verify block selection after dragging and undo operations in edgeless mode.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 07:28:30 +00:00
liuyi
41781902f6 feat(core): support apple sign in (#12424) 2025-05-23 15:27:27 +08:00
CatsJuice
a96cd3eb0a feat(mobile): new docs list for mobile (#12329)
close AF-2514

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

- **New Features**
  - Enhanced document explorer on mobile with live updates, responsive masonry layout, and improved empty state handling for all documents, collections, and tags.
  - Added customization for card height and masonry item width in document explorer views.
  - Extended layout components to support additional flexbox styling options for improved layout flexibility.

- **Bug Fixes**
  - Improved flexibility in layout components by supporting additional flexbox styling options.

- **Refactor**
  - Replaced older static document list and menu components with a unified, context-driven explorer for a more dynamic and interactive experience.
  - Removed obsolete CSS and component files related to the previous document list and menu implementations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 07:07:09 +00:00
fundon
d0539fde22 fix(editor): unify file size formatting method (#12444)
Closes: [BS-3524](https://linear.app/affine-design/issue/BS-3524/统一文件大小单位,与-af-一致)

![Screenshot 2025-05-22 at 15.09.41.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/8ypiIKZXudF5a0tIgIzf/ddb6fa38-243f-4e65-b572-d476e3771d74.png)

![Screenshot 2025-05-22 at 15.09.48.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/8ypiIKZXudF5a0tIgIzf/5d182332-4d0a-419a-b206-df58552fe740.png)

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

- **Refactor**
  - Updated file size formatting throughout the app to use a new, consistent utility for displaying file sizes.
  - Improved clarity and uniformity of file size information in attachments, images, and related notifications.
  - Enhanced type support to explicitly allow null values for file size descriptions.
- **Bug Fixes**
  - Adjusted file size display in tests to match updated formatting standards.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 06:33:31 +00:00
yoyoyohamapi
fd3a2756f8 fix(core): in edgeless mode, an error occurs when asking AI questions without selecting any content (#12437)
### TL;DR

fix: in edgeless mode, an error occurs when asking AI questions without selecting any content

> CLOSE AI-133

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

- **New Features**
  - Added support for asking AI input in edgeless mode when no content is selected.
  - Enhanced AI panel behavior with improved input handling and chat message sending in edgeless mode.
- **Bug Fixes**
  - Improved handling of AI chat input visibility and context extraction in edgeless mode.
- **Tests**
  - Introduced new end-to-end tests to verify chat interactions with AI in edgeless mode.
  - Centralized editor content removal logic in test utilities for better maintainability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 06:18:28 +00:00
fundon
e2e00688a9 feat(core): add reload button to audio block (#12451)
Related to: [BS-3143](https://linear.app/affine-design/issue/BS-3143/更新-loading-和错误样式)

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

- **New Features**
  - Added a reload button with an icon for audio blocks, allowing users to retry loading audio files if an error occurs.
  - Error messages are now displayed with actionable options when audio loading fails.

- **Enhancements**
  - Audio file sizes are now shown in a human-readable format within the audio player.
  - Improved display of audio file information, including error messages and formatted descriptions.

- **Style**
  - Updated styling for audio player and audio block components, including new styles for error states and reload button.
  - Renamed and refined audio player description styling for better layout and spacing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 06:04:07 +00:00
darkskygit
3d9b13c53c feat(server): better guard for embedding not support env (#12472) 2025-05-23 05:43:14 +00:00
darkskygit
36a764ccc4 feat(server): update prompts (#12471)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for a timezone parameter in chat prompts, allowing for more personalized AI responses.

- **Documentation**
  - Updated the system prompt for "Chat With AFFiNE AI" to a clearer, sectioned format with detailed instructions and improved privacy emphasis.
  - Introduced a structured markup format to guide AI response formatting, citations, and interaction rules.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 05:43:13 +00:00
forehalo
8519f4474a chore: cli to create self signed ca to dev with domain (#12466)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a CLI command to manage local Certificate Authority (CA) and generate SSL certificates for development domains.
  - Added example and template files for Nginx and OpenSSL configurations to support local development with SSL.
  - Provided new DNS and Nginx configuration files for enhanced local development setup.

- **Documentation**
  - Added a README with step-by-step instructions for setting up development containers and managing certificates on MacOS with OrbStack.

- **Chores**
  - Updated ignore patterns to exclude additional development files and directories.
  - Enhanced example Docker Compose files with commented service configurations and new volume definitions.
  - Removed the Elasticsearch example Docker Compose file.

- **Refactor**
  - Extended utility and command classes with new methods to support file operations and command execution.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 05:19:13 +00:00
fengmk2
aea45f451d fix(server): avoid infinite loop in manticoresearch (#12460)
close CLOUD-221

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Resolved an issue that could cause the document listing process to enter an infinite loop under certain conditions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 05:04:13 +00:00
forehalo
7978a2545f fix(server): should direct allocate seat if workspace is not team (#12469)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added the ability for workspace owners to approve members under review, with different approval processes for team and non-team workspaces.
- **Bug Fixes**
  - Improved accuracy of workspace seat quota calculations for member management.
- **Tests**
  - Enhanced test coverage and consistency for workspace member actions, including approval and revocation scenarios.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 04:25:53 +00:00
forehalo
f38b8fef4d feat(server): handle account deleting properly (#12399)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Users are now prevented from deleting their account if they own one or more team workspaces. A clear error message instructs users to transfer ownership or delete those workspaces first.
  - Disabled (banned) users are explicitly prevented from signing in or re-registering.
  - Added new error messages and translations to improve clarity around account deletion restrictions.

- **Bug Fixes**
  - Disabled users are now explicitly handled to prevent sign-in attempts.

- **Tests**
  - Introduced comprehensive end-to-end tests covering account deletion, banning, and re-registration scenarios.

- **Chores**
  - Improved event handling for user deletion and subscription cancellation.
  - Updated localization resources with new error messages.
  - Renamed payment event handler class for clarity.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 03:57:29 +00:00
donteatfriedrice
f99b143bf9 fix(editor): handle footnote reference immediately follow URLs when importing markdown (#12449)
Closes: [BS-3525](https://linear.app/affine-design/issue/BS-3525/markdown-adapter-紧跟着链接的-footnote-reference-会被识别成链接的一部分)

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

## Summary by CodeRabbit

- **New Features**
  - Improved handling of footnote references that immediately follow URLs in markdown, ensuring correct spacing and parsing.
- **Bug Fixes**
  - Footnote references after URLs are now parsed correctly, preventing formatting issues.
- **Tests**
  - Added comprehensive test suites to verify footnote reference preprocessing and markdown conversion.
- **Chores**
  - Introduced Vitest as a development dependency and added a dedicated test configuration for the footnote module.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 03:24:23 +00:00
L-Sun
57d31de854 fix(editor): support single-tap brush (#12461)
Close [BS-3519](https://linear.app/affine-design/issue/BS-3519/白板支持手写笔点写)

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

- **New Features**
  - Introduced the ability to add new brush elements by clicking, capturing precise pointer location and pressure data when supported.

- **Bug Fixes**
  - Improved stability when updating brush elements during dragging.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 03:08:40 +00:00
yoyoyohamapi
8e8e4032c7 feat(core): remove attachment tooltip (#12467)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added a tooltip to the delete icon for attachments, displaying a localized description when hovered.
- **Documentation**
  - Updated English localization to include a tooltip label for deleting attachments.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 02:50:43 +00:00
akumatus
119cf9442b feat(core): add gemini callout syntax highlighting (#12413)
Close [AI-125](https://linear.app/affine-design/issue/AI-125)

What Changed?
- Add `gemini-2.5-flash-preview-04-17` model
- Add `thinkingConfig` provider options
- Add callout syntax highlighting

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

- **New Features**
  - Added support for the "Gemini 2.5 Flash" model and updated the "Gemini 2.5 Pro" model to a newer version.
  - Enhanced streaming responses to better format reasoning outputs and provide clearer callouts in AI-generated content.

- **Bug Fixes**
  - Improved audio transcription prompts in test cases for more accurate and explicit testing.

- **Documentation**
  - Expanded citation instructions for AI chat responses, including examples for multiple citations.

- **Chores**
  - Updated the "@ai-sdk/google" dependency to a newer version.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-23 01:58:01 +00:00
Flrande
0ce05ca96e fix(editor): code block toolbar color (#12462)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Updated toolbar and language button styling to improve color consistency and theming.
  - Enhanced hover effects for language buttons with improved background color handling.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 15:31:09 +00:00
renovate
833cc11863 chore: bump up all non-major npm dependencies (#12185)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@ai-sdk/google](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.17` -> `1.2.18`](https://renovatebot.com/diffs/npm/@ai-sdk%2fgoogle/1.2.17/1.2.18) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fgoogle/1.2.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fgoogle/1.2.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fgoogle/1.2.17/1.2.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fgoogle/1.2.17/1.2.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@apollo/server](https://redirect.github.com/apollographql/apollo-server) ([source](https://redirect.github.com/apollographql/apollo-server/tree/HEAD/packages/server)) | [`4.12.0` -> `4.12.1`](https://renovatebot.com/diffs/npm/@apollo%2fserver/4.12.0/4.12.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@apollo%2fserver/4.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@apollo%2fserver/4.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@apollo%2fserver/4.12.0/4.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@apollo%2fserver/4.12.0/4.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@atlaskit/pragmatic-drag-and-drop-hitbox](https://atlassian.design/components/pragmatic-drag-and-drop/) ([source](https://redirect.github.com/atlassian/pragmatic-drag-and-drop)) | [`1.0.3` -> `1.1.0`](https://renovatebot.com/diffs/npm/@atlaskit%2fpragmatic-drag-and-drop-hitbox/1.0.3/1.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@atlaskit%2fpragmatic-drag-and-drop-hitbox/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@atlaskit%2fpragmatic-drag-and-drop-hitbox/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@atlaskit%2fpragmatic-drag-and-drop-hitbox/1.0.3/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@atlaskit%2fpragmatic-drag-and-drop-hitbox/1.0.3/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@aws-sdk/client-s3](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.806.0` -> `3.815.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.806.0/3.815.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.806.0/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.806.0/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@aws-sdk/s3-request-presigner](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/s3-request-presigner)) | [`3.806.0` -> `3.815.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fs3-request-presigner/3.806.0/3.815.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fs3-request-presigner/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fs3-request-presigner/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fs3-request-presigner/3.806.0/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fs3-request-presigner/3.806.0/3.815.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@eslint/js](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint/tree/HEAD/packages/js)) | [`9.26.0` -> `9.27.0`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.26.0/9.27.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fjs/9.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@eslint%2fjs/9.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@eslint%2fjs/9.26.0/9.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@eslint%2fjs/9.26.0/9.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@faker-js/faker](https://fakerjs.dev) ([source](https://redirect.github.com/faker-js/faker)) | [`9.7.0` -> `9.8.0`](https://renovatebot.com/diffs/npm/@faker-js%2ffaker/9.7.0/9.8.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@faker-js%2ffaker/9.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@faker-js%2ffaker/9.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@faker-js%2ffaker/9.7.0/9.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@faker-js%2ffaker/9.7.0/9.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@napi-rs/cli](https://redirect.github.com/napi-rs/napi-rs) | [`3.0.0-alpha.78` -> `3.0.0-alpha.80`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.78/3.0.0-alpha.80) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.80?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.0.0-alpha.80?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.0.0-alpha.78/3.0.0-alpha.80?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.0.0-alpha.78/3.0.0-alpha.80?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@prisma/client](https://www.prisma.io) ([source](https://redirect.github.com/prisma/prisma/tree/HEAD/packages/client)) | [`6.7.0` -> `6.8.2`](https://renovatebot.com/diffs/npm/@prisma%2fclient/6.7.0/6.8.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2fclient/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2fclient/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2fclient/6.7.0/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2fclient/6.7.0/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@prisma/instrumentation](https://www.prisma.io) ([source](https://redirect.github.com/prisma/prisma/tree/HEAD/packages/instrumentation)) | [`6.7.0` -> `6.8.2`](https://renovatebot.com/diffs/npm/@prisma%2finstrumentation/6.7.0/6.8.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2finstrumentation/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2finstrumentation/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2finstrumentation/6.7.0/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2finstrumentation/6.7.0/6.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@radix-ui/react-accordion](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.10` -> `1.2.11`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-accordion/1.2.10/1.2.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-accordion/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-accordion/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-accordion/1.2.10/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-accordion/1.2.10/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-alert-dialog](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.13` -> `1.1.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-alert-dialog/1.1.13/1.1.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-alert-dialog/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-alert-dialog/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-alert-dialog/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-alert-dialog/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-aspect-ratio](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.6` -> `1.1.7`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-aspect-ratio/1.1.6/1.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-aspect-ratio/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-aspect-ratio/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-aspect-ratio/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-aspect-ratio/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-avatar](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.9` -> `1.1.10`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-avatar/1.1.9/1.1.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-avatar/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-avatar/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-avatar/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-avatar/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-checkbox](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.3.1` -> `1.3.2`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-checkbox/1.3.1/1.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-checkbox/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-checkbox/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-checkbox/1.3.1/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-checkbox/1.3.1/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-collapsible](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.10` -> `1.1.11`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-collapsible/1.1.10/1.1.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-collapsible/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-collapsible/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-collapsible/1.1.10/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-collapsible/1.1.10/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-context-menu](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.2.14` -> `2.2.15`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-context-menu/2.2.14/2.2.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-context-menu/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-context-menu/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-context-menu/2.2.14/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-context-menu/2.2.14/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-dialog](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.13` -> `1.1.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-dialog/1.1.13/1.1.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-dialog/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-dialog/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-dialog/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-dialog/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-dropdown-menu](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.1.14` -> `2.1.15`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-dropdown-menu/2.1.14/2.1.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-dropdown-menu/2.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-dropdown-menu/2.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-dropdown-menu/2.1.14/2.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-dropdown-menu/2.1.14/2.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-hover-card](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.13` -> `1.1.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-hover-card/1.1.13/1.1.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-hover-card/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-hover-card/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-hover-card/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-hover-card/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-label](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.1.6` -> `2.1.7`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-label/2.1.6/2.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-label/2.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-label/2.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-label/2.1.6/2.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-label/2.1.6/2.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-menubar](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.14` -> `1.1.15`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-menubar/1.1.14/1.1.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-menubar/1.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-menubar/1.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-menubar/1.1.14/1.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-menubar/1.1.14/1.1.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-navigation-menu](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.12` -> `1.2.13`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-navigation-menu/1.2.12/1.2.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-navigation-menu/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-navigation-menu/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-navigation-menu/1.2.12/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-navigation-menu/1.2.12/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-popover](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.13` -> `1.1.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-popover/1.1.13/1.1.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-popover/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-popover/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-popover/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-popover/1.1.13/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-progress](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.6` -> `1.1.7`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-progress/1.1.6/1.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-progress/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-progress/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-progress/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-progress/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-radio-group](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.3.6` -> `1.3.7`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-radio-group/1.3.6/1.3.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-radio-group/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-radio-group/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-radio-group/1.3.6/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-radio-group/1.3.6/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-scroll-area](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.8` -> `1.2.9`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-scroll-area/1.2.8/1.2.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-scroll-area/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-scroll-area/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-scroll-area/1.2.8/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-scroll-area/1.2.8/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-select](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.2.4` -> `2.2.5`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-select/2.2.4/2.2.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-select/2.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-select/2.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-select/2.2.4/2.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-select/2.2.4/2.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-separator](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.6` -> `1.1.7`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-separator/1.1.6/1.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-separator/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-separator/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-separator/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-separator/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-slider](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.3.4` -> `1.3.5`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-slider/1.3.4/1.3.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-slider/1.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-slider/1.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-slider/1.3.4/1.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-slider/1.3.4/1.3.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-slot](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.2` -> `1.2.3`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-slot/1.2.2/1.2.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-slot/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-slot/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-slot/1.2.2/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-slot/1.2.2/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-switch](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.4` -> `1.2.5`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-switch/1.2.4/1.2.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-switch/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-switch/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-switch/1.2.4/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-switch/1.2.4/1.2.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-tabs](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.11` -> `1.1.12`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-tabs/1.1.11/1.1.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-tabs/1.1.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-tabs/1.1.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-tabs/1.1.11/1.1.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-tabs/1.1.11/1.1.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toast](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.13` -> `1.2.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toast/1.2.13/1.2.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toast/1.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toast/1.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toast/1.2.13/1.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toast/1.2.13/1.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toggle](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.8` -> `1.1.9`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toggle/1.1.8/1.1.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toggle/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toggle/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toggle/1.1.8/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toggle/1.1.8/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toggle-group](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.9` -> `1.1.10`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toggle-group/1.1.9/1.1.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toggle-group/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toggle-group/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toggle-group/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toggle-group/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toolbar](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.9` -> `1.1.10`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toolbar/1.1.9/1.1.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toolbar/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toolbar/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toolbar/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toolbar/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-tooltip](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.6` -> `1.2.7`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-tooltip/1.2.6/1.2.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-tooltip/1.2.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-tooltip/1.2.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-tooltip/1.2.6/1.2.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-tooltip/1.2.6/1.2.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-visually-hidden](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.2` -> `1.2.3`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-visually-hidden/1.2.2/1.2.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-visually-hidden/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-visually-hidden/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-visually-hidden/1.2.2/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-visually-hidden/1.2.2/1.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@react-email/components](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/components)) | [`0.0.38` -> `0.0.41`](https://renovatebot.com/diffs/npm/@react-email%2fcomponents/0.0.38/0.0.41) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@react-email%2fcomponents/0.0.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@react-email%2fcomponents/0.0.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@react-email%2fcomponents/0.0.38/0.0.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-email%2fcomponents/0.0.38/0.0.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@sentry/electron](https://redirect.github.com/getsentry/sentry-electron) | [`6.5.0` -> `6.6.0`](https://renovatebot.com/diffs/npm/@sentry%2felectron/6.5.0/6.6.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2felectron/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2felectron/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2felectron/6.5.0/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2felectron/6.5.0/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/esbuild-plugin](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/esbuild-plugin) ([source](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins)) | [`3.4.0` -> `3.5.0`](https://renovatebot.com/diffs/npm/@sentry%2fesbuild-plugin/3.4.0/3.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fesbuild-plugin/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fesbuild-plugin/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fesbuild-plugin/3.4.0/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fesbuild-plugin/3.4.0/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.17.0` -> `9.22.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.17.0/9.22.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.17.0/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.17.0/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.17.0` -> `9.22.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.17.0/9.22.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.17.0/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.17.0/9.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/webpack-plugin](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/webpack-plugin) ([source](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins)) | [`3.4.0` -> `3.5.0`](https://renovatebot.com/diffs/npm/@sentry%2fwebpack-plugin/3.4.0/3.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fwebpack-plugin/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fwebpack-plugin/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fwebpack-plugin/3.4.0/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fwebpack-plugin/3.4.0/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@slack/web-api](https://tools.slack.dev/node-slack-sdk/web-api) ([source](https://redirect.github.com/slackapi/node-slack-sdk)) | [`7.9.1` -> `7.9.2`](https://renovatebot.com/diffs/npm/@slack%2fweb-api/7.9.1/7.9.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@slack%2fweb-api/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@slack%2fweb-api/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@slack%2fweb-api/7.9.1/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@slack%2fweb-api/7.9.1/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@storybook/addon-essentials](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/essentials) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials)) | [`8.6.12` -> `8.6.14`](https://renovatebot.com/diffs/npm/@storybook%2faddon-essentials/8.6.12/8.6.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-essentials/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-essentials/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-essentials/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-essentials/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-interactions](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/interactions) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/interactions)) | [`8.6.12` -> `8.6.14`](https://renovatebot.com/diffs/npm/@storybook%2faddon-interactions/8.6.12/8.6.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-interactions/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-interactions/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-interactions/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-interactions/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-links](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/links) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/links)) | [`8.6.12` -> `8.6.14`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/8.6.12/8.6.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/addon-mdx-gfm](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/gfm) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/gfm)) | [`8.6.12` -> `8.6.14`](https://renovatebot.com/diffs/npm/@storybook%2faddon-mdx-gfm/8.6.12/8.6.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-mdx-gfm/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-mdx-gfm/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-mdx-gfm/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-mdx-gfm/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/react](https://redirect.github.com/storybookjs/storybook/tree/next/code/renderers/react) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/renderers/react)) | [`8.6.12` -> `8.6.14`](https://renovatebot.com/diffs/npm/@storybook%2freact/8.6.12/8.6.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@storybook/react-vite](https://redirect.github.com/storybookjs/storybook/tree/next/code/frameworks/react-vite) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite)) | [`8.6.12` -> `8.6.14`](https://renovatebot.com/diffs/npm/@storybook%2freact-vite/8.6.12/8.6.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact-vite/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact-vite/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact-vite/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact-vite/8.6.12/8.6.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@swc/core](https://swc.rs) ([source](https://redirect.github.com/swc-project/swc)) | [`1.11.24` -> `1.11.29`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.11.24/1.11.29) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.11.29?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.11.29?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.11.24/1.11.29?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.11.24/1.11.29?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@tailwindcss/postcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss)) | [`4.1.6` -> `4.1.7`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.1.6/4.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fpostcss/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fpostcss/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fpostcss/4.1.6/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fpostcss/4.1.6/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@tailwindcss/vite](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)) | [`4.1.6` -> `4.1.7`](https://renovatebot.com/diffs/npm/@tailwindcss%2fvite/4.1.6/4.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fvite/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fvite/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fvite/4.1.6/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fvite/4.1.6/4.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/express](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express)) | [`5.0.1` -> `5.0.2`](https://renovatebot.com/diffs/npm/@types%2fexpress/5.0.1/5.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fexpress/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fexpress/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fexpress/5.0.1/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fexpress/5.0.1/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/express](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express)) | [`5.0.1` -> `5.0.2`](https://renovatebot.com/diffs/npm/@types%2fexpress/5.0.1/5.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fexpress/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fexpress/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fexpress/5.0.1/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fexpress/5.0.1/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.17` -> `22.15.21`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.17/22.15.21) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.17/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.17/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.17` -> `22.15.21`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.17/22.15.21) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.17/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.17/22.15.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/react](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`19.1.3` -> `19.1.5`](https://renovatebot.com/diffs/npm/@types%2freact/19.1.3/19.1.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/19.1.3/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/19.1.3/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/react-dom](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)) | [`19.1.3` -> `19.1.5`](https://renovatebot.com/diffs/npm/@types%2freact-dom/19.1.3/19.1.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact-dom/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact-dom/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact-dom/19.1.3/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact-dom/19.1.3/19.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vanilla-extract/css](https://redirect.github.com/vanilla-extract-css/vanilla-extract) ([source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/css)) | [`1.17.1` -> `1.17.2`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fcss/1.17.1/1.17.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fcss/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fcss/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fcss/1.17.1/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fcss/1.17.1/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vanilla-extract/css](https://redirect.github.com/vanilla-extract-css/vanilla-extract) ([source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/css)) | [`1.17.1` -> `1.17.2`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fcss/1.17.1/1.17.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fcss/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fcss/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fcss/1.17.1/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fcss/1.17.1/1.17.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@vanilla-extract/dynamic](https://redirect.github.com/vanilla-extract-css/vanilla-extract) ([source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/dynamic)) | [`2.1.2` -> `2.1.3`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fdynamic/2.1.2/2.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fdynamic/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fdynamic/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fdynamic/2.1.2/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fdynamic/2.1.2/2.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@vanilla-extract/vite-plugin](https://redirect.github.com/vanilla-extract-css/vanilla-extract) ([source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/vite-plugin)) | [`5.0.1` -> `5.0.2`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fvite-plugin/5.0.1/5.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fvite-plugin/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fvite-plugin/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fvite-plugin/5.0.1/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fvite-plugin/5.0.1/5.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vanilla-extract/webpack-plugin](https://redirect.github.com/van
2025-05-22 14:09:37 +00:00
darkskygit
477250f1b8 feat(server): extract check params (#12187)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Improved input validation and error reporting for chat messages, attachments, and embeddings, with clearer error messages for invalid inputs.
  - Enhanced support for multimodal messages, including attachments such as images or audio.

- **Refactor**
  - Unified and streamlined parameter validation across AI providers, resulting in more consistent behavior and error handling.
  - Centralized parameter checks into a common provider layer, removing duplicate validation code from individual AI providers.

- **Tests**
  - Simplified and consolidated audio transcription test stubs for better maintainability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 13:43:59 +00:00
EYHN
5035ab218d feat(core): enable new all docs by default (#12404)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Simplified the user interface by always displaying the new All Pages view, removing the feature flag and old page version.
  - Updated selection interactions to use shift+click on document items instead of checkboxes.
  - Centralized drag-and-drop functionality in document list items and simplified drag handle behavior.
  - Generalized new page button component to accept standard HTML attributes.
  - Changed test ID attributes on new page buttons and list headers to use standard `data-testid`.

- **Bug Fixes**
  - Added stable test identifiers to new page buttons, document list items, menu items, and operation buttons for improved test reliability.
  - Enabled external drag-and-drop support on the trash button.

- **Tests**
  - Streamlined and updated end-to-end tests to match the new selection flow and UI changes, removing outdated or redundant test cases.
  - Simplified utility functions and wait conditions in test helpers for better accuracy and maintainability.
  - Updated selectors in tests to reflect new document item identifiers and centralized page element retrieval using utility functions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 11:29:05 +00:00
EYHN
333dc9cb89 feat(core): draft filter skip method step if there is only one method (#12457)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Filter options can now start from a specified step, improving flexibility when multiple filtering methods are available.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 11:12:37 +00:00
aki-chang-dev
d91e64b46b fix(android): fix edge-to-edge (#12453)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added the ability to retrieve the system navigation bar height on Android devices.

- **Bug Fixes**
  - Removed duplicate internal code to improve stability.

- **Chores**
  - Removed the dependency on the edge-to-edge support package and related configuration and code.
  - Updated configuration to adjust margins for edge-to-edge layouts.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 09:57:50 +00:00
CatsJuice
6d662b8a54 feat(core): new doc list for editing collection docs and rules (#12320)
close AF-2626

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

- **New Features**
  - Added support for debounced input changes in input fields, improving performance for rapid typing scenarios.
  - Enhanced document explorer with dynamic visibility controls for drag handles and "more" menu options.
  - Introduced a new filter for searching documents by title, enabling more precise filtering in collections.
  - Added a direct search method for document titles to improve search accuracy and speed.

- **Bug Fixes**
  - Improved layout and centering of icons in document list items.
  - Updated border styles across collection editor components for a more consistent appearance.

- **Refactor**
  - Simplified page selection and rule-matching logic in collection and selector components by consolidating state management and leveraging context-driven rendering.
  - Removed deprecated and redundant hooks for page list configuration.

- **Chores**
  - Updated code to use new theme variables for border colors, ensuring visual consistency with the latest design standards.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 09:42:33 +00:00
renovate
4b9428e6f4 chore: bump up @blocksuite/icons version to v2.2.15 (#12394)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@blocksuite/icons](https://redirect.github.com/toeverything/icons) | [`2.2.13` -> `2.2.15`](https://renovatebot.com/diffs/npm/@blocksuite%2ficons/2.2.13/2.2.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@blocksuite%2ficons/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@blocksuite%2ficons/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@blocksuite%2ficons/2.2.13/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@blocksuite%2ficons/2.2.13/2.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>toeverything/icons (@&#8203;blocksuite/icons)</summary>

### [`v2.2.15`](98b80b0c74...e07e014e09)

[Compare Source](98b80b0c74...e07e014e09)

### [`v2.2.14`](1775fb2908...98b80b0c74)

[Compare Source](1775fb2908...98b80b0c74)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-22 09:27:47 +00:00
EYHN
5897db6911 fix(core): hidden not supported property in display menu (#12445)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Properties in the document list are now displayed only if they are explicitly marked to be shown, providing a more streamlined and relevant view.

- **Bug Fixes**
  - Improved filtering ensures that only designated properties appear in the document list, preventing unintended properties from being shown.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 09:13:10 +00:00
zzj3720
83feb8ce24 fix(editor): opacity does not work (#12402)
fix: BS-3484

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

- **Style**
  - Improved visibility of certain table row headers by ensuring their opacity cannot be unintentionally overridden by other styles.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 08:58:57 +00:00
pengx17
a63d11aa5d fix(editor): math equation not being rendered correctly on electron client (#12448)
fix #12300

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

- **Bug Fixes**
  - Improved font rendering for math content on Windows by explicitly setting the font for math elements.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 08:45:38 +00:00
renovate
6def1c11d3 chore: bump up Lakr233/SpringInterpolation version to from: "1.3.1" (#12373)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [Lakr233/SpringInterpolation](https://redirect.github.com/Lakr233/SpringInterpolation) | patch | `from: "1.3.0"` -> `from: "1.3.1"` |

---

### Release Notes

<details>
<summary>Lakr233/SpringInterpolation (Lakr233/SpringInterpolation)</summary>

### [`v1.3.1`](https://redirect.github.com/Lakr233/SpringInterpolation/releases/tag/1.3.1): another place to let their hearts collide

[Compare Source](https://redirect.github.com/Lakr233/SpringInterpolation/compare/1.3.0...1.3.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-22 08:27:36 +00:00
renovate
69bd560026 chore: bump up Node.js to v22.16.0 (#12446)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | minor | `22.15.1` -> `22.16.0` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v22.16.0`](https://redirect.github.com/nodejs/node/releases/tag/v22.16.0): 2025-05-21, Version 22.16.0 &#x27;Jod&#x27; (LTS), @&#8203;aduh95

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.15.1...v22.16.0)

##### Notable Changes

-   \[[`c3ceaebb7a`](https://redirect.github.com/nodejs/node/commit/c3ceaebb7a)] - **deps**: update timezone to 2025b (Node.js GitHub Bot) [#&#8203;57857](https://redirect.github.com/nodejs/node/pull/57857)
-   \[[`5059a746ec`](https://redirect.github.com/nodejs/node/commit/5059a746ec)] - **doc**: add dario-piotrowicz to collaborators (Dario Piotrowicz) [#&#8203;58102](https://redirect.github.com/nodejs/node/pull/58102)
-   \[[`c8ceaaf397`](https://redirect.github.com/nodejs/node/commit/c8ceaaf397)] - **(SEMVER-MINOR)** **doc**: graduate multiple experimental apis (James M Snell) [#&#8203;57765](https://redirect.github.com/nodejs/node/pull/57765)
-   \[[`e21b37d9df`](https://redirect.github.com/nodejs/node/commit/e21b37d9df)] - **(SEMVER-MINOR)** **esm**: graduate import.meta properties (James M Snell) [#&#8203;58011](https://redirect.github.com/nodejs/node/pull/58011)
-   \[[`832640c35e`](https://redirect.github.com/nodejs/node/commit/832640c35e)] - **(SEMVER-MINOR)** **esm**: support top-level Wasm without package type (Guy Bedford) [#&#8203;57610](https://redirect.github.com/nodejs/node/pull/57610)
-   \[[`c510391d2f`](https://redirect.github.com/nodejs/node/commit/c510391d2f)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype.columns() (Colin Ihrig) [#&#8203;57490](https://redirect.github.com/nodejs/node/pull/57490)
-   \[[`5d1230bec0`](https://redirect.github.com/nodejs/node/commit/5d1230bec0)] - **(SEMVER-MINOR)** **src**: set default config as `node.config.json` (Marco Ippolito) [#&#8203;57171](https://redirect.github.com/nodejs/node/pull/57171)
-   \[[`30bb1ccbb0`](https://redirect.github.com/nodejs/node/commit/30bb1ccbb0)] - **(SEMVER-MINOR)** **src**: create `THROW_ERR_OPTIONS_BEFORE_BOOTSTRAPPING` (Marco Ippolito) [#&#8203;57016](https://redirect.github.com/nodejs/node/pull/57016)
-   \[[`0350c6f478`](https://redirect.github.com/nodejs/node/commit/0350c6f478)] - **(SEMVER-MINOR)** **src**: add config file support (Marco Ippolito) [#&#8203;57016](https://redirect.github.com/nodejs/node/pull/57016)
-   \[[`e1d3a9e192`](https://redirect.github.com/nodejs/node/commit/e1d3a9e192)] - **(SEMVER-MINOR)** **src**: add ExecutionAsyncId getter for any Context (Attila Szegedi) [#&#8203;57820](https://redirect.github.com/nodejs/node/pull/57820)
-   \[[`0ec912f452`](https://redirect.github.com/nodejs/node/commit/0ec912f452)] - **(SEMVER-MINOR)** **stream**: preserve AsyncLocalStorage context in finished() (Gürgün Dayıoğlu) [#&#8203;57865](https://redirect.github.com/nodejs/node/pull/57865)
-   \[[`43490c8797`](https://redirect.github.com/nodejs/node/commit/43490c8797)] - **(SEMVER-MINOR)** **util**: add `types.isFloat16Array()` (Livia Medeiros) [#&#8203;57879](https://redirect.github.com/nodejs/node/pull/57879)
-   \[[`dda6ca9172`](https://redirect.github.com/nodejs/node/commit/dda6ca9172)] - **(SEMVER-MINOR)** **worker**: add worker.getHeapStatistics() (Matteo Collina) [#&#8203;57888](https://redirect.github.com/nodejs/node/pull/57888)

##### Commits

-   \[[`4252dc798c`](https://redirect.github.com/nodejs/node/commit/4252dc798c)] - **assert**: support `Float16Array` in loose deep equality checks (Livia Medeiros) [#&#8203;57881](https://redirect.github.com/nodejs/node/pull/57881)
-   \[[`1c7396b078`](https://redirect.github.com/nodejs/node/commit/1c7396b078)] - **assert,util**: fix constructor lookup in deep equal comparison (Ruben Bridgewater) [#&#8203;57876](https://redirect.github.com/nodejs/node/pull/57876)
-   \[[`1ded5f25c8`](https://redirect.github.com/nodejs/node/commit/1ded5f25c8)] - **assert,util**: improve deep object comparison performance (Ruben Bridgewater) [#&#8203;57648](https://redirect.github.com/nodejs/node/pull/57648)
-   \[[`696b5f85ca`](https://redirect.github.com/nodejs/node/commit/696b5f85ca)] - **assert,util**: improve unequal number comparison performance (Ruben Bridgewater) [#&#8203;57619](https://redirect.github.com/nodejs/node/pull/57619)
-   \[[`775ee4d40f`](https://redirect.github.com/nodejs/node/commit/775ee4d40f)] - **assert,util**: improve array comparison (Ruben Bridgewater) [#&#8203;57619](https://redirect.github.com/nodejs/node/pull/57619)
-   \[[`3766992ba4`](https://redirect.github.com/nodejs/node/commit/3766992ba4)] - **benchmark**: add sqlite prepare select get (Vinícius Lourenço) [#&#8203;58040](https://redirect.github.com/nodejs/node/pull/58040)
-   \[[`8390276be3`](https://redirect.github.com/nodejs/node/commit/8390276be3)] - **benchmark**: add sqlite prepare select all (Vinícius Lourenço) [#&#8203;58040](https://redirect.github.com/nodejs/node/pull/58040)
-   \[[`6a9b79e5c1`](https://redirect.github.com/nodejs/node/commit/6a9b79e5c1)] - **benchmark**: add sqlite is transaction (Vinícius Lourenço) [#&#8203;58040](https://redirect.github.com/nodejs/node/pull/58040)
-   \[[`f689f98344`](https://redirect.github.com/nodejs/node/commit/f689f98344)] - **benchmark**: add sqlite prepare insert (Vinícius Lourenço) [#&#8203;58040](https://redirect.github.com/nodejs/node/pull/58040)
-   \[[`14a82804d7`](https://redirect.github.com/nodejs/node/commit/14a82804d7)] - **benchmark**: disambiguate `filename` and `dirname` read perf (Antoine du Hamel) [#&#8203;58056](https://redirect.github.com/nodejs/node/pull/58056)
-   \[[`e7e8256d35`](https://redirect.github.com/nodejs/node/commit/e7e8256d35)] - **buffer**: avoid creating unnecessary environment (Yagiz Nizipli) [#&#8203;58053](https://redirect.github.com/nodejs/node/pull/58053)
-   \[[`d7d8e8e994`](https://redirect.github.com/nodejs/node/commit/d7d8e8e994)] - **buffer**: define global v8::CFunction objects as const (Mert Can Altin) [#&#8203;57676](https://redirect.github.com/nodejs/node/pull/57676)
-   \[[`f37633e85a`](https://redirect.github.com/nodejs/node/commit/f37633e85a)] - **build**: use `$(BUILDTYPE)` when cleaning coverage files (Aviv Keller) [#&#8203;57995](https://redirect.github.com/nodejs/node/pull/57995)
-   \[[`e5bf67fe77`](https://redirect.github.com/nodejs/node/commit/e5bf67fe77)] - **build**: define python when generating `out/Makefile` (Aviv Keller) [#&#8203;57970](https://redirect.github.com/nodejs/node/pull/57970)
-   \[[`718f874ae0`](https://redirect.github.com/nodejs/node/commit/718f874ae0)] - **build**: fix zstd libname (Antoine du Hamel) [#&#8203;57999](https://redirect.github.com/nodejs/node/pull/57999)
-   \[[`53c5fdcae1`](https://redirect.github.com/nodejs/node/commit/53c5fdcae1)] - **crypto**: fix cross-realm `SharedArrayBuffer` validation (Antoine du Hamel) [#&#8203;57974](https://redirect.github.com/nodejs/node/pull/57974)
-   \[[`78f4ffee5d`](https://redirect.github.com/nodejs/node/commit/78f4ffee5d)] - **crypto**: fix cross-realm check of `ArrayBuffer` (Felipe Forbeck) [#&#8203;57828](https://redirect.github.com/nodejs/node/pull/57828)
-   \[[`f606352b63`](https://redirect.github.com/nodejs/node/commit/f606352b63)] - **crypto**: forbid passing `Float16Array` to `getRandomValues()` (Livia Medeiros) [#&#8203;57880](https://redirect.github.com/nodejs/node/pull/57880)
-   \[[`23c4e941c2`](https://redirect.github.com/nodejs/node/commit/23c4e941c2)] - **crypto**: remove BoringSSL dh-primes addition (Shelley Vohr) [#&#8203;57023](https://redirect.github.com/nodejs/node/pull/57023)
-   \[[`8339d9bc14`](https://redirect.github.com/nodejs/node/commit/8339d9bc14)] - **deps**: V8: cherry-pick [`f915fa4`](https://redirect.github.com/nodejs/node/commit/f915fa4c9f41) (Chengzhong Wu) [#&#8203;55484](https://redirect.github.com/nodejs/node/pull/55484)
-   \[[`c2111dd126`](https://redirect.github.com/nodejs/node/commit/c2111dd126)] - **deps**: V8: backport [`e5dbbba`](https://redirect.github.com/nodejs/node/commit/e5dbbbadcbff) (Darshan Sen) [#&#8203;58120](https://redirect.github.com/nodejs/node/pull/58120)
-   \[[`4cc49be951`](https://redirect.github.com/nodejs/node/commit/4cc49be951)] - **deps**: update zstd to 1.5.7 (Node.js GitHub Bot) [#&#8203;57940](https://redirect.github.com/nodejs/node/pull/57940)
-   \[[`c956d37c84`](https://redirect.github.com/nodejs/node/commit/c956d37c84)] - **deps**: update zlib to 1.3.0.1-motley-780819f (Node.js GitHub Bot) [#&#8203;57768](https://redirect.github.com/nodejs/node/pull/57768)
-   \[[`c3ceaebb7a`](https://redirect.github.com/nodejs/node/commit/c3ceaebb7a)] - **deps**: update timezone to 2025b (Node.js GitHub Bot) [#&#8203;57857](https://redirect.github.com/nodejs/node/pull/57857)
-   \[[`b5cd0eb590`](https://redirect.github.com/nodejs/node/commit/b5cd0eb590)] - **deps**: update simdutf to 6.4.2 (Node.js GitHub Bot) [#&#8203;57855](https://redirect.github.com/nodejs/node/pull/57855)
-   \[[`3eb6b814e9`](https://redirect.github.com/nodejs/node/commit/3eb6b814e9)] - **deps**: update simdutf to 6.4.0 (Node.js GitHub Bot) [#&#8203;56764](https://redirect.github.com/nodejs/node/pull/56764)
-   \[[`0be9fa3218`](https://redirect.github.com/nodejs/node/commit/0be9fa3218)] - **deps**: update icu to 77.1 (Node.js GitHub Bot) [#&#8203;57455](https://redirect.github.com/nodejs/node/pull/57455)
-   \[[`d5cf4254fb`](https://redirect.github.com/nodejs/node/commit/d5cf4254fb)] - **doc**: add HBSPS as triager (Wiyeong Seo) [#&#8203;57980](https://redirect.github.com/nodejs/node/pull/57980)
-   \[[`ad0861dba0`](https://redirect.github.com/nodejs/node/commit/ad0861dba0)] - **doc**: add ambassaor message (Brian Muenzenmeyer) [#&#8203;57600](https://redirect.github.com/nodejs/node/pull/57600)
-   \[[`0d3ec1aafe`](https://redirect.github.com/nodejs/node/commit/0d3ec1aafe)] - **doc**: fix misaligned options in vm.compileFunction() (Jimmy Leung) [#&#8203;58145](https://redirect.github.com/nodejs/node/pull/58145)
-   \[[`1f70baf3b0`](https://redirect.github.com/nodejs/node/commit/1f70baf3b0)] - **doc**: add missing options.signal to readlinePromises.createInterface() (Jimmy Leung) [#&#8203;55456](https://redirect.github.com/nodejs/node/pull/55456)
-   \[[`ec6a48621f`](https://redirect.github.com/nodejs/node/commit/ec6a48621f)] - **doc**: fix typo of file `zlib.md` (yusheng chen) [#&#8203;58093](https://redirect.github.com/nodejs/node/pull/58093)
-   \[[`37e360e386`](https://redirect.github.com/nodejs/node/commit/37e360e386)] - **doc**: make stability labels more consistent (Antoine du Hamel) [#&#8203;57516](https://redirect.github.com/nodejs/node/pull/57516)
-   \[[`2b5d63d36e`](https://redirect.github.com/nodejs/node/commit/2b5d63d36e)] - **doc**: allow the $schema property in node.config.json (Remco Haszing) [#&#8203;57560](https://redirect.github.com/nodejs/node/pull/57560)
-   \[[`a2063638e2`](https://redirect.github.com/nodejs/node/commit/a2063638e2)] - **doc**: fix `AsyncLocalStorage` example response changes after node v18 (Naor Tedgi (Abu Emma)) [#&#8203;57969](https://redirect.github.com/nodejs/node/pull/57969)
-   \[[`474c2b14c3`](https://redirect.github.com/nodejs/node/commit/474c2b14c3)] - **doc**: mark Node.js 18 as End-of-Life (Richard Lau) [#&#8203;58084](https://redirect.github.com/nodejs/node/pull/58084)
-   \[[`5059a746ec`](https://redirect.github.com/nodejs/node/commit/5059a746ec)] - **doc**: add dario-piotrowicz to collaborators (Dario Piotrowicz) [#&#8203;58102](https://redirect.github.com/nodejs/node/pull/58102)
-   \[[`1eec170fc3`](https://redirect.github.com/nodejs/node/commit/1eec170fc3)] - **doc**: fix formatting of `import.meta.filename` section (Antoine du Hamel) [#&#8203;58079](https://redirect.github.com/nodejs/node/pull/58079)
-   \[[`7f108de525`](https://redirect.github.com/nodejs/node/commit/7f108de525)] - **doc**: fix env variable name in `util.styleText` (Antoine du Hamel) [#&#8203;58072](https://redirect.github.com/nodejs/node/pull/58072)
-   \[[`54b3f7fffc`](https://redirect.github.com/nodejs/node/commit/54b3f7fffc)] - **doc**: add returns for https.get (Eng Zer Jun) [#&#8203;58025](https://redirect.github.com/nodejs/node/pull/58025)
-   \[[`66f2c605a8`](https://redirect.github.com/nodejs/node/commit/66f2c605a8)] - **doc**: fix typo in `buffer.md` (chocolateboy) [#&#8203;58052](https://redirect.github.com/nodejs/node/pull/58052)
-   \[[`b0256dd42b`](https://redirect.github.com/nodejs/node/commit/b0256dd42b)] - **doc**: correct deprecation type of `assert.CallTracker` (René) [#&#8203;57997](https://redirect.github.com/nodejs/node/pull/57997)
-   \[[`581439c9e6`](https://redirect.github.com/nodejs/node/commit/581439c9e6)] - **doc**: mark devtools integration section as active development (Chengzhong Wu) [#&#8203;57886](https://redirect.github.com/nodejs/node/pull/57886)
-   \[[`a2a2a2f027`](https://redirect.github.com/nodejs/node/commit/a2a2a2f027)] - **doc**: fix typo in `module.md` (Alex Schwartz) [#&#8203;57889](https://redirect.github.com/nodejs/node/pull/57889)
-   \[[`c0ec4e2935`](https://redirect.github.com/nodejs/node/commit/c0ec4e2935)] - **doc**: increase z-index of header element (Dario Piotrowicz) [#&#8203;57851](https://redirect.github.com/nodejs/node/pull/57851)
-   \[[`93d19ec6cd`](https://redirect.github.com/nodejs/node/commit/93d19ec6cd)] - **doc**: add missing TS formats for `load` hooks (Antoine du Hamel) [#&#8203;57837](https://redirect.github.com/nodejs/node/pull/57837)
-   \[[`f5ea06c61f`](https://redirect.github.com/nodejs/node/commit/f5ea06c61f)] - **doc**: clarify the multi REPL example (Dario Piotrowicz) [#&#8203;57759](https://redirect.github.com/nodejs/node/pull/57759)
-   \[[`80c4fe1b70`](https://redirect.github.com/nodejs/node/commit/80c4fe1b70)] - **doc**: fix deprecation type for `DEP0148` (Livia Medeiros) [#&#8203;57785](https://redirect.github.com/nodejs/node/pull/57785)
-   \[[`01cad99da0`](https://redirect.github.com/nodejs/node/commit/01cad99da0)] - **doc**: list DOMException as a potential error raised by Node.js (Chengzhong Wu) [#&#8203;57783](https://redirect.github.com/nodejs/node/pull/57783)
-   \[[`a08b714a46`](https://redirect.github.com/nodejs/node/commit/a08b714a46)] - **doc**: add missing v0.x changelog entries (Antoine du Hamel) [#&#8203;57779](https://redirect.github.com/nodejs/node/pull/57779)
-   \[[`d0b48350fd`](https://redirect.github.com/nodejs/node/commit/d0b48350fd)] - **doc**: fix typo in writing-docs (Sebastian Beltran) [#&#8203;57776](https://redirect.github.com/nodejs/node/pull/57776)
-   \[[`bde3725f8b`](https://redirect.github.com/nodejs/node/commit/bde3725f8b)] - **doc**: clarify examples section in REPL doc (Dario Piotrowicz) [#&#8203;57762](https://redirect.github.com/nodejs/node/pull/57762)
-   \[[`c8ceaaf397`](https://redirect.github.com/nodejs/node/commit/c8ceaaf397)] - **(SEMVER-MINOR)** **doc**: graduate multiple experimental apis (James M Snell) [#&#8203;57765](https://redirect.github.com/nodejs/node/pull/57765)
-   \[[`92428c2609`](https://redirect.github.com/nodejs/node/commit/92428c2609)] - **doc**: explicitly state that corepack will be removed in v25+ (Trivikram Kamat) [#&#8203;57747](https://redirect.github.com/nodejs/node/pull/57747)
-   \[[`298969e1dd`](https://redirect.github.com/nodejs/node/commit/298969e1dd)] - **doc**: update position type to integer | null in fs (Yukihiro Hasegawa) [#&#8203;57745](https://redirect.github.com/nodejs/node/pull/57745)
-   \[[`a9d28e27c9`](https://redirect.github.com/nodejs/node/commit/a9d28e27c9)] - **doc**: update CI instructions (Antoine du Hamel) [#&#8203;57743](https://redirect.github.com/nodejs/node/pull/57743)
-   \[[`133d2878a1`](https://redirect.github.com/nodejs/node/commit/133d2878a1)] - **doc**: update example of using `await` in REPL (Dario Piotrowicz) [#&#8203;57653](https://redirect.github.com/nodejs/node/pull/57653)
-   \[[`fc5f126629`](https://redirect.github.com/nodejs/node/commit/fc5f126629)] - **doc**: add back mention of visa fees to onboarding doc (Darshan Sen) [#&#8203;57730](https://redirect.github.com/nodejs/node/pull/57730)
-   \[[`945f4ac538`](https://redirect.github.com/nodejs/node/commit/945f4ac538)] - **doc**: process.execve is only unavailable for Windows (Yaksh Bariya) [#&#8203;57726](https://redirect.github.com/nodejs/node/pull/57726)
-   \[[`f3b885bb5e`](https://redirect.github.com/nodejs/node/commit/f3b885bb5e)] - **doc**: clarify `unhandledRejection` events behaviors in process doc (Dario Piotrowicz) [#&#8203;57654](https://redirect.github.com/nodejs/node/pull/57654)
-   \[[`7326dda5b0`](https://redirect.github.com/nodejs/node/commit/7326dda5b0)] - **doc**: improved fetch docs (Alessandro Miliucci) [#&#8203;57296](https://redirect.github.com/nodejs/node/pull/57296)
-   \[[`6906c5eb1f`](https://redirect.github.com/nodejs/node/commit/6906c5eb1f)] - **doc**: document REPL custom eval arguments (Dario Piotrowicz) [#&#8203;57690](https://redirect.github.com/nodejs/node/pull/57690)
-   \[[`47a7564e8f`](https://redirect.github.com/nodejs/node/commit/47a7564e8f)] - **doc**: classify Chrome DevTools Protocol as tier 2 (Chengzhong Wu) [#&#8203;57634](https://redirect.github.com/nodejs/node/pull/57634)
-   \[[`e274cc1310`](https://redirect.github.com/nodejs/node/commit/e274cc1310)] - **doc**: replace NOTE that does not render properly (Colin Ihrig) [#&#8203;57484](https://redirect.github.com/nodejs/node/pull/57484)
-   \[[`bef06b11df`](https://redirect.github.com/nodejs/node/commit/bef06b11df)] - **esm**: avoid `import.meta` setup costs for unused properties (Antoine du Hamel) [#&#8203;57286](https://redirect.github.com/nodejs/node/pull/57286)
-   \[[`e21b37d9df`](https://redirect.github.com/nodejs/node/commit/e21b37d9df)] - **(SEMVER-MINOR)** **esm**: graduate import.meta properties (James M Snell) [#&#8203;58011](https://redirect.github.com/nodejs/node/pull/58011)
-   \[[`832640c35e`](https://redirect.github.com/nodejs/node/commit/832640c35e)] - **(SEMVER-MINOR)** **esm**: support top-level Wasm without package type (Guy Bedford) [#&#8203;57610](https://redirect.github.com/nodejs/node/pull/57610)
-   \[[`8f643471ef`](https://redirect.github.com/nodejs/node/commit/8f643471ef)] - **fs**: improve globSync performance (Rich Trott) [#&#8203;57725](https://redirect.github.com/nodejs/node/pull/57725)
-   \[[`bf9e17ecc6`](https://redirect.github.com/nodejs/node/commit/bf9e17ecc6)] - **http2**: use args.This() instead of args.Holder() (Joyee Cheung) [#&#8203;58004](https://redirect.github.com/nodejs/node/pull/58004)
-   \[[`137717354f`](https://redirect.github.com/nodejs/node/commit/137717354f)] - **http2**: fix graceful session close (Kushagra Pandey) [#&#8203;57808](https://redirect.github.com/nodejs/node/pull/57808)
-   \[[`9baf580269`](https://redirect.github.com/nodejs/node/commit/9baf580269)] - **http2**: fix check for `frame->hd.type` (hanguanqiang) [#&#8203;57644](https://redirect.github.com/nodejs/node/pull/57644)
-   \[[`b8189242b2`](https://redirect.github.com/nodejs/node/commit/b8189242b2)] - **http2**: skip writeHead if stream is closed (Shima Ryuhei) [#&#8203;57686](https://redirect.github.com/nodejs/node/pull/57686)
-   \[[`4e02a1650a`](https://redirect.github.com/nodejs/node/commit/4e02a1650a)] - **lib**: remove unused file `fetch_module` (Michaël Zasso) [#&#8203;55880](https://redirect.github.com/nodejs/node/pull/55880)
-   \[[`d9700fef26`](https://redirect.github.com/nodejs/node/commit/d9700fef26)] - **lib**: avoid StackOverflow on `serializeError` (Chengzhong Wu) [#&#8203;58075](https://redirect.github.com/nodejs/node/pull/58075)
-   \[[`f3a16b6d9c`](https://redirect.github.com/nodejs/node/commit/f3a16b6d9c)] - **lib**: resolve the issue of not adhering to the specified buffer size (0hm☘️🏳️‍⚧️) [#&#8203;55896](https://redirect.github.com/nodejs/node/pull/55896)
-   \[[`d4fc282f73`](https://redirect.github.com/nodejs/node/commit/d4fc282f73)] - **lib**: fix AbortSignal.any() with timeout signals (Gürgün Dayıoğlu) [#&#8203;57867](https://redirect.github.com/nodejs/node/pull/57867)
-   \[[`f7e2902861`](https://redirect.github.com/nodejs/node/commit/f7e2902861)] - **lib**: use Map primordial for ActiveAsyncContextFrame (Gürgün Dayıoğlu) [#&#8203;57670](https://redirect.github.com/nodejs/node/pull/57670)
-   \[[`8652b0e168`](https://redirect.github.com/nodejs/node/commit/8652b0e168)] - **meta**: set nodejs/config as codeowner (Marco Ippolito) [#&#8203;57237](https://redirect.github.com/nodejs/node/pull/57237)
-   \[[`e98504ed95`](https://redirect.github.com/nodejs/node/commit/e98504ed95)] - **meta**: allow penetration testing on live system with prior authorization (Matteo Collina) [#&#8203;57966](https://redirect.github.com/nodejs/node/pull/57966)
-   \[[`340731bea0`](https://redirect.github.com/nodejs/node/commit/340731bea0)] - **meta**: fix subsystem in commit title (Luigi Pinca) [#&#8203;57945](https://redirect.github.com/nodejs/node/pull/57945)
-   \[[`d767cbffcf`](https://redirect.github.com/nodejs/node/commit/d767cbffcf)] - **meta**: bump Mozilla-Actions/sccache-action from 0.0.8 to 0.0.9 (dependabot\[bot]) [#&#8203;57720](https://redirect.github.com/nodejs/node/pull/57720)
-   \[[`575f904b13`](https://redirect.github.com/nodejs/node/commit/575f904b13)] - **meta**: bump actions/download-artifact from 4.1.9 to 4.2.1 (dependabot\[bot]) [#&#8203;57719](https://redirect.github.com/nodejs/node/pull/57719)
-   \[[`acd323c069`](https://redirect.github.com/nodejs/node/commit/acd323c069)] - **meta**: bump actions/setup-python from 5.4.0 to 5.5.0 (dependabot\[bot]) [#&#8203;57718](https://redirect.github.com/nodejs/node/pull/57718)
-   \[[`21246fec20`](https://redirect.github.com/nodejs/node/commit/21246fec20)] - **meta**: bump peter-evans/create-pull-request from 7.0.7 to 7.0.8 (dependabot\[bot]) [#&#8203;57717](https://redirect.github.com/nodejs/node/pull/57717)
-   \[[`97f32d5849`](https://redirect.github.com/nodejs/node/commit/97f32d5849)] - **meta**: bump github/codeql-action from 3.28.10 to 3.28.13 (dependabot\[bot]) [#&#8203;57716](https://redirect.github.com/nodejs/node/pull/57716)
-   \[[`90ddbb8cfa`](https://redirect.github.com/nodejs/node/commit/90ddbb8cfa)] - **meta**: bump actions/cache from 4.2.2 to 4.2.3 (dependabot\[bot]) [#&#8203;57715](https://redirect.github.com/nodejs/node/pull/57715)
-   \[[`728425d03e`](https://redirect.github.com/nodejs/node/commit/728425d03e)] - **meta**: bump actions/setup-node from 4.2.0 to 4.3.0 (dependabot\[bot]) [#&#8203;57714](https://redirect.github.com/nodejs/node/pull/57714)
-   \[[`1f799140e0`](https://redirect.github.com/nodejs/node/commit/1f799140e0)] - **meta**: bump actions/upload-artifact from 4.6.1 to 4.6.2 (dependabot\[bot]) [#&#8203;57713](https://redirect.github.com/nodejs/node/pull/57713)
-   \[[`021b174a1f`](https://redirect.github.com/nodejs/node/commit/021b174a1f)] - **module**: tidy code string concat → string templates (Jacob Smith) [#&#8203;55820](https://redirect.github.com/nodejs/node/pull/55820)
-   \[[`44c5718476`](https://redirect.github.com/nodejs/node/commit/44c5718476)] - **module**: fix incorrect formatting in require(esm) cycle error message (haykam821) [#&#8203;57453](https://redirect.github.com/nodejs/node/pull/57453)
-   \[[`bb09b4d4ae`](https://redirect.github.com/nodejs/node/commit/bb09b4d4ae)] - **module**: improve `getPackageType` performance (Dario Piotrowicz) [#&#8203;57599](https://redirect.github.com/nodejs/node/pull/57599)
-   \[[`9e6054e715`](https://redirect.github.com/nodejs/node/commit/9e6054e715)] - **module**: remove unnecessary `readPackage` function (Dario Piotrowicz) [#&#8203;57596](https://redirect.github.com/nodejs/node/pull/57596)
-   \[[`4a8db273ba`](https://redirect.github.com/nodejs/node/commit/4a8db273ba)] - **node-api**: add nested object wrap and napi_ref test (Chengzhong Wu) [#&#8203;57981](https://redirect.github.com/nodejs/node/pull/57981)
-   \[[`3c65058f20`](https://redirect.github.com/nodejs/node/commit/3c65058f20)] - **node-api**: convert NewEnv to node_napi_env\_\_::New (Vladimir Morozov) [#&#8203;57834](https://redirect.github.com/nodejs/node/pull/57834)
-   \[[`a4105db1f7`](https://redirect.github.com/nodejs/node/commit/a4105db1f7)] - **os**: fix netmask format check condition in getCIDR function (Wiyeong Seo) [#&#8203;57324](https://redirect.github.com/nodejs/node/pull/57324)
-   \[[`248c938139`](https://redirect.github.com/nodejs/node/commit/248c938139)] - **process**: disable building execve on IBM i (Abdirahim Musse) [#&#8203;57883](https://redirect.github.com/nodejs/node/pull/57883)
-   \[[`972275697a`](https://redirect.github.com/nodejs/node/commit/972275697a)] - **repl**: deprecate `repl.builtinModules` (Dario Piotrowicz) [#&#8203;57508](https://redirect.github.com/nodejs/node/pull/57508)
-   \[[`7485309d7e`](https://redirect.github.com/nodejs/node/commit/7485309d7e)] - **sqlite**: add location method (Edy Silva) [#&#8203;57860](https://redirect.github.com/nodejs/node/pull/57860)
-   \[[`c12cd2a190`](https://redirect.github.com/nodejs/node/commit/c12cd2a190)] - **sqlite**: add timeout options to DatabaseSync (Edy Silva) [#&#8203;57752](https://redirect.github.com/nodejs/node/pull/57752)
-   \[[`5e0503a967`](https://redirect.github.com/nodejs/node/commit/5e0503a967)] - **sqlite**: add setReturnArrays method to StatementSync (Gürgün Dayıoğlu) [#&#8203;57542](https://redirect.github.com/nodejs/node/pull/57542)
-   \[[`ed9d2fd51a`](https://redirect.github.com/nodejs/node/commit/ed9d2fd51a)] - **sqlite**: enable common flags (Edy Silva) [#&#8203;57621](https://redirect.github.com/nodejs/node/pull/57621)
-   \[[`06dcb318bc`](https://redirect.github.com/nodejs/node/commit/06dcb318bc)] - **sqlite**: refactor prepared statement iterator (Colin Ihrig) [#&#8203;57569](https://redirect.github.com/nodejs/node/pull/57569)
-   \[[`c510391d2f`](https://redirect.github.com/nodejs/node/commit/c510391d2f)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype.columns() (Colin Ihrig) [#&#8203;57490](https://redirect.github.com/nodejs/node/pull/57490)
-   \[[`4e24456a1a`](https://redirect.github.com/nodejs/node/commit/4e24456a1a)] - **sqlite**: reset statement immediately in run() (Colin Ihrig) [#&#8203;57350](https://redirect.github.com/nodejs/node/pull/57350)
-   \[[`a9a6891b0b`](https://redirect.github.com/nodejs/node/commit/a9a6891b0b)] - **sqlite**: fix coverity warnings related to backup() (Colin Ihrig) [#&#8203;56961](https://redirect.github.com/nodejs/node/pull/56961)
-   \[[`d2e1bcf3d4`](https://redirect.github.com/nodejs/node/commit/d2e1bcf3d4)] - **sqlite**: fix use-after-free in StatementSync due to premature GC (Divy Srivastava) [#&#8203;56840](https://redirect.github.com/nodejs/node/pull/56840)
-   \[[`cfe15ca7b4`](https://redirect.github.com/nodejs/node/commit/cfe15ca7b4)] - **sqlite**: handle conflicting SQLite and JS errors (Colin Ihrig) [#&#8203;56787](https://redirect.github.com/nodejs/node/pull/56787)
-   \[[`0e999eb65f`](https://redirect.github.com/nodejs/node/commit/0e999eb65f)] - **sqlite**: add getter to detect transactions (Colin Ihrig) [#&#8203;57925](https://redirect.github.com/nodejs/node/pull/57925)
-   \[[`20b27331c0`](https://redirect.github.com/nodejs/node/commit/20b27331c0)] - **sqlite, test**: expose sqlite online backup api (Edy Silva) [#&#8203;56253](https://redirect.github.com/nodejs/node/pull/56253)
-   \[[`8856712171`](https://redirect.github.com/nodejs/node/commit/8856712171)] - **sqlite,doc,test**: add aggregate function (Edy Silva) [#&#8203;56600](https://redirect.github.com/nodejs/node/pull/56600)
-   \[[`120050db97`](https://redirect.github.com/nodejs/node/commit/120050db97)] - **sqlite,src**: refactor sqlite value conversion (Edy Silva) [#&#8203;57571](https://redirect.github.com/nodejs/node/pull/57571)
-   \[[`4c5555d558`](https://redirect.github.com/nodejs/node/commit/4c5555d558)] - **src**: initialize privateSymbols for per_context (Jason Zhang) [#&#8203;57479](https://redirect.github.com/nodejs/node/pull/57479)
-   \[[`d2ce9023b1`](https://redirect.github.com/nodejs/node/commit/d2ce9023b1)] - **src**: ensure primordials are initialized exactly once (Chengzhong Wu) [#&#8203;57519](https://redirect.github.com/nodejs/node/pull/57519)
-   \[[`06179be6ca`](https://redirect.github.com/nodejs/node/commit/06179be6ca)] - **src**: disable abseil deadlock detection (Chengzhong Wu) [#&#8203;57582](https://redirect.github.com/nodejs/node/pull/57582)
-   \[[`5121c47990`](https://redirect.github.com/nodejs/node/commit/5121c47990)] - **src**: fix node_config_file.h compilation error in GN build (Cheng) [#&#8203;57210](https://redirect.github.com/nodejs/node/pull/57210)
-   \[[`5d1230bec0`](https://redirect.github.com/nodejs/node/commit/5d1230bec0)] - **(SEMVER-MINOR)** **src**: set default config as `node.config.json` (Marco Ippolito) [#&#8203;57171](https://redirect.github.com/nodejs/node/pull/57171)
-   \[[`ccee741c43`](https://redirect.github.com/nodejs/node/commit/ccee741c43)] - **src**: namespace config file flags (Marco Ippolito) [#&#8203;57170](https://redirect.github.com/nodejs/node/pull/57170)
-   \[[`30bb1ccbb0`](https://redirect.github.com/nodejs/node/commit/30bb1ccbb0)] - **(SEMVER-MINOR)** **src**: create `THROW_ERR_OPTIONS_BEFORE_BOOTSTRAPPING` (Marco Ippolito) [#&#8203;57016](https://redirect.github.com/nodejs/node/pull/57016)
-   \[[`0350c6f478`](https://redirect.github.com/nodejs/node/commit/0350c6f478)] - **(SEMVER-MINOR)** **src**: add config file support (Marco Ippolito) [#&#8203;57016](https://redirect.github.com/nodejs/node/pull/57016)
-   \[[`eef37d00cb`](https://redirect.github.com/nodejs/node/commit/eef37d00cb)] - **src**: add more debug logs and comments in NodePlatform (Joyee Cheung) [#&#8203;58047](https://redirect.github.com/nodejs/node/pull/58047)
-   \[[`678e8f57c0`](https://redirect.github.com/nodejs/node/commit/678e8f57c0)] - **src**: add dcheck_eq for Object::New constructor calls (Jonas) [#&#8203;57943](https://redirect.github.com/nodejs/node/pull/57943)
-   \[[`aee45e2036`](https://redirect.github.com/nodejs/node/commit/aee45e2036)] - **src**: move windows specific fns to `_WIN32` (Yagiz Nizipli) [#&#8203;57951](https://redirect.github.com/nodejs/node/pull/57951)
-   \[[`6206a8edbc`](https://redirect.github.com/nodejs/node/commit/6206a8edbc)] - **src**: improve thread safety of TaskQueue (Shelley Vohr) [#&#8203;57910](https://redirect.github.com/nodejs/node/pull/57910)
-   \[[`03936f31c1`](https://redirect.github.com/nodejs/node/commit/03936f31c1)] - **src**: fixup errorhandling more in various places (James M Snell) [#&#8203;57852](https://redirect.github.com/nodejs/node/pull/57852)
-   \[[`010dd91a19`](https://redirect.github.com/nodejs/node/commit/010dd91a19)] - **src**: fix typo in comments (Edy Silva) [#&#8203;57868](https://redirect.github.com/nodejs/node/pull/57868)
-   \[[`e00c1ecbd2`](https://redirect.github.com/nodejs/node/commit/e00c1ecbd2)] - **src**: add BaseObjectPtr nullptr operations (Chengzhong Wu) [#&#8203;56585](https://redirect.github.com/nodejs/node/pull/56585)
-   \[[`648ad252e1`](https://redirect.github.com/nodejs/node/commit/648ad252e1)] - **src**: remove `void*` -> `char*` -> `void*` casts (Tobias Nießen) [#&#8203;57791](https://redirect.github.com/nodejs/node/pull/57791)
-   \[[`680b434a62`](https://redirect.github.com/nodejs/node/commit/680b434a62)] - **src**: improve error handing in node_messaging (James M Snell) [#&#8203;57760](https://redirect.github.com/nodejs/node/pull/57760)
-   \[[`18f5301747`](https://redirect.github.com/nodejs/node/commit/18f5301747)] - **src**: remove unused detachArrayBuffer method (Yagiz Nizipli) [#&#8203;58055](https://redirect.github.com/nodejs/node/pull/58055)
-   \[[`065e8cd670`](https://redirect.github.com/nodejs/node/commit/065e8cd670)] - **src**: use macros to reduce code duplication is cares_wrap (James M Snell) [#&#8203;57937](https://redirect.github.com/nodejs/node/pull/57937)
-   \[[`39af5d678f`](https://redirect.github.com/nodejs/node/commit/39af5d678f)] - **src**: improve error handling in cares_wrap (James M Snell) [#&#8203;57937](https://redirect.github.com/nodejs/node/pull/57937)
-   \[[`ca020fdc4e`](https://redirect.github.com/nodejs/node/commit/ca020fdc4e)] - **src**: fix -Wunreachable-code-return in node_sea (Shelley Vohr) [#&#8203;57664](https://redirect.github.com/nodejs/node/pull/57664)
-   \[[`32b6e7094a`](https://redirect.github.com/nodejs/node/commit/32b6e7094a)] - **src**: change DCHECK to CHECK (Wuli Zuo) [#&#8203;57948](https://redirect.github.com/nodejs/node/pull/57948)
-   \[[`e1d3a9e192`](https://redirect.github.com/nodejs/node/commit/e1d3a9e192)] - **(SEMVER-MINOR)** **src**: add ExecutionAsyncId getter for any Context (Attila Szegedi) [#&#8203;57820](https://redirect.github.com/nodejs/node/pull/57820)
-   \[[`96243a723a`](https://redirect.github.com/nodejs/node/commit/96243a723a)] - **src**: update std::vector\<v8::Local\<T>> to use v8::LocalVector\<T> (Aditi) [#&#8203;57646](https://redirect.github.com/nodejs/node/pull/57646)
-   \[[`0f2cbc17c7`](https://redirect.github.com/nodejs/node/commit/0f2cbc17c7)] - **src**: update std::vector\<v8::Local\<T>> to use v8::LocalVector\<T> (Aditi) [#&#8203;57642](https://redirect.github.com/nodejs/node/pull/57642)
-   \[[`d1c6f861d5`](https://redirect.github.com/nodejs/node/commit/d1c6f861d5)] - **src**: update std::vector\<v8::Local\<T>> to use v8::LocalVector\<T> (Aditi) [#&#8203;57578](https://redirect.github.com/nodejs/node/pull/57578)
-   \[[`ab0d3a38db`](https://redirect.github.com/nodejs/node/commit/ab0d3a38db)] - **src**: improve error message for invalid child stdio type in spawn_sync (Dario Piotrowicz) [#&#8203;57589](https://redirect.github.com/nodejs/node/pull/57589)
-   \[[`24b182e7b3`](https://redirect.github.com/nodejs/node/commit/24b182e7b3)] - **src**: implement util.types fast API calls (Ruben Bridgewater) [#&#8203;57819](https://redirect.github.com/nodejs/node/pull/57819)
-   \[[`dda6423be9`](https://redirect.github.com/nodejs/node/commit/dda6423be9)] - **src**: enter and lock isolate properly in json parser (Joyee Cheung) [#&#8203;57823](https://redirect.github.com/nodejs/node/pull/57823)
-   \[[`4754c693f8`](https://redirect.github.com/nodejs/node/commit/4754c693f8)] - **src**: improve error handling in `node_env_var.cc` (Antoine du Hamel) [#&#8203;57767](https://redirect.github.com/nodejs/node/pull/57767)
-   \[[`db483bbe63`](https://redirect.github.com/nodejs/node/commit/db483bbe63)] - **src**: improve error handling in node_http2 (James M Snell) [#&#8203;57764](https://redirect.github.com/nodejs/node/pull/57764)
-   \[[`b0277700d6`](https://redirect.github.com/nodejs/node/commit/b0277700d6)] - **src**: improve error handling in crypto_x509 (James M Snell) [#&#8203;57757](https://redirect.github.com/nodejs/node/pull/57757)
-   \[[`353587f984`](https://redirect.github.com/nodejs/node/commit/353587f984)] - **src**: improve error handling in callback.cc (James M Snell) [#&#8203;57758](https://redirect.github.com/nodejs/node/pull/57758)
-   \[[`bec053ab20`](https://redirect.github.com/nodejs/node/commit/bec053ab20)] - **src**: remove unused variable in crypto_x509.cc (Michaël Zasso) [#&#8203;57754](https://redirect.github.com/nodejs/node/pull/57754)
-   \[[`38a329a857`](https://redirect.github.com/nodejs/node/commit/38a329a857)] - **src**: fix kill signal 0 on Windows (Stefan Stojanovic) [#&#8203;57695](https://redirect.github.com/nodejs/node/pull/57695)
-   \[[`70bb387f82`](https://redirect.github.com/nodejs/node/commit/70bb387f82)] - **src**: fix inefficient usage of v8\_inspector::StringView (Simon Zünd) [#&#8203;52372](https://redirect.github.com/nodejs/node/pull/52372)
-   \[[`be038f0273`](https://redirect.github.com/nodejs/node/commit/be038f0273)] - **src,permission**: make ERR_ACCESS_DENIED more descriptive (Rafael Gonzaga) [#&#8203;57585](https://redirect.github.com/nodejs/node/pull/57585)
-   \[[`0ec912f452`](https://redirect.github.com/nodejs/node/commit/0ec912f452)] - **(SEMVER-MINOR)** **stream**: preserve AsyncLocalStorage context in finished() (Gürgün Dayıoğlu) [#&#8203;57865](https://redirect.github.com/nodejs/node/pull/57865)
-   \[[`6ffb66f82f`](https://redirect.github.com/nodejs/node/commit/6ffb66f82f)] - **test**: fix permission fixtures lint (Rafael Gonzaga) [#&#8203;55819](https://redirect.github.com/nodejs/node/pull/55819)
-   \[[`fd37891186`](https://redirect.github.com/nodejs/node/commit/fd37891186)] - **test**: add repl preview timeout test (Chengzhong Wu) [#&#8203;55484](https://redirect.github.com/nodejs/node/pull/55484)
-   \[[`1be5a8c1b4`](https://redirect.github.com/nodejs/node/commit/1be5a8c1b4)] - **test**: skip `test-config-json-schema` with quic (Richard Lau) [#&#8203;57225](https://redirect.github.com/nodejs/node/pull/57225)
-   \[[`e90583b657`](https://redirect.github.com/nodejs/node/commit/e90583b657)] - **test**: add more coverage to `node_config_file` (Marco Ippolito) [#&#8203;57170](https://redirect.github.com/nodejs/node/pull/57170)
-   \[[`df2a36bfcc`](https://redirect.github.com/nodejs/node/commit/df2a36bfcc)] - **test**: remove deadlock workaround (Joyee Cheung) [#&#8203;58047](https://redirect.github.com/nodejs/node/pull/58047)
-   \[[`103034b051`](https://redirect.github.com/nodejs/node/commit/103034b051)] - **test**: prevent extraneous HOSTNAME substitution in test-runner-output (René) [#&#8203;58076](https://redirect.github.com/nodejs/node/pull/58076)
-   \[[`3e58f81a38`](https://redirect.github.com/nodejs/node/commit/3e58f81a38)] - **test**: update WPT for WebCryptoAPI to [`b48efd6`](https://redirect.github.com/nodejs/node/commit/b48efd681e) (Node.js GitHub Bot) [#&#8203;58044](https://redirect.github.com/nodejs/node/pull/58044)
-   \[[`2f4e4164a3`](https://redirect.github.com/nodejs/node/commit/2f4e4164a3)] - **test**: add missing newlines to repl .exit writes (Dario Piotrowicz) [#&#8203;58041](https://redirect.github.com/nodejs/node/pull/58041)
-   \[[`b40769292e`](https://redirect.github.com/nodejs/node/commit/b40769292e)] - **test**: add fast api tests for getLibuvNow() (Yagiz Nizipli) [#&#8203;58022](https://redirect.github.com/nodejs/node/pull/58022)
-   \[[`cbd5768d47`](https://redirect.github.com/nodejs/node/commit/cbd5768d47)] - **test**: add ALS test using http agent keep alive (Gerhard Stöbich) [#&#8203;58017](https://redirect.github.com/nodejs/node/pull/58017)
-   \[[`9e31ab502a`](https://redirect.github.com/nodejs/node/commit/9e31ab502a)] - **test**: deflake test-http2-options-max-headers-block-length (Luigi Pinca) [#&#8203;57959](https://redirect.github.com/nodejs/node/pull/57959)
-   \[[`13f8f9cc12`](https://redirect.github.com/nodejs/node/commit/13f8f9cc12)] - **test**: rename to getCallSites (Wuli Zuo) [#&#8203;57948](https://redirect.github.com/nodejs/node/pull/57948)
-   \[[`92dce6ed6b`](https://redirect.github.com/nodejs/node/commit/92dce6ed6b)] - **test**: force GC in test-file-write-stream4 (Luigi Pinca) [#&#8203;57930](https://redirect.github.com/nodejs/node/pull/57930)
-   \[[`aa755d3acf`](https://redirect.github.com/nodejs/node/commit/aa755d3acf)] - **test**: enable skipped colorize test (Shima Ryuhei) [#&#8203;57887](https://redirect.github.com/nodejs/node/pull/57887)
-   \[[`331f44c78c`](https://redirect.github.com/nodejs/node/commit/331f44c78c)] - **test**: update WPT for WebCryptoAPI to [`164426a`](https://redirect.github.com/nodejs/node/commit/164426ace2) (Node.js GitHub Bot) [#&#8203;57854](https://redirect.github.com/nodejs/node/pull/57854)
-   \[[`4aaa8438b4`](https://redirect.github.com/nodejs/node/commit/4aaa8438b4)] - **test**: add test for frame count being 0.5 (Jake Yuesong Li) [#&#8203;57732](https://redirect.github.com/nodejs/node/pull/57732)
-   \[[`fb51d3a0c5`](https://redirect.github.com/nodejs/node/commit/fb51d3a0c5)] - **test**: fix the decimal fractions explaination (Jake Yuesong Li) [#&#8203;57732](https://redirect.github.com/nodejs/node/pull/57732)
-   \[[`c6a45a9087`](https://redirect.github.com/nodejs/node/commit/c6a45a9087)] - ***Revert*** "**test**: add tests for REPL custom evals" (Tobias Nießen) [#&#8203;57793](https://redirect.github.com/nodejs/node/pull/57793)
-   \[[`f3a4d03963`](https://redirect.github.com/nodejs/node/commit/f3a4d03963)] - **test**: add tests for REPL custom evals (Dario Piotrowicz) [#&#8203;57691](https://redirect.github.com/nodejs/node/pull/57691)
-   \[[`a3be0df337`](https://redirect.github.com/nodejs/node/commit/a3be0df337)] - **test**: update expected error message for macOS (Antoine du Hamel) [#&#8203;57742](https://redirect.github.com/nodejs/node/pull/57742)
-   \[[`a7e73a0a74`](https://redirect.github.com/nodejs/node/commit/a7e73a0a74)] - **test**: fix dangling promise in test_runner no isolation test setup (Jacob Smith) [#&#8203;57595](https://redirect.github.com/nodejs/node/pull/57595)
-   \[[`edb7dd1ec7`](https://redirect.github.com/nodejs/node/commit/edb7dd1ec7)] - **test_runner**: match minimum file column to 'all files' (Shima Ryuhei) [#&#8203;57848](https://redirect.github.com/nodejs/node/pull/57848)
-   \[[`c56f495e83`](https://redirect.github.com/nodejs/node/commit/c56f495e83)] - **tools**: extract target abseil to abseil.gyp (Chengzhong Wu) [#&#8203;57289](https://redirect.github.com/nodejs/node/pull/57289)
-   \[[`1b37161a27`](https://redirect.github.com/nodejs/node/commit/1b37161a27)] - **tools**: ignore V8 tests in CodeQL scans (Rich Trott) [#&#8203;58081](https://redirect.github.com/nodejs/node/pull/58081)
-   \[[`23386308dd`](https://redirect.github.com/nodejs/node/commit/23386308dd)] - **tools**: enable CodeQL config file (Rich Trott) [#&#8203;58036](https://redirect.github.com/nodejs/node/pull/58036)
-   \[[`9c21abc169`](https://redirect.github.com/nodejs/node/commit/9c21abc169)] - **tools**: ignore test directory in CodeQL scans (Rich Trott) [#&#8203;57978](https://redirect.github.com/nodejs/node/pull/57978)
-   \[[`f210a1530d`](https://redirect.github.com/nodejs/node/commit/f210a1530d)] - **tools**: add semver-major release support to release-lint (Antoine du Hamel) [#&#8203;57892](https://redirect.github.com/nodejs/node/pull/57892)
-   \[[`234c417e98`](https://redirect.github.com/nodejs/node/commit/234c417e98)] - **tools**: add codeql nightly (Rafael Gonzaga) [#&#8203;57788](https://redirect.github.com/nodejs/node/pull/57788)
-   \[[`938f1532da`](https://redirect.github.com/nodejs/node/commit/938f1532da)] - **tools**: edit create-release-proposal workflow to handle pr body length (Elves Vieira) [#&#8203;57841](https://redirect.github.com/nodejs/node/pull/57841)
-   \[[`b362339f72`](https://redirect.github.com/nodejs/node/commit/b362339f72)] - **tools**: add zstd updater to workflow (KASEYA\yahor.siarheyenka) [#&#8203;57831](https://redirect.github.com/nodejs/node/pull/57831)
-   \[[`61180db9c0`](https://redirect.github.com/nodejs/node/commit/61180db9c0)] - **tools**: remove unused `osx-pkg-postinstall.sh` (Antoine du Hamel) [#&#8203;57667](https://redirect.github.com/nodejs/node/pull/57667)
-   \[[`3ae04c94eb`](https://redirect.github.com/nodejs/node/commit/3ae04c94eb)] - **tools**: do not use temp files when merging PRs (Antoine du Hamel) [#&#8203;57790](https://redirect.github.com/nodejs/node/pull/57790)
-   \[[`d623c2c2b4`](https://redirect.github.com/nodejs/node/commit/d623c2c2b4)] - **tools**: update gyp-next to 0.20.0 (Node.js GitHub Bot) [#&#8203;57683](https://redirect.github.com/nodejs/node/pull/57683)
-   \[[`43ea4c532a`](https://redirect.github.com/nodejs/node/commit/43ea4c532a)] - **tools**: bump the eslint group in /tools/eslint with 4 updates (dependabot\[bot]) [#&#8203;57721](https://redirect.github.com/nodejs/node/pull/57721)
-   \[[`5703147470`](https://redirect.github.com/nodejs/node/commit/5703147470)] - **tools**: enable linter in `test/fixtures/source-map/output` (Antoine du Hamel) [#&#8203;57700](https://redirect.github.com/nodejs/node/pull/57700)
-   \[[`80d58c372d`](https://redirect.github.com/nodejs/node/commit/80d58c372d)] - **tools**: enable linter in `test/fixtures/errors` (Antoine du Hamel) [#&#8203;57701](https://redirect.github.com/nodejs/node/pull/57701)
-   \[[`ef5275b7be`](https://redirect.github.com/nodejs/node/commit/ef5275b7be)] - **tools**: enable linter in `test/fixtures/test-runner/output` (Antoine du Hamel) [#&#8203;57698](https://redirect.github.com/nodejs/node/pull/57698)
-   \[[`631733e41f`](https://redirect.github.com/nodejs/node/commit/631733e41f)] - **tools**: enable linter in `test/fixtures/eval` (Antoine du Hamel) [#&#8203;57699](https://redirect.github.com/nodejs/node/pull/57699)
-   \[[`6d0128695f`](https://redirect.github.com/nodejs/node/commit/6d0128695f)] - **tools**: enable linter on some fixtures file (Antoine du Hamel) [#&#8203;57674](https://redirect.github.com/nodejs/node/pull/57674)
-   \[[`f4d7cbae89`](https://redirect.github.com/nodejs/node/commit/f4d7cbae89)] - **tools**: update ESLint to 9.23 (Antoine du Hamel) [#&#8203;57673](https://redirect.github.com/nodejs/node/pull/57673)
-   \[[`5a39a24cd1`](https://redirect.github.com/nodejs/node/commit/5a39a24cd1)] - **typings**: fix `ModulesBinding` types (Antoine du Hamel) [#&#8203;55549](https://redirect.github.com/nodejs/node/pull/55549)
-   \[[`2df7ce9ebd`](https://redirect.github.com/nodejs/node/commit/2df7ce9ebd)] - **util**: fix parseEnv handling of invalid lines (Augustin Mauroy) [#&#8203;57798](https://redirect.github.com/nodejs/node/pull/57798)
-   \[[`416052a9f2`](https://redirect.github.com/nodejs/node/commit/416052a9f2)] - **util**: fix formatting of objects with built-in Symbol.toPrimitive (Shima Ryuhei) [#&#8203;57832](https://redirect.github.com/nodejs/node/pull/57832)
-   \[[`43490c8797`](https://redirect.github.com/nodejs/node/commit/43490c8797)] - **(SEMVER-MINOR)** **util**: add `types.isFloat16Array()` (Livia Medeiros) [#&#8203;57879](https://redirect.github.com/nodejs/node/pull/57879)
-   \[[`30060e13d3`](https://redirect.github.com/nodejs/node/commit/30060e13d3)] - **util**: preserve `length` of deprecated functions (Livia Medeiros) [#&#8203;57806](https://redirect.github.com/nodejs/node/pull/57806)
-   \[[`9837e08a84`](https://redirect.github.com/nodejs/node/commit/9837e08a84)] - **util**: fix parseEnv incorrectly splitting multiple ‘=‘ in value (HEESEUNG) [#&#8203;57421](https://redirect.github.com/nodejs/node/pull/57421)
-   \[[`af41dd3c07`](https://redirect.github.com/nodejs/node/commit/af41dd3c07)] - **watch**: clarify completion/failure watch mode messages (Dario Piotrowicz) [#&#8203;57926](https://redirect.github.com/nodejs/node/pull/57926)
-   \[[`7229a29b47`](https://redirect.github.com/nodejs/node/commit/7229a29b47)] - **watch**: check parent and child path properly (Jason Zhang) [#&#8203;57425](https://redirect.github.com/nodejs/node/pull/57425)
-   \[[`1b5a7c6dc8`](https://redirect.github.com/nodejs/node/commit/1b5a7c6dc8)] - **win**: fix SIGQUIT on ClangCL (Stefan Stojanovic) [#&#8203;57659](https://redirect.github.com/nodejs/node/pull/57659)
-   \[[`e935c3c6f2`](https://redirect.github.com/nodejs/node/commit/e935c3c6f2)] - **worker**: add ESM version examples to worker docs (fisker Cheung) [#&#8203;57645](https://redirect.github.com/nodejs/node/pull/57645)
-   \[[`dda6ca9172`](https://redirect.github.com/nodejs/node/commit/dda6ca9172)] - **(SEMVER-MINOR)** **worker**: add worker.getHeapStatistics() (Matteo Collina) [#&#8203;57888](https://redirect.github.com/nodejs/node/pull/57888)
-   \[[`f2159f2a44`](https://redirect.github.com/nodejs/node/commit/f2159f2a44)] - **zlib**: fix pointer alignment (jhofstee) [#&#8203;57727](https://redirect.github.com/nodejs/node/pull/57727)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-22 08:13:09 +00:00
renovate
5e8caa261a chore: bump up Lakr233/ChidoriMenu version to v3 (#12372)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [Lakr233/ChidoriMenu](https://redirect.github.com/Lakr233/ChidoriMenu) | major | `from: "2.4.3"` -> `from: "3.0.0"` |

---

### Release Notes

<details>
<summary>Lakr233/ChidoriMenu (Lakr233/ChidoriMenu)</summary>

### [`v3.0.0`](https://redirect.github.com/Lakr233/ChidoriMenu/compare/2.4.3...3.0.0)

[Compare Source](https://redirect.github.com/Lakr233/ChidoriMenu/compare/2.4.3...3.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-22 07:59:06 +00:00
pengx17
ac21f1f74c fix(electron): packaging on windows (#12443)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Added Windows support to the desktop bundle check in CI workflows, ensuring Windows builds are tested and packaged alongside existing platforms.
  - Refined the cleanup process during Windows packaging to more precisely remove specific nested dependencies, improving build reliability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 07:45:19 +00:00
JimmFly
940ab69374 fix(admin): user count is out of sync and search results are not cached in account management (#11980)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved user management table with dynamic row count updates and enhanced synchronization of memoized user lists.
- **Bug Fixes**
  - User count and displayed data now update immediately after user creation, deletion, or import, ensuring accurate and consistent information.
- **Chores**
  - Enhanced internal state management for better responsiveness and reliability in the accounts section.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 07:29:09 +00:00
JimmFly
2999497f16 chore(admin): adjust import user style (#12295)
close AF-2619 AF-2618

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

## Summary by CodeRabbit

- **Style**
  - Updated various components to use dynamic theme-based colors and consistent border radius for a more unified look and feel.
  - Adjusted icon size and text styling in the file upload area for improved visual clarity.
  - Applied consistent secondary text color to informational paragraphs.

- **User Interface**
  - Changed the table header label from "Username" to "Name" and removed uppercase styling from all table headers.
  - Updated file upload instructions for clearer guidance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 07:13:17 +00:00
renovate
52a7698014 chore: bump up rustc version to v1.87.0 (#12314)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rustc](https://redirect.github.com/rust-lang/rust) | minor | `1.86.0` -> `1.87.0` |

---

### Release Notes

<details>
<summary>rust-lang/rust (rustc)</summary>

### [`v1.87.0`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1870-2025-05-15)

[Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.86.0...1.87.0)

\==========================

<a id="1.87.0-Language"></a>

## Language

-   [Stabilize `asm_goto` feature](https://redirect.github.com/rust-lang/rust/pull/133870)
-   [Allow parsing open beginning ranges (`..EXPR`) after unary operators `!`, `-`, and `*`](https://redirect.github.com/rust-lang/rust/pull/134900).
-   [Don't require method impls for methods with `Self: Sized` bounds in `impl`s for unsized types](https://redirect.github.com/rust-lang/rust/pull/135480)
-   [Stabilize `feature(precise_capturing_in_traits)` allowing `use<...>` bounds on return position `impl Trait` in `trait`s](https://redirect.github.com/rust-lang/rust/pull/138128)

<a id="1.87.0-Compiler"></a>

## Compiler

-   [x86: make SSE2 required for i686 targets and use it to pass SIMD types](https://redirect.github.com/rust-lang/rust/pull/135408)

<a id="1.87.0-Platform-Support"></a>

## Platform Support

-   [Remove `i586-pc-windows-msvc` target](https://redirect.github.com/rust-lang/rust/pull/137957)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

<a id="1.87.0-Libraries"></a>

## Libraries

-   [Stabilize the anonymous pipe API](https://redirect.github.com/rust-lang/rust/issues/127154)
-   [Add support for unbounded left/right shift operations](https://redirect.github.com/rust-lang/rust/issues/129375)
-   [Print pointer metadata in `Debug` impl of raw pointers](https://redirect.github.com/rust-lang/rust/pull/135080)
-   [`Vec::with_capacity` guarantees it allocates with the amount requested, even if `Vec::capacity` returns a different number.](https://redirect.github.com/rust-lang/rust/pull/135933)
-   Most `std::arch` intrinsics which don't take pointer arguments can now be called from safe code if the caller has the appropriate target features already enabled ([https://github.com/rust-lang/stdarch/pull/1714](https://redirect.github.com/rust-lang/stdarch/pull/1714), [https://github.com/rust-lang/stdarch/pull/1716](https://redirect.github.com/rust-lang/stdarch/pull/1716), [https://github.com/rust-lang/stdarch/pull/1717](https://redirect.github.com/rust-lang/stdarch/pull/1717))
-   [Undeprecate `env::home_dir`](https://redirect.github.com/rust-lang/rust/pull/137327)
-   [Denote `ControlFlow` as `#[must_use]`](https://redirect.github.com/rust-lang/rust/pull/137449)
-   [Macros such as `assert_eq!` and `vec!` now support `const {...}` expressions](https://redirect.github.com/rust-lang/rust/pull/138162)

<a id="1.87.0-Stabilized-APIs"></a>

## Stabilized APIs

-   [`Vec::extract_if`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.extract_if)
-   [`vec::ExtractIf`](https://doc.rust-lang.org/stable/std/vec/struct.ExtractIf.html)
-   [`LinkedList::extract_if`](https://doc.rust-lang.org/stable/std/collections/struct.LinkedList.html#method.extract_if)
-   [`linked_list::ExtractIf`](https://doc.rust-lang.org/stable/std/collections/linked_list/struct.ExtractIf.html)
-   [`<[T]>::split_off`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off)
-   [`<[T]>::split_off_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_mut)
-   [`<[T]>::split_off_first`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first)
-   [`<[T]>::split_off_first_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first_mut)
-   [`<[T]>::split_off_last`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last)
-   [`<[T]>::split_off_last_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last_mut)
-   [`String::extend_from_within`](https://doc.rust-lang.org/stable/alloc/string/struct.String.html#method.extend_from_within)
-   [`os_str::Display`](https://doc.rust-lang.org/stable/std/ffi/os_str/struct.Display.html)
-   [`OsString::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.display)
-   [`OsStr::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsStr.html#method.display)
-   [`io::pipe`](https://doc.rust-lang.org/stable/std/io/fn.pipe.html)
-   [`io::PipeReader`](https://doc.rust-lang.org/stable/std/io/struct.PipeReader.html)
-   [`io::PipeWriter`](https://doc.rust-lang.org/stable/std/io/struct.PipeWriter.html)
-   [`impl From<PipeReader> for OwnedHandle`](https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeReader%3E-for-OwnedHandle)
-   [`impl From<PipeWriter> for OwnedHandle`](https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html#impl-From%3CPipeWriter%3E-for-OwnedHandle)
-   [`impl From<PipeReader> for Stdio`](https://doc.rust-lang.org/stable/std/process/struct.Stdio.html)
-   [`impl From<PipeWriter> for Stdio`](https://doc.rust-lang.org/stable/std/process/struct.Stdio.html#impl-From%3CPipeWriter%3E-for-Stdio)
-   [`impl From<PipeReader> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeReader%3E-for-OwnedFd)
-   [`impl From<PipeWriter> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeWriter%3E-for-OwnedFd)
-   [`Box<MaybeUninit<T>>::write`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.write)
-   [`impl TryFrom<Vec<u8>> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-TryFrom%3CVec%3Cu8%3E%3E-for-String)
-   [`<*const T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned)
-   [`<*const T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned)
-   [`<*mut T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned-1)
-   [`<*mut T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned-1)
-   [`NonNull::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.offset_from_unsigned)
-   [`NonNull::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.byte_offset_from_unsigned)
-   [`<uN>::cast_signed`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.cast_signed)
-   [`NonZero::<uN>::cast_signed`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_signed-5).
-   [`<iN>::cast_unsigned`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.cast_unsigned).
-   [`NonZero::<iN>::cast_unsigned`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.cast_unsigned-5).
-   [`<uN>::is_multiple_of`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.is_multiple_of)
-   [`<uN>::unbounded_shl`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shl)
-   [`<uN>::unbounded_shr`](https://doc.rust-lang.org/stable/std/primitive.usize.html#method.unbounded_shr)
-   [`<iN>::unbounded_shl`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shl)
-   [`<iN>::unbounded_shr`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.unbounded_shr)
-   [`<iN>::midpoint`](https://doc.rust-lang.org/stable/std/primitive.isize.html#method.midpoint)
-   [`<str>::from_utf8`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8)
-   [`<str>::from_utf8_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8\_mut)
-   [`<str>::from_utf8_unchecked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8\_unchecked)
-   [`<str>::from_utf8_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.from_utf8\_unchecked_mut)

These previously stable APIs are now stable in const contexts:

-   [`core::str::from_utf8_mut`](https://doc.rust-lang.org/stable/std/str/fn.from_utf8\_mut.html)
-   [`<[T]>::copy_from_slice`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.copy_from_slice)
-   [`SocketAddr::set_ip`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_ip)
-   [`SocketAddr::set_port`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.set_port),
-   [`SocketAddrV4::set_ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_ip)
-   [`SocketAddrV4::set_port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.set_port),
-   [`SocketAddrV6::set_ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_ip)
-   [`SocketAddrV6::set_port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_port)
-   [`SocketAddrV6::set_flowinfo`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_flowinfo)
-   [`SocketAddrV6::set_scope_id`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.set_scope_id)
-   [`char::is_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_digit)
-   [`char::is_whitespace`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_whitespace)
-   [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened)
-   [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened_mut)
-   [`String::into_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.into_bytes)
-   [`String::as_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_str)
-   [`String::capacity`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.capacity)
-   [`String::as_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_bytes)
-   [`String::len`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.len)
-   [`String::is_empty`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.is_empty)
-   [`String::as_mut_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_str)
-   [`String::as_mut_vec`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_vec)
-   [`Vec::as_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_ptr)
-   [`Vec::as_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_slice)
-   [`Vec::capacity`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.capacity)
-   [`Vec::len`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.len)
-   [`Vec::is_empty`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.is_empty)
-   [`Vec::as_mut_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_slice)
-   [`Vec::as_mut_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_mut_ptr)

<a id="1.87.0-Cargo"></a>

## Cargo

-   [Add terminal integration via ANSI OSC 9;4 sequences](https://redirect.github.com/rust-lang/cargo/pull/14615/)
-   [chore: bump openssl to v3](https://redirect.github.com/rust-lang/cargo/pull/15232/)
-   [feat(package): add --exclude-lockfile flag](https://redirect.github.com/rust-lang/cargo/pull/15234/)

<a id="1.87.0-Compatibility-Notes"></a>

## Compatibility Notes

-   [Rust now raises an error for macro invocations inside the `#![crate_name]` attribute](https://redirect.github.com/rust-lang/rust/pull/127581)
-   [Unstable fields are now always considered to be inhabited](https://redirect.github.com/rust-lang/rust/pull/133889)
-   [Macro arguments of unary operators followed by open beginning ranges may now be matched differently](https://redirect.github.com/rust-lang/rust/pull/134900)
-   [Make `Debug` impl of raw pointers print metadata if present](https://redirect.github.com/rust-lang/rust/pull/135080)
-   [Warn against function pointers using unsupported ABI strings in dependencies](https://redirect.github.com/rust-lang/rust/pull/135767)
-   [Associated types on `dyn` types are no longer deduplicated](https://redirect.github.com/rust-lang/rust/pull/136458)
-   [Forbid attributes on `..` inside of struct patterns (`let Struct { #[attribute] .. }) =`](https://redirect.github.com/rust-lang/rust/pull/136490)
-   [Make `ptr_cast_add_auto_to_object` lint into hard error](https://redirect.github.com/rust-lang/rust/pull/136764)
-   Many `std::arch` intrinsics are now safe to call in some contexts, there may now be new `unused_unsafe` warnings in existing codebases.
-   [Limit `width` and `precision` formatting options to 16 bits on all targets](https://redirect.github.com/rust-lang/rust/pull/136932)
-   [Turn order dependent trait objects future incompat warning into a hard error](https://redirect.github.com/rust-lang/rust/pull/136968)
-   [Denote `ControlFlow` as `#[must_use]`](https://redirect.github.com/rust-lang/rust/pull/137449)
-   [Windows: The standard library no longer links `advapi32`, except on win7.](https://redirect.github.com/rust-lang/rust/pull/138233) Code such as C libraries that were relying on this assumption may need to explicitly link advapi32.
-   [Proc macros can no longer observe expanded `cfg(true)` attributes.](https://redirect.github.com/rust-lang/rust/pull/138844)
-   [Start changing the internal representation of pasted tokens](https://redirect.github.com/rust-lang/rust/pull/124141). Certain invalid declarative macros that were previously accepted in obscure circumstances are now correctly rejected by the compiler. Use of a `tt` fragment specifier can often fix these macros.
-   [Don't allow flattened format_args in const.](https://redirect.github.com/rust-lang/rust/pull/139624)

<a id="1.87.0-Internal-Changes"></a>

## Internal Changes

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

-   [Update to LLVM 20](https://redirect.github.com/rust-lang/rust/pull/135763)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS4xOCIsInVwZGF0ZWRJblZlciI6IjQwLjExLjE4IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-22 06:57:35 +00:00
darkskygit
b388f92c96 feat(server): refactor provider interface (#11665)
fix AI-4
fix AI-18

better provider/model choose to allow fallback to similar models (e.g., self-hosted) when the provider is not fully configured
split functions of different output types
2025-05-22 06:28:20 +00:00
donteatfriedrice
a3b8aaff61 fix(editor): toggle switch style (#12436)
Closes: [BS-2852](https://linear.app/affine-design/issue/BS-2852/ui-bug:-toggle-的组件样式不一样了)

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

- **Style**
  - Updated toggle switch appearance with refined colors and spacing for a more polished look.

- **Bug Fixes**
  - Improved toggle switch functionality in settings menus to ensure correct state display and interaction.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 06:13:25 +00:00
fengmk2
c525ca24fd test(server): use mocker (#12435)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Tests**
  - Refactored test setup for the database-backed document reader to improve modularity and clarity.
  - Simplified database initialization and cleanup in tests.
  - Updated mocks and assertions to align with the new test structure.
  - Maintained existing test coverage and logic.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 04:25:20 +00:00
L-Sun
573c2faf76 fix(editor): can not undo and redo of color of edgeless blocks (#12414)
Close [BS-3507](https://linear.app/affine-design/issue/BS-3507/edgeless-text-颜色无法-undoredo)
Close [BS-3426](https://linear.app/affine-design/issue/BS-3426/frame-修改背景色后不能撤销)

This PR fixes the issue where the color change of edgeless blocks could not be undone/redone, including notes, edgeless-text, and frames. It also addresses the problem of a tiny shape being unexpectedly retained on the canvas. The key changes are:
- Removal of `transact` from the `pop` method of edgeless elements.
- Refactoring of `onPickColor` for all edgeless elements and blocks to better control the lifecycle of custom color property changes.
- Addition of the missing custom background color feature for notes.
- Addition of undo/redo color tests for notes, frames, and edgeless-text.

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

- **New Features**
  - Added undo and redo support for color changes in frames, notes, and text blocks, allowing users to revert or reapply background and text color modifications.

- **Bug Fixes**
  - Improved reliability of color picker interactions, ensuring consistent state management and transactional updates during color changes.

- **Tests**
  - Introduced new end-to-end tests to verify undo/redo functionality for color changes in frames, notes, and text blocks.

- **Refactor**
  - Streamlined color picker event handling for better maintainability and consistency across toolbars and style panels.
  - Updated style panel structure and event handling for improved interaction and state management.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 04:10:16 +00:00
L-Sun
9ac1da9fc1 fix(editor): should record edgeless connector mode (#12426)
Close [BS-3355](https://linear.app/affine-design/issue/BS-3355/白板快捷键c没有记住上次用的connector形状)

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

- **New Features**
  - Added the ability to cycle through connector modes (Curve, Orthogonal, Straight) using the 'c' keyboard shortcut when the connector tool is active.
- **Bug Fixes**
  - Improved the logic for remembering and restoring the last used connector mode when switching between tools.
- **Tests**
  - Introduced a new end-to-end test to verify correct cycling and restoration of connector modes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 03:54:31 +00:00
L-Sun
dd816f3284 fix(editor): prevent cursor jumping to title when pressing backspace on the begin of edgeless note (#12410)
Close [BS-3492](https://linear.app/affine-design/issue/BS-3492/白板上的note,在开头按退格键,光标会到page-block的title上)

### Before

https://github.com/user-attachments/assets/334504f2-30f3-4ce2-ba60-a2688a811b53

### After

https://github.com/user-attachments/assets/be26be6c-6cfc-4f69-82b7-1127e0d10a1a

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

- **Bug Fixes**
  - Improved behavior when deleting a note block to ensure the cursor focus does not incorrectly jump to the page title after pressing backspace.

- **Tests**
  - Added a new test to verify that focus remains within the note block after deletion, preventing unwanted cursor movement to the page title.
  - Introduced a utility to check if the document title is focused during tests.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 03:40:16 +00:00
L-Sun
ef717e617c fix(editor): incorrect position of code toolbar in safari and firefox (#12434)
Close [BS-3523](https://linear.app/affine-design/issue/BS-1974/code-block-浮标歪)
This PR fixed that the position of code toolbar is incorrect in Safari. Related PR: https://github.com/toeverything/AFFiNE/pull/10579

### Chromium

![CleanShot 2025-05-22 at 10.58.02.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/fcb7a3b6-9814-47be-82a7-91ebddf4c2cd.png)

### Safari

![CleanShot 2025-05-22 at 10.58.16.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/37d5d91a-dc11-4af2-88e0-c12e965b3818.png)

### Firefox

![CleanShot 2025-05-22 at 10.58.33.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/612bfb9b-2eb4-4ba2-b9cd-2736a459445c.png)

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

## Summary by CodeRabbit

- **Style**
  - Improved the appearance of code blocks by ensuring they are displayed as block-level elements.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 03:20:49 +00:00
LongYinan
58bdabe36a ci: remove continue-on-error on TestFlight job 2025-05-22 11:19:54 +08:00
yoyoyohamapi
45ed9038b6 feat(core): workspace attachment uploading & error (#12330)
### TL;DR

feat: optimize workspace attachment uploading & error display

![截屏2025-05-16 15.29.43.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/2408fe5e-e54d-44a8-882c-91e1b26bb660.png)

### What Changes
####
Support for Workspace Attachment Uploading & Error Handling
* Added support for three attachment states: uploading (local), upload failed (local error), and uploaded (persisted). The frontend UI now displays real-time upload progress and error messages.
* Attachments that fail to upload can be deleted directly without confirmation.
* Merged display of uploading and uploaded attachments for a smoother user experience.

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

- **New Features**
  - Attachments now show real-time upload status including uploading, error, and uploaded states.
  - Users can remove failed (error) attachments instantly without confirmation.
  - Attachment list merges uploading and uploaded files, displaying up to 10 items.
- **Bug Fixes**
  - Improved error handling and messaging for failed attachment uploads.
- **Style**
  - Enhanced visual styling for error attachments with distinct colors and backgrounds.
- **Tests**
  - Added tests simulating slow network uploads, upload failures, and direct removal of error attachments.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 02:35:03 +00:00
fundon
21ea65edc5 feat(core): add status to pdf viewer (#12349)
Closes: [BS-3439](https://linear.app/affine-design/issue/BS-3439/pdf-独立页面split-view-中的-status-组件)
Related to: [BS-3143](https://linear.app/affine-design/issue/BS-3143/更新-loading-和错误样式)

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

- **New Features**
  - Added a dedicated error handling and reload interface for PDF attachments, allowing users to retry loading PDFs when errors occur.

- **Refactor**
  - Improved PDF viewer interface with clearer loading and error states.
  - Enhanced attachment type detection for better performance and maintainability.
  - Streamlined attachment preview logic for more direct and efficient model retrieval.
  - Simplified internal PDF metadata handling and control flow for improved clarity.
  - Clarified conditional rendering logic in attachment viewer components.
  - Introduced explicit loading state management and refined rendering logic in attachment pages.

- **Style**
  - Updated and added styles for PDF viewer controls and error status display.

- **Tests**
  - Added end-to-end tests validating PDF preview error handling and attachment not-found scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 01:11:03 +00:00
fengmk2
346c0df800 chore(server): support disable indexer plugin (#12408)
close CLOUD-220

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

## Summary by CodeRabbit

- **New Features**
  - Introduced a new service to handle indexing-related events and scheduled tasks, improving the management of document and workspace indexing.
  - Added support for configuring the indexer feature via the AFFINE_INDEXER_ENABLED environment variable.

- **Bug Fixes**
  - Ensured that indexing and deletion jobs are only enqueued when the indexer feature is enabled.

- **Tests**
  - Added comprehensive tests for the new indexing event service, covering various configuration scenarios.
  - Removed obsolete test related to auto-indexing scheduling.

- **Chores**
  - Updated configuration descriptions and mappings to improve clarity and environment variable support.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 13:19:02 +00:00
Flrande
322bd4f76b feat(editor): use code block html preview in make it real (#12418)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - HTML code previews are now displayed as code blocks within notes when supported, offering improved readability and interaction.
- **Improvements**
  - Enhanced feature detection ensures HTML code block previews are only enabled in secure, compatible environments.
  - If the preview feature is unavailable, HTML content will continue to be embedded as before.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 12:02:49 +00:00
darkskygit
84667b3440 feat(server): workspace embedding status count with files (#12420)
fix AI-32
fix AI-132
2025-05-21 10:51:35 +00:00
darkskygit
7fd3ee957f fix(server): embedding chunks primary key (#12416)
fix AI-131

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

- **Refactor**
  - Updated database schema to consolidate unique constraints into composite primary keys for embedding-related data, improving consistency.
  - Changed the relation in the Snapshot model to allow multiple embeddings.
  - Improved filtering logic for documents and snapshots based on embedding existence.
  - Reformatted SQL queries and schema attributes for improved readability; no changes to functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 10:51:35 +00:00
darkskygit
c9b296c896 fix(server): process empty doc embedding (#12417)
fix CLOUD-219

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Ensured that documents without content now receive a placeholder embedding, improving consistency in document processing.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 09:37:22 +00:00
fengmk2
abfc994180 chore(server): support elasticsearch apiKey (#12405) 2025-05-21 08:35:51 +00:00
fengmk2
ff15779208 chore(server): add auto index batch size (#12391)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added a configurable batch size setting for automatic workspace indexing. Users can now adjust how many workspaces are indexed per batch, with a default value of 10 and support for values between 1 and 1000.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 08:35:51 +00:00
EYHN
5b46c66f52 fix(core): fix all docs filters internal state reset (#12412)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved filter behavior by resetting filter state when editing or switching collections, ensuring filters are cleared appropriately.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 08:17:51 +00:00
Flrande
2de15e2677 feat(editor): add feature flag for code block html preview (#12397)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced an experimental "Code block HTML preview" feature, allowing users to preview HTML within code blocks when enabled.
- **Settings**
  - Added a toggle in experimental features to enable or disable the code block HTML preview.
- **Localization**
  - Added English translations for the new code block HTML preview feature and its description in workspace settings.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 07:52:24 +00:00
donteatfriedrice
20e93543e2 fix(editor): subscribe docLinkClicked event for text renderer (#12406)
Closes: [BS-3520](https://linear.app/affine-design/issue/BS-3520/chat-panel-doc-citation-点击没有响应)

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

- **New Features**
  - Enhanced citation cards to support double-click actions for improved interaction.
  - Added the ability to open a preview view when clicking document links within rendered text content.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 07:34:28 +00:00
yoyoyohamapi
928892c5b4 refactor(core): ai input images display & max images count (#12395)
### TL;DR

* refactor: use horizontal scrolling to display images​
* refactor: change max images to 9
* test: add test cases for validating the maximum number of uploadable images

> CLOSE AI-6

![截屏2025-05-20 17.12.02.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/e234dd02-3bb8-4ea8-b69b-93c71b203a4e.png)

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

## Summary by CodeRabbit

- **New Features**
  - Added a notification to inform users when attempting to upload more images than allowed in the AI chat input.

- **Bug Fixes**
  - Prevented uploading more than 9 images at once in the AI chat input.

- **Style**
  - Improved image preview grid layout to display images in a single horizontally scrollable row.

- **Tests**
  - Added an end-to-end test to verify that an error message appears when too many images are uploaded.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 07:19:49 +00:00
akumatus
029a98c435 fix(core): chat block opens and throws an error (#12407)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved stability of the AI chat input to prevent errors when certain configuration options are missing.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 07:05:08 +00:00
yoyoyohamapi
8038ab97e6 feat(core): workspace embedding tracking (#12409)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added event tracking for workspace embedding settings, including toggling embedding, uploading attachments, and selecting ignored documents. This enhances visibility into user interactions within the embedding settings panel.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 06:50:10 +00:00
L-Sun
6029c4d09b fix(editor): update color of deleted banner of surface-ref (#12393)
Close [BS-3504](https://linear.app/affine-design/issue/BS-3504/linked-card-ui调整)
Close [BS-3377](https://linear.app/affine-design/issue/BS-3377/surface-ref在page-mode下的dark颜色不对,垃圾桶也不对)

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

- **New Features**
  - The "not found" placeholder now adapts its appearance to match light or dark themes for a more cohesive visual experience.

- **Style**
  - Updated placeholder icons to use distinct designs for light and dark themes, providing improved clarity and consistency.

- **Chores**
  - Theme information is now more accurately passed to placeholder components for proper rendering.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 06:18:39 +00:00
L-Sun
6430a9842f fix(editor): toc viewer no update after delete heading in edgeless mode (#12411)
Close [BS-3494](https://linear.app/affine-design/issue/BS-3494/在白板删除note的标题,切回page模式,toc没更新)

Other changes: `doc` -> `store`

### Before

https://github.com/user-attachments/assets/ddce20b9-eda2-414b-9452-d8d54a811cf1

### After

https://github.com/user-attachments/assets/7124b8a1-9ab4-4e09-b0ff-7ea2cc9613c2

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

- **Bug Fixes**
  - Improved synchronization of the outline viewer to ensure updates after editing headings in edgeless mode.
- **Tests**
  - Added an end-to-end test verifying that the outline viewer correctly reflects changes made in edgeless mode.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 06:03:48 +00:00
yoyoyohamapi
d70f09b498 feat(core): embedding progress (#12367)
### TL;DR

feat: show embedding progress in settings panel

![截屏2025-05-19 20.25.19.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/59d8f9ef-0876-4ed5-9c09-db12686adb47.png)

### What changed

* show embedding progress in settings panel
* polling embedding status based on RxJS

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

- **New Features**
  - Added real-time embedding progress tracking and display in embedding settings, including a visual progress bar and status messages.
  - Introduced localized text for embedding progress statuses.
  - Added an optional test ID attribute to the progress bar component for improved testing.
- **Style**
  - Added new styles for embedding progress UI elements.
- **Tests**
  - Added an end-to-end test to verify embedding progress is displayed correctly in the settings UI.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 05:07:13 +00:00
EYHN
8f352580a7 feat(core): support draft filter (#12400)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for draft mode and completion callbacks across filter components, enabling stepwise filter creation and editing.
  - Enhanced filter menus and editors with external control via refs and new callback props for open/close state management.
  - Introduced new filter option group component for multi-step filter interactions.
  - Expanded tag filter methods for more granular filtering options.
  - Enabled controlled open state and close event handling for desktop and mobile menus.
  - Added programmatic control and completion callbacks to member selector and tags inline editors.

- **Improvements**
  - Updated filter and tag editors with improved UI layouts and added "Done" buttons for easier completion.
  - Improved menu and editor accessibility by allowing programmatic open/close and completion event handling.
  - Refactored date filter components for modularity and consistent draft handling.
  - Separated draft filter state management in filter UI for clearer user interactions.

- **Bug Fixes**
  - Refined date filter logic for more accurate "after" and "before" comparisons.

- **Style**
  - Adjusted styles for draft filters and editor layouts to enhance visual clarity and user experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 04:49:44 +00:00
Flrande
41ec438df8 fix(editor): disable iframe border in code block preview (#12398)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Updated the HTML preview to remove the border around the preview iframe for a cleaner appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 04:21:45 +00:00
EYHN
4217bfe02d chore(infra): add url test to playwright (#11795)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Updated Playwright test configurations to use full URL strings instead of port numbers for web server identification.
  - Unified server startup approach in test environments by integrating web server configuration directly into Playwright, replacing custom setup scripts.
  - Removed obsolete development server setup files to streamline test initialization.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 04:07:46 +00:00
CatsJuice
1831d291f1 feat(core): duplicated calendar subscription notification (#12364) 2025-05-21 03:04:01 +00:00
CatsJuice
14cba1be17 feat(core): show name tooltip for calendar event icon (#12362) 2025-05-21 03:04:01 +00:00
donteatfriedrice
bfbbc2342e fix(editor): wrap inline elements in a p tag to avoid treated as paragraph block when importing html (#12389) 2025-05-21 02:45:17 +00:00
donteatfriedrice
1a070367f3 fix(editor): handle html content copied from google docs (#12383)
Closes: [BS-3508](https://linear.app/affine-design/issue/BS-3508/google-docs复制内容到affine时自动加粗问题)

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

- **New Features**
  - Improved detection of bold, italic, underline, and strike-through formatting in imported HTML, supporting both tags and inline CSS styles.
  - Enhanced handling of inline elements containing block-level children to ensure correct formatting and structure during HTML import.
  - Introduced a plugin that converts inline elements with block-level children into block elements, preserving original tag information.
- **Bug Fixes**
  - Resolved issues where block-level elements nested inside inline tags could cause incorrect formatting or structure.
- **Tests**
  - Added comprehensive test coverage for HTML formatting conversions and plugin behavior to ensure accuracy and reliability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 02:45:17 +00:00
yoyoyohamapi
ae0dbb9faf refactor(core): indexer & embedding -> embedding (#12387)
### TL;DR

refactor: rename settings, indexer embedding -> embedding

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

- **Refactor**
  - Unified naming in workspace settings from "Indexer & Embedding" to "Embedding" for improved clarity.
  - Updated sidebar labels, tab keys, and test IDs to reflect the new naming convention.
  - Streamlined the layout and organization of the embedding settings interface for a more consistent user experience.
  - Simplified the export and component structure for embedding settings.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 02:28:43 +00:00
CatsJuice
65a14f50c7 fix(mobile): correct initial height for sign in layout (#12380) 2025-05-21 01:39:17 +00:00
CatsJuice
3bc96ba975 feat(mobile): move selfhost sign-in from menu to list (#12379) 2025-05-21 01:39:16 +00:00
CatsJuice
9d234c3ef2 chore(mobile): enable ai button feature flag for canary only (#12377)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Updated Apollo iOS dependency to version 1.21.0 and removed the SQLite.swift dependency in the iOS app workspace.
- **New Features**
  - The "Enable Mobile AI Button" feature flag is now configurable only for mobile canary builds.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 01:39:16 +00:00
CatsJuice
0737cef9b2 fix(core): correct card view properties display (#12401)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Improved the layout of property display in the card view by consolidating all properties into a single container and streamlining the rendering structure.
  - Updated filtering to exclude properties of type "tags" from stack properties.
- **Style**
  - Simplified the visual structure for properties, removing unnecessary nested containers for a cleaner appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 14:50:45 +00:00
yoyoyohamapi
3f762cc87b feat(core): embedding status tooltip (#12382)
### TL;DR

feat: display embedding tip for ai chat

![截屏2025-05-20 10.35.11.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/c3a4fe47-1995-4ec0-bde0-ddbe19ce95a2.png)

> CLOSE BS-3051

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

- **New Features**
  - Introduced an embedding status tooltip in the AI chat interface, providing real-time feedback on embedding progress for your workspace.
  - Added support for embedding status tracking within the AI provider and client services.
- **Style**
  - Updated the AI chat footer layout for improved clarity and usability.
- **Tests**
  - Added an end-to-end test to ensure the embedding status tooltip displays correctly.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 11:08:33 +00:00
darkskygit
afbda482de fix(server): skip empty docs (#12396)
fix AI-129
fix CLOUD-129
2025-05-20 10:52:00 +00:00
EYHN
20665575d0 feat(core): add new doc button in new all docs header (#12390) 2025-05-20 16:10:20 +08:00
EYHN
59ef4b227b refactor(nbstore): improve doc state management (#12359)
Move the `waitForSynced` method from `frontend` to `nbstore worker` to make the wait more reliable

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

- **New Features**
  - Added explicit tracking of document updating state to indicate when data is being applied or saved.
  - Introduced new methods to wait for update and synchronization completion with abort support.

- **Improvements**
  - Applied throttling with leading and trailing emissions to state observables for smoother UI updates.
  - Refined synchronization waiting logic for clearer separation between update completion and sync completion.
  - Removed throttling in workspace selector component for more immediate state feedback.
  - Updated import and clipper services to use the new synchronization waiting methods.
  - Simplified asynchronous waiting logic in indexer synchronization methods.

- **Bug Fixes**
  - Enhanced accuracy and reliability of document update and sync status indicators.

- **Tests**
  - Increased wait timeout in avatar selection test to improve stability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 07:33:20 +00:00
EYHN
151f499154 fix(core): fix all docs group header (#12334)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Improved document grouping logic in the explorer view, allowing for more dynamic and responsive updates when changing grouping criteria.

- **Bug Fixes**
  - Prevented unnecessary synchronization operations in local workspace environments, ensuring sync only occurs for applicable workspace types.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 06:55:56 +00:00
darkskygit
6f9361caee feat(server): trigger workspace embedding (#12328)
fix AI-127

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

- **New Features**
  - Added automated event handling for workspace updates and document embedding, streamlining document embedding workflows.
  - Introduced detection and queuing of documents needing embedding, excluding ignored documents.
- **Improvements**
  - Enhanced performance of embedding-related searches by filtering results at the database level.
  - Increased concurrency for embedding job processing to improve throughput.
- **Bug Fixes**
  - Improved error handling and fallback for missing document titles during embedding.
  - Added safeguards to skip invalid embedding jobs based on document identifiers.
- **Tests**
  - Expanded test coverage for document embedding and ignored document filtering.
  - Updated end-to-end tests to use dynamic content for improved reliability.
  - Added synchronization waits in document creation utilities to improve test stability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 05:16:45 +00:00
EYHN
3c982d2b91 fix(nbstore): fix readonly mode indexer status (#12353)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added clear indication and handling of read-only mode for the indexer, including updated status reporting when the indexer is read-only.
- **Bug Fixes**
  - Improved state updates to accurately reflect zero activity and completion when in read-only mode.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 04:01:04 +00:00
renovate
cfb6d2a255 chore: bump up apple/swift-collections version to from: "1.2.0" (#12381)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [apple/swift-collections](https://redirect.github.com/apple/swift-collections) | minor | `from: "1.1.4"` -> `from: "1.2.0"` |

---

### Release Notes

<details>
<summary>apple/swift-collections (apple/swift-collections)</summary>

### [`v1.2.0`](https://redirect.github.com/apple/swift-collections/releases/tag/1.2.0): Swift Collections 1.2.0

[Compare Source](https://redirect.github.com/apple/swift-collections/compare/1.1.4...1.2.0)

This feature release includes the following improvements:

-   The package now compiles without warnings using Swift 6.0 and 6.1.
-   New functionality:
    -   `Heap.removeAll(where:)` ([#&#8203;454](https://redirect.github.com/apple/swift-collections/issues/454))
    -   `OrderedSet.appending(contentsOf:)` ([#&#8203;452](https://redirect.github.com/apple/swift-collections/issues/452))
-   Bug fixes and performance improvements:
    -   `Heap` operations now agree on the identity of the maximal element, even if it has duplicates ([#&#8203;439](https://redirect.github.com/apple/swift-collections/issues/439))
    -   `OrderedSet` now runs faster in unspecialized generic contexts ([#&#8203;433](https://redirect.github.com/apple/swift-collections/issues/433))
    -   Building on OpenBSD no longer requires `ManagedBuffer.capacity` ([#&#8203;456](https://redirect.github.com/apple/swift-collections/issues/456))

This version supports Swift toolchain versions 5.10, 6.0 and 6.1.

#### What's Changed

-   Set up release/1.2 branch by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/423](https://redirect.github.com/apple/swift-collections/pull/423)
-   Optimize unspecialized `OrderedSet.init` and `OrderedSet.firstIndex(of:)` by [@&#8203;dnadoba](https://redirect.github.com/dnadoba) in [https://github.com/apple/swift-collections/pull/433](https://redirect.github.com/apple/swift-collections/pull/433)
-   fix amd64 support by [@&#8203;michael-yuji](https://redirect.github.com/michael-yuji) in [https://github.com/apple/swift-collections/pull/447](https://redirect.github.com/apple/swift-collections/pull/447)
-   \[cmake] Install libraries in standard directories by [@&#8203;Steelskin](https://redirect.github.com/Steelskin) in [https://github.com/apple/swift-collections/pull/446](https://redirect.github.com/apple/swift-collections/pull/446)
-   \[1.2]\[OrderedDictionary] fix a typo by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/449](https://redirect.github.com/apple/swift-collections/pull/449)
-   \[release/1.2] \[CI] Add support for GitHub Actions by [@&#8203;shahmishal](https://redirect.github.com/shahmishal) in [https://github.com/apple/swift-collections/pull/453](https://redirect.github.com/apple/swift-collections/pull/453)
-   Reimplement `_specialize(_:for:)` for the 5.9 stdlib by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/472](https://redirect.github.com/apple/swift-collections/pull/472)
-   Add .editorconfig by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/471](https://redirect.github.com/apple/swift-collections/pull/471)
-   Cherry pick recent PRs destined for 1.2 by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/473](https://redirect.github.com/apple/swift-collections/pull/473)
-   Drop support for the Swift 5.9.\* toolchains by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/475](https://redirect.github.com/apple/swift-collections/pull/475)
-   \[Rope] Resolve deprecation warnings on `String.Index._description` by [@&#8203;lorentey](https://redirect.github.com/lorentey) in [https://github.com/apple/swift-collections/pull/474](https://redirect.github.com/apple/swift-collections/pull/474)

#### New Contributors

-   [@&#8203;dnadoba](https://redirect.github.com/dnadoba) made their first contribution in [https://github.com/apple/swift-collections/pull/433](https://redirect.github.com/apple/swift-collections/pull/433)
-   [@&#8203;michael-yuji](https://redirect.github.com/michael-yuji) made their first contribution in [https://github.com/apple/swift-collections/pull/447](https://redirect.github.com/apple/swift-collections/pull/447)
-   [@&#8203;Steelskin](https://redirect.github.com/Steelskin) made their first contribution in [https://github.com/apple/swift-collections/pull/446](https://redirect.github.com/apple/swift-collections/pull/446)

**Full Changelog**: https://github.com/apple/swift-collections/compare/1.1.4...1.2.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-20 03:45:19 +00:00
fengmk2
8e9d50bfe9 chore(server): add prefix to indexer jobId (#12369) 2025-05-20 03:09:23 +00:00
fengmk2
9ad76fe2f6 chore(server): support elasticsearch alias (#12363)
https://www.elastic.co/docs/manage-data/data-store/aliases
2025-05-20 03:09:22 +00:00
fengmk2
cce66f6107 fix(server): add stemmer filter (#12358)
CLOUD-214

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

## Summary by CodeRabbit

- **New Features**
  - Improved search functionality to support stemming, allowing searches for variations of words (e.g., "window", "windows", "design") to return relevant results.
- **Tests**
  - Added new tests to verify that search results correctly highlight and match stemmed word variations in document titles.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 03:09:22 +00:00
forehalo
42d527251a fix(server): avoid job fail if mail is not configured (#12306)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Improved email notification handling to prevent errors from interrupting other processes when sending emails is not possible.
- **Refactor**
  - Updated internal email sending logic across notifications and workspace features for more robust operation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 02:49:49 +00:00
CatsJuice
acce1fbd99 feat(core): allow editing calendar name (#12251)
close AF-2569

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

## Summary by CodeRabbit

- **New Features**
  - Added the ability to edit calendar subscription names directly within the interface using an inline editor.

- **Style**
  - Improved the appearance of calendar subscription names by updating layout and alignment for better readability.

- **Bug Fixes**
  - Ensured that custom calendar subscription names are displayed and updated correctly.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 02:31:26 +00:00
EYHN
6abd4bf427 feat(core): add default display preference (#12333) 2025-05-20 10:31:11 +08:00
renovate
ec7993c5e7 chore: bump up multer version to v2 (#12374)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [multer](https://redirect.github.com/expressjs/multer) | [`^1.4.5-lts.1` -> `^2.0.0`](https://renovatebot.com/diffs/npm/multer/1.4.5-lts.2/2.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/multer/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/multer/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/multer/1.4.5-lts.2/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/multer/1.4.5-lts.2/2.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>expressjs/multer (multer)</summary>

### [`v2.0.0`](https://redirect.github.com/expressjs/multer/releases/tag/v2.0.0)

[Compare Source](https://redirect.github.com/expressjs/multer/compare/v1.4.5-lts.2...v2.0.0)

#### Important

-   **Breaking change: The minimum supported Node version is now 10.16.0**
-   Fix [CVE-2025-47935](https://www.cve.org/CVERecord?id=CVE-2025-47935) ([GHSA-44fp-w29j-9vj5](https://redirect.github.com/expressjs/multer/security/advisories/GHSA-44fp-w29j-9vj5))
-   Fix [CVE-2025-47944](https://www.cve.org/CVERecord?id=CVE-2025-47944) ([GHSA-4pg4-qvpc-4q3h](https://redirect.github.com/expressjs/multer/security/advisories/GHSA-4pg4-qvpc-4q3h))

#### What's Changed

-   🐛 drain stream. fixes regression in node 18, remove old CI, set minimum node version, fix readme badges, add .npmrc
-   fix: handle two busboy error events
-   ♻️ fully drain stream
-   🥅 explicitly handle req error
-   🚨 lint:fix
-   ⬆️ bump mocha
-   docs: include release 2.0.0 details

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNi4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTYuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-20 02:07:39 +00:00
yoyoyohamapi
6805e66029 fix(core): ai user message word break failed (#12347)
![截屏2025-05-19 10.11.58.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyktQ6Qwc7H6TiRCFoYN/549544df-c1f1-49da-8884-f666e46a0419.png)

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

- **Style**
  - Updated chat content containers to use the full available width, improving display on different screen sizes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 01:51:50 +00:00
fundon
fd838d4e2d fix(editor): should add HTTP protocol into link automatically (#11934)
Closes: [BS-3291](https://linear.app/affine-design/issue/BS-3291/工具栏展开时报错,链接无法点击打开)

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

- **New Features**
  - URLs entered without a protocol (e.g., "github.com/...") are now automatically normalized to use "https://", ensuring links are secure and consistently formatted.

- **Bug Fixes**
  - Improved handling and validation of links to prevent issues with missing or invalid protocols in bookmarks and inline links.
  - Simplified URL validation logic by leveraging native URL parsing, removing complex regex and email-specific checks.
  - Streamlined toolbar link actions to operate only on valid normalized URLs.
  - Refined URL detection in markdown preprocessing to exclude lines containing spaces from being treated as URLs.

- **Tests**
  - Added tests to verify that links without a protocol are correctly normalized and displayed across different views.
  - Updated URL validation tests to better reflect valid and invalid URL formats, including IP addresses and domain variants.

- **Style**
  - Updated snapshots to reflect the use of "https://" in links.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 17:05:06 +00:00
fundon
4d6a3731a3 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 -->
2025-05-19 16:51:02 +00:00
fundon
cae7db07ee fix(editor): text color on toolbar when connector is selected (#12360)
Closes: [BS-3511](https://linear.app/affine-design/issue/BS-3511/当选中-connector-时,toolbar-上文字颜色选项颜色显示不正确)

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

## Summary by CodeRabbit

- **Tests**
  - Added end-to-end tests for the edgeless connector feature, verifying toolbar text color functionality and theme-based color changes.
- **Refactor**
  - Improved performance of text toolbar actions by optimizing internal data handling for font and color selection. No changes to visible behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 16:36:50 +00:00
L-Sun
f8587af001 fix(editor): incorrect height calculation of folded embed doc (#12348)
Fix [BS-3418](https://linear.app/affine-design/issue/BS-3418/折叠的embed-doc调整宽度时,会出现一个最小高度,不需要这个)

This PR keeps the content of embed-synced-doc rendered (but clipped) when it is collapsed, to ensure accuracy in height calculation of content.

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

- **Bug Fixes**
  - Improved the display logic for embedded synced document editors, ensuring the editor and overlay are always rendered regardless of the folded state.

- **Tests**
  - Updated test assertions to more accurately check whether embedded editor content is within the viewport, enhancing reliability of visibility checks.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 16:20:29 +00:00
doouding
eb185255a3 fix: selection rect should reflect viewport change (#12355)
Fixes [BS-3349](https://linear.app/affine-design/issue/BS-3349/)

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

- **New Features**
  - Improved edge scrolling during selection dragging for smoother and more responsive viewport navigation.
  - Dragging area and mouse position tracking now update reactively with viewport changes, ensuring more accurate selection and movement.

- **Refactor**
  - Unified and clarified coordinate handling for dragging and mouse position, with clearer naming and separation between model and browser coordinates.
  - Simplified selection logic and removed unnecessary accumulated state for cleaner and more maintainable behavior.
  - Enhanced flexibility in coordinate conversion by allowing viewport transformations relative to arbitrary zoom and center.
  - Streamlined clipboard paste handling by simplifying mouse position extraction and adjusting attachment options.

- **Bug Fixes**
  - Enhanced overlay and dragging area accuracy by updating position calculations and coordinate transformations.
  - Fixed paste operations to correctly handle mouse position without unnecessary coordinate conversions.
  - Corrected drag initiation positions in toolbar and shape dragging to align with viewport-relative coordinates.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 16:05:33 +00:00
L-Sun
fbe053a54e fix(editor): edgeless selected rect should be below the edgeless toolbar (#12370)
Close [BS-3512](https://linear.app/affine-design/issue/BS-3512/bug-note-选中状态会穿透-toolbar)

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

## Summary by CodeRabbit

- **Tests**
  - Added a new end-to-end test to verify that selection handles are visually and interactively layered beneath the edgeless element toolbar in the editor.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 15:50:58 +00:00
JimmFly
65b910868f feat(core): add team badge to user info menu (#12144)
close AF-2545

fix(core): go to workspace command does not work using CMDK

feat(core): add team badge to user info

![CleanShot 2025-05-06 at 16 35 00@2x](https://github.com/user-attachments/assets/ff915ea5-761b-4851-9429-86cbb3041776)

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

## Summary by CodeRabbit

- **New Features**
  - Introduced a redesigned user info section in the sidebar, including enhanced account details, cloud and AI usage indicators, and team workspace listing with improved navigation.
  - Workspace selector now supports controlled open/close state for smoother sidebar integration.
  - Team workspaces are grouped and displayed with role-based badges and tooltips.
  - Added new localization for team roles and workspace tooltips.

- **Improvements**
  - Updated theming and styling for user plan buttons and usage indicators for a more consistent look.
  - Sidebar user info UI is now more modular and responsive.

- **Bug Fixes**
  - Improved error handling and loading states for quota and usage displays.

- **Chores**
  - Refactored internal state management and code structure for better maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 10:15:42 +00:00
JimmFly
9651969ff8 chore: remove telegram community (#12292)
close AF-2607

![CleanShot 2025-05-15 at 11 13 40](https://github.com/user-attachments/assets/31d2d2c5-3c62-43e3-93b6-0a66e029490b)

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

## Summary by CodeRabbit

- **Refactor**
  - Removed Telegram icon and link from the footer and About settings sections.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 10:01:23 +00:00
forehalo
a2354f69a3 chore(core): switch position of collection and tag section in sidebar (#12327)
close AF-2551

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

## Summary by CodeRabbit

- **Style**
  - Updated the sidebar layout by reordering the Collections and Tags panels for improved navigation experience.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 09:45:37 +00:00
forehalo
fa5110e76f fix(server): seat not allocated when new user invited to licensed workspace (#12322)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Improved the accuracy of workspace member overcapacity calculation.
  - Corrected seat allocation handling for one-time license variants, ensuring proper event emission and bypassing unnecessary updates.

- **Refactor**
  - Streamlined internal logic by removing an obsolete method related to seat count checks.

- **Tests**
  - Removed a workspace member list pagination test to streamline end-to-end testing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 09:30:38 +00:00
EYHN
91e7b28dd5 feat(core): add system property types support (#12332) 2025-05-19 09:15:37 +00:00
EYHN
fbf590ddd4 feat(core): support save and restore display preference in all docs (#12315)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Display preferences and selected collections are now saved and restored across sessions, providing a persistent and personalized experience in the All Documents page.

- **Refactor**
  - Display settings menus and related components have been updated to use a controlled component pattern, allowing preferences to be managed externally for improved consistency and flexibility.
  - Preference state management has been consolidated, simplifying how display options are handled throughout the interface.
  - Various headers and detail views now accept display preferences and update callbacks as props, enabling external control of display settings.
  - Components previously relying on internal context and reactive streams were refactored to receive explicit props and callbacks for state management.

- **Bug Fixes**
  - Improved collection activation logic to prevent unnecessary updates when the selected collection is already active.
  - Added fallback default view to ensure consistent display in document list items.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 09:15:37 +00:00
L-Sun
b7679497ca chore(editor): improve index of new edgeless note from dnd (#12357)
Close [BS-3500](https://linear.app/affine-design/issue/BS-3500/剪刀没问题了,通过拖动形成的段落能不能也有同样的表现?)

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved the behavior when dragging blocks between notes, ensuring that new note blocks are inserted as siblings when appropriate, instead of always creating them at the root level.

- **Tests**
  - Enhanced and enabled tests to verify correct drag-and-drop behavior across multiple notes and to ensure the relative order of note content is preserved during drag operations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 08:49:08 +00:00
forehalo
d5e2fee317 chore(server): switch to prometheus (#12352)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added platform-specific monitoring integration for Google Cloud Platform (GCP) in multiple services, enabling automated pod monitoring for deployments on GCP.

- **Chores**
  - Removed an unused dependency related to Google Cloud monitoring from the backend server package.

- **Refactor**
  - Updated internal monitoring implementation by removing a previously used metric reader method for GCP integration.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 05:06:42 +00:00
donteatfriedrice
76a8bf2834 fix(editor): flaky import notion html image unit test (#12354)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Added a new development dependency to improve testing capabilities.

- **Tests**
  - Refactored image handling tests to use enhanced HTTP request mocking, improving test reliability and maintainability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 04:53:56 +00:00
fengmk2
4e37a1322e feat(nbstore): add cloud indexer storage (#12245)
close AF-2613
2025-05-19 04:39:39 +00:00
fengmk2
a34c3ea200 feat(server): auto index all workspaces to indexer (#12205)
close CLOUD-207

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

- **New Features**
  - Introduced automated periodic indexing of workspaces with a new job type and a scheduled cron job running every 30 seconds.
  - Added a unique sequential identifier (`sid`) and an "indexed" flag to workspaces to track indexing status.
- **Improvements**
  - Enhanced workspace indexing to handle missing workspaces and snapshots distinctly and selectively index documents.
  - Added ability to query workspaces after a given identifier with result limits.
- **Bug Fixes**
  - Improved error handling and logging during workspace indexing operations.
- **Tests**
  - Expanded test coverage for workspace indexing and auto-indexing, including scheduling and edge cases.
- **Chores**
  - Updated data models and schema to support new workspace fields and indexing features.
  - Enhanced mock data utilities to allow custom timestamps.
  - Improved type safety and flexibility in document snapshot retrieval.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 04:39:38 +00:00
EYHN
34686f3d85 feat(core): edit and delete pinned collections in all docs (#12296)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added the ability to edit and remove pinned collections directly from the workspace UI.
  - Improved filter management with clearer handling of temporary filters and editing workflows.
  - Enhanced synchronization and readiness tracking for collections and pinned collections, resulting in more responsive and reliable updates.

- **Style**
  - Updated pinned collection item styles for better interaction feedback, including new edit and remove button visuals.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 04:24:36 +00:00
fengmk2
1e7774929c feat(server): filter docs by access role (#12311)
close CLOUD-208

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

- **New Features**
  - Enhanced document access control with batch permission checks, enabling efficient filtering of documents based on user roles and permissions.
  - Added detailed document-level role and permission management for workspace users.
- **Bug Fixes**
  - Improved accuracy in filtering search results to only display documents users have permission to read.
- **Tests**
  - Added comprehensive tests for document-level permission filtering and search result accuracy.
  - Introduced new mock utilities to support permission-related test scenarios.
- **Refactor**
  - Simplified and optimized permission logic for determining user roles and document access.
- **Documentation**
  - Updated type definitions for improved clarity in permission handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 03:28:22 +00:00
CatsJuice
85bb728ca8 feat(core): new docs list for tag detail (#12298)
close AF-2583

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

## Summary by CodeRabbit

- **New Features**
  - Introduced a new tag list header with breadcrumb navigation and a tag selector dropdown for improved navigation and tag management.
  - Added a searchable dropdown menu for selecting and switching between tags.

- **Improvements**
  - Updated the tag detail page to use a more dynamic, subscription-based document explorer for displaying tagged content.
  - Enhanced header controls with an updated display menu button.

- **Style**
  - Added comprehensive new styles for the tag list header and tag selector components.
  - Introduced a new scroll area style for flexible layout.

- **Documentation**
  - Marked an older page list header component as deprecated.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 02:56:03 +00:00
CatsJuice
8b669b725b feat(core): new doc list for collection detail (#12278)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new document list view with support for different layouts (list, grid, masonry) and improved multi-selection and batch deletion capabilities.
  - Added a view toggle control for switching between document list layouts across relevant pages.
  - Implemented a new collection list header with breadcrumb navigation and streamlined actions for editing collections and creating new pages.

- **Improvements**
  - Simplified and unified document list rendering by delegating logic to a shared component.
  - Enhanced document selection behavior, allowing toggling of individual items in select mode.
  - Updated styles for document lists, group headers, and collection pages for a more consistent appearance.
  - Refined wrapper component styling to prevent unintended HTML attribute forwarding.

- **Refactor**
  - Replaced local implementations of view toggles and document grouping with shared components for easier maintenance.
  - Removed deprecated and unused styles and props to streamline components and improve code clarity.
  - Refactored collection detail and header components to adopt new context-driven document explorer architecture.

- **Documentation**
  - Added deprecation notice to an outdated collection page list header component.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 01:59:38 +00:00
fundon
4ecdfb1258 fix(core): should use AttachmentViewerView in split view and standalone page (#12323)
Closes: [AF-2564](https://linear.app/affine-design/issue/AF-2564/pdf-split-view-多了-header)

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

- **Refactor**
  - Improved code clarity and maintainability with clearer comments and streamlined property usage.
  - Updated the workspace attachment page to use a more context-appropriate attachment viewer component.
- **Style**
  - Minor formatting improvements for better code readability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-18 05:47:52 +00:00
Saul-Mirone
820c3fda63 refactor(editor): cleanup effects export (#12312)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Removed multiple internal export entries related to effects modules across various packages.
  - Updated dependencies and configuration references to improve internal consistency. No visible changes for end-users.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-18 04:17:08 +00:00
fundon
a028f027be chore(editor): add tracking events to attachments (#12317)
Closes: [BS-3483](https://linear.app/affine-design/issue/BS-3483/event-tracking-loading-block)
2025-05-18 01:57:42 +00:00
fundon
8726b0e462 refactor(editor): optimize pasting process of attachments and images (#12276)
Related to: [BS-3146](https://linear.app/affine-design/issue/BS-3146/import-paste-接口改进优化)
2025-05-18 01:57:42 +00:00
fundon
f3693a91c3 fix(editor): should update image size field (#12274)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Image content now includes file size information in its metadata.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-18 01:57:41 +00:00
renovate
f215b680ef chore: bump up oxlint version to v0.16.11 (#12335)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [oxlint](https://oxc.rs) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxlint)) | [`0.16.10` -> `0.16.11`](https://renovatebot.com/diffs/npm/oxlint/0.16.10/0.16.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.16.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.16.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.16.10/0.16.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.16.10/0.16.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxlint)</summary>

### [`v0.16.11`](https://redirect.github.com/oxc-project/oxc/releases/tag/oxlint_v0.16.11): oxlint v0.16.11

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxlint_v0.16.10...oxlint_v0.16.11)

#### \[0.16.11] - 2025-05-16

##### Features

-   [`078bf0b`](https://redirect.github.com/oxc-project/oxc/commit/078bf0b) language_server: Better fallback handling when passing invalid `Options` values ([#&#8203;10930](https://redirect.github.com/oxc-project/oxc/issues/10930)) (Sysix)
-   [`be7f7e1`](https://redirect.github.com/oxc-project/oxc/commit/be7f7e1) language_server/editor: Support multi workspace folders ([#&#8203;10875](https://redirect.github.com/oxc-project/oxc/issues/10875)) (Sysix)
-   [`eef93b4`](https://redirect.github.com/oxc-project/oxc/commit/eef93b4) linter: Add import/no-unassigned-import ([#&#8203;10970](https://redirect.github.com/oxc-project/oxc/issues/10970)) (yefan)
-   [`cc0112f`](https://redirect.github.com/oxc-project/oxc/commit/cc0112f) linter: No-unused-vars add setting for `reportVarsOnlyUsedAsTypes` ([#&#8203;11009](https://redirect.github.com/oxc-project/oxc/issues/11009)) (camc314)
-   [`17e49c3`](https://redirect.github.com/oxc-project/oxc/commit/17e49c3) linter: Implement configuration and checking loops for `eslint/no_constant_condition` ([#&#8203;10949](https://redirect.github.com/oxc-project/oxc/issues/10949)) (Ulrich Stark)
-   [`21117ac`](https://redirect.github.com/oxc-project/oxc/commit/21117ac) linter: Implement react/forbid-elements ([#&#8203;10928](https://redirect.github.com/oxc-project/oxc/issues/10928)) (Thomas BOCQUEZ)
-   [`466c24a`](https://redirect.github.com/oxc-project/oxc/commit/466c24a) linter: Add gitlab reporter output format ([#&#8203;10927](https://redirect.github.com/oxc-project/oxc/issues/10927)) (Connor Pearson)
-   [`a064082`](https://redirect.github.com/oxc-project/oxc/commit/a064082) linter: Add import/consistent-type-specifier-style rule ([#&#8203;10858](https://redirect.github.com/oxc-project/oxc/issues/10858)) (yefan)
-   [`4733b52`](https://redirect.github.com/oxc-project/oxc/commit/4733b52) linter/no-extraneous-class: Add conditional fixer ([#&#8203;10798](https://redirect.github.com/oxc-project/oxc/issues/10798)) (DonIsaac)

##### Bug Fixes

-   [`87bf2a8`](https://redirect.github.com/oxc-project/oxc/commit/87bf2a8) editor: Send only `workspace/didChangeConfiguration` when some workspace configuration is effected ([#&#8203;11017](https://redirect.github.com/oxc-project/oxc/issues/11017)) (Sysix)
-   [`ed5708d`](https://redirect.github.com/oxc-project/oxc/commit/ed5708d) editor: Detect all workspaces config path changes ([#&#8203;11016](https://redirect.github.com/oxc-project/oxc/issues/11016)) (Sysix)
-   [`89cc21b`](https://redirect.github.com/oxc-project/oxc/commit/89cc21b) language_server: Normalize oxlintrc config path ([#&#8203;10982](https://redirect.github.com/oxc-project/oxc/issues/10982)) (Sysix)
-   [`c52a9ba`](https://redirect.github.com/oxc-project/oxc/commit/c52a9ba) linter: Fix plugins inside overrides not being applied ([#&#8203;11057](https://redirect.github.com/oxc-project/oxc/issues/11057)) (camc314)
-   [`b12bd48`](https://redirect.github.com/oxc-project/oxc/commit/b12bd48) linter: Fix rule config not being correctly applied ([#&#8203;11055](https://redirect.github.com/oxc-project/oxc/issues/11055)) (camc314)
-   [`9a368be`](https://redirect.github.com/oxc-project/oxc/commit/9a368be) linter: False negative in no-restriced-imports with `patterns` and side effects ([#&#8203;11027](https://redirect.github.com/oxc-project/oxc/issues/11027)) (camc314)
-   [`8c2cfbc`](https://redirect.github.com/oxc-project/oxc/commit/8c2cfbc) linter: False negative in no-restricted-imports ([#&#8203;11026](https://redirect.github.com/oxc-project/oxc/issues/11026)) (camc314)
-   [`8956870`](https://redirect.github.com/oxc-project/oxc/commit/8956870) linter: False positive in no-unused-vars ([#&#8203;11002](https://redirect.github.com/oxc-project/oxc/issues/11002)) (camc314)
-   [`33a60d2`](https://redirect.github.com/oxc-project/oxc/commit/33a60d2) linter: Skip eslint/no-redeclare when running on modules ([#&#8203;11004](https://redirect.github.com/oxc-project/oxc/issues/11004)) (camc314)
-   [`39063ce`](https://redirect.github.com/oxc-project/oxc/commit/39063ce) linter: Reword diagnostic message for no-control-regex ([#&#8203;10993](https://redirect.github.com/oxc-project/oxc/issues/10993)) (camc314)
-   [`9eedb58`](https://redirect.github.com/oxc-project/oxc/commit/9eedb58) linter: False positive with negative matches in no-restricted-imports ([#&#8203;10976](https://redirect.github.com/oxc-project/oxc/issues/10976)) (camc314)
-   [`10e77d7`](https://redirect.github.com/oxc-project/oxc/commit/10e77d7) linter: Improve diagnostics for no-control-regex ([#&#8203;10959](https://redirect.github.com/oxc-project/oxc/issues/10959)) (camc314)
-   [`0961296`](https://redirect.github.com/oxc-project/oxc/commit/0961296) linter: Add `gitlab` to linter `--help` docs ([#&#8203;10932](https://redirect.github.com/oxc-project/oxc/issues/10932)) (camc314)
-   [`82889ae`](https://redirect.github.com/oxc-project/oxc/commit/82889ae) linter/no-extraneous-class: Improve docs, reporting and code refactor ([#&#8203;10797](https://redirect.github.com/oxc-project/oxc/issues/10797)) (DonIsaac)
-   [`11c34e7`](https://redirect.github.com/oxc-project/oxc/commit/11c34e7) linter/no-img-element: Improve diagnostic and docs ([#&#8203;10908](https://redirect.github.com/oxc-project/oxc/issues/10908)) (DonIsaac)
-   [`584d8b9`](https://redirect.github.com/oxc-project/oxc/commit/584d8b9) napi: Enable mimalloc `no_opt_arch` feature on linux aarch64 ([#&#8203;11053](https://redirect.github.com/oxc-project/oxc/issues/11053)) (Boshen)
-   [`126ae75`](https://redirect.github.com/oxc-project/oxc/commit/126ae75) semantic: Distinguish class private elements ([#&#8203;11044](https://redirect.github.com/oxc-project/oxc/issues/11044)) (magic-akari)
-   [`773d0de`](https://redirect.github.com/oxc-project/oxc/commit/773d0de) semantic: Correctly handle nested brackets in jsdoc parsing ([#&#8203;10922](https://redirect.github.com/oxc-project/oxc/issues/10922)) (camc314)
-   [`b215b6c`](https://redirect.github.com/oxc-project/oxc/commit/b215b6c) semantic: Dont parse `@` as jsdoc tags inside `[`/`]` ([#&#8203;10919](https://redirect.github.com/oxc-project/oxc/issues/10919)) (camc314)

##### Documentation

-   [`db6afb9`](https://redirect.github.com/oxc-project/oxc/commit/db6afb9) linter: Improve docs of no-debugger ([#&#8203;11033](https://redirect.github.com/oxc-project/oxc/issues/11033)) (camc314)
-   [`16541de`](https://redirect.github.com/oxc-project/oxc/commit/16541de) linter: Improve docs of default-param-last ([#&#8203;11032](https://redirect.github.com/oxc-project/oxc/issues/11032)) (camc314)
-   [`2c2f3c4`](https://redirect.github.com/oxc-project/oxc/commit/2c2f3c4) linter: Improve docs of default-case-last ([#&#8203;11031](https://redirect.github.com/oxc-project/oxc/issues/11031)) (camc314)
-   [`56bb9ce`](https://redirect.github.com/oxc-project/oxc/commit/56bb9ce) linter: Improve docs of array-callback-return ([#&#8203;11030](https://redirect.github.com/oxc-project/oxc/issues/11030)) (camc314)
-   [`13dbcc6`](https://redirect.github.com/oxc-project/oxc/commit/13dbcc6) linter: Correct docs for default config for no-redeclare ([#&#8203;10995](https://redirect.github.com/oxc-project/oxc/issues/10995)) (camc314)
-   [`a86cbb3`](https://redirect.github.com/oxc-project/oxc/commit/a86cbb3) linter: Fix incorrect backticks of fenced code blocks ([#&#8203;10947](https://redirect.github.com/oxc-project/oxc/issues/10947)) (Ulrich Stark)

##### Refactor

-   [`3cc1466`](https://redirect.github.com/oxc-project/oxc/commit/3cc1466) language_server: New configuration structure for `initialize` and `workspace/didChangeConfiguration` ([#&#8203;10890](https://redirect.github.com/oxc-project/oxc/issues/10890)) (Sysix)
-   [`bd2ef7d`](https://redirect.github.com/oxc-project/oxc/commit/bd2ef7d) language_server: Use `Arc` for `diagnostic_report_map` ([#&#8203;10940](https://redirect.github.com/oxc-project/oxc/issues/10940)) (Sysix)
-   [`bb999a3`](https://redirect.github.com/oxc-project/oxc/commit/bb999a3) language_server: Avoid cloning linter by taking reference in LintService ([#&#8203;10907](https://redirect.github.com/oxc-project/oxc/issues/10907)) (Ulrich Stark)
-   [`d1b0c83`](https://redirect.github.com/oxc-project/oxc/commit/d1b0c83) linter: Remove overrides index vec ([#&#8203;11058](https://redirect.github.com/oxc-project/oxc/issues/11058)) (camc314)
-   [`7ad6cf8`](https://redirect.github.com/oxc-project/oxc/commit/7ad6cf8) linter: Store severity separately, remove `RuleWithSeverity` ([#&#8203;11051](https://redirect.github.com/oxc-project/oxc/issues/11051)) (camchenry)
-   [`e31c361`](https://redirect.github.com/oxc-project/oxc/commit/e31c361) linter: Remove nested match statements in no-restricted-imports ([#&#8203;10975](https://redirect.github.com/oxc-project/oxc/issues/10975)) (camc314)
-   [`6ad9d4f`](https://redirect.github.com/oxc-project/oxc/commit/6ad9d4f) linter: Tidy `eslint/func-names` ([#&#8203;10923](https://redirect.github.com/oxc-project/oxc/issues/10923)) (camc314)
-   [`faf0a95`](https://redirect.github.com/oxc-project/oxc/commit/faf0a95) syntax: Rename `NameSpaceModule` to `NamespaceModule` ([#&#8203;10917](https://redirect.github.com/oxc-project/oxc/issues/10917)) (Dunqing)

##### Testing

-   [`76b6b33`](https://redirect.github.com/oxc-project/oxc/commit/76b6b33) editor: Add tests for multi workspace folder setup ([#&#8203;10904](https://redirect.github.com/oxc-project/oxc/issues/10904)) (Sysix)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS4xOCIsInVwZGF0ZWRJblZlciI6IjQwLjExLjE4IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-17 14:41:42 +00:00
fengmk2
f0c9453459 fix(server): add AFFINE_INDEXER_SEARCH_ENDPOINT to self-host compose.yml (#12324)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Added a `.gitignore` file to prevent the `.env` file in the self-hosted Docker directory from being tracked by Git.

- **New Features**
  - Introduced a new environment variable for the search endpoint in the Docker Compose configuration for improved service connectivity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-17 12:51:26 +00:00
doouding
5eca722edf fix: connector issues (#12308)
Fixes [BS-3161](https://linear.app/affine-design/issue/BS-3161/发现已连接的connector会响应对齐线)
Fixes [BS-3337](https://linear.app/affine-design/issue/BS-3337/connector你肿么了)
Fixes [BS-3334](https://linear.app/affine-design/issue/BS-3334/connector-不应该能够被拖拽)

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

## Summary by CodeRabbit

- **Bug Fixes**
	- Corrected typos related to label editing state, ensuring more reliable label editing and display for connectors.
	- Fixed logic in the auto-complete overlay, improving when overlays appear during hover actions.

- **New Features**
	- Improved connector label handling by ensuring label state is preserved and restored during editing.
	- Enhanced connector movement behavior, allowing connectors to be moved only when appropriate elements are selected.

- **Tests**
	- Added end-to-end tests to verify connector movement and selection behaviors for improved reliability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-16 09:49:22 +00:00
doodlewind
8ed4f14380 feat(editor): support border radius for shape dom renderer (#12326)
Comparison:

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/lEGcysB4lFTEbCwZ8jMv/f2a266ba-c3d5-46ea-9aa5-38e5d0de6d5a.png)

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

## Summary by CodeRabbit

- **New Features**
	- Border radius and border thickness of shapes now scale dynamically with zoom level for improved visual consistency.

- **Tests**
	- Added a test to ensure percentage-based border radius values are correctly rendered in the DOM.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-16 09:02:45 +00:00
LongYinan
101062aa25 ci: temporary skip ios pipeline 2025-05-16 15:12:24 +08:00
doodlewind
b6e9c41ee3 fix(editor): mid button drag in presentation mode (#12309)
Fixes https://linear.app/affine-design/issue/BS-3448

Before this PR, presentation mode would force quit if user either:

1. Press space
2. Drag with mouse middle button

Unfixed behavior:

https://github.com/user-attachments/assets/8ff4e13a-69a8-4de6-8994-bf36e6e3eb49

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

- **Bug Fixes**
	- Improved presentation mode to preserve your current panned view when exiting pan mode or toggling fullscreen, preventing unwanted viewport resets.
	- Spacebar actions are now correctly disabled when using the frame navigator tool, avoiding accidental tool switches.
- **New Features**
	- Enhanced presentation controls for smoother transitions and better handling of user navigation states.
	- Added a one-time toast notification for presentations without frames, shown only once per session for better user guidance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 11:12:41 +00:00
Flrande
147fa9a6b1 feat(editor): add line number display option for code block (#12305)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added a toggle in the code block toolbar to show or hide line numbers for individual code blocks.
  - The display of line numbers now respects both global and per-block settings, allowing more flexible control.
- **Style**
  - Updated styles to hide line numbers when disabled via the new toggle option.
- **Tests**
  - Added end-to-end tests to verify toggling line numbers visibility and undo/redo behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 10:59:38 +00:00
Saul-Mirone
3a2fe0bf91 refactor(editor): extract widgets (#12304)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced two new widgets: Edgeless Dragging Area and Note Slicer, now available for use.
  - Added extension support for these widgets, enabling enhanced interaction and integration within the application.

- **Chores**
  - Updated package configurations and workspace settings to include the new widgets and their dependencies.
  - Added project references and configuration files to support modular development and build processes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 10:44:41 +00:00
doouding
e98ec93af1 fix: connector label editing (#12282)
Fixes [BS-3373](https://linear.app/affine-design/issue/BS-3373/connector%E7%9A%84%E5%8F%8C%E5%87%BB%E6%B7%BB%E5%8A%A0note%E8%A1%8C%E4%B8%BA%E5%8F%97%E5%88%B0%E4%BA%86%E8%A6%86%E7%9B%96%E8%8C%83%E5%9B%B4%E7%9A%84%E5%BD%B1%E5%93%8D)

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

- **New Features**
  - Connector label elements now include identity and creator metadata.

- **Bug Fixes**
  - Improved hit-testing for pointer interactions, resulting in more accurate detection of hovered elements.

- **Refactor**
  - Enhanced internal comparison logic for elements, improving sorting and ordering consistency.
  - Strengthened type definitions for search filters, improving result accuracy and clarity.

- **Tests**
  - Added end-to-end tests to verify correct label entry and retrieval for multiple connectors.
  - Introduced utility functions to fetch connector labels and improved connector creation in test actions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 10:31:55 +00:00
yoyoyohamapi
6c9f28e08b feat(core): workspace embedding settings (#11801)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced "Indexer & Embedding" workspace settings to manage AI embedding for local content, including document ignoring and attachment uploads.
  - Added UI components for embedding settings, attachments, and ignored documents with pagination and deletion capabilities.
  - Provided comprehensive file-type icons for attachments.

- **Improvements**
  - Added a new tab for indexing and embedding in workspace settings navigation.
  - Included test identifiers on key UI elements to enhance automated testing.

- **Localization**
  - Added English localization strings covering all embedding-related UI text and actions.

- **Bug Fixes**
  - Enabled previously skipped end-to-end tests for embedding settings to improve reliability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 09:36:28 +00:00
darkskygit
6224344a4f chore(server): improve ignored docs list & match (#12307)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
	- Improved the accuracy of document matching by excluding ignored documents from search results.
- **Chores**
	- Updated internal handling of ignored document lists for better consistency and reliability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 09:36:28 +00:00
darkskygit
393458871d fix(server): self hosted config (#12253)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Updated the Docker Compose configuration to use a different image for the Postgres service.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 06:56:36 +00:00
yoyoyohamapi
d00315e372 test(core): embedding settings (#11554)
### TL;DR

tests: workspace embedding e2e

> CLOSE BS-3052

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

## Summary by CodeRabbit

- **New Features**
  - Introduced comprehensive end-to-end tests for workspace embedding settings, including toggling embedding, uploading and managing attachments, pagination, and ignoring documents.
  - Added utilities for automated interaction with the settings panel and document creation in tests.

- **Tests**
  - Implemented detailed scenarios to verify workspace embedding functionality and user interactions within the settings panel.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 06:43:07 +00:00
akumatus
9fee8147cb feat(core): add ai model switch ui (#12266)
Close [AI-86](https://linear.app/affine-design/issue/AI-86)

![截屏2025-05-14 11.32.41.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/b92d5c32-fa5a-4afd-93e6-3699347575be.png)

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

## Summary by CodeRabbit

- **New Features**
  - Introduced AI model switching in chat, allowing users to select from multiple AI models during conversations.
  - Added a floating menu for easy AI model selection within the chat interface.
  - Enabled visibility of the AI model switcher through a new experimental feature flag, configurable in workspace settings (canary builds only).

- **Enhancements**
  - Improved session management in the chat panel for smoother model switching and state handling.
  - Updated localization to support the new AI model switch feature in settings.

- **Bug Fixes**
  - None.

- **Chores**
  - Registered new components and services to support AI model switching functionality.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 06:29:37 +00:00
fengmk2
6a13d69dea chore(server): separate elasticsearch to run independently (#12299)
close CLOUD-217

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

- **New Features**
  - Introduced a dedicated test job for Elasticsearch, running only Elasticsearch-specific tests during CI.
- **Chores**
  - Enhanced server test workflows with explicit setup steps and automated coverage uploads.
  - Improved test suite structure for Elasticsearch provider to enable conditional and asynchronous test execution based on environment variables.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 06:16:06 +00:00
akumatus
fabcdd3b2c feat(core): add exa url crawl tool (#12277)
Close [AI-126](https://linear.app/affine-design/issue/AI-126)

![截屏2025-05-14 17.01.19.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/1a86ac68-f9f1-4740-8ddb-2293838682d2.png)

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

## Summary by CodeRabbit

- **New Features**
  - Introduced a new web crawling tool, allowing users to extract live content from specific web pages in addition to traditional web search.
- **Improvements**
  - Enhanced error handling for web search and web crawl operations, providing clearer failure messages.
  - Updated terminology in AI prompts and user-facing messages to reflect the new web search/crawl capabilities.
  - Improved formatting of web search and crawl results for better readability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 05:22:55 +00:00
akumatus
fcc9b31da9 feat(core): add get session graphql api (#12237)
Close [AI-116](https://linear.app/affine-design/issue/AI-116)

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

- **New Features**
  - Added the ability to retrieve detailed information for a specific Copilot session by its ID, including model metadata and optional models, via the user interface and API.
  - Session data now includes additional fields such as the model used and a list of optional models.
  - Enhanced GraphQL queries and UI components to support fetching and displaying these new session details.

- **Improvements**
  - Session lists now provide richer information, including model details, for each session.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 04:55:50 +00:00
Saul-Mirone
6052743671 refactor(editor): extract selected rect widget (#12290)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Introduced the Edgeless Selected Rectangle widget, providing enhanced selection and interaction capabilities in edgeless mode.
  - Added rotation-aware resize cursors for improved usability when resizing selections.
  - Integrated new autocomplete panels and selection components for a smoother user experience.

- **Refactor**
  - Modularized the Edgeless Selected Rectangle widget as a standalone package for better maintainability and integration.
  - Updated internal references and imports to utilize the new widget package.

- **Chores**
  - Updated project and package configurations to include the new widget and ensure proper build and type-checking across the workspace.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 04:25:07 +00:00
renovate
43948f205e chore: bump up Node.js to v22.15.1 (#12286)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | patch | `22.15.0` -> `22.15.1` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v22.15.1`](https://redirect.github.com/nodejs/node/compare/v22.15.0...v22.15.1)

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.15.0...v22.15.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS45IiwidXBkYXRlZEluVmVyIjoiNDAuMTEuOSIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-15 04:12:38 +00:00
L-Sun
6fabc0eb1f fix(editor): adjustment of scaled and folded synced doc (#12294)
Close [BS-3418](https://linear.app/affine-design/issue/BS-3418/折叠的embed-doc调整宽度时,会出现一个最小高度,不需要这个)

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

## Summary by CodeRabbit

- **New Features**
  - Added support for dynamically scaling the height of embedded synced document blocks, including proper handling when folding and unfolding.
  - Introduced a new property to track the scaled height of folded synced document blocks.

- **Bug Fixes**
  - Improved accuracy of height calculations for synced document blocks by accounting for both viewport zoom and block scale.

- **Tests**
  - Enhanced end-to-end tests to consistently apply scaling before running size adjustment checks.
  - Added a utility function to simulate scaling elements with keyboard shortcuts during test execution.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 03:56:03 +00:00
doodlewind
74b2d4dc2e fix(editor): use persisted state for presentation mode background config (#12293)
Fixed this issue (black background is on but the toggle state is not synced):

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/lEGcysB4lFTEbCwZ8jMv/bb4885c1-eccc-45fa-ac19-f868b9ea055a.png)

Issue source: https://linear.app/affine-design/issue/BS-3448

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

## Summary by CodeRabbit

- **Bug Fixes**
  - The background color now defaults to non-black for new users or when no previous setting exists.
  - Improved reliability when restoring user settings.

- **New Features**
  - Changes to the background color setting are now saved and persist between sessions.

- **Style**
  - Enhanced toggle switch responsiveness for background and toolbar settings.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 03:41:08 +00:00
fengmk2
ffb72a4491 chore(server): fix missing indexer service on ci (#12291)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Standardized the naming of the search service to "indexer" in automated test workflows.
  - Ensured the "indexer" service is available in additional test jobs for improved consistency across workflows.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 03:28:19 +00:00
zzj3720
dd113f8605 fix(editor): ui bugs of database block (#12285)
fix: BS-3445, BS-3470, BS-3472, BS-3473

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

## Summary by CodeRabbit

- **Style**
  - Updated the alignment of the created time cell for improved layout consistency.
  - Limited the maximum width of the group view settings panel for better layout control.
  - Changed the icon for the "created by" property to enhance visual representation.
  - Updated the background color of file popover content for improved appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 01:46:19 +00:00
Yifeng Wang
8c1013dfe2 fix(editor): canvas element missing rotate during zooming (#12279) 2025-05-15 09:29:42 +08:00
donteatfriedrice
b1594fcf6f feat(editor): provide callout markdown export options middleware (#12283)
Closes: [BS-3491](https://linear.app/affine-design/issue/BS-3491/支持-callout-导出成-vitepress-文档站支持的-markdown-格式)

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

- **New Features**
  - Added support for exporting callout blocks in both GFM and Admonition markdown styles, including configurable admonition types and custom titles.
  - Introduced middleware to customize callout export options for markdown serialization.

- **Tests**
  - Enhanced test coverage for callout markdown export, including scenarios with and without export middleware for different styles and content structures.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 01:03:38 +00:00
donteatfriedrice
d56d46d8d6 fix(editor): should preserve format in <p> when importing html (#12275)
Closes: [BS-3485](https://linear.app/affine-design/issue/BS-3485/粘贴-html-格式的内容时,紧邻着-bold-text-的普通文本会丢失空格)

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

- **Bug Fixes**
  - Improved handling of spaces and whitespace in paragraphs when converting HTML with inline formatting, ensuring spaces are preserved as in the original content.

- **Tests**
  - Added a new test to verify that spaces are correctly preserved in paragraphs containing bold and italic formatting during HTML conversion.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 00:50:10 +00:00
zzj3720
278aa8f7a0 fix(editor): remove the fixation of created-by and created-time (#12260)
close: BS-3474, BS-3153

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

- **New Features**
  - Enhanced property addition to support specifying both type and name for new properties across databases and views.
  - Added context menu for selecting property type when adding new columns in table headers.
  - Introduced `addToGroup` functions to various group-by configurations for consistent grouping behavior.

- **Bug Fixes**
  - Improved grouping logic to treat empty arrays as ungrouped in multi-member group configurations.
  - Refined grouping behavior to respect explicit group addition settings.
  - Ensured grouping operations only occur when both group key and row ID are present.

- **Tests**
  - Updated test expectations to align with revised default column naming conventions.
  - Adjusted test utilities to accommodate the updated property addition method.
  - Improved typing simulation in column type selection for more reliable test execution.

- **Improvements**
  - Introduced a new root component rendering on the share page to enhance UI integration.
  - Refined default property naming logic for clearer and more consistent column titles.
  - Simplified created-time and created-by property configurations for better maintainability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 16:41:56 +00:00
fengmk2
afa984da54 feat(server): handle workspace doc updates (#11937) 2025-05-14 14:52:41 +00:00
fengmk2
6792c3e656 feat(common): add blocksuite reader lib (#11955)
close CLOUD-202
2025-05-14 14:52:41 +00:00
fengmk2
a1bcf77447 feat(server): add cloud indexer with Elasticsearch and Manticoresearch providers (#11835)
close CLOUD-137

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

- **New Features**
  - Introduced advanced workspace-scoped search and aggregation capabilities with support for complex queries, highlights, and pagination.
  - Added pluggable search providers: Elasticsearch and Manticoresearch.
  - New GraphQL queries, schema types, and resolver support for search and aggregation.
  - Enhanced configuration options for search providers in self-hosted and cloud deployments.
  - Added Docker Compose services and environment variables for Elasticsearch and Manticoresearch.
  - Integrated indexer service into deployment and CI workflows.

- **Bug Fixes**
  - Improved error handling with new user-friendly error messages for search provider and indexer issues.

- **Documentation**
  - Updated configuration examples and environment variable references for indexer and search providers.

- **Tests**
  - Added extensive end-to-end and provider-specific tests covering indexing, searching, aggregation, deletion, and error cases.
  - Included snapshot tests and test fixtures for search providers.

- **Chores**
  - Updated deployment scripts, Helm charts, and Kubernetes manifests to include indexer-related environment variables and secrets.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 14:52:41 +00:00
Saul-Mirone
7c22b3931f refactor(editor): cleanup dead code (#12281)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Streamlined and consolidated block and inline extension exports by removing multiple block-spec and inline extension arrays from public APIs.
  - Reduced exported constants, types, and utility functions related to various block and embed features.
  - Simplified the codebase by removing deprecated type guards, adapter extensions, and redundant extension groupings.
- **Chores**
  - Cleaned up internal APIs by deleting unused exports, imports, and outdated code, enhancing maintainability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 14:14:29 +00:00
doouding
6959a2dab3 fix: peekable in edgeless mode (#12271)
Fixes [BS-3374](https://linear.app/affine-design/issue/BS-3374/)

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

- **New Features**
  - Improved control over when the peek view is shown in "edgeless" editor mode, ensuring it only activates when interacting directly with the relevant component.
- **Bug Fixes**
  - Prevented unintended peek view activation in "edgeless" mode when clicking outside the associated component.
- **Tests**
  - Added end-to-end test verifying the peek view does not open when content is covered by a canvas element.
- **Chores**
  - Added utility function to streamline creating synced pages in edgeless mode during tests.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 13:56:24 +00:00
doouding
491c944ac1 fix: drag handler hover rect state is not cleaned (#11868)
Fixes [BS-3261](https://linear.app/affine-design/issue/BS-3261/部分情况下-edgeless-dnd-响应区域有问题)

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

- **Documentation**
  - Improved documentation for the drag handle by adding a description for the `force` parameter in the hide method.

- **Style**
  - Minor code formatting adjustments with no impact on functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 11:27:27 +00:00
Ron
c0ed1a45f2 docs: add ClawCloud Run button & fix documentation links (#12280) 2025-05-14 19:26:52 +08:00
EYHN
61b99c5934 feat(core): add pinned collections to all docs (#12269) 2025-05-14 18:18:43 +09:00
darkskygit
6eab1a6cb2 feat(server): update prompts (#12244)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Enhanced AI-powered summary, translation, writing improvement, and spelling correction actions with more detailed and tailored instructions for improved output quality and user experience.

- **Improvements**
  - Refined language detection, output formatting, and context-sensitive handling across AI actions for more accurate and relevant results.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 09:04:45 +00:00
Saul-Mirone
f2164e4d70 fix(editor): suface component can be null (#12270)
Closes: BS-3149

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

## Summary by CodeRabbit

- **Refactor**
  - Improved internal handling of surface components across various tools, resulting in safer and more consistent access patterns.
  - Enhanced code maintainability and reliability without altering any visible features or user workflows.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 08:37:11 +00:00
renovate
7e722957a9 chore: bump up nestjs to v11.1.1 (#12272)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@nestjs/common](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/common)) | [`11.1.0` -> `11.1.1`](https://renovatebot.com/diffs/npm/@nestjs%2fcommon/11.1.0/11.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcommon/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcommon/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcommon/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcommon/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/core](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/core)) | [`11.1.0` -> `11.1.1`](https://renovatebot.com/diffs/npm/@nestjs%2fcore/11.1.0/11.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fcore/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fcore/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fcore/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fcore/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-express](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-express)) | [`11.1.0` -> `11.1.1`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-express/11.1.0/11.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-express/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-express/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-express/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-express/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/platform-socket.io](https://nestjs.com) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/platform-socket.io)) | [`11.1.0` -> `11.1.1`](https://renovatebot.com/diffs/npm/@nestjs%2fplatform-socket.io/11.1.0/11.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fplatform-socket.io/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fplatform-socket.io/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fplatform-socket.io/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fplatform-socket.io/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@nestjs/websockets](https://redirect.github.com/nestjs/nest) ([source](https://redirect.github.com/nestjs/nest/tree/HEAD/packages/websockets)) | [`11.1.0` -> `11.1.1`](https://renovatebot.com/diffs/npm/@nestjs%2fwebsockets/11.1.0/11.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs%2fwebsockets/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs%2fwebsockets/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs%2fwebsockets/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs%2fwebsockets/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>nestjs/nest (@&#8203;nestjs/common)</summary>

### [`v11.1.1`](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/core)</summary>

### [`v11.1.1`](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/platform-express)</summary>

### [`v11.1.1`](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/platform-socket.io)</summary>

### [`v11.1.1`](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

</details>

<details>
<summary>nestjs/nest (@&#8203;nestjs/websockets)</summary>

### [`v11.1.1`](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

[Compare Source](https://redirect.github.com/nestjs/nest/compare/v11.1.0...2cccff11e9710e9194a161c60517de4dcd066ac0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS45IiwidXBkYXRlZEluVmVyIjoiNDAuMTEuOSIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-14 08:22:31 +00:00
Yifeng Wang
9cabe03386 refactor(editor): add dom renderer entry for canvas element (#12149) 2025-05-14 16:22:16 +08:00
Flrande
6358249aea feat(editor): update code block ui (#12254)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Updated the code block toolbar to use a toggle switch for the "wrap" option, providing a more interactive user experience.

- **Style**
  - Adjusted the height of the language selection button for consistent appearance.
  - Refined code block container padding and increased spacing for line numbers to improve readability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 07:19:09 +00:00
EYHN
fa3b08274c feat(core): adjust collection rules (#12268)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Trashed page titles are now visually indicated with a strikethrough style in collection editor dialogs.

- **Bug Fixes**
  - Trashed pages are now properly excluded from allowed lists and filtered views.

- **Refactor**
  - Improved filtering logic for collections and page lists, separating user filters from system filters for more consistent results.
  - Enhanced filter configuration options for more flexible and maintainable filtering behavior.

- **Style**
  - Added a new style for displaying trashed items with a strikethrough effect.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 07:04:56 +00:00
darkskygit
cecf545590 feat(server): improve context metadata & matching (#12064)
fix AI-20

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

- **New Features**
  - Enhanced file metadata with MIME type, blob ID, and file name across context and workspace, now visible in UI and API.
  - Added workspace-level matching for files and documents with configurable thresholds and workspace scoping in search queries.
  - Introduced a new error type and user-friendly messaging for global workspace context matching failures.

- **Bug Fixes**
  - Improved consistent handling of file MIME types and nullable context IDs for accurate metadata.

- **Documentation**
  - Updated GraphQL schema, queries, and mutations to include new metadata fields, optional parameters, and error types.

- **Style**
  - Added new localization strings for global context matching error messages.

- **Tests**
  - Extended test coverage with new and updated snapshot tests for metadata and matching logic.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 06:32:29 +00:00
darkskygit
04c5fd6dfc fix(core): improve mindmap e2e stability (#12267)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Updated the user message in the brainstorming workflow to clarify that provided data should be treated as raw input, not as a command.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 06:32:29 +00:00
L-Sun
3ebed1d5a8 chore(editor): adjust size of synced doc (#12163)
Close [BS-3418](https://linear.app/affine-design/issue/BS-3418/折叠的embed-doc调整宽度时,会出现一个最小高度,不需要这个)

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

- **New Features**
  - Improved resizing and folding interactions for embedded synced documents in edgeless mode, including dynamic height calculation and enhanced drag-handle styling.
- **Bug Fixes**
  - Adjusted minimum height for synced document embeds to allow more compact display.
  - Ensured consistent width settings across embed cards.
- **Tests**
  - Added end-to-end tests covering folding, unfolding, and resizing behaviors for edgeless synced document embeds.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 05:17:42 +00:00
yoyoyohamapi
f737327f12 feat(core): show stop modal if clickoutside during generating (#12227)
### TL;DR

feat: show stop model if click-outside during ai generating

>CLOSE AI-89

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

- **New Features**
  - Added a confirmation dialog when attempting to stop AI content generation by clicking outside the panel, ensuring users can confirm or cancel the stop action.

- **Tests**
  - Introduced an end-to-end test to verify the confirmation dialog appears and AI generation stops as expected when clicking outside during generation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 03:16:55 +00:00
CatsJuice
291bb9c449 fix(core): skip undefined arg for collection migration (#12265)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved handling of filter arguments to exclude invalid or empty values, reducing potential errors during filtering operations.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 03:04:07 +00:00
donteatfriedrice
26ece014f1 fix(editor): support relative image reference path when importing zip with images (#12264)
Closes: [BS-3385](https://linear.app/affine-design/issue/BS-3385/markdown类型的导入,支持media文件和md文件不在同目录的情况)

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

- **New Features**
  - Added utility functions to resolve and normalize image file paths in markdown and HTML imports.
  - Introduced middleware to provide full file path context during file import and transformation.
  - Added new types for improved asset and file management in zip imports.

- **Refactor**
  - Centralized and simplified image processing logic across HTML, Markdown, and Notion HTML adapters for improved maintainability.
  - Enhanced type safety and clarity in file and asset handling during zip imports.

- **Tests**
  - Added comprehensive tests for image file path resolution utility.

- **Documentation**
  - Improved inline code comments explaining file path resolution logic.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 02:30:30 +00:00
Saul-Mirone
2f8d8dbc1e refactor(editor): finish the extension provider migration (#12259)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added AI-powered store extension to support chat and transcription block schemas.
  - Introduced a new database view extension for enhanced database block integration.

- **Refactor**
  - Updated and reorganized import paths for improved code structure and maintainability.
  - Consolidated and streamlined extension registration for store and view managers.

- **Chores**
  - Removed deprecated or redundant extension classes and imports.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 02:18:21 +00:00
yoyoyohamapi
fb16caf192 fix(core): ai find-actions falky (#12257)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Tests**
  - Updated test assertions to use case-insensitive matching for verifying displayed text, improving test reliability across different text casing scenarios.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

> Close  AF-2616
2025-05-14 02:05:45 +00:00
zzj3720
a2a90df276 feat(editor): add grouping support for member property of the database block (#12243)
close: BS-3433

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

- **New Features**
  - Introduced advanced group-by configurations for database blocks with user membership support.
  - Added a React hook for fetching and displaying user information in member-related components.
  - Enabled dynamic user and membership data types in database properties.

- **Improvements**
  - Replaced context-based service access with a dependency injection system for shared services and state.
  - Enhanced type safety and consistency across group-by UI components and data handling.
  - Centralized group data management with a new Group class and refined group trait logic.

- **Bug Fixes**
  - Improved reliability and consistency in retrieving and rendering user and group information.

- **Style**
  - Removed obsolete member selection styles for cleaner UI code.

- **Chores**
  - Registered external group-by configurations via dependency injection.
  - Refactored internal APIs for data sources, views, and group-by matchers to use service-based patterns.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 13:53:37 +00:00
Saul-Mirone
fe2fc892df refactor(editor): remove the legacy common view extension (#12255)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Updated configuration initialization throughout the app by replacing the previous base configuration method with a new one for improved consistency.
  - Removed an internal extension and adjusted related setup logic to streamline extension management.
  - Renamed and simplified configuration methods for better clarity and maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 12:57:55 +00:00
fundon
e4f32cd61e refactor(editor): replace-id middlware (#12250)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Improved the internal structure and clarity of ID handling during import processes, leading to more maintainable and modular code. No changes to user-facing functionality.
- **Chores**
  - Enhanced type definitions for import events to improve code readability and maintainability. No impact on end-user experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 12:27:52 +00:00
doouding
08d6c5a97c refactor(editor): rewrite resize and rotate (#12054)
### Changed

This pr split the old `edgeless-selected-rect` into four focused modules:

- `edgeless-selected-rect`: Provide an entry point for user operation on view layer only, no further logic here.

- `GfxViewInteractionExtension`: Allow you to plug in custom resize/rotate behaviors for block or canvas element. If you don’t register an extension, it falls back to the default behaviours.

- `InteractivityManager`: Provide the API that accepts resize/rotate requests, invokes any custom behaviors you’ve registered, tracks the lifecycle and intermediate state, then hands off to the math engine.

- `ResizeController`: A pure math engine that listens for pointer moves and pointer ups and calculates new sizes, positions, and angles. It doesn’t call any business APIs.

### Customizing an element’s resize/rotate behavior
Call `GfxViewInteractionExtension` with the element’s flavour or type plus a config object. In the config you can define:

- `resizeConstraint` (min/max width & height, lock ratio)
- `handleResize(context)` method that returns an object containing `beforeResize`、`onResizeStart`、`onResizeMove`、`onResizeEnd`
- `handleRotate(context)` method that returns an object containing `beforeRotate`、`onRotateStart`、`onRotateMove`、`onRotateEnd`

```typescript
import { GfxViewInteractionExtension } from '@blocksuite/std/gfx';

GfxViewInteractionExtension(
  flavourOrElementType,
  {
    resizeConstraint: {
      minWidth,
      maxWidth,
      lockRatio,
      minHeight,
      maxHeight
    },
    handleResize(context) {
      return {
        beforeResize(context) {},
        onResizeStart(context) {},
        onResizeMove(context) {},
        onResizeEnd(context) {}
      };
    },
    handleRotate(context) {
      return {
        beforeRotate(context) {},
        onRotateStart(context) {},
        onRotateMove(context) {},
        onRotateEnd(context) {}
      };
    }
  }
);
```

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

- **New Features**
  - Added interaction extensions for edgeless variants of attachment, bookmark, edgeless text, embedded docs, images, notes, frames, AI chat blocks, and various embed blocks (Figma, GitHub, HTML, iframe, Loom, YouTube).
  - Introduced interaction extensions for graphical elements including connectors, groups, mind maps, shapes, and text, supporting constrained resizing and rotation disabling where applicable.
  - Implemented a unified interaction extension framework enabling configurable resize and rotate lifecycle handlers.
  - Enhanced autocomplete overlay behavior based on selection context.

- **Refactor**
  - Removed legacy resize manager and element-specific resize/rotate logic, replacing with a centralized, extensible interaction system.
  - Simplified resize handle rendering to a data-driven approach with improved cursor management.
  - Replaced complex cursor rotation calculations with fixed-angle mappings for resize handles.
  - Streamlined selection rectangle component to use interactivity services for resize and rotate handling.

- **Bug Fixes**
  - Fixed connector update triggers to reduce unnecessary updates.
  - Improved resize constraints enforcement and interaction state tracking.

- **Tests**
  - Refined end-to-end tests to use higher-level resize utilities and added finer-grained assertions on element dimensions.
  - Enhanced mouse movement granularity in drag tests for better simulation fidelity.

- **Chores**
  - Added new workspace dependencies and project references for the interaction framework modules.
  - Extended public API exports to include new interaction types and extensions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 11:29:59 +00:00
Saul-Mirone
4ebeb530e0 refactor(editor): config the extension provider directly (#12252)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
	- Added new export paths to improve module accessibility for foundation store and view components.
	- Introduced new extension points for telemetry, font configuration, link preview cache, and peek view services in the view extension foundation.

- **Improvements**
	- Enhanced flexibility by allowing optional configuration of placeholders in paragraph view extensions.
	- Switched to runtime schema validation for font configuration, increasing reliability.
	- Streamlined service registration for peek view providers.

- **Refactor**
	- Centralized and simplified extension management by removing redundant extension files and consolidating setup logic.
	- Updated internal integration of telemetry, font, and peek view services for improved maintainability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 11:09:21 +00:00
akumatus
39942a0d04 feat(core): switch reasoning models by front-end (#12225)
Close [AI-116](https://linear.app/affine-design/issue/AI-116)
2025-05-13 09:54:20 +00:00
akumatus
74452a0aab feat(core): add optionalModels field in AiPrompt and support the front-end modelId param (#12224)
Close [AI-116](https://linear.app/affine-design/issue/AI-116)

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

- **New Features**
  - Added support for specifying alternative AI models in chat prompts, enabling users to select from multiple available models.
  - Expanded AI model options with new additions: 'gpt-4.1', 'o3', and 'claude-3-5-sonnet-20241022'.

- **Enhancements**
  - Users can now optionally choose a specific AI model during chat interactions.
  - Prompts and chat sessions reflect and support selection of alternative models where applicable.

- **Bug Fixes**
  - Improved handling of prompt configuration defaults for better reliability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 09:17:34 +00:00
pengx17
27089e2599 fix(mobile): do not show audio block for mobile (#12249)
fix AF-2608
2025-05-13 09:01:40 +00:00
pengx17
0b6d1eacc8 refactor(electron): use mp4 container instead of webm for encoded audio (#12247)
fix AF-2609
webm container with opus has limited support on Safari. Change to mp4 instead.

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

## Summary by CodeRabbit

- **New Features**
  - Audio recordings are now saved in MP4 format instead of WebM, improving compatibility with a wider range of devices and applications.

- **Chores**
  - Updated dependencies to use MP4 muxing tools in place of WebM.
  - Internal audio encoding utilities and references updated to support MP4 container format.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 09:01:40 +00:00
pengx17
843f1e34c6 feat(electron): better recording quality after device change (#12246)
fix AF-2614

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

- **New Features**
	- Improved audio processing with persistent buffered resampling and thread-local caching for smoother and more reliable sample rate conversion.
- **Bug Fixes**
	- Enhanced handling of stereo and mono audio input, ensuring accurate channel extraction and upmixing.
- **Refactor**
	- Updated internal audio processing logic for better performance and reduced artifacts during audio capture.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 08:46:51 +00:00
EYHN
13d882d6d8 refactor(core): refactor collection to use new filter system (#12228)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new Collection entity and store with reactive management and real-time updates.
  - Added reactive favorite and shared filters with expanded filtering options.
- **Refactor**
  - Overhauled collection and filtering logic for better performance and maintainability.
  - Replaced legacy filtering UI and logic with a streamlined, service-driven rules system.
  - Updated collection components to use reactive data streams and simplified props.
  - Simplified collection creation by delegating ID generation and instantiation to the service layer.
  - Removed deprecated hooks and replaced state-based filtering with observable-driven filtering.
- **Bug Fixes**
  - Improved accuracy and consistency of tag and favorite filtering in collections.
- **Chores**
  - Removed deprecated and unused filter-related files, types, components, and styles to reduce complexity.
  - Cleaned up imports and removed unused code across multiple components.
- **Documentation**
  - Corrected inline documentation for improved clarity.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 08:28:02 +00:00
donteatfriedrice
5dbe6ff68b fix(editor): notion text adapter should handle text without styles correctly (#12248)
Closes: [BS-3486](https://linear.app/affine-design/issue/BS-3486/粘贴从-notion-复制的内容出错)

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved handling of Notion text segments with empty or invalid style arrays, ensuring plain text and styled text are both processed correctly and preventing errors from malformed input.
- **Tests**
  - Added a test case to verify correct conversion of Notion text with empty styles arrays.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 08:05:30 +00:00
pengx17
b4dbc5b6e7 fix(electron): recorded audio is not correctly rendered after saved as attachment (#12232)
fix AF-2611

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

## Summary by CodeRabbit

- **Refactor**
  - Improved the process for adding audio attachments after a recording is ready, ensuring all details (name, type, size, source, embed) are included at creation for a smoother and more reliable user experience.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 06:52:09 +00:00
pengx17
7e80cb336e fix(electron): streaming audio encoding not working (#12231)
fix AF-2612

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

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved handling of recording status updates to prevent unwanted side effects after closing the recording popup.
  - Enhanced error handling and logging for internal communication, ensuring errors are logged and do not disrupt the user experience.
  - Refined control flow for stream encoding to avoid unnecessary errors when encoders are closed.
- **Refactor**
  - Updated popup window readiness and lifecycle management for more reliable behavior and clearer logging.
  - Adjusted recording state management to allow more precise control over status updates and emissions.
- **Style**
  - Added additional logging for popup and recording operations to aid in troubleshooting and transparency.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 06:52:09 +00:00
pengx17
9d116426f8 fix(core): meeting settings issues (#12226)
fix AF-2606

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

- **New Features**
  - The "meetings" settings panel is now only visible on macOS when using the Electron build.
  - The "Meetings Settings..." menu item in the recording menu appears only when recording functionality is available.

- **Style**
  - Improved the subtitle formatting in the meetings settings panel for clearer visual separation and enhanced readability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 06:52:08 +00:00
donteatfriedrice
0d518adc5b refactor(editor): add cache extension for link preview service (#12196)
Closes: [BS-2578](https://linear.app/affine-design/issue/BS-2578/优化-footnote-预览的逻辑:支持缓存结果,避免重复-loading)

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

- **New Features**
  - Introduced a link preview caching mechanism, enabling faster and more efficient reuse of link preview data across the app.
  - Added a feature flag for enabling or disabling link preview cache, configurable through workspace experimental settings.
  - Enhanced localization with new entries describing the link preview cache feature.

- **Improvements**
  - Updated link preview service architecture for better extensibility and maintainability.
  - Improved integration of feature flags throughout chat and rendering components.

- **Bug Fixes**
  - Fixed tooltip formatting for footnote URLs.

- **Chores**
  - Updated dependencies and localization completeness tracking.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 05:11:34 +00:00
JimmFly
cfe7b7cf29 refactor(core): use workspace role query instead of isOwner query (#12118)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Updated workspace permission handling to use a unified role field within workspace data instead of separate admin and owner flags.
  - Permission checks now rely on the workspace role for determining admin and owner status.
- **Chores**
  - Removed deprecated queries and types related to admin and owner status.
  - Cleaned up internal logic and variable naming for improved consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 03:21:23 +00:00
JimmFly
662614de0d feat(admin): create user with password (#12112)
close AF-2494

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

## Summary by CodeRabbit

- **New Features**
  - Added support for importing users with optional passwords via CSV, including password validation and error handling.
  - Enhanced user creation form to allow password input and validation according to server-configured requirements.
  - User table now displays a password column and provides granular error highlighting for email and password fields.
  - Introduced detailed CSV format guidance and improved import dialog with dynamic content and footer controls.

- **Improvements**
  - Updated import dialog workflow for clearer CSV formatting guidance and improved user feedback during import.
  - Refined dropdown menu actions and improved UI clarity for user management actions.

- **Bug Fixes**
  - Corrected menu action handlers for "Edit" and "Reset Password" in user actions dropdown.

- **Chores**
  - Refactored import dialog code into modular components for maintainability and clarity.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-13 02:43:01 +00:00
Mirone
1426a38c9f refactor(editor): extract ai extension builder (#12240) 2025-05-13 09:33:32 +08:00
Saul-Mirone
cb550b7b21 refactor(editor): extract mobile extension builder (#12239)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new mobile view extension that activates mobile-specific UI features based on the runtime environment.
  - Automatically enables mobile keyboard toolbar and linked document menu features in mobile contexts.

- **Improvements**
  - Simplified code and paragraph block configurations on mobile, including disabling line numbers and adjusting placeholders.
  - Enhanced configuration chaining to include mobile-specific settings by default.
  - Improved extension registration flow with method chaining support.

- **Refactor**
  - Removed deprecated mobile patch classes and configurations, consolidating mobile logic into dedicated extensions.
  - Streamlined mobile-related code for better maintainability and performance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 12:54:51 +00:00
L-Sun
0464e03b92 chore(editor): add telemetry for note, embed doc and linked doc (#12234)
Close [BS-3480](https://linear.app/affine-design/issue/BS-3480/event-tracking)

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

## Summary by CodeRabbit

- **New Features**
  - Added telemetry tracking to toolbar actions for embedding documents, duplicating notes, and toggling note display modes.
  - Telemetry events now track when new note blocks are created from drag-and-drop actions on the whiteboard.

- **Chores**
  - Improved event tracking for user interactions to enhance analytics and usage insights.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 18:12:16 +08:00
L-Sun
42ae6e6e40 feat(editor): group configuration of note styles to panel from toolbar (#12230)
Close [BS-3401](https://linear.app/affine-design/issue/BS-3401/note-style-需要合并同类项)

![CleanShot 2025-05-12 at 14.23.01.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/ddf8623f-aa9c-491e-a7bf-90419fb19848.png)
2025-05-12 09:42:52 +00:00
L-Sun
f3ca17fcb3 refactor(editor): extract slider component (#12210)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new slider component for line width selection, providing a more interactive and streamlined UI.
  - Added support for using the slider component across relevant panels.
- **Improvements**
  - Simplified the line width selection panel for easier use and improved maintainability.
  - Enhanced event handling to prevent dropdowns from closing when interacting with the panel.
- **Bug Fixes**
  - Improved event propagation control within the line styles panel.
- **Chores**
  - Updated package exports to include the new slider component.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 09:42:52 +00:00
Saul-Mirone
bc00a58ae1 feat(editor): feature flag store extension builder (#12235)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Introduced feature flag synchronization for enhanced control over feature availability.
  - Added new configuration options for store management, allowing initialization and feature flag setup.

- **Improvements**
  - Updated how store extensions are accessed throughout the app for more robust initialization and configuration.
  - Enhanced workspace entities to support feature flag services, improving flexibility for workspace-specific features.
  - Centralized configuration of storage implementations for Electron environments.

- **Refactor**
  - Simplified editor module by removing direct feature flag synchronization logic.
  - Streamlined imports and configuration for storage modules, especially in Electron-based apps.

- **Bug Fixes**
  - Ensured consistent retrieval of store extensions across various modules and platforms.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 09:29:15 +00:00
Flrande
ef3775e8a9 fix(editor): add width height for html preview (#12229)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Style**
  - Updated the HTML preview iframe to display at full width and a fixed height for improved appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 08:41:16 +00:00
Flrande
476c593c18 fix(editor): add fallback tip when no cross-origin isolated (#12204)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added a user-facing message in the HTML preview component to inform users when their browser does not support required features, with a suggestion to download the AFFiNE Desktop App.

- **Style**
  - Updated styles to ensure fallback and error messages share a consistent appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 04:54:47 +00:00
akumatus
8cbefba341 fix(core): cannot abort AI chat immediately after sending a message (#12209)
Close [AI-118](https://linear.app/affine-design/issue/AI-118)

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

## Summary by CodeRabbit

- **New Features**
  - The abort button in the chat input is now available during both "transmitting" and "loading" states, giving users more control to cancel ongoing actions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 03:47:05 +00:00
fengmk2
62fe906f04 chore(server): add server genconfig git status check (#12202) 2025-05-12 02:42:00 +00:00
renovate
b93c261adb chore: Lock file maintenance (#12223)
This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency versions.

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJjYW5hcnkiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
2025-05-12 02:19:30 +00:00
EYHN
a6394b7988 feat(core): add default filter rules for all docs (#12197)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a filter to exclude empty journals from document collections.
  - Added a live-updating list of non-trashed document IDs for improved document management.

- **Improvements**
  - Default filters in the document explorer have been updated to show all items, including trashed ones, unless filters are applied.
  - Enhanced filtering in workspace views to automatically exclude empty journals and trashed documents.
  - Increased the responsiveness of grouped document updates for a smoother user experience.

- **Bug Fixes**
  - Removed unnecessary debug output from the document synchronization, member search, session management, and member selector components.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 02:05:12 +00:00
Saul-Mirone
6fb7f51ea2 refactor(editor): history as a store extension (#12214)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Improved history and undo/redo management across the app by introducing a dedicated history extension. Undo/redo operations now use a more focused undo manager, resulting in clearer and more consistent behavior.
- **Documentation**
  - Updated API documentation to reflect changes in history management, including revised method signatures and removal of outdated event references.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 01:50:57 +00:00
Saul-Mirone
e91e0e1812 refactor(editor): split turbo renderer and cloud view builder (#12213)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced dedicated extensions for cloud features, turbo renderer, and PDF embed preview, enabling modular and configurable view options.
  - Added audio embed preview support for attachments, enhancing the audio file viewing experience.

- **Refactor**
  - Streamlined editor view configuration with modular extension registration.
  - Simplified extension setup by removing some feature flags and related services from core editor configuration.

- **Chores**
  - Updated internal worker configuration paths for improved organization.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-12 01:36:41 +00:00
renovate
4c8e11aa25 chore: bump up lint-staged version to v16 (#12217)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [lint-staged](https://redirect.github.com/lint-staged/lint-staged) | [`^15.2.11` -> `^16.0.0`](https://renovatebot.com/diffs/npm/lint-staged/15.5.2/16.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/16.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lint-staged/16.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lint-staged/15.5.2/16.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.5.2/16.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>lint-staged/lint-staged (lint-staged)</summary>

### [`v16.0.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1600)

[Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v15.5.2...v16.0.0)

##### Major Changes

-   [#&#8203;1546](https://redirect.github.com/lint-staged/lint-staged/pull/1546) [`158d15c`](158d15c9ae) Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj)! - Processes are spawned using [nano-spawn](https://redirect.github.com/sindresorhus/nano-spawn) instead of [execa](https://redirect.github.com/sindresorhus/execa). If you are using Node.js scripts as tasks, you might need to explicitly run them with `node`, especially when using Windows:

    ```json
    {
      "*.js": "node my-js-linter.js"
    }
    ```

-   [#&#8203;1546](https://redirect.github.com/lint-staged/lint-staged/pull/1546) [`158d15c`](158d15c9ae) Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj)! - The `--shell` flag has been removed and *lint-staged* no longer supports evaluating commands directly via a shell. To migrate existing commands, you can create a shell script and invoke it instead. Lint-staged will pass matched staged files as a list of arguments, accessible via `"$@&#8203;"`:

    ```shell
    ```

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJjYW5hcnkiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
2025-05-11 10:14:55 +00:00
fundon
7f3e0dc52f feat(editor): improve status display in image block (#12194)
Closes: [BS-3451](https://linear.app/affine-design/issue/BS-3451/image-block-status-组件)
2025-05-10 08:48:57 +00:00
fundon
b3f0f38b41 feat(editor): improve status display in attachment embed view (#12180)
Closes: [BS-3438](https://linear.app/affine-design/issue/BS-3438/attachment-embed-view-中的-status-组件)
Closes: [BS-3447](https://linear.app/affine-design/issue/BS-3447/触发-litportal-re-render)

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

- **New Features**
  - Introduced a visual status indicator for embedded attachments with reload capability.
  - Added a new resource status component to display error messages and reload actions.
- **Improvements**
  - Enhanced attachment rendering flow with reactive state and unified embed handling.
  - Simplified resource state and blob URL lifecycle management.
  - Added status visibility flags for PDF and video embeds.
- **Bug Fixes**
  - Improved error handling and refresh support for embedded content including PDFs, videos, and audio.
- **Style**
  - Added styles for the attachment embed status indicator positioning.
- **Refactor**
  - Streamlined attachment and resource controller implementations for better maintainability.
- **Tests**
  - Added end-to-end test verifying PDF viewer reload and re-rendering in embed mode.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-10 08:34:47 +00:00
CatsJuice
66500669c8 perf(core): optimize rendering of all docs (#12188)
close AF-2605

[CleanShot 2025-05-08 at 13.56.38.mp4 <span class="graphite__hidden">(uploaded via Graphite)</span> <img class="graphite__hidden" src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/LakojjjzZNf6ogjOVwKE/4e36e838-7c7f-4f0a-89a8-fd582c2ef573.mp4" />](https://app.graphite.dev/media/video/LakojjjzZNf6ogjOVwKE/4e36e838-7c7f-4f0a-89a8-fd582c2ef573.mp4)

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

## Summary by CodeRabbit

- **Refactor**
  - Centralized state management in the document explorer using a reactive context, replacing prop drilling and local state with observable streams for preferences, selection, grouping, and view options.
  - Updated multiple components (display menus, quick actions, doc list items, group headers) to consume and update state directly via context observables.
  - Simplified component signatures by removing now-unnecessary props related to preferences and state handlers.

- **Style**
  - Adjusted user avatar display: avatars now only have right margin when user names are shown, and vertical alignment was improved.

- **New Features**
  - User avatar elements now include a data attribute to indicate if the user name is displayed.

- **Bug Fixes**
  - Improved handling of document tags to prevent errors when tags are not in the expected format.

- **Documentation**
  - Added missing group header property for updated date fields in workspace property types.

- **Chores**
  - Clarified and renamed internal types for quick actions to improve code clarity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-10 07:01:49 +00:00
fundon
76b4da54b7 chore(core): pdf viewer is enabled by default (#12207)
Related to: [BS-3101](https://linear.app/affine-design/issue/BS-3101/pdf-embed-模式的选中框选-和点开看详情有比较大的问题)

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

- **New Features**
  - PDF embed preview is now enabled by default for all users, regardless of workspace sharing mode.

- **Bug Fixes**
  - Improved reliability of PDF viewer interaction in tests by updating the element used for visibility checks.
  - Enabled opening the PDF viewer peek view in readonly and sharing modes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-10 03:55:04 +00:00
renovate
67b3c64b4e chore: bump up oxlint version to v0.16.10 (#12206)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [oxlint](https://oxc.rs) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxlint)) | [`0.16.9` -> `0.16.10`](https://renovatebot.com/diffs/npm/oxlint/0.16.9/0.16.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.16.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.16.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.16.9/0.16.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.16.9/0.16.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxlint)</summary>

### [`v0.16.10`](https://redirect.github.com/oxc-project/oxc/releases/tag/oxlint_v0.16.10): oxlint v0.16.10

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxlint_v0.16.9...oxlint_v0.16.10)

#### \[0.16.10] - 2025-05-09

##### Features

-   [`e1bc037`](https://redirect.github.com/oxc-project/oxc/commit/e1bc037) language_server: Request for workspace configuration when client did not send them in `initialize` ([#&#8203;10789](https://redirect.github.com/oxc-project/oxc/issues/10789)) (Sysix)
-   [`3bd339b`](https://redirect.github.com/oxc-project/oxc/commit/3bd339b) language_server: Provide commands / code actions for unopened files ([#&#8203;10815](https://redirect.github.com/oxc-project/oxc/issues/10815)) (Sysix)
-   [`4c62348`](https://redirect.github.com/oxc-project/oxc/commit/4c62348) linter: Regex/no-useless-backreference ([#&#8203;10773](https://redirect.github.com/oxc-project/oxc/issues/10773)) (camc314)
-   [`d7ebdd7`](https://redirect.github.com/oxc-project/oxc/commit/d7ebdd7) linter: Add unicorn/no-unnecessary-slice-end rule ([#&#8203;10826](https://redirect.github.com/oxc-project/oxc/issues/10826)) (yefan)

##### Bug Fixes

-   [`f3cc3a2`](https://redirect.github.com/oxc-project/oxc/commit/f3cc3a2) language_server: Request client for configuration when no configuration is passed in `workspace/didChangeConfiguration` ([#&#8203;10871](https://redirect.github.com/oxc-project/oxc/issues/10871)) (Sysix)
-   [`24fcb1e`](https://redirect.github.com/oxc-project/oxc/commit/24fcb1e) language_server: Return server version `initialize` response ([#&#8203;10810](https://redirect.github.com/oxc-project/oxc/issues/10810)) (Sysix)
-   [`7d09973`](https://redirect.github.com/oxc-project/oxc/commit/7d09973) linter: False positive with `withResolvers` in prefer-await-to-then ([#&#8203;10896](https://redirect.github.com/oxc-project/oxc/issues/10896)) (camc314)
-   [`9b94300`](https://redirect.github.com/oxc-project/oxc/commit/9b94300) linter: Mark fixer as dangerous for erasing-op ([#&#8203;10868](https://redirect.github.com/oxc-project/oxc/issues/10868)) (camc314)
-   [`ae70cc1`](https://redirect.github.com/oxc-project/oxc/commit/ae70cc1) linter: Add missing option to `no-shadow-restricted-names` ([#&#8203;10827](https://redirect.github.com/oxc-project/oxc/issues/10827)) (camc314)
-   [`b2c287f`](https://redirect.github.com/oxc-project/oxc/commit/b2c287f) linter/no-unused-vars: Fixer cannot delete usused for in/of iterators ([#&#8203;10824](https://redirect.github.com/oxc-project/oxc/issues/10824)) (DonIsaac)
-   [`5ce0a68`](https://redirect.github.com/oxc-project/oxc/commit/5ce0a68) linter/no-unused-vars: Recognize parameters used in await/yield expressions within comma expressions ([#&#8203;10808](https://redirect.github.com/oxc-project/oxc/issues/10808)) (magic-akari)

##### Performance

-   [`00ffbc9`](https://redirect.github.com/oxc-project/oxc/commit/00ffbc9) language_server: Do not request for configuration when all workers are ready ([#&#8203;10897](https://redirect.github.com/oxc-project/oxc/issues/10897)) (Sysix)
-   [`96cca22`](https://redirect.github.com/oxc-project/oxc/commit/96cca22) language_server: Use `simdutf8` when reading files from file system ([#&#8203;10814](https://redirect.github.com/oxc-project/oxc/issues/10814)) (Sysix)

##### Documentation

-   [`efaadd3`](https://redirect.github.com/oxc-project/oxc/commit/efaadd3) linter: Fix a few incorrect backticks in `no_restricted_imports` ([#&#8203;10914](https://redirect.github.com/oxc-project/oxc/issues/10914)) (Boshen)
-   [`ccda8f0`](https://redirect.github.com/oxc-project/oxc/commit/ccda8f0) linter: Improve no-plusplus docs ([#&#8203;10885](https://redirect.github.com/oxc-project/oxc/issues/10885)) (Peter Cardenas)
-   [`5f15809`](https://redirect.github.com/oxc-project/oxc/commit/5f15809) linter: Improve docs for jsdoc/require-property ([#&#8203;10705](https://redirect.github.com/oxc-project/oxc/issues/10705)) (camc314)

##### Refactor

-   [`553ab5b`](https://redirect.github.com/oxc-project/oxc/commit/553ab5b) language_server: Remove `OnceCell` from `WorkspaceWorker.root_uri` ([#&#8203;10898](https://redirect.github.com/oxc-project/oxc/issues/10898)) (Sysix)
-   [`f43fd18`](https://redirect.github.com/oxc-project/oxc/commit/f43fd18) language_server: Move the initialization of `ServerLinter` into a separate call ([#&#8203;10776](https://redirect.github.com/oxc-project/oxc/issues/10776)) (Sysix)
-   [`39e0463`](https://redirect.github.com/oxc-project/oxc/commit/39e0463) language_server: Move `nested_configs` to `ServerLinter` ([#&#8203;10775](https://redirect.github.com/oxc-project/oxc/issues/10775)) (Sysix)
-   [`9ec13f6`](https://redirect.github.com/oxc-project/oxc/commit/9ec13f6) language_server: Move `gitignore_glob` to `ServerLinter` ([#&#8203;10762](https://redirect.github.com/oxc-project/oxc/issues/10762)) (Sysix)
-   [`3d47159`](https://redirect.github.com/oxc-project/oxc/commit/3d47159) language_server: Use `IsolatedLintHandlerFileSystem` ([#&#8203;10830](https://redirect.github.com/oxc-project/oxc/issues/10830)) (Sysix)
-   [`3d794f6`](https://redirect.github.com/oxc-project/oxc/commit/3d794f6) language_server: Move functions related to `ServerLinter` to `ServerLinter` ([#&#8203;10761](https://redirect.github.com/oxc-project/oxc/issues/10761)) (Sysix)
-   [`79819cc`](https://redirect.github.com/oxc-project/oxc/commit/79819cc) linter: Move around some config store logic ([#&#8203;10861](https://redirect.github.com/oxc-project/oxc/issues/10861)) (camc314)
-   [`e132aba`](https://redirect.github.com/oxc-project/oxc/commit/e132aba) linter: Extract nested config searching to a fn ([#&#8203;10860](https://redirect.github.com/oxc-project/oxc/issues/10860)) (camc314)
-   [`243c247`](https://redirect.github.com/oxc-project/oxc/commit/243c247) linter: Able to use custom file system in runtime ([#&#8203;10828](https://redirect.github.com/oxc-project/oxc/issues/10828)) (Sysix)
-   [`efb4fb8`](https://redirect.github.com/oxc-project/oxc/commit/efb4fb8) oxlint: Avoid result unwrap ([#&#8203;10836](https://redirect.github.com/oxc-project/oxc/issues/10836)) (camc314)

##### Testing

-   [`47b946d`](https://redirect.github.com/oxc-project/oxc/commit/47b946d) linter: Use `TesterFileSystem` for `Runtime`s filesystem ([#&#8203;10829](https://redirect.github.com/oxc-project/oxc/issues/10829)) (Sysix)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC43LjEiLCJ1cGRhdGVkSW5WZXIiOiI0MC43LjEiLCJ0YXJnZXRCcmFuY2giOiJjYW5hcnkiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
2025-05-10 03:31:03 +00:00
Saul-Mirone
8704c98c7e feat(editor): implement view extension manager with builder pattern (#12193)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Refactor**
  - Streamlined and modularized the configuration of editor and theme extensions, introducing a chainable API for extension management.
  - Migrated extension setup to use new provider classes and centralized patch logic, improving maintainability and consistency.
  - Updated internal extension retrieval processes to use a more explicit, stepwise initialization sequence.
  - Removed legacy theme and editor config registration from common views and editor setups.
  - Removed direct patch registrations from editor views, consolidating them into extension providers.
  - Renamed classes and variables for clarity and consistency across the codebase.

- **New Features**
  - Added new extension providers for editor configuration, theme management, and edgeless block header customization, enabling more flexible and validated extension registration.
  - Introduced animated viewport focus and dynamic header rendering for edgeless notes and embedded synced documents.
  - Integrated reactive editor settings and toolbar configurations with workspace-aware base URL resolution.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 10:26:05 +00:00
zzj3720
7b6e00d84a refactor(editor): replace @vanilla-extract/css with @emotion/css (#12195)
close: BS-3446

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

- **Refactor**
  - Migrated all styling from vanilla-extract to Emotion for improved CSS-in-JS consistency across database, table, and data view components.
  - Updated import paths for style modules to reflect the new Emotion-based file naming.
  - Removed unused or redundant style exports and updated selector syntax where necessary.

- **Chores**
  - Updated dependencies: removed vanilla-extract and added Emotion in relevant package files.

- **Style**
  - No visual changes to existing components; all style definitions remain consistent with previous designs.

- **New Features**
  - Introduced new reusable CSS classes for data view and table components using Emotion.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 10:08:03 +00:00
doodlewind
a5872dff65 fix(editor): database scroll regression on mobile safari (#12203)
This won't affect desktop behavior, since the `MobileDataViewTable` is a standalone entry different with the default `DataViewTable`.

Horizontal scrolling needs to be disabled to prevent Safari render bug.

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

- **Style**
  - Updated table view styling on mobile to disable horizontal scrolling, improving stability on iOS Safari.
  - Removed platform-specific horizontal scrolling behavior for tables on desktop for a consistent experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 09:52:55 +00:00
CatsJuice
7013f9b804 feat(core): new all docs header (#12182)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new grouped document explorer with a masonry layout, advanced filtering, and multi-select capabilities.
  - Added a floating toolbar for batch actions, such as deleting multiple documents.
  - Implemented a feature flag to enable the new "All Docs" page, allowing gradual rollout.
  - Added a new navigation component with links for Docs, Collections, and Tags.
  - Introduced a display menu button supporting additional menu properties.

- **Enhancements**
  - Redesigned navigation headers across document, collection, and tag pages for improved consistency and usability.
  - Added new display and view toggling options for document lists.
  - Improved styling and responsiveness for explorer and header components.
  - Updated context to support dynamic view switching in the document explorer.

- **Bug Fixes**
  - Updated context and prop types to enhance state management and user interactions.

- **Refactor**
  - Replaced legacy page list views with a modern, grouped explorer interface.
  - Simplified and modularized header components and styles for better maintainability.
  - Removed workspace-specific controls from document headers to focus on explorer functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 09:38:48 +00:00
darkskygit
5f5de8e89d feat(server): workspace doc update event from indexer (#12186)
fix AI-108
fix AI-109
fix AI-13
2025-05-09 07:35:47 +00:00
darkskygit
918b3b2dab feat(server): permission check for workspace doc match (#12139)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved permission checks to ensure users only see document chunks they have read access to.
  - Enhanced error handling for clearer and more user-friendly error messages.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 07:35:47 +00:00
Saul-Mirone
97aa3fc672 fix(editor): array proxy splice will cause too large yjs update (#12201)
Splice will produce large yjs updates for splice because it will call insert and delete operation for every item in yarray.
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for `splice`, `shift`, and `unshift` methods on reactive arrays, enabling enhanced dynamic array operations with synchronization.
- **Tests**
  - Expanded test coverage for array operations including `push`, `splice`, `shift`, and `unshift`, verifying complete array state after each change.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 06:19:57 +00:00
CatsJuice
2e3b721603 feat(core): new all docs list ui (#12102)
### New all docs list ui
close AF-2531, AF-2585, AF-2586, AF-2580

### What changed

- a new `display-menu` component
  - properties visibility
  - quick actions visibility
- extend DocPropertyType definition
  - `showInDocList`: configure whether to show in doc and how to show (stack | inline)
  - `docListProperty`: define how to render property in doc
  - `groupHeader`: define how to render group header when grouped
- implement all properties's `docListProperty` renderer and `groupHeader` renderer
- new `docs-view` component
  - render doc in `card` | `list` view
  - split doc card into minimal components for reuse in list and card views, as well as visibility control
- implement docs-list with `<Masonry />` and multi-view support
  - for list view, make masonry column count always `1`

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

- **New Features**
  - Redesigned document explorer with multiple view modes (list, grid, masonry), grouping, selection, and multi-delete.
  - Added customizable display properties and quick actions (favorite, trash, split view, new tab, select) for documents.
  - Introduced new group header and document item components with improved styling and interaction.
  - Enabled dynamic rendering of document properties including tags, dates, users, templates, and themes.
  - Added filtering support for trash status and enhanced localization for UI elements.
  - Introduced drag handle size customization and expanded masonry layout configurability.
  - Added contextual "More" menu with document operations like favorite, info, duplicate, and trash.
  - Implemented shared context for explorer state management and multi-selection logic.

- **Enhancements**
  - Improved virtual scrolling with active item tracking and configurable preload and debounce settings.
  - Responsive, theme-aware styling applied across explorer and property components.
  - Configurable UI elements and quick actions via user preferences.
  - Enhanced error messages for unsupported property types in filters.
  - Refined padding and layout calculations in masonry component for better visual consistency.
  - Avatar and date components refactored for explicit prop-driven rendering and customization.

- **Bug Fixes**
  - Improved error messages for unsupported property types in filters.

- **Documentation**
  - Added new localization keys and updated language completeness for new features.

- **Chores**
  - Modularized workspace property types with list and group header display components.
  - Consolidated imports and enhanced code maintainability.
  - Added new CSS styling modules for explorer components and workspace property types.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 05:31:11 +00:00
forehalo
93e01b4442 feat(server): support installable license (#12181)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added support for installing self-hosted team licenses via encrypted license files.
  - Introduced a new "Onetime" license variant for self-hosted environments.
  - Added a GraphQL mutation to upload and install license files.
  - License details now display the license variant.

- **Bug Fixes**
  - Improved error messages for license activation and expiration, including dynamic reasons.

- **Localization**
  - Updated and improved license-related error messages for better clarity.

- **Tests**
  - Added comprehensive end-to-end tests for license installation scenarios.

- **Chores**
  - Enhanced environment variable handling and public key management for license verification.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 04:16:05 +00:00
darkskygit
3db91bdc8e feat(server): expose threshold (#12023) 2025-05-09 03:59:03 +00:00
darkskygit
cb49ab0f69 feat(server): rerank for matching (#12039)
fix AI-20
fix AI-77

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

- **New Features**
  - Enhanced relevance-based re-ranking for embedding results, improving the accuracy of content suggestions.
  - Added prioritization for workspace content that matches specific document IDs in search results.
  - Introduced a new scoped threshold parameter to refine workspace document matching.

- **Improvements**
  - Increased default similarity threshold for file chunk matching, resulting in more precise matches.
  - Doubled candidate retrieval for file and workspace chunk matching to improve result quality.
  - Updated sorting to prioritize context-relevant documents in workspace matches.
  - Explicitly included original input content in re-ranking calls for better relevance assessment.

- **Bug Fixes**
  - Adjusted re-ranking logic to return only highly relevant results based on confidence scores.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 03:59:03 +00:00
yoyoyohamapi
c24fde7168 fix(core): ai input cannot scroll (#12184)
### TL;DR

fix: ai chat input cannot scroll

> CLOSE AI-115

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

## Summary by CodeRabbit

- **Style**
  - Improved the appearance of the vertical scrollbar in the chat input area, making it visible and styled with custom colors and rounded corners.
- **Bug Fixes**
  - The vertical scrollbar in the chat input now appears when needed, instead of being hidden.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 03:45:25 +00:00
yoyoyohamapi
35aaf5f2b8 fix(core): hide onboarding until the ai features are stable (#12198)
> CLOSE AI-114

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

## Summary by CodeRabbit

- **New Features**
  - Temporarily disabled the AI onboarding feature in workspace detail and layout pages.

- **Chores**
  - Added placeholders indicating the suspension of the AI onboarding feature pending future improvements.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 03:31:55 +00:00
CatsJuice
d51008bab5 feat(component): grouped masonry (#11958)
- support group for masonry
- expand/collapse group
- sticky group header

![CleanShot 2025-04-24 at 13.13.53.gif](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/964bdcf0-f3a6-4ec5-881d-5a10f66ea6f5.gif)

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

- **New Features**
  - Enhanced Masonry component with support for grouped items, collapsible and sticky group headers.
  - Added multi-view transitions enabling switching between Masonry, Grid, and List layouts.
  - Introduced virtual scrolling with group support for efficient handling of large datasets.
  - New interactive storybook demonstrations showcasing grouped and multi-view Masonry scenarios.

- **Improvements**
  - List view styling enhancements for improved clarity and layout.
  - Resize panel now supports customizable offset modifications during drag interactions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 03:01:54 +00:00
Flrande
108f9e760e fix(editor): disable html preview when no cross-origin isolated (#12192)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved compatibility by ensuring code block preview features only activate when the browser supports isolated contexts, preventing potential issues in unsupported environments.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-09 02:23:39 +00:00
yoyoyohamapi
6d012f093f fix(core): ai replace selection (#11875)
### TL;DR

* Fix the issue of inaccurate content replacement in AI Replace Selection
* Optimize unit Tests utils

### What Changed
1. Fixed the issue of inaccurate content replacement in AI Replace Selection:
  - Convert the AI Answer into a Snapshot, then transform it into a sequence of Blocks ready for insertion.
   - Invoke the `replaceSelectedTextWithBlocks` command to replace the current selection with blocks (given the complexity of block combinations, this command uses [ts-pattern](https://github.com/gvergnaud/ts-pattern) implementation to ensure compile-time prevention of pattern handling omissions).
2. Optimized unit test assertions for commands, now allowing direct document content comparison using `toEqualDoc`.
```ts
const host = affine`
  <affine-page id="page">
    <affine-note id="note">
      <affine-paragraph id="paragraph-1">Hel<anchor />lo</affine-paragraph>
      <affine-paragraph id="paragraph-2">Wor<focus />ld</affine-paragraph>
    </affine-note>
  </affine-page>
`;

// ....

const expected = affine`
  <affine-page id="page">
    <affine-note id="note">
      <affine-paragraph id="paragraph-1">Hel111</affine-paragraph>
      <affine-code id="code"></affine-code>
      <affine-paragraph id="paragraph-2">222ld</affine-paragraph>
    </affine-note>
  </affine-page>
`;

expect(host.doc).toEqualDoc(expected.doc);
```
3. Added support for text cursors in unit test template syntax.

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

> CLOSE BS-3278

- **New Features**
  - Introduced the ability to replace selected text in documents with blocks, supporting advanced merging and insertion scenarios for various block types.
- **Bug Fixes**
  - Improved handling of text selection and cursor placement in document templates used for testing.
- **Tests**
  - Added comprehensive tests for replacing selected text with blocks, including edge cases and complex selection scenarios.
  - Enhanced test utilities for document structure comparison and selection handling.
  - Updated end-to-end tests to verify correct replacement of selected text via AI-driven actions.
- **Chores**
  - Added and updated dependencies to support new features.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 11:48:19 +00:00
zzj3720
6689bd1914 feat(editor): add created-time and created-by property for database block (#12156)
close: BS-3431

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

- **New Features**
  - Added "Created By" property type and cell renderer, displaying creator's avatar and name in database blocks.
  - Introduced "Created Time" property type and cell renderer, showing formatted creation timestamps.

- **Improvements**
  - Enhanced table and Kanban views with improved column and row movement, hiding, and statistics capabilities.
  - Streamlined property and row management with unified object handling and reactive signals for better performance and reliability.
  - Improved avatar display logic to handle removed or unnamed users gracefully.
  - Refactored property and row APIs to consolidate access patterns and support reactive updates.
  - Updated icon retrieval and reactive value access for improved UI responsiveness in database and Kanban cells.
  - Consolidated property and cell access methods to use "get or create" patterns ensuring consistent data availability.
  - Added locking mechanism to stabilize computed signals during locked states.
  - Modularized table and Kanban column and row abstractions for better encapsulation and maintainability.

- **Bug Fixes**
  - Corrected row and column deletion, movement, and selection behaviors across table and Kanban views.
  - Fixed issues with property and row referencing, ensuring consistent handling of identifiers and objects.
  - Removed debugging logs and fixed method calls to align with updated APIs.

- **Style**
  - Updated and simplified table column header styles for a cleaner appearance.

- **Chores**
  - Added `@emotion/css` dependency for styling support.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 11:35:37 +00:00
EYHN
7c8b977bf9 feat(core): migration for created by and updated by fields (#12171) 2025-05-08 19:34:21 +08:00
L-Sun
11dfc1d1df feat(editor): insert embed doc with quick search by default (#12165)
Close [BS-3404](https://linear.app/affine-design/issue/BS-3404/通过embed-doc时,插入的doc还是card-view,应该要默认embed-view)

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

- **New Features**
  - Added the ability to insert and display embedded synced documents, supporting different link types based on editor mode and user preferences.
  - Introduced new UI interactions and view options for embedded synced documents in edgeless mode.

- **Bug Fixes**
  - Updated UI selectors and preference keys to ensure consistent behavior and correct application of user settings.

- **Tests**
  - Added and updated end-to-end tests for embedding synced documents, including header interactions and viewport fitting.
  - Improved test coverage for quick search insertion and edgeless embed synced doc features.

- **Chores**
  - Renamed settings and updated exports to align with new embedding functionality.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 10:21:33 +00:00
JimmFly
d379143db3 refactor(core): use overcapacityMemberCount for quota checking instead of calculating the difference (#12117)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Improved accuracy of member quota warnings by updating the logic that detects when the member limit has been exceeded.
  - Enhanced test reliability by adjusting member list pagination test to better handle confirmation modals.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 09:55:23 +00:00
EYHN
52253e9e82 fix(nbstore): update workspace blob quota query (#12191)
Change the query for querying quota of Cloud Blob Storage.

The original query used new fields, which caused errors in the old version of the server. This PR uses a simpler query to ensure compatibility.

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

## Summary by CodeRabbit

- **New Features**
  - Added the ability to retrieve a workspace's blob storage quota, including both the raw limit and a human-readable format, via a new query.

- **Bug Fixes**
  - Updated quota retrieval to use the new blob-specific quota query for improved accuracy.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 09:14:54 +00:00
pengx17
86742c1307 fix(core): public user avatar label mis-alignment (#12057)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/09d6b833-2285-405b-b3ef-ec67dbdad147.png)

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

## Summary by CodeRabbit

- **Style**
  - Improved vertical alignment and positioning of elements in the public user label component for a more polished appearance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 08:58:28 +00:00
EYHN
8399d99e79 feat(core): add collection rules module (#11683)
whats changed:

### orm

add a new `select$` method, can subscribe on only one field to improve batch subscribe performance

### yjs-observable

add a new `yjsObservePath` method, which can subscribe to changes from specific path in yjs. Improves batch subscribe performance

```ts
yjsGetPath(
      this.workspaceService.workspace.rootYDoc.getMap('meta'),
      'pages'
    ).pipe(
      switchMap(pages => yjsObservePath(pages, '*.tags')),
      map(pages => {
          // only when tags changed
      })
)
```

### standard property naming

All `DocProperty` components renamed to `WorkspaceProperty` which is consistent with the product definition.

### `WorkspacePropertyService`

Split the workspace property management logic from the `doc` module and create a new `WorkspacePropertyService`. The new service manages the creation and modification of properties, and the `docService` is only responsible for storing the property value data.

### new `<Filters />` component

in `core/component/filter`

### new `<ExplorerDisplayMenuButton />` component

in `core/component/explorer/display-menu`

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/g3jz87HxbjOJpXV3FPT7/c47ab43c-ac53-4ab6-922e-03127d07bef3.png)

### new `/workspace/xxx/all-new` route

New route for test components and functions

### new collection role service

Implemented some filter group order rules

see `collection-rules/index.ts`

### standard property type definition

define type in `modules\workspace-property\types.ts`

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/g3jz87HxbjOJpXV3FPT7/4324453a-4fab-4d1e-83bb-53693e68e87a.png)

define components (name,icon,....) in `components\workspace-property-types\index.ts`

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/g3jz87HxbjOJpXV3FPT7/93a23947-aaff-480d-a158-dd4075baae17.png)

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

- **New Features**
  - Introduced comprehensive filtering, grouping, and ordering capabilities for workspace documents with reactive updates.
  - Added a new "All Pages" workspace view supporting dynamic filters and display preferences.
  - Developed UI components for filter creation, condition editing, and display menu controls.
  - Launched enhanced tag management with inline editors, selection, creation, and deletion workflows.
  - Added workspace property types with dedicated filter UIs including checkbox, date, tags, and text.
  - Introduced workspace property management replacing document property handling.
  - Added modular providers for filters, group-by, and order-by operations supporting various property types and system attributes.

- **Improvements**
  - Standardized tag and property naming conventions across the application (using `name` instead of `value` or `title`).
  - Migrated document property handling to workspace property-centric logic.
  - Enhanced internationalization with additional filter and display menu labels.
  - Improved styling for filter conditions, display menus, and workspace pages.
  - Optimized reactive data subscriptions and state management for performance.
  - Refined schema typings and type safety for workspace properties.
  - Updated imports and component references to workspace property equivalents throughout frontend.

- **Bug Fixes**
  - Resolved tag property inconsistencies affecting display and filtering.
  - Fixed filter and tag selection behaviors for accurate and reliable UI interactions.

- **Chores**
  - Added and refined test cases for ORM, observables, and filtering logic.
  - Cleaned up legacy document property code and improved type safety.
  - Modularized and restructured components for better maintainability.
  - Introduced new CSS styles for workspace pages and display menus.
  - Added framework module configurations for collection rules and workspace property features.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 08:38:56 +00:00
fengmk2
f9e003d220 chore(server): typo fix on cpu.doc (#12189)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Corrected CPU resource allocation for the documentation service to ensure accurate deployment configuration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 08:08:13 +00:00
EYHN
2d1600fa00 refactor(core): implement doc created/updated by service (#12150)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Documents now automatically track and display "created by" and "updated by" user information.
  - Document creation and update timestamps are now managed and shown more accurately.
  - Workspace and document metadata (name, avatar) updates are more responsive and reliable.
  - Document creation supports middleware for customizing properties and behavior.

- **Improvements**
  - Simplified and unified event handling for document list updates, reducing redundant event subscriptions.
  - Enhanced integration of editor and theme settings into the document creation process.
  - Explicit Yjs document initialization for improved workspace stability and reliability.
  - Consolidated journal-related metadata display in document icons and titles for clarity.

- **Bug Fixes**
  - Fixed inconsistencies in how workspace and document names are set and updated.
  - Improved accuracy of "last updated" indicators by handling timestamps automatically.

- **Refactor**
  - Removed deprecated event subjects and direct metadata manipulation in favor of more robust, reactive patterns.
  - Streamlined document creation logic across various features (quick search, journal, recording, etc.).
  - Simplified user avatar display components and removed cloud metadata dependencies.
  - Removed legacy editor setting and theme service dependencies from multiple modules.

- **Chores**
  - Updated internal APIs and interfaces to support new metadata and event handling mechanisms.
  - Cleaned up unused code and dependencies related to editor settings and theme services.
  - Skipped flaky end-to-end test to improve test suite stability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 07:53:33 +00:00
renovate
93d74ff220 chore: bump up all non-major npm dependencies (#12174)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@ai-sdk/anthropic](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.10` -> `1.2.11`](https://renovatebot.com/diffs/npm/@ai-sdk%2fanthropic/1.2.10/1.2.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fanthropic/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fanthropic/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fanthropic/1.2.10/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fanthropic/1.2.10/1.2.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@ai-sdk/google](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.16` -> `1.2.17`](https://renovatebot.com/diffs/npm/@ai-sdk%2fgoogle/1.2.16/1.2.17) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fgoogle/1.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fgoogle/1.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fgoogle/1.2.16/1.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fgoogle/1.2.16/1.2.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@ai-sdk/openai](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.3.21` -> `1.3.22`](https://renovatebot.com/diffs/npm/@ai-sdk%2fopenai/1.3.21/1.3.22) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fopenai/1.3.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fopenai/1.3.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fopenai/1.3.21/1.3.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fopenai/1.3.21/1.3.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@ai-sdk/perplexity](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.1.8` -> `1.1.9`](https://renovatebot.com/diffs/npm/@ai-sdk%2fperplexity/1.1.8/1.1.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fperplexity/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fperplexity/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fperplexity/1.1.8/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fperplexity/1.1.8/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@commitlint/config-conventional](https://commitlint.js.org/) ([source](https://redirect.github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional)) | [`19.8.0` -> `19.8.1`](https://renovatebot.com/diffs/npm/@commitlint%2fconfig-conventional/19.8.0/19.8.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@commitlint%2fconfig-conventional/19.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@commitlint%2fconfig-conventional/19.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@commitlint%2fconfig-conventional/19.8.0/19.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@commitlint%2fconfig-conventional/19.8.0/19.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.15.0` -> `9.16.1`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.15.0/9.16.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.15.0/9.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.15.0/9.16.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.14` -> `22.15.16`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.14/22.15.16) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.14/22.15.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.14/22.15.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [ai](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`4.3.14` -> `4.3.15`](https://renovatebot.com/diffs/npm/ai/4.3.14/4.3.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ai/4.3.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ai/4.3.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ai/4.3.14/4.3.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ai/4.3.14/4.3.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [bullmq](https://bullmq.io/) ([source](https://redirect.github.com/taskforcesh/bullmq)) | [`5.52.1` -> `5.52.2`](https://renovatebot.com/diffs/npm/bullmq/5.52.1/5.52.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/bullmq/5.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/bullmq/5.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/bullmq/5.52.1/5.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/bullmq/5.52.1/5.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [electron](https://redirect.github.com/electron/electron) | [`36.1.0` -> `36.2.0`](https://renovatebot.com/diffs/npm/electron/36.1.0/36.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/36.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/36.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/36.1.0/36.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/36.1.0/36.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.507.0` -> `^0.508.0`](https://renovatebot.com/diffs/npm/lucide-react/0.507.0/0.508.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.508.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.508.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.507.0/0.508.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.507.0/0.508.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [react-hook-form](https://www.react-hook-form.com) ([source](https://redirect.github.com/react-hook-form/react-hook-form)) | [`7.56.2` -> `7.56.3`](https://renovatebot.com/diffs/npm/react-hook-form/7.56.2/7.56.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-hook-form/7.56.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-hook-form/7.56.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-hook-form/7.56.2/7.56.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-hook-form/7.56.2/7.56.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.navigation:navigation-ui-ktx](https://developer.android.com/jetpack/androidx/releases/navigation#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.9` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.navigation:navigation-ui-ktx/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.navigation:navigation-ui-ktx/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.navigation:navigation-ui-ktx/2.8.9/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.navigation:navigation-ui-ktx/2.8.9/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.navigation:navigation-fragment-ktx](https://developer.android.com/jetpack/androidx/releases/navigation#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.9` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.navigation:navigation-fragment-ktx/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.navigation:navigation-fragment-ktx/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.navigation:navigation-fragment-ktx/2.8.9/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.navigation:navigation-fragment-ktx/2.8.9/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.navigation:navigation-compose](https://developer.android.com/jetpack/androidx/releases/navigation#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.9` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.navigation:navigation-compose/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.navigation:navigation-compose/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.navigation:navigation-compose/2.8.9/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.navigation:navigation-compose/2.8.9/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.lifecycle:lifecycle-viewmodel-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.7` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.lifecycle:lifecycle-viewmodel-compose/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.lifecycle:lifecycle-viewmodel-compose/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.lifecycle:lifecycle-viewmodel-compose/2.8.7/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.lifecycle:lifecycle-viewmodel-compose/2.8.7/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.lifecycle:lifecycle-runtime-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.7` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.lifecycle:lifecycle-runtime-compose/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.lifecycle:lifecycle-runtime-compose/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.lifecycle:lifecycle-runtime-compose/2.8.7/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.lifecycle:lifecycle-runtime-compose/2.8.7/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.datastore:datastore-preferences](https://developer.android.com/jetpack/androidx/releases/datastore#1.1.6) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.2.0-alpha01` -> `1.2.0-alpha02` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.datastore:datastore-preferences/1.2.0-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.datastore:datastore-preferences/1.2.0-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.datastore:datastore-preferences/1.2.0-alpha01/1.2.0-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.datastore:datastore-preferences/1.2.0-alpha01/1.2.0-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [androidx.compose:compose-bom](https://developer.android.com/jetpack) | `2025.04.01` -> `2025.05.00` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.compose:compose-bom/2025.05.00?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.compose:compose-bom/2025.05.00?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.compose:compose-bom/2025.04.01/2025.05.00?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.compose:compose-bom/2025.04.01/2025.05.00?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>vercel/ai (@&#8203;ai-sdk/anthropic)</summary>

### [`v1.2.11`](https://redirect.github.com/vercel/ai/releases/tag/%40ai-sdk/react%401.2.11)

[Compare Source](https://redirect.github.com/vercel/ai/compare/@ai-sdk/anthropic@1.2.10...@ai-sdk/anthropic@1.2.11)

##### Patch Changes

-   [`6c59ae7`](https://redirect.github.com/vercel/ai/commit/6c59ae7): feat (ui/react): support resuming an ongoing stream
-   Updated dependencies \[[`6c59ae7`](https://redirect.github.com/vercel/ai/commit/6c59ae7)]
    -   [@&#8203;ai-sdk/ui-utils](https://redirect.github.com/ai-sdk/ui-utils)[@&#8203;1](https://redirect.github.com/1).2.10

</details>

<details>
<summary>conventional-changelog/commitlint (@&#8203;commitlint/config-conventional)</summary>

### [`v19.8.1`](https://redirect.github.com/conventional-changelog/commitlint/blob/HEAD/@&#8203;commitlint/config-conventional/CHANGELOG.md#1981-2025-05-08)

[Compare Source](https://redirect.github.com/conventional-changelog/commitlint/compare/v19.8.0...3c302008cabeb0b08cd246b2417a51a9d745a918)

**Note:** Version bump only for package [@&#8203;commitlint/config-conventional](https://redirect.github.com/commitlint/config-conventional)

</details>

<details>
<summary>getsentry/sentry-javascript (@&#8203;sentry/react)</summary>

### [`v9.16.1`](https://redirect.github.com/getsentry/sentry-javascript/blob/HEAD/CHANGELOG.md#9161)

[Compare Source](https://redirect.github.com/getsentry/sentry-javascript/compare/9.16.0...9.16.1)

-   fix(core): Make sure logs get flushed in server-runtime-client ([#&#8203;16222](https://redirect.github.com/getsentry/sentry-javascript/pull/16222))
-   ref(node): Remove vercel flushing code that does nothing ([#&#8203;16217](https://redirect.github.com/getsentry/sentry-javascript/pull/16217))

### [`v9.16.0`](https://redirect.github.com/getsentry/sentry-javascript/releases/tag/9.16.0)

[Compare Source](https://redirect.github.com/getsentry/sentry-javascript/compare/9.15.0...9.16.0)

##### Important changes

-   **feat: Create a Vite plugin that injects sentryConfig into the global config ([#&#8203;16197](https://redirect.github.com/getsentry/sentry-javascript/pull/16197))**

Add a new plugin `makeConfigInjectorPlugin` within our existing vite plugin that updates the global vite config with sentry options

-   **feat(browser): Add option to sample linked traces consistently ([#&#8203;16037](https://redirect.github.com/getsentry/sentry-javascript/pull/16037))**

This PR implements consistent sampling across traces as outlined in ([#&#8203;15754](https://redirect.github.com/getsentry/sentry-javascript/pull/15754))

-   **feat(cloudflare): Add support for durable objects ([#&#8203;16180](https://redirect.github.com/getsentry/sentry-javascript/pull/16180))**

This PR introduces a new `instrumentDurableObjectWithSentry` method to the SDK, which instruments durable objects. We capture both traces and errors automatically.

-   **feat(node): Add Prisma integration by default ([#&#8203;16073](https://redirect.github.com/getsentry/sentry-javascript/pull/16073))**

[Prisma integration](https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/integrations/prisma/) is enabled by default, it should work for both ESM and CJS.

-   **feat(react-router): Add client-side router instrumentation ([#&#8203;16185](https://redirect.github.com/getsentry/sentry-javascript/pull/16185))**

Adds client-side instrumentation for react router's `HydratedRouter`. To enable it, simply replace `browserTracingIntegration()` with `reactRouterTracingIntegration()` in your client-side init call.

-   **fix(node): Avoid double-wrapping http module ([#&#8203;16177](https://redirect.github.com/getsentry/sentry-javascript/pull/16177))**

When running your application in ESM mode, there have been scenarios that resulted in the `http`/`https` emitting duplicate spans for incoming requests. This was apparently caused by us double-wrapping the modules for incoming request isolation.

In order to solve this problem, the modules are no longer monkey patched by us for request isolation. Instead, we register diagnostics*channel hooks to handle request isolation now.
While this is generally not expected to break anything, there is one tiny change that \_may* affect you if you have been relying on very specific functionality:

The `ignoreOutgoingRequests` option of `httpIntegration` receives the `RequestOptions` as second argument. This type is not changed, however due to how the wrapping now works, we no longer pass through the full RequestOptions, but re-construct this partially based on the generated request. For the vast majority of cases, this should be fine, but for the sake of completeness, these are the only fields that may be available there going forward - other fields that *may* have existed before may no longer be set:

```ts
ignoreOutgoingRequests(url: string, {
  method: string;
  protocol: string;
  host: string;
  hostname: string; // same as host
  path: string;
  headers: OutgoingHttpHeaders;
})
```

##### Other changes

-   feat(cloudflare): Add logs exports ([#&#8203;16165](https://redirect.github.com/getsentry/sentry-javascript/pull/16165))
-   feat(vercel-edge): Add logs export ([#&#8203;16166](https://redirect.github.com/getsentry/sentry-javascript/pull/16166))
-   feat(cloudflare): Read `SENTRY_RELEASE` from `env` ([#&#8203;16201](https://redirect.github.com/getsentry/sentry-javascript/pull/16201))
-   feat(node): Drop `http.server` spans with 404 status by default ([#&#8203;16205](https://redirect.github.com/getsentry/sentry-javascript/pull/16205))
-   fix(browser): Respect manually set sentry tracing headers in XHR requests ([#&#8203;16184](https://redirect.github.com/getsentry/sentry-javascript/pull/16184))
-   fix(core): Respect manually set sentry tracing headers in fetch calls ([#&#8203;16183](https://redirect.github.com/getsentry/sentry-javascript/pull/16183))
-   fix(feedback): Prevent `removeFromDom()` from throwing ([#&#8203;16030](https://redirect.github.com/getsentry/sentry-javascript/pull/16030))
-   fix(node): Use class constructor in docstring for winston transport ([#&#8203;16167](https://redirect.github.com/getsentry/sentry-javascript/pull/16167))
-   fix(node): Fix vercel flushing logic & add test for it ([#&#8203;16208](https://redirect.github.com/getsentry/sentry-javascript/pull/16208))
-   fix(node): Fix 404 route handling in express 5 ([#&#8203;16211](https://redirect.github.com/getsentry/sentry-javascript/pull/16211))
-   fix(logs): Ensure logs can be flushed correctly ([#&#8203;16216](https://redirect.github.com/getsentry/sentry-javascript/pull/16216))
-   ref(core): Switch to standardized log envelope ([#&#8203;16133](https://redirect.github.com/getsentry/sentry-javascript/pull/16133))

#### Bundle size 📦

| Path                                                             | Size              |
| ---------------------------------------------------------------- | ----------------- |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser)                                                  | 23.35 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) - with treeshaking flags                         | 23.19 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing)                                  | 37.25 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay)                          | 74.47 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay) - with treeshaking flags | 68.34 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay with Canvas)              | 79.12 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay, Feedback)                | 90.93 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Feedback)                                 | 39.75 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. sendFeedback)                             | 27.98 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. FeedbackAsync)                            | 32.74 KB  |
| [@&#8203;sentry/react](https://redirect.github.com/sentry/react)                                                    | 25.16 KB  |
| [@&#8203;sentry/react](https://redirect.github.com/sentry/react) (incl. Tracing)                                    | 39.24 KB  |
| [@&#8203;sentry/vue](https://redirect.github.com/sentry/vue)                                                      | 27.63 KB  |
| [@&#8203;sentry/vue](https://redirect.github.com/sentry/vue) (incl. Tracing)                                      | 39.01 KB  |
| [@&#8203;sentry/svelte](https://redirect.github.com/sentry/svelte)                                                   | 23.38 KB  |
| CDN Bundle                                                       | 24.55 KB  |
| CDN Bundle (incl. Tracing)                                       | 37.29 KB  |
| CDN Bundle (incl. Tracing, Replay)                               | 72.33 KB  |
| CDN Bundle (incl. Tracing, Replay, Feedback)                     | 77.64 KB  |
| CDN Bundle - uncompressed                                        | 71.62 KB  |
| CDN Bundle (incl. Tracing) - uncompressed                        | 110.34 KB |
| CDN Bundle (incl. Tracing, Replay) - uncompressed                | 221.63 KB |
| CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed      | 234.15 KB |
| [@&#8203;sentry/nextjs](https://redirect.github.com/sentry/nextjs) (client)                                          | 40.84 KB  |
| [@&#8203;sentry/sveltekit](https://redirect.github.com/sentry/sveltekit) (client)                                       | 37.73 KB  |
| [@&#8203;sentry/node](https://redirect.github.com/sentry/node)                                                     | 144.43 KB |
| [@&#8203;sentry/node](https://redirect.github.com/sentry/node) - without tracing                                   | 96.3 KB   |
| [@&#8203;sentry/aws-serverless](https://redirect.github.com/sentry/aws-serverless)                                           | 120.66 KB |

</details>

<details>
<summary>taskforcesh/bullmq (bullmq)</summary>

### [`v5.52.2`](https://redirect.github.com/taskforcesh/bullmq/releases/tag/v5.52.2)

[Compare Source](https://redirect.github.com/taskforcesh/bullmq/compare/v5.52.1...v5.52.2)

##### Bug Fixes

-   **worker:** maxStalledCount no less  than 0 ([#&#8203;3249](https://redirect.github.com/taskforcesh/bullmq/issues/3249)) fixes [#&#8203;3248](https://redirect.github.com/taskforcesh/bullmq/issues/3248) ([34dcb8c](34dcb8c3d0))

</details>

<details>
<summary>electron/electron (electron)</summary>

### [`v36.2.0`](https://redirect.github.com/electron/electron/releases/tag/v36.2.0): electron v36.2.0

[Compare Source](https://redirect.github.com/electron/electron/compare/v36.1.0...v36.2.0)

### Release Notes for v36.2.0

#### Fixes

-   Fixed a crash that could occur when opening some dialogs as windows are closing on macOS. [#&#8203;46951](https://redirect.github.com/electron/electron/pull/46951) <span style="font-size:small;">(Also in [35](https://redirect.github.com/electron/electron/pull/46953), [37](https://redirect.github.com/electron/electron/pull/46952))</span>
-   Fixed an issue where `webContents.print` did not work as expected when `mediaSize` was not passed. [#&#8203;46972](https://redirect.github.com/electron/electron/pull/46972) <span style="font-size:small;">(Also in [37](https://redirect.github.com/electron/electron/pull/46971))</span>
-   Fixed an issue where filters wouldn't apply in the specific case only one was passed. [#&#8203;46945](https://redirect.github.com/electron/electron/pull/46945) <span style="font-size:small;">(Also in [37](https://redirect.github.com/electron/electron/pull/46946))</span>
-   Fixed log files written to the current working directory on Windows. [#&#8203;46912](https://redirect.github.com/electron/electron/pull/46912) <span style="font-size:small;">(Also in [35](https://redirect.github.com/electron/electron/pull/46911), [37](https://redirect.github.com/electron/electron/pull/46910))</span>
-   Fixed xdg portal version detection for file dialogs on linux. [#&#8203;46923](https://redirect.github.com/electron/electron/pull/46923) <span style="font-size:small;">(Also in [35](https://redirect.github.com/electron/electron/pull/46936), [37](https://redirect.github.com/electron/electron/pull/46922))</span>

#### Other Changes

-   Updated Node.js to v22.15.0. [#&#8203;46741](https://redirect.github.com/electron/electron/pull/46741)

</details>

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

### [`v0.508.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.508.0): Version 0.508.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.507.0...0.508.0)

#### What's Changed

-   fix(icons): Optimised `phone-` icons by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw) in [https://github.com/lucide-icons/lucide/pull/3169](https://redirect.github.com/lucide-icons/lucide/pull/3169)
-   docs(packages): Update names in docs by [@&#8203;ericfennis](https://redirect.github.com/ericfennis) in [https://github.com/lucide-icons/lucide/pull/3184](https://redirect.github.com/lucide-icons/lucide/pull/3184)
-   fix(icons): arcified `laptop` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3190](https://redirect.github.com/lucide-icons/lucide/pull/3190)
-   chore(metadata): add `lens` tag to icons with magnifying glass by [@&#8203;Abdalrhman-Almarakeby](https://redirect.github.com/Abdalrhman-Almarakeby) in [https://github.com/lucide-icons/lucide/pull/3192](https://redirect.github.com/lucide-icons/lucide/pull/3192)

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.507.0...0.508.0

</details>

<details>
<summary>react-hook-form/react-hook-form (react-hook-form)</summary>

### [`v7.56.3`](https://redirect.github.com/react-hook-form/react-hook-form/compare/v7.56.2...d1d89f67a458ae8eefb1dc14396a293620f59d9e)

[Compare Source](https://redirect.github.com/react-hook-form/react-hook-form/compare/v7.56.2...v7.56.3)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjQwLjcuMSIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-08 04:02:25 +00:00
akumatus
f8fada0b10 feat(core): mark reasoning summary as markdown callout (#12176)
Close [AI-75](https://linear.app/affine-design/issue/AI-75)

![截屏2025-05-07 17.40.32.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/e5e7cf4c-0f80-41de-bb22-79a25fdfef48.png)

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

- **New Features**
  - Improved formatting for AI-generated reasoning and web search results, displaying them as callout blocks for enhanced readability.
  - Expanded support for rendering callout blocks in the text renderer.

- **Style**
  - Adjusted layout to ensure callout blocks retain appropriate spacing and appearance.

- **Refactor**
  - Simplified and unified the integration of web search tools for AI providers.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 03:42:21 +00:00
renovate
5d2b3e9c4b chore: bump up apollographql/apollo-ios version to v1.21.0 (#12076)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [apollographql/apollo-ios](https://redirect.github.com/apollographql/apollo-ios) | minor | `from: "1.20.0"` -> `from: "1.21.0"` |
| [apollographql/apollo-ios](https://redirect.github.com/apollographql/apollo-ios) | minor | `1.20.0` -> `1.21.0` |

---

### Release Notes

<details>
<summary>apollographql/apollo-ios (apollographql/apollo-ios)</summary>

### [`v1.21.0`](https://redirect.github.com/apollographql/apollo-ios/blob/HEAD/CHANGELOG.md#v1210)

[Compare Source](https://redirect.github.com/apollographql/apollo-ios/compare/1.20.0...1.21.0)

##### New

-   **Enhanced Client Awareness ([#&#8203;638](https://redirect.github.com/apollographql/apollo-ios-dev/pull/638)):** Apollo iOS now sends the library name and version as metadata in the `extensions` key of each request. This Enhanced Client Awareness metric is collected in GraphOS along with the existing Client Awareness and general operation metrics.

##### Improvement

-   **Removed SQLite.swift dependency ([#&#8203;635](https://redirect.github.com/apollographql/apollo-ios-dev/pull/635)):** Removed the dependency on `SQLite.swift` and replaced it with direct interaction with the SQLite C API.

##### Fixed

-   **Fix possible data races in the WebSocketTransport ([#&#8203;636](https://redirect.github.com/apollographql/apollo-ios-dev/pull/636)):** Fixes possible data race issues in the `subscriptions` property inside of `WebSocketTransport`. *Thank you to [@&#8203;tahirmt](https://redirect.github.com/tahirmt) for the contribution.*
-   **Fix cache reading of null list items ([#&#8203;3527](https://redirect.github.com/apollographql/apollo-ios/issues/3527)):** Null list items would previously generate a `wrongType` error if stored and read from the cache. This refactors the execution logic to correctly handle values from cache references in lists. See PR [#&#8203;637](https://redirect.github.com/apollographql/apollo-ios-dev/pull/637).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjI1Ny4zIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-08 03:29:33 +00:00
renovate
4609a6585c chore: bump up @googleapis/androidpublisher version to v27 (#11899)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@googleapis/androidpublisher](https://redirect.github.com/googleapis/google-api-nodejs-client) | [`^26.0.0` -> `^27.0.0`](https://renovatebot.com/diffs/npm/@googleapis%2fandroidpublisher/26.0.0/27.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@googleapis%2fandroidpublisher/27.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@googleapis%2fandroidpublisher/27.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@googleapis%2fandroidpublisher/26.0.0/27.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@googleapis%2fandroidpublisher/26.0.0/27.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/google-api-nodejs-client (@&#8203;googleapis/androidpublisher)</summary>

### [`v27.0.0`](https://redirect.github.com/googleapis/google-api-nodejs-client/blob/HEAD/CHANGELOG.md#12700-2023-10-11)

[Compare Source](https://redirect.github.com/googleapis/google-api-nodejs-client/compare/v26.0.0...v27.0.0)

##### ⚠ BREAKING CHANGES

-   This release has breaking changes.
-   **iam:** This release has breaking changes.
-   **dataproc:** This release has breaking changes.
-   **connectors:** This release has breaking changes.
-   **youtube:** This release has breaking changes.
-   **vmmigration:** This release has breaking changes.
-   **searchads360:** This release has breaking changes.
-   **playintegrity:** This release has breaking changes.
-   **places:** This release has breaking changes.
-   **paymentsresellersubscription:** This release has breaking changes.
-   **osconfig:** This release has breaking changes.
-   **notebooks:** This release has breaking changes.
-   **mybusinessverifications:** This release has breaking changes.
-   **gkeonprem:** This release has breaking changes.
-   **gkehub:** This release has breaking changes.
-   **firestore:** This release has breaking changes.
-   **displayvideo:** This release has breaking changes.
-   **discoveryengine:** This release has breaking changes.
-   **contentwarehouse:** This release has breaking changes.
-   **compute:** This release has breaking changes.
-   **cloudbilling:** This release has breaking changes.
-   **checks:** This release has breaking changes.
-   **assuredworkloads:** This release has breaking changes.
-   **artifactregistry:** This release has breaking changes.
-   **appengine:** This release has breaking changes.
-   **analyticsadmin:** This release has breaking changes.
-   **aiplatform:** This release has breaking changes.

##### Features

-   **accessapproval:** update the API ([3887e5f](3887e5f9be))
-   **accesscontextmanager:** update the API ([f18316f](f18316fc9a))
-   **admob:** update the API ([d366fa5](d366fa5c15))
-   **advisorynotifications:** update the API ([69862b5](69862b5ad3))
-   **aiplatform:** update the API ([c1ba635](c1ba635cfa))
-   **alertcenter:** update the API ([c323ec5](c323ec5700))
-   **analyticsadmin:** update the API ([c212bcf](c212bcf935))
-   **androiddeviceprovisioning:** update the API ([7d76542](7d76542084))
-   **androidmanagement:** update the API ([a6d4009](a6d4009983))
-   **androidpublisher:** update the API ([377819b](377819b2e6))
-   **appengine:** update the API ([7150925](71509251f4))
-   **artifactregistry:** update the API ([e3ac97a](e3ac97a206))
-   **assuredworkloads:** update the API ([c4f607f](c4f607fa7b))
-   **batch:** update the API ([6b95651](6b95651b44))
-   **beyondcorp:** update the API ([d506eb3](d506eb3fdd))
-   **bigquery:** update the API ([55da65e](55da65e7e1))
-   **billingbudgets:** update the API ([97aeef6](97aeef6daf))
-   **blockchainnodeengine:** update the API ([88285ef](88285ef596))
-   **chat:** update the API ([0d9d67d](0d9d67d8e2))
-   **checks:** update the API ([6e51323](6e51323554))
-   **chromemanagement:** update the API ([f272fb5](f272fb5278))
-   **chromepolicy:** update the API ([8ad0e35](8ad0e35a4d))
-   **cloudasset:** update the API ([6640f27](6640f27cfe))
-   **cloudbilling:** update the API ([249620e](249620e149))
-   **cloudchannel:** update the API ([b940b40](b940b403ca))
-   **clouddeploy:** update the API ([a732b2c](a732b2ca54))
-   **clouddeploy:** update the API ([60775aa](60775aa992))
-   **cloudfunctions:** update the API ([86d065d](86d065d7d0))
-   **cloudtasks:** update the API ([abf169e](abf169e694))
-   **composer:** update the API ([9f5baba](9f5baba8da))
-   **composer:** update the API ([5014376](5014376c55))
-   **compute:** update the API ([c0d7188](c0d7188676))
-   **connectors:** update the API ([edc8822](edc88224be))
-   **connectors:** update the API ([aca4b52](aca4b52971))
-   **contactcenteraiplatform:** update the API ([d7abdc8](d7abdc8a31))
-   **containeranalysis:** update the API ([0533c16](0533c16359))
-   **container:** update the API ([5b77c6d](5b77c6d281))
-   **content:** update the API ([5b4e734](5b4e734a5c))
-   **contentwarehouse:** update the API ([16be148](16be148bb3))
-   **datacatalog:** update the API ([0052588](0052588a7d))
-   **dataflow:** update the API ([a16fa60](a16fa6024f))
-   **dataform:** update the API ([aa38de7](aa38de7ce4))
-   **datamigration:** update the API ([4e272d7](4e272d7492))
-   **dataplex:** update the API ([1b8b506](1b8b506045))
-   **dataproc:** update the API ([64e0c7a](64e0c7a4d0))
-   **dataproc:** update the API ([dc84163](dc84163443))
-   **datastream:** update the API ([52168de](52168de4af))
-   **deploymentmanager:** update the API ([f3ec8ef](f3ec8efabe))
-   **dialogflow:** update the API ([c0653d0](c0653d0317))
-   **discoveryengine:** update the API ([6cfd107](6cfd10739f))
-   **displayvideo:** update the API ([0a7b6d4](0a7b6d46e6))
-   **dlp:** update the API ([5925749](5925749d8d))
-   **dns:** update the API ([376ebd2](376ebd2f2a))
-   **documentai:** update the API ([3b23065](3b230652ca))
-   **eventarc:** update the API ([72fc700](72fc70043e))
-   **firebaseappcheck:** update the API ([53b090f](53b090fa9c))
-   **firebasehosting:** update the API ([64cbaa6](64cbaa6b39))
-   **firebasestorage:** update the API ([22bb1f7](22bb1f7f90))
-   **firebase:** update the API ([db24c70](db24c70a61))
-   **firestore:** update the API ([13d1762](13d176259b))
-   **games:** update the API ([30dc810](30dc8101b3))
-   **gkehub:** update the API ([9c0ed64](9c0ed647e7))
-   **gkehub:** update the API ([5918dbd](5918dbd2d3))
-   **gkeonprem:** update the API ([26188f7](26188f73ed))
-   **gmailpostmastertools:** update the API ([5dfb9b5](5dfb9b5e6e))
-   **gmail:** update the API ([e943c90](e943c90dbb))
-   **healthcare:** update the API ([2640490](2640490061))
-   **iam:** update the API ([e35cf75](e35cf75e2c))
-   **iam:** update the API ([d1e31cc](d1e31cc139))
-   **iap:** update the API ([c735eaf](c735eaf4c6))
-   **jobs:** update the API ([441febc](441febcb09))
-   **logging:** update the API ([c43f8c0](c43f8c0963))
-   **manufacturers:** update the API ([2cdbd73](2cdbd73290))
-   **memcache:** update the API ([824d0cf](824d0cf5a0))
-   **metastore:** update the API ([3a1ae5c](3a1ae5cd56))
-   **migrationcenter:** update the API ([a714be5](a714be595b))
-   **mybusinessverifications:** update the API ([e51db62](e51db6202b))
-   **networkconnectivity:** update the API ([65ba5d2](65ba5d264b))
-   **networkmanagement:** update the API ([4943f8a](4943f8a586))
-   **networksecurity:** update the API ([7241b06](7241b067b4))
-   **networkservices:** update the API ([fe7e04d](fe7e04da77))
-   **notebooks:** update the API ([e76ae49](e76ae49809))
-   **osconfig:** update the API ([839a3fc](839a3fc0ce))
-   **oslogin:** update the API ([81cd87f](81cd87ffe8))
-   **paymentsresellersubscription:** update the API ([56dbb81](56dbb8114e))
-   **paymentsresellersubscription:** update the API ([31816cb](31816cbcc9))
-   **places:** update the API ([096c4a7](096c4a7d4f))
-   **playintegrity:** update the API ([7f9fe21](7f9fe21fd3))
-   **policysimulator:** update the API ([75d74db](75d74dbbf4))
-   **privateca:** update the API ([b9ee77c](b9ee77c2e9))
-   **prod_tt_sasportal:** update the API ([db7f407](db7f40708f))
-   **prod_tt_sasportal:** update the API ([e774324](e774324d1f))
-   **recaptchaenterprise:** update the API ([c7fcfc0](c7fcfc0bec))
-   **redis:** update the API ([4902a2d](4902a2dacf))
-   regenerate index files ([3be35ec](3be35eceec))
-   regenerate index files ([7eb77f5](7eb77f5d70))
-   **retail:** update the API ([ba147af](ba147af6e3))
-   run the generator ([#&#8203;3355](https://redirect.github.com/googleapis/google-api-nodejs-client/issues/3355)) ([5504c86](5504c86fd6))
-   **run:** update the API ([8d67594](8d67594b17))
-   **run:** update the API ([cf50ff6](cf50ff64bb))
-   **sasportal:** update the API ([706a9c6](706a9c6d36))
-   **searchads360:** update the API ([62c9a90](62c9a906a6))
-   **securitycenter:** update the API ([39b4fe5](39b4fe528c))
-   **spanner:** update the API ([3d046d5](3d046d5e61))
-   **speech:** update the API ([b1e180b](b1e180bd51))
-   **sqladmin:** update the API ([2d1c8c4](2d1c8c4d49))
-   **storagetransfer:** update the API ([aedacc9](aedacc9da3))
-   **storage:** update the API ([2d54a76](2d54a76c2e))
-   **testing:** update the API ([320730e](320730e576))
-   **tpu:** update the API ([5cabdfa](5cabdfa1cf))
-   **transcoder:** update the API ([bcb1cd5](bcb1cd52a0))
-   **verifiedaccess:** update the API ([b6ac861](b6ac861a2a))
-   **vision:** update the API ([4e50f7a](4e50f7a822))
-   **vmmigration:** update the API ([48fd628](48fd628fae))
-   **vmmigration:** update the API ([1d3ba23](1d3ba236d4))
-   **workflowexecutions:** update the API ([66d36c2](66d36c2ada))
-   **workflows:** update the API ([46b0b2b](46b0b2b33f))
-   **workloadmanager:** update the API ([3c3362c](3c3362cb7d))
-   **workstations:** update the API ([b8b63ef](b8b63ef6c0))
-   **youtube:** update the API ([43c5f61](43c5f612e6))

##### Bug Fixes

-   **alloydb:** update the API ([6147b06](6147b06130))
-   **analyticsadmin:** update the API ([31df609](31df609d40))
-   **analyticsdata:** update the API ([6d2e734](6d2e734ff0))
-   **analyticshub:** update the API ([03ce6ef](03ce6efbec))
-   **apigeeregistry:** update the API ([5264dcf](5264dcfc04))
-   **apigeeregistry:** update the API ([0608613](06086135ba))
-   **authorizedbuyersmarketplace:** update the API ([739f4c0](739f4c0e80))
-   **batch:** update the API ([2960f5b](2960f5b8b4))
-   **bigquerydatatransfer:** update the API ([4a60c8c](4a60c8c831))
-   **bigtableadmin:** update the API ([aeac248](aeac248580))
-   **binaryauthorization:** update the API ([1e2ed6a](1e2ed6a6d6))
-   **calendar:** update the API ([8fdd6c4](8fdd6c400d))
-   **certificatemanager:** update the API ([dcb4fd8](dcb4fd82a2))
-   **cloudbuild:** update the API ([8d999f5](8d999f52ba))
-   **clouderrorreporting:** update the API ([1ec2280](1ec22807b2))
-   **cloudscheduler:** update the API ([0ad660b](0ad660ba46))
-   **cloudsearch:** update the API ([5f25dae](5f25dae49c))
-   **cloudsupport:** update the API ([f37e735](f37e735d7f))
-   **contactcenterinsights:** update the API ([8aebb3f](8aebb3fbd9))
-   **dataform:** update the API ([1a91de3](1a91de3744))
-   **datamigration:** update the API ([4acd892](4acd892b6a))
-   **datastore:** update the API ([ee0bd25](ee0bd25a29))
-   **deploymentmanager:** update the API ([4c74af6](4c74af69e1))
-   **dfareporting:** update the API ([d4124d2](d4124d2165))
-   **dlp:** update the API ([5809b2e](5809b2e9cb))
-   **domains:** update the API ([ca2ddc0](ca2ddc03f1))
-   **drive:** update the API ([ce1bfe0](ce1bfe0b0b))
-   **firebasedynamiclinks:** update the API ([f2cd5c4](f2cd5c49ee))
-   **firestore:** update the API ([6ff716b](6ff716b72e))
-   **gkebackup:** update the API ([e4bcddf](e4bcddf04d))
-   **gkeonprem:** update the API ([77c0ea4](77c0ea4977))
-   **language:** update the API ([b9c3e49](b9c3e4940a))
-   **ml:** update the API ([1253597](12535979be))
-   **mybusinessbusinessinformation:** update the API ([fb250ff](fb250ffc72))
-   **networksecurity:** update the API ([942415b](942415b372))
-   **orgpolicy:** update the API ([b06315a](b06315ac76))
-   **playgrouping:** update the API ([a019599](a0195992d1))
-   **rapidmigrationassessment:** update the API ([479ceef](479ceefd1f))
-   **realtimebidding:** update the API ([64cfc3b](64cfc3ba22))
-   **recommender:** update the API ([3e76efd](3e76efde7d))
-   **serviceusage:** update the API ([e5db392](e5db392a40))
-   **sheets:** update the API ([e11a68c](e11a68c000))
-   **tagmanager:** update the API ([958b2be](958b2be95f))
-   **vpcaccess:** update the API ([a16c068](a16c06850b))
-   **workflowexecutions:** update the API ([122d68b](122d68b6f9))
-   **workflows:** update the API ([6c3af7d](6c3af7d5f0))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-08 02:59:00 +00:00
renovate
edafd1e974 chore: bump up opentelemetry (#11629)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@opentelemetry/exporter-prometheus](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.200.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fexporter-prometheus/0.57.2/0.200.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fexporter-prometheus/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fexporter-prometheus/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fexporter-prometheus/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fexporter-prometheus/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/host-metrics](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/opentelemetry-host-metrics#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.35.4` -> `^0.36.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fhost-metrics/0.35.5/0.36.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fhost-metrics/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fhost-metrics/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fhost-metrics/0.35.5/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fhost-metrics/0.35.5/0.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.200.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation/0.57.2/0.200.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-graphql](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-graphql#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.47.0` -> `^0.48.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-graphql/0.47.1/0.48.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-graphql/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-graphql/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-graphql/0.47.1/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-graphql/0.47.1/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-http](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.200.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-http/0.57.2/0.200.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-http/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-http/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-http/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-http/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-ioredis](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-ioredis#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.47.0` -> `^0.48.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-ioredis/0.47.1/0.48.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-ioredis/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-ioredis/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-ioredis/0.47.1/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-ioredis/0.47.1/0.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-nestjs-core](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-nestjs-core#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.44.0` -> `^0.46.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-nestjs-core/0.44.1/0.46.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-nestjs-core/0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-nestjs-core/0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-nestjs-core/0.44.1/0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-nestjs-core/0.44.1/0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/instrumentation-socket.io](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-socket.io#readme) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js-contrib)) | [`^0.46.0` -> `^0.47.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-socket.io/0.46.1/0.47.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-socket.io/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-socket.io/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-socket.io/0.46.1/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-socket.io/0.46.1/0.47.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/sdk-node](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-sdk-node) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.57.0` -> `^0.200.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsdk-node/0.57.2/0.200.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsdk-node/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsdk-node/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsdk-node/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsdk-node/0.57.2/0.200.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@opentelemetry/semantic-conventions](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`1.32.0` -> `1.33.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsemantic-conventions/1.32.0/1.33.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsemantic-conventions/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsemantic-conventions/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsemantic-conventions/1.32.0/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsemantic-conventions/1.32.0/1.33.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>open-telemetry/opentelemetry-js (@&#8203;opentelemetry/exporter-prometheus)</summary>

### [`v0.200.0`](ac8641a5db...7fde94081e)

[Compare Source](ac8641a5db...7fde94081e)

</details>

<details>
<summary>open-telemetry/opentelemetry-js-contrib (@&#8203;opentelemetry/host-metrics)</summary>

### [`v0.36.0`](d4d3c4f14f...32abc4c3c0)

[Compare Source](d4d3c4f14f...32abc4c3c0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMzguMCIsInVwZGF0ZWRJblZlciI6IjQwLjcuMSIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-05-08 02:44:35 +00:00
Saul-Mirone
388641bc89 refactor(editor): rename doc to store on block components (#12173)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Unified internal data access by replacing all references from `doc` to `store` across all components, blocks, widgets, and utilities. This affects how readonly state, block operations, and service retrieval are handled throughout the application.
- **Tests**
  - Updated all test utilities and test cases to use `store` instead of `doc` for document-related operations.
- **Chores**
  - Updated context providers and property names to reflect the change from `doc` to `store` for improved consistency and maintainability.

No user-facing features or behaviors have changed.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 01:01:05 +00:00
renovate
a45347656e chore: Lock file maintenance (#11832)
This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency versions.

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNDguNCIsInVwZGF0ZWRJblZlciI6IjM5LjI0OC40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-07 14:37:19 +00:00
doodlewind
1ef1c3a5fa chore(editor): skip flaky test case in turbo renderer (#12178)
2 out of 7 tests are skipped as flaky due to unknown vitest issue on CI, considering migrating to E2E afterwards.

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

## Summary by CodeRabbit

- **Tests**
  - Removed a test related to rendering multiple notes in the viewport.
  - Skipped two tests concerning zooming behavior and state transitions; these tests are now excluded from regular test runs.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 13:51:23 +00:00
akumatus
32db367298 feat(core): add o4-mini model (#12175)
Close [AI-85](https://linear.app/affine-design/issue/AI-85)

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

- **New Features**
	- Enhanced AI chat experience with improved web search integration, including a new "AUTO" mode that allows the AI to search the web only when needed.
	- Updated AI model for chat to "o4-mini" for improved performance.
- **Improvements**
	- Refined instructions to reduce hallucinations and ensure the AI admits uncertainty when unsure.
	- Enhanced streaming responses to display web search queries and results more clearly.
	- Updated web search tool modes for more accurate and flexible search behavior.
	- Centralized AI provider options and improved tool selection logic for better response quality.
- **Bug Fixes**
	- Improved handling of tool calls and reasoning steps in AI chat responses.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 13:36:41 +00:00
fundon
b4f56c0a78 fix(editor): attachment size in embed view (#12177)
Closes: [BS-3434](https://linear.app/affine-design/issue/BS-3434/修复-attachment-从-card-切换为-embed-尺寸问题)

<img width="1073" alt="Screenshot 2025-05-07 at 20 38 53" src="https://github.com/user-attachments/assets/9fbb7e40-3c01-4473-88d8-3469758ed06b" />

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

- **New Features**
  - Added dedicated embed actions for PDF and video attachments, ensuring consistent sizing and improved rendering for these media types.

- **Refactor**
  - Centralized PDF and video embed card dimensions using shared constants for more consistent and maintainable sizing.
  - Improved styling for video embeds, including better layout and responsive sizing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 13:20:51 +00:00
Saul-Mirone
95b9e4b3d0 refactor(editor): rename model.doc to store (#12172) 2025-05-07 09:17:01 +00:00
Saul-Mirone
eb62d0e853 refactor(editor): doc as store extension (#12170)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Introduced new exports related to workspace management, making additional workspace features available.

- **Refactor**
  - Updated how document and workspace types are imported and exported, consolidating and reorganizing module structure.
  - Shifted dependency management for document instances to use an internal provider mechanism.
  - Streamlined and centralized type imports across various modules.

- **Bug Fixes**
  - Removed an unused schema definition to improve code clarity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 09:17:01 +00:00
L-Sun
610565e617 chore(editor): adjust embed synced doc ui (#12162)
Close [BS-3400](https://linear.app/affine-design/issue/BS-3400/ui-issues)

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

- **New Features**
  - The "View in Page" button has been renamed to "Open in Page" and now uses a new icon for improved clarity.
  - The menu for embedded synced documents is now integrated directly into the Open button for a more streamlined interface.

- **Style**
  - Improved spacing and visual alignment in edgeless block headers, including dedicated styling for title icons and buttons.
  - Updated toolbar icon for better visual consistency.
  - Added background styling for embedded linked document blocks.

- **Localization**
  - Updated translation keys and text to reflect the "Open in Page" terminology across all supported languages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 08:34:58 +00:00
donteatfriedrice
4c56b685a1 fix(editor): footnote and citation icon url should be built with image proxy (#12169)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Improved how bookmark and footnote icons are displayed by routing image URLs through an image proxy service for enhanced reliability and consistency.

- **Refactor**
  - Adjusted the timing of service configuration for link previews and image proxies to occur after document initialization, ensuring more robust setup during content rendering.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 08:17:43 +00:00
fundon
179701f587 fix(editor): switch view is not allowed during upload (#12018)
Closes: [BS-3352](https://linear.app/affine-design/issue/BS-3352/[improvement]-附件上传时禁止切-view)

![Screenshot 2025-05-07 at 15.50.58.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/8ypiIKZXudF5a0tIgIzf/a2267752-8459-44f7-8c24-08bb50d390c0.png)

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

- **Bug Fixes**
  - Improved the logic for enabling or disabling the embed and card actions in the attachment toolbar, ensuring actions are only available when the file is ready and conditions are met.
- **Refactor**
  - Enhanced reliability by centralizing block state checks and refining conditions for action availability in the attachment dropdown menu.
  - Centralized resource state management with a new computed signal, improving consistency in loading and error state handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 08:01:56 +00:00
yoyoyohamapi
3afecc0605 fix(core): cannot space inside ai panel input (#12167)
### TL;DR

fix: cannot space inside ai panel input

> CLOSE BS-3428
2025-05-07 07:46:13 +00:00
yoyoyohamapi
8ea39d5438 fix(core): cannot input space at the beginning of a blank paragraph (#12166)
### TL:DR

fix: cannot input space at the beginning of a blank paragraph

> CLOSE BS-3427

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

- **New Features**
  - Improved space key handling in the editor: pressing space on an empty AI input now hides the AI panel and inserts a space character back into the editor.

- **Bug Fixes**
  - Prevented the AI panel from processing empty input when space is pressed, ensuring smoother user experience.

- **Tests**
  - Added an end-to-end test verifying that pressing space on an empty AI input hides the AI panel and inserts a space.

- **Refactor**
  - Streamlined event handling logic for space key detection in the editor.

- **Chores**
  - Enhanced editor content retrieval to optionally preserve whitespace while removing invisible characters.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 07:46:13 +00:00
Saul-Mirone
267bb3a975 refactor(editor): introduce store container to make implement doc easier (#12146)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new store management system for handling document stores, improving efficiency and flexibility when working with document data.

- **Refactor**
  - Updated internal store handling to use a centralized store container, simplifying store retrieval and removal across various components.
  - Renamed and updated several store-related method signatures for consistency and clarity.
  - Replaced editor extension loading logic with a new local implementation for better modularity.

- **Chores**
  - Improved and streamlined the export of store-related modules for better maintainability.
  - Removed obsolete and redundant code related to previous store management approaches.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 06:08:43 +00:00
fundon
93b1d6c729 fix(editor): improve image block upload and download states (#12017)
Related to: [BS-3143](https://linear.app/affine-design/issue/BS-3143/更新-loading-和错误样式)

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

- **New Features**
  - Introduced a unified resource controller for managing image and attachment resources, providing improved loading, error, and state handling.
  - Added a visual loading indicator overlay to image blocks for better feedback during image loading.

- **Improvements**
  - Simplified and centralized image and attachment state management, reducing redundant properties and manual state tracking.
  - Updated fallback UI for image blocks with clearer titles, descriptions, and improved layout.
  - Enhanced batch image block creation and download handling for improved efficiency.
  - Refined image block accessibility with improved alt text and streamlined rendering logic.
  - Centralized target model selection for image insertion in AI actions.
  - Reordered CSS declarations without affecting styling.
  - Improved reactive state tracking for blob upload/download operations in mock server.

- **Bug Fixes**
  - Improved cleanup of object URLs to prevent resource leaks.
  - Adjusted toolbar logic to more accurately reflect available actions based on image state.

- **Tests**
  - Updated end-to-end tests to match new UI text and behaviors for image loading and error states.

- **Chores**
  - Refactored internal logic and updated comments for clarity and maintainability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 05:15:57 +00:00
EYHN
8f6e604774 feat(ios): add app track usage description (#12160) 2025-05-07 13:15:14 +08:00
donteatfriedrice
0a9f5a1da9 fix(editor): add credentialless attribute to iframe for COEP compliance (#12161)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Added enhanced privacy controls by including the `credentialless` attribute to embedded content iframes for PDF, Figma, Loom, YouTube, and generic iframe blocks. This helps improve security and privacy when displaying embedded content.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 04:01:57 +00:00
fundon
af7cbdaf7e fix(nbstore): should not force throw error (#12152)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved handling of oversized blobs by allowing operations to continue after notifying about size limits, instead of stopping execution with an error.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 02:54:26 +00:00
renovate
e45abebc7f chore: bump up is-svg version to v6 (#12071)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [is-svg](https://redirect.github.com/sindresorhus/is-svg) | [`^5.1.0` -> `^6.0.0`](https://renovatebot.com/diffs/npm/is-svg/5.1.0/6.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/is-svg/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/is-svg/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/is-svg/5.1.0/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/is-svg/5.1.0/6.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>sindresorhus/is-svg (is-svg)</summary>

### [`v6.0.0`](https://redirect.github.com/sindresorhus/is-svg/releases/tag/v6.0.0)

[Compare Source](https://redirect.github.com/sindresorhus/is-svg/compare/v5.1.0...v6.0.0)

##### Breaking

-   Require Node.js 20  [`1ddf982`](https://redirect.github.com/sindresorhus/is-svg/commit/1ddf982)

##### Improvements

-   Use `@file-type/xml` for XML type determination ([#&#8203;40](https://redirect.github.com/sindresorhus/is-svg/issues/40))  [`e43ec24`](https://redirect.github.com/sindresorhus/is-svg/commit/e43ec24)

***

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjI1Ny4zIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-07 02:29:41 +00:00
doodlewind
2763b820ab chore(editor): add retry for flaky test (#12143)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Tests**
  - Updated integration test configuration to automatically retry failed tests up to 3 times in CI environments, improving test reliability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 02:01:14 +00:00
fundon
f832400e3e feat(editor): add resource controller (#12121)
Closes: [BS-3398](https://linear.app/affine-design/issue/BS-3398/实现资源控制器)

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

## Summary by CodeRabbit

- **New Features**
  - Introduced a ResourceController for centralized and reactive management of attachment resource states, improving error handling, loading indicators, and UI state resolution for attachments.
  - Added public access to resource management utilities via new export paths.

- **Refactor**
  - Streamlined attachment state management by replacing manual state tracking with the new ResourceController, simplifying code and enhancing maintainability.
  - Updated rendering logic for attachments to use unified state objects for clearer UI feedback.
  - Centralized blob URL creation and download state management within the ResourceController.

- **Chores**
  - Updated dependencies and internal references to reflect the new resource management approach, ensuring consistency across packages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 01:45:26 +00:00
fundon
9702d45c9b fix(nbstore): improve blob size error handling with human-readable limit (#12027)
Closes: [BS-3332](https://linear.app/affine-design/issue/BS-3332/错误信息)

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

- **Bug Fixes**
	- Improved error messages when file uploads exceed the allowed size, now showing the maximum file size limit in a human-readable format.
	- Enhanced status updates for oversized files by displaying clear error messages during blob uploads.
- **Style**
	- Error messages for file size limits are now more user-friendly and informative.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-07 01:29:37 +00:00
Yifeng Wang
ad7868633d test(editor): revert timeout condition in turbo renderer (#12159) 2025-05-07 09:29:12 +08:00
renovate
b3b78335ad chore: bump up all non-major npm dependencies (#12157)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@ai-sdk/google](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.15` -> `1.2.16`](https://renovatebot.com/diffs/npm/@ai-sdk%2fgoogle/1.2.15/1.2.16) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fgoogle/1.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fgoogle/1.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fgoogle/1.2.15/1.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fgoogle/1.2.15/1.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@aws-sdk/client-s3](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.803.0` -> `3.804.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.803.0/3.804.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.803.0/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.803.0/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@aws-sdk/s3-request-presigner](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/s3-request-presigner)) | [`3.803.0` -> `3.804.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fs3-request-presigner/3.803.0/3.804.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fs3-request-presigner/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fs3-request-presigner/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fs3-request-presigner/3.803.0/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fs3-request-presigner/3.803.0/3.804.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.12` -> `22.15.14`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.12/22.15.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.12/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.12/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.12` -> `22.15.14`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.12/22.15.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.12/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.12/22.15.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [ai](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`4.3.13` -> `4.3.14`](https://renovatebot.com/diffs/npm/ai/4.3.13/4.3.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ai/4.3.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ai/4.3.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ai/4.3.13/4.3.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ai/4.3.13/4.3.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [slackapi/slack-github-action](https://redirect.github.com/slackapi/slack-github-action) | `v2.0.0` -> `v2.1.0` | [![age](https://developer.mend.io/api/mc/badges/age/github-tags/slackapi%2fslack-github-action/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/github-tags/slackapi%2fslack-github-action/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/github-tags/slackapi%2fslack-github-action/v2.0.0/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/slackapi%2fslack-github-action/v2.0.0/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | action | minor |
| [com.android.tools.build:gradle](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.9.2` -> `8.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.tools.build:gradle/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.tools.build:gradle/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.tools.build:gradle/8.9.2/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.tools.build:gradle/8.9.2/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [com.android.library](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.9.2` -> `8.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.library:com.android.library.gradle.plugin/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.library:com.android.library.gradle.plugin/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.library:com.android.library.gradle.plugin/8.9.2/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.library:com.android.library.gradle.plugin/8.9.2/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | minor |
| [com.android.application](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.9.2` -> `8.10.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.application:com.android.application.gradle.plugin/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.application:com.android.application.gradle.plugin/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.application:com.android.application.gradle.plugin/8.9.2/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.application:com.android.application.gradle.plugin/8.9.2/8.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | minor |

---

### Release Notes

<details>
<summary>vercel/ai (@&#8203;ai-sdk/google)</summary>

### [`v1.2.16`](https://redirect.github.com/vercel/ai/releases/tag/%40ai-sdk/google%401.2.16)

[Compare Source](https://redirect.github.com/vercel/ai/compare/@ai-sdk/google@1.2.15...@ai-sdk/google@1.2.16)

##### Patch Changes

-   [`0ca6f2f`](https://redirect.github.com/vercel/ai/commit/0ca6f2f): feat(providers/google): add gemini-2.5-pro-preview-05-06

</details>

<details>
<summary>aws/aws-sdk-js-v3 (@&#8203;aws-sdk/client-s3)</summary>

### [`v3.804.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#38040-2025-05-06)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.803.0...v3.804.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://redirect.github.com/aws-sdk/client-s3)

</details>

<details>
<summary>aws/aws-sdk-js-v3 (@&#8203;aws-sdk/s3-request-presigner)</summary>

### [`v3.804.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/packages/s3-request-presigner/CHANGELOG.md#38040-2025-05-06)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.803.0...v3.804.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/s3-request-presigner](https://redirect.github.com/aws-sdk/s3-request-presigner)

</details>

<details>
<summary>slackapi/slack-github-action (slackapi/slack-github-action)</summary>

### [`v2.1.0`](https://redirect.github.com/slackapi/slack-github-action/compare/v2.0.0...v2.1.0)

[Compare Source](https://redirect.github.com/slackapi/slack-github-action/compare/v2.0.0...v2.1.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-07 00:49:11 +00:00
renovate
bcc728a929 chore: bump up all non-major npm dependencies (#12151)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@ai-sdk/google](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.14` -> `1.2.15`](https://renovatebot.com/diffs/npm/@ai-sdk%2fgoogle/1.2.14/1.2.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fgoogle/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fgoogle/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fgoogle/1.2.14/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fgoogle/1.2.14/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@graphql-codegen/cli](https://redirect.github.com/dotansimha/graphql-code-generator) ([source](https://redirect.github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/graphql-codegen-cli)) | [`5.0.5` -> `5.0.6`](https://renovatebot.com/diffs/npm/@graphql-codegen%2fcli/5.0.5/5.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@graphql-codegen%2fcli/5.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@graphql-codegen%2fcli/5.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@graphql-codegen%2fcli/5.0.5/5.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@graphql-codegen%2fcli/5.0.5/5.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@graphql-codegen/typescript-operations](https://redirect.github.com/dotansimha/graphql-code-generator) ([source](https://redirect.github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/plugins/typescript/operations)) | [`4.6.0` -> `4.6.1`](https://renovatebot.com/diffs/npm/@graphql-codegen%2ftypescript-operations/4.6.0/4.6.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@graphql-codegen%2ftypescript-operations/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@graphql-codegen%2ftypescript-operations/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@graphql-codegen%2ftypescript-operations/4.6.0/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@graphql-codegen%2ftypescript-operations/4.6.0/4.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@react-email/components](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/components)) | [`0.0.36` -> `0.0.38`](https://renovatebot.com/diffs/npm/@react-email%2fcomponents/0.0.36/0.0.38) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@react-email%2fcomponents/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@react-email%2fcomponents/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@react-email%2fcomponents/0.0.36/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-email%2fcomponents/0.0.36/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@vitest/browser](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/browser#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vitest/coverage-istanbul](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/coverage-istanbul#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-istanbul)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-istanbul/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-istanbul/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-istanbul/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-istanbul/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-istanbul/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vitest/ui](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/ui#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/ui)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fui/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [cc](https://redirect.github.com/rust-lang/cc-rs) | `1.2.20` -> `1.2.21` | [![age](https://developer.mend.io/api/mc/badges/age/crate/cc/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/cc/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/cc/1.2.20/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/cc/1.2.20/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | build-dependencies | patch |
| [chrono](https://redirect.github.com/chronotope/chrono) | `0.4.40` -> `0.4.41` | [![age](https://developer.mend.io/api/mc/badges/age/crate/chrono/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/chrono/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/chrono/0.4.40/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/chrono/0.4.40/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [cssnano](https://redirect.github.com/cssnano/cssnano) | [`7.0.6` -> `7.0.7`](https://renovatebot.com/diffs/npm/cssnano/7.0.6/7.0.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/cssnano/7.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cssnano/7.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cssnano/7.0.6/7.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cssnano/7.0.6/7.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [i18next](https://www.i18next.com) ([source](https://redirect.github.com/i18next/i18next)) | [`25.0.2` -> `25.1.1`](https://renovatebot.com/diffs/npm/i18next/25.0.2/25.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/i18next/25.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/i18next/25.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/i18next/25.0.2/25.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/i18next/25.0.2/25.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [jotai](https://redirect.github.com/pmndrs/jotai) | [`2.12.3` -> `2.12.4`](https://renovatebot.com/diffs/npm/jotai/2.12.3/2.12.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.12.3/2.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.12.3/2.12.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [lint-staged](https://redirect.github.com/lint-staged/lint-staged) | [`15.5.1` -> `15.5.2`](https://renovatebot.com/diffs/npm/lint-staged/15.5.1/15.5.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/15.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lint-staged/15.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lint-staged/15.5.1/15.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.5.1/15.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.503.0` -> `^0.507.0`](https://renovatebot.com/diffs/npm/lucide-react/0.503.0/0.507.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.507.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.507.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.503.0/0.507.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.503.0/0.507.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-email](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/react-email)) | [`4.0.7` -> `4.0.11`](https://renovatebot.com/diffs/npm/react-email/4.0.7/4.0.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-email/4.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-email/4.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-email/4.0.7/4.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-email/4.0.7/4.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [shiki](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/shiki)) | [`3.3.0` -> `3.4.0`](https://renovatebot.com/diffs/npm/shiki/3.3.0/3.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/shiki/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/shiki/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/shiki/3.3.0/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shiki/3.3.0/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [tokio](https://tokio.rs) ([source](https://redirect.github.com/tokio-rs/tokio)) | `1.44.2` -> `1.45.0` | [![age](https://developer.mend.io/api/mc/badges/age/crate/tokio/1.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/tokio/1.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/tokio/1.44.2/1.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/tokio/1.44.2/1.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |
| [uniffi](https://mozilla.github.io/uniffi-rs) ([source](https://redirect.github.com/mozilla/uniffi-rs)) | `0.29.1` -> `0.29.2` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uniffi/0.29.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uniffi/0.29.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uniffi/0.29.1/0.29.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uniffi/0.29.1/0.29.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [vitest](https://redirect.github.com/vitest-dev/vitest) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/vitest/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [webpack](https://redirect.github.com/webpack/webpack) | [`5.99.7` -> `5.99.8`](https://renovatebot.com/diffs/npm/webpack/5.99.7/5.99.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack/5.99.7/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack/5.99.7/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [webpack](https://redirect.github.com/webpack/webpack) | [`5.99.7` -> `5.99.8`](https://renovatebot.com/diffs/npm/webpack/5.99.7/5.99.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack/5.99.7/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack/5.99.7/5.99.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [com.google.devtools.ksp](https://goo.gle/ksp) ([source](https://redirect.github.com/google/ksp)) | `2.1.20-2.0.0` -> `2.1.20-2.0.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.1.20-2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.1.20-2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.1.20-2.0.0/2.1.20-2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.1.20-2.0.0/2.1.20-2.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | patch |
| [com.apollographql.adapters:apollo-adapters-kotlinx-datetime](https://redirect.github.com/apollographql/apollo-kotlin-adapters) | `0.0.4` -> `0.0.6` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.adapters:apollo-adapters-kotlinx-datetime/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.adapters:apollo-adapters-kotlinx-datetime/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.apollographql.adapters:apollo-adapters-kotlinx-datetime/0.0.4/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.apollographql.adapters:apollo-adapters-kotlinx-datetime/0.0.4/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [com.apollographql.adapters:apollo-adapters-core](https://redirect.github.com/apollographql/apollo-kotlin-adapters) | `0.0.4` -> `0.0.6` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.adapters:apollo-adapters-core/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.adapters:apollo-adapters-core/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.apollographql.adapters:apollo-adapters-core/0.0.4/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.apollographql.adapters:apollo-adapters-core/0.0.4/0.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [com.apollographql.apollo](https://redirect.github.com/apollographql/apollo-kotlin) | `4.1.1` -> `4.2.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.apollo:com.apollographql.apollo.gradle.plugin/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.apollo:com.apollographql.apollo.gradle.plugin/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.apollographql.apollo:com.apollographql.apollo.gradle.plugin/4.1.1/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.apollographql.apollo:com.apollographql.apollo.gradle.plugin/4.1.1/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | minor |
| [com.apollographql.apollo:apollo-runtime](https://redirect.github.com/apollographql/apollo-kotlin) | `4.1.1` -> `4.2.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.apollo:apollo-runtime/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.apollo:apollo-runtime/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.apollographql.apollo:apollo-runtime/4.1.1/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.apollographql.apollo:apollo-runtime/4.1.1/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [com.apollographql.apollo:apollo-api](https://redirect.github.com/apollographql/apollo-kotlin) | `4.1.1` -> `4.2.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.apollo:apollo-api/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.apollo:apollo-api/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.apollographql.apollo:apollo-api/4.1.1/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.apollographql.apollo:apollo-api/4.1.1/4.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |

---

### Release Notes

<details>
<summary>vercel/ai (@&#8203;ai-sdk/google)</summary>

### [`v1.2.15`](https://redirect.github.com/vercel/ai/releases/tag/%40ai-sdk/google%401.2.15)

[Compare Source](https://redirect.github.com/vercel/ai/compare/@ai-sdk/google@1.2.14...@ai-sdk/google@1.2.15)

##### Patch Changes

-   [`2afd354`](https://redirect.github.com/vercel/ai/commit/2afd354): fix(providers/google): accept nullish in safetyRatings

</details>

<details>
<summary>dotansimha/graphql-code-generator (@&#8203;graphql-codegen/cli)</summary>

### [`v5.0.6`](https://redirect.github.com/dotansimha/graphql-code-generator/blob/HEAD/packages/graphql-codegen-cli/CHANGELOG.md#506)

[Compare Source](https://redirect.github.com/dotansimha/graphql-code-generator/compare/@graphql-codegen/cli@5.0.5...@graphql-codegen/cli@5.0.6)

##### Patch Changes

-   [#&#8203;10338](https://redirect.github.com/dotansimha/graphql-code-generator/pull/10338) [`5d1c4e1`](5d1c4e127d) Thanks [@&#8203;eddeee888](https://redirect.github.com/eddeee888)! - Fix ignoreNoDocuments=true swallowing all errors

-   [#&#8203;10333](https://redirect.github.com/dotansimha/graphql-code-generator/pull/10333) [`10ab58d`](10ab58dbc1) Thanks [@&#8203;eddeee888](https://redirect.github.com/eddeee888)! - Improve syntax error messages whilst loading schema/document

-   Updated dependencies \[[`c5efba3`](c5efba34a7)]:
    -   [@&#8203;graphql-codegen/client-preset](https://redirect.github.com/graphql-codegen/client-preset)[@&#8203;4](https://redirect.github.com/4).8.1

</details>

<details>
<summary>dotansimha/graphql-code-generator (@&#8203;graphql-codegen/typescript-operations)</summary>

### [`v4.6.1`](https://redirect.github.com/dotansimha/graphql-code-generator/blob/HEAD/packages/plugins/typescript/operations/CHANGELOG.md#461)

[Compare Source](https://redirect.github.com/dotansimha/graphql-code-generator/compare/@graphql-codegen/typescript-operations@4.6.0...@graphql-codegen/typescript-operations@4.6.1)

##### Patch Changes

-   [#&#8203;10330](https://redirect.github.com/dotansimha/graphql-code-generator/pull/10330) [`c5efba3`](c5efba34a7) Thanks [@&#8203;jnoordsij](https://redirect.github.com/jnoordsij)! - Make graphql-sock optional peerDep

</details>

<details>
<summary>resend/react-email (@&#8203;react-email/components)</summary>

### [`v0.0.38`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/components/CHANGELOG.md#0038)

[Compare Source](https://redirect.github.com/resend/react-email/compare/@react-email/components@0.0.37...@react-email/components@0.0.38)

##### Patch Changes

-   Updated dependencies \[[`6cd353b`](https://redirect.github.com/resend/react-email/commit/6cd353b)]
    -   [@&#8203;react-email/text](https://redirect.github.com/react-email/text)[@&#8203;0](https://redirect.github.com/0).1.3

### [`v0.0.37`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/components/CHANGELOG.md#0037)

[Compare Source](https://redirect.github.com/resend/react-email/compare/@react-email/components@0.0.36...@react-email/components@0.0.37)

##### Patch Changes

-   Updated dependencies \[[`7918a4b`](https://redirect.github.com/resend/react-email/commit/7918a4b)]
-   Updated dependencies \[[`9aa033c`](https://redirect.github.com/resend/react-email/commit/9aa033c)]
-   Updated dependencies \[[`5d153a3`](https://redirect.github.com/resend/react-email/commit/5d153a3)]
-   Updated dependencies \[[`297541e`](https://redirect.github.com/resend/react-email/commit/297541e)]
    -   [@&#8203;react-email/text](https://redirect.github.com/react-email/text)[@&#8203;0](https://redirect.github.com/0).1.2
    -   [@&#8203;react-email/code-block](https://redirect.github.com/react-email/code-block)[@&#8203;0](https://redirect.github.com/0).0.13
    -   [@&#8203;react-email/markdown](https://redirect.github.com/react-email/markdown)[@&#8203;0](https://redirect.github.com/0).0.15
    -   [@&#8203;react-email/render](https://redirect.github.com/react-email/render)[@&#8203;1](https://redirect.github.com/1).1.0
    -   [@&#8203;react-email/tailwind](https://redirect.github.com/react-email/tailwind)[@&#8203;1](https://redirect.github.com/1).0.5
    -   [@&#8203;react-email/body](https://redirect.github.com/react-email/body)[@&#8203;0](https://redirect.github.com/0).0.11
    -   [@&#8203;react-email/button](https://redirect.github.com/react-email/button)[@&#8203;0](https://redirect.github.com/0).0.19
    -   [@&#8203;react-email/code-inline](https://redirect.github.com/react-email/code-inline)[@&#8203;0](https://redirect.github.com/0).0.5
    -   [@&#8203;react-email/column](https://redirect.github.com/react-email/column)[@&#8203;0](https://redirect.github.com/0).0.13
    -   [@&#8203;react-email/container](https://redirect.github.com/react-email/container)[@&#8203;0](https://redirect.github.com/0).0.15
    -   [@&#8203;react-email/font](https://redirect.github.com/react-email/font)[@&#8203;0](https://redirect.github.com/0).0.9
    -   [@&#8203;react-email/head](https://redirect.github.com/react-email/head)[@&#8203;0](https://redirect.github.com/0).0.12
    -   [@&#8203;react-email/heading](https://redirect.github.com/react-email/heading)[@&#8203;0](https://redirect.github.com/0).0.15
    -   [@&#8203;react-email/hr](https://redirect.github.com/react-email/hr)[@&#8203;0](https://redirect.github.com/0).0.11
    -   [@&#8203;react-email/html](https://redirect.github.com/react-email/html)[@&#8203;0](https://redirect.github.com/0).0.11
    -   [@&#8203;react-email/img](https://redirect.github.com/react-email/img)[@&#8203;0](https://redirect.github.com/0).0.11
    -   [@&#8203;react-email/link](https://redirect.github.com/react-email/link)[@&#8203;0](https://redirect.github.com/0).0.12
    -   [@&#8203;react-email/preview](https://redirect.github.com/react-email/preview)[@&#8203;0](https://redirect.github.com/0).0.12
    -   [@&#8203;react-email/row](https://redirect.github.com/react-email/row)[@&#8203;0](https://redirect.github.com/0).0.12
    -   [@&#8203;react-email/section](https://redirect.github.com/react-email/section)[@&#8203;0](https://redirect.github.com/0).0.16

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v3.1.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.1.3)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.1.2...v3.1.3)

#####    🐞 Bug Fixes

-   Correctly resolve vitest import if `inline: true` is set  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7856](https://redirect.github.com/vitest-dev/vitest/issues/7856) [<samp>(a83f3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a83f3bf6)
-   Fix fixture parsing with lowered async with esbuild 0.25.3  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7921](https://redirect.github.com/vitest-dev/vitest/issues/7921) [<samp>(c5c85)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c5c8502b)
-   Remove event-catcher code  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7898](https://redirect.github.com/vitest-dev/vitest/issues/7898) [<samp>(deb1b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/deb1bc27)
-   Reset mocks on test retry/repeat  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7897](https://redirect.github.com/vitest-dev/vitest/issues/7897) [<samp>(2fa76)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2fa763a6)
-   Ignore failures on writeToCache  -  by [@&#8203;orgads](https://redirect.github.com/orgads) in [https://github.com/vitest-dev/vitest/issues/7893](https://redirect.github.com/vitest-dev/vitest/issues/7893) [<samp>(8c7f7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8c7f75a6)
-   **browser**: Correctly inherit CLI options  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7858](https://redirect.github.com/vitest-dev/vitest/issues/7858) [<samp>(03660)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/03660f9d)
-   **deps**: Update all non-major dependencies  -  in [https://github.com/vitest-dev/vitest/issues/7867](https://redirect.github.com/vitest-dev/vitest/issues/7867) [<samp>(67ef7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/67ef74a0)
-   **reporters**: `--merge-reports` to show each total run times  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7877](https://redirect.github.com/vitest-dev/vitest/issues/7877) [<samp>(d613b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d613b813)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.1.2...v3.1.3)

</details>

<details>
<summary>rust-lang/cc-rs (cc)</summary>

### [`v1.2.21`](https://redirect.github.com/rust-lang/cc-rs/blob/HEAD/CHANGELOG.md#1221---2025-05-02)

[Compare Source](https://redirect.github.com/rust-lang/cc-rs/compare/cc-v1.2.20...cc-v1.2.21)

##### Other

-   Fix wasm32-unknown-unknown by passing -c ([#&#8203;1424](https://redirect.github.com/rust-lang/cc-rs/pull/1424))

</details>

<details>
<summary>chronotope/chrono (chrono)</summary>

### [`v0.4.41`](https://redirect.github.com/chronotope/chrono/releases/tag/v0.4.41)

[Compare Source](https://redirect.github.com/chronotope/chrono/compare/v0.4.40...v0.4.41)

#### What's Changed

-   Add `subsec_micros` and `subsec_millis` methods to `TimeDelta` by [@&#8203;ggoetz](https://redirect.github.com/ggoetz) in [https://github.com/chronotope/chrono/pull/1668](https://redirect.github.com/chronotope/chrono/pull/1668)
-   Deprecate `NaiveDateTime::UNIX_EPOCH` by [@&#8203;robertbastian](https://redirect.github.com/robertbastian) in [https://github.com/chronotope/chrono/pull/1670](https://redirect.github.com/chronotope/chrono/pull/1670)
-   Implement `as_seconds_f32` and `as_seconds_f64` for `TimeDelta` by [@&#8203;ggoetz](https://redirect.github.com/ggoetz) in [https://github.com/chronotope/chrono/pull/1671](https://redirect.github.com/chronotope/chrono/pull/1671)
-   chore: fix some comments by [@&#8203;jimmycathy](https://redirect.github.com/jimmycathy) in [https://github.com/chronotope/chrono/pull/1677](https://redirect.github.com/chronotope/chrono/pull/1677)
-   Add `num_days_in_month` method to `Datelike` trait by [@&#8203;aslilac](https://redirect.github.com/aslilac) in [https://github.com/chronotope/chrono/pull/1673](https://redirect.github.com/chronotope/chrono/pull/1673)
-   add `WeekdaySet`, a collection of `Weekday` that is `Copy` by [@&#8203;Kinrany](https://redirect.github.com/Kinrany) in [https://github.com/chronotope/chrono/pull/1676](https://redirect.github.com/chronotope/chrono/pull/1676)
-   WeekdaySet tweaks by [@&#8203;djc](https://redirect.github.com/djc) in [https://github.com/chronotope/chrono/pull/1680](https://redirect.github.com/chronotope/chrono/pull/1680)
-   Upgrade to windows-bindgen 0.61 by [@&#8203;djc](https://redirect.github.com/djc) in [https://github.com/chronotope/chrono/pull/1682](https://redirect.github.com/chronotope/chrono/pull/1682)
-   Implemented a consistent Eq trait for NaiveWeek by [@&#8203;Splashling1789](https://redirect.github.com/Splashling1789) in [https://github.com/chronotope/chrono/pull/1687](https://redirect.github.com/chronotope/chrono/pull/1687)
-   TimeZone::from_posix_tz: Treat empty TZ variable as UTC by [@&#8203;drinkcat](https://redirect.github.com/drinkcat) in [https://github.com/chronotope/chrono/pull/1691](https://redirect.github.com/chronotope/chrono/pull/1691)
-   Add support for lossy format strings by [@&#8203;Qelxiros](https://redirect.github.com/Qelxiros) in [https://github.com/chronotope/chrono/pull/1693](https://redirect.github.com/chronotope/chrono/pull/1693)

</details>

<details>
<summary>cssnano/cssnano (cssnano)</summary>

### [`v7.0.7`](https://redirect.github.com/cssnano/cssnano/releases/tag/cssnano%407.0.7)

[Compare Source](https://redirect.github.com/cssnano/cssnano/compare/cssnano@7.0.6...cssnano@7.0.7)

#### What's Changed

-   fix: update browserslist by [@&#8203;ludofischer](https://redirect.github.com/ludofischer) in [https://github.com/cssnano/cssnano/pull/1675](https://redirect.github.com/cssnano/cssnano/pull/1675)
-   fix: update postcss peer dependency to version without vulnerabilities by [@&#8203;ludofischer](https://redirect.github.com/ludofischer) in [https://github.com/cssnano/cssnano/pull/1676](https://redirect.github.com/cssnano/cssnano/pull/1676)
-   fix: update TypeScript declarations by [@&#8203;ludofischer](https://redirect.github.com/ludofischer) in [https://github.com/cssnano/cssnano/pull/1685](https://redirect.github.com/cssnano/cssnano/pull/1685)
-   perf: load default preset in startup by [@&#8203;43081j](https://redirect.github.com/43081j) in [https://github.com/cssnano/cssnano/pull/1691](https://redirect.github.com/cssnano/cssnano/pull/1691)
-   Add support for selector order preservation to postcss-minify-selectors by [@&#8203;ezzak](https://redirect.github.com/ezzak) in [https://github.com/cssnano/cssnano/pull/1688](https://redirect.github.com/cssnano/cssnano/pull/1688)
-   fix(postcss-convert-values): preserve percent sign in percentage values in at-rules with double quotes  by [@&#8203;aramikuto](https://redirect.github.com/aramikuto) in [https://github.com/cssnano/cssnano/pull/1695](https://redirect.github.com/cssnano/cssnano/pull/1695)

**Full Changelog**: https://github.com/cssnano/cssnano/compare/cssnano@7.0.6...cssnano@7.0.7

</details>

<details>
<summary>i18next/i18next (i18next)</summary>

### [`v25.1.1`](https://redirect.github.com/i18next/i18next/blob/HEAD/CHANGELOG.md#2511)

[Compare Source](https://redirect.github.com/i18next/i18next/compare/v25.1.0...v25.1.1)

-   fix options type for `parseMissingKeyHandler`

### [`v25.1.0`](https://redirect.github.com/i18next/i18next/blob/HEAD/CHANGELOG.md#2510)

[Compare Source](https://redirect.github.com/i18next/i18next/compare/v25.0.2...v25.1.0)

-   feat: `parseMissingKeyHandler` now takes options as parameter like in missingKeyHandler [2304](https://redirect.github.com/i18next/i18next/issues/2304)

</details>

<details>
<summary>pmndrs/jotai (jotai)</summary>

### [`v2.12.4`](https://redirect.github.com/pmndrs/jotai/releases/tag/v2.12.4)

[Compare Source](https://redirect.github.com/pmndrs/jotai/compare/v2.12.3...v2.12.4)

We deprecate devstore capability, which will be dropped in the next minor version. Please use the latest jotai-devtools library.

#### What's Changed

-   deprecate devstore by [@&#8203;dai-shi](https://redirect.github.com/dai-shi) in [https://github.com/pmndrs/jotai/pull/3023](https://redirect.github.com/pmndrs/jotai/pull/3023)
-   fix(package): react-native condition by [@&#8203;dai-shi](https://redirect.github.com/dai-shi) in [https://github.com/pmndrs/jotai/pull/3042](https://redirect.github.com/pmndrs/jotai/pull/3042)
-   fix(utils): allow undefined for atomWithStorage subscriber return by [@&#8203;caffeinewriter](https://redirect.github.com/caffeinewriter) in [https://github.com/pmndrs/jotai/pull/3055](https://redirect.github.com/pmndrs/jotai/pull/3055)

#### New Contributors

-   [@&#8203;caffeinewriter](https://redirect.github.com/caffeinewriter) made their first contribution in [https://github.com/pmndrs/jotai/pull/3056](https://redirect.github.com/pmndrs/jotai/pull/3056)
-   [@&#8203;CanRau](https://redirect.github.com/CanRau) made their first contribution in [https://github.com/pmndrs/jotai/pull/3051](https://redirect.github.com/pmndrs/jotai/pull/3051)

**Full Changelog**: https://github.com/pmndrs/jotai/compare/v2.12.3...v2.12.4

</details>

<details>
<summary>lint-staged/lint-staged (lint-staged)</summary>

### [`v15.5.2`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1552)

[Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v15.5.1...v15.5.2)

##### Patch Changes

-   [#&#8203;1544](https://redirect.github.com/lint-staged/lint-staged/pull/1544) [`5561321`](556132176a) Thanks [@&#8203;YimingIsCOLD](https://redirect.github.com/YimingIsCOLD)! - Correctly handle colon (`:`) characters in staged filenames.

</details>

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

### [`v0.507.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.507.0): Version 0.507.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.506.0...0.507.0)

#### What's Changed

-   fix(metadata): added tags to `square-pen` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3155](https://redirect.github.com/lucide-icons/lucide/pull/3155)
-   fix(icons): changed `search` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3140](https://redirect.github.com/lucide-icons/lucide/pull/3140)
-   fix(dev): resets Absolute Stroke Width by [@&#8203;briz123](https://redirect.github.com/briz123) in [https://github.com/lucide-icons/lucide/pull/3005](https://redirect.github.com/lucide-icons/lucide/pull/3005)
-   fix(icons): changed `guitar` icon by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw) in [https://github.com/lucide-icons/lucide/pull/3115](https://redirect.github.com/lucide-icons/lucide/pull/3115)
-   fix(Icons): Adding missing categories to 4 Icons by [@&#8203;ajokt123](https://redirect.github.com/ajokt123) in [https://github.com/lucide-icons/lucide/pull/3110](https://redirect.github.com/lucide-icons/lucide/pull/3110)
-   fix(ci): reduces workflow triggers by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3150](https://redirect.github.com/lucide-icons/lucide/pull/3150)
-   fix(icons): changed `air-vent` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3117](https://redirect.github.com/lucide-icons/lucide/pull/3117)
-   fix(icons): rotate `dumbbell` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3107](https://redirect.github.com/lucide-icons/lucide/pull/3107)
-   fix(icons): changed `touchpad-off` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3118](https://redirect.github.com/lucide-icons/lucide/pull/3118)
-   fix(icons): changed `bell-electric` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3139](https://redirect.github.com/lucide-icons/lucide/pull/3139)
-   fix(icons): changed `menu` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3142](https://redirect.github.com/lucide-icons/lucide/pull/3142)
-   fix(icons): changed `mail` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3144](https://redirect.github.com/lucide-icons/lucide/pull/3144)
-   chore(pr-template): Adjust PR template by [@&#8203;ericfennis](https://redirect.github.com/ericfennis) in [https://github.com/lucide-icons/lucide/pull/3183](https://redirect.github.com/lucide-icons/lucide/pull/3183)
-   feat(icons): added `soap-dispenser-droplet` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3088](https://redirect.github.com/lucide-icons/lucide/pull/3088)
-   feat(icons): added `panda` icon by [@&#8203;chessurisme](https://redirect.github.com/chessurisme) in [https://github.com/lucide-icons/lucide/pull/2094](https://redirect.github.com/lucide-icons/lucide/pull/2094)

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.506.0...0.507.0

### [`v0.506.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.506.0): Version 0.506.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.505.0...0.506.0)

#### What's Changed

-   perf(react): use implicit return in react package by [@&#8203;VIKTORVAV99](https://redirect.github.com/VIKTORVAV99) in [https://github.com/lucide-icons/lucide/pull/2325](https://redirect.github.com/lucide-icons/lucide/pull/2325)
-   fix(icons): changed `users` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3143](https://redirect.github.com/lucide-icons/lucide/pull/3143)
-   fix(icons): changed `locate-off` icon by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw) in [https://github.com/lucide-icons/lucide/pull/3137](https://redirect.github.com/lucide-icons/lucide/pull/3137)
-   fix(icons): changed `expand` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/2831](https://redirect.github.com/lucide-icons/lucide/pull/2831)
-   feat(icons): Added clock plus icon. by [@&#8203;gubser](https://redirect.github.com/gubser) in [https://github.com/lucide-icons/lucide/pull/2996](https://redirect.github.com/lucide-icons/lucide/pull/2996)

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.505.0...0.506.0

### [`v0.505.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.505.0): Version 0.505.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.504.0...0.505.0)

#### What's Changed

-   fix(icons): changed `package-2` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3174](https://redirect.github.com/lucide-icons/lucide/pull/3174)
-   docs(icon-design-guide): point people to lucide studio instead of svgo by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3152](https://redirect.github.com/lucide-icons/lucide/pull/3152)
-   fix(lucide-svelte): Resolve Svelte 5 deprecation of svelte:component by [@&#8203;shamaamahh](https://redirect.github.com/shamaamahh) in [https://github.com/lucide-icons/lucide/pull/3112](https://redirect.github.com/lucide-icons/lucide/pull/3112)
-   feat(icons): added `brush-cleaning` icon by [@&#8203;karsa-mistmere](https://redirect.github.com/karsa-mistmere) in [https://github.com/lucide-icons/lucide/pull/2395](https://redirect.github.com/lucide-icons/lucide/pull/2395)

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.504.0...0.505.0

### [`v0.504.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.504.0): Version 0.504.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.503.0...0.504.0)

#### What's Changed

-   feat(icons): add door closed locked / unlocked icons by [@&#8203;lukedukeus](https://redirect.github.com/lukedukeus) in [https://github.com/lucide-icons/lucide/pull/3060](https://redirect.github.com/lucide-icons/lucide/pull/3060)
-   build(dev-deps): Bump dependencies by [@&#8203;ericfennis](https://redirect.github.com/ericfennis) in [https://github.com/lucide-icons/lucide/pull/3096](https://redirect.github.com/lucide-icons/lucide/pull/3096)
-   fix(icons): redesigned `brush` icon by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3011](https://redirect.github.com/lucide-icons/lucide/pull/3011)
-   fix(site): remove studio link from navbar by [@&#8203;jguddas](https://redirect.github.com/jguddas) in [https://github.com/lucide-icons/lucide/pull/3166](https://redirect.github.com/lucide-icons/lucide/pull/3166)
-   feat(icons): added `hamburger` icon by [@&#8203;karsa-mistmere](https://redirect.github.com/karsa-mistmere) in [https://github.com/lucide-icons/lucide/pull/3165](https://redirect.github.com/lucide-icons/lucide/pull/3165)

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.503.0...0.504.0

</details>

<details>
<summary>resend/react-email (react-email)</summary>

### [`v4.0.11`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#4011)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@4.0.10...react-email@4.0.11)

##### Patch Changes

-   [`1a17219`](https://redirect.github.com/resend/react-email/commit/1a17219): fix improper `require` in `email export`
-   [`45ab698`](https://redirect.github.com/resend/react-email/commit/45ab698): update next to 15.3.1

### [`v4.0.10`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#4010)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@4.0.9...react-email@4.0.10)

##### Patch Changes

-   [`5ef9fe8`](https://redirect.github.com/resend/react-email/commit/5ef9fe8): fix support for `import ... = require(...)` syntax
-   [`4c7f597`](https://redirect.github.com/resend/react-email/commit/4c7f597): fix `email dev` not working with `traversal` error

### [`v4.0.9`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#409)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@4.0.8...react-email@4.0.9)

##### Patch Changes

-   [`643d841`](https://redirect.github.com/resend/react-email/commit/643d841): Add .json import support for hot reloading
-   [`f21a983`](https://redirect.github.com/resend/react-email/commit/f21a983): fix Node 18 support
-   [`cd02449`](https://redirect.github.com/resend/react-email/commit/cd02449): Ensure dependencies outside emails directory are completely resolved
-   [`73a31ed`](https://redirect.github.com/resend/react-email/commit/73a31ed): Fix dependent of dependents not causing hot reloads
-   [`bdffd8c`](https://redirect.github.com/resend/react-email/commit/bdffd8c): fix backwards compatibility with `render` versions
-   [`e7fa043`](https://redirect.github.com/resend/react-email/commit/e7fa043): Fix access to files outside `static` directory
-   [`9aa033c`](https://redirect.github.com/resend/react-email/commit/9aa033c): Use range of versions for dependencies
-   [`ab70556`](https://redirect.github.com/resend/react-email/commit/ab70556): Fix non-email files being rendered during hot reloading
-   [`9c9aa5d`](https://redirect.github.com/resend/react-email/commit/9c9aa5d): Add error message for when an email template does not have a default export

### [`v4.0.8`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#408)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@4.0.7...react-email@4.0.8)

##### Patch Changes

-   [`ea579b5`](https://redirect.github.com/resend/react-email/commit/ea579b5): Log out errors that happen when `export`'s esbuild fails

</details>

<details>
<summary>shikijs/shiki (shiki)</summary>

### [`v3.4.0`](https://redirect.github.com/shikijs/shiki/releases/tag/v3.4.0)

[Compare Source](https://redirect.github.com/shikijs/shiki/compare/v3.3.0...v3.4.0)

#####    🐞 Bug Fixes

-   Update deps and grammars  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(310d1)</samp>](https://redirect.github.com/shikijs/shiki/commit/310d1419)

#####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v3.3.0...v3.4.0)

</details>

<details>
<summary>tokio-rs/tokio (tokio)</summary>

### [`v1.45.0`](https://redirect.github.com/tokio-rs/tokio/releases/tag/tokio-1.45.0): Tokio v1.45.0

[Compare Source](https://redirect.github.com/tokio-rs/tokio/compare/tokio-1.44.2...tokio-1.45.0)

##### Added

-   metrics: stabilize `worker_total_busy_duration`, `worker_park_count`, and `worker_unpark_count` ([#&#8203;6899], [#&#8203;7276])
-   process: add `Command::spawn_with` ([#&#8203;7249])

##### Changed

-   io: do not require `Unpin` for some trait impls ([#&#8203;7204])
-   rt: mark `runtime::Handle` as unwind safe ([#&#8203;7230])
-   time: revert internal sharding implementation ([#&#8203;7226])

##### Unstable

-   rt: remove alt multi-threaded runtime ([#&#8203;7275])

[#&#8203;6899]: https://redirect.github.com/tokio-rs/tokio/pull/6899

[#&#8203;7276]: https://redirect.github.com/tokio-rs/tokio/pull/7276

[#&#8203;7249]: https://redirect.github.com/tokio-rs/tokio/pull/7249

[#&#8203;7204]: https://redirect.github.com/tokio-rs/tokio/pull/7204

[#&#8203;7230]: https://redirect.github.com/tokio-rs/tokio/pull/7230

[#&#8203;7226]: https://redirect.github.com/tokio-rs/tokio/pull/7226

[#&#8203;7275]: https://redirect.github.com/tokio-rs/tokio/pull/7275

</details>

<details>
<summary>mozilla/uniffi-rs (uniffi)</summary>

### [`v0.29.2`](https://redirect.github.com/mozilla/uniffi-rs/compare/v0.29.1...v0.29.2)

[Compare Source](https://redirect.github.com/mozilla/uniffi-rs/compare/v0.29.1...v0.29.2)

</details>

<details>
<summary>webpack/webpack (webpack)</summary>

### [`v5.99.8`](https://redirect.github.com/webpack/webpack/releases/tag/v5.99.8)

[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.99.7...v5.99.8)

##### Fixes

-   Fixed type error with latest `@types/node`
-   Fixed typescript types

</details>

<details>
<summary>google/ksp (com.google.devtools.ksp)</summary>

### [`v2.1.20-2.0.1`](https://redirect.github.com/google/ksp/releases/tag/2.1.20-2.0.1)

[Compare Source](https://redirect.github.com/google/ksp/compare/2.1.20-2.0.0...2.1.20-2.0.1)

##### What's Changed

-   \[KSP2] Annotation values shouldn't be marked as default (synthetic origin) broken after PR [#&#8203;2424](https://redirect.github.com/google/ksp/issues/2424) in [https://github.com/google/ksp/pull/2425](https://redirect.github.com/google/ksp/pull/2425)
-   \[KSP2] Wrong internal method name with custom moduleName compiler option in[https://github.com/google/ksp/pull/2415](https://redirect.github.com/google/ksp/pull/2415)5
-   \[KSP2] getJvmName for internal method did not sanitize java identifiers in[https://github.com/google/ksp/pull/2413](https://redirect.github.com/google/ksp/pull/2413)3
-   \[KSP2] Annotation and argument's origin is wrong in[https://github.com/google/ksp/pull/2412](https://redirect.github.com/google/ksp/pull/2412)2
-   \[KSP2] functionKind is MEMBER for static method in interface in Java in[https://github.com/google/ksp/pull/2410](https://redirect.github.com/google/ksp/pull/2410)0
-   KSP2 Generated .class files are not added to the classpath in [https://github.com/google/ksp/pull/2365](https://redirect.github.com/google/ksp/pull/2365)
-   When I write specific code, KSP throws an Unexpected class for KtSymbol error. in [https://github.com/google/ksp/pull/2303](https://redirect.github.com/google/ksp/pull/2303)

##### Contributors

Thanks to everyone who reported bugs and participated in discussions!

**Full Changelog**: https://github.com/google/ksp/compare/2.1.20-2.0.0...2.1.20-2.0.1

</details>

<details>
<summary>apollographql/apollo-kotlin-adapters (com.apollographql.adapters:apollo-adapters-kotlinx-datetime)</summary>

### [`v0.0.6`](https://redirect.github.com/apollographql/apollo-kotlin-adapters/releases/tag/v0.0.6)

Publishing only change. This version updates the license name to be SPDX compliant ([https://github.com/apollographql/apollo-kotlin-adapters/pull/30](https://redirect.github.com/apollographql/apollo-kotlin-adapters/pull/30))

### [`v0.0.5`](https://redirect.github.com/apollographql/apollo-kotlin-adapters/blob/HEAD/CHANGELOG.md#Version-005)

*2025-04-29*

-   Do not set the license URL in the POMs ([#&#8203;29](https://redirect.github.com/apollographql/apollo-kotlin-adapters/issues/29))

</details>

<details>
<summary>apollographql/apollo-kotlin (com.apollographql.apollo)</summary>

### [`v4.2.0`](https://redirect.github.com/apollographql/apollo-kotlin/blob/HEAD/CHANGELOG.md#Version-420)

*2025-04-28*

#### Generate custom scalars as inline classes with `@map` and `@mapTo` ([#&#8203;6404](https://redirect.github.com/apollographql/apollo-kotlin/issues/6404))

It is now possible to configure the adapters to use with [scalars](https://www.apollographql.com/docs/kotlin/essentials/custom-scalars) by using the [`@map` directive](https://specs.apollo.dev/kotlin_labs/v0.5/#@&#8203;map):

```graphql
extend schema @&#8203;link(url: "https://specs.apollo.dev/kotlin_labs/v0.5/", import: ["@&#8203;mapTo", "@&#8203;map"])

extend scalar Date @&#8203;map(to: "kotlinx.datetime.Instant", with: "com.apollographql.adapters.InstantAdapter")
```

If the `to` parameter is an [inline value class](https://kotlinlang.org/docs/inline-classes.html), use the `inlineProperty` parameter to have the generated code box/unbox the value. In that case, `with` needs to point to an adapter of the underlying type:

```graphql
extend scalar Timestamp @&#8203;map(to: "com.example.Timestamp", with: "com.apollographql.apollo.api.LongAdapter", inlineProperty: "ts")
```

For the common cases where the scalar can be represented as a built-in Kotlin type (String, Boolean, Int, Long, Float, Double), you can use [`@mapTo`](https://specs.apollo.dev/kotlin_labs/v0.5/#@&#8203;mapTo) and the compiler infers the adapter and generates an inline value class automatically:

```graphql
extend scalar Length @&#8203;mapTo(builtIn: Long)
```

#### Scalar definitions in schemas downloaded from introspection ([#&#8203;6389](https://redirect.github.com/apollographql/apollo-kotlin/issues/6389))

Downloading or converting an SDL schema from introspection now includes scalar definitions.
This is required for clients to get a [full view of the schema](https://redirect.github.com/graphql/graphql-wg/blob/main/rfcs/FullSchemas.md).

#### Support for `@disableErrorPropagation`

Apollo Kotlin now automatically adds [`@disableErrorPropagation`](https://redirect.github.com/graphql/nullability-wg/discussions/85) if your server supports it and you opted in `@catchByDefault` in your schema extensions. This allows to use non-null types more liberally and still get support for partial data.

See [https://github.com/graphql/graphql-js/pull/4348](https://redirect.github.com/graphql/graphql-js/pull/4348) and [https://github.com/graphql-java/graphql-java/pull/3772](https://redirect.github.com/graphql-java/graphql-java/pull/3772)

#### Contributors 💜

Many thanks to [@&#8203;bobbysothebys](https://redirect.github.com/bobbysothebys), [@&#8203;jvanderwee](https://redirect.github.com/jvanderwee), [@&#8203;dhritzkiv](https://redirect.github.com/dhritzkiv), [@&#8203;lwasyl](https://redirect.github.com/lwasyl) and [@&#8203;rohandhruva](https://redirect.github.com/rohandhruva) for all the contributions and help in this release 💜

#### 👷‍♂️ All changes

-   \[intellij-plugin] Fix MemoryCache package name ([#&#8203;6383](https://redirect.github.com/apollographql/apollo-kotlin/issues/6383))
-   \[intellij-plugin] Rover: always pass path to supergraph.yaml if present ([#&#8203;6384](https://redirect.github.com/apollographql/apollo-kotlin/issues/6384))
-   \[intellij-plugin] Make 'Download Schema action' consider deep subprojects ([#&#8203;6394](https://redirect.github.com/apollographql/apollo-kotlin/issues/6394))
-   \[intellij-plugin] Fix a crash when invoking the 'missing `@link`' quickfix ([#&#8203;6402](https://redirect.github.com/apollographql/apollo-kotlin/issues/6402))
-   \[intellij-plugin] Use configured Gradle JVM when executing tasks ([#&#8203;6425](https://redirect.github.com/apollographql/apollo-kotlin/issues/6425))
-   \[in

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNjQuMCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-05-06 14:47:24 +00:00
renovate
73548c6261 chore: bump up all non-major npm dependencies (#12067)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@ai-sdk/google](https://ai-sdk.dev/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.2.13` -> `1.2.15`](https://renovatebot.com/diffs/npm/@ai-sdk%2fgoogle/1.2.13/1.2.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fgoogle/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fgoogle/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fgoogle/1.2.13/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fgoogle/1.2.13/1.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@ai-sdk/openai](https://sdk.vercel.ai/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.3.20` -> `1.3.21`](https://renovatebot.com/diffs/npm/@ai-sdk%2fopenai/1.3.20/1.3.21) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fopenai/1.3.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fopenai/1.3.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fopenai/1.3.20/1.3.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fopenai/1.3.20/1.3.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@ai-sdk/perplexity](https://sdk.vercel.ai/docs) ([source](https://redirect.github.com/vercel/ai)) | [`1.1.7` -> `1.1.8`](https://renovatebot.com/diffs/npm/@ai-sdk%2fperplexity/1.1.7/1.1.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@ai-sdk%2fperplexity/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@ai-sdk%2fperplexity/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@ai-sdk%2fperplexity/1.1.7/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@ai-sdk%2fperplexity/1.1.7/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@aws-sdk/client-s3](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/clients/client-s3) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3)) | [`3.797.0` -> `3.803.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.797.0/3.803.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.797.0/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.797.0/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@aws-sdk/s3-request-presigner](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/s3-request-presigner)) | [`3.797.0` -> `3.803.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fs3-request-presigner/3.797.0/3.803.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fs3-request-presigner/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fs3-request-presigner/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fs3-request-presigner/3.797.0/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fs3-request-presigner/3.797.0/3.803.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capawesome/capacitor-android-edge-to-edge-support](https://capawesome.io/plugins/android-edge-to-edge-support/) ([source](https://redirect.github.com/capawesome-team/capacitor-plugins)) | [`7.1.1` -> `7.2.1`](https://renovatebot.com/diffs/npm/@capawesome%2fcapacitor-android-edge-to-edge-support/7.1.1/7.2.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capawesome%2fcapacitor-android-edge-to-edge-support/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capawesome%2fcapacitor-android-edge-to-edge-support/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capawesome%2fcapacitor-android-edge-to-edge-support/7.1.1/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capawesome%2fcapacitor-android-edge-to-edge-support/7.1.1/7.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capgo/inappbrowser](https://redirect.github.com/Cap-go/capacitor-inappbrowser) | [`7.9.0` -> `7.9.2`](https://renovatebot.com/diffs/npm/@capgo%2finappbrowser/7.9.0/7.9.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capgo%2finappbrowser/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capgo%2finappbrowser/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capgo%2finappbrowser/7.9.0/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capgo%2finappbrowser/7.9.0/7.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@eslint/js](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint/tree/HEAD/packages/js)) | [`9.25.1` -> `9.26.0`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.25.1/9.26.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fjs/9.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@eslint%2fjs/9.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@eslint%2fjs/9.25.1/9.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@eslint%2fjs/9.25.1/9.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@floating-ui/dom](https://floating-ui.com) ([source](https://redirect.github.com/floating-ui/floating-ui/tree/HEAD/packages/dom)) | [`1.6.13` -> `1.7.0`](https://renovatebot.com/diffs/npm/@floating-ui%2fdom/1.6.13/1.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@floating-ui%2fdom/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@floating-ui%2fdom/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@floating-ui%2fdom/1.6.13/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@floating-ui%2fdom/1.6.13/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@google/generative-ai](https://redirect.github.com/google/generative-ai-js) | [`0.24.0` -> `0.24.1`](https://renovatebot.com/diffs/npm/@google%2fgenerative-ai/0.24.0/0.24.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@google%2fgenerative-ai/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@google%2fgenerative-ai/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@google%2fgenerative-ai/0.24.0/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@google%2fgenerative-ai/0.24.0/0.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@lottiefiles/dotlottie-wc](https://redirect.github.com/LottieFiles/dotlottie-web) ([source](https://redirect.github.com/LottieFiles/dotlottie-web/tree/HEAD/packages/wc)) | [`0.5.2` -> `0.5.3`](https://renovatebot.com/diffs/npm/@lottiefiles%2fdotlottie-wc/0.5.2/0.5.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@lottiefiles%2fdotlottie-wc/0.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@lottiefiles%2fdotlottie-wc/0.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@lottiefiles%2fdotlottie-wc/0.5.2/0.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lottiefiles%2fdotlottie-wc/0.5.2/0.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@prisma/client](https://www.prisma.io) ([source](https://redirect.github.com/prisma/prisma/tree/HEAD/packages/client)) | [`6.6.0` -> `6.7.0`](https://renovatebot.com/diffs/npm/@prisma%2fclient/6.6.0/6.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@prisma%2fclient/6.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@prisma%2fclient/6.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@prisma%2fclient/6.6.0/6.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@prisma%2fclient/6.6.0/6.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@radix-ui/react-accordion](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.8` -> `1.2.10`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-accordion/1.2.8/1.2.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-accordion/1.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-accordion/1.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-accordion/1.2.8/1.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-accordion/1.2.8/1.2.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-alert-dialog](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.11` -> `1.1.13`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-alert-dialog/1.1.11/1.1.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-alert-dialog/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-alert-dialog/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-alert-dialog/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-alert-dialog/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-aspect-ratio](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.4` -> `1.1.6`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-aspect-ratio/1.1.4/1.1.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-aspect-ratio/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-aspect-ratio/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-aspect-ratio/1.1.4/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-aspect-ratio/1.1.4/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-avatar](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.7` -> `1.1.9`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-avatar/1.1.7/1.1.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-avatar/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-avatar/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-avatar/1.1.7/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-avatar/1.1.7/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-checkbox](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.3` -> `1.3.1`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-checkbox/1.2.3/1.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-checkbox/1.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-checkbox/1.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-checkbox/1.2.3/1.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-checkbox/1.2.3/1.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@radix-ui/react-collapsible](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.8` -> `1.1.10`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-collapsible/1.1.8/1.1.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-collapsible/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-collapsible/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-collapsible/1.1.8/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-collapsible/1.1.8/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-context-menu](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.2.12` -> `2.2.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-context-menu/2.2.12/2.2.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-context-menu/2.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-context-menu/2.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-context-menu/2.2.12/2.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-context-menu/2.2.12/2.2.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-dialog](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.11` -> `1.1.13`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-dialog/1.1.11/1.1.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-dialog/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-dialog/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-dialog/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-dialog/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-dropdown-menu](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.1.12` -> `2.1.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-dropdown-menu/2.1.12/2.1.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-dropdown-menu/2.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-dropdown-menu/2.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-dropdown-menu/2.1.12/2.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-dropdown-menu/2.1.12/2.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-hover-card](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.11` -> `1.1.13`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-hover-card/1.1.11/1.1.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-hover-card/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-hover-card/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-hover-card/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-hover-card/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-label](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.1.4` -> `2.1.6`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-label/2.1.4/2.1.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-label/2.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-label/2.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-label/2.1.4/2.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-label/2.1.4/2.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-menubar](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.12` -> `1.1.14`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-menubar/1.1.12/1.1.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-menubar/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-menubar/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-menubar/1.1.12/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-menubar/1.1.12/1.1.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-navigation-menu](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.10` -> `1.2.12`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-navigation-menu/1.2.10/1.2.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-navigation-menu/1.2.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-navigation-menu/1.2.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-navigation-menu/1.2.10/1.2.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-navigation-menu/1.2.10/1.2.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-popover](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.11` -> `1.1.13`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-popover/1.1.11/1.1.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-popover/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-popover/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-popover/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-popover/1.1.11/1.1.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-progress](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.4` -> `1.1.6`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-progress/1.1.4/1.1.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-progress/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-progress/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-progress/1.1.4/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-progress/1.1.4/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-radio-group](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.3.4` -> `1.3.6`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-radio-group/1.3.4/1.3.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-radio-group/1.3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-radio-group/1.3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-radio-group/1.3.4/1.3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-radio-group/1.3.4/1.3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-scroll-area](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.6` -> `1.2.8`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-scroll-area/1.2.6/1.2.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-scroll-area/1.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-scroll-area/1.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-scroll-area/1.2.6/1.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-scroll-area/1.2.6/1.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-select](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`2.2.2` -> `2.2.4`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-select/2.2.2/2.2.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-select/2.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-select/2.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-select/2.2.2/2.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-select/2.2.2/2.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-separator](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.4` -> `1.1.6`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-separator/1.1.4/1.1.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-separator/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-separator/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-separator/1.1.4/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-separator/1.1.4/1.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-slider](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.3.2` -> `1.3.4`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-slider/1.3.2/1.3.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-slider/1.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-slider/1.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-slider/1.3.2/1.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-slider/1.3.2/1.3.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-slot](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.0` -> `1.2.2`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-slot/1.2.0/1.2.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-slot/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-slot/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-slot/1.2.0/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-slot/1.2.0/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-switch](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.2` -> `1.2.4`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-switch/1.2.2/1.2.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-switch/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-switch/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-switch/1.2.2/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-switch/1.2.2/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-tabs](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.9` -> `1.1.11`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-tabs/1.1.9/1.1.11) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-tabs/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-tabs/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-tabs/1.1.9/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-tabs/1.1.9/1.1.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toast](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.11` -> `1.2.13`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toast/1.2.11/1.2.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toast/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toast/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toast/1.2.11/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toast/1.2.11/1.2.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toggle](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.6` -> `1.1.8`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toggle/1.1.6/1.1.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toggle/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toggle/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toggle/1.1.6/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toggle/1.1.6/1.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toggle-group](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.7` -> `1.1.9`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toggle-group/1.1.7/1.1.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toggle-group/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toggle-group/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toggle-group/1.1.7/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toggle-group/1.1.7/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-toolbar](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.1.7` -> `1.1.9`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-toolbar/1.1.7/1.1.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-toolbar/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-toolbar/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-toolbar/1.1.7/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-toolbar/1.1.7/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-tooltip](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.4` -> `1.2.6`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-tooltip/1.2.4/1.2.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-tooltip/1.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-tooltip/1.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-tooltip/1.2.4/1.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-tooltip/1.2.4/1.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@radix-ui/react-visually-hidden](https://radix-ui.com/primitives) ([source](https://redirect.github.com/radix-ui/primitives)) | [`1.2.0` -> `1.2.2`](https://renovatebot.com/diffs/npm/@radix-ui%2freact-visually-hidden/1.2.0/1.2.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@radix-ui%2freact-visually-hidden/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@radix-ui%2freact-visually-hidden/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@radix-ui%2freact-visually-hidden/1.2.0/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@radix-ui%2freact-visually-hidden/1.2.0/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@react-email/components](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/components)) | [`0.0.36` -> `0.0.38`](https://renovatebot.com/diffs/npm/@react-email%2fcomponents/0.0.36/0.0.38) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@react-email%2fcomponents/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@react-email%2fcomponents/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@react-email%2fcomponents/0.0.36/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-email%2fcomponents/0.0.36/0.0.38?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@sentry/esbuild-plugin](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/esbuild-plugin) ([source](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins)) | [`3.3.1` -> `3.4.0`](https://renovatebot.com/diffs/npm/@sentry%2fesbuild-plugin/3.3.1/3.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fesbuild-plugin/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fesbuild-plugin/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fesbuild-plugin/3.3.1/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fesbuild-plugin/3.3.1/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.14.0` -> `9.15.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.14.0/9.15.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.14.0/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.14.0/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@sentry/react](https://redirect.github.com/getsentry/sentry-javascript/tree/master/packages/react) ([source](https://redirect.github.com/getsentry/sentry-javascript)) | [`9.14.0` -> `9.15.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/9.14.0/9.15.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/9.14.0/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/9.14.0/9.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@sentry/webpack-plugin](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins/tree/main/packages/webpack-plugin) ([source](https://redirect.github.com/getsentry/sentry-javascript-bundler-plugins)) | [`3.3.1` -> `3.4.0`](https://renovatebot.com/diffs/npm/@sentry%2fwebpack-plugin/3.3.1/3.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2fwebpack-plugin/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2fwebpack-plugin/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2fwebpack-plugin/3.3.1/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2fwebpack-plugin/3.3.1/3.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@swc/core](https://swc.rs) ([source](https://redirect.github.com/swc-project/swc)) | [`1.11.22` -> `1.11.24`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.11.22/1.11.24) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.11.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.11.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.11.22/1.11.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.11.22/1.11.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@tailwindcss/postcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss)) | [`4.1.4` -> `4.1.5`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.1.4/4.1.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fpostcss/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fpostcss/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fpostcss/4.1.4/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fpostcss/4.1.4/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@tailwindcss/vite](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)) | [`4.1.4` -> `4.1.5`](https://renovatebot.com/diffs/npm/@tailwindcss%2fvite/4.1.4/4.1.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fvite/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fvite/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fvite/4.1.4/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fvite/4.1.4/4.1.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/mixpanel-browser](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mixpanel-browser) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mixpanel-browser)) | [`2.54.0` -> `2.60.0`](https://renovatebot.com/diffs/npm/@types%2fmixpanel-browser/2.54.0/2.60.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fmixpanel-browser/2.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fmixpanel-browser/2.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fmixpanel-browser/2.54.0/2.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fmixpanel-browser/2.54.0/2.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@types/mustache](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mustache) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mustache)) | [`4.2.5` -> `4.2.6`](https://renovatebot.com/diffs/npm/@types%2fmustache/4.2.5/4.2.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fmustache/4.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fmustache/4.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fmustache/4.2.5/4.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fmustache/4.2.5/4.2.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.2` -> `22.15.12`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.2/22.15.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.2/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.2/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.15.2` -> `22.15.12`](https://renovatebot.com/diffs/npm/@types%2fnode/22.15.2/22.15.12) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.15.2/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.15.2/22.15.12?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/react](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`19.1.2` -> `19.1.3`](https://renovatebot.com/diffs/npm/@types%2freact/19.1.2/19.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/19.1.2/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/19.1.2/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@types/react-dom](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)) | [`19.1.2` -> `19.1.3`](https://renovatebot.com/diffs/npm/@types%2freact-dom/19.1.2/19.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact-dom/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact-dom/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact-dom/19.1.2/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact-dom/19.1.2/19.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vitest/browser](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/browser#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vitest/coverage-istanbul](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/coverage-istanbul#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-istanbul)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-istanbul/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-istanbul/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-istanbul/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-istanbul/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-istanbul/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@vitest/ui](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/ui#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/ui)) | [`3.1.2` -> `3.1.3`](https://renovatebot.com/diffs/npm/@vitest%2fui/3.1.2/3.1.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/3.1.2/3.1.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [ai](https://sdk.vercel.ai/docs) ([source](https://redirect.github.com/vercel/ai)) | [`4.3.10` -> `4.3.13`](https://renovatebot.com/diffs/npm/ai/4.3.10/4.3.13) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ai/4.3.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ai/4.3.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ai/4.3.10/4.3.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ai/4.3.10/4.3.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [app-builder-lib](https://redirect.github.com/electron-userland/electron-builder) ([source](https://redirect.github.com/electron-userland/electron-builder/tree/HEAD/packages/app-builder-lib)) | [`26.0.14` -> `26.0.15`](https://renovatebot.com/diffs/npm/app-builder-lib/26.0.14/26.0.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/app-builder-lib/26.0.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/app-builder-lib/26.0.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/app-builder-lib/26.0.14/26.0.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/app-builder-lib/26.0.14/26.0.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [ava](https://avajs.dev) ([source](https://redirect.github.com/avajs/ava)) | [`6.2.0` -> `6.3.0`](https://renovatebot.com/diffs/npm/ava/6.2.0/6.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ava/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ava/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ava/6.2.0/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ava/6.2.0/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [bullmq](https://bullmq.io/) ([source](https://redirect.github.com/taskforcesh/bullmq)) | [`5.51.1` -> `5.52.1`](https://renovatebot.com/diffs/npm/bullmq/5.51.1/5.52.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/bullmq/5.52.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/bullmq/5.52.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/bullmq/5.51.1/5.52.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/bullmq/5.51.1/5.52.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [cc](https://redirect.github.com/rust-lang/cc-rs) | `1.2.20` -> `1.2.21` | [![age](https://developer.mend.io/api/mc/badges/age/crate/cc/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/cc/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/cc/1.2.20/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/cc/1.2.20/1.2.21?slim=true)](https://docs.renovatebot.com/merge-confidence/) | build-dependencies | patch |
| [chrono](https://redirect.github.com/chronotope/chrono) | `0.4.40` -> `0.4.41` | [![age](https://developer.mend.io/api/mc/badges/age/crate/chrono/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/chrono/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/chrono/0.4.40/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/chrono/0.4.40/0.4.41?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [core-js](https://redirect.github.com/zloirock/core-js) ([source](https://redirect.github.com/zloirock/core-js/tree/HEAD/packages/core-js)) | [`3.41.0` -> `3.42.0`](https://renovatebot.com/diffs/npm/core-js/3.41.0/3.42.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/core-js/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/core-js/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/core-js/3.41.0/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/core-js/3.41.0/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [electron](https://redirect.github.com/electron/electron) | [`36.0.0` -> `36.1.0`](https://renovatebot.com/diffs/npm/electron/36.0.0/36.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/36.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/36.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/36.0.0/36.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/36.0.0/36.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [electron-log](https://redirect.github.com/megahertz/electron-log) | [`5.3.4` -> `5.4.0`](https://renovatebot.com/diffs/npm/electron-log/5.3.4/5.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron-log/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron-log/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron-log/5.3.4/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron-log/5.3.4/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [electron-updater]
2025-05-06 13:46:48 +00:00
forehalo
0ffa6fbe89 chore(server): hoist deps (#12145)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
  - Updated workflow to move the node_modules directory during the build process.
  - Adjusted Prisma client output directory for improved file organization.
  - Removed unused properties from backend server package configuration.

- **Refactor**
  - Simplified type annotations for improved code clarity in test utilities.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 11:36:31 +00:00
fengmk2
8940151ffe chore(server): dont use default export on @prisma/instrumentation (#12148)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Updated a backend dependency to the latest version to ensure continued compatibility and improvements. No user-facing changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 10:21:35 +00:00
darkskygit
fdb2a92c1c test(core): fix chat with tag falky (#12141)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Tests**
  - Improved reliability of chat panel end-to-end tests by refining the sequence of UI interactions and wait conditions during tag and collection selection.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 09:59:48 +00:00
pengx17
3ac92d0d27 chore(core): update onboarding snapshot (#12138)
fix AF-2590

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

- **Tests**
  - Improved the flexibility of the "Unused blobs" count test by dynamically verifying the count before and after deletion, instead of relying on hardcoded values.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 09:45:41 +00:00
pengx17
53c531c931 feat(electron): add welcome page for meetings (#12042)
fix AF-2572

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/0e56b58a-97b4-4984-81fa-f8e45f8cc561.png)

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/97e3bb97-e326-48f6-8dd4-27734f583775.png)

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

- **New Features**
  - Introduced a Meetings welcome page with a beta disclaimer and "Get Started" flow.
  - Added separate toggles for AI auto summary and AI auto todo list in meeting settings.
  - Added "Beta" labels to relevant settings and sidebar items for clearer feature status.
  - Enhanced settings UI with improved headers, subtitles, and new styling.

- **Improvements**
  - Meeting settings now allow independent control over AI-generated summaries and todo lists.
  - Updated internationalization to support new meeting and AI transcription features, including richer prompts and hints.
  - Refined logic for enabling meeting recording, including improved permission handling.
  - Simplified transcription logic to rely solely on AI enablement flag.

- **Bug Fixes**
  - Fixed display and control of meeting settings based on beta disclaimer acceptance.

- **Chores**
  - Updated localization files and completeness percentages for several languages.
  - Removed deprecated feature flag for enabling meetings.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 09:29:58 +00:00
Flrande
f79dfe837f feat(editor): support preview mode in code block (#11805)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a preview mode for code blocks, allowing users to toggle between code and rendered previews (e.g., HTML output) directly within the editor.
  - Added a preview toggle button to the code block toolbar for supported languages.
  - Enabled dynamic rendering of code block previews using a shared WebContainer, allowing live HTML previews in an embedded iframe.
  - Added HTML preview support with loading and error states for enhanced user feedback.
  - Integrated the preview feature as a view extension provider for seamless framework support.

- **Bug Fixes**
  - Improved toolbar layout and button alignment for a cleaner user interface.

- **Tests**
  - Added end-to-end tests to verify the new code block preview functionality and language switching behavior.

- **Chores**
  - Updated development server configuration to include enhanced security headers.
  - Added a new runtime dependency for WebContainer support.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 09:14:12 +00:00
Saul-Mirone
1e89aa48cb refactor(editor): remove unused code (#12142)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Streamlined internal logic for handling block operations to improve efficiency.
  - Removed unused reactive subject and related code from document handling classes.
  - Renamed a private initialization method for improved clarity.

- **Chores**
  - Cleaned up redundant code and imports to simplify maintenance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 09:00:40 +00:00
doufa
1994dd6d9d fix(editor): can not delete code block with delete keyboard (#11988) 2025-05-06 16:14:41 +08:00
Aki Chang
24f52ed649 feat(android): support self-host & multi channels (#12095) 2025-05-06 16:13:20 +08:00
Saul-Mirone
88ceeba5b6 refactor(editor): move block yjs listener to store (#12140)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Streamlined internal event handling for block updates, removing previous notification mechanisms from several components.
- **Chores**
  - Simplified and cleaned up internal logic related to block addition and deletion tracking.

No visible changes to the user interface or end-user features.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 07:44:57 +00:00
Brooooooklyn
83f7093144 chore(y-octo): migrate away depracated JsExternal API (#12130)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Updated usage of JavaScript interop types to newer API versions for improved compatibility and consistency.
  - Changed method and type signatures to use updated types in several areas.
  - Removed an unused constructor from one component.
  - Adjusted a method to use a different JavaScript array buffer type for update callbacks.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 07:24:54 +00:00
L-Sun
245db4e992 fix(editor): make selected and out-of-viewport block active (#12135)
This PR make out-of-viewport but selected edgeless block keep active, since the selected block may still have some user interactions on the DOM. For example, when hover on a selected note and scroll viewport by wheel to view its hidden content, the note should not be hidden (a.k.a idel).

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

## Summary by CodeRabbit

- **Refactor**
  - Updated viewport logic to keep selected items visible instead of only those being edited. Visibility now depends on selection status rather than editing state.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 07:05:54 +00:00
pengx17
aa33b3ac07 fix(core): add back missing i18n key (#12088)
fix AF-2576

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

- **New Features**
  - Added a new English translation for "Add docs" in the folder organization section of the app sidebar.

- **Chores**
  - Updated translation completeness percentage for the "es-CL" locale.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 06:26:50 +00:00
L-Sun
29a7946585 fix(editor): userProvider should be optional (#12137)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Bug Fixes**
  - Improved stability of the toolbar menu by preventing errors when user information is unavailable.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 03:30:49 +00:00
pengx17
1ca7109812 fix(electron): adjust switch tab shortcuts on Mac (#12060)
fix #10541

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

## Summary by CodeRabbit

- **Style**
  - Updated keyboard shortcuts for switching tabs to use 'Control+Tab' and 'Control+Shift+Tab'.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 02:54:37 +00:00
doodlewind
065167a09f test(editor): reduce flaky timing in turbo renderer tests (#12082)
### TL;DR

Improved the test stability for the turbo renderer by using reactive state observation instead of arbitrary timeouts. (https://github.com/toeverything/AFFiNE/actions/runs/14729729312/job/41340918866?pr=12071)

### What changed?

- Replaced `wait(FRAME)` and other timeout-based waits with reactive state observation using RxJS
- Added `filter` import from `rxjs/operators`
- Updated test assertions to properly wait for specific renderer states (`ready`, `pending`, `zooming`)
- Made tests more deterministic by waiting for specific state transitions rather than arbitrary time periods

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

- **Tests**
  - Improved test reliability by replacing fixed-duration waits with reactive waits based on renderer state changes, ensuring tests are synchronized with actual state transitions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 02:32:48 +00:00
Saul-Mirone
d859c4252b refactor(editor): move history from doc to store (#12131)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Undo/redo history management is now centralized in the workspace, providing more consistent and robust undo/redo behavior.
  - History update events are emitted at the workspace level, enabling better tracking of changes.

- **Bug Fixes**
  - Improved reliability of undo/redo actions by shifting history management from documents to the workspace.

- **Documentation**
  - Updated and clarified documentation for history-related APIs, including improved examples and clearer descriptions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-05 09:24:09 +00:00
2491 changed files with 99575 additions and 45595 deletions

View File

@@ -6,6 +6,7 @@ yarn install
# Build Server Dependencies
yarn affine @affine/server-native build
yarn affine @affine/reader build
# Create database
yarn affine @affine/server prisma migrate reset -f

View File

@@ -10,6 +10,7 @@ services:
environment:
DATABASE_URL: postgresql://affine:affine@db:5432/affine
REDIS_SERVER_HOST: redis
AFFINE_INDEXER_SEARCH_ENDPOINT: http://indexer:9308
db:
image: pgvector/pgvector:pg16
@@ -23,5 +24,19 @@ services:
redis:
image: redis
indexer:
image: manticoresearch/manticore:${MANTICORE_VERSION:-9.3.2}
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
memlock:
soft: -1
hard: -1
volumes:
- manticoresearch_data:/var/lib/manticore
volumes:
postgres-data:
manticoresearch_data:

View File

@@ -3,4 +3,13 @@ DB_VERSION=16
# database credentials
DB_PASSWORD=affine
DB_USERNAME=affine
DB_DATABASE_NAME=affine
DB_DATABASE_NAME=affine
# elasticsearch env
# ELASTIC_VERSION=9.0.1
# enable for arm64, e.g.: macOS M1+
# ELASTIC_VERSION_ARM64=-arm64
# ELASTIC_PLATFORM=linux/arm64
# manticoresearch
MANTICORE_VERSION=9.3.2

View File

@@ -1,3 +1,6 @@
postgres
.env
compose.yml
compose.yml
certs/*
!certs/.gitkeep
nginx/conf.d/*

27
.docker/dev/README.md Normal file
View File

@@ -0,0 +1,27 @@
# Dev containers
## Develop with domain
> MacOs only, OrbStack only
### 1. Generate and install Root CA
```bash
# the root ca file will be located at `./.docker/dev/certs/ca`
yarn affine cert --install
```
### 2. Generate domain certs
```bash
# certificates will be located at `./.docker/dev/certs/${domain}`
yarn affine cert --domain dev.affine.fail
```
### 3. Enable dns and nginx service in compose.yml
### 4. Add custom dns server
```bash
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/dev.affine.fail
```

View File

View File

@@ -24,8 +24,78 @@ services:
- 1025:1025
- 8025:8025
# https://manual.manticoresearch.com/Starting_the_server/Docker
manticoresearch:
image: manticoresearch/manticore:${MANTICORE_VERSION:-9.3.2}
ports:
- 9308:9308
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
memlock:
soft: -1
hard: -1
volumes:
- manticoresearch_data:/var/lib/manticore
# elasticsearch:
# image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION:-9.0.1}${ELASTIC_VERSION_ARM64}
# platform: ${ELASTIC_PLATFORM}
# labels:
# co.elastic.logs/module: elasticsearch
# volumes:
# - elasticsearch_data:/usr/share/elasticsearch/data
# ports:
# - ${ES_PORT:-9200}:9200
# environment:
# - node.name=es01
# - cluster.name=affine-dev
# - discovery.type=single-node
# - bootstrap.memory_lock=true
# - xpack.security.enabled=false
# - xpack.security.http.ssl.enabled=false
# - xpack.security.transport.ssl.enabled=false
# - xpack.license.self_generated.type=basic
# mem_limit: ${ES_MEM_LIMIT:-1073741824}
# ulimits:
# memlock:
# soft: -1
# hard: -1
# healthcheck:
# test:
# [
# "CMD-SHELL",
# "curl -s http://localhost:9200 | grep -q 'affine-dev'",
# ]
# interval: 10s
# timeout: 10s
# retries: 120
# dns:
# image: strm/dnsmasq
# volumes:
# - ./dnsmasq.conf:/etc/dnsmasq.d/local.conf
# ports:
# - "53:53/udp"
# cap_add:
# - NET_ADMIN
# depends_on:
# - nginx
# nginx:
# image: nginx:alpine
# volumes:
# - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
# - ./nginx/conf.d:/etc/nginx/conf.d:ro
# - ./certs:/etc/nginx/certs:ro
# network_mode: host
networks:
dev:
volumes:
postgres_data:
manticoresearch_data:
elasticsearch_data:

2
.docker/dev/dnsmasq.conf Normal file
View File

@@ -0,0 +1,2 @@
log-queries
address=/dev.affine.fail/127.0.0.1

View File

@@ -0,0 +1,28 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 512M;
server_names_hash_bucket_size 128;
ssi on;
gzip on;
include "/etc/nginx/conf.d/*";
}

View File

@@ -0,0 +1,27 @@
server {
listen 80;
server_name DEV_DOMAIN;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
http2 on;
ssl_certificate /etc/nginx/certs/$host/crt;
ssl_certificate_key /etc/nginx/certs/$host/key;
server_name DEV_DOMAIN;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
resolver 127.0.0.1;
}
}

View File

@@ -0,0 +1,25 @@
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = DEV_DOMAIN
DNS.2 = *.DEV_DOMAIN

View File

@@ -20,4 +20,4 @@ CONFIG_LOCATION=~/.affine/self-host/config
# database credentials
DB_USERNAME=affine
DB_PASSWORD=
DB_DATABASE=affine
DB_DATABASE=affine

1
.docker/selfhost/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.env

View File

@@ -21,6 +21,7 @@ services:
environment:
- REDIS_SERVER_HOST=redis
- DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
- AFFINE_INDEXER_ENABLED=false
restart: unless-stopped
affine_migration:
@@ -36,6 +37,7 @@ services:
environment:
- REDIS_SERVER_HOST=redis
- DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
- AFFINE_INDEXER_ENABLED=false
depends_on:
postgres:
condition: service_healthy
@@ -53,7 +55,7 @@ services:
restart: unless-stopped
postgres:
image: postgres:16
image: pgvector/pgvector:pg16
container_name: affine_postgres
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data

View File

@@ -31,9 +31,13 @@
"properties": {
"queue": {
"type": "object",
"description": "The config for job queues\n@default {\"attempts\":5,\"removeOnComplete\":true,\"removeOnFail\":{\"age\":86400,\"count\":500}}\n@link https://api.docs.bullmq.io/interfaces/v5.QueueOptions.html",
"description": "The config for job queues\n@default {\"attempts\":5,\"backoff\":{\"type\":\"exponential\",\"delay\":1000},\"removeOnComplete\":true,\"removeOnFail\":{\"age\":86400,\"count\":500}}\n@link https://api.docs.bullmq.io/interfaces/v5.QueueOptions.html",
"default": {
"attempts": 5,
"backoff": {
"type": "exponential",
"delay": 1000
},
"removeOnComplete": true,
"removeOnFail": {
"age": 86400,
@@ -48,7 +52,19 @@
},
"queues.copilot": {
"type": "object",
"description": "The config for copilot job queue\n@default {\"concurrency\":1}",
"description": "The config for copilot job queue\n@default {\"concurrency\":10}",
"properties": {
"concurrency": {
"type": "number"
}
},
"default": {
"concurrency": 10
}
},
"queues.doc": {
"type": "object",
"description": "The config for doc job queue\n@default {\"concurrency\":1}",
"properties": {
"concurrency": {
"type": "number"
@@ -58,9 +74,9 @@
"concurrency": 1
}
},
"queues.doc": {
"queues.indexer": {
"type": "object",
"description": "The config for doc job queue\n@default {\"concurrency\":1}",
"description": "The config for indexer job queue\n@default {\"concurrency\":1}",
"properties": {
"concurrency": {
"type": "number"
@@ -123,32 +139,6 @@
}
}
},
"websocket": {
"type": "object",
"description": "Configuration for websocket module",
"properties": {
"transports": {
"type": "array",
"description": "The enabled transports for accepting websocket traffics.\n@default [\"websocket\",\"polling\"]\n@link https://docs.nestjs.com/websockets/gateways#transports",
"items": {
"type": "string",
"enum": [
"websocket",
"polling"
]
},
"default": [
"websocket",
"polling"
]
},
"maxHttpBufferSize": {
"type": "number",
"description": "How many bytes or characters a message can be, before closing the session (to avoid DoS).\n@default 100000000",
"default": 100000000
}
}
},
"auth": {
"type": "object",
"description": "Configuration for auth module",
@@ -501,6 +491,32 @@
}
}
},
"websocket": {
"type": "object",
"description": "Configuration for websocket module",
"properties": {
"transports": {
"type": "array",
"description": "The enabled transports for accepting websocket traffics.\n@default [\"websocket\",\"polling\"]\n@link https://docs.nestjs.com/websockets/gateways#transports",
"items": {
"type": "string",
"enum": [
"websocket",
"polling"
]
},
"default": [
"websocket",
"polling"
]
},
"maxHttpBufferSize": {
"type": "number",
"description": "How many bytes or characters a message can be, before closing the session (to avoid DoS).\n@default 100000000",
"default": 100000000
}
}
},
"server": {
"type": "object",
"description": "Configuration for server module",
@@ -627,6 +643,41 @@
"apiKey": ""
}
},
"providers.geminiVertex": {
"type": "object",
"description": "The config for the google vertex provider.\n@default {}",
"properties": {
"location": {
"type": "string",
"description": "The location of the google vertex provider."
},
"project": {
"type": "string",
"description": "The project name of the google vertex provider."
},
"googleAuthOptions": {
"type": "object",
"description": "The google auth options for the google vertex provider.",
"properties": {
"credentials": {
"type": "object",
"description": "The credentials for the google vertex provider.",
"properties": {
"client_email": {
"type": "string",
"description": "The client email for the google vertex provider."
},
"private_key": {
"type": "string",
"description": "The private key for the google vertex provider."
}
}
}
}
}
},
"default": {}
},
"providers.perplexity": {
"type": "object",
"description": "The config for the perplexity provider.\n@default {\"apiKey\":\"\"}",
@@ -634,6 +685,48 @@
"apiKey": ""
}
},
"providers.anthropic": {
"type": "object",
"description": "The config for the anthropic provider.\n@default {\"apiKey\":\"\"}",
"default": {
"apiKey": ""
}
},
"providers.anthropicVertex": {
"type": "object",
"description": "The config for the google vertex provider.\n@default {}",
"properties": {
"location": {
"type": "string",
"description": "The location of the google vertex provider."
},
"project": {
"type": "string",
"description": "The project name of the google vertex provider."
},
"googleAuthOptions": {
"type": "object",
"description": "The google auth options for the google vertex provider.",
"properties": {
"credentials": {
"type": "object",
"description": "The credentials for the google vertex provider.",
"properties": {
"client_email": {
"type": "string",
"description": "The client email for the google vertex provider."
},
"private_key": {
"type": "string",
"description": "The private key for the google vertex provider."
}
}
}
}
}
},
"default": {}
},
"unsplash": {
"type": "object",
"description": "The config for the unsplash key.\n@default {\"key\":\"\"}",
@@ -641,6 +734,13 @@
"key": ""
}
},
"exa": {
"type": "object",
"description": "The config for the exa web search key.\n@default {\"key\":\"\"}",
"default": {
"key": ""
}
},
"storage": {
"type": "object",
"description": "The config for the storage provider.\n@default {\"provider\":\"fs\",\"bucket\":\"copilot\",\"config\":{\"path\":\"~/.affine/storage\"}}",
@@ -780,6 +880,47 @@
}
}
},
"indexer": {
"type": "object",
"description": "Configuration for indexer module",
"properties": {
"enabled": {
"type": "boolean",
"description": "Enable indexer plugin\n@default false\n@environment `AFFINE_INDEXER_ENABLED`",
"default": false
},
"provider.type": {
"type": "string",
"description": "Indexer search service provider name\n@default \"manticoresearch\"\n@environment `AFFINE_INDEXER_SEARCH_PROVIDER`",
"default": "manticoresearch"
},
"provider.endpoint": {
"type": "string",
"description": "Indexer search service endpoint\n@default \"http://localhost:9308\"\n@environment `AFFINE_INDEXER_SEARCH_ENDPOINT`",
"default": "http://localhost:9308"
},
"provider.apiKey": {
"type": "string",
"description": "Indexer search service api key. Optional for elasticsearch\n@default \"\"\n@environment `AFFINE_INDEXER_SEARCH_API_KEY`\n@link https://www.elastic.co/guide/server/current/api-key.html",
"default": ""
},
"provider.username": {
"type": "string",
"description": "Indexer search service auth username, if not set, basic auth will be disabled. Optional for elasticsearch\n@default \"\"\n@environment `AFFINE_INDEXER_SEARCH_USERNAME`\n@link https://www.elastic.co/guide/en/elasticsearch/reference/current/http-clients.html",
"default": ""
},
"provider.password": {
"type": "string",
"description": "Indexer search service auth password, if not set, basic auth will be disabled. Optional for elasticsearch\n@default \"\"\n@environment `AFFINE_INDEXER_SEARCH_PASSWORD`",
"default": ""
},
"autoIndex.batchSize": {
"type": "number",
"description": "Number of workspaces automatically indexed per batch\n@default 10",
"default": 10
}
}
},
"oauth": {
"type": "object",
"description": "Configuration for oauth module",
@@ -824,13 +965,43 @@
},
"providers.oidc": {
"type": "object",
"description": "OIDC OAuth provider config\n@default {\"clientId\":\"\",\"clientSecret\":\"\",\"issuer\":\"\",\"args\":{}}",
"description": "OIDC OAuth provider config\n@default {\"clientId\":\"\",\"clientSecret\":\"\",\"issuer\":\"\",\"args\":{}}\n@link https://openid.net/specs/openid-connect-core-1_0.html",
"properties": {
"clientId": {
"type": "string"
},
"clientSecret": {
"type": "string"
},
"args": {
"type": "object"
}
},
"default": {
"clientId": "",
"clientSecret": "",
"issuer": "",
"args": {}
}
},
"providers.apple": {
"type": "object",
"description": "Apple OAuth provider config\n@default {\"clientId\":\"\",\"clientSecret\":\"\"}\n@link https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/implementing_sign_in_with_apple_in_your_app",
"properties": {
"clientId": {
"type": "string"
},
"clientSecret": {
"type": "string"
},
"args": {
"type": "object"
}
},
"default": {
"clientId": "",
"clientSecret": ""
}
}
}
},

View File

@@ -16,6 +16,9 @@ const {
REDIS_SERVER_HOST,
REDIS_SERVER_PASSWORD,
STATIC_IP_NAME,
AFFINE_INDEXER_SEARCH_PROVIDER,
AFFINE_INDEXER_SEARCH_ENDPOINT,
AFFINE_INDEXER_SEARCH_API_KEY,
} = process.env;
const buildType = BUILD_TYPE || 'canary';
@@ -81,6 +84,11 @@ const createHelmCommand = ({ isDryRun }) => {
`--set-string global.redis.password="${REDIS_SERVER_PASSWORD}"`,
]
: [];
const indexerOptions = [
`--set-string global.indexer.provider="${AFFINE_INDEXER_SEARCH_PROVIDER}"`,
`--set-string global.indexer.endpoint="${AFFINE_INDEXER_SEARCH_ENDPOINT}"`,
`--set-string global.indexer.apiKey="${AFFINE_INDEXER_SEARCH_API_KEY}"`,
];
const serviceAnnotations = [
`--set-json web.serviceAccount.annotations="{ \\"iam.gke.io/gcp-service-account\\": \\"${APP_IAM_ACCOUNT}\\" }"`,
`--set-json graphql.serviceAccount.annotations="{ \\"iam.gke.io/gcp-service-account\\": \\"${APP_IAM_ACCOUNT}\\" }"`,
@@ -130,6 +138,7 @@ const createHelmCommand = ({ isDryRun }) => {
`--set-string global.ingress.host="${host}"`,
`--set-string global.version="${APP_VERSION}"`,
...redisAndPostgres,
...indexerOptions,
`--set web.replicaCount=${replica.web}`,
`--set-string web.image.tag="${imageTag}"`,
`--set graphql.replicaCount=${replica.graphql}`,

View File

@@ -4,6 +4,11 @@ description: 'Prepare Server Test Environment'
runs:
using: 'composite'
steps:
- name: Bundle @affine/reader
shell: bash
run: |
yarn affine @affine/reader build
- name: Initialize database
shell: bash
run: |
@@ -21,13 +26,10 @@ runs:
yarn affine @affine/server prisma generate
yarn affine @affine/server prisma migrate deploy
yarn affine @affine/server data-migration run
- name: Import config
shell: bash
env:
DEFAULT_CONFIG: '{}'
run: |
printf '{"copilot":{"enabled":true,"providers.fal":{"apiKey":"%s"},"providers.gemini":{"apiKey":"%s"},"providers.openai":{"apiKey":"%s"},"providers.perplexity":{"apiKey":"%s"},"providers.anthropic":{"apiKey":"%s"},"exa":{"key":"%s"}}}' \
"$COPILOT_FAL_API_KEY" \
"$COPILOT_GOOGLE_API_KEY" \
"$COPILOT_OPENAI_API_KEY" \
"$COPILOT_PERPLEXITY_API_KEY" \
"$COPILOT_ANTHROPIC_API_KEY" \
"$COPILOT_EXA_API_KEY" > ./packages/backend/server/config.json
printf '%s\n' "${SERVER_CONFIG:-$DEFAULT_CONFIG}" > ./packages/backend/server/config.json

View File

@@ -69,6 +69,15 @@ spec:
key: redis-password
- name: REDIS_SERVER_DATABASE
value: "{{ .Values.global.redis.database }}"
- name: AFFINE_INDEXER_SEARCH_PROVIDER
value: "{{ .Values.global.indexer.provider }}"
- name: AFFINE_INDEXER_SEARCH_ENDPOINT
value: "{{ .Values.global.indexer.endpoint }}"
- name: AFFINE_INDEXER_SEARCH_API_KEY
valueFrom:
secretKeyRef:
name: indexer
key: indexer-apiKey
- name: AFFINE_SERVER_PORT
value: "{{ .Values.global.docService.port }}"
- name: AFFINE_SERVER_SUB_PATH
@@ -86,11 +95,13 @@ spec:
path: /info
port: http
initialDelaySeconds: {{ .Values.probe.initialDelaySeconds }}
timeoutSeconds: {{ .Values.probe.timeoutSeconds }}
readinessProbe:
httpGet:
path: /info
port: http
initialDelaySeconds: {{ .Values.probe.initialDelaySeconds }}
timeoutSeconds: {{ .Values.probe.timeoutSeconds }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}

View File

@@ -36,6 +36,7 @@ resources:
probe:
initialDelaySeconds: 20
timeoutSeconds: 5
nodeSelector: {}
tolerations: []

View File

@@ -67,6 +67,15 @@ spec:
key: redis-password
- name: REDIS_SERVER_DATABASE
value: "{{ .Values.global.redis.database }}"
- name: AFFINE_INDEXER_SEARCH_PROVIDER
value: "{{ .Values.global.indexer.provider }}"
- name: AFFINE_INDEXER_SEARCH_ENDPOINT
value: "{{ .Values.global.indexer.endpoint }}"
- name: AFFINE_INDEXER_SEARCH_API_KEY
valueFrom:
secretKeyRef:
name: indexer
key: indexer-apiKey
- name: AFFINE_SERVER_PORT
value: "{{ .Values.service.port }}"
- name: AFFINE_SERVER_SUB_PATH

View File

@@ -44,6 +44,15 @@ spec:
secretKeyRef:
name: redis
key: redis-password
- name: AFFINE_INDEXER_SEARCH_PROVIDER
value: "{{ .Values.global.indexer.provider }}"
- name: AFFINE_INDEXER_SEARCH_ENDPOINT
value: "{{ .Values.global.indexer.endpoint }}"
- name: AFFINE_INDEXER_SEARCH_API_KEY
valueFrom:
secretKeyRef:
name: indexer
key: indexer-apiKey
resources:
requests:
cpu: '100m'

View File

@@ -69,6 +69,15 @@ spec:
key: redis-password
- name: REDIS_SERVER_DATABASE
value: "{{ .Values.global.redis.database }}"
- name: AFFINE_INDEXER_SEARCH_PROVIDER
value: "{{ .Values.global.indexer.provider }}"
- name: AFFINE_INDEXER_SEARCH_ENDPOINT
value: "{{ .Values.global.indexer.endpoint }}"
- name: AFFINE_INDEXER_SEARCH_API_KEY
valueFrom:
secretKeyRef:
name: indexer
key: indexer-apiKey
- name: AFFINE_SERVER_PORT
value: "{{ .Values.service.port }}"
- name: AFFINE_SERVER_SUB_PATH

View File

@@ -69,6 +69,15 @@ spec:
key: redis-password
- name: REDIS_SERVER_DATABASE
value: "{{ .Values.global.redis.database }}"
- name: AFFINE_INDEXER_SEARCH_PROVIDER
value: "{{ .Values.global.indexer.provider }}"
- name: AFFINE_INDEXER_SEARCH_ENDPOINT
value: "{{ .Values.global.indexer.endpoint }}"
- name: AFFINE_INDEXER_SEARCH_API_KEY
valueFrom:
secretKeyRef:
name: indexer
key: indexer-apiKey
- name: AFFINE_SERVER_PORT
value: "{{ .Values.service.port }}"
- name: AFFINE_SERVER_HOST

View File

@@ -0,0 +1,13 @@
{{- if .Values.global.indexer.apiKey -}}
apiVersion: v1
kind: Secret
metadata:
name: indexer
annotations:
"helm.sh/hook": pre-install,pre-upgrade
"helm.sh/hook-weight": "-2"
"helm.sh/hook-delete-policy": before-hook-creation
type: Opaque
data:
indexer-apiKey: {{ .Values.global.indexer.apiKey | b64enc }}
{{- end }}

View File

@@ -0,0 +1,13 @@
{{- if eq .Values.global.deployment.platform "gcp" -}}
apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
name: "{{ .Release.Name }}-monitoring"
spec:
selector:
matchLabels:
app.kubernetes.io/instance: {{ .Release.Name }}
endpoints:
- port: 9464
interval: 30s
{{- end }}

View File

@@ -21,6 +21,11 @@ global:
username: ''
password: ''
database: 0
indexer:
provider: ''
endpoint: ''
username: ''
password: ''
docService:
name: 'affine-doc'
port: 3020

View File

@@ -113,6 +113,7 @@ jobs:
build-server-native:
name: Build Server native - ${{ matrix.targets.name }}
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.flavor }}
strategy:
fail-fast: false
matrix:
@@ -136,6 +137,9 @@ jobs:
extra-flags: workspaces focus @affine/server-native
- name: Build Rust
uses: ./.github/actions/build-rust
env:
AFFINE_PRO_PUBLIC_KEY: ${{ secrets.AFFINE_PRO_PUBLIC_KEY }}
AFFINE_PRO_LICENSE_AES_KEY: ${{ secrets.AFFINE_PRO_LICENSE_AES_KEY }}
with:
target: ${{ matrix.targets.name }}
package: '@affine/server-native'
@@ -172,6 +176,8 @@ jobs:
path: ./packages/backend/native
- name: List server-native files
run: ls -alh ./packages/backend/native
- name: Build @affine/reader
run: yarn workspace @affine/reader build
- name: Build Server
run: yarn workspace @affine/server build
- name: Upload server dist
@@ -253,6 +259,9 @@ jobs:
- name: Generate Prisma client
run: yarn workspace @affine/server prisma generate
- name: Mv node_modules
run: mv ./node_modules ./packages/backend/server
- name: Setup Version
id: version
uses: ./.github/actions/setup-version

View File

@@ -20,6 +20,7 @@ env:
COVERAGE: true
MACOSX_DEPLOYMENT_TARGET: '10.13'
DEPLOYMENT_TYPE: affine
AFFINE_INDEXER_ENABLED: true
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -125,6 +126,7 @@ jobs:
- name: Run BS Docs Build
run: |
yarn affine bs-docs build
git checkout packages/frontend/i18n/src/i18n-completenesses.json
git status --porcelain | grep . && {
echo "Run 'yarn typecheck && yarn affine bs-docs build' and make sure all changes are submitted"
exit 1
@@ -150,13 +152,15 @@ jobs:
- name: Clippy
run: |
rustup component add clippy
cargo clippy --all-targets --all-features -- -D warnings
cargo clippy --workspace --exclude affine_server_native --all-targets --all-features -- -D warnings
cargo clippy -p affine_server_native --all-targets --all-features -- -D warnings
check-git-status:
name: Check Git Status
runs-on: ubuntu-latest
needs:
- optimize_ci
- build-server-native
if: needs.optimize_ci.outputs.skip == 'false'
steps:
- uses: actions/checkout@v4
@@ -165,13 +169,26 @@ jobs:
with:
full-cache: true
- name: Download server-native.node
uses: actions/download-artifact@v4
with:
name: server-native.node
path: ./packages/backend/native
- name: Bundle @affine/reader
shell: bash
run: |
yarn workspace @affine/reader build
- name: Run Check
run: |
yarn affine init
yarn affine gql build
yarn affine i18n build
yarn affine server genconfig
git checkout packages/frontend/i18n/src/i18n-completenesses.json
git status --porcelain | grep . && {
echo "Run 'yarn affine init && yarn affine gql build && yarn affine i18n build' and make sure all changes are submitted"
echo "Run 'yarn affine init && yarn affine gql build && yarn affine i18n build && yarn affine server genconfig' and make sure all changes are submitted"
exit 1
} || {
echo "All changes are submitted"
@@ -569,6 +586,10 @@ jobs:
ports:
- 1025:1025
- 8025:8025
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -603,6 +624,90 @@ jobs:
name: affine
fail_ci_if_error: false
server-test-elasticsearch:
name: Server Test with Elasticsearch
runs-on: ubuntu-latest
needs:
- optimize_ci
- build-server-native
if: needs.optimize_ci.outputs.skip == 'false'
strategy:
fail-fast: false
env:
NODE_ENV: test
DATABASE_URL: postgresql://affine:affine@localhost:5432/affine
REDIS_SERVER_HOST: localhost
AFFINE_INDEXER_SEARCH_PROVIDER: elasticsearch
AFFINE_INDEXER_SEARCH_ENDPOINT: http://localhost:9200
services:
postgres:
image: pgvector/pgvector:pg16
env:
POSTGRES_PASSWORD: affine
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
redis:
image: redis
ports:
- 6379:6379
mailer:
image: mailhog/mailhog
ports:
- 1025:1025
- 8025:8025
steps:
# https://github.com/elastic/elastic-github-actions/blob/master/elasticsearch/README.md
- name: Configure sysctl limits for Elasticsearch
run: |
sudo swapoff -a
sudo sysctl -w vm.swappiness=1
sudo sysctl -w fs.file-max=262144
sudo sysctl -w vm.max_map_count=262144
- name: Runs Elasticsearch
uses: elastic/elastic-github-actions/elasticsearch@master
with:
stack-version: 9.0.1
security-enabled: false
- uses: actions/checkout@v4
- name: Setup Node.js
uses: ./.github/actions/setup-node
with:
electron-install: false
full-cache: true
- name: Download server-native.node
uses: actions/download-artifact@v4
with:
name: server-native.node
path: ./packages/backend/native
- name: Prepare Server Test Environment
uses: ./.github/actions/server-test-env
- name: Run server tests with elasticsearch only
run: yarn affine @affine/server test:coverage "**/*/*elasticsearch.spec.ts" --forbid-only
env:
CARGO_TARGET_DIR: '${{ github.workspace }}/target'
CI_NODE_INDEX: ${{ matrix.node_index }}
CI_NODE_TOTAL: ${{ matrix.total_nodes }}
- name: Upload server test coverage results
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./packages/backend/server/.coverage/lcov.info
flags: server-test
name: affine
fail_ci_if_error: false
server-e2e-test:
# the new version of server e2e test should be super fast, so sharding testing is not needed
name: Server E2E Test
@@ -631,6 +736,10 @@ jobs:
image: redis
ports:
- 6379:6379
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -718,7 +827,6 @@ jobs:
- optimize_ci
if: needs.optimize_ci.outputs.skip == 'false'
env:
RUSTFLAGS: -D warnings
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@v4
@@ -816,7 +924,7 @@ jobs:
uses: taiki-e/install-action@nextest
- name: Run tests
run: cargo nextest run --release --no-fail-fast
run: cargo nextest run --workspace --exclude affine_server_native --features use-as-lib --release --no-fail-fast
copilot-api-test:
name: Server Copilot Api Test
@@ -851,6 +959,10 @@ jobs:
ports:
- 1025:1025
- 8025:8025
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -890,12 +1002,7 @@ jobs:
- name: Prepare Server Test Environment
if: ${{ steps.check-blocksuite-update.outputs.skip != 'true' || steps.apifilter.outputs.changed == 'true' }}
env:
COPILOT_OPENAI_API_KEY: ${{ secrets.COPILOT_OPENAI_API_KEY }}
COPILOT_GOOGLE_API_KEY: ${{ secrets.COPILOT_GOOGLE_API_KEY }}
COPILOT_FAL_API_KEY: ${{ secrets.COPILOT_FAL_API_KEY }}
COPILOT_PERPLEXITY_API_KEY: ${{ secrets.COPILOT_PERPLEXITY_API_KEY }}
COPILOT_ANTHROPIC_API_KEY: ${{ secrets.COPILOT_ANTHROPIC_API_KEY }}
COPILOT_EXA_API_KEY: ${{ secrets.COPILOT_EXA_API_KEY }}
SERVER_CONFIG: ${{ secrets.TEST_SERVER_CONFIG }}
uses: ./.github/actions/server-test-env
- name: Run server tests
@@ -946,6 +1053,10 @@ jobs:
image: redis
ports:
- 6379:6379
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -968,6 +1079,7 @@ jobs:
- 'packages/backend/server/src/plugins/copilot/**'
- 'packages/backend/server/tests/copilot.*'
- 'packages/frontend/core/src/blocksuite/ai/**'
- 'packages/frontend/core/src/modules/workspace-indexer-embedding/**'
- 'tests/affine-cloud-copilot/**'
- name: Setup Node.js
@@ -989,12 +1101,7 @@ jobs:
- name: Prepare Server Test Environment
if: ${{ steps.check-blocksuite-update.outputs.skip != 'true' || steps.e2efilter.outputs.changed == 'true' }}
env:
COPILOT_OPENAI_API_KEY: ${{ secrets.COPILOT_OPENAI_API_KEY }}
COPILOT_GOOGLE_API_KEY: ${{ secrets.COPILOT_GOOGLE_API_KEY }}
COPILOT_FAL_API_KEY: ${{ secrets.COPILOT_FAL_API_KEY }}
COPILOT_PERPLEXITY_API_KEY: ${{ secrets.COPILOT_PERPLEXITY_API_KEY }}
COPILOT_ANTHROPIC_API_KEY: ${{ secrets.COPILOT_ANTHROPIC_API_KEY }}
COPILOT_EXA_API_KEY: ${{ secrets.COPILOT_EXA_API_KEY }}
SERVER_CONFIG: ${{ secrets.TEST_SERVER_CONFIG }}
uses: ./.github/actions/server-test-env
- name: Run Copilot E2E Test ${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
@@ -1068,6 +1175,10 @@ jobs:
ports:
- 1025:1025
- 8025:8025
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -1237,6 +1348,13 @@ jobs:
target: x86_64-unknown-linux-gnu,
test: true,
}
- {
os: windows-latest,
platform: windows,
arch: x64,
target: x86_64-pc-windows-msvc,
test: true,
}
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
@@ -1277,6 +1395,18 @@ jobs:
HOIST_NODE_MODULES: 1
run: yarn affine @affine/electron package --platform=darwin --arch=arm64
- name: Make Bundle (Windows)
if: ${{ matrix.spec.target == 'x86_64-pc-windows-msvc' }}
shell: bash
env:
SKIP_BUNDLE: true
SKIP_WEB_BUILD: true
HOIST_NODE_MODULES: 1
run: |
rm -rf packages/frontend/apps/electron/node_modules/@affine/nbstore/node_modules/@blocksuite/affine/node_modules
rm -rf packages/frontend/apps/electron/node_modules/@affine/native/node_modules
yarn affine @affine/electron package --platform=win32 --arch=x64
- name: Make Bundle (Linux)
run: |
sudo add-apt-repository universe

View File

@@ -59,6 +59,10 @@ jobs:
ports:
- 1025:1025
- 8025:8025
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -77,12 +81,7 @@ jobs:
- name: Prepare Server Test Environment
env:
COPILOT_OPENAI_API_KEY: ${{ secrets.COPILOT_OPENAI_API_KEY }}
COPILOT_FAL_API_KEY: ${{ secrets.COPILOT_FAL_API_KEY }}
COPILOT_GOOGLE_API_KEY: ${{ secrets.COPILOT_GOOGLE_API_KEY }}
COPILOT_PERPLEXITY_API_KEY: ${{ secrets.COPILOT_PERPLEXITY_API_KEY }}
COPILOT_ANTHROPIC_API_KEY: ${{ secrets.COPILOT_ANTHROPIC_API_KEY }}
COPILOT_EXA_API_KEY: ${{ secrets.COPILOT_EXA_API_KEY }}
SERVER_CONFIG: ${{ secrets.TEST_SERVER_CONFIG }}
uses: ./.github/actions/server-test-env
- name: Run server tests
@@ -130,6 +129,10 @@ jobs:
image: redis
ports:
- 6379:6379
indexer:
image: manticoresearch/manticore:9.3.2
ports:
- 9308:9308
steps:
- uses: actions/checkout@v4
@@ -148,12 +151,7 @@ jobs:
- name: Prepare Server Test Environment
env:
COPILOT_OPENAI_API_KEY: ${{ secrets.COPILOT_OPENAI_API_KEY }}
COPILOT_FAL_API_KEY: ${{ secrets.COPILOT_FAL_API_KEY }}
COPILOT_GOOGLE_API_KEY: ${{ secrets.COPILOT_GOOGLE_API_KEY }}
COPILOT_PERPLEXITY_API_KEY: ${{ secrets.COPILOT_PERPLEXITY_API_KEY }}
COPILOT_ANTHROPIC_API_KEY: ${{ secrets.COPILOT_ANTHROPIC_API_KEY }}
COPILOT_EXA_API_KEY: ${{ secrets.COPILOT_EXA_API_KEY }}
SERVER_CONFIG: ${{ secrets.TEST_SERVER_CONFIG }}
uses: ./.github/actions/server-test-env
- name: Run Copilot E2E Test ${{ matrix.shardIndex }}/${{ matrix.shardTotal }}

View File

@@ -103,6 +103,9 @@ jobs:
CLOUD_SQL_IAM_ACCOUNT: ${{ secrets.CLOUD_SQL_IAM_ACCOUNT }}
APP_IAM_ACCOUNT: ${{ secrets.APP_IAM_ACCOUNT }}
STATIC_IP_NAME: ${{ secrets.STATIC_IP_NAME }}
AFFINE_INDEXER_SEARCH_PROVIDER: ${{ secrets.AFFINE_INDEXER_SEARCH_PROVIDER }}
AFFINE_INDEXER_SEARCH_ENDPOINT: ${{ secrets.AFFINE_INDEXER_SEARCH_ENDPOINT }}
AFFINE_INDEXER_SEARCH_API_KEY: ${{ secrets.AFFINE_INDEXER_SEARCH_API_KEY }}
deploy-done:
needs:
@@ -156,7 +159,7 @@ jobs:
BLOCKSUITE_REPO_PATH: ${{ github.workspace }}/blocksuite
- name: Post Failed event to a Slack channel
id: failed-slack
uses: slackapi/slack-github-action@v2.0.0
uses: slackapi/slack-github-action@v2.1.0
if: ${{ always() && contains(needs.*.result, 'failure') }}
with:
method: chat.postMessage
@@ -171,7 +174,7 @@ jobs:
text: "<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|Backend deploy failed `${{ github.event.inputs.flavor }}`>"
- name: Post Cancel event to a Slack channel
id: cancel-slack
uses: slackapi/slack-github-action@v2.0.0
uses: slackapi/slack-github-action@v2.1.0
if: ${{ always() && contains(needs.*.result, 'cancelled') && !contains(needs.*.result, 'failure') }}
with:
token: ${{ secrets.SLACK_BOT_TOKEN }}

View File

@@ -252,7 +252,7 @@ jobs:
shell: bash
# node_modules of nbstore is not needed for building, and it will make the build process out of memory
run: |
rm -rf packages/frontend/apps/electron/node_modules/@affine/nbstore/node_modules/@blocksuite
rm -rf packages/frontend/apps/electron/node_modules/@affine/nbstore/node_modules/@blocksuite/affine/node_modules
rm -rf packages/frontend/apps/electron/node_modules/@affine/native/node_modules
- name: package

View File

@@ -117,31 +117,10 @@ jobs:
name: android
path: packages/frontend/apps/android/dist
determine-ios-runner:
runs-on: ubuntu-latest
ios:
runs-on: ${{ github.ref_name == 'canary' && 'macos-latest' || 'blaze/macos-14' }}
needs:
- build-ios-web
outputs:
RUNNER: ${{ steps.runner.outputs.RUNNER }}
steps:
- name: Determine Runner
id: runner
# Randomly pick runner with 80% chance for blaze/macos-14 and 20% chance for namespace-profile-macos
# blaze/macos-14 is free but has limited concurrency
run: |
RANDOM_NUMBER=$(( $RANDOM % 100 + 1 ))
if [ $RANDOM_NUMBER -le 20 ]; then
echo "Selected namespace-profile-macos (20% probability)"
echo "RUNNER=namespace-profile-macos" >> $GITHUB_OUTPUT
else
echo "Selected blaze/macos-14 (80% probability)"
echo "RUNNER=blaze/macos-14" >> $GITHUB_OUTPUT
fi
ios:
runs-on: ${{ github.ref_name == 'canary' && 'macos-latest' || needs.determine-ios-runner.outputs.RUNNER }}
needs:
- determine-ios-runner
steps:
- uses: actions/checkout@v4
- name: Download mobile artifact

2
.nvmrc
View File

@@ -1 +1 @@
22.15.0
22.16.0

View File

@@ -38,3 +38,5 @@ packages/frontend/apps/ios/App/**
tests/blocksuite/snapshots
blocksuite/docs/api/**
packages/frontend/admin/src/config.json
**/test-docs.json
**/test-blocks.json

962
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -47,9 +47,9 @@ log = "0.4"
loom = { version = "0.7", features = ["checkpoint"] }
mimalloc = "0.1"
nanoid = "0.4"
napi = { version = "3.0.0-alpha.31", features = ["async", "chrono_date", "error_anyhow", "napi9", "serde"] }
napi = { version = "3.0.0-beta.3", features = ["async", "chrono_date", "error_anyhow", "napi9", "serde"] }
napi-build = { version = "2" }
napi-derive = { version = "3.0.0-alpha.28" }
napi-derive = { version = "3.0.0-beta.3" }
nom = "8"
notify = { version = "8", features = ["serde"] }
objc2 = "0.6"
@@ -57,7 +57,7 @@ objc2-foundation = "0.3"
once_cell = "1"
ordered-float = "5"
parking_lot = "0.12"
path-ext = "0.1.1"
path-ext = "0.1.2"
pdf-extract = { git = "https://github.com/toeverything/pdf-extract", branch = "darksky/improve-font-decoding" }
phf = { version = "0.11", features = ["macros"] }
proptest = "1.3"
@@ -77,12 +77,12 @@ smol_str = "0.3"
sqlx = { version = "0.8", default-features = false, features = ["chrono", "macros", "migrate", "runtime-tokio", "sqlite", "tls-rustls"] }
strum_macros = "0.27.0"
symphonia = { version = "0.5", features = ["all", "opt-simd"] }
text-splitter = "0.25"
text-splitter = "0.27"
thiserror = "2"
tiktoken-rs = "0.6"
tokio = "1.37"
tiktoken-rs = "0.7"
tokio = "1.45"
tree-sitter = { version = "0.25" }
tree-sitter-c = { version = "0.23" }
tree-sitter-c = { version = "0.24" }
tree-sitter-c-sharp = { version = "0.23" }
tree-sitter-cpp = { version = "0.23" }
tree-sitter-go = { version = "0.23" }

View File

@@ -43,7 +43,7 @@ _Special thanks to [Blaze](https://runblaze.dev) for their support of this proje
<a href="https://affine.pro/redirect/discord">Discord</a> |
<a href="https://app.affine.pro">Live Demo</a> |
<a href="https://affine.pro/blog/">Blog</a> |
<a href="https://docs.affine.pro/docs/">Documentation</a>
<a href="https://docs.affine.pro/">Documentation</a>
</div>
<br/>
@@ -89,7 +89,7 @@ Star us, and you will receive all release notifications from GitHub without any
**Self-host & Shape your own AFFiNE**
- You have the freedom to manage, self-host, fork and build your own AFFiNE. Plugin community and third-party blocks are coming soon. More tractions on [Blocksuite](https://blocksuite.io). Check there to learn how to [self-host AFFiNE](https://docs.affine.pro/docs/self-host-affine).
- You have the freedom to manage, self-host, fork and build your own AFFiNE. Plugin community and third-party blocks are coming soon. More tractions on [Blocksuite](https://blocksuite.io). Check there to learn how to [self-host AFFiNE](https://docs.affine.pro/self-host-affine).
## Acknowledgement
@@ -191,7 +191,9 @@ We would like to express our gratitude to all the individuals who have already c
## Self-Host
Begin with Docker to deploy your own feature-rich, unrestricted version of AFFiNE. Our team is diligently updating to the latest version. For more information on how to self-host AFFiNE, please refer to our [documentation](https://docs.affine.pro/docs/self-host-affine).
Begin with Docker to deploy your own feature-rich, unrestricted version of AFFiNE. Our team is diligently updating to the latest version. For more information on how to self-host AFFiNE, please refer to our [documentation](https://docs.affine.pro/self-host-affine).
[![Run on ClawCloud](https://raw.githubusercontent.com/ClawCloud/Run-Template/refs/heads/main/Run-on-ClawCloud.svg)](https://template.run.claw.cloud/?openapp=system-fastdeploy%3FtemplateName%3Daffine)
## Hiring

View File

@@ -33,6 +33,7 @@
"@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-foundation": "workspace:*",
"@blocksuite/affine-fragment-adapter-panel": "workspace:*",
"@blocksuite/affine-fragment-doc-title": "workspace:*",
"@blocksuite/affine-fragment-frame-panel": "workspace:*",
"@blocksuite/affine-fragment-outline": "workspace:*",
@@ -58,11 +59,14 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/affine-widget-drag-handle": "workspace:*",
"@blocksuite/affine-widget-edgeless-auto-connect": "workspace:*",
"@blocksuite/affine-widget-edgeless-dragging-area": "workspace:*",
"@blocksuite/affine-widget-edgeless-selected-rect": "workspace:*",
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/affine-widget-edgeless-zoom-toolbar": "workspace:*",
"@blocksuite/affine-widget-frame-title": "workspace:*",
"@blocksuite/affine-widget-keyboard-toolbar": "workspace:*",
"@blocksuite/affine-widget-linked-doc": "workspace:*",
"@blocksuite/affine-widget-note-slicer": "workspace:*",
"@blocksuite/affine-widget-page-dragging-area": "workspace:*",
"@blocksuite/affine-widget-remote-selection": "workspace:*",
"@blocksuite/affine-widget-scroll-anchoring": "workspace:*",
@@ -178,6 +182,8 @@
"./widgets/drag-handle/view": "./src/widgets/drag-handle/view.ts",
"./widgets/edgeless-auto-connect": "./src/widgets/edgeless-auto-connect/index.ts",
"./widgets/edgeless-auto-connect/view": "./src/widgets/edgeless-auto-connect/view.ts",
"./widgets/edgeless-dragging-area": "./src/widgets/edgeless-dragging-area/index.ts",
"./widgets/edgeless-dragging-area/view": "./src/widgets/edgeless-dragging-area/view.ts",
"./widgets/edgeless-toolbar": "./src/widgets/edgeless-toolbar/index.ts",
"./widgets/edgeless-toolbar/view": "./src/widgets/edgeless-toolbar/view.ts",
"./widgets/frame-title": "./src/widgets/frame-title/index.ts",
@@ -204,6 +210,8 @@
"./fragments/frame-panel/view": "./src/fragments/frame-panel/view.ts",
"./fragments/outline": "./src/fragments/outline/index.ts",
"./fragments/outline/view": "./src/fragments/outline/view.ts",
"./fragments/adapter-panel": "./src/fragments/adapter-panel/index.ts",
"./fragments/adapter-panel/view": "./src/fragments/adapter-panel/view.ts",
"./gfx/text": "./src/gfx/text/index.ts",
"./gfx/text/store": "./src/gfx/text/store.ts",
"./gfx/text/view": "./src/gfx/text/view.ts",
@@ -258,6 +266,7 @@
"./components/toolbar": "./src/components/toolbar.ts",
"./components/view-dropdown-menu": "./src/components/view-dropdown-menu.ts",
"./components/tooltip-content-with-shortcut": "./src/components/tooltip-content-with-shortcut.ts",
"./components/resource": "./src/components/resource.ts",
"./rich-text": "./src/rich-text/index.ts",
"./rich-text/effects": "./src/rich-text/effects.ts",
"./shared/adapters": "./src/shared/adapters.ts",
@@ -273,7 +282,9 @@
"./model": "./src/model/index.ts",
"./sync": "./src/sync/index.ts",
"./extensions/store": "./src/extensions/store.ts",
"./extensions/view": "./src/extensions/view.ts"
"./extensions/view": "./src/extensions/view.ts",
"./foundation/store": "./src/foundation/store.ts",
"./foundation/view": "./src/foundation/view.ts"
},
"files": [
"src",
@@ -284,6 +295,7 @@
"version": "0.21.0",
"devDependencies": {
"@vanilla-extract/vite-plugin": "^5.0.0",
"vitest": "3.1.2"
"msw": "^2.8.4",
"vitest": "3.1.3"
}
}

View File

@@ -2360,6 +2360,65 @@ describe('html to snapshot', () => {
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('should preserve space in p', async () => {
const html = template(
`<p>A <b>bold text</b> followed by a <i>italic text</i></p>`
);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'A ',
},
{
insert: 'bold text',
attributes: {
bold: true,
},
},
{
insert: ' followed by a ',
},
{
insert: 'italic text',
attributes: {
italic: true,
},
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('span nested in p', async () => {
const html = template(
`<p><span>aaa</span><span>bbb</span><span>ccc</span></p>`
@@ -2638,4 +2697,335 @@ describe('html to snapshot', () => {
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('block level element in b should not be treated as inline', async () => {
const html = template(`<b><p><span>aaa</span></p></b>`);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'aaa',
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
describe('strong element', () => {
test('should not be bold when font-weight is normal', async () => {
const html = template(`<span style="font-weight: normal;">aaa</span>`);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'aaa',
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('should be bold when font-weight is bold or 500-900 ', async () => {
const html = template(
`<p><span style="font-weight: bold;">aaa</span><span style="font-weight: 100;">aaa</span><span style="font-weight: 500;">bbb</span><span style="font-weight: 200;">bbb</span><span style="font-weight: 600;">ccc</span><span style="font-weight: 300;">ccc</span><span style="font-weight: 700;">ddd</span></p>`
);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
attributes: {
bold: true,
},
insert: 'aaa',
},
{
insert: 'aaa',
},
{
attributes: {
bold: true,
},
insert: 'bbb',
},
{
insert: 'bbb',
},
{
attributes: {
bold: true,
},
insert: 'ccc',
},
{
insert: 'ccc',
},
{
attributes: {
bold: true,
},
insert: 'ddd',
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
});
test('should be italic when tag is i or em or span with style font-style: italic', async () => {
const html = template(
`<p><i>aaa</i><span>aaa</span><em>bbb</em><span>bbb</span><span style="font-style: italic;">ccc</span></p>`
);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
attributes: {
italic: true,
},
insert: 'aaa',
},
{
insert: 'aaa',
},
{
attributes: {
italic: true,
},
insert: 'bbb',
},
{
insert: 'bbb',
},
{
attributes: {
italic: true,
},
insert: 'ccc',
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('should be underline when tag is u or span with style text-decoration: underline', async () => {
const html = template(
`<p><u>aaa</u><span>aaa</span><span style="text-decoration: underline;">bbb</span></p>`
);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
attributes: {
underline: true,
},
insert: 'aaa',
},
{
insert: 'aaa',
},
{
attributes: {
underline: true,
},
insert: 'bbb',
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('should be strike when tag is del or span with style text-decoration: line-through', async () => {
const html = template(
`<p><del>aaa</del><span>aaa</span><span style="text-decoration: line-through;">bbb</span></p>`
);
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
attributes: {
strike: true,
},
insert: 'aaa',
},
{
insert: 'aaa',
},
{
attributes: {
strike: true,
},
insert: 'bbb',
},
],
},
},
children: [],
},
],
};
const htmlAdapter = new HtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await htmlAdapter.toBlockSnapshot({
file: html,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
});

View File

@@ -4,6 +4,9 @@ import {
TableModelFlavour,
} from '@blocksuite/affine-model';
import {
CalloutAdmonitionType,
CalloutExportStyle,
calloutMarkdownExportMiddleware,
embedSyncedDocMiddleware,
MarkdownAdapter,
} from '@blocksuite/affine-shared/adapters';
@@ -2449,119 +2452,288 @@ World!
expect(target.file).toBe(markdown);
});
test('callout', async () => {
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'block:vu6SK6WJpW',
flavour: 'affine:page',
props: {
title: {
'$blocksuite:internal:text$': true,
delta: [],
},
},
children: [
{
type: 'block',
id: 'block:Tk4gSPocAt',
flavour: 'affine:surface',
props: {
elements: {},
describe('callout', () => {
test('without export middleware', async () => {
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'block:vu6SK6WJpW',
flavour: 'affine:page',
props: {
title: {
'$blocksuite:internal:text$': true,
delta: [],
},
children: [],
},
{
type: 'block',
id: 'block:WfnS5ZDCJT',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
children: [
{
type: 'block',
id: 'block:Tk4gSPocAt',
flavour: 'affine:surface',
props: {
elements: {},
},
children: [],
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:callout',
props: {
emoji: '💡',
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [{ insert: 'First callout' }],
{
type: 'block',
id: 'block:WfnS5ZDCJT',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:callout',
props: {
emoji: '💡',
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [{ insert: 'First callout' }],
},
},
children: [],
},
children: [],
},
],
},
{
type: 'block',
id: 'block:8hOLxadvdv',
flavour: 'affine:callout',
props: {
emoji: '',
],
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [{ insert: 'Second callout without emoji' }],
{
type: 'block',
id: 'block:8hOLxadvdv',
flavour: 'affine:callout',
props: {
emoji: '',
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{ insert: 'Warning second callout without emoji' },
],
},
},
children: [],
},
children: [],
},
],
},
{
type: 'block',
id: 'block:8hOLxbfdb',
flavour: 'affine:paragraph',
props: {
type: 'quote',
text: {
'$blocksuite:internal:text$': true,
delta: [{ insert: 'This is a regular blockquote' }],
},
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [{ insert: 'Text in second callout' }],
},
},
children: [],
},
],
},
children: [],
},
],
},
],
};
],
},
],
};
const markdown = `> \\[!💡]
const markdown = `> \\[!💡]
>
> First callout
> \\[!]
>
> Second callout without emoji
> This is a regular blockquote
> Warning second callout without emoji
>
> Text in second callout
`;
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const target = await mdAdapter.fromBlockSnapshot({
snapshot: blockSnapshot,
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const target = await mdAdapter.fromBlockSnapshot({
snapshot: blockSnapshot,
});
expect(target.file).toBe(markdown);
});
test('with export middleware', async () => {
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'block:vu6SK6WJpW',
flavour: 'affine:page',
props: {
title: {
'$blocksuite:internal:text$': true,
delta: [],
},
},
children: [
{
type: 'block',
id: 'block:Tk4gSPocAt',
flavour: 'affine:surface',
props: {
elements: {},
},
children: [],
},
{
type: 'block',
id: 'block:WfnS5ZDCJT',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:callout',
props: {
emoji: '💡',
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{ insert: 'Callout that does not have a title' },
],
},
},
children: [],
},
],
},
{
type: 'block',
id: 'block:8hOLxadvdv',
flavour: 'affine:callout',
props: {
emoji: '',
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert:
'Warning callout with custom title and multiple paragraphs',
},
],
},
},
children: [],
},
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [{ insert: 'Text in second callout' }],
},
},
children: [],
},
],
},
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:callout',
props: {
emoji: '💡',
},
children: [
{
type: 'block',
id: 'block:8hOLxad5Fv',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{ insert: 'details' },
{ insert: ' ' },
{ insert: '\nText in details callout with new line' },
],
},
},
children: [],
},
],
},
],
},
],
};
const markdown = `::: info
Callout that does not have a title
:::
::: warning callout with custom title and multiple paragraphs
Text in second callout
:::
::: details
Text in details callout with new line
:::
`;
const mdAdapter = new MarkdownAdapter(
createJob([
calloutMarkdownExportMiddleware({
style: CalloutExportStyle.Admonitions,
admonitionType: CalloutAdmonitionType.Info,
}),
]),
provider
);
const target = await mdAdapter.fromBlockSnapshot({
snapshot: blockSnapshot,
});
expect(target.file).toBe(markdown);
});
expect(target.file).toBe(markdown);
});
});
@@ -4221,6 +4393,61 @@ hhh
},
children: [],
},
{
type: 'block',
id: 'matchesReplaceMap[2]',
flavour: 'affine:paragraph',
props: {
type: 'h6',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'Sources',
},
],
},
collapsed: true,
},
children: [],
},
{
type: 'block',
id: 'matchesReplaceMap[3]',
flavour: 'affine:bookmark',
props: {
style: 'citation',
url,
title,
description,
icon: favicon,
footnoteIdentifier: '1',
},
children: [],
},
{
type: 'block',
id: 'matchesReplaceMap[4]',
flavour: 'affine:embed-linked-doc',
props: {
style: 'citation',
pageId: 'deadbeef',
footnoteIdentifier: '2',
},
children: [],
},
{
type: 'block',
id: 'matchesReplaceMap[5]',
flavour: 'affine:attachment',
props: {
name: 'test.txt',
sourceId: 'abcdefg',
footnoteIdentifier: '3',
style: 'citation',
},
children: [],
},
],
};
@@ -4245,6 +4472,101 @@ hhh
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('should handle footnote reference with url prefix', async () => {
const blockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'https://example.com',
attributes: {
link: 'https://example.com',
},
},
{
insert: ' ',
},
{
insert: ' ',
attributes: {
footnote: {
label: '1',
reference: {
type: 'url',
url,
favicon,
title,
description,
},
},
},
},
],
},
},
children: [],
},
{
type: 'block',
id: 'matchesReplaceMap[2]',
flavour: 'affine:paragraph',
props: {
type: 'h6',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'Sources',
},
],
},
collapsed: true,
},
children: [],
},
{
type: 'block',
id: 'matchesReplaceMap[3]',
flavour: 'affine:bookmark',
props: {
style: 'citation',
url,
title,
description,
icon: favicon,
footnoteIdentifier: '1',
},
children: [],
},
],
};
const markdown = `https://example.com[^1]\n\n[^1]: {"type":"url","url":"${url}","favicon":"${favicon}","title":"${title}","description":"${description}"}\n`;
const mdAdapter = new MarkdownAdapter(createJob(), provider);
const rawBlockSnapshot = await mdAdapter.toBlockSnapshot({
file: markdown,
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
});
test('should not wrap url with angle brackets if it is not a url', async () => {

View File

@@ -1,11 +1,14 @@
import { DefaultTheme, NoteDisplayMode } from '@blocksuite/affine-model';
import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters';
import { DEFAULT_IMAGE_PROXY_ENDPOINT } from '@blocksuite/affine-shared/consts';
import {
AssetsManager,
type BlockSnapshot,
MemoryBlobCRUD,
} from '@blocksuite/store';
import { describe, expect, test } from 'vitest';
import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import { afterAll, afterEach, beforeAll, describe, expect, test } from 'vitest';
import { createJob } from '../utils/create-job.js';
import { getProvider } from '../utils/get-provider.js';
@@ -1195,43 +1198,71 @@ describe('notion html to snapshot', () => {
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('image', async () => {
const html = `<div class="page-body">
<figure id="ed3d2ae9-62f5-433a-9049-9ddbd1c81ac5" class="image"><a
href="https://raw.githubusercontent.com/toeverything/blocksuite/master/assets/logo.svg"><img src="https://raw.githubusercontent.com/toeverything/blocksuite/master/assets/logo.svg" /></a>
</figure>
</div>`;
describe('image', () => {
const originalUrl =
'https://raw.githubusercontent.com/toeverything/blocksuite/master/assets/logo.svg';
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:image',
props: {
sourceId: 'matchesReplaceMap[2]',
const imageProxy = DEFAULT_IMAGE_PROXY_ENDPOINT;
const imageUrl = `${imageProxy}?url=${encodeURIComponent(originalUrl)}`;
// Mock the image request
const imageRequestHandlers = [
http.get(imageUrl.toString(), async () => {
// Return a mock image blob
const mockImageBlob = new Blob(['mock image data'], {
type: 'image/svg+xml',
});
return new HttpResponse(mockImageBlob, {
headers: {
'Content-Type': 'image/svg+xml',
},
children: [],
},
],
};
});
}),
];
const adapter = new NotionHtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await adapter.toBlockSnapshot({
file: html,
assets: new AssetsManager({ blob: new MemoryBlobCRUD() }),
const server = setupServer(...imageRequestHandlers);
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }));
afterAll(() => server.close());
afterEach(() => server.resetHandlers());
test('network image resource', async () => {
const html = `<div class="page-body">
<figure id="ed3d2ae9-62f5-433a-9049-9ddbd1c81ac5" class="image"><a
href="${originalUrl}"><img src="${originalUrl}" /></a>
</figure>
</div>`;
const blockSnapshot: BlockSnapshot = {
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:image',
props: {
sourceId: 'matchesReplaceMap[2]',
},
children: [],
},
],
};
const adapter = new NotionHtmlAdapter(createJob(), provider);
const rawBlockSnapshot = await adapter.toBlockSnapshot({
file: html,
assets: new AssetsManager({ blob: new MemoryBlobCRUD() }),
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
expect(nanoidReplacement(rawBlockSnapshot)).toEqual(blockSnapshot);
});
test('bookmark', async () => {

View File

@@ -106,4 +106,65 @@ describe('notion-text to snapshot', () => {
});
expect(nanoidReplacement(target!)).toEqual(sliceSnapshot);
});
test('notion text with empty styles array', () => {
const notionText =
'{"blockType":"text","editing":[["a "],["bold text",[["b"]]],[" hello world"]],"selection":{"startIndex":0,"endIndex":23},"action":"copy"}';
const sliceSnapshot: SliceSnapshot = {
type: 'slice',
content: [
{
type: 'block',
id: 'matchesReplaceMap[0]',
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DefaultTheme.noteBackgrounColor,
index: 'a0',
hidden: false,
displayMode: 'both',
},
children: [
{
type: 'block',
id: 'matchesReplaceMap[1]',
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: 'a ',
},
{
insert: 'bold text',
attributes: {
bold: true,
},
},
{
insert: ' hello world',
},
],
},
},
children: [],
},
],
},
],
workspaceId: '',
pageId: '',
};
const ntAdapter = new NotionTextAdapter(createJob(), provider);
const target = ntAdapter.toSliceSnapshot({
file: notionText,
workspaceId: '',
pageId: '',
});
expect(nanoidReplacement(target!)).toEqual(sliceSnapshot);
});
});

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-components/resource';

View File

@@ -19,6 +19,7 @@ import { SurfaceViewExtension } from '@blocksuite/affine-block-surface/view';
import { SurfaceRefViewExtension } from '@blocksuite/affine-block-surface-ref/view';
import { TableViewExtension } from '@blocksuite/affine-block-table/view';
import { FoundationViewExtension } from '@blocksuite/affine-foundation/view';
import { AdapterPanelViewExtension } from '@blocksuite/affine-fragment-adapter-panel/view';
import { DocTitleViewExtension } from '@blocksuite/affine-fragment-doc-title/view';
import { FramePanelViewExtension } from '@blocksuite/affine-fragment-frame-panel/view';
import { OutlineViewExtension } from '@blocksuite/affine-fragment-outline/view';
@@ -40,11 +41,14 @@ import { InlinePresetViewExtension } from '@blocksuite/affine-inline-preset/view
import { ReferenceViewExtension } from '@blocksuite/affine-inline-reference/view';
import { DragHandleViewExtension } from '@blocksuite/affine-widget-drag-handle/view';
import { EdgelessAutoConnectViewExtension } from '@blocksuite/affine-widget-edgeless-auto-connect/view';
import { EdgelessDraggingAreaViewExtension } from '@blocksuite/affine-widget-edgeless-dragging-area/view';
import { EdgelessSelectedRectViewExtension } from '@blocksuite/affine-widget-edgeless-selected-rect/view';
import { EdgelessToolbarViewExtension } from '@blocksuite/affine-widget-edgeless-toolbar/view';
import { EdgelessZoomToolbarViewExtension } from '@blocksuite/affine-widget-edgeless-zoom-toolbar/view';
import { FrameTitleViewExtension } from '@blocksuite/affine-widget-frame-title/view';
import { KeyboardToolbarViewExtension } from '@blocksuite/affine-widget-keyboard-toolbar/view';
import { LinkedDocViewExtension } from '@blocksuite/affine-widget-linked-doc/view';
import { NoteSlicerViewExtension } from '@blocksuite/affine-widget-note-slicer/view';
import { PageDraggingAreaViewExtension } from '@blocksuite/affine-widget-page-dragging-area/view';
import { RemoteSelectionViewExtension } from '@blocksuite/affine-widget-remote-selection/view';
import { ScrollAnchoringViewExtension } from '@blocksuite/affine-widget-scroll-anchoring/view';
@@ -99,9 +103,9 @@ export function getInternalViewExtensions() {
InlinePresetViewExtension,
// Widget
// order will affect the z-index of the widget
DragHandleViewExtension,
EdgelessAutoConnectViewExtension,
EdgelessToolbarViewExtension,
FrameTitleViewExtension,
KeyboardToolbarViewExtension,
LinkedDocViewExtension,
@@ -112,10 +116,15 @@ export function getInternalViewExtensions() {
ViewportOverlayViewExtension,
EdgelessZoomToolbarViewExtension,
PageDraggingAreaViewExtension,
EdgelessSelectedRectViewExtension,
EdgelessDraggingAreaViewExtension,
NoteSlicerViewExtension,
EdgelessToolbarViewExtension,
// Fragment
DocTitleViewExtension,
FramePanelViewExtension,
OutlineViewExtension,
AdapterPanelViewExtension,
];
}

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-foundation/store';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-foundation/view';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-fragment-adapter-panel';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-fragment-adapter-panel/view';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-widget-edgeless-dragging-area';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-widget-edgeless-dragging-area/view';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-widget-edgeless-selected-rect';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-widget-edgeless-selected-rect/view';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-widget-note-slicer';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-widget-note-slicer/view';

View File

@@ -30,6 +30,7 @@
{ "path": "../components" },
{ "path": "../ext-loader" },
{ "path": "../foundation" },
{ "path": "../fragments/adapter-panel" },
{ "path": "../fragments/doc-title" },
{ "path": "../fragments/frame-panel" },
{ "path": "../fragments/outline" },
@@ -55,11 +56,14 @@
{ "path": "../shared" },
{ "path": "../widgets/drag-handle" },
{ "path": "../widgets/edgeless-auto-connect" },
{ "path": "../widgets/edgeless-dragging-area" },
{ "path": "../widgets/edgeless-selected-rect" },
{ "path": "../widgets/edgeless-toolbar" },
{ "path": "../widgets/edgeless-zoom-toolbar" },
{ "path": "../widgets/frame-title" },
{ "path": "../widgets/keyboard-toolbar" },
{ "path": "../widgets/linked-doc" },
{ "path": "../widgets/note-slicer" },
{ "path": "../widgets/page-dragging-area" },
{ "path": "../widgets/remote-selection" },
{ "path": "../widgets/scroll-anchoring" },

View File

@@ -20,12 +20,11 @@
"@blocksuite/icons": "^2.2.12",
"@blocksuite/std": "workspace:*",
"@blocksuite/store": "workspace:*",
"@blocksuite/sync": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.14",
"file-type": "^20.0.0",
"@toeverything/theme": "^1.1.15",
"file-type": "^21.0.0",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"rxjs": "^7.8.1",
@@ -33,7 +32,6 @@
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts",
"./store": "./src/store.ts",
"./view": "./src/view.ts"
},

View File

@@ -10,7 +10,6 @@ import {
isFootnoteDefinitionNode,
type MarkdownAST,
} from '@blocksuite/affine-shared/adapters';
import { FeatureFlagService } from '@blocksuite/affine-shared/services';
import { nanoid } from '@blocksuite/store';
const isAttachmentFootnoteDefinitionNode = (node: MarkdownAST) => {
@@ -36,15 +35,7 @@ export const attachmentBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher
fromMatch: o => o.node.flavour === AttachmentBlockSchema.model.flavour,
toBlockSnapshot: {
enter: (o, context) => {
const { provider } = context;
let enableCitation = false;
try {
const featureFlagService = provider?.get(FeatureFlagService);
enableCitation = !!featureFlagService?.getFlag('enable_citation');
} catch {
enableCitation = false;
}
if (!isFootnoteDefinitionNode(o.node) || !enableCitation) {
if (!isFootnoteDefinitionNode(o.node)) {
return;
}
@@ -73,6 +64,7 @@ export const attachmentBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher
name: fileName,
sourceId: blobId,
footnoteIdentifier,
style: 'citation',
},
children: [],
},

View File

@@ -4,19 +4,28 @@ import {
} from '@blocksuite/affine-components/caption';
import {
getAttachmentFileIcon,
getLoadingIconWith,
LoadingIcon,
} from '@blocksuite/affine-components/icons';
import { Peekable } from '@blocksuite/affine-components/peek';
import {
type ResolvedStateInfo,
ResourceController,
} from '@blocksuite/affine-components/resource';
import { toast } from '@blocksuite/affine-components/toast';
import {
type AttachmentBlockModel,
AttachmentBlockStyles,
} from '@blocksuite/affine-model';
import {
CitationProvider,
DocModeProvider,
FileSizeLimitProvider,
ThemeProvider,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import { humanFileSize } from '@blocksuite/affine-shared/utils';
import {
formatSize,
openSingleFileWith,
} from '@blocksuite/affine-shared/utils';
import {
AttachmentIcon,
ResetIcon,
@@ -24,25 +33,27 @@ import {
WarningIcon,
} from '@blocksuite/icons/lit';
import { BlockSelection } from '@blocksuite/std';
import { Slice } from '@blocksuite/store';
import { type BlobState } from '@blocksuite/sync';
import { effect, signal } from '@preact/signals-core';
import { nanoid, Slice } from '@blocksuite/store';
import { batch, computed, signal } from '@preact/signals-core';
import { html, type TemplateResult } from 'lit';
import { property } from 'lit/decorators.js';
import { choose } from 'lit/directives/choose.js';
import { type ClassInfo, classMap } from 'lit/directives/class-map.js';
import { guard } from 'lit/directives/guard.js';
import { styleMap } from 'lit/directives/style-map.js';
import { when } from 'lit/directives/when.js';
import { filter } from 'rxjs/operators';
import { AttachmentEmbedProvider } from './embed';
import { styles } from './styles';
import { downloadAttachmentBlob, refreshData } from './utils';
import { downloadAttachmentBlob, getFileType, refreshData } from './utils';
type State = 'loading' | 'uploading' | 'warning' | 'oversize' | 'none';
type AttachmentResolvedStateInfo = ResolvedStateInfo & {
kind?: TemplateResult;
};
@Peekable({
enableOn: ({ model }: AttachmentBlockComponent) => {
return !model.doc.readonly && model.props.type.endsWith('pdf');
return !model.store.readonly && model.props.type.endsWith('pdf');
},
})
export class AttachmentBlockComponent extends CaptionedBlockComponent<AttachmentBlockModel> {
@@ -50,7 +61,18 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
blockDraggable = true;
blobState$ = signal<Partial<BlobState>>({});
resourceController = new ResourceController(
computed(() => this.model.props.sourceId$.value)
);
get blobUrl() {
return this.resourceController.blobUrl$.value;
}
get filetype() {
const name = this.model.props.name$.value;
return name.split('.').pop() ?? '';
}
protected containerStyleMap = styleMap({
position: 'relative',
@@ -62,8 +84,12 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
return this.std.get(FileSizeLimitProvider).maxFileSize;
}
get citationService() {
return this.std.get(CitationProvider);
}
get isCitation() {
return !!this.model.props.footnoteIdentifier;
return this.citationService.isCitationModel(this.model);
}
convertTo = () => {
@@ -73,7 +99,7 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
};
copy = () => {
const slice = Slice.fromModels(this.doc, [this.model]);
const slice = Slice.fromModels(this.store, [this.model]);
this.std.clipboard.copySlice(slice).catch(console.error);
toast(this.host, 'Copied to clipboard');
};
@@ -97,32 +123,60 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
window.open(blobUrl, '_blank');
};
// Refreshes data.
refreshData = () => {
refreshData(this.std, this).catch(console.error);
refreshData(this).catch(console.error);
};
updateBlobState(state: Partial<BlobState>) {
this.blobState$.value = { ...this.blobState$.value, ...state };
}
private readonly _refreshKey$ = signal<string | null>(null);
determineState = (
downloading: boolean,
uploading: boolean,
overSize: boolean,
error: boolean
): State => {
if (overSize) return 'oversize';
if (error) return 'warning';
if (uploading) return 'uploading';
if (downloading) return 'loading';
return 'none';
// Refreshes the embed component.
reload = () => {
batch(() => {
if (this.model.props.embed$.value) {
this._refreshKey$.value = nanoid();
return;
}
this.refreshData();
});
};
protected get embedView() {
return this.std
.get(AttachmentEmbedProvider)
.render(this.model, this.blobUrl ?? undefined, this._maxFileSize);
}
// Replaces the current attachment.
replace = async () => {
const state = this.resourceController.state$.peek();
if (state.uploading) return;
const file = await openSingleFileWith();
if (!file) return;
const sourceId = await this.std.store.blobSync.set(file);
const type = await getFileType(file);
const { name, size } = file;
let embed = this.model.props.embed$.value ?? false;
this.std.store.captureSync();
this.std.store.transact(() => {
this.std.store.updateBlock(this.blockId, {
name,
size,
type,
sourceId,
embed: false,
});
const provider = this.std.get(AttachmentEmbedProvider);
embed &&= provider.embedded(this.model);
if (embed) {
provider.convertTo(this.model);
}
// Reloads
this.reload();
});
};
private _selectBlock() {
const selectionManager = this.host.selection;
@@ -132,49 +186,59 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
selectionManager.setGroup('note', [blockSelection]);
}
private readonly _trackCitationDeleteEvent = () => {
// Check citation delete event
this._disposables.add(
this.std.store.slots.blockUpdated
.pipe(
filter(payload => {
if (!payload.isLocal) return false;
const { flavour, id, type } = payload;
if (
type !== 'delete' ||
flavour !== this.model.flavour ||
id !== this.model.id
)
return false;
const { model } = payload;
if (!this.citationService.isCitationModel(model)) return false;
return true;
})
)
.subscribe(() => {
this.citationService.trackEvent('Delete');
})
);
};
override connectedCallback() {
super.connectedCallback();
this.contentEditable = 'false';
this.refreshData();
this.resourceController.setEngine(this.std.store.blobSync);
this.disposables.add(this.resourceController.subscribe());
this.disposables.add(this.resourceController);
this.disposables.add(
effect(() => {
const blobId = this.model.props.sourceId$.value;
if (!blobId) return;
const blobState$ = this.std.store.blobSync.blobState$(blobId);
if (!blobState$) return;
const subscription = blobState$.subscribe(state => {
if (state.overSize || state.errorMessage) {
state.uploading = false;
state.downloading = false;
}
this.updateBlobState(state);
});
return () => subscription.unsubscribe();
this.model.props.sourceId$.subscribe(() => {
this.refreshData();
})
);
if (!this.model.props.style && !this.doc.readonly) {
this.doc.withoutTransact(() => {
this.doc.updateBlock(this.model, {
if (!this.model.props.style && !this.store.readonly) {
this.store.withoutTransact(() => {
this.store.updateBlock(this.model, {
style: AttachmentBlockStyles[1],
});
});
}
}
override disconnectedCallback() {
const blobUrl = this.blobUrl;
if (blobUrl) {
URL.revokeObjectURL(blobUrl);
}
super.disconnectedCallback();
this._trackCitationDeleteEvent();
}
override firstUpdated() {
@@ -206,6 +270,22 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
@click=${(event: MouseEvent) => {
event.stopPropagation();
onOverFileSize?.();
{
const mode =
this.std.get(DocModeProvider).getEditorMode() ?? 'page';
const segment = mode === 'page' ? 'doc' : 'whiteboard';
this.std
.getOptional(TelemetryProvider)
?.track('AttachmentUpgradedEvent', {
segment,
page: `${segment} editor`,
module: 'attachment',
control: 'upgrade',
category: 'card',
type: this.model.props.name.split('.').pop() ?? '',
});
}
}}
>
${UpgradeIcon()} Upgrade
@@ -214,150 +294,199 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
);
};
protected renderReloadButton = () => {
protected renderNormalButton = (needUpload: boolean) => {
const label = needUpload ? 'retry' : 'reload';
const run = async () => {
if (needUpload) {
await this.resourceController.upload();
return;
}
this.refreshData();
};
return html`
<button
class="affine-attachment-content-button"
@click=${(event: MouseEvent) => {
event.stopPropagation();
this.refreshData();
run().catch(console.error);
{
const mode =
this.std.get(DocModeProvider).getEditorMode() ?? 'page';
const segment = mode === 'page' ? 'doc' : 'whiteboard';
this.std
.getOptional(TelemetryProvider)
?.track('AttachmentReloadedEvent', {
segment,
page: `${segment} editor`,
module: 'attachment',
control: label,
category: 'card',
type: this.filetype,
});
}
}}
>
${ResetIcon()} Reload
${ResetIcon()} ${label}
</button>
`;
};
protected renderWithHorizontal(
classInfo: ClassInfo,
icon: TemplateResult,
title: string,
description: string,
kind: TemplateResult,
state: State
{
icon,
title,
description,
kind,
state,
needUpload,
}: AttachmentResolvedStateInfo
) {
return html`<div class=${classMap(classInfo)}>
<div class="affine-attachment-content">
<div class="affine-attachment-content-title">
<div class="affine-attachment-content-title-icon">${icon}</div>
return html`
<div class=${classMap(classInfo)}>
<div class="affine-attachment-content">
<div class="affine-attachment-content-title">
<div class="affine-attachment-content-title-icon">${icon}</div>
<div class="affine-attachment-content-title-text truncate">
${title}
</div>
</div>
<div class="affine-attachment-content-title-text truncate">
${title}
<div class="affine-attachment-content-description">
<div class="affine-attachment-content-info truncate">
${description}
</div>
${choose(state, [
['error', () => this.renderNormalButton(needUpload)],
['error:oversize', this.renderUpgradeButton],
])}
</div>
</div>
<div class="affine-attachment-content-description">
<div class="affine-attachment-content-info truncate">
${description}
</div>
${choose(state, [
['oversize', this.renderUpgradeButton],
['warning', this.renderReloadButton],
])}
</div>
<div class="affine-attachment-banner">${kind}</div>
</div>
<div class="affine-attachment-banner">${kind}</div>
</div>`;
`;
}
protected renderWithVertical(
classInfo: ClassInfo,
icon: TemplateResult,
title: string,
description: string,
kind: TemplateResult,
state?: State
{
icon,
title,
description,
kind,
state,
needUpload,
}: AttachmentResolvedStateInfo
) {
return html`<div class=${classMap(classInfo)}>
<div class="affine-attachment-content">
<div class="affine-attachment-content-title">
<div class="affine-attachment-content-title-icon">${icon}</div>
return html`
<div class=${classMap(classInfo)}>
<div class="affine-attachment-content">
<div class="affine-attachment-content-title">
<div class="affine-attachment-content-title-icon">${icon}</div>
<div class="affine-attachment-content-title-text truncate">
${title}
</div>
</div>
<div class="affine-attachment-content-title-text truncate">
${title}
<div class="affine-attachment-content-info truncate">
${description}
</div>
</div>
<div class="affine-attachment-content-info truncate">
${description}
<div class="affine-attachment-banner">
${kind}
${choose(state, [
['error', () => this.renderNormalButton(needUpload)],
['error:oversize', this.renderUpgradeButton],
])}
</div>
</div>
<div class="affine-attachment-banner">
${kind}
${choose(state, [
['oversize', this.renderUpgradeButton],
['warning', this.renderReloadButton],
])}
</div>
</div>`;
`;
}
protected renderCard = () => {
const { name, size, style } = this.model.props;
const cardStyle = style ?? AttachmentBlockStyles[1];
protected resolvedState$ = computed<AttachmentResolvedStateInfo>(() => {
const size = this.model.props.size;
const name = this.model.props.name$.value;
const kind = getAttachmentFileIcon(this.filetype);
const theme = this.std.get(ThemeProvider).theme$.value;
const loadingIcon = getLoadingIconWith(theme);
const resolvedState = this.resourceController.resolveStateWith({
loadingIcon: LoadingIcon(),
errorIcon: WarningIcon(),
icon: AttachmentIcon(),
title: name,
description: formatSize(size),
});
const blobState = this.blobState$.value;
const {
uploading = false,
downloading = false,
overSize = false,
errorMessage,
} = blobState;
const warning = !overSize && Boolean(errorMessage);
const error = overSize || warning;
const state = this.determineState(downloading, uploading, overSize, error);
const loading = state === 'loading' || state === 'uploading';
return { ...resolvedState, kind };
});
protected renderCardView = () => {
const resolvedState = this.resolvedState$.value;
const cardStyle = this.model.props.style$.value ?? AttachmentBlockStyles[1];
const classInfo = {
'affine-attachment-card': true,
[cardStyle]: true,
error,
loading,
loading: resolvedState.loading,
error: resolvedState.error,
};
const icon = loading
? loadingIcon
: error
? WarningIcon()
: AttachmentIcon();
const title = uploading ? 'Uploading...' : loading ? 'Loading...' : name;
const description = errorMessage || humanFileSize(size);
const kind = getAttachmentFileIcon(name.split('.').pop() ?? '');
return when(
cardStyle === 'cubeThick',
() =>
this.renderWithVertical(
classInfo,
icon,
title,
description,
kind,
state
),
() =>
this.renderWithHorizontal(
classInfo,
icon,
title,
description,
kind,
state
)
() => this.renderWithVertical(classInfo, resolvedState),
() => this.renderWithHorizontal(classInfo, resolvedState)
);
};
protected renderEmbedView = () => {
const { model, blobUrl } = this;
if (!model.props.embed$.value || !blobUrl) return null;
const { std, _maxFileSize } = this;
const provider = std.get(AttachmentEmbedProvider);
const render = provider.getRender(model, _maxFileSize);
if (!render) return null;
const enabled = provider.shouldShowStatus(model);
return html`
<div class="affine-attachment-embed-container">
${guard([this._refreshKey$.value], () => render(model, blobUrl))}
</div>
${when(enabled, () => {
const resolvedState = this.resolvedState$.value;
if (resolvedState.state !== 'error') return null;
// It should be an error messge.
const message = resolvedState.description;
if (!message) return null;
const needUpload = resolvedState.needUpload;
const action = () =>
needUpload ? this.resourceController.upload() : this.reload();
return html`
<affine-resource-status
class="affine-attachment-embed-status"
.message=${message}
.needUpload=${needUpload}
.action=${action}
></affine-resource-status>
`;
})}
`;
};
private readonly _renderCitation = () => {
const { name, footnoteIdentifier } = this.model.props;
const fileType = name.split('.').pop() ?? '';
const fileTypeIcon = getAttachmentFileIcon(fileType);
const icon = getAttachmentFileIcon(this.filetype);
return html`<affine-citation-card
.icon=${fileTypeIcon}
.icon=${icon}
.citationTitle=${name}
.citationIdentifier=${footnoteIdentifier}
.active=${this.selected$.value}
@@ -376,23 +505,12 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<Attachment
${when(
this.isCitation,
() => this._renderCitation(),
() =>
when(
this.embedView,
() =>
html`<div class="affine-attachment-embed-container">
${this.embedView}
</div>`,
this.renderCard
)
() => this.renderEmbedView() ?? this.renderCardView()
)}
</div>
`;
}
@property({ attribute: false })
accessor blobUrl: string | null = null;
override accessor selectedStyle = SelectedStyle.Border;
override accessor useCaptionEditor = true;

View File

@@ -1,10 +1,14 @@
import { EdgelessLegacySlotIdentifier } from '@blocksuite/affine-block-surface';
import { AttachmentBlockStyles } from '@blocksuite/affine-model';
import {
AttachmentBlockSchema,
AttachmentBlockStyles,
} from '@blocksuite/affine-model';
import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { toGfxBlockComponent } from '@blocksuite/std';
import { GfxViewInteractionExtension } from '@blocksuite/std/gfx';
import { styleMap } from 'lit/directives/style-map.js';
import { AttachmentBlockComponent } from './attachment-block.js';
@@ -48,3 +52,21 @@ declare global {
'affine-edgeless-attachment': AttachmentEdgelessBlockComponent;
}
}
export const AttachmentBlockInteraction = GfxViewInteractionExtension(
AttachmentBlockSchema.model.flavour,
{
resizeConstraint: {
lockRatio: true,
},
handleRotate: () => {
return {
beforeRotate: context => {
context.set({
rotatable: false,
});
},
};
},
}
);

View File

@@ -1,31 +0,0 @@
import { AttachmentBlockSchema } from '@blocksuite/affine-model';
import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { AttachmentBlockAdapterExtensions } from './adapters/extension.js';
import { AttachmentDropOption } from './attachment-service.js';
import { attachmentSlashMenuConfig } from './configs/slash-menu.js';
import { createBuiltinToolbarConfigExtension } from './configs/toolbar';
import {
AttachmentEmbedConfigExtension,
AttachmentEmbedService,
} from './embed';
const flavour = AttachmentBlockSchema.model.flavour;
export const AttachmentBlockSpec: ExtensionType[] = [
FlavourExtension(flavour),
BlockViewExtension(flavour, model => {
return model.parent?.flavour === 'affine:surface'
? literal`affine-edgeless-attachment`
: literal`affine-attachment`;
}),
AttachmentDropOption,
AttachmentEmbedConfigExtension(),
AttachmentEmbedService,
AttachmentBlockAdapterExtensions,
createBuiltinToolbarConfigExtension(flavour),
SlashMenuConfigExtension(flavour, attachmentSlashMenuConfig),
].flat();

View File

@@ -1,6 +1,7 @@
import { ConfirmIcon } from '@blocksuite/affine-components/icons';
import { toast } from '@blocksuite/affine-components/toast';
import type { AttachmentBlockModel } from '@blocksuite/affine-model';
import { CitationProvider } from '@blocksuite/affine-shared/services';
import type { EditorHost } from '@blocksuite/std';
import { html } from 'lit';
import { createRef, ref } from 'lit/directives/ref.js';
@@ -33,6 +34,7 @@ export const RenameModal = ({
let fileName = includeExtension ? nameWithoutExtension : originalName;
const extension = includeExtension ? originalExtension : '';
const citationService = editorHost.std.get(CitationProvider);
const abort = () => abortController.abort();
const onConfirm = () => {
@@ -41,9 +43,12 @@ export const RenameModal = ({
toast(editorHost, 'File name cannot be empty');
return;
}
model.doc.updateBlock(model, {
model.store.updateBlock(model, {
name: newFileName,
});
if (citationService.isCitationModel(model)) {
citationService.trackEvent('Edit');
}
abort();
};
const onInput = (e: InputEvent) => {

View File

@@ -1,4 +1,4 @@
import { openFileOrFiles } from '@blocksuite/affine-shared/utils';
import { openSingleFileWith } from '@blocksuite/affine-shared/utils';
import { type SlashMenuConfig } from '@blocksuite/affine-widget-slash-menu';
import { ExportToPdfIcon, FileIcon } from '@blocksuite/icons/lit';
@@ -18,10 +18,10 @@ export const attachmentSlashMenuConfig: SlashMenuConfig = {
searchAlias: ['file'],
group: '4_Content & Media@3',
when: ({ model }) =>
model.doc.schema.flavourSchemaMap.has('affine:attachment'),
model.store.schema.flavourSchemaMap.has('affine:attachment'),
action: ({ std, model }) => {
(async () => {
const file = await openFileOrFiles();
const file = await openSingleFileWith();
if (!file) return;
await addSiblingAttachmentBlocks(std, [file], model);
@@ -41,10 +41,10 @@ export const attachmentSlashMenuConfig: SlashMenuConfig = {
},
group: '4_Content & Media@4',
when: ({ model }) =>
model.doc.schema.flavourSchemaMap.has('affine:attachment'),
model.store.schema.flavourSchemaMap.has('affine:attachment'),
action: ({ std, model }) => {
(async () => {
const file = await openFileOrFiles();
const file = await openSingleFileWith();
if (!file) return;
await addSiblingAttachmentBlocks(std, [file], model);

View File

@@ -24,6 +24,7 @@ import {
DownloadIcon,
DuplicateIcon,
EditIcon,
ReplaceIcon,
ResetIcon,
} from '@blocksuite/icons/lit';
import { BlockFlavourIdentifier } from '@blocksuite/std';
@@ -77,13 +78,19 @@ export const attachmentViewDropdownMenu = {
const model = ctx.getCurrentModelByType(AttachmentBlockModel);
if (!model) return;
if (!ctx.hasSelectedSurfaceModels) {
const provider = ctx.std.get(AttachmentEmbedProvider);
// TODO(@fundon): should auto focus image block.
if (
provider.shouldBeConverted(model) &&
!ctx.hasSelectedSurfaceModels
) {
// Clears
ctx.reset();
ctx.select('note');
}
ctx.std.get(AttachmentEmbedProvider).convertTo(model);
provider.convertTo(model);
ctx.track('SelectedView', {
...trackBaseProps,
@@ -94,18 +101,32 @@ export const attachmentViewDropdownMenu = {
},
],
content(ctx) {
const model = ctx.getCurrentModelByType(AttachmentBlockModel);
if (!model) return null;
const block = ctx.getCurrentBlockByType(AttachmentBlockComponent);
if (!block) return null;
const model = block.model;
const embedProvider = ctx.std.get(AttachmentEmbedProvider);
const actions = this.actions.map(action => ({ ...action }));
const viewType$ = computed(() => {
const [cardAction, embedAction] = actions;
const actions = computed(() => {
const [cardAction, embedAction] = this.actions.map(action => ({
...action,
}));
const ok = block.resourceController.resolvedState$.value.state === 'none';
const sourceId = Boolean(model.props.sourceId$.value);
const embed = model.props.embed$.value ?? false;
// 1. Check whether `sourceId` exists.
// 2. Check if `embedded` is allowed.
// 3. Check `blobState$`
const allowed = ok && sourceId && embedProvider.embedded(model) && !embed;
cardAction.disabled = !embed;
embedAction.disabled = embed && embedProvider.embedded(model);
embedAction.disabled = !allowed;
return [cardAction, embedAction];
});
const viewType$ = computed(() => {
const [cardAction, embedAction] = actions.value;
const embed = model.props.embed$.value ?? false;
return embed ? embedAction.label : cardAction.label;
});
const onToggle = (e: CustomEvent<boolean>) => {
@@ -119,27 +140,42 @@ export const attachmentViewDropdownMenu = {
});
};
return html`${keyed(
model,
html`<affine-view-dropdown-menu
@toggle=${onToggle}
.actions=${actions}
.context=${ctx}
.viewType$=${viewType$}
></affine-view-dropdown-menu>`
)}`;
return html`<affine-view-dropdown-menu
@toggle=${onToggle}
.actions=${actions.value}
.context=${ctx}
.viewType$=${viewType$}
></affine-view-dropdown-menu>`;
},
} as const satisfies ToolbarActionGroup<ToolbarAction>;
const replaceAction = {
id: 'c.replace',
tooltip: 'Replace attachment',
icon: ReplaceIcon(),
disabled(ctx) {
const block = ctx.getCurrentBlockByType(AttachmentBlockComponent);
if (!block) return true;
const { downloading = false, uploading = false } =
block.resourceController.state$.value;
return downloading || uploading;
},
run(ctx) {
const block = ctx.getCurrentBlockByType(AttachmentBlockComponent);
block?.replace().catch(console.error);
},
} as const satisfies ToolbarAction;
const downloadAction = {
id: 'c.download',
id: 'd.download',
tooltip: 'Download',
icon: DownloadIcon(),
run(ctx) {
const block = ctx.getCurrentBlockByType(AttachmentBlockComponent);
block?.download();
},
when: ctx => {
when(ctx) {
const model = ctx.getCurrentModelByType(AttachmentBlockModel);
if (!model) return false;
// Current citation attachment block does not support download
@@ -148,7 +184,7 @@ const downloadAction = {
} as const satisfies ToolbarAction;
const captionAction = {
id: 'd.caption',
id: 'e.caption',
tooltip: 'Caption',
icon: CaptionIcon(),
run(ctx) {
@@ -201,6 +237,7 @@ const builtinToolbarConfig = {
},
},
attachmentViewDropdownMenu,
replaceAction,
downloadAction,
captionAction,
{
@@ -243,7 +280,13 @@ const builtinToolbarConfig = {
icon: ResetIcon(),
run(ctx) {
const block = ctx.getCurrentBlockByType(AttachmentBlockComponent);
block?.refreshData();
block?.reload();
ctx.track('AttachmentReloadedEvent', {
...trackBaseProps,
control: 'reload',
type: block?.model.props.name.split('.').pop() ?? '',
});
},
},
{
@@ -328,13 +371,17 @@ const builtinSurfaceToolbarConfig = {
)}`;
},
} satisfies ToolbarActionGroup<ToolbarAction>,
{
...replaceAction,
id: 'd.replace',
},
{
...downloadAction,
id: 'd.download',
id: 'e.download',
},
{
...captionAction,
id: 'e.caption',
id: 'f.caption',
},
],
when: ctx => ctx.getSurfaceModelsByType(AttachmentBlockModel).length === 1,

View File

@@ -3,6 +3,10 @@ import {
type ImageBlockProps,
MAX_IMAGE_WIDTH,
} from '@blocksuite/affine-model';
import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { FileSizeLimitProvider } from '@blocksuite/affine-shared/services';
import {
readImageSize,
@@ -17,6 +21,7 @@ import type { ExtensionType } from '@blocksuite/store';
import { Extension } from '@blocksuite/store';
import type { TemplateResult } from 'lit';
import { html } from 'lit';
import { styleMap } from 'lit/directives/style-map.js';
import { getAttachmentBlob } from './utils';
@@ -34,9 +39,22 @@ export type AttachmentEmbedConfig = {
std: BlockStdScope
) => Promise<void> | void;
/**
* The template will be used to render the embed view.
* Renders the embed view.
*/
template?: (model: AttachmentBlockModel, blobUrl: string) => TemplateResult;
render?: (
model: AttachmentBlockModel,
blobUrl: string
) => TemplateResult | null;
/**
* Should show status when turned on.
*/
shouldShowStatus?: boolean;
/**
* Should block type conversion be required.
*/
shouldBeConverted?: boolean;
};
// Single embed config.
@@ -97,39 +115,53 @@ export class AttachmentEmbedService extends Extension {
// Converts to embed view.
convertTo(model: AttachmentBlockModel, maxFileSize = this._maxFileSize) {
const config = this.values.find(config => config.check(model, maxFileSize));
if (!config?.action) {
model.doc.updateBlock(model, { embed: true });
if (config?.action) {
config.action(model, this.std)?.catch(console.error);
return;
}
config.action(model, this.std)?.catch(console.error);
model.store.updateBlock(model, { embed: true });
}
embedded(model: AttachmentBlockModel, maxFileSize = this._maxFileSize) {
return this.values.some(config => config.check(model, maxFileSize));
}
render(
getRender(model: AttachmentBlockModel, maxFileSize = this._maxFileSize) {
return (
this.values.find(config => config.check(model, maxFileSize))?.render ??
null
);
}
shouldShowStatus(
model: AttachmentBlockModel,
blobUrl?: string,
maxFileSize = this._maxFileSize
) {
if (!model.props.embed || !blobUrl) return;
return (
this.values.find(config => config.check(model, maxFileSize))
?.shouldShowStatus ?? false
);
}
const config = this.values.find(config => config.check(model, maxFileSize));
if (!config || !config.template) {
console.error('No embed view template found!', model, model.props.type);
return;
}
return config.template(model, blobUrl);
shouldBeConverted(
model: AttachmentBlockModel,
maxFileSize = this._maxFileSize
) {
return (
this.values.find(config => config.check(model, maxFileSize))
?.shouldBeConverted ?? false
);
}
}
const embedConfig: AttachmentEmbedConfig[] = [
{
name: 'image',
shouldBeConverted: true,
check: model =>
model.doc.schema.flavourSchemaMap.has('affine:image') &&
model.store.schema.flavourSchemaMap.has('affine:image') &&
model.props.type.startsWith('image/'),
async action(model, std) {
const component = std.view.getBlock(model.id);
@@ -140,16 +172,30 @@ const embedConfig: AttachmentEmbedConfig[] = [
},
{
name: 'pdf',
shouldShowStatus: true,
check: (model, maxFileSize) =>
model.props.type === 'application/pdf' && model.props.size <= maxFileSize,
template: (_, blobUrl) => {
action: model => {
const bound = Bound.deserialize(model.props.xywh);
bound.w = EMBED_CARD_WIDTH.pdf;
bound.h = EMBED_CARD_HEIGHT.pdf;
model.store.updateBlock(model, {
embed: true,
style: 'pdf',
xywh: bound.serialize(),
});
},
render: (_, blobUrl) => {
// More options: https://tinytip.co/tips/html-pdf-params/
// https://chromium.googlesource.com/chromium/src/+/refs/tags/121.0.6153.1/chrome/browser/resources/pdf/open_pdf_params_parser.ts
const parameters = '#toolbar=0';
return html`
<iframe
style="width: 100%; color-scheme: auto;"
height="480"
style=${styleMap({
width: '100%',
minHeight: '480px',
colorScheme: 'auto',
})}
src=${blobUrl + parameters}
loading="lazy"
scrolling="no"
@@ -157,6 +203,7 @@ const embedConfig: AttachmentEmbedConfig[] = [
allowTransparency
allowfullscreen
type="application/pdf"
credentialless
></iframe>
<div class="affine-attachment-embed-event-mask"></div>
`;
@@ -164,23 +211,44 @@ const embedConfig: AttachmentEmbedConfig[] = [
},
{
name: 'video',
shouldShowStatus: true,
check: (model, maxFileSize) =>
model.props.type.startsWith('video/') && model.props.size <= maxFileSize,
template: (_, blobUrl) =>
action: model => {
const bound = Bound.deserialize(model.props.xywh);
bound.w = EMBED_CARD_WIDTH.video;
bound.h = EMBED_CARD_HEIGHT.video;
model.store.updateBlock(model, {
embed: true,
style: 'video',
xywh: bound.serialize(),
});
},
render: (_, blobUrl) =>
html`<video
style="max-height: max-content;"
width="100%;"
height="480"
controls
style=${styleMap({
display: 'flex',
objectFit: 'cover',
backgroundSize: 'cover',
width: '100%',
height: '100%',
})}
src=${blobUrl}
width="100%"
height="100%"
controls
></video>`,
},
{
name: 'audio',
check: (model, maxFileSize) =>
model.props.type.startsWith('audio/') && model.props.size <= maxFileSize,
template: (_, blobUrl) =>
html`<audio controls src=${blobUrl} style="margin: 4px;"></audio>`,
render: (_, blobUrl) =>
html`<audio
style=${styleMap({ margin: '4px' })}
src=${blobUrl}
controls
></audio>`,
},
];
@@ -188,7 +256,7 @@ const embedConfig: AttachmentEmbedConfig[] = [
* Turn the attachment block into an image block.
*/
async function turnIntoImageBlock(model: AttachmentBlockModel) {
if (!model.doc.schema.flavourSchemaMap.has('affine:image')) {
if (!model.store.schema.flavourSchemaMap.has('affine:image')) {
console.error('The image flavour is not supported!');
return;
}

View File

@@ -1,7 +1,6 @@
export * from './adapters';
export * from './attachment-block';
export * from './attachment-service';
export * from './attachment-spec';
export { attachmentViewDropdownMenu } from './configs/toolbar';
export * from './edgeless-clipboard-config';
export {

View File

@@ -6,9 +6,9 @@ export const styles = css`
border-radius: 8px;
box-sizing: border-box;
user-select: none;
overflow: hidden;
border: 1px solid ${unsafeCSSVarV2('layer/background/tertiary')};
background: ${unsafeCSSVarV2('layer/background/primary')};
overflow: hidden;
&.focused {
border-color: ${unsafeCSSVarV2('layer/insideBorder/primaryBorder')};
@@ -30,6 +30,13 @@ export const styles = css`
min-width: 0;
}
.truncate {
align-self: stretch;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.affine-attachment-content-title {
display: flex;
flex-direction: row;
@@ -40,18 +47,10 @@ export const styles = css`
.affine-attachment-content-title-icon {
display: flex;
width: 16px;
height: 16px;
align-items: center;
justify-content: center;
color: var(--affine-text-primary-color);
}
.truncate {
align-self: stretch;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
font-size: 16px;
}
.affine-attachment-content-title-text {
@@ -92,6 +91,7 @@ export const styles = css`
font-size: var(--affine-font-xs);
font-style: normal;
font-weight: 500;
text-transform: capitalize;
line-height: 20px;
svg {
@@ -107,7 +107,7 @@ export const styles = css`
.affine-attachment-card.loading {
.affine-attachment-content-title-text {
color: var(--affine-placeholder-color);
color: ${unsafeCSSVarV2('text/placeholder')};
}
}
@@ -143,6 +143,12 @@ export const styles = css`
height: 100%;
}
.affine-attachment-embed-status {
position: absolute;
left: 14px;
bottom: 64px;
}
.affine-attachment-embed-event-mask {
position: absolute;
inset: 0;

View File

@@ -13,7 +13,7 @@ import {
FileSizeLimitProvider,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import { humanFileSize } from '@blocksuite/affine-shared/utils';
import { formatSize } from '@blocksuite/affine-shared/utils';
import { Bound, type IVec, Vec } from '@blocksuite/global/gfx';
import type { BlockStdScope } from '@blocksuite/std';
import { GfxControllerIdentifier } from '@blocksuite/std/gfx';
@@ -22,15 +22,13 @@ import type { BlockModel } from '@blocksuite/store';
import type { AttachmentBlockComponent } from './attachment-block';
export async function getAttachmentBlob(model: AttachmentBlockModel) {
const {
sourceId$: { value: sourceId },
type$: { value: type },
} = model.props;
const { sourceId$, type$ } = model.props;
const sourceId = sourceId$.peek();
const type = type$.peek();
if (!sourceId) return null;
const doc = model.doc;
let blob = await doc.blobSync.get(sourceId);
const doc = model.store;
const blob = await doc.blobSync.get(sourceId);
if (!blob) return null;
return new Blob([blob], { type });
@@ -41,9 +39,9 @@ export async function getAttachmentBlob(model: AttachmentBlockModel) {
* the download process may take a long time!
*/
export function downloadAttachmentBlob(block: AttachmentBlockComponent) {
const { host, model, blobUrl, blobState$ } = block;
const { host, model, blobUrl, resourceController } = block;
if (blobState$.peek().downloading) {
if (resourceController.state$.peek().downloading) {
toast(host, 'Download in progress...');
return;
}
@@ -56,7 +54,7 @@ export function downloadAttachmentBlob(block: AttachmentBlockComponent) {
return;
}
block.updateBlobState({ downloading: true });
resourceController.updateState({ downloading: true });
toast(host, `Downloading ${shortName}`);
@@ -67,34 +65,14 @@ export function downloadAttachmentBlob(block: AttachmentBlockComponent) {
tmpLink.dispatchEvent(event);
tmpLink.remove();
block.updateBlobState({ downloading: false });
resourceController.updateState({ downloading: false });
}
export async function refreshData(
std: BlockStdScope,
block: AttachmentBlockComponent
) {
export async function refreshData(block: AttachmentBlockComponent) {
const model = block.model;
const sourceId = model.props.sourceId$.peek();
if (!sourceId) return;
const blobUrl = block.blobUrl;
if (blobUrl) {
URL.revokeObjectURL(blobUrl);
block.blobUrl = null;
}
let blob = await std.store.blobSync.get(sourceId);
if (!blob) {
block.updateBlobState({ errorMessage: 'File not found' });
return;
}
const type = model.props.type$.peek();
blob = new Blob([blob], { type });
block.blobUrl = URL.createObjectURL(blob);
await block.resourceController.refreshUrlWith(type);
}
export async function getFileType(file: File) {
@@ -104,7 +82,7 @@ export async function getFileType(file: File) {
const buffer = await file.arrayBuffer();
const FileType = await import('file-type');
const fileType = await FileType.fileTypeFromBuffer(buffer);
return fileType ? fileType.mime : '';
return fileType?.mime ?? '';
}
function hasExceeded(
@@ -115,7 +93,7 @@ function hasExceeded(
const exceeded = files.some(file => file.size > maxFileSize);
if (exceeded) {
const size = humanFileSize(maxFileSize, true, 0);
const size = formatSize(maxFileSize);
toast(std.host, `You can only upload files less than ${size}`);
}
@@ -152,7 +130,7 @@ async function buildPropsWith(
std.getOptional(TelemetryProvider)?.track('AttachmentUploadedEvent', {
page: `${mode} editor`,
module: 'attachment',
segment: 'attachment',
segment: mode,
control: 'uploader',
type,
category,

View File

@@ -7,6 +7,7 @@ import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/std';
import { literal } from 'lit/static-html.js';
import { AttachmentBlockInteraction } from './attachment-edgeless-block.js';
import { AttachmentDropOption } from './attachment-service.js';
import { attachmentSlashMenuConfig } from './configs/slash-menu.js';
import { createBuiltinToolbarConfigExtension } from './configs/toolbar';
@@ -44,6 +45,7 @@ export class AttachmentViewExtension extends ViewExtensionProvider {
]);
if (this.isEdgeless(context.scope)) {
context.register(EdgelessClipboardAttachmentConfig);
context.register(AttachmentBlockInteraction);
}
}
}

View File

@@ -15,7 +15,6 @@
{ "path": "../../widgets/slash-menu" },
{ "path": "../../../framework/global" },
{ "path": "../../../framework/std" },
{ "path": "../../../framework/store" },
{ "path": "../../../framework/sync" }
{ "path": "../../../framework/store" }
]
}

View File

@@ -24,7 +24,7 @@
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.14",
"@toeverything/theme": "^1.1.15",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"rxjs": "^7.8.1",
@@ -32,11 +32,10 @@
"zod": "^3.23.8"
},
"devDependencies": {
"vitest": "3.1.2"
"vitest": "3.1.3"
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts",
"./store": "./src/store.ts",
"./view": "./src/view.ts"
},

View File

@@ -10,7 +10,6 @@ import {
isFootnoteDefinitionNode,
type MarkdownAST,
} from '@blocksuite/affine-shared/adapters';
import { FeatureFlagService } from '@blocksuite/affine-shared/services';
import { nanoid } from '@blocksuite/store';
const isUrlFootnoteDefinitionNode = (node: MarkdownAST) => {
@@ -33,15 +32,7 @@ export const bookmarkBlockMarkdownAdapterMatcher =
toMatch: o => isUrlFootnoteDefinitionNode(o.node),
toBlockSnapshot: {
enter: (o, context) => {
const { provider } = context;
let enableCitation = false;
try {
const featureFlagService = provider?.get(FeatureFlagService);
enableCitation = !!featureFlagService?.getFlag('enable_citation');
} catch {
enableCitation = false;
}
if (!isFootnoteDefinitionNode(o.node) || !enableCitation) {
if (!isFootnoteDefinitionNode(o.node)) {
return;
}

View File

@@ -6,16 +6,20 @@ import type {
BookmarkBlockModel,
LinkPreviewData,
} from '@blocksuite/affine-model';
import { ImageProxyService } from '@blocksuite/affine-shared/adapters';
import {
CitationProvider,
DocModeProvider,
LinkPreviewerService,
LinkPreviewServiceIdentifier,
} from '@blocksuite/affine-shared/services';
import { normalizeUrl } from '@blocksuite/affine-shared/utils';
import { BlockSelection } from '@blocksuite/std';
import { computed, type ReadonlySignal, signal } from '@preact/signals-core';
import { html } from 'lit';
import { property, query } from 'lit/decorators.js';
import { type ClassInfo, classMap } from 'lit/directives/class-map.js';
import { type StyleInfo, styleMap } from 'lit/directives/style-map.js';
import { filter } from 'rxjs/operators';
import { refreshBookmarkUrlData } from './utils.js';
@@ -71,8 +75,8 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
this.loading = true;
this.error = false;
this.std.store
.get(LinkPreviewerService)
this.std
.get(LinkPreviewServiceIdentifier)
.query(this.model.props.url, this._fetchAbortController.signal)
.then(data => {
this._localLinkPreview$.value = {
@@ -98,12 +102,12 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
selectionManager.setGroup('note', [blockSelection]);
};
get link() {
return normalizeUrl(this.model.props.url);
}
open = () => {
let link = this.model.props.url;
if (!link.match(/^[a-zA-Z]+:\/\//)) {
link = 'https://' + link;
}
window.open(link, '_blank');
window.open(this.link, '_blank');
};
refreshData = () => {
@@ -112,17 +116,25 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
);
};
get citationService() {
return this.std.get(CitationProvider);
}
get isCitation() {
return (
!!this.model.props.footnoteIdentifier &&
this.model.props.style === 'citation'
);
return this.citationService.isCitationModel(this.model);
}
get imageProxyService() {
return this.std.get(ImageProxyService);
}
handleClick = (event: MouseEvent) => {
event.stopPropagation();
if (this.model.parent?.flavour !== 'affine:surface' && !this.doc.readonly) {
if (
this.model.parent?.flavour !== 'affine:surface' &&
!this.store.readonly
) {
this.selectBlock();
}
};
@@ -135,9 +147,10 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
private readonly _renderCitationView = () => {
const { url, footnoteIdentifier } = this.model.props;
const { icon, title, description } = this.linkPreview$.value;
const iconSrc = icon ? this.imageProxyService.buildUrl(icon) : undefined;
return html`
<affine-citation-card
.icon=${icon}
.icon=${iconSrc}
.citationTitle=${title || url}
.citationContent=${description}
.citationIdentifier=${footnoteIdentifier}
@@ -156,6 +169,31 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
></bookmark-card>`;
};
private readonly _trackCitationDeleteEvent = () => {
// Check citation delete event
this._disposables.add(
this.std.store.slots.blockUpdated
.pipe(
filter(payload => {
if (!payload.isLocal) return false;
const { flavour, id, type } = payload;
if (
type !== 'delete' ||
flavour !== this.model.flavour ||
id !== this.model.id
)
return false;
const { model } = payload;
if (!this.citationService.isCitationModel(model)) return false;
return true;
})
)
.subscribe(() => {
this.citationService.trackEvent('Delete');
})
);
};
override connectedCallback() {
super.connectedCallback();
@@ -178,7 +216,7 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
) {
// When the doc is readonly, and the preview data not provided
// We should fetch the preview data and update the local link preview data
if (this.doc.readonly) {
if (this.store.readonly) {
this._updateLocalLinkPreview();
return;
}
@@ -193,6 +231,8 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
}
})
);
this._trackCitationDeleteEvent();
}
override disconnectedCallback(): void {

View File

@@ -1,8 +1,10 @@
import { BookmarkBlockSchema } from '@blocksuite/affine-model';
import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { toGfxBlockComponent } from '@blocksuite/std';
import { GfxViewInteractionExtension } from '@blocksuite/std/gfx';
import { type StyleInfo, styleMap } from 'lit/directives/style-map.js';
import { BookmarkBlockComponent } from './bookmark-block.js';
@@ -27,6 +29,15 @@ export class BookmarkEdgelessBlockComponent extends toGfxBlockComponent(
};
}
override connectedCallback(): void {
super.connectedCallback();
this.disposables.add(
this.gfx.selection.slots.updated.subscribe(() => {
this.requestUpdate();
})
);
}
override renderGfxBlock() {
const style = this.model.props.style$.value;
const width = EMBED_CARD_WIDTH[style];
@@ -34,12 +45,14 @@ export class BookmarkEdgelessBlockComponent extends toGfxBlockComponent(
const bound = this.model.elementBound;
const scaleX = bound.w / width;
const scaleY = bound.h / height;
const isSelected = this.gfx.selection.has(this.model.id);
this.containerStyleMap = styleMap({
width: `100%`,
height: `100%`,
transform: `scale(${scaleX}, ${scaleY})`,
transformOrigin: '0 0',
pointerEvents: isSelected ? 'auto' : 'none',
});
return this.renderPageContent();
@@ -50,6 +63,24 @@ export class BookmarkEdgelessBlockComponent extends toGfxBlockComponent(
};
}
export const BookmarkBlockInteraction = GfxViewInteractionExtension(
BookmarkBlockSchema.model.flavour,
{
resizeConstraint: {
lockRatio: true,
},
handleRotate: () => {
return {
beforeRotate(context) {
context.set({
rotatable: false,
});
},
};
},
}
);
declare global {
interface HTMLElementTagNameMap {
'affine-edgeless-bookmark': BookmarkEdgelessBlockComponent;

View File

@@ -1,22 +0,0 @@
import { BookmarkBlockSchema } from '@blocksuite/affine-model';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { BookmarkBlockAdapterExtensions } from './adapters/extension';
import { BookmarkSlashMenuConfigExtension } from './configs/slash-menu';
import { createBuiltinToolbarConfigExtension } from './configs/toolbar';
const flavour = BookmarkBlockSchema.model.flavour;
export const BookmarkBlockSpec: ExtensionType[] = [
FlavourExtension(flavour),
BlockViewExtension(flavour, model => {
return model.parent?.flavour === 'affine:surface'
? literal`affine-edgeless-bookmark`
: literal`affine-bookmark`;
}),
BookmarkBlockAdapterExtensions,
createBuiltinToolbarConfigExtension(flavour),
BookmarkSlashMenuConfigExtension,
].flat();

View File

@@ -1,5 +1,3 @@
import '@blocksuite/affine-block-embed/effects';
import { insertEmbedCard } from '@blocksuite/affine-block-embed';
import type { EmbedCardStyle } from '@blocksuite/affine-model';
import { EmbedOptionProvider } from '@blocksuite/affine-shared/services';

View File

@@ -2,9 +2,14 @@ import { insertEmbedIframeWithUrlCommand } from '@blocksuite/affine-block-embed'
import {
type InsertedLinkType,
insertEmbedLinkedDocCommand,
insertEmbedSyncedDocCommand,
type LinkableFlavour,
} from '@blocksuite/affine-block-embed-doc';
import { QuickSearchProvider } from '@blocksuite/affine-shared/services';
import {
DocModeProvider,
EditorSettingProvider,
QuickSearchProvider,
} from '@blocksuite/affine-shared/services';
import type { Command } from '@blocksuite/std';
import { insertBookmarkCommand } from './insert-bookmark';
@@ -26,12 +31,26 @@ export const insertLinkByQuickSearchCommand: Command<
// add linked doc
if ('docId' in result) {
std.command.exec(insertEmbedLinkedDocCommand, {
const editorMode = std.get(DocModeProvider).getEditorMode();
const editorSettings = std.get(EditorSettingProvider);
let flavour: LinkableFlavour = 'affine:embed-linked-doc';
if (editorMode === 'edgeless') {
flavour =
editorSettings.setting$.value.docCanvasPreferView ?? flavour;
}
const insertCommand =
flavour === 'affine:embed-linked-doc'
? insertEmbedLinkedDocCommand
: insertEmbedSyncedDocCommand;
std.command.exec(insertCommand, {
docId: result.docId,
params: result.params,
});
return {
flavour: 'affine:embed-linked-doc',
flavour,
};
}

View File

@@ -1,5 +1,5 @@
import { getEmbedCardIcons } from '@blocksuite/affine-block-embed';
import { WebIcon16 } from '@blocksuite/affine-components/icons';
import { LoadingIcon, WebIcon16 } from '@blocksuite/affine-components/icons';
import { ImageProxyService } from '@blocksuite/affine-shared/adapters';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { getHostName } from '@blocksuite/affine-shared/utils';
@@ -60,11 +60,11 @@ export class BookmarkCard extends SignalWatcher(
: title;
const theme = this.bookmark.std.get(ThemeProvider).theme;
const { LoadingIcon, EmbedCardBannerIcon } = getEmbedCardIcons(theme);
const imageProxyService = this.bookmark.doc.get(ImageProxyService);
const { EmbedCardBannerIcon } = getEmbedCardIcons(theme);
const imageProxyService = this.bookmark.store.get(ImageProxyService);
const titleIcon = this.loading
? LoadingIcon
? LoadingIcon()
: icon
? html`<img src=${imageProxyService.buildUrl(icon)} alt="icon" />`
: WebIcon16;

View File

@@ -23,10 +23,10 @@ const bookmarkSlashMenuConfig: SlashMenuConfig = {
},
group: '4_Content & Media@2',
when: ({ model }) =>
model.doc.schema.flavourSchemaMap.has('affine:bookmark'),
model.store.schema.flavourSchemaMap.has('affine:bookmark'),
action: ({ std, model }) => {
const { host } = std;
const parentModel = host.doc.getParent(model);
const parentModel = host.store.getParent(model);
if (!parentModel) {
return;
}
@@ -45,7 +45,7 @@ const bookmarkSlashMenuConfig: SlashMenuConfig = {
)
.then(() => {
if (model.text?.length === 0) {
model.doc.deleteBlock(model);
model.store.deleteBlock(model);
}
})
.catch(console.error);

View File

@@ -407,7 +407,7 @@ const builtinSurfaceToolbarConfig = {
if (options?.viewType !== 'embed') return;
const { flavour, styles } = options;
let { style } = model.props;
let style: EmbedCardStyle = model.props.style;
if (!styles.includes(style)) {
style = styles[0];
@@ -482,24 +482,26 @@ const builtinSurfaceToolbarConfig = {
} satisfies ToolbarActionGroup<ToolbarAction>,
{
id: 'b.style',
actions: [
{
id: 'horizontal',
label: 'Large horizontal style',
},
{
id: 'list',
label: 'Small horizontal style',
},
{
id: 'vertical',
label: 'Large vertical style',
},
{
id: 'cube',
label: 'Small vertical style',
},
].filter(action => BookmarkStyles.includes(action.id as EmbedCardStyle)),
actions: (
[
{
id: 'horizontal',
label: 'Large horizontal style',
},
{
id: 'list',
label: 'Small horizontal style',
},
{
id: 'vertical',
label: 'Large vertical style',
},
{
id: 'cube',
label: 'Small vertical style',
},
] as const
).filter(action => BookmarkStyles.includes(action.id)),
content(ctx) {
const model = ctx.getCurrentModelByType(BookmarkBlockModel);
if (!model) return null;

View File

@@ -1,6 +1,5 @@
export * from './adapters';
export * from './bookmark-block';
export * from './bookmark-spec';
export * from './commands';
export * from './components';
export { BookmarkSlashMenuConfigIdentifier } from './configs/slash-menu';

View File

@@ -1,4 +1,4 @@
import { LinkPreviewerService } from '@blocksuite/affine-shared/services';
import { LinkPreviewServiceIdentifier } from '@blocksuite/affine-shared/services';
import { isAbortError } from '@blocksuite/affine-shared/utils';
import type { BookmarkBlockComponent } from './bookmark-block.js';
@@ -15,7 +15,7 @@ export async function refreshBookmarkUrlData(
try {
bookmarkElement.loading = true;
const linkPreviewer = bookmarkElement.doc.get(LinkPreviewerService);
const linkPreviewer = bookmarkElement.std.get(LinkPreviewServiceIdentifier);
const bookmarkUrlData = await linkPreviewer.query(
bookmarkElement.model.props.url,
signal
@@ -32,7 +32,7 @@ export async function refreshBookmarkUrlData(
if (signal?.aborted) return;
bookmarkElement.doc.updateBlock(bookmarkElement.model, {
bookmarkElement.store.updateBlock(bookmarkElement.model, {
title,
description,
icon,

View File

@@ -6,6 +6,7 @@ import { BookmarkBlockSchema } from '@blocksuite/affine-model';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/std';
import { literal } from 'lit/static-html.js';
import { BookmarkBlockInteraction } from './bookmark-edgeless-block';
import { BookmarkSlashMenuConfigExtension } from './configs/slash-menu';
import { createBuiltinToolbarConfigExtension } from './configs/toolbar';
import { EdgelessClipboardBookmarkConfig } from './edgeless-clipboard-config';
@@ -36,6 +37,7 @@ export class BookmarkViewExtension extends ViewExtensionProvider {
const isEdgeless = this.isEdgeless(context.scope);
if (isEdgeless) {
context.register(EdgelessClipboardBookmarkConfig);
context.register(BookmarkBlockInteraction);
}
}
}

View File

@@ -25,7 +25,7 @@
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.14",
"@toeverything/theme": "^1.1.15",
"@types/mdast": "^4.0.4",
"emoji-mart": "^5.6.0",
"lit": "^3.2.0",
@@ -35,7 +35,6 @@
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts",
"./view": "./src/view.ts",
"./store": "./src/store.ts"
},

View File

@@ -2,10 +2,17 @@ import { CalloutBlockSchema } from '@blocksuite/affine-model';
import {
BlockMarkdownAdapterExtension,
type BlockMarkdownAdapterMatcher,
CALLOUT_MARKDOWN_EXPORT_OPTIONS_KEY,
type CalloutAdmonitionType,
CalloutAdmonitionTypeSet,
CalloutExportStyle,
type CalloutMarkdownExportOptions,
calloutMarkdownExportOptionsSchema,
DEFAULT_ADMONITION_TYPE,
getCalloutEmoji,
isCalloutNode,
} from '@blocksuite/affine-shared/adapters';
import { nanoid } from '@blocksuite/store';
import { type DeltaInsert, nanoid } from '@blocksuite/store';
// Currently, the callout block children can only be paragraph block or list block
// In mdast, the node types are `paragraph`, `list`, `heading`, `blockquote`
@@ -16,6 +23,29 @@ const CALLOUT_BLOCK_CHILDREN_TYPES = new Set([
'blockquote',
]);
const ADMONITION_SYMBOL = ':::';
const DEFAULT_OPTIONS: CalloutMarkdownExportOptions = {
style: CalloutExportStyle.GFM,
};
/**
* Get the callout export options from the configs
* @param configs - The configs of the callout block
* @returns The callout export options
*/
function getCalloutExportOptions(
configs: Map<string, unknown>
): CalloutMarkdownExportOptions {
let exportOptions: CalloutMarkdownExportOptions = DEFAULT_OPTIONS;
try {
const options = configs.get(CALLOUT_MARKDOWN_EXPORT_OPTIONS_KEY);
if (options) {
exportOptions = calloutMarkdownExportOptionsSchema.parse(options);
}
} catch {}
return exportOptions;
}
export const calloutBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher = {
flavour: CalloutBlockSchema.model.flavour,
toMatch: o => isCalloutNode(o.node),
@@ -57,29 +87,118 @@ export const calloutBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher = {
fromBlockSnapshot: {
enter: (o, context) => {
const emoji = o.node.props.emoji as string;
const { walkerContext } = context;
walkerContext
.openNode(
{
type: 'blockquote',
children: [],
},
'children'
)
.openNode({
type: 'paragraph',
children: [
const { walkerContext, configs } = context;
const exportOptions = getCalloutExportOptions(configs);
const { style, admonitionType } = exportOptions;
// If the style is admonitions, we should handle the first child
if (style === CalloutExportStyle.Admonitions) {
let type = admonitionType ?? DEFAULT_ADMONITION_TYPE;
let customTitle = '';
let restOfText = '';
const firstChild = o.node.children[0];
const isTextNode = !!firstChild.props.text;
// If the first child is a text block, we should get the type and custom title from the first line of the text
// And remove the first child from the children
// Otherwise, we should use the default admonition type as the type
if (isTextNode) {
const textDelta = (firstChild.props.text ?? { delta: [] }) as {
delta: DeltaInsert[];
};
// Get the text of the first child
const text = textDelta.delta.reduce((acc, delta) => {
if (delta.insert) {
acc += delta.insert;
}
return acc;
}, '');
// If the text is not empty, we should try to get type and custom title from the text
if (text) {
// Get the first line of the text
const firstLine = text.includes('\n') ? text.split('\n')[0] : text;
// Get the rest of the text besides the first line
restOfText = text.split('\n').slice(1).join('\n');
// Get the possible type from the first line
const possibleType = firstLine.split(' ')[0].toLowerCase();
// If the type is a valid admonition type, we should use it as the type
if (CalloutAdmonitionTypeSet.has(possibleType)) {
type = possibleType as CalloutAdmonitionType;
// Get the custom title from the first line
customTitle = firstLine.split(' ').slice(1).join(' ').trim();
// Remove the first child from the children
o.node.children = o.node.children.slice(1);
}
}
}
// Add an admonition symbol paragraph to the start of the children
const admonitionSymbol =
`${ADMONITION_SYMBOL} ${type} ${customTitle}`.trim();
walkerContext
.openNode({
type: 'paragraph',
children: [
{
type: 'text',
value: admonitionSymbol,
},
],
})
.closeNode();
// Add the rest of the text to the children content
if (restOfText) {
walkerContext
.openNode({
type: 'paragraph',
children: [{ type: 'text', value: `${restOfText}` }],
})
.closeNode();
}
} else {
walkerContext
.openNode(
{
type: 'text',
value: `[!${emoji}]`,
type: 'blockquote',
children: [],
},
],
})
.closeNode();
'children'
)
.openNode({
type: 'paragraph',
children: [
{
type: 'text',
value: `[!${emoji}]`,
},
],
})
.closeNode();
}
},
leave: (_, context) => {
const { walkerContext } = context;
walkerContext.closeNode();
const { walkerContext, configs } = context;
const exportOptions = getCalloutExportOptions(configs);
const { style } = exportOptions;
// If the style is admonitions, we should add an admonition symbol paragraph to the end of the children
if (style === CalloutExportStyle.Admonitions) {
walkerContext
.openNode({
type: 'paragraph',
children: [
{
type: 'text',
value: ADMONITION_SYMBOL,
},
],
})
.closeNode();
} else {
// If the style is gfm, we should close the outer blockquote node
walkerContext.closeNode();
}
},
},
};

View File

@@ -12,6 +12,7 @@ import type { BlockComponent } from '@blocksuite/std';
import { flip, offset } from '@floating-ui/dom';
import { css, html } from 'lit';
import { query } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js';
export class CalloutBlockComponent extends CaptionedBlockComponent<CalloutBlockModel> {
static override styles = css`
:host {
@@ -109,14 +110,18 @@ export class CalloutBlockComponent extends CaptionedBlockComponent<CalloutBlockM
}
override renderBlock() {
const emoji = this.model.props.emoji$.value;
return html`
<div class="affine-callout-block-container">
<div
@click=${this._toggleEmojiMenu}
contenteditable="false"
class="affine-callout-emoji-container"
style=${styleMap({
display: emoji.length === 0 ? 'none' : undefined,
})}
>
<span class="affine-callout-emoji">${this.model.props.emoji$}</span>
<span class="affine-callout-emoji">${emoji}</span>
</div>
<div class="affine-callout-children">
${this.renderChildren(this.model)}

View File

@@ -1,16 +0,0 @@
import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { CalloutBlockMarkdownAdapterExtension } from './adapters/markdown';
import { CalloutKeymapExtension } from './callout-keymap';
import { calloutSlashMenuConfig } from './configs/slash-menu';
export const CalloutBlockSpec: ExtensionType[] = [
FlavourExtension('affine:callout'),
BlockViewExtension('affine:callout', literal`affine-callout`),
CalloutKeymapExtension,
SlashMenuConfigExtension('affine:callout', calloutSlashMenuConfig),
CalloutBlockMarkdownAdapterExtension,
];

View File

@@ -33,19 +33,24 @@ export const calloutSlashMenuConfig: SlashMenuConfig = {
when: ({ std, model }) => {
return (
std.get(FeatureFlagService).getFlag('enable_callout') &&
!isInsideBlockByFlavour(model.doc, model, 'affine:edgeless-text')
!isInsideBlockByFlavour(model.store, model, 'affine:edgeless-text')
);
},
action: ({ model, std }) => {
const { doc } = model;
const parent = doc.getParent(model);
const { store } = model;
const parent = store.getParent(model);
if (!parent) return;
const index = parent.children.indexOf(model);
if (index === -1) return;
const calloutId = doc.addBlock('affine:callout', {}, parent, index + 1);
const calloutId = store.addBlock(
'affine:callout',
{},
parent,
index + 1
);
if (!calloutId) return;
const paragraphId = doc.addBlock('affine:paragraph', {}, calloutId);
const paragraphId = store.addBlock('affine:paragraph', {}, calloutId);
if (!paragraphId) return;
std.host.updateComplete
.then(() => {

View File

@@ -1,3 +1,2 @@
export * from './callout-block.js';
export * from './callout-spec.js';
export * from './effects.js';

View File

@@ -27,7 +27,7 @@
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.14",
"@toeverything/theme": "^1.1.15",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
@@ -37,7 +37,6 @@
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts",
"./turbo-painter": "./src/turbo/code-painter.worker.ts",
"./view": "./src/view.ts",
"./store": "./src/store.ts"

View File

@@ -48,7 +48,11 @@ const codePreprocessor: MarkdownAdapterPreprocessor = {
}
trimmedLine = trimmedLine.trimEnd();
if (!trimmedLine.startsWith('<') && !trimmedLine.endsWith('>')) {
if (
!trimmedLine.startsWith('<') &&
!trimmedLine.endsWith('>') &&
!trimmedLine.includes(' ')
) {
// check if it is a url link and wrap it with the angle brackets
// sometimes the url includes emphasis `_` that will break URL parsing
//

View File

@@ -1,38 +0,0 @@
import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu';
import {
BlockViewExtension,
FlavourExtension,
WidgetViewExtension,
} from '@blocksuite/std';
import type { ExtensionType } from '@blocksuite/store';
import { literal, unsafeStatic } from 'lit/static-html.js';
import { CodeBlockAdapterExtensions } from './adapters/extension.js';
import { getCodeClipboardExtensions } from './clipboard/index.js';
import {
CodeBlockInlineManagerExtension,
CodeBlockUnitSpecExtension,
} from './code-block-inline.js';
import { CodeBlockHighlighter } from './code-block-service.js';
import { CodeKeymapExtension } from './code-keymap.js';
import { AFFINE_CODE_TOOLBAR_WIDGET } from './code-toolbar/index.js';
import { codeSlashMenuConfig } from './configs/slash-menu.js';
export const codeToolbarWidget = WidgetViewExtension(
'affine:code',
AFFINE_CODE_TOOLBAR_WIDGET,
literal`${unsafeStatic(AFFINE_CODE_TOOLBAR_WIDGET)}`
);
export const CodeBlockSpec: ExtensionType[] = [
FlavourExtension('affine:code'),
CodeBlockHighlighter,
BlockViewExtension('affine:code', literal`affine-code`),
codeToolbarWidget,
CodeBlockInlineManagerExtension,
CodeBlockUnitSpecExtension,
CodeBlockAdapterExtensions,
SlashMenuConfigExtension('affine:code', codeSlashMenuConfig),
CodeKeymapExtension,
...getCodeClipboardExtensions(),
].flat();

View File

@@ -26,11 +26,13 @@ import { computed, effect, type Signal, signal } from '@preact/signals-core';
import { html, nothing, type TemplateResult } from 'lit';
import { query } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import { styleMap } from 'lit/directives/style-map.js';
import { bundledLanguagesInfo, type ThemedToken } from 'shiki';
import { CodeBlockConfigExtension } from './code-block-config.js';
import { CodeBlockInlineManagerExtension } from './code-block-inline.js';
import { CodeBlockHighlighter } from './code-block-service.js';
import { CodeBlockPreviewIdentifier } from './code-preview-extension.js';
import { codeBlockStyles } from './styles.js';
export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel> {
@@ -38,6 +40,16 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
private _inlineRangeProvider: InlineRangeProvider | null = null;
private readonly _localPreview$ = signal<boolean | null>(null);
preview$: Signal<boolean> = computed(() => {
const modelPreview = !!this.model.props.preview$.value;
if (this.store.readonly) {
return this._localPreview$.value ?? modelPreview;
}
return modelPreview;
});
highlightTokens$: Signal<ThemedToken[][]> = signal([]);
languageName$: Signal<string> = computed(() => {
@@ -66,7 +78,7 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
}
get readonly() {
return this.doc.readonly;
return this.store.readonly;
}
get langs() {
@@ -224,7 +236,7 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
return;
},
Tab: ctx => {
if (this.doc.readonly) return;
if (this.store.readonly) return;
const state = ctx.get('keyboardState');
const event = state.raw;
const inlineEditor = this.inlineEditor;
@@ -332,10 +344,10 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
return true;
},
Delete: () => {
return true;
return;
},
Enter: () => {
this.doc.captureSync();
this.store.captureSync();
return true;
},
'Mod-Enter': () => {
@@ -346,11 +358,16 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
if (!inlineRange || !inlineEditor) return;
const isEnd = model.props.text.length === inlineRange.index;
if (!isEnd) return;
const parent = this.doc.getParent(model);
const parent = this.store.getParent(model);
if (!parent) return;
const index = parent.children.indexOf(model);
if (index === -1) return;
const id = this.doc.addBlock('affine:paragraph', {}, parent, index + 1);
const id = this.store.addBlock(
'affine:paragraph',
{},
parent,
index + 1
);
focusTextModel(std, id);
return true;
},
@@ -361,7 +378,7 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
copyCode() {
const model = this.model;
const slice = Slice.fromModels(model.doc, [model]);
const slice = Slice.fromModels(model.store, [model]);
this.std.clipboard
.copySlice(slice)
.then(() => {
@@ -381,8 +398,16 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
override renderBlock(): TemplateResult<1> {
const showLineNumbers =
this.std.getOptional(CodeBlockConfigExtension.identifier)
?.showLineNumbers ?? true;
(this.std.getOptional(CodeBlockConfigExtension.identifier)
?.showLineNumbers ??
true) &&
(this.model.props.lineNumber ?? true);
const preview = this.preview$.value;
const previewContext = this.std.getOptional(
CodeBlockPreviewIdentifier(this.model.props.language ?? '')
);
const shouldRenderPreview = preview && previewContext;
return html`
<div
@@ -390,40 +415,50 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
'affine-code-block-container': true,
mobile: IS_MOBILE,
wrap: this.model.props.wrap,
'disable-line-numbers': !showLineNumbers,
})}
>
<rich-text
style=${styleMap({
display: shouldRenderPreview ? 'none' : undefined,
})}
.yText=${this.model.props.text.yText}
.inlineEventSource=${this.topContenteditableElement ?? nothing}
.undoManager=${this.doc.history}
.undoManager=${this.store.history.undoManager}
.attributesSchema=${this.inlineManager.getSchema()}
.attributeRenderer=${this.inlineManager.getRenderer()}
.readonly=${this.doc.readonly}
.readonly=${this.store.readonly}
.inlineRangeProvider=${this._inlineRangeProvider}
.enableClipboard=${false}
.enableUndoRedo=${false}
.wrapText=${this.model.props.wrap}
.verticalScrollContainerGetter=${() => getViewportElement(this.host)}
.vLineRenderer=${showLineNumbers
? (vLine: VLine) => {
return html`
<span contenteditable="false" class="line-number"
>${vLine.index + 1}</span
>
${vLine.renderVElements()}
`;
}
: undefined}
.vLineRenderer=${(vLine: VLine) => {
return html`
<span contenteditable="false" class="line-number"
>${vLine.index + 1}</span
>
${vLine.renderVElements()}
`;
}}
>
</rich-text>
<div
style=${styleMap({
display: shouldRenderPreview ? undefined : 'none',
})}
contenteditable="false"
class="affine-code-block-preview"
>
${previewContext?.renderer(this.model)}
</div>
${this.renderChildren(this.model)} ${Object.values(this.widgets)}
</div>
`;
}
setWrap(wrap: boolean) {
this.doc.updateBlock(this.model, { wrap });
this.store.updateBlock(this.model, { wrap });
}
@query('rich-text')
@@ -436,6 +471,14 @@ export class CodeBlockComponent extends CaptionedBlockComponent<CodeBlockModel>
override accessor useCaptionEditor = true;
override accessor useZeroWidth = true;
setPreviewState(preview: boolean) {
if (this.store.readonly) {
this._localPreview$.value = preview;
} else {
this.store.updateBlock(this.model, { preview });
}
}
}
declare global {

View File

@@ -0,0 +1,27 @@
import type { CodeBlockModel } from '@blocksuite/affine-model';
import { createIdentifier } from '@blocksuite/global/di';
import type { ExtensionType } from '@blocksuite/store';
import type { HTMLTemplateResult } from 'lit';
export type CodeBlockPreviewRenderer = (
model: CodeBlockModel
) => HTMLTemplateResult | null;
export type CodeBlockPreviewContext = {
renderer: CodeBlockPreviewRenderer;
lang: string;
};
export const CodeBlockPreviewIdentifier =
createIdentifier<CodeBlockPreviewContext>('CodeBlockPreview');
export function CodeBlockPreviewExtension(
lang: string,
renderer: CodeBlockPreviewRenderer
): ExtensionType {
return {
setup: di => {
di.addImpl(CodeBlockPreviewIdentifier(lang), { renderer, lang });
},
};
}

View File

@@ -4,6 +4,7 @@ import type {
MenuItemGroup,
} from '@blocksuite/affine-components/toolbar';
import { renderGroups } from '@blocksuite/affine-components/toolbar';
import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
import { WithDisposable } from '@blocksuite/global/lit';
import { noop } from '@blocksuite/global/utils';
import { MoreVerticalIcon } from '@blocksuite/icons/lit';
@@ -30,12 +31,11 @@ export class AffineCodeToolbar extends WithDisposable(LitElement) {
padding: 4px;
margin: 0;
display: flex;
justify-content: flex-end;
}
.code-toolbar-button {
color: var(--affine-icon-color);
background-color: var(--affine-background-primary-color);
color: ${unsafeCSSVarV2('icon/primary')};
background-color: ${unsafeCSSVarV2('button/secondary')};
box-shadow: var(--affine-shadow-1);
border-radius: 4px;
}

View File

@@ -4,6 +4,10 @@ import {
showPopFilterableList,
} from '@blocksuite/affine-components/filterable-list';
import { ArrowDownIcon } from '@blocksuite/affine-components/icons';
import {
DocModeProvider,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/lit';
import { noop } from '@blocksuite/global/utils';
@@ -18,24 +22,19 @@ export class LanguageListButton extends WithDisposable(
SignalWatcher(LitElement)
) {
static override styles = css`
:host {
margin-right: auto;
}
.lang-button {
background-color: var(--affine-background-primary-color);
box-shadow: var(--affine-shadow-1);
display: flex;
gap: 4px;
padding: 2px 4px;
height: 28px;
}
.lang-button:hover {
background: var(--affine-hover-color-filled);
background: ${unsafeCSSVarV2('layer/background/hoverOverlay')};
}
.lang-button[hover] {
background: var(--affine-hover-color-filled);
background: ${unsafeCSSVarV2('layer/background/hoverOverlay')};
}
.lang-button-icon {
@@ -53,7 +52,7 @@ export class LanguageListButton extends WithDisposable(
private _abortController?: AbortController;
private readonly _clickLangBtn = () => {
if (this.blockComponent.doc.readonly) return;
if (this.blockComponent.store.readonly) return;
if (this._abortController) {
// Close the language list if it's already opened.
this._abortController.abort();
@@ -75,9 +74,21 @@ export class LanguageListButton extends WithDisposable(
sortedBundledLanguages.splice(index, 1);
sortedBundledLanguages.unshift(item);
}
this.blockComponent.doc.transact(() => {
this.blockComponent.store.transact(() => {
this.blockComponent.model.props.language$.value = item.name;
});
const std = this.blockComponent.std;
const mode =
std.getOptional(DocModeProvider)?.getEditorMode() ?? 'page';
const telemetryService = std.getOptional(TelemetryProvider);
if (!telemetryService) return;
telemetryService.track('codeBlockLanguageSelect', {
page: mode,
segment: 'code block',
module: 'language selector',
control: item.name,
});
},
active: item => item.name === this.blockComponent.model.props.language,
items: this._sortedBundledLanguages,
@@ -138,10 +149,10 @@ export class LanguageListButton extends WithDisposable(
</div>`}
height="24px"
@click=${this._clickLangBtn}
?disabled=${this.blockComponent.doc.readonly}
?disabled=${this.blockComponent.store.readonly}
>
<span class="lang-button-icon" slot="suffix">
${!this.blockComponent.doc.readonly ? ArrowDownIcon : nothing}
${!this.blockComponent.store.readonly ? ArrowDownIcon : nothing}
</span>
</icon-button> `;
}

View File

@@ -0,0 +1,112 @@
import {
DocModeProvider,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/lit';
import { css, html, LitElement, nothing } from 'lit';
import { property } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import type { CodeBlockComponent } from '../../code-block';
import { CodeBlockPreviewIdentifier } from '../../code-preview-extension';
export class PreviewButton extends WithDisposable(SignalWatcher(LitElement)) {
static override styles = css`
:host {
margin-right: auto;
}
.preview-toggle-container {
display: flex;
padding: 2px;
align-items: flex-start;
gap: 4px;
border-radius: 4px;
background: ${unsafeCSSVarV2('segment/background')};
}
.toggle-button {
display: flex;
padding: 0px 4px;
justify-content: center;
align-items: center;
gap: 4px;
border-radius: 4px;
color: ${unsafeCSSVarV2('text/primary')};
font-family: Inter;
font-size: 12px;
font-style: normal;
font-weight: 500;
line-height: 20px;
}
.toggle-button:hover {
background: ${unsafeCSSVarV2('layer/background/hoverOverlay')};
}
.toggle-button.active {
background: ${unsafeCSSVarV2('segment/button')};
box-shadow:
var(--Shadow-buttonShadow-1-x, 0px) var(--Shadow-buttonShadow-1-y, 0px)
var(--Shadow-buttonShadow-1-blur, 1px) 0px
var(--Shadow-buttonShadow-1-color, rgba(0, 0, 0, 0.12)),
var(--Shadow-buttonShadow-2-x, 0px) var(--Shadow-buttonShadow-2-y, 1px)
var(--Shadow-buttonShadow-2-blur, 5px) 0px
var(--Shadow-buttonShadow-2-color, rgba(0, 0, 0, 0.12));
}
`;
private readonly _toggle = (value: boolean) => {
this.blockComponent.setPreviewState(value);
const std = this.blockComponent.std;
const mode = std.getOptional(DocModeProvider)?.getEditorMode() ?? 'page';
const telemetryService = std.getOptional(TelemetryProvider);
if (!telemetryService) return;
telemetryService.track('htmlBlockTogglePreview', {
page: mode,
segment: 'code block',
module: 'code toolbar container',
control: 'preview toggle button',
});
};
get preview() {
return this.blockComponent.preview$.value;
}
override render() {
const lang = this.blockComponent.model.props.language$.value ?? '';
const previewContext = this.blockComponent.std.getOptional(
CodeBlockPreviewIdentifier(lang)
);
if (!previewContext) return nothing;
return html`
<div class="preview-toggle-container">
<div
class=${classMap({
'toggle-button': true,
active: !this.preview,
})}
@click=${() => this._toggle(false)}
>
Code
</div>
<div
class=${classMap({
'toggle-button': true,
active: this.preview,
})}
@click=${() => this._toggle(true)}
>
Preview
</div>
</div>
`;
}
@property({ attribute: false })
accessor blockComponent!: CodeBlockComponent;
}

View File

@@ -9,10 +9,12 @@ import {
import type { MenuItemGroup } from '@blocksuite/affine-components/toolbar';
import { isInsidePageEditor } from '@blocksuite/affine-shared/utils';
import { noop, sleep } from '@blocksuite/global/utils';
import { NumberedListIcon } from '@blocksuite/icons/lit';
import { BlockSelection } from '@blocksuite/std';
import { html } from 'lit';
import { ifDefined } from 'lit/directives/if-defined.js';
import { CodeBlockConfigExtension } from '../code-block-config.js';
import type { CodeBlockToolbarContext } from './context.js';
import { duplicateCodeBlock } from './utils.js';
@@ -42,6 +44,18 @@ export const PRIMARY_GROUPS: MenuItemGroup<CodeBlockToolbarContext>[] = [
};
},
},
{
type: 'preview',
generate: ({ blockComponent }) => {
return {
action: noop,
render: () => html`
<preview-button .blockComponent=${blockComponent}>
</preview-button>
`,
};
},
},
{
type: 'copy-code',
label: 'Copy code',
@@ -103,27 +117,76 @@ export const PRIMARY_GROUPS: MenuItemGroup<CodeBlockToolbarContext>[] = [
},
];
// Clipboard Group
export const clipboardGroup: MenuItemGroup<CodeBlockToolbarContext> = {
type: 'clipboard',
export const toggleGroup: MenuItemGroup<CodeBlockToolbarContext> = {
type: 'toggle',
items: [
{
type: 'wrap',
generate: ({ blockComponent, close }) => {
const wrapped = blockComponent.model.props.wrap;
const label = wrapped ? 'Cancel wrap' : 'Wrap';
const icon = wrapped ? CancelWrapIcon : WrapIcon;
generate: ({ blockComponent }) => {
return {
label,
icon,
action: () => {
blockComponent.setWrap(!wrapped);
close();
action: () => {},
render: () => {
const wrapped = blockComponent.model.props.wrap;
const label = wrapped ? 'Cancel wrap' : 'Wrap';
const icon = wrapped ? CancelWrapIcon : WrapIcon;
return html`
<editor-menu-action
@click=${() => {
blockComponent.setWrap(!wrapped);
}}
aria-label=${label}
>
${icon}
<span class="label">${label}</span>
<toggle-switch
style="margin-left: auto;"
.on="${wrapped}"
></toggle-switch>
</editor-menu-action>
`;
},
};
},
},
{
type: 'line-number',
when: ({ std }) =>
std.getOptional(CodeBlockConfigExtension.identifier)?.showLineNumbers ??
true,
generate: ({ blockComponent }) => {
return {
action: () => {},
render: () => {
const lineNumber = blockComponent.model.props.lineNumber ?? true;
const label = lineNumber ? 'Cancel line number' : 'Line number';
return html`
<editor-menu-action
@click=${() => {
blockComponent.store.updateBlock(blockComponent.model, {
lineNumber: !lineNumber,
});
}}
aria-label=${label}
>
${NumberedListIcon()}
<span class="label">${label}</span>
<toggle-switch
style="margin-left: auto;"
.on="${lineNumber}"
></toggle-switch>
</editor-menu-action>
`;
},
};
},
},
],
};
// Clipboard Group
export const clipboardGroup: MenuItemGroup<CodeBlockToolbarContext> = {
type: 'clipboard',
items: [
{
type: 'duplicate',
label: 'Duplicate',
@@ -173,6 +236,7 @@ export const deleteGroup: MenuItemGroup<CodeBlockToolbarContext> = {
};
export const MORE_GROUPS: MenuItemGroup<CodeBlockToolbarContext>[] = [
toggleGroup,
clipboardGroup,
deleteGroup,
];

View File

@@ -8,7 +8,7 @@ export class CodeBlockToolbarContext extends MenuContext {
};
get doc() {
return this.blockComponent.doc;
return this.blockComponent.store;
}
get host() {

View File

@@ -12,5 +12,5 @@ export const duplicateCodeBlock = (model: CodeBlockModel) => {
...duplicateProps,
};
return model.doc.addSiblingBlocks(model, [newProps])[0];
return model.store.addSiblingBlocks(model, [newProps])[0];
};

View File

@@ -5,6 +5,7 @@ import {
} from './code-toolbar';
import { AffineCodeToolbar } from './code-toolbar/components/code-toolbar';
import { LanguageListButton } from './code-toolbar/components/lang-button';
import { PreviewButton } from './code-toolbar/components/preview-button';
import { AffineCodeUnit } from './highlight/affine-code-unit';
export function effects() {
@@ -13,12 +14,14 @@ export function effects() {
customElements.define(AFFINE_CODE_TOOLBAR_WIDGET, AffineCodeToolbarWidget);
customElements.define('affine-code-unit', AffineCodeUnit);
customElements.define('affine-code', CodeBlockComponent);
customElements.define('preview-button', PreviewButton);
}
declare global {
interface HTMLElementTagNameMap {
'language-list-button': LanguageListButton;
'affine-code-toolbar': AffineCodeToolbar;
'preview-button': PreviewButton;
[AFFINE_CODE_TOOLBAR_WIDGET]: AffineCodeToolbarWidget;
}
}

Some files were not shown because too many files have changed in this diff Show More