Skip to content

feat(text): add an option to auto-capitalize first letter of sentence#10196

Open
MShahnoor wants to merge 3 commits into
TriliumNext:mainfrom
MShahnoor:feature/auto-capitalize-sentences
Open

feat(text): add an option to auto-capitalize first letter of sentence#10196
MShahnoor wants to merge 3 commits into
TriliumNext:mainfrom
MShahnoor:feature/auto-capitalize-sentences

Conversation

@MShahnoor

@MShahnoor MShahnoor commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

I recently moved my notes from Microsoft OneNote to Trilium, and the one habit my fingers can't shake is automatic capitalization. OneNote has option to capitalize the first letter of a sentence as you type, and this is a feature that I'm used to so I would love to see it in Trillium too.

This adds that as an optional setting for text notes. When it's on, Trilium capitalizes the first letter of a sentence as you type: at the start of a line, and after a period, exclamation mark, or question mark. It's off by default, so nothing changes for anyone unless they turn it on, under Options > Text Notes > Features, next to the emoji, note, and slash-command toggles.

Under the hood it's a small CKEditor plugin that hooks the insertText command and capitalizes the letter right before it's inserted, so it stays a normal edit (undo works, and existing formatting is kept). The new option and the way it's switched off (removing the plugin in getDisabledPlugins) follow the same pattern as the existing emoji and slash-command toggles.

I added tests for the plugin covering the sentence-start cases, mid-sentence typing, code blocks, inline code, and pasting, and pnpm typecheck is clean.

Here's what it looks like

auto-capitalization.mov

I kept the change small and tried to match how the existing editor toggles are built. Happy to adjust anything.

@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jun 17, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces an opt-in "AutoCapitalize" plugin for CKEditor 5, which automatically capitalizes the first letter of a sentence as the user types. It includes the corresponding configuration options, UI toggle, translations, and unit tests. The review feedback focuses on improving the plugin's performance and correctness: specifically, optimizing getTextBefore to only inspect the last 50 characters instead of traversing the entire paragraph on every keystroke, updating isSentenceStart to handle this optimization via an isAtBlockStart flag, and ensuring the code attribute check uses the target selection rather than the global document selection.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread packages/ckeditor5/src/plugins/auto_capitalize.ts Outdated
Comment thread packages/ckeditor5/src/plugins/auto_capitalize.ts Outdated
Comment thread packages/ckeditor5/src/plugins/auto_capitalize.ts Outdated
Comment thread packages/ckeditor5/src/plugins/auto_capitalize.ts Outdated
@greptile-apps

greptile-apps Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds an opt-in "Automatic capitalization" feature to Trilium's text editor, capitalizing the first letter of a sentence as the user types — matching Word/OneNote behaviour. The feature is off by default and toggled under Options > Text Notes > Features.

  • A new AutoCapitalize CKEditor plugin listens to insertText, enter, and shiftEnter commands at low priority, deferring the capitalization into a separate enqueueChange batch so undo works exactly like autocorrect (one undo step reverts only the capital, a second removes the typed word).
  • The plugin is gated by the new textNoteAutoCapitalizeEnabled option (default "false"), registered through the full options pipeline — OptionDefinitions, options_init, ALLOWED_OPTIONS, the settings UI, and getDisabledPlugins() — all following the identical patterns used for the existing emoji and slash-command toggles.
  • Tests cover sentence-start detection, mid-sentence words, Enter/Shift+Enter boundaries, undo/redo, inline code, code blocks, and paste exclusion.

Confidence Score: 5/5

Safe to merge — the feature is opt-in and disabled by default, so existing users are unaffected until they enable it.

The change is well-scoped: a single new CKEditor plugin that only activates when explicitly enabled, wired through the same option pipeline as sibling features. The capitalization logic, undo semantics, and code-context guards have been verified against the tests and the model traversal code. No existing behaviour is altered.

No files require special attention — all changes follow established patterns and the core plugin logic is thoroughly tested.

Important Files Changed

