mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-11 15:16:28 +08:00
69c2f09eba9dff48aa749b59eb75ff235ea819bb
4050 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
38110de134 |
fix(core): desktop e2e (#15062)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Sign-in flows now reliably propagate richer authentication results (user data and session type), improving persistence and reducing intermittent sign-in issues. * Native token handling gains a fallback for environments without encrypted storage, improving session reliability. * **New Features** * User-visible warning when sign-in is session-only because encrypted storage is unavailable. * **Chores** * Tooling ignore patterns updated to exclude .codex. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
7123595831 |
chore: bump deps (#15059)
#### PR Dependency Tree * **PR #15059** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Configurable minimum account age before new accounts can invite members or create share links (default: 24 hours). * Sign-in now returns and caches user info for improved session handling. * **Bug Fixes** * Queue handling accepts and resolves job IDs with special characters. * Improved clipboard/rich-text caret handling and nested-list paste reliability. * Calendar tests use dynamic current-month dates. * AI search returns explicit "No matching documents" when none found. * Auth session responses are explicitly non-cacheable. * **Chores** * Dependency and toolchain bumps; admin UI config/schema exposes the new account-age setting. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
ce9841df9d |
feat(server): passkey pre-refactor (#15060)
#### PR Dependency Tree * **PR #15060** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * OpenApp native sign-in and native session exchange (JWT) for mobile & desktop. * Centralized short-lived auth challenge store for one-time tokens. * Encrypted per-endpoint token storage and native token handlers (Android, iOS, Electron). * **Improvements** * Richer auth-method reporting (password, magic link, OAuth, passkey) and improved sign-in flows. * Hardened magic-link, OAuth, and session issuance; JWT-backed sessions and websocket JWT support. * UX tweaks: form-based password submit, OTP autocomplete, adjusted captcha flow. * **Bug Fixes** * Expanded tests and auth-state resets to avoid cross-test leakage. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
5b9d51b41b |
chore: bump up RevenueCat/purchases-ios-spm version to from: "5.75.0" (#15048)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [RevenueCat/purchases-ios-spm](https://redirect.github.com/RevenueCat/purchases-ios-spm) | minor | `from: "5.74.0"` → `from: "5.75.0"` | --- ### Release Notes <details> <summary>RevenueCat/purchases-ios-spm (RevenueCat/purchases-ios-spm)</summary> ### [`v5.75.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.74.0...5.75.0) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.74.0...5.75.0) </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIwMi4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
7a575a4a5b |
fix: hide experimental settings for doc and folder icons (#15021)
should fix #13955 The emoji doc and folder icons have been officially released with v0.25 but the experimental settings were still available with no effect if switched. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Feature flags for emoji folder and document icons are no longer user-configurable. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/15021?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
66a6a5fffc |
feat(i18n): add missing zh-Hans translations (#15032)
## Summary This PR completes the missing Simplified Chinese (`zh-Hans`) i18n resource coverage. The current i18n completeness calculation is based on key coverage between `en.json` and each locale resource file. Before this change, `zh-Hans.json` contained 2331 keys while `en.json` contained 2406 keys, resulting in a displayed completeness of 97%. This change adds the 75 missing `zh-Hans` translation entries and updates the generated completeness value for `zh-Hans` from 97% to 100%. ## Changes - Added 75 missing Simplified Chinese translations to `packages/frontend/i18n/src/resources/zh-Hans.json`. - Updated `packages/frontend/i18n/src/i18n-completenesses.json` so `zh-Hans` now reports 100% completeness. - Kept the scope limited to missing i18n resource keys only. ## Notes This PR does not modify existing `zh-Hans` translations, terminology choices, or hardcoded English UI strings outside the i18n resource files. ## Verification - Confirmed `zh-Hans.json` parses successfully. - Confirmed `zh-Hans.json` now has full key coverage against `en.json`. - Confirmed missing key count is 0. - Confirmed computed `zh-Hans` completeness is 100%. - Ran pre-commit checks: - `yarn lint-staged` - `yarn lint:ox` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Completed Chinese (Simplified) translations with 100% coverage for the application. * Added new translations across multiple areas: appearance and image settings, export functionality, document import from Bear and Obsidian, analytics and viewer information, editor settings including auto-date titles and icon options, workspace sharing controls, calendar integration with CalDAV support, share menu tooltips, and comprehensive error messages. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/15032?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
4f14e8840c |
chore: bump up RevenueCat/purchases-ios-spm version to from: "5.74.0" (#15024)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [RevenueCat/purchases-ios-spm](https://redirect.github.com/RevenueCat/purchases-ios-spm) | minor | `from: "5.73.0"` → `from: "5.74.0"` | --- ### Release Notes <details> <summary>RevenueCat/purchases-ios-spm (RevenueCat/purchases-ios-spm)</summary> ### [`v5.74.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.73.1...5.74.0) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.73.1...5.74.0) ### [`v5.73.1`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5731) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.73.0...5.73.1) #### 5.73.1 </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NC4wIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
6d1172ba44 | chore: bump deps | ||
|
|
2aa56cbccd | chore: bump toolchain & fix lint | ||
|
|
eecd0a2169 |
feat(i18n): add Turkish translation (#15000)
This pull request introduces support for the Turkish language to the frontend internationalization system and adds a new pull request template to standardize PR descriptions. The main changes are grouped below: **Internationalization: Turkish Language Support** * Added `'tr'` (Turkish) to the `Language` type and `SUPPORTED_LANGUAGES` object in `index.ts`, including its display name, native name, flag emoji, and resource loader. [[1]](diffhunk://#diff-ba5f665c3490d0f5acb2cb70f08314c5373137fa8085ab05175047f10cb7fdf8L26-R27) [[2]](diffhunk://#diff-ba5f665c3490d0f5acb2cb70f08314c5373137fa8085ab05175047f10cb7fdf8R183-R188) * Updated `i18n-completenesses.json` to include Turkish (`"tr": 6`). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Turkish language can now be selected in the app. * **Localization** * Initial Turkish translations added and translation completeness set to 100%. * Locale metadata added (display name, original name, flag) for Turkish. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/15000?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
f2980503b4 |
fix(editor): sorting of page emoji display toggle (#15020)
Fixes the order of the new setting toggle introduced in #14999. It appeared between "Auto-title new docs with current date" and "New doc date format" which both belong together. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Repositioned the "display add icon option" setting within General settings for improved interface organization and logical grouping. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/15020?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
925c95ce88 |
feat(i18n): update German translation (#15011)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Localization** * German language completeness raised to 100%. * Added German translations for Markdown export/copy labels and success text, import formats (including Bear backup and Word .docx), editor settings (auto-date-title formats, add-icon option), AI BYOK workspace/provider-key UI and notifications, and a recording/importing UI prompt. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/15011?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
d20dbfd6a2 |
feat(editor): add page emoji display toggle #14987 (#14999)
This PR adds a display toggle for Page Emoji, so users can choose whether the add emoji option is shown in the page header when no emoji is set. What changed read editor setting for display add icon option hide emoji placeholder entry when the setting is disabled keep existing behavior for readonly mode and for pages that already have an emoji Why This implements the feature request to control Page Emoji visibility and improves header cleanliness for users who prefer a minimal UI. Issue Closes #14093 <img width="1277" height="726" alt="Screenshot 2026-05-19 at 3 44 14 PM" src="https://github.com/user-attachments/assets/caa29272-35c0-410d-bd54-2e038e4e0db2" /> <img width="1511" height="779" alt="Screenshot 2026-05-19 at 3 44 35 PM" src="https://github.com/user-attachments/assets/3504136a-d34c-45cc-992b-0056b018ff92" /> Testing verified in editable mode: setting ON: add emoji placeholder is visible when page has no emoji setting OFF: add emoji placeholder is hidden when page has no emoji verified in readonly mode: no emoji: nothing shown with emoji: existing emoji is shown verified no regression for selecting/changing/removing emoji Screenshots I will attach screenshots in this section. Quick rule checks before submit Base branch is canary. PR title follows conventional format: type(scope): subject. Scope editor is valid for this repo. Include Closes #14093 in the body. Add your screenshots before creating or right after opening the PR. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added an editor setting to toggle whether the "add icon" option is shown when creating new documents (default: enabled). * **User Experience** * When disabled, the add-icon trigger is hidden for documents that use a placeholder icon; readonly display remains unchanged. * **Tests** * Updated tests to cover the new setting and toggle behavior. * **Localization** * Added translations and updated i18n typings and completeness metrics. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14999?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
41145961f9 |
chore: bump up RevenueCat/purchases-ios-spm version to from: "5.73.0" (#15008)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [RevenueCat/purchases-ios-spm](https://redirect.github.com/RevenueCat/purchases-ios-spm) | minor | `from: "5.66.0"` → `from: "5.73.0"` | --- ### Release Notes <details> <summary>RevenueCat/purchases-ios-spm (RevenueCat/purchases-ios-spm)</summary> ### [`v5.73.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5730) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.72.0...5.73.0) #### 5.73.0 ### [`v5.72.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5720) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.71.0...5.72.0) #### 5.72.0 ### [`v5.71.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5710) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.70.0...5.71.0) #### 5.71.0 ### [`v5.70.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5700) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.69.0...5.70.0) #### 5.70.0 ### [`v5.69.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5690) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.68.0...5.69.0) #### 5.69.0 ### [`v5.68.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5680) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.67.2...5.68.0) #### 5.68.0 ### [`v5.67.2`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5672) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.67.1...5.67.2) #### 5.67.2 ### [`v5.67.1`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5671) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.67.0...5.67.1) #### 5.67.1 ### [`v5.67.0`](https://redirect.github.com/RevenueCat/purchases-ios-spm/blob/HEAD/CHANGELOG.md#5670) [Compare Source](https://redirect.github.com/RevenueCat/purchases-ios-spm/compare/5.66.0...5.67.0) #### 5.67.0 </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xODUuMSIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
9f33d37add | feat(core): integrate realtime features (#15003) | ||
|
|
3e42bbf4fa |
chore: bump up apple/swift-collections version to from: "1.5.1" (#15001)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [apple/swift-collections](https://redirect.github.com/apple/swift-collections) | patch | `from: "1.5.0"` → `from: "1.5.1"` | --- ### Release Notes <details> <summary>apple/swift-collections (apple/swift-collections)</summary> ### [`v1.5.1`](https://redirect.github.com/apple/swift-collections/releases/tag/1.5.1): Swift Collections 1.5.1 [Compare Source](https://redirect.github.com/apple/swift-collections/compare/1.5.0...1.5.1) This is a patch release resolving three issues uncovered since 1.5.0 was tagged, including a source breaking regression introduced in 1.4.0, affecting clients importing the `Collections` module. #### What's Changed - Import error from `HashTreeCollections`, reported by [@​vanvoorden](https://redirect.github.com/vanvoorden) in [#​653](https://redirect.github.com/apple/swift-collections/issues/653) - Resolve source break in the Collections module by [@​lorentey](https://redirect.github.com/lorentey) in [#​654](https://redirect.github.com/apple/swift-collections/pull/654) - Linker error around RigidArray when using in Embedded Swift for WebAssembly, reported by [@​sliemeobn](https://redirect.github.com/sliemeobn) in [#​648](https://redirect.github.com/apple/swift-collections/issues/648) - \[BasicContainers] Don’t define LLDB formatter symbol on Wasm by [@​lorentey](https://redirect.github.com/lorentey) in [#​650](https://redirect.github.com/apple/swift-collections/pull/650) - Guard `UniqueBox.borrow` correctly by [@​FranzBusch](https://redirect.github.com/FranzBusch) in [#​649](https://redirect.github.com/apple/swift-collections/pull/649) **Full Changelog**: <https://github.com/apple/swift-collections/compare/1.5.0...1.5.1> </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xODUuMSIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
b5e5f0708a |
chore: bump up Lakr233/MarkdownView version to from: "3.9.1" (#14861)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [Lakr233/MarkdownView](https://redirect.github.com/Lakr233/MarkdownView) | minor | `from: "3.8.2"` → `from: "3.9.1"` | --- ### Release Notes <details> <summary>Lakr233/MarkdownView (Lakr233/MarkdownView)</summary> ### [`v3.9.1`](https://redirect.github.com/Lakr233/MarkdownView/compare/3.9.0...3.9.1) [Compare Source](https://redirect.github.com/Lakr233/MarkdownView/compare/3.9.0...3.9.1) ### [`v3.9.0`](https://redirect.github.com/Lakr233/MarkdownView/compare/3.8.2...3.9.0) [Compare Source](https://redirect.github.com/Lakr233/MarkdownView/compare/3.8.2...3.9.0) </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjMuOCIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
f96bf3dd24 |
feat(i18n): expand Urdu translation (#14995)
Closes #14994 🇵🇰 Urdu Translation for Pakistani Users ## Summary `ur.json` previously had only 31 of 2404 keys translated (~1%), leaving most of the AFFiNE UI in English for Urdu-speaking users. This PR fills in the remaining ~2400 keys so Pakistani / Urdu users get a fully localized experience. - `packages/frontend/i18n/src/resources/ur.json` — expanded from 31 → 2404 keys - `packages/frontend/i18n/src/i18n-completenesses.json` — `ur: 2` → `ur: 100` Existing hand-translated keys were preserved. ## Screenshots <img width="1600" height="716" alt="image" src="https://github.com/user-attachments/assets/1e3395b9-7cb0-44ba-a29f-a484419eb9fd" /> -------- <img width="1600" height="716" alt="image" src="https://github.com/user-attachments/assets/f03cb1ac-dde8-4425-a898-c56acebe45b6" /> ## Test plan - [x] Switch app language to Urdu (اردو) in Settings → Appearance → Language - [x] Sidebar, top bar, calendar, doc list, settings panels all render in Urdu - [x] RTL layout flows correctly - [x] Prettier + lint clean <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Localization** * Urdu language support is now fully available across the application, including translated UI text and locale-specific content. * Users can select Urdu as their preferred language and experience consistent translations and messaging throughout the product. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14995?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
c53457691d |
feat(server): entitlement based model (#14996)
#### PR Dependency Tree * **PR #14996** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Admin mutations to grant/revoke commercial entitlements. * New Doc comment-update permission. * Realtime user/workspace quota-state endpoints and live-update rooms. * **Bug Fixes** * More accurate readable-doc filtering and permission evaluation. * **Refactor** * Workspace feature management moved to entitlement-based model; permission and quota pipelines redesigned. * Admin workspace UI now edits flags only (feature toggles removed). * **Tests** * Extensive new and updated tests for permissions, entitlements, quota, projection, and backfills. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14996?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
103ad2a810 |
feat(i18n): add Kazakh translation (#14981)
Closes #14975 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Kazakh (kk) language has been added — users can now choose Kazakh for the interface, with complete localization coverage and language metadata (name and flag) included. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14981?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
0f5778ac89 |
feat(editor): calendar view for database block (#14984)
fix #13663 #### PR Dependency Tree * **PR #14984** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Calendar view for database blocks (month layout, entry cards, external-source support) * Workspace calendar integration and new slash-menu "Calendar View" * **Improvements** * Create/manage database rows from calendar UI; preserve durations when moving/resizing ranges * Drag-and-drop, drop-preview, and hit-testing support for calendar and docs * Redesigned in-menu View settings with multi-page navigation * Context-menu input autofocus toggle and conditional back-navigation * **Tests** * New unit and E2E suites covering calendar layout, interactions, sources, and slash-menu integration <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
e9ef3c50c8 |
fix(editor): transcript note will create useless docs (#14976)
fix #13520 #### PR Dependency Tree * **PR #14976** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Added comprehensive test coverage for markdown insertion functionality to verify that existing document metadata remains unchanged when importing markdown content into workspace documents. * **Chores** * Optimized internal markdown-to-snapshot conversion process to use a more direct and efficient conversion approach. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14976) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
c39fa1ff2d |
chore: bump up apple/swift-collections version to from: "1.5.0" (#14969)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [apple/swift-collections](https://redirect.github.com/apple/swift-collections) | minor | `from: "1.4.1"` → `from: "1.5.0"` | --- ### Release Notes <details> <summary>apple/swift-collections (apple/swift-collections)</summary> ### [`v1.5.0`](https://redirect.github.com/apple/swift-collections/releases/tag/1.5.0): Swift Collections 1.5.0 [Compare Source](https://redirect.github.com/apple/swift-collections/compare/1.4.1...1.5.0) This feature release supports Swift toolchain versions 6.0, 6.1, 6.2, and 6.3. It includes the following new features and bug fixes: ##### Debugging enhancements The package now defines LLDB data formatters for `RigidArray`. The formatters are emitted into the executable binary, and they are automatically loaded by LLDB. We expect to implement formatters for (many) more types in subsequent releases. ##### New stable APIs - `RigidArray` and `UniqueArray` now conform to `Equatable` when their element type is `Equatable`. This conformance requires a Swift 6.4 or later toolchain (it relies on [SE-0499][SE-0499] generalizations of `Equatable`/`Hashable` to support noncopyable conforming types). - `RigidArray` and `UniqueArray` gained an `isTriviallyIdentical(to:)` operation, which reports whether two instances share their underlying storage allocation. This does not require the element type to be `Equatable`, and it works with noncopyable elements. - [`BitSet`][BitSet] gained a `makeIterator(from:)` shortcut for starting iteration at (or after) a specific member, avoiding a linear scan from the start of the set. - [`OrderedDictionary`][OrderedDictionary] gained a `replaceElement(at:withKey:value:)` operation that replaces the key-value pair at a given index. The new key is allowed to equal the existing key at that index (in which case only the value is updated). [BitSet]: https://swiftpackageindex.com/apple/swift-collections/documentation/bitcollections/bitset [OrderedDictionary]: https://swiftpackageindex.com/apple/swift-collections/documentation/orderedcollections/ordereddictionary [SE-0499]: https://redirect.github.com/swiftlang/swift-evolution/blob/main/proposals/0499-equatable-hashable-comparable-noncopyable.md ##### Experimental hashed containers (`UnstableHashedContainers` trait) The Robin-Hood-hashed `UniqueSet`, `RigidSet`, `UniqueDictionary`, and `RigidDictionary` types in the `BasicContainers` module continue to evolve behind the `UnstableHashedContainers` package trait. This release brings a number of correctness fixes and performance improvements: - Faster removals, with better `maxProbeLength` maintenance to avoid probe-length bloat. - Small tables are now scrambled to avoid degenerate patterns on common key distributions. - A fast-path shortcut for insertions into under-utilized tables. - Fixes to the insertion algorithm and to `RigidDictionary.updateValue(forKey:with:)` (the latter exhibited undefined behavior on removals). - `RigidSet.insert(maximumCount:from:)` no longer spuriously reports a capacity overflow due to incorrect accounting. - The `UnstableHashedContainers` trait can now be enabled independently of `UnstableContainersPreview`. These types remain source-unstable for now. ##### Experimental sorted collections (`UnstableSortedCollections` trait) The `SortedCollections` module's [`SortedSet`][SortedSet] has gained the following additions: - `SortedSet` now supports value-range subscripts for the full variety of standard range expression types, `ClosedRange`, `PartialRangeFrom`, `PartialRangeThrough`, and `PartialRangeUpTo`. - `SortedSet.firstIndex(after:)` and `SortedSet.lastIndex(before:)` return the index to the nearest member following or preceding a given value. This release also fixes several underlying B-tree bugs that were surfaced by these additions. These types remain source-unstable; they have known API deficiencies that will need to be addressed before they ship. [SortedSet]: https://redirect.github.com/apple/swift-collections/tree/main/Sources/SortedCollections/SortedSet ##### Experimental container protocols (`UnstableContainersPreview` trait) The `ContainersPreview` module's protocol hierarchy and associated types continue to be developed. Several constructs have been renamed to follow Swift Evolution proposals in flight. | Old name | New name | | ------------------------- | --------------------------- | | `struct Box<T>` | `struct UniqueBox<Value>` | | `struct Borrow<Target>` | `struct Ref<Target>` | | `struct Inout<Target>` | `struct MutableRef<Target>` | | `Producer.ProducerError` | `Producer.Failure` | | `Producer.generateNext()` | `Producer.next()` | | `Producer.skip(upTo:)` | `Producer.skip(by:)` | For `UniqueBox`, `Ref` and `MutableRef`, there are deprecated typealiases for the old names, preserving source compatibility. Other changes to the experimental container model: - `Container.Index` no longer needs to conform to `Comparable`. This allows linked lists to become containers. - `RigidArray`, `UniqueArray`, `RigidDeque`, and `UniqueDeque` now conform to the container protocols. - Added `Producer.collect(into:)` for collecting a producer's output into a `RangeReplaceableContainer`. - Added `BorrowingIteratorProtocol.copy()` for turning a borrowing iterator into a producer. - Added `filter` and `map` overloads for `BorrowingIteratorProtocol`, `Producer`, and `Drain`. - `BorrowingSequence.first` was removed. - `BorrowingSequence`, `BorrowingIteratorProtocol` and their requirements have temporarily gained trailing underscores to avoid naming conflicts with the (provisional) protocol definition in the Standard Library. We expect these definitions to be removed when these protocols officially become part of the stdlib. The protocol-based APIs in `ContainersPreview` now require a Swift 6.4 or later toolchain. `UniqueBox` is source-stable, therefore it continues to require Swift 6.2. ##### Notable bug fixes - `HashTreeCollections`: Fixed an invariant violation that could be triggered by some operations on `TreeSet`/`TreeDictionary`. - `_RopeModule`: Fixed an infinite loop when hashing the UTF-8 view of a multi-chunk big substring. - `BitCollections`: Fixed a bogus precondition in `BitArray.insert(repeating:count:at:)`; fixed `BitSet.isSubset(of: Range<Int>)` to correctly examine elements above the range's upper word. - `HeapModule`: Fixed `Heap.insert(contentsOf:)` to use a wrapping multiply in its Floyd-heuristic computation; added a missing bounds assertion in `Heap._UnsafeHandle.swapAt(_:with:)`. - `OrderedCollections`: Fixed `OrderedSet` crash on negative capacity values; minor fixes in `_HashTable.UnsafeHandle`. - `DequeModule`: Fixed sizing issue in `UniqueDeque.replace(removing:addingCount:initializingWith:)`; fixed a missing argument validation in `RigidDeque.nextMutableSpan(after:maximumCount:)`; `RigidDeque.consume(_:consumingWith:)` now closes the resulting gap before returning; added zero-count fast-paths; replace/prepend operations taking a `Collection` now verify that the source's count matches its contents. - `BasicContainers`: Fixed an overallocation issue in `UniqueArray.replace(removing:copying:)`; fixed a partial-initialization correctness issue in `RigidArray.replace(removing:consumingWith:addingCount:initializingWith:)`. #### What's Changed - Add tests that build the ContainersPreview module by [@​natecook1000](https://redirect.github.com/natecook1000) in [#​610](https://redirect.github.com/apple/swift-collections/pull/610) - Add a workflow that performs a CMake build by [@​natecook1000](https://redirect.github.com/natecook1000) in [#​612](https://redirect.github.com/apple/swift-collections/pull/612) - Align `BorrowingSequence` implementation with proposal by [@​natecook1000](https://redirect.github.com/natecook1000) in [#​609](https://redirect.github.com/apple/swift-collections/pull/609) - Bump swiftlang/github-workflows/.github/workflows/swift\_package\_test.yml from 0.0.8 to 0.0.9 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​615](https://redirect.github.com/apple/swift-collections/pull/615) - Bump swiftlang/github-workflows/.github/workflows/soundness.yml from 0.0.8 to 0.0.9 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​614](https://redirect.github.com/apple/swift-collections/pull/614) - Fix lifetime requirements rigidly enforced in the latest nightlies by [@​lorentey](https://redirect.github.com/lorentey) in [#​617](https://redirect.github.com/apple/swift-collections/pull/617) - Track array proposal by [@​lorentey](https://redirect.github.com/lorentey) in [#​619](https://redirect.github.com/apple/swift-collections/pull/619) - Bump swiftlang/github-workflows/.github/workflows/soundness.yml from 0.0.9 to 0.0.10 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​620](https://redirect.github.com/apple/swift-collections/pull/620) - OrderedSet: Don't crash on negative capacity values by [@​thisismanan](https://redirect.github.com/thisismanan) in [#​622](https://redirect.github.com/apple/swift-collections/pull/622) - \[ContainersPreview] Don’t require `Container.Index` to conform to `Comparable` by [@​lorentey](https://redirect.github.com/lorentey) in [#​623](https://redirect.github.com/apple/swift-collections/pull/623) - Adjust experimental workflows by [@​lorentey](https://redirect.github.com/lorentey) in [#​626](https://redirect.github.com/apple/swift-collections/pull/626) - [BitSet] Add `BitSet.makeIterator(from:)` by [@​lorentey](https://redirect.github.com/lorentey) in [#​627](https://redirect.github.com/apple/swift-collections/pull/627) - \[BasicContainers] RigidSet.insert(maximumCount:from:): Fix spurious capacity overflow caused by incorrect accounting by [@​lorentey](https://redirect.github.com/lorentey) in [#​628](https://redirect.github.com/apple/swift-collections/pull/628) - \[BasicContainers] RigidArray.replace(removing:consumingWith:addingCount:initializingWith:): Fix correctness issue with partial initialization by [@​lorentey](https://redirect.github.com/lorentey) in [#​629](https://redirect.github.com/apple/swift-collections/pull/629) - \[BasicContainers] UniqueArray.replace(removing:copying): Fix overallocation issue by [@​lorentey](https://redirect.github.com/lorentey) in [#​630](https://redirect.github.com/apple/swift-collections/pull/630) - Fix \_trim(first:) returning wrong buffer region by [@​FranzBusch](https://redirect.github.com/FranzBusch) in [#​631](https://redirect.github.com/apple/swift-collections/pull/631) - Bump swiftlang/github-workflows/.github/workflows/soundness.yml from 0.0.10 to 0.0.11 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​625](https://redirect.github.com/apple/swift-collections/pull/625) - \[OrderedCollections] Add OrderedDictionary.replaceElement(at:withKey:… by [@​inju2403](https://redirect.github.com/inju2403) in [#​616](https://redirect.github.com/apple/swift-collections/pull/616) - \[ContainersPreview] Producer.ProducerError ⟹ Producer.Failure by [@​lorentey](https://redirect.github.com/lorentey) in [#​634](https://redirect.github.com/apple/swift-collections/pull/634) - fix: reserveCapacity DocC link in RigidArray by [@​manojmahapatra](https://redirect.github.com/manojmahapatra) in [#​633](https://redirect.github.com/apple/swift-collections/pull/633) - \[BasicContainers, DequeModule]: Assorted fixes by [@​lorentey](https://redirect.github.com/lorentey) in [#​632](https://redirect.github.com/apple/swift-collections/pull/632) - \[Debugging] Add lldb data formatter for RigidArray by [@​kastiglione](https://redirect.github.com/kastiglione) in [#​607](https://redirect.github.com/apple/swift-collections/pull/607) - \[HashTreeCollections] Fix invariant violation in \_HashNode.\_regularNode by [@​lorentey](https://redirect.github.com/lorentey) in [#​635](https://redirect.github.com/apple/swift-collections/pull/635) - \[BitCollections] Fix small issues by [@​lorentey](https://redirect.github.com/lorentey) in [#​637](https://redirect.github.com/apple/swift-collections/pull/637) - \[HeapModule, SortedCollections] Assorted tool-assisted fixes and adjustments by [@​lorentey](https://redirect.github.com/lorentey) in [#​639](https://redirect.github.com/apple/swift-collections/pull/639) - \[BasicContainers] Enable APIs scheduled to ship in 1.5.0 by [@​lorentey](https://redirect.github.com/lorentey) in [#​641](https://redirect.github.com/apple/swift-collections/pull/641) - \[BasicContainers] Fix copypasta in `UniqueArray.edit`’s docs by [@​lorentey](https://redirect.github.com/lorentey) in [#​642](https://redirect.github.com/apple/swift-collections/pull/642) - Rename `Box` to `UniqueBox`; align API surface with SE-0517 by [@​lorentey](https://redirect.github.com/lorentey) in [#​640](https://redirect.github.com/apple/swift-collections/pull/640) - Bump swiftlang/github-workflows/.github/workflows/swift\_package\_test.yml from 0.0.9 to 0.0.11 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​624](https://redirect.github.com/apple/swift-collections/pull/624) - Use the defines from traits directly by [@​FranzBusch](https://redirect.github.com/FranzBusch) in [#​644](https://redirect.github.com/apple/swift-collections/pull/644) - \[ContainersPreview] `struct Borrow` ⟹ `struct Ref` by [@​lorentey](https://redirect.github.com/lorentey) in [#​643](https://redirect.github.com/apple/swift-collections/pull/643) - \[ContainersPreview] `struct Inout` ⟹ `struct MutableRef` by [@​lorentey](https://redirect.github.com/lorentey) in [#​646](https://redirect.github.com/apple/swift-collections/pull/646) - 1.5.0 release preparations by [@​lorentey](https://redirect.github.com/lorentey) in [#​647](https://redirect.github.com/apple/swift-collections/pull/647) #### New Contributors - [@​thisismanan](https://redirect.github.com/thisismanan) made their first contribution in [#​622](https://redirect.github.com/apple/swift-collections/pull/622) - [@​FranzBusch](https://redirect.github.com/FranzBusch) made their first contribution in [#​631](https://redirect.github.com/apple/swift-collections/pull/631) - [@​inju2403](https://redirect.github.com/inju2403) made their first contribution in [#​616](https://redirect.github.com/apple/swift-collections/pull/616) - [@​manojmahapatra](https://redirect.github.com/manojmahapatra) made their first contribution in [#​633](https://redirect.github.com/apple/swift-collections/pull/633) - [@​kastiglione](https://redirect.github.com/kastiglione) made their first contribution in [#​607](https://redirect.github.com/apple/swift-collections/pull/607) **Full Changelog**: <https://github.com/apple/swift-collections/compare/1.4.1...1.5.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzkuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE3OS4zIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
3416de1e4d |
fix(server): missing root cert (#14970)
#### PR Dependency Tree * **PR #14970** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated TLS library dependencies with pinned version constraints across multiple packages * Removed `tls-rustls` feature from sqlx configurations in backend and frontend packages * Removed unused `sqlx` dependency from mobile native package * Refined HTTPS client configuration with embedded certificate roots and added validation test <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14970) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
419fc5d5e0 |
chore: bump up Recouse/EventSource version to from: "0.1.8" (#14960)
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [Recouse/EventSource](https://redirect.github.com/Recouse/EventSource) | patch | `from: "0.1.7"` → `from: "0.1.8"` | --- ### Release Notes <details> <summary>Recouse/EventSource (Recouse/EventSource)</summary> ### [`v0.1.8`](https://redirect.github.com/Recouse/EventSource/releases/tag/0.1.8) [Compare Source](https://redirect.github.com/Recouse/EventSource/compare/0.1.7...0.1.8) #### What's Changed - Fix O(n²) performance in ServerEventParser.parse() by [@​liefran-sim](https://redirect.github.com/liefran-sim) in [#​49](https://redirect.github.com/Recouse/EventSource/pull/49) #### New Contributors - [@​liefran-sim](https://redirect.github.com/liefran-sim) made their first contribution in [#​49](https://redirect.github.com/Recouse/EventSource/pull/49) **Full Changelog**: <https://github.com/Recouse/EventSource/compare/0.1.7...0.1.8> </details> --- ### Configuration 📅 **Schedule**: (UTC) - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzMuNiIsInVwZGF0ZWRJblZlciI6IjQzLjE3My42IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
659072183c | chore: bump deps | ||
|
|
e222f06e94 |
feat(editor): extract chat runtime (#14937)
#### PR Dependency Tree * **PR #14937** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Centralized AI event system and a runtime powering chat sessions and actions. * **Improvements** * Chat UI (composer, messages, toolbar, tabs, panels) now syncs with runtime snapshots for more consistent state. * Improved session/tab lifecycle (create, fork, delete), context embedding status, and history handling. * More reliable send/stop/retry flows, better telemetry scoping, and clearer upgrade/login/insert-template prompts. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
a1d150a748 |
fix(server): realtime module not loaded (#14952)
#### PR Dependency Tree * **PR #14952** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Optimized workspace invite link fetching by separating it from general workspace configuration queries for improved performance. * Reorganized transcription-related backend modules to better separate concerns and enable real-time functionality. * **Chores** * Updated generated GraphQL types and iOS query definitions to reflect API changes. [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14952) <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
db0ff0a9df |
feat(core): migrate more pull to realtime (#14936)
#### PR Dependency Tree * **PR #14936** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Consolidated realtime subscription patterns for consistent, more reliable live updates across comments, notifications, transcription tasks, and embedding progress. * Standardized realtime room naming and subscription keys for deterministic delivery. * **New Features** * Introduced a reusable live-query mechanism powering realtime snapshot + event workflows used by comments, notifications, transcript tasks, and embedding progress. * **Tests** * Added tests covering live-query behavior and deterministic subscription key generation. [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14936) <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
8cf00738c2 |
feat(server): realtime notification & task status (#14934)
#### PR Dependency Tree * **PR #14934** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Full realtime platform added: live notifications, comments, embedding progress, and transcription task updates via realtime subscriptions. * **Chores** * Frontend switched from polling/GraphQL queries to realtime channels; legacy query fields marked deprecated and client libs updated to use realtime APIs. [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14934) <!-- end of auto-generated comment: release notes by coderabbit.ai --> #### PR Dependency Tree * **PR #14934** 👈 * **PR #14936** This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) |
||
|
|
417d31cabe |
fix(core): ui state (#14933)
#### PR Dependency Tree * **PR #14933** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added draft tab option to AI chat interface * Introduced "Current document" session history view in chat history popover * Added control to show/hide "New Chat" button * **Improvements** * Enhanced chat history preservation when switching between sessions * Prevented duplicate session creation requests * Improved message handling during session transitions and generation [](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14933) <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
32a94d68dc | chore: add utils | ||
|
|
5813e7dd77 | chore: update i18n | ||
|
|
ac37d07e74 |
feat(editor): add Bear backup import and markdown zip folder hierarchy (#14599)
## Summary
- Add Bear `.bear2bk` backup importer (TextBundle-based zip format)
- Enhance markdown zip import to preserve folder structure from zip
paths
- Add colored highlight (`<mark data-color="...">`) support to HTML
adapter
### Bear Import Details
Bear backups are zip archives of TextBundle directories. The importer:
- Parses Bear-specific markdown (highlights `==text==`, callouts `>
[!NOTE]`, inline tags `#tag`)
- Extracts creation/modification dates from `info.json` metadata
- Filters out trashed notes
- Converts Bear tags to AFFiNE tags (consolidated by root segment)
- Builds folder hierarchy from nested tag paths (e.g.,
`#work/projects/alpha`)
- Uses JSZip for lazy decompression to handle large backups without OOM
### Markdown Zip Folder Hierarchy
`importMarkdownZip` now returns `{ docIds, folderHierarchy }` instead of
just `docIds[]`, enabling the UI to recreate the zip's directory
structure as AFFiNE folders.
## Related Issues
- Implements the TextBundle-based import approach suggested in #14115 /
Discussion #14142
- Addresses folder structure preservation requested in #10003
- Partially addresses frontmatter metadata import from #11286
## Test Plan
- [ ] Import a Bear `.bear2bk` backup file via the import dialog
- [ ] Verify tags are created and assigned to documents
- [ ] Verify folder hierarchy matches Bear's nested tag structure
- [ ] Verify creation/modification dates are preserved
- [ ] Verify highlighted text and callouts render correctly
- [ ] Verify images and attachments are imported
- [ ] Import a markdown zip with nested folders, verify folder structure
is recreated
- [ ] Verify trashed Bear notes are excluded
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Bear (.bear2bk) backup import: bulk import notes, convert/dedupe tags,
create nested folders, and return imported doc IDs plus folder
hierarchy; UI import option and progress integrated.
* Markdown ZIP import now returns an optional folder hierarchy alongside
created doc IDs.
* **Bug Fixes / Improvements**
* Highlighting: mark elements validate color names, default safely, and
apply consistent background styling.
* **Chores**
* Added runtime dependency for ZIP handling.
* **Documentation**
* Added localization strings and i18n accessors for Bear import UI.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: DarkSky <25152247+darkskygit@users.noreply.github.com>
|
||
|
|
339f89220a | fix(core): prevent navigation panel from reordering while typing (#14831) | ||
|
|
440ff0c342 |
fix(editor): resolve UX inconsistencies in the AI chat interface (#14850)
# Closes #14189. Fixes the three UX issues reported in the original bug report, plus one small adjacent polish on the right-sidebar toggle that was requested during review. Each concern in the issue is addressed end-to-end, with the same treatment applied to both places the AI chat panel lives: the **sidebar chat panel** (right panel on a doc page) and the **standalone `/chat` page**. --- ## 1. `+` button → persistent multi-session tabs (issue point 1) **Before:** clicking `+` called `createFreshSession()` (standalone) or `newSession()` (sidebar), both of which tore down the current chat content and replaced it in place. There was no way to keep two chats open at once. **After:** a browser/IDE-style tab strip lives above the chat content. Each open session gets its own tab with a close `×`; the active tab is highlighted; `+` now adds a tab rather than replacing the chat. ### Details - New Lit component `ai-chat-tabs` ([packages/frontend/core/src/blocksuite/ai/components/ai-chat-toolbar/ai-chat-tabs.ts](packages/frontend/core/src/blocksuite/ai/components/ai-chat-toolbar/ai-chat-tabs.ts)). - Tab title is derived from `session.title` → first user message → `"New chat"`. - Horizontal scroll when tabs overflow, with a `wheel` handler that converts mouse wheel / trackpad vertical swipe into horizontal scroll (native horizontal trackpad swipes also work natively via `overflow-x: auto`). - Auto `scrollIntoView({ inline: 'nearest' })` on active tab change, so a newly created or newly selected tab slides into view instead of staying hidden behind the toolbar. - Close `×` removes the tab from the strip but leaves the session on the server (matches the existing **Chat history** dropdown semantics — the session is still reachable there). Closing the active tab switches to an adjacent one; closing the last tab starts a fresh session. - Persistence: open session IDs are saved per-workspace in `localStorage` under `ai-chat-open-tabs:{workspaceId}`. On mount, the React pages hydrate those IDs via `AIProvider.session.getSession` / `CopilotClient.getSession` — no new backend or schema work. - Wiring: identical effects on both variants ([chat.tsx (sidebar)](packages/frontend/core/src/desktop/pages/workspace/detail-page/tabs/chat.tsx) and [chat/index.tsx (standalone)](packages/frontend/core/src/desktop/pages/workspace/chat/index.tsx)) — hydrate → sync active session into tabs → persist. - The tab strip sits on the same row as the existing toolbar icons (pin / history / `+`), separated by `flex: 1` + `min-width: 0` so the tabs scroll cleanly up to the toolbar boundary. - The `ShadowlessElement` base class injects its static CSS globally, and the `:host` selector does not match in a React-rooted DOM — the component uses tag-selector CSS (`ai-chat-tabs { display: flex; … }`) instead. ## 2. Drag-and-drop attachments (issue point 2) **Before:** the chat input accepted no DnD. Attaching anything required the `+` → file-picker flow. **After:** the chat input accepts OS files via native HTML5 DnD and AFFiNE documents via the repo's existing pragmatic-drag-and-drop infrastructure. ### Details - Native handlers (`dragenter/over/leave/drop`) on [ai-chat-input.ts](packages/frontend/core/src/blocksuite/ai/components/ai-chat-input/ai-chat-input.ts) accept OS files: images go into the image preview grid, other files become attachment chips, with the same 50 MB per-file cap as the `+` picker. - Internal AFFiNE document drags from the nav panel land as doc chips, handled via `dropTargetForElements` from `@atlaskit/pragmatic-drag-and-drop` (same library the rest of the app already uses for internal DnD). - A "Drop to attach" overlay appears during drag, reusing the existing focused-border token (`--affine-v2-layer-insideBorder-primaryBorder`) for visual consistency with the focused state. - The image/file routing logic that previously lived inline in `add-popover.ts` was factored into a shared helper [attachment-utils.ts](packages/frontend/core/src/blocksuite/ai/components/ai-chat-chips/attachment-utils.ts) (`addFilesToChat`), so the `+` picker and the drop handler stay in lockstep. - Analytics: extended the `addEmbeddingDoc.control` union in [events.ts](packages/frontend/track/src/events.ts) with `'dragDrop'` so drag-originated attachments are distinguishable from button-initiated ones in telemetry. - `@atlaskit/pragmatic-drag-and-drop` is promoted from a transitive dependency (via `@affine/component`) to a direct dependency of `@affine/core` and `yarn.lock` is refreshed accordingly. ## 3. Chat-history tooltip + icon (issue point 3) **Before:** hovering the chat-history button showed a tooltip whose background did not invert for dark theme (`--affine-tooltip` is not theme-aware), and the icon was `ArrowDownSmallIcon` — a chevron that does not convey "history." **After:** the tooltip primitive itself is theme-aware (every tooltip in the app benefits, not just the chat one), and the icon is the semantically-clear `HistoryIcon`. ### Details - [tooltip.ts](blocksuite/affine/components/src/tooltip/tooltip.ts) now uses `var(--affine-v2-tooltips-background, var(--affine-tooltip))` and `var(--affine-v2-tooltips-foreground, var(--affine-white))`. The V2 tokens auto-invert with theme; the old vars remain as fallbacks so components that override via the existing `tooltipStyle` escape hatch continue to work. - Triangle arrow colors updated to use the same V2 token. - [ai-chat-toolbar.ts](packages/frontend/core/src/blocksuite/ai/components/ai-chat-toolbar/ai-chat-toolbar.ts): `ArrowDownSmallIcon` → `HistoryIcon`; added `data-testid="ai-panel-chat-history"` for future e2e coverage. ## 4. Right-sidebar toggle: tooltips + open-state icon *(adjacent polish)* Not part of the original issue, but surfaced while testing the tab strip — neither of the two right-sidebar toggle buttons had hover affordance, and both used the same icon regardless of the sidebar's state. - Added `tooltip="Open sidebar"` on the route-container button shown when the sidebar is hidden. - Added `tooltip="Close sidebar"` on the sidebar-header button shown when the sidebar is expanded. - The close button now renders a small inline `RightSidebarOpenIcon` variant: same outline as `RightSidebarIcon`, but with the right panel filled in the AFFiNE accent color to convey the open state. Icon shape change is self-contained — no new icon asset added to `@blocksuite/icons`. --- ## Commits - `2adc0c7` — fix(ai-chat): theme-aware tooltip + semantic chat-history icon *(2 files)* - `bf26974` — feat(ai-chat): drag-and-drop file and doc attachments in chat input *(7 files)* - `fca29c8` — feat(ai-chat): persistent multi-session tab strip *(8 files)* - `7d5dffe` — feat(workbench): tooltips and open-state icon for the right-sidebar toggle *(2 files)* Kept ordered smallest → largest blast radius so the history is easy to bisect. --- ## Test plan Verified locally against a fresh server stack (postgres / redis / mailpit via compose, migrations run) signed in as `dev@affine.pro`, in both `/chat` and the sidebar chat on a doc page, in light and dark themes: - [x] Tooltip: hover the chat-history icon in dark mode → tooltip is dark-on-light; toggle to light mode → tooltip is light-on-dark. Existing tooltips on other surfaces (slash menu, edgeless, linked-doc) still render correctly. - [x] Icon: chat-history button renders the history glyph (clock), not a chevron. - [x] Drag-and-drop (OS file): drop a PDF / PNG / TXT onto the input → overlay shows → chips/images appear; file > 50 MB → rejected silently (same as `+` picker). - [x] Drag-and-drop (internal doc): drag an AFFiNE doc from the nav panel → becomes a doc chip. - [x] Pin-picker, `+` picker, paste-image — all unchanged. - [x] Tab strip: first chat auto-becomes a tab on first message; `+` adds tab; click tab switches chat; `×` removes tab and switches to adjacent; close last tab → new fresh tab spawns. - [x] Reload browser → tab strip rehydrates from localStorage with the same sessions. - [x] Tab overflow: 12+ tabs → horizontal scroll via trackpad vertical swipe, trackpad horizontal swipe, and mouse wheel; active tab auto-scrolls into view on `+` click. - [x] Right-sidebar: hover both toggle buttons → tooltips appear; open the sidebar → close button shows the filled right-panel icon. - [x] `yarn lint:ox` and lint-staged both clean on every commit. Not verified locally (no local model key configured): the assistant actually streams a response. Drop/chip flow is independent of that path. ## Out of scope / follow-ups - No new unit or Playwright tests — the fixes are visually verifiable and reuse existing reducer / state paths. Happy to add tests if reviewers prefer. - `@affine/native` is not required for the web dev stack; I only built `@affine/server-native`. Irrelevant to the PR diff. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Multi-tab chat UI with a tabs component, open/close/switch actions, and per-workspace persistence/restoration. * Drag-and-drop attachments into chat input (files and docs). * **UI/UX** * Tooltip theming moved to v2 variables (includes arrow color). * Sidebar toggle/close buttons now show tooltips. * “Drop to attach” overlay and updated history icon. * **Behavior** * Unified attachment handling with 50MB validation and toast notices. * **Analytics** * Attachment events record drag-and-drop as a control method. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: DarkSky <25152247+darkskygit@users.noreply.github.com> |
||
|
|
eb9cc22502 | feat(server): refactor for byok (#14911) | ||
|
|
4e169ea5c7 |
fix(editor): cross browser test stability (#14897)
#### PR Dependency Tree * **PR #14897** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved reliability of shape and connector detection by forcing full DOM renders during waits. * Fixed race conditions in code-block theme loading and cleanup when components unmount. * Refined viewport element discovery to correctly handle rotated/canvas-layer elements and avoid stale DOM removal. * **Tests** * Increased polling timeouts and retries to reduce flakiness. * Disabled per-file parallelism and ensured test setup performs full cleanup before starting; extended test timeout. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
a1800cf8b2 |
feat(editor): remove max-height restriction from mermaid preview container (#14882)
This PR fixes #14874 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **Bug Fixes** * Removed height limitation on Mermaid diagram previews in code blocks, allowing larger diagrams to render at their full size without being constrained by a fixed maximum height. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
39abb936b8 |
fix(core): prevent Alt+Key shortcuts from hijacking macOS Option-key input (#14866)
Fixes #14519 ## Summary On macOS, the Option key combined with a letter produces locale input characters (e.g. Polish layout: Option+S → `ś`, Option+L → `ł`). The AFFiNE command registry registers shortcuts like `Alt+KeyS` (used for Page ↔ Edgeless mode switch) via `tinykeys`, which matches on `event.code` (the physical key) — so it fires even when the user was actually typing a non-ASCII character. Reported in #14519: Polish users cannot type `ś` inside AFFiNE because Option+S triggers the mode switch instead. ## Fix In the command registry handler ([registry.ts](packages/frontend/core/src/commands/registry/registry.ts)), skip the command when Alt is the only modifier **and** the key produced a non-ASCII character — the user intends to type the character, not invoke the shortcut. Matches the existing handling in blocksuite's `keymap.ts` (added for the same class of issue in #14059). ## Demo https://github.com/user-attachments/assets/eb6d2e69-39bf-4236-a886-9e2bde425626 ## Verified locally (macOS) - Switched input source to Polish - Typed `właśnie` in an AFFiNE doc — all characters including `ś` (Option+S), `ł` (Option+L) now produce the correct output - Previously Option+S would toggle edgeless mode - US layout (Option+S → `ß`) and other locale chars (ą, ń, ę) also now pass through correctly - Regular Cmd-based shortcuts (Cmd+K, Cmd+S, etc.) unaffected because the guard excludes `metaKey` ## Test plan - [x] On macOS, add Polish input source (System Settings → Keyboard → Input Sources → +) - [x] Switch to Polish layout - [x] In any AFFiNE doc, type Option+S → `ś` appears (not mode switch) - [x] Confirm other shortcuts (Cmd+K, Cmd+Enter, etc.) still work - [x] Confirm on US layout that Option+S produces `ß` (OS default) without firing the mode switch <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Fixed keyboard event handling with Alt key and non-ASCII characters to prevent unintended command execution. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
d64f368623 |
feat(server): refactor copilot (#14892)
#### PR Dependency Tree * **PR #14892** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) |
||
|
|
df482c9cf2 |
chore: bump up uuid version to v14 [SECURITY] (#14870)
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [uuid](https://redirect.github.com/uuidjs/uuid) | [`^13.0.0` → `^14.0.0`](https://renovatebot.com/diffs/npm/uuid/13.0.0/14.0.0) |  |  | --- ### uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided [GHSA-w5hq-g745-h8pq](https://redirect.github.com/advisories/GHSA-w5hq-g745-h8pq) <details> <summary>More information</summary> #### Details ##### Summary `v3`, `v5`, and `v6` accept external output buffers but do not reject out-of-range writes (small `buf` or large `offset`). By contrast, `v4`, `v1`, and `v7` explicitly throw `RangeError` on invalid bounds. This inconsistency allows **silent partial writes** into caller-provided buffers. ##### Affected code - `src/v35.ts` (`v3`/`v5` path) writes `buf[offset + i]` without bounds validation. - `src/v6.ts` writes `buf[offset + i]` without bounds validation. ##### Reproducible PoC ```bash cd /home/StrawHat/uuid npm ci npm run build node --input-type=module -e " import {v4,v5,v6} from './dist-node/index.js'; const ns='6ba7b810-9dad-11d1-80b4-00c04fd430c8'; for (const [name,fn] of [ ['v4',()=>v4({},new Uint8Array(8),4)], ['v5',()=>v5('x',ns,new Uint8Array(8),4)], ['v6',()=>v6({},new Uint8Array(8),4)], ]) { try { fn(); console.log(name,'NO_THROW'); } catch(e){ console.log(name,'THREW',e.name); } }" ``` Observed: - `v4 THREW RangeError` - `v5 NO_THROW` - `v6 NO_THROW` Example partial overwrite evidence captured during audit: ```text same true buf [ 170, 170, 170, 170, 75, 224, 100, 63 ] v6 [ 187, 187, 187, 187, 31, 19, 185, 64 ] ``` ##### Security impact - **Primary**: integrity/robustness issue (silent partial output). - If an application assumes full UUID writes into preallocated buffers, this can produce malformed/truncated/partially stale identifiers without error. - In systems where caller-controlled offsets/buffer sizes are exposed indirectly, this may become a security-relevant logic flaw. ##### Suggested fix Add the same guard used by `v4`/`v1`/`v7`: ```ts if (offset < 0 || offset + 16 > buf.length) { throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`); } ``` Apply to: - `src/v35.ts` (covers `v3` and `v5`) - `src/v6.ts` #### Severity - CVSS Score: 6.3 / 10 (Medium) - Vector String: `CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N` #### References - [https://github.com/uuidjs/uuid/security/advisories/GHSA-w5hq-g745-h8pq](https://redirect.github.com/uuidjs/uuid/security/advisories/GHSA-w5hq-g745-h8pq) - [https://github.com/uuidjs/uuid/commit/3d2c5b0342f0fcb52a5ac681c3d47c13e7444b34](https://redirect.github.com/uuidjs/uuid/commit/3d2c5b0342f0fcb52a5ac681c3d47c13e7444b34) - [https://github.com/uuidjs/uuid/releases/tag/v14.0.0](https://redirect.github.com/uuidjs/uuid/releases/tag/v14.0.0) - [https://github.com/advisories/GHSA-w5hq-g745-h8pq](https://redirect.github.com/advisories/GHSA-w5hq-g745-h8pq) This data is provided by the [GitHub Advisory Database](https://redirect.github.com/advisories/GHSA-w5hq-g745-h8pq) ([CC-BY 4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)). </details> --- ### Release Notes <details> <summary>uuidjs/uuid (uuid)</summary> ### [`v14.0.0`](https://redirect.github.com/uuidjs/uuid/blob/HEAD/CHANGELOG.md#1400-2026-04-19) [Compare Source](https://redirect.github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0) ##### Security - Fixes [GHSA-w5hq-g745-h8pq](https://redirect.github.com/uuidjs/uuid/security/advisories/GHSA-w5hq-g745-h8pq): `v3()`, `v5()`, and `v6()` did not validate that writes would remain within the bounds of a caller-supplied buffer, allowing out-of-bounds writes when an invalid `offset` was provided. A `RangeError` is now thrown if `offset < 0` or `offset + 16 > buf.length`. ##### ⚠ BREAKING CHANGES - `crypto` is now expected to be globally defined (requires node\@​20+) ([#​935](https://redirect.github.com/uuidjs/uuid/issues/935)) - drop node\@​18 support ([#​934](https://redirect.github.com/uuidjs/uuid/issues/934)) - upgrade minimum supported TypeScript version to 5.4.3, in keeping with the project's policy of supporting TypeScript versions released within the last two years </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "" - 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:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjEzOS40IiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> |
||
|
|
0009f91d2a |
feat(editor): add "Copy as Markdown" option in context & export menus (#14705)
- Allow users to select text and copy it as Markdown via the context menu - Add "Copy as Markdown" under Export menu to copy entire document to clipboard Fixes #12983 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added "Copy as Markdown" to the toolbar clipboard More menu for selected content. * Added "Copy as Markdown" to the page export menu to copy entire pages as Markdown. * **Behavior** * Export flow now returns success/failure so the UI shows a dedicated success or error notification for clipboard exports. * **Localization** * Added strings for "Copy as Markdown" and "Copied as Markdown". <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Whitewater <me@waterwater.moe> Co-authored-by: lawvs <18554747+lawvs@users.noreply.github.com> |
||
|
|
c5b0057778 |
fix(core): resolve remaining untranslated doc title case in detail page header (#14820)
fix #14735 This PR fixes a remaining desktop case related to #14467. The previous fix resolved incorrect translation in navigation panels, but the detail page header tab title was still passing custom document titles through `i18n.t()`, causing user-defined titles to be unexpectedly translated. ### Results https://github.com/user-attachments/assets/4abad3b9-d5d7-442f-b643-6d9ea63fa741 After: <img width="2100" height="1722" alt="After" src="https://github.com/user-attachments/assets/0770eae2-e5c5-4816-8d53-e40a4b52800c" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Updated page title retrieval mechanism in workspace detail page headers. The title is now sourced directly from the document display metadata service instead of using the previous derivation method. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
a109f069b0 | chore: bump deps | ||
|
|
c6a99eb9cb |
chore: bump deps (#14810)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated developer tooling dependencies used for local testing to newer patch versions for improved stability. * Bumped backend framework and related packages to newer patch releases to address fixes and maintain compatibility. * No functional or public API changes; updates are non-breaking dependency version bumps. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
77657a697b | feat(mobile): improve notify for login failed | ||
|
|
eb953c0565 |
fix(android): route OAuth deep link to correct server's AuthService (#14809)
Porting over iOS fix for self-hosted SSO to Android from #11563. Fixes #12819 Tested on own instance using Authentik. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Android authentication now supports an optional server parameter in the callback URL, enabling sign-in against different server instances. * If the specified server cannot be found, the authentication attempt is halted and an error is reported. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> |
||
|
|
a1ae7d11a3 | feat(core): add integration panel test | ||
|
|
e3391c0577 |
feat: redirect account click & OAuth to Calendar settings (#14693)
### PR Description * clicking a linked calendar account now switches settings to Workspace Integrations and opens the Calendar settings directly * calendar OAuth returns now land on Workspace Integrations with the Calendar settings opened instead of the homepage * Improves UX by reducing friction when managing calendar integrations https://www.loom.com/share/49fa5c448ce049659877beb42d7bd81a <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Calendar integration settings can now be opened automatically (including from OAuth redirects) and workspace settings support a scroll-to-anchor. * Integration account rows are now clickable for quick access to settings. * **Improvements** * Enhanced visual feedback with interactive hover and focus states for integration controls. * **Tests** * Added tests covering the OAuth redirect behavior and workspace settings scroll/open handling. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: DarkSky <darksky2048@gmail.com> |