Filename Overview
packages/ckeditor5/src/plugins/auto_capitalize.ts New CKEditor plugin implementing auto-capitalize via command listeners; logic, undo semantics, and code-block/inline-code guards are all correct and well-documented.
packages/ckeditor5/src/plugins/auto_capitalize.spec.ts New spec with broad coverage: sentence boundaries, undo/redo semantics, line-breaks, inline code, code blocks, and paste exclusion. Real-typing simulation via enqueueChange is solid.
apps/client/src/widgets/type_widgets/text/config.ts Adds AutoCapitalize to getDisabledPlugins(), following the identical pattern used for EmojiMention and SlashCommand; no issues.
packages/trilium-core/src/services/options_init.ts Adds default value "false" for textNoteAutoCapitalizeEnabled, consistent with opt-in behavior; correctly uses isSynced: true.
packages/trilium-core/src/routes/api/options.ts Whitelists the new option in ALLOWED_OPTIONS, required per the repo's option-creation guide; no issues.
packages/commons/src/lib/options_interface.ts Adds textNoteAutoCapitalizeEnabled boolean to OptionDefinitions, consistent with sibling text-note options.
apps/client/src/widgets/type_widgets/options/text_notes.tsx Adds OptionsRowWithToggle for auto-capitalize in EditorFeatures, exactly matching the pattern of existing emoji/note/slash-command toggles.
packages/ckeditor5/src/plugins.ts Imports and registers AutoCapitalize in TRILIUM_PLUGINS; placement and import style are consistent with the rest of the list.
apps/client/src/translations/en/translation.json Adds two English translation keys under editorfeatures, following the pattern of existing entries; only en/translation.json is modified, as required.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant TypingPlugin
    participant InsertTextCmd as insertText command
    participant AutoCapitalize
    participant Model

    User->>TypingPlugin: keypress (e.g. space)
    TypingPlugin->>Model: enqueueChange(batch, ...)
    Note over Model: batch queued
    Model->>InsertTextCmd: "execute({ text: " " })"
    InsertTextCmd-->>AutoCapitalize: fires "execute" event (low priority)
    AutoCapitalize->>Model: enqueueChange(capitalizeCallback)
    InsertTextCmd->>Model: inserts space, moves caret
    Note over Model: typing batch commits
    Model->>AutoCapitalize: capitalizeCallback runs
    AutoCapitalize->>Model: reads caret position
    AutoCapitalize->>AutoCapitalize: textBefore() finds last word
    AutoCapitalize->>AutoCapitalize: isSentenceStart() check
    alt Word starts a sentence
        AutoCapitalize->>Model: writer.remove(letterRange)
        AutoCapitalize->>Model: writer.insertText(upper, attrs, pos)
        Note over Model: separate undo batch recorded
    else Mid-sentence or code context
        AutoCapitalize-->>Model: no-op
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant TypingPlugin
    participant InsertTextCmd as insertText command
    participant AutoCapitalize
    participant Model

    User->>TypingPlugin: keypress (e.g. space)
    TypingPlugin->>Model: enqueueChange(batch, ...)
    Note over Model: batch queued
    Model->>InsertTextCmd: "execute({ text: " " })"
    InsertTextCmd-->>AutoCapitalize: fires "execute" event (low priority)
    AutoCapitalize->>Model: enqueueChange(capitalizeCallback)
    InsertTextCmd->>Model: inserts space, moves caret
    Note over Model: typing batch commits
    Model->>AutoCapitalize: capitalizeCallback runs
    AutoCapitalize->>Model: reads caret position
    AutoCapitalize->>AutoCapitalize: textBefore() finds last word
    AutoCapitalize->>AutoCapitalize: isSentenceStart() check
    alt Word starts a sentence
        AutoCapitalize->>Model: writer.remove(letterRange)
        AutoCapitalize->>Model: writer.insertText(upper, attrs, pos)
        Note over Model: separate undo batch recorded
    else Mid-sentence or code context
        AutoCapitalize-->>Model: no-op
    end
Loading

Reviews (4): Last reviewed commit: "refactor(text): tidy auto-capitalize and..." | Re-trigger Greptile

Comment thread packages/ckeditor5/src/plugins/auto_capitalize.ts Outdated
Adds an optional setting that capitalizes the first letter of a sentence as you type in text notes, like Word and OneNote.

A new CKEditor plugin hooks the insertText command and uppercases the first lowercase letter typed at the start of a block or after sentence-ending punctuation (. ! ?). The change goes through the editor model, so undo/redo and inline formatting are preserved; code blocks and inline code are left untouched.

Disabled by default. Controlled by a new "Automatic capitalization" toggle under Text Notes > Features (option textNoteAutoCapitalizeEnabled), gated via getDisabledPlugins() the same way as the existing emoji and slash-command features.
@MShahnoor MShahnoor force-pushed the feature/auto-capitalize-sentences branch from 89da1ed to 3b09693 Compare June 17, 2026 19:58
@MShahnoor MShahnoor changed the title feat(text): add an option to auto-capitalize sentences feat(text): add an option to auto-capitalize first letter of sentence Jun 17, 2026
@MShahnoor MShahnoor marked this pull request as draft June 19, 2026 14:00
Capitalize the first letter of a sentence when the word is finished (space, tab, Enter or Shift+Enter) rather than on the first keystroke, matching Word and OneNote.

Apply the capital in its own undo step so pressing Ctrl+Z once reverts only the capitalization (for example "Is " back to "is ", keeping the trailing space) and a second Ctrl+Z removes the text. Code blocks and inline code are left untouched, and inline formatting on the letter is preserved.
@MShahnoor MShahnoor marked this pull request as ready for review June 19, 2026 14:23
@codecov

codecov Bot commented Jun 19, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.72131% with 2 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...nt/src/widgets/type_widgets/options/text_notes.tsx 0.00% 1 Missing ⚠️
...pps/client/src/widgets/type_widgets/text/config.ts 50.00% 0 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@MShahnoor MShahnoor marked this pull request as draft June 19, 2026 14:32
Address review feedback and the coverage gate on the previous commit: remove the non-null assertion from the test helper, split the insertText and line-break handlers into dedicated methods, and mark the unreachable defensive guards with v8 ignore. Add tests for a soft break acting as a word boundary and for Enter on an empty line, restoring 100% coverage. Wrap lines to the 100-column limit. No behaviour change.
@codecov

codecov Bot commented Jun 19, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 2.25MB (2.33%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
standalone-esm* 50.13MB -38.24kB (-0.08%) ⬇️
client-esm 48.82MB 2.29MB (4.92%) ⬆️

ℹ️ *Bundle size includes cached data from a previous commit

Affected Assets, Files, and Routes:

view changes for bundle: client-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
src/Spreadsheet-*.js -647.77kB 5.2MB -11.08%
src/chunk-*.js 326 bytes 226.95kB 0.14%
src/dist-*.js 7 bytes 63 bytes 12.5% ⚠️
src/dist-*.js 25 bytes 30.83kB 0.08%
src/dist-*.js -24 bytes 14.38kB -0.17%
src/dist-*.js 25 bytes 82 bytes 43.86% ⚠️
src/dist-*.js 163 bytes 230.05kB 0.07%
src/dist-*.js -6 bytes 57 bytes -9.52%
src/dist-*.js -26 bytes 56 bytes -31.71%
src/src-*.js -105 bytes 104 bytes -50.24%
src/src-*.js 2.29kB 538.99kB 0.43%
src/src-*.js 105 bytes 209 bytes 100.96% ⚠️
src/mathlive.min-*.js 93 bytes 808.01kB 0.01%
src/ru-*.js -394 bytes 1.97kB -16.67%
src/ru-*.js 7.68kB 8.05kB 2030.95% ⚠️
src/ru-*.js -53.95kB 1.12kB -97.97%
src/ru-*.js -58.64kB 302 bytes -99.49%
src/ru-*.js (New) 55.06kB 55.06kB 100.0% 🚀
src/ru-*.js (New) 2.09kB 2.09kB 100.0% 🚀
src/ru-*.js (New) 2.36kB 2.36kB 100.0% 🚀
src/ru-*.js (New) 546.23kB 546.23kB 100.0% 🚀
src/ru-*.js (New) 378 bytes 378 bytes 100.0% 🚀
src/ru-*.js (New) 3.11kB 3.11kB 100.0% 🚀
src/ru-*.js (New) 58.94kB 58.94kB 100.0% 🚀
src/ru-*.js (New) 5.44kB 5.44kB 100.0% 🚀
src/ja-*.js 1.04kB 2.36kB 78.74% ⚠️
src/ja-*.js 1.1kB 1.39kB 391.49% ⚠️
src/ja-*.js -23.18kB 232 bytes -99.01%
src/ja-*.js -33.97kB 6.69kB -83.54%
src/ja-*.js -46.3kB 282 bytes -99.39%
src/ja-*.js (New) 1.32kB 1.32kB 100.0% 🚀
src/ja-*.js (New) 935 bytes 935 bytes 100.0% 🚀
src/ja-*.js (New) 23.41kB 23.41kB 100.0% 🚀
src/ja-*.js (New) 46.58kB 46.58kB 100.0% 🚀
src/ja-*.js (New) 40.66kB 40.66kB 100.0% 🚀
src/ja-*.js (New) 3.88kB 3.88kB 100.0% 🚀
src/ja-*.js (New) 1.56kB 1.56kB 100.0% 🚀
src/ja-*.js (New) 368.17kB 368.17kB 100.0% 🚀
src/es-*.js 2.64kB 3.87kB 215.31% ⚠️
src/es-*.js 1.61kB 2.26kB 249.23% ⚠️
src/es-*.js 299.39kB 343.52kB 678.48% ⚠️
src/es-*.js 278.9kB 321.58kB 653.38% ⚠️
src/es-*.js -34.07kB 5.73kB -85.61%
src/es-*.js (New) 1.5kB 1.5kB 100.0% 🚀
src/es-*.js (New) 1.33kB 1.33kB 100.0% 🚀
src/es-*.js (New) 798 bytes 798 bytes 100.0% 🚀
src/es-*.js (New) 646 bytes 646 bytes 100.0% 🚀
src/es-*.js (New) 202 bytes 202 bytes 100.0% 🚀
src/es-*.js (New) 44.13kB 44.13kB 100.0% 🚀
src/es-*.js (New) 1.23kB 1.23kB 100.0% 🚀
src/es-*.js (New) 39.79kB 39.79kB 100.0% 🚀
src/es-*.js (New) 42.69kB 42.69kB 100.0% 🚀
src/tabulator-*.js 2.09kB 337.77kB 0.62%
src/fr-*.js 126 bytes 1.37kB 10.13% ⚠️
src/fr-*.js 3.78kB 4.11kB 1138.25% ⚠️
src/fr-*.js -21.81kB 1.65kB -92.99%
src/fr-*.js -23.36kB 773 bytes -96.8%
src/fr-*.js -33.89kB 2.35kB -93.52%
src/fr-*.js -8.13kB 36.23kB -18.33%
src/fr-*.js (New) 44.37kB 44.37kB 100.0% 🚀
src/fr-*.js (New) 1.24kB 1.24kB 100.0% 🚀
src/fr-*.js (New) 23.45kB 23.45kB 100.0% 🚀
src/fr-*.js (New) 24.13kB 24.13kB 100.0% 🚀
src/fr-*.js (New) 6.04kB 6.04kB 100.0% 🚀
src/fr-*.js (New) 332 bytes 332 bytes 100.0% 🚀
src/fr-*.js (New) 213 bytes 213 bytes 100.0% 🚀
src/fr-*.js (New) 326.0kB 326.0kB 100.0% 🚀
src/en-*.js 19 bytes 1.29kB 1.5%
src/en-*.js 107 bytes 681 bytes 18.64% ⚠️
src/en-*.js 272 bytes 1.18kB 29.99% ⚠️
src/en-*.js 346 bytes 574 bytes 151.75% ⚠️
src/en-*.js 1.21kB 1.27kB 1882.81% ⚠️
src/en-*.js -63.75kB 2.08kB -96.84%
src/en-*.js -105.15kB 228 bytes -99.78%
src/en-*.js -110.67kB 186 bytes -99.83%
src/en-*.js -107.3kB 3.67kB -96.69%
src/en-*.js -402 bytes 110.96kB -0.36%
src/en-*.js (New) 110.85kB 110.85kB 100.0% 🚀
src/en-*.js (New) 65.83kB 65.83kB 100.0% 🚀
src/en-*.js (New) 907 bytes 907 bytes 100.0% 🚀
src/en-*.js (New) 5.14kB 5.14kB 100.0% 🚀
src/en-*.js (New) 64 bytes 64 bytes 100.0% 🚀
src/en-*.js (New) 105.38kB 105.38kB 100.0% 🚀
src/en-*.js (New) 111.36kB 111.36kB 100.0% 🚀
src/en-*.js (New) 321.48kB 321.48kB 100.0% 🚀
src/zh-*.js 3.42kB 4.93kB 225.03% ⚠️
src/zh-*.js 15 bytes 1.29kB 1.18%
src/zh-*.js 879 bytes 1.17kB 307.34% ⚠️
src/zh-*.js -18.32kB 669 bytes -96.48%
src/zh-*.js -18.77kB 286 bytes -98.5%
src/zh-*.js -36.48kB 199 bytes -99.46%
src/zh-*.js -31.67kB 5.06kB -86.23%
src/zh-*.js (New) 36.73kB 36.73kB 100.0% 🚀
src/zh-*.js (New) 1.88kB 1.88kB 100.0% 🚀
src/zh-*.js (New) 292.94kB 292.94kB 100.0% 🚀
src/zh-*.js (New) 1.12kB 1.12kB 100.0% 🚀
src/zh-*.js (New) 290.96kB 290.96kB 100.0% 🚀
src/zh-*.js (New) 666 bytes 666 bytes 100.0% 🚀
src/zh-*.js (New) 1.52kB 1.52kB 100.0% 🚀
src/zh-*.js (New) 199 bytes 199 bytes 100.0% 🚀
src/zh-*.js (New) 18.99kB 18.99kB 100.0% 🚀
src/zh-*.js (New) 19.06kB 19.06kB 100.0% 🚀
src/zh-*.js (New) 3.35kB 3.35kB 100.0% 🚀
src/zh-*.js (New) 3.34kB 3.34kB 100.0% 🚀
src/zh-*.js (New) 1.28kB 1.28kB 100.0% 🚀
src/zh-*.js (New) 36.68kB 36.68kB 100.0% 🚀
src/zh-*.js (New) 1.89kB 1.89kB 100.0% 🚀
src/zh-*.js (New) 1.29kB 1.29kB 100.0% 🚀
src/content_renderer-*.js 2.54kB 226.73kB 1.13%
src/presentation-*.js 1 bytes 175.78kB 0.0%
src/MindMap-*.js 1 bytes 104.23kB 0.0%
src/ContentWidget-*.js 2.62kB 100.69kB 2.68%
src/layout_commons-*.js -5 bytes 86.51kB -0.01%
src/desktop_layout-*.js 2 bytes 76.32kB 0.0%
src/NoteActions-*.js -9 bytes 44.42kB -0.02%
src/tabulator-*.css 121 bytes 34.41kB 0.35%
src/dagre-*.js 34 bytes 33.25kB 0.1%
src/PopupEditor-*.js -5 bytes 29.93kB -0.02%
src/revisions-*.js -4 bytes 22.34kB -0.02%
src/File-*.js 1.99kB 18.61kB 11.96% ⚠️
src/EditableText-*.js 217 bytes 17.86kB 1.23%
src/ContentWidget-*.css 223 bytes 15.16kB 1.49%
src/NoteDetail-*.js 71 bytes 11.06kB 0.65%
src/ListOrGridView-*.js 1 bytes 7.51kB 0.01%
src/SiblingNavigator-*.js -41 bytes 4.49kB -0.91%
src/merge-*.js (New) 3.21kB 3.21kB 100.0% 🚀
src/Modal-*.js 79 bytes 3.16kB 2.57%
src/File-*.css 130 bytes 3.02kB 4.5%
src/Dropdown-*.js 22 bytes 2.24kB 0.99%
src/note_type_chooser-*.js -5 bytes 1.86kB -0.27%
src/ListPrintView-*.js 1 bytes 1.86kB 0.05%
src/Admonition-*.css 40 bytes 1.28kB 3.23%
src/prompt-*.js 5 bytes 1.23kB 0.41%
src/Doc-*.js -5 bytes 721 bytes -0.69%
src/react_utils-*.js 44 bytes 302 bytes 17.05% ⚠️
src/react_utils-*.js 15 bytes 566 bytes 2.72%
src/_baseSet-*.js -3.07kB 448 bytes -87.27%
src/OptionsSection-*.css (New) 230 bytes 230 bytes 100.0% 🚀

Files in src/ContentWidget-*.js:

  • ./src/widgets/type_widgets/options/text_notes.tsx → Total Size: 14.78kB

Files in src/EditableText-*.js:

  • ./src/widgets/type_widgets/text/config.ts → Total Size: 7.3kB
view changes for bundle: standalone-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/i18n-DcFQrcpx.js (New) 1.75MB 1.75MB 100.0% 🚀
assets/abstract_provider-D-2SUhG6.js (New) 327.47kB 327.47kB 100.0% 🚀
src/app_context.js -416 bytes 223.48kB -0.19%
src/note_tree.js 5 bytes 131.14kB 0.0%
assets/src-CxS1wF2N.js (New) 126.72kB 126.72kB 100.0% 🚀
assets/crypto_provider-CibJZngn.js (New) 96.74kB 96.74kB 100.0% 🚀
src/layout_commons.js -238 bytes 85.64kB -0.28%
src/desktop_layout.js -1 bytes 75.99kB -0.0%
assets/in_app_help_provider-DUgwdHq4.js (New) 71.41kB 71.41kB 100.0% 🚀
src/ContentWidget.js -33.03kB 64.68kB -33.81%
src/NoteActions.js 3 bytes 44.13kB 0.01%
assets/options_init-CvoCnsiE.js (New) 32.22kB 32.22kB 100.0% 🚀
src/hooks.js 5 bytes 24.81kB 0.02%
src/note_autocomplete.js 11 bytes 11.81kB 0.09%
assets/zip-XIo-l7li.js (New) 11.4kB 11.4kB 100.0% 🚀
src/ContentWidget.css -3.91kB 11.03kB -26.17%
src/table.js -5 bytes 9.36kB -0.05%
src/tree_context_menu2.js 5 bytes 8.95kB 0.06%
assets/browser_routes-DuLXulUe.js (New) 8.23kB 8.23kB 100.0% 🚀
src/frontend_script_api.js -5 bytes 7.12kB -0.07%
src/i18n.js -680 bytes 5.84kB -10.42%
assets/becca_loader-D1-tPdYJ.js (New) 5.68kB 5.68kB 100.0% 🚀
src/OptionsDialog.css 55 bytes 5.36kB 1.04%
assets/local-server-worker-BxcfqnG5.js (New) 4.65kB 4.65kB 100.0% 🚀
assets/html-Znxt7c__.js (New) 2.94kB 2.94kB 100.0% 🚀
src/OptionsDialog.js -249 bytes 2.91kB -7.89%
src/Attachment.css -29 bytes 2.58kB -1.11%
assets/backup_provider-DgvMeRY1.js (New) 2.3kB 2.3kB 100.0% 🚀
src/jump_to_note.js -5 bytes 2.0kB -0.25%
assets/log_provider-M4kWZTWz.js (New) 1.96kB 1.96kB 100.0% 🚀
assets/0216__move_content_into_blobs-Bw47SSCc.js (New) 1.88kB 1.88kB 100.0% 🚀
assets/zip_export_provider_factory-D1_l0ioS.js (New) 1.84kB 1.84kB 100.0% 🚀
src/OptionsRow.js 3 bytes 1.73kB 0.17%
src/Badge.js -20 bytes 1.31kB -1.5%
src/Badge.css -172 bytes 1.27kB -11.9%
src/FormRadioGroup.js 205 bytes 961 bytes 27.12% ⚠️
src/ActionButton.js -33 bytes 777 bytes -4.07%
assets/0233__migrate_geo_map_to_collection-D7rqEp-N.js (New) 753 bytes 753 bytes 100.0% 🚀
assets/0220__migrate_images_to_attachments-BotdZ0jD.js (New) 648 bytes 648 bytes 100.0% 🚀
assets/0234__migrate_ai_chat_to_code-BSJbCp5Z.js (New) 419 bytes 419 bytes 100.0% 🚀
assets/markdown-B5cBPLB1.js (New) 305 bytes 305 bytes 100.0% 🚀
src/i18n.css -1.33kB 214 bytes -86.18%
src/Icon.js -416 bytes 191 bytes -68.53%
src/Slider.js -138 bytes 187 bytes -42.46%
assets/i18n-tge7wiDj.js (Deleted) -1.75MB 0 bytes -100.0% 🗑️
assets/abstract_provider-Ca1N4jc-.js (Deleted) -327.47kB 0 bytes -100.0% 🗑️
assets/src-DLdEKd57.js (Deleted) -126.71kB 0 bytes -100.0% 🗑️
assets/crypto_provider-K_hBPlRt.js (Deleted) -96.74kB 0 bytes -100.0% 🗑️
assets/in_app_help_provider-DB5ZYz4P.js (Deleted) -71.43kB 0 bytes -100.0% 🗑️
assets/options_init-B8igl3v8.js (Deleted) -30.11kB 0 bytes -100.0% 🗑️
assets/zip-BmA8hf_l.js (Deleted) -11.4kB 0 bytes -100.0% 🗑️
assets/browser_routes-e1HMXS6u.js (Deleted) -8.23kB 0 bytes -100.0% 🗑️
assets/becca_loader-V065-NkU.js (Deleted) -5.68kB 0 bytes -100.0% 🗑️
assets/local-server-worker-CEShiOpE.js (Deleted) -4.65kB 0 bytes -100.0% 🗑️
assets/html-BFe4ZHlJ.js (Deleted) -2.94kB 0 bytes -100.0% 🗑️
assets/backup_provider-Dt-8ScN_.js (Deleted) -2.3kB 0 bytes -100.0% 🗑️
assets/log_provider-DFBNte5D.js (Deleted) -1.96kB 0 bytes -100.0% 🗑️
assets/0216__move_content_into_blobs-D_9Nhs3z.js (Deleted) -1.88kB 0 bytes -100.0% 🗑️
assets/zip_export_provider_factory-C9NpXdRg.js (Deleted) -1.84kB 0 bytes -100.0% 🗑️
assets/0233__migrate_geo_map_to_collection-C3n-vILE.js (Deleted) -753 bytes 0 bytes -100.0% 🗑️
assets/0220__migrate_images_to_attachments-CRzNIxzB.js (Deleted) -648 bytes 0 bytes -100.0% 🗑️
assets/0234__migrate_ai_chat_to_code-D4UCHYBJ.js (Deleted) -419 bytes 0 bytes -100.0% 🗑️
assets/markdown-DdIr2FdC.js (Deleted) -305 bytes 0 bytes -100.0% 🗑️

@MShahnoor MShahnoor marked this pull request as ready for review June 19, 2026 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant