Repository navigation
Status bar: a right-click opens a statistics menu, with Numerical Count, Minimum and Maximum added - #2421
Conversation
…nt, Minimum and Maximum added The status bar always showed Average, Count and Sum for a selection of several cells and had no menu. A right-click on it now opens a menu with Average, Count, Numerical Count, Minimum, Maximum and Sum, as in Excel. Average, Count and Sum are on by default; the other three are off. The text on the status bar can no longer be selected, so a right-click on the mode text or a statistic opens the menu as well. The zoom and view controls handle their own clicks as before. The choice is a preference set with the new view.statusBar command and kept in prefs.json. A prefs.json without it keeps the defaults.
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Preference contract and query command crates/engine/src/lib.rs, crates/engine/src/cmd/view.rs |
Adds serialized settings for Average, Count, Numerical Count, Minimum, Maximum, and Sum. Average, Count, and Sum are enabled by default. The view.statusBar command updates supplied Boolean settings and returns all six values. Tests cover defaults, partial updates, non-Boolean inputs, and serialization. |
Status-bar menu and statistics display crates/ui-egui/src/tabs.rs, crates/ui-egui/tests/it/*, docs/ui-parity.md, ROADMAP.md |
Adds a right-click menu for the six statistics and displays enabled statistics for qualifying multi-cell selections. Numeric results use the active cell’s number format, with a fallback for General format. Tests cover menu interaction, values, preference filtering, and single-cell selections. The documentation records the options and defaults. |
Priority:
Estimated code review effort: 3 (Moderate) | ~20 minutes
Change: Feature
Sequence Diagram(s)
sequenceDiagram
actor User
participant StatusBar
participant status_bar_menu
participant view.statusBar
participant Prefs
participant selection_statistics
User->>StatusBar: Right-click status bar
StatusBar->>status_bar_menu: Open statistics menu
User->>status_bar_menu: Toggle a statistic
status_bar_menu->>view.statusBar: Submit statistic key and Boolean value
view.statusBar->>Prefs: Update preference
StatusBar->>selection_statistics: Read preferences and selection statistics
selection_statistics-->>StatusBar: Return enabled statistics
StatusBar-->>User: Display formatted statistics
Suggested reviewers: echelon, marcoarnulfo, vangel76
Merge Risk: 
Minimal · up to 7bc39
-
No confirmed issue blocks merging the status-bar statistics change.
Security architecture risk: 
Minimal · up to 7bc39
-
The new settings control only which statistics appear for the current selection. They retain the existing defaults and preference storage behavior. The reviewed changes introduce no material security risk.
Retained concerns
No architecture-level concerns identified.Security review details
-
Security Blast Radius
- inferred — The new command's direct writable scope is the current session's six display preferences, which may persist across workbooks. Its response contains preference flags, not workbook data. The rendering change exposes additional aggregates of the same selected cells already used for status-bar statistics.
Trust Boundaries and Controls
- observed — The command is available without an open workbook, but its handler only assigns Boolean preferences. The query designation disables journaling and undo; it does not bypass command enablement checks. The inspected handler performs no file access, network request, code execution or authorization-state mutation.
-
Pre-merge checks: 
4 · 
1
-
Failed checks: 1 warning Passed checks: 4 passedFull details: Docstring Coverage
-
Explanation
Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 5 files. (2 skipped: 2 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
-
Finishing Touches
-
🧪 Generate unit tests (beta)
-
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Comment @coderabbitai help to get the list of available commands.
6f0e43c21c Linux: default to XWayland for file drag-and-drop on Wayland desktops (#165)
0870b1ad1c Merge pull request #2595 from storytold/chore/deps-safe-refresh
14dd23db6c chore(deps): refresh serde_json, arboard, muda, winresource, sha2
ad10881cc3 build: pin craft-update to craft-libs main (495e597) (#2591)
ee7cbf32ab build: pin craft-update to craft-libs main (495e597) (#2586)
2fbbed33bc Merge pull request #783 from vangel76/fix/control-auth-777
1a36d9db07 feat: startup update prompt modal and direct self-updating (#2566)
41769f1d16 Migrate GridCraft to egui 0.37 (#2543)
3b65b9af58 Sonar maintainability: explicit imports, method paths, smaller functions (#2412)
4eb2fb5c8e Review fix for #2473: a repeated sheet name matches in any case
0665476b35 Merge pull request #2493 from Harrison-Booth:feat/options-iteration-fields
189c3cdb0f Merge pull request #2497 from marcoarnulfo:fix/full-column-extend-scroll
674e1c05a3 Merge pull request #2481 from marcoarnulfo:fix/trace-arrows-stay-on-traced-cell
0469b51c93 Merge pull request #2444 from OdooPudakMachinery:web-chrome-flag
4a44dec500 Merge pull request #2515 from Fubeo:fub/edit-note-keeps-thread
0f5227ddde Merge pull request #2513 from Fubeo:fub/keep-sheet-id
97ec7653aa Merge pull request #2512 from Fubeo:fub/open-saved-without-recalc
27e96a9a58 Merge pull request #2561 from arcanii:autosum-across-a-row
2c81adf94f Merge pull request #2557 from Silvertree2010:fix/2517-a-new-font-derived-from-the-them
9413c57e2c Merge pull request #2555 from Silvertree2010:fix/2407-xlsx-only-one-warning-when-sever
bd7b867a1f Merge pull request #2552 from Silvertree2010:fix/h2457-cli-eval-cat-print-huge-or-tiny
80ea166d7d Merge pull request #2551 from Silvertree2010:fix/h2446-deleting-a-row-or-column-leaves
cb28634140 Merge pull request #2528 from Silvertree2010:fix/h2369-datetime-from-serial-returns-yea
39a56ee902 Merge pull request #2524 from Silvertree2010:fix/2453-row-height-dialog-uses-pixels-sh
0697abbbbc Merge pull request #2473 from Silvertree2010:fix/h2050-formula-with-a-sheet-qualified-r
6208f15d29 Merge pull request #2463 from Silvertree2010:fix/h2062-yearfrac-basis-0-counts-the-last
25d6a3a44f Merge pull request #2457 from Silvertree2010:fix/h1979-imsqrt-of-a-negative-real-return
1871541948 Merge pull request #2443 from Silvertree2010:fix/h2018-isoweeknum-weeknum-21-return-wee
990aa1315a Merge pull request #2428 from Silvertree2010:fix/h1934-minverse-returns-0-for-inverse-e
c9b9907c60 Merge pull request #2417 from Silvertree2010:fix/h1936-percentrank-percentrank-inc-perc
f86aec12da Release 0.12.1
bca67944b8 macOS signing: keep the temporary keychain until the build has signed with it
4995ecc66e Release 0.12.0
802c782360 AutoSum: a selected row gets its total to the right, as in Excel
85b6f564f9 Keep <scheme val="minor"/> on every body-font font on save
d07639c7c4 Warn for each skipped drawing object and chart on XLSX open
64a78a7210 Print huge and tiny CLI numbers in exponent form
80e2041159 Remove sparklines when their row or column is deleted
17b9f6ff01 Paste Name and Go To: follow-ups from the batch review (#2540)
52fa4406c1 Merge pull request #2538 from aiongg/dcc-batch
24e49d18ad Batch: Subtotal puts summary rows below their detail in the same undo step (#2482)
850dc9c772 Batch: the cell menu offers no Show Details while a PivotTable has it turned off (#2467)
f17179ceeb Batch: Show Details turned off says so in plain words; the option is in the command's docs (#2461)
47fadb8dcf Batch: Go To lists its entries once when it opens and lays out only the rows in view (#2414)
87a649c763 Batch: Paste Name lists the names once, finds local names by hash and refuses a name it doesn't list (#2410)
77b37df655 Batch: the status bar names a circular reference by its address alone (#2510)
ffa08d3a31 Batch: Circular References submenu quotes sheet names that need quotes (#2501)
50c7ee3971 Batch: undo, redo and rollbacks list the circular references of the restored cells (#2501)
f65e9f6bed Merge upstream main into the batch
e1a12fa337 UI: theme tokens with a contrast test, ribbon overflow arrows and split button, multi-line formula bar, code editor widget (#456)
846d5b98ee Merge storytold/gridcraft#2525: Ribbon: Insert › Column or Bar offers 100% Stacked Bar
6194f8241d Merge storytold/gridcraft#2522: Charts: 100% Stacked Area draws each value as a share of its category's total
1e50c72698 Merge storytold/gridcraft#2488: Headers and footers: printing follows the Scale with Document and Align with Page Margins check boxes
b58846a549 Merge storytold/gridcraft#2482: Outline: Settings puts summary rows above and summary columns left of their detail
1713334579 Merge storytold/gridcraft#2477: Sheet tabs: drag the handle at the scrollbar's left edge to give the tabs more or less room
cb1fb89549 Merge storytold/gridcraft#2467: PivotTables: right-clicking a value cell offers Show Details in the cell menu
75f7df9da6 Merge storytold/gridcraft#2461: PivotTables: Enable show details turns Show Details off for a PivotTable
8356b33c78 Merge storytold/gridcraft#2456: Fill handle: Fill Days, Fill Weekdays, Fill Months and Fill Years for a date
2741680144 Merge storytold/gridcraft#2427: Keyboard: Ctrl+Shift+U expands and collapses the formula bar instead of underlining
924d36e247 Merge storytold/gridcraft#2421: Status bar: a right-click opens a statistics menu, with Numerical Count, Minimum and Maximum added
ae88b40f58 Merge storytold/gridcraft#2414: Go To: lists the named ranges of every sheet and the references entered, and goes to several at once
0217dbdfd8 Merge storytold/gridcraft#2410: Formulas: F3 opens Paste Name, which inserts a defined name or pastes the list of names
91a1d18c91 Merge storytold/gridcraft#2510: Status bar: Circular References names a cell only when a loop is on the active sheet
58aa0f1df2 Merge storytold/gridcraft#2504: Circular references: Error Checking and the status bar quote sheet names that need quotes
2660973286 Merge storytold/gridcraft#2501: Error Checking: its arrow opens a Circular References submenu listing a cell on each loop
44cc84edf2 Merge storytold/gridcraft#1809: Calc: a LAMBDA that calls itself without end answers #NUM! instead of overflowing the stack
f1b06a9481 Merge storytold/gridcraft#2486: docs: Different First Page and Different Odd & Even Pages are no longer listed as missing
bb6f38d95d Merge storytold/gridcraft#2434: Tests: the engine's file-system tests each use their own temporary folder
960c64c3e4 Return None from datetime_from_serial when rounding carries past 9999
c44971fcd5 Ribbon: Insert › Column or Bar offers 100% Stacked Bar
14e73dd0e9 Make the Row Height dialog use points like Excel
0eb2f1f6f0 Charts: 100% Stacked Area draws each value as a share of its category's total
4548bab2e3 feat(engine): open a saved workbook without recalculating it
3e6eac4222 fix(engine): editing a note or comment keeps its thread
85e8f7909e fix(xlsx): keep each sheet's sheetId across a rewrite
a2e4b2b1da Error Checking: the Circular References submenu scrolls
a75224617b Status bar: Circular References names a cell only when a loop is on the active sheet
1dd07b7f75 Circular references: Error Checking and the status bar quote sheet names that need quotes
71669dae6d Error Checking: its arrow opens a Circular References submenu listing a cell on each loop
0cf9476241 Shift+Arrow on a whole column or row: still follow an extension that reaches the sheet's edge itself (#2451)
a2aa72c3cb Docs: drop the stale Options-dialog-missing note from the Backstage row
a75d633d68 Shift+Arrow on a whole column or row keeps the view on the rows or columns it showed (fixes #2451)
3ef94601d5 Options: commit iteration fields only while iteration is on; accept the locale's decimal comma for Maximum Change
6bdde35133 Merge origin/main into gc-options-iteration-fields
b745c136b2 Headers and footers: printing follows the Scale with Document and Align with Page Margins check boxes
9425358faa docs: Different First Page and Different Odd & Even Pages are no longer listed as missing
118cd15d93 Outline: Settings puts summary rows above and summary columns left of their detail
010eddd25e PivotTables: the cell menu computes a report once for all its cells
b5bf14db98 Trace arrows stay on the traced cell when the selection moves (part of #2475)
7c10db07d9 PivotTables: Show Details reports the turned-off option before an out-of-date report
3d41bdb956 Sheet tabs: drag the handle at the scrollbar's left edge to give the tabs more or less room
4c0cc09505 Fix parsing of ranges whose second end repeats the sheet name
28efc9dabf Docs: list the date fill modes in the ui-parity history row without table pipes
3fa6cb470b PivotTables: right-clicking a value cell offers Show Details in the cell menu
b4487663aa Fix YEARFRAC basis 0 for February-end start and 31st end
30126a709a PivotTables: Enable show details turns Show Details off for a PivotTable
46f6157800 Merge main into fix/lambda-recursion-stack
2ae2329090 Docs: drop the stale missing-keys row that still listed Ctrl+6
92d2b9894f Fix IMSQRT leaving a stray real part for negative reals
00edfd0690 Fill handle: Fill Days, Fill Weekdays, Fill Months and Fill Years for a date
86064077f1 Fix ISOWEEKNUM/WEEKNUM(…,21) for the first days of the calendar
276cd0fe78 web: parse ?chrome= so an embedding host can leave out the title bar and File tab
3099df934e M7: verify Agile encryption's dataIntegrity before returning plaintext (#2425)
d0fe8b6423 Tests: the engine's file-system tests each use their own temporary folder
6cb3220164 Scale MINVERSE rounding cutoff to the input matrix
07890b47f8 Keyboard: Ctrl+Shift+U expands and collapses the formula bar instead of underlining
10bec74810 M6: misc hardening — unbounded picture cache, stats walk, signing tmpdir, web clipboard, dash budget, fs cycle, rezip loop (#2422)
a005d8235f M2.9: close protection gaps a trusted script or other sheet would slip through (sec scan findings 17,20,24) (#2420)
48d9ba264c M2.9: harden native file open/save (sec scan findings 15,22,25) (#2418)
89d8e81941 M2.9: bound print/export/autofit work in the engine (sec scan findings 18,21,27,28,30) (#2416)
6fac430f55 M2.9: cap xlsx import work and gate hostile datetime field lengths (#2413)
7bc390d0fb Status bar: a right-click opens a statistics menu, with Numerical Count, Minimum and Maximum added
14415f410d Fix PERCENTRANK returning #NUM! for very large significance
f284f6a825 M2.9: budget lambda work and bound wildcard substring search (#2415)
983d3d7e6a Go To: lists the named ranges of every sheet and the references entered, and goes to several at once
00b65d7e8c Merge main into fix/lambda-recursion-stack
3557b9f6cd Formulas: F3 opens Paste Name, which inserts a defined name or pastes the list of names
72c1d57d1e Review fixes for #2393, #2394, #2397 and #2399
beda2a44dc Merge PR #2394
ec841a0139 Merge PR #2388
edea52e663 Merge PR #2402
2c6e529b4d Merge PR #2400
d743f21992 Merge PR #2399
f9af0d88a5 Merge PR #2397
14d6dabcaf Merge PR #2396
05b77987cd Merge PR #2393
deb167956c Merge PR #2392
6ead1fb519 Engine: building blocks for multi-command actions (undo groups, recording buffer, document trust, chunked hidden names) (#462)
c22787e5bf Merge main into fix/lambda-recursion-stack
e93d15b50a Contributors: credit helenkwok as Helen Kwok
b389d9067a XLSX: write accounting formats 42 and 44 with their code
b47c83f6aa Reject unmatched '.' and ',' in NUMBERVALUE text
35067fa9ca Read accounting negatives like $(1,234) in number text
86f4114514 Merge remote-tracking branch 'origin/main' into gc-lookup-exact-number-compare
e883c84e7b Merge origin/main into the Analysis ToolPak value-argument branch
a80c7ff570 i18n: Japanese labels for the iteration settings live in ja.rs
9fd7693d4e Merge fork's border keytips fix into main
1062604fee i18n: Russian Maximum Change reads as a change limit
ac890b839a Merge origin/main into gc-options-iteration-fields
1ce4781d3e Accuracy: PMT to Excel's last bits via ln_1p/exp_m1
74b2bda75c Merge origin/main into gc-index-2d-ref-one-index
b8771d51fb Merge pull request #2390 from dylanmtaylor/ci/sonar-main-not-cancelled
2329507a8e ci(sonar): don't cancel superseded runs on main, so coverage is published
4b2ee2e2dd Conditional formatting: New Rule remembers its sheet by name, so moving or inserting sheets while it is open keeps the rule there (#2348)
7cf44d0fbb Integration and review fixes for #2367, #2369 and #2387
45f06f50da Conditional formatting: New Rule keeps the range it was opened for when pointing on another sheet (#2348)
81fd0f6f7d Merge PR #2387
68da23e2eb Merge PR #2386
fba4224ffc Merge PR #2375
2a4cc2a5b6 Merge PR #2369
ca0c3afbab Merge PR #2367
87935eb245 Merge PR #2366
d5aa6fbcbc Conditional formatting: New Rule's formula box takes references clicked or dragged on the grid (#2348)
c746eea876 Fix MOD returning wrong sign and magnitude for tiny divisors
15a705e234 i18n: missing translations are reported, never a failure (#2383)
43a5a3c435 PivotTables: Show Details checks the report is up to date before looking at the cell
530a8cc810 CI: the gate builds with the release craft-fonts pin (#2381)
7111812b87 PivotTables: Show Details refuses an out-of-date report, and reports its errors instead of editing the cell
08820cb4b2 CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2338)
0c14f59555 PivotTables: Show Details, double-click a value cell to list its source records on a new sheet (#2364)
aa8399be95 Grid: #### is sized by the width of #, so it fits its cell in every font (#2378)
49f26bdd79 Fill handle: the Auto Fill Options button on a right-to-left sheet is checked in screen space (#2368)
39450b80d1 Hyperlinks: Ctrl+Alt+click on a link extends the selection again (#2368)
33a45130a1 Packaging: pin the signing client and appimagetool, and check their hashes (#2073)
a7608ada6d CI: one test binary per crate, nextest, line tables only (#2372)
45ec9dfbfe Build the saved UiState in the test with struct update syntax (clippy field_reassign_with_default)
8f2a60d176 Keep the in-cell editor the cell's width while the text fits (#2336)
bdf8b8cc75 Use chrono instead of hand-rolled UTC conversion (#2121)
599762f534 AutoFilter: grow the range when a value is entered in the row below it (#2342)
ba98039988 Keep the in-cell editor wide enough for the next character at high zoom (#2336)
168acc5889 packaging: shell, PowerShell and web page fixes (SonarCloud S7688, S7679, S7682, S8677, S7926) (#2323)
a0ceea1468 Open on the Home tab every launch, as in Excel (fixes #2329)
9135c7f6f0 Ribbon: fall back to Home when the active contextual tab is gone (fixes #2329)
f1e29fa828 Review fixes for #2267 and #2292
fe2f9a7582 Merge PR #2357
a09454e250 Merge PR #2315
bcf55f0f00 Merge PR #2274
4b8725b29b Merge PR #2314
e92d8b4e48 Merge PR #2295
817cf80470 Merge PR #2292
2d0fe1f01e Merge PR #2289
d1399ff2ca Merge PR #2279
67f13d804c Merge PR #2275
50e5a3e928 Merge PR #2267
a725f2dc67 Merge PR #2266
27a33f1ee0 Merge PR #2260
5d0fc0b06a Merge PR #2245
3c62ae27fd Merge PR #2244
073ae2df39 Merge PR #2233
8eda577545 Page Up into frozen rows scrolls the rows below back to the top
7c1ec1df7d Fill handle: test the Auto Fill Options button on a right-to-left sheet, merge the duplicate fill handle row (#1403)
60776ff4de Hyperlinks: test that Ctrl+click beside the link text still extends the selection (#1198)
d19f656014 Fill handle: test the Auto Fill Options button's workbook-changed rule, report an undo error, document it (#1403)
6febf5442f Fill handle: Auto Fill Options button after a drag offers Copy Cells, Fill Series and the formatting modes (#1403)
d046ba6aa7 Hyperlinks: Ctrl+click on a link follows it instead of extending the selection (#1198)
ac8da7d49c Release 0.11.1
10fb7d566e macOS packaging: retry stapler when Apple's CloudKit drops the connection
73af8c6a6d Release 0.11.0
09f78cb3a8 Tables: Format as Table inside a table restyles it
450f457535 Calc: a formula calculated inside another one shares its stack budget
a8e2ed31b1 Add extra Japanese translations for UI elements
a0fa6c6e6e Merge main into fix/lambda-recursion-stack
9cbb674c55 Print numbers near f64::MAX in a form that parses back
1da640abcc Merge upstream/main into fix/control-auth-777
d1db71d0f0 Merge pull request #2209 from Higgs32584/fix/2178-script-trust-gate
b5b3969377 scripts: trust gate review fixes (#2178)
6dedb9310b Merge remote-tracking branch 'origin/main' into fix/2178-script-trust-gate
74f29a743f docs: Ctrl+Shift+A (argument names) is no longer listed as missing
e6ffca60bb view: hidden outline symbols answer no clicks; parity rows updated
5bcbaacce7 Snapshot: catalog installed fonts before rendering
840ba5c3a5 view: Show Outline Symbols (Ctrl+8), read and written
99f92f4a28 range.setValues: `parse: false` stores a string as the text it is (#2255)
843c9b8404 ui: a too-wide number in a repeat-fill format shows ####
56207f2d3c run --script: a line's unknown key stops the run (#2256)
a1c84547e3 Merge pull request #2249 from storytold/readme/app-icon
7ed494691c README: the app icon above the title
8307d3cb05 Treat empty instance_num in TEXTBEFORE/TEXTAFTER as 1
c39d2ad197 Keep '!' in structured-reference columns intact on XLSX save
742a6e8535 functions: REGEXREPLACE bounds each replacement as it expands it (#2162)
e177bf1c44 calc: hardening: overlong digits, NaN indexes, REGEXREPLACE output (#2163, #2162)
b9801f3f81 Romanian: translate Options|Editing; 22 strings main added since (sheet tab menu, account, chart and error-checking labels)
06920de8da Merge pull request #2226 from aiongg/next
6f10378b17 Integration: #1320 font-measure AutoFit tests in their own test binary
c4c7f747c7 Integration: keytip NR test gives the sheet data so the Insert Chart dialog opens
818175f51e Integration: Japanese catalog covers the reference catalog's new keys; clear the texture delta in the completion test
c7016fb724 Integration: fix struct literals and call signatures after combining tracks (Series.quartiles, Comment.note_box, Image data Arc, signature language)
cde364f269 Integration: cargo fmt after combining tracks
d5cdd2ea2b Integration: track t15
561382cc6d Integration: track t14
ca1cdd4229 Integration: track t13
c7fd66d807 Integration: track t12
9350ab1def Integration: track t11
4c5c345c31 Integration: track t10
6dda6be2c6 Integration: track t09
d3201e7cea Integration: track t08
a680ac59f0 Integration: track t07
cfda01c831 Integration: track t06
4c81d658ec Integration: track t05
512b2aa9fd Integration: track t04
b0b6409112 Integration: track t03
54d0f7cfc0 Integration: track t02
f193f0d834 Integration: track t01
d056570d97 Integration: cargo fmt
21c3ec248c Integration: cargo fmt
ec61d59b41 Integration: cargo fmt
55aeed6f1a Integration: cargo fmt
1b4b51225d Integration: #1912 restore the end of add_page lost in the merge resolution
b35b5a8b9d Integration: cargo fmt
7b47c5a846 Integration: #995 test builds Image.data as Arc<Vec<u8>> (after #1629)
55877df80f Integration: cargo fmt
f02f446905 Integration: #1194 drop the duplicate Cut and Copy German arms (#1830 already translates them)
4ac3f2fa64 Integration: cargo fmt
1d9b29ff57 Integration: cargo fmt
c37298b468 Integration: #1151 test literal gains the category_levels field from #1088
36c9df453f Integration: order localization-parity revision rows newest first
47bf083d0a Integration: #2116 move name_sort_key and its test into the existing tests module
a1c1fc05de Merge PR #2116: Backstage: list the languages alphabetically by their own name
d4eabcee96 Merge PR #2106: Translate form-dialog field labels, choices and notes
10ac46c243 Integration: #2102 fill Romanian catalog gap (Options|Editing, English text)
0eeaeec0c1 Merge PR #2102: Romanian (ro) interface language
e72d5f290a Merge PR #2061: i18n: Dutch (nl) interface language
905ef6a6a5 Integration: #2000 remove duplicated Spanish financial alias block
4286ac2930 Merge PR #2000: Spanish formula aliases for financial functions (#1986)
7649a762ff Merge PR #1772: i18n: add Vietnamese interface translations
e4c406dbcf Merge PR #1194: fix(ui): ribbon tooltips show each platform's shortcuts (Ctrl+B on Windows, ⌘B on macOS) (#1191)
8bfe310208 Integration: #1770 register Ukrainian (Language::Uk) and fill 573 missing keys with English text
a9a8fe7d20 Integration: #1754 translate the sheet-tab Delete button; Spanish Hide and Autoguardado; test that the sheet-tab and AutoSave labels translate in es, de, fr, ko, ru, zh, sr
3a01ce689e Integration: i18n drop duplicate Unprotect Sheet… entries (added by #1373 and #1754)
9d3252189d Merge PR #1180: fix(ui): menu items highlight under the pointer (#1174)
1316d39865 Merge PR #1151: Charts: a huge trendline forecast no longer collapses the chart (#1148)
56c31b0b31 Merge PR #1993: Grid: the selection outline follows a mouse drag at once
169c78dda8 Merge PR #1111: Respect workbook structure protection in sheet rename, move, copy, hide and unhide (#1049)
d8b73ecb4e Merge PR #1110: Size the list validation dropdown to up to 8 rows (#1089)
f5b35fb3ac Merge PR #1109: fix(ui): commit a pointed formula on the sheet it was started on (#996)
470a2ae2c1 Merge PR #1765: Sheet protection: obey the Sort and Use AutoFilter boxes
ad1899e1ca Merge PR #1770: Add Ukrainian localization (uk.rs)
01485e2b66 Merge PR #1838: Added multi-column/row selection in formulas & column/row selection highlighting.
37bf37d181 Merge PR #1103: Keep chart cache point positions when a reference has blank edges (#1015)
f4f18bb368 Merge PR #1701: XLSX: new workbooks get <fileVersion appName="gridcraft"/>
31d6221463 Integration: #1725 prefill Remove Duplicates with the current region when only the cursor is placed
59e6f123ba Integration: #2095 error-check colours come from theme tokens
ad7fe4ed70 Merge PR #1095: fix(grid): keep cursor stable during cell dragging (#936)
857bdae023 Merge PR #1692: XLSX: keep Japanese phonetic runs on open and save
46ddd61021 Merge PR #1732: i18n(ja): translate the dialog, message and menu strings (943 entries, matching the pt-BR coverage)
48285a8fc4 Merge PR #1754: i18n: translate sheet tab context menu and AutoSave toggle (fixes #1537)
e738049157 Merge PR #1088: Charts: multi-level category axes (year beside month) read, drawn and written back
75f6c92eab Integration: #2086 test that the strip beside the column headings is filled in dark mode
6432253de9 Integration: #973 move the sheet-tab copy row from the element table to the change history
cd3fcfd2a0 Merge PR #1083: Colour menus: More Colors… and Recent Colors (#928)
c9941763cc Integration: #2093 move the paste_special_shortcuts doc comment back onto its function
d44c08c354 Merge PR #2093: Paste Special: the reference app's two-column layout, translated, Paste Link button
6370fd2254 Merge PR #1693: Charts: series that refer to defined names (`[0]!Name`) plot their data, and are saved qualified
e6ccfba926 Merge PR #2142: PivotTable Fields pane: scan the source once per change, not every frame
fccca928b3 Merge PR #1631: Memory: floating pictures' textures are bounded, sized to what is drawn, and dropped with their workbook
431aaaaf69 Merge PR #2022: Reject unparseable conditional-format formulas (#1999)
70426fc913 Merge PR #1657: Cell editor: the caret contrasts with the cell's fill
8ec29a8b3b Merge PR #1652: Fill handle: right-drag opens the fill menu (Copy Cells, Fill Series, Fill Formatting Only, Fill Without Formatting, Series…)
d97f61748e Merge PR #1946: XLSX: keep cell fonts' charset (Arabic 178) and family on save
8e2974cc65 Merge PR #1629: Memory: undo steps share picture and macro bytes instead of copying them
42768628c4 Merge PR #1473: i18n: add Italian translation
826a22dc2b Integration: #2131 remove a leftover conflict marker line in ROADMAP.md
cba89cfda8 Merge PR #1066: Engine: formulas.evaluate refuses what cell entry refuses, saying why
90d4c3af0f Merge PR #1981: Desktop theme: the watcher's link has a type off Linux, so the gate passes there
608925af08 Merge PR #1979: Seed the Sort dialog column from the active cell (#1906)
ced3f7ce7a Merge PR #1912: Print CJK text with a CID font instead of question marks
7fd1553a8b Merge PR #1626: Keyboard: Ctrl+6 hides and shows objects, saved as workbookPr showObjects
a8f74730c1 Merge PR #1056: Fix Command-click and Shift-click references during formula entry
929c506d1b Merge PR #2100: Fonts: a cell font named in another language matches its installed font (fixes #1898)
8590dca0db Merge PR #2207: clipboard: bound HTML colspan/rowspan expansion (#2171)
7221e11f56 Merge PR #1945: XLSX: keep the theme's per-script fonts (<a:font script="Arab">) on save (stacked on #1740, included)
d0394a0f34 Merge PR #2005: AutoFill refuses a target that doesn't hold the source in a corner (whole rows into whole columns aborted the app)
d67193f403 Merge PR #1685: #1447: a PivotChart's link names the workbook
75e84a26d5 Merge PR #1612: Grid: a scrolled Table's header names and filter buttons in the column headings (#1423)
823914157a Merge PR #2200: core: iterative number coercion for nested parentheses (#2180)
07f806d3e5 Merge PR #2098: docs: fix Trunk website link (#2076)
635056bd23 Merge PR #2131: Print: JIS B4/B5 and Japanese paper sizes (はがき・封筒・B6)
edb214b236 Merge PR #1725: Prefill the Remove Duplicates range from the selection
78b7ef49fd Merge PR #1889: Docs: correct stale chart round-trip notes
7963cdb218 Merge PR #1758: Fonts: render Lao text with an installed Lao face instead of tofu
7269b12f1e Integration: #1976 scenarioShow writes stored numbers as values
c03d4a881b Merge PR #1570: XLSX: keep dynamic-array cell metadata (cm) on save
7e74b35a1b Merge PR #2095: Number Stored as Text: green indicator, warning button and Convert to Number (#1994)
66e6c9f54e Integration: #1468 fill Greek catalog gap (Options|Editing, English text)
508d230f7f Merge PR #1683: #1447: two value fields without a column field hide the Values row
5d0d1c2b95 Merge PR #973: Sheet tabs: Ctrl-drag (Cmd or Option on macOS) drops a copy of the sheet
05ecd6d4a8 Merge PR #1628: Add Advanced Filter dialog and fix copy-to data loss
2676c0894b Merge PR #1671: fix: theme PivotTable field group buttons
8de6c8376a Merge PR #1560: ui: truncate long workbook titles in the title bar
7768f56603 Merge PR #1580: Calc: CELL("filename") names the workbook's file
7c94f9c9bb Merge PR #1512: Reject formula number literals too large for f64 as parse errors
6b0411091a Merge PR #1559: Sort and de-duplicate data.textToColumns fixed-width breaks
d20fe88b98 Merge PR #1485: UI: keep PivotTable field-list scrollbar at pane edge
9c2cc2bff4 Merge PR #2094: Dialogs: OK and Cancel in a row, so form dialogs fit their content
ee908a2124 Merge PR #1468: Add Greek (el) interface localization
2fbb45eac0 Merge PR #2049: Word-wrap-aware automatic row height (#1969)
6f62e74704 Merge PR #1753: Docs: §6's calculation bugs have all landed
881b3f5fe2 Integration: restore sync_github_name for marcoarnulfo after merging the contributor entries
eaf9a3f230 Merge PR #1705: Fonts: find the cell, serif, mono, Thai and Hebrew faces in Fedora's package folders (#1694)
524ab89a1a Merge PR #1379: engine: subtotal honours header:false instead of dropping the first data row
6e66756ce8 Merge PR #1976: Enter bare numbers in Percentage-formatted cells as percents
ff546d8ffb Merge PR #2090: fix(ui): Esc and Enter close a data validation alert, not the edit behind it, and the keyboard goes back to the entry (#2089)
44320b393e Merge PR #1648: fix(xlsx): bound repeated column expansion
c8a20cfaf6 Merge PR #1674: contributors: add Harrison-Booth
0c45bd46b6 Merge PR #1937: Keep date text with signed parts like +3/4/2026 as text
05e4b5e3d8 Merge PR #2086: Grid: paint the scrollbar's column beside the column headings (white corner in dark mode)
7a016c2de9 Integration: #1531 fold the sheet filter into a table only when both start at the same column
46647fd61e Merge PR #1474: Conditional formatting: text rules never match an error value (#1162)
013ead7389 Integration: #2033 drop the dated history from the auto-fit comments
2aec7f2d5a Integration: #1365 kittest for the font dropdown's filtered highlight and cleared filter
aab44d2c23 Merge PR #1535: engine: sort and remove duplicates move the rows' notes and hyperlinks
5c1b171892 Merge PR #1738: Keep chart source range in step with inserted and deleted lines
3ed16929d9 Merge PR #1320: AutoFit Column Width measures text in the font the grid draws it with
2aaa09119e Merge PR #1669: macOS: bold interface text draws Cyrillic е open, not like ө
e85afa6fe5 Merge PR #2084: Right-click on a chart opens the chart's menu, not the cell's (fixes #2067)
d83dc11ff2 Merge PR #1695: Charts: box & whisker charts honor their quartile method
6d4e62d12b Merge PR #2032: Formula entry: an incomplete formula's error describes what was typed (fixes #2030)
4e74bb762b Integration: #1414 kittest for command search keyboard navigation
994b2e66c9 Merge PR #1744: Ctrl+Alt+letter that types a character no longer triggers the Ctrl shortcut (#1530)
4fd4d39aa0 Merge PR #1308: engine: refuse removeDuplicates with no valid column instead of deleting all rows
26c6e4ca14 Merge PR #1621: Reject unsupported flip param in arrange.rotate
0118413c77 Merge PR #2080: HTML export: place pictures and charts at their anchors
b17f47b2ca Merge PR #2033: Row auto-fit: count line breaks only in cells that wrap
cede13d0a7 Merge PR #1527: engine: pageLayout.printTitles only touches the axes it is given
5f4309e4ba Merge PR #1653: Charts: insert.chart builds a series from every area of a multi-area range
66c64a9331 Merge PR #2019: Formulas: the reference app's longest legal operator chain (4,096 operands) no longer crashes entry or save
c31e25b39d Merge PR #1568: calc: bounded references up to 1,048,576 cells keep their full shape
e49b2d8830 Integration: #1550 keytip NR expects the Insert Chart dialog
c29cac503f Merge PR #1477: Control channel: ui.dialog.confirm sends what OK sends (#1459)
0e298839aa Merge PR #1292: Preserve hyperlinks in PDF export and support PDF in CLI convert
a2314b5414 Merge PR #1630: Memory: interface fonts are read once and shared with egui, not copied into it
77b861392a Merge PR #1299: Filter: count empty text and ="" results as (Blanks)
c5007d5589 Merge PR #1615: XLSX: keep custom column widths that round to the default width
faef39cccc Merge PR #1600: XLSX: keep header and footer pictures on save
41bf1f0e52 Merge PR #1547: UI: Delete dismisses the AutoComplete proposal, and deleting text never brings it back (#1521)
8991b7d090 Merge PR #2150: Table Design: draw the Table Styles gallery in the ribbon (#2148)
3af424f7ac Merge PR #1624: Keyboard: Ctrl+Shift+A after a function name inserts its argument names
195bd22a9a Merge PR #2038: Fix WebGL startup on devices with lower GPU limits
b4980ebd32 Merge PR #1734: fix(web): clean up print iframe and blob resources
10746f8e33 Merge PR #1614: XLSX: a note keeps its box's place and size through open and save (#1608)
d691e95f6d Merge PR #1285: Remove Duplicates, Filter and Subtotal: a Sheet! prefix on the range works on that sheet
c6fb01ff52 Merge PR #1596: Contributors: add Marco Arnulfo
4a8765aa27 Merge PR #970: Control: Go To and Select over the control channel scroll the active cell into view
f8c9f87f6e Merge PR #913: Keyboard: Enter after a run of Tabs goes to the next row in the column the run started from
b40c0a6d05 Merge PR #2069: Use scientific notation when number_to_text rounds up to 1e15
87df1947f9 Merge PR #1284: Sort: a Sheet! prefix on the range sorts that sheet, not the active one
a9e20d81e2 Merge PR #905: Keytips: Alt, F opens the File view, and its F letters still run
d5e2b2fc77 Merge PR #1971: Control channel: a request its sender gave up on is not run later
d26bbe3432 Merge PR #1085: Format: Row Height and Column Width say pixels, and take points like the reference app
7da18f74ba Merge PR #1942: CSV import: read Windows-1256 Arabic files as Arabic
cc76df4024 Merge PR #2001: Formula editing: arrow pointing restarts from the edited cell after typing (#1949)
b388aaa241 Merge PR #1998: ui: language command docs and error list every language
1aa5d4ea79 Integration: #1996 same_name compares ASCII names without allocating
2023b96434 Merge PR #2201: calc: cap array broadcast result size (#2182)
f68f1e48a1 Merge PR #1414: UI: Improve Command Palette keyboard navigation and layout
8709b41666 Merge PR #1525: Keep leading empty columns and rows when saving CSV/text
33b6dfd44e Merge PR #1552: Keep nan/inf time and fraction look-alikes as text
bdb03349f6 Merge PR #1930: Accounting format: the documented currency `symbol` is honoured
0bf7d40f3b Integration: #1534 remove the What::Hyperlinks paste-special target
b10e41c1c7 Merge PR #1726: Fail CLI checks on incomplete or empty input discovery
9d1f5503c9 Merge PR #1438: Fix fraction numerators saturating at u64::MAX for large values
43cd35d4bd Merge PR #1263: Bound Undo history growth after bulk edits
39add6b7c3 Merge PR #2026: Linux: time out the desktop theme's portal read
69f6ea363d Merge PR #1529: fix #1458: one reference-app sheet-name quoting rule for formulas, pivot sources and ADDRESS
5186b9c964 Merge PR #1523: UI: function help follows the interface language
4c3dc617cc Merge PR #1365: Fix font dropdown list resizing and keyboard up/down navigation
8daa1f41e1 Merge PR #1731: Move PivotTables with their cells on row/column insert and delete
cd5d21740a Merge PR #1326: Reject a list data validation that has no formula1 (#1303)
cfd3e789ac Merge PR #1331: Form dialogs open ready to type (Column Width, Row Height)
0592dd0a5e Integration: #1091 fill Polish catalog gap (Options|Editing, English text)
0e6b31ab71 Merge PR #1996: calc: LET and LAMBDA names ignore case in any script
7116252960 Merge PR #1995: Persist the AutoSave preference across restarts (#1901)
8daecc7777 Integration: #1975 remove stray empty file '=560'
9e56ed3803 Merge PR #846: Closing the window asks to save unsaved workbooks
4cdffe455f Merge PR #1728: Use the platform clock for UI timing on the web
2c10a8da46 Merge PR #759: Names: a name over several ranges reads its top-level commas as unions
15dfbef548 Merge PR #2195: calc: cap LINEST-family regressor matrices (#2177)
cacb91d29d Merge PR #1520: fix #1443: Ctrl+Q no longer closes the window outside macOS
708c82cf2c Integration: #1059 delete_areas accepts a single row or column
c8e0323cf3 Merge PR #1975: Select precedent/dependent cells with Ctrl+[ / Ctrl+] (#1865 part 1)
56cccd1f64 Merge PR #2194: calc: bound SUBTOTAL/AGGREGATE input work (#2175)
93517ccf51 Merge PR #1500: Fix number-format palette colours in grid and PDF output
1f9696d013 Merge PR #1958: Translate and standardizes UI error feedback by locale
3ad6034f33 Merge PR #1924: Grid: row and column heading labels grow with the zoom
ad490a1393 Merge PR #1735: Analysis ToolPak: moving-average standard errors use a running sum (#1043)
cbf13a4c1d Integration: #1236 keep the sys-cjk-han-zh sample string at 页面布局 客户端配置
f8b7547344 Merge PR #1709: Rows: a big font isn't counted twice when the sheet's default height already fits it
62c70242ce Merge PR #1672: Keep overflow text visible when its source cell scrolls out of view
51401a382c Merge PR #1534: engine: a cut takes the source's notes, hyperlinks and merged areas with it
6f8b6c33e0 Integration: #1225 write a dxf's border before its protection
36763fb663 Merge PR #1236: Fix native CJK fallback paths in Flatpak
8fa5035b21 Merge PR #1277: Zoom dialog: the reference app's layout, current zoom pre-selected, Fit selection (#930)
013f60a8b6 Merge PR #1514: Fix scalar INDEX/MATCH XLSX export
32faa4f1c6 Merge PR #1661: Merged cell with Wrap Text: auto-fit skips it, so the text draws and the row keeps its default height
ee54646258 Merge PR #1372: Edit: text that would parse as a number or formula keeps its quote prefix in the editor (#1362)
8d1263a047 Merge PR #1618: Grid: a cell with line breaks and Wrap Text off draws the whole string on one line
0f27cef4d6 Merge PR #1364: engine: keep case-insensitive replace from dropping text when folding shifts byte boundaries
6139ef7537 Merge PR #1724: Tables: add the missing Resize Table button (#935)
6735e9e7c0 Integration: #451 qualify the run-stop row through value_ref
3eda63d5e5 Merge PR #1706: Reject table.resize when the new range overlaps another table
604d85e29c Merge PR #1531: xlsx: keep a table's filter criteria when the sheet AutoFilter coincides with it
9f03d2cd1b Merge PR #1434: Refuse table names that clash with defined names or R1C1 references
040d778182 Merge PR #1375: Header menus: Format Cells… for the selected rows or columns
ccbf28fe63 Merge PR #1589: Web: keep preferences such as dark mode between visits
e9479d2155 Merge PR #1360: engine: keep AutoFill text series from panicking or wrapping on i64 overflow
675d96ef17 Merge PR #1373: Protection: Protect Sheet entries unprotect, selectLockedCells enforced (#1346)
5276fce027 Merge PR #1363: Context menu: the right-click that opens it doesn't close it
0cc4798ca9 Merge PR #1650: fix(ets): avoid repeated scans while interpolating gaps
5b2a67c236 Merge PR #1252: Dialogs move by their title bar instead of staying pinned to the centre (fixes #1250)
696555f484 Merge PR #1332: Keyboard: Alt+= no longer starts an edit with the `=` it types
0087afce8a Merge PR #1230: Journal: cap by serialized size and keep a recording's start through trims
240e773e17 Merge PR #1905: Keep the in-cell editor at the cell's height for one line
38fb979498 Merge PR #1329: Slicer: find a named table on any sheet
93de710d28 Merge PR #1306: Show dynamic array source formulas read-only in spill cells
78225db6f8 Merge PR #1108: Refuse a cut-paste whose destination does not fit instead of dropping cells (#997)
0b573362bc Merge PR #1059: rows/cols parameters: accept a single row or column
02640d6626 Merge PR #1495: XLSX: preserve carriage returns in saved text
02e1828c65 Merge PR #995: XLSX export: a picture shared by several sheets is one media part
7045146342 Merge PR #1550: Open the Insert Chart dialog from Recommended Charts instead of inserting a chart (#1399)
90cdb12fc6 Merge PR #1470: fix(solver): commit solutions and reports atomically
ee6dead310 Merge PR #1057: Flash Fill: read the text cells show
49328f80c0 Merge PR #1381: engine: rebuild cell-store bands and counts when importing a JSON workbook
0d741d9756 Merge PR #1510: Calc: a dynamic array of one value still anchors a spill range
9a22d1e628 Merge PR #1548: Focus the Find what field when Find and Replace opens (#1518)
a512a6a8a7 Merge PR #1117: Fix table without header: re-point references when the data moves down (#1030)
2a3ea02e69 Merge PR #1526: functions: NETWORKDAYS.INTL accepts the all-weekend string "1111111"
806a439efa Merge PR #1507: Read securities function dates in the workbook's date system
8319587046 Merge PR #1215: File: Save a Copy asks where to save a bare name instead of writing it to the working directory
4f7111941e Merge PR #951: fix(fill): respect the workbook date system in monthly AutoFill
116cc8697a Merge PR #1371: Keep Middle/Bottom vertical alignment for wrapped text taller than its row
00fd1e7a6f Merge PR #1428: Recalc: formulas reading an array that loses a spill conflict see #SPILL!
011ae7266d Merge PR #1469: Let GROUPBY and PIVOTBY take a LAMBDA as their function
4fd7657508 Merge PR #1068: Ribbon: more currency symbols in the Accounting Number Format menu
941da33355 Merge PR #1432: Stop BINOM.INV/CRITBINOM hanging when trials exceed 2^53
522b8a1f42 Merge PR #1225: XLSX: keep a dxf's protection, font size and face, and the font parts it turns off
d34e3db0b8 Merge PR #949: Sheet tabs: New sheet (+) right after the last tab, the strip capped at 60%
e51bc1ab70 Merge PR #1136: Grid: per-frame work no longer scales with the whole sheet (#1098)
8e931b24b4 Merge PR #898: UI: File › Account shows the version, platform and licence, with an About GridCraft button
7f9cf33bfd Merge PR #632: Header & Footer dialog opens on the saved header and footer
a3baf552a1 Merge PR #1281: N() converts a computed array element by element, so it works inside SUMPRODUCT
91af0c60d6 Merge PR #952: Ribbon: Font Size is a box you type into, the sizes behind its arrow
7bf0c8dbd7 Merge PR #1249: Headers: mark hidden columns and rows, split cursor and double-click to unhide (#1247)
4ec2de2501 Merge PR #1248: Opening an XLSX with a part over 512 MB says how to get the data in
2cbd39ca8d Merge PR #1223: Sheet tabs: right-clicking a tab activates its sheet
2c73c2b18f Merge PR #1214: Grid: an armed Format Painter pastes onto the next cells clicked or dragged
1f1be405c1 Merge PR #1427: Recalc: an anchor's new formula no longer reads its old spill area
4434e142fb Merge PR #1380: xlsx: keep every property of the default cell format when importing a file
ccc0e8cfe4 Merge PR #885: Row, column and freeze commands act on the sheet they are given
c4389fcacb Merge PR #701: Keep sheet navigation on visible worksheets at workbook boundaries
cedaa46916 Merge PR #1156: XLSX: [Content_Types].xml is the first zip entry, workbook parts precede document properties, so libmagic detects the file type (#1090)
947930e889 Merge PR #584: Refuse inserting cells that would push values off the worksheet (#580)
c470450eb3 Merge PR #1091: i18n: add Polish (pl) interface, full catalog (970 labels)
ed4b4e1ca7 Merge PR #663: i18n: Turkish (tr) interface language
0e077cfd88 Merge PR #1974: In-cell editor: a Wrap Text cell edits wrapped at the column width (#1970)
f55cbcd061 Merge PR #1237: BAHTTEXT: a final one after the millions reads เอ็ด
bd4c875225 Merge PR #884: Conditional formats: hex colours in a custom style, and no more silently empty or never-matching rules
8a7f0348b6 Merge PR #1120: Open notice: do not promise to keep macros that were dropped (#1024)
8041fbfc22 Merge PR #451: perf: fill-handle double-click scans a dense neighbour column ~2.4x faster
91be133965 Merge PR #1114: Read date text arguments in the workbook date system (#1038)
34de196c9f Merge PR #1119: Fix xlsx: combine escaped UTF-16 surrogate pairs when decoding strings (#1025)
a0a4b6a7d0 Merge PR #1105: Fix row keys merging distinct text rows in UNIQUE and grouping (#1012)
2c22070a62 Merge PR #1060: LAMBDA helpers: #CALC! for nested arrays, #VALUE! for wrong parameter counts
307b25dc92 Merge PR #488: Build: the ui-egui build script reads CARGO_MANIFEST_DIR when it runs
a48f418a77 Merge PR #831: i18n: test that translations keep the shape of their English
df39416e36 Merge PR #1115: Cap CSV import fields per record at the worksheet column limit (#1037)
340ce131ef Merge PR #1340: calc: calculate long dependency chains with bounded stack
136a8fa07e Merge PR #1337: Selection: whole columns and rows don't widen to merged cells
ec5e939677 Merge PR #1104: xlsx: keep the first group's series kind when importing a combination chart (#1014)
a4c53ad020 Merge PR #1061: Recalc: an array that spills as before doesn't requeue its dependents
954f30f9f4 Merge PR #1058: Format Cells: take the documented camelCase style keys
f8f7193f52 Merge PR #1084: Data validation: a list typed without quotes is saved as a quoted list, and an unknown type is refused
0288ad2f31 Merge PR #630: Cap queued pointer events from ui.click/ui.drag control requests (#525)
9aed6fb534 Merge PR #1102: CSV export: check the size cap before each field, not after the row (#1023)
f295fa0947 Merge PR #629: Make check --json list warning messages instead of a count (#526)
06b7d09a7e clipboard: drop wall-clock timing from span test (clippy)
5392d95bf8 scripts: require workbook trust before running embedded scripts (#2178)
b817c04a9b clipboard: bound HTML colspan/rowspan expansion (#2171)
836b269806 calc: cap array broadcast result size (#2182)
5b908c04f8 core: iterative number coercion for nested parentheses (#2180)
be94b011c5 calc: bound SUBTOTAL/AGGREGATE input work (#2175)
e1b8aad143 calc: cap LINEST-family regressor matrices (#2177)
912b817abe security: enforce HTTPS on curl downloads (SonarCloud S6506) (#2188)
c3184b74f9 Address CodeRabbit review: borrow the workbook and keep both swatch outlines (#2148)
8ae67c5534 ci: add sonar-project.properties for CI-based analysis
eb48beffb5 ci: add SonarCloud scan via shared reusable workflow
a9223eabf8 Table Design: draw the Table Styles gallery in the ribbon (#2148)
7ba381d9ae i18n: Turkish (tr) interface language
0812d3aee5 PivotTable Fields pane: scan the source once per change, not every frame
2ebdf164c2 Release 0.10.0
b092633561 Print: Japanese Envelope #4 is 90×205 mm and add B6 (ISO) to the Size menu
f91f7c05d4 Print: JIS B4/B5/B6 and Japanese paper sizes
97aa04dc80 i18n(ja): add the §11 revision row and align the docs header dates
e42ebf9311 XLSX: keep a phoneticPr that has no rPh runs, and document the limits
377bb9226e Update i18n.rs
c812881fa9 Backstage: list the languages alphabetically by their own name
c26290cd04 Show form notes that contain a pipe as they are
43e64c50a2 Romanian: print settings and status, five form labels; Page Setup… matches its dialog
8e38fc21fa Romanian: feminine stângă/dreaptă for the margin labels
028a02ba72 Romanian (ro) interface language
29adb19872 Translate form-dialog field labels, choices and notes
37e41424ed Merge pull request #1620 from dylanmtaylor/ci/shared-nix-workflow
a35d241caf XLSX: a note keeps its box's place and size through open and save (#1608)
d1ab0ea85d Merge upstream main (0.9.0) into fix/2030-incomplete-formula-error
a4a36e8460 Fonts: a cell font named in another language matches its installed font (fixes #1898)
1abb771f58 docs: fix Trunk website link (#2076)
68f956a410 Number Stored as Text: green indicator, warning button and Convert to Number (#1994)
bdc0552a92 Dialogs: OK and Cancel in a row, so form dialogs fit their content
cacb620fec Paste Special: Excel's two-column layout, translated, Paste Link button
b0ab19701d Merge main into fix/lambda-recursion-stack
226c055fb7 fix(ui): Esc and Enter close a data validation alert, and the keyboard goes back to the entry (#2089)
1788c5a771 Grid: paint the scrollbar's column beside the column headings
83a41dcd68 Right-click on a chart opens the chart's menu, not the cell's (fixes #2067)
41cb19fd6d Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
eb30ab8f3f Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
feac1679a1 HTML export: place pictures and charts at their anchors
f29ac7d9ef Use scientific notation when number_to_text rounds up to 1e15
c8a87f57dd i18n: Dutch (nl) interface language
45c91ede21 i18n: Dutch (nl) interface language
60e113bcd7 i18n: Dutch (nl) interface language
68e58a2eae Skip CodeRabbit reviews on Dependabot PRs (#2057)
ed48389c46 Formulas: compare right operands only after the left spine of a chain matches
ad0ce61b8a fix(engine): strip one leading = when validating CF formulas
24ee1e4db7 fix(engine): count word-wrapped lines for automatic row height
bc58b2773a Document the functions this PR touches
2fb880a6d5 Fix WebGL startup on devices with lower GPU limits
4faa3ff098 Row auto-fit: count line breaks only in cells that wrap
4e17be1929 Merge upstream main into italian-translation
cfb0e186ed Formula entry: an incomplete formula's error describes what was typed (fixes #2030)
189eb7ae52 M12.AR14: keep the theme's per-script typefaces (<a:font script="Arab">) on save
132e887efa Linux: time out the desktop theme's portal read
ad32e6a847 i18n(ja): translate every dialog, message and menu string the pt-BR catalog covers
40803e6aca XLSX: keep Japanese phonetic runs (ふりがな) on open and save
2c6ffe489c XLSX theme: keep the major/minor ea and cs typefaces through open + save
8ff06e215e fix(engine): reject unparseable conditional-format formulas at creation
fc1d629cc5 fix: merge current main into hidden-sheet navigation repair
27760812de i18n: test that translations keep the shape of their English
a2cc4b42ca Release 0.9.0
479d1b4b66 Update i18n.rs
199e5f8e05 Formulas: test the order walk and map visit nodes; date ROADMAP like the parity doc
edd6e0cbe8 Atualizar o i18n.rs
4ce8dc55ec Docs: date the long-chains revision entry 2026-10-19
52ab0e6bfb #1458: formula round-trip test for Excel's sheet-name quoting
b3e0a7e8d3 Formulas: count the leftmost operand of a chain at the same depth
2aeb21d4d3 Formulas: flat operator chains as long as Excel allows (#916)
d9d4d64645 PR1372: merge main and preserve quote-prefix and CSV regression tests
23829d8c67 Merge pull request #1828 from dylanmtaylor/chore/drop-competitor-references
0ca1554642 docs: sheet-name quoting rows in function and file-format parity (#1458)
0b4cc5618f fix #1458: one Excel sheet-name quoting rule for formulas, pivot sources and ADDRESS
026239458a Formula editing: arrow pointing restarts from the edited cell after typing (#1949)
a74e82ac93 formula: same_name folds case without merging ı and i
122d3d9a31 feat(formula): Spanish aliases for financial functions (VNA, TIR, PAGO, VA, VF)
553b0bd9f2 ui: language command docs and error list every language
871c4e6c8f perf(engine): scan only the precedent area's stored cells
e9bcb8dfbb calc: one shared same_name for LET/LAMBDA names, with case folding
9f13434972 fix(ui): label sort columns from the region start, seed unused level columns
ac371be50d calc: LET and LAMBDA names ignore case in any script
e34b0aa345 fix(ui): persist the AutoSave preference across restarts
37f7b43bca Fix pointer budget test: pass push_click a u32 click count (#525)
e8b3279d9f Merge origin/main into issue-525
ef339b9f2c Grid: the selection outline follows a mouse drag at once
13e730d42a calc: calculate every formula read at the depth limit in one suspension
4445aa6ddf calc: document deref's full-shape rule for bounded references
3979e48f89 Desktop theme: the watcher's link has a type off Linux, so the gate passes there
e5aeea7a94 Sheet protection: obey the Sort and Use AutoFilter boxes
aff9153dac Calc: CELL("filename") names the workbook's file (#1489)
43655df887 Merge main into chore/contributors-harrison-booth
da97bde61c fix(ui): seed Sort dialog column from the active cell
6760e006ec M12.AR15: never write a font family over 14 (review)
24b0b5d167 M12.AR15: keep cell fonts' charset and family on save
4faca49836 M12.AR13: read Windows-1256 Arabic CSV and text files as Arabic
6481c17150 In-cell editor: test that an unwrapped multiline edit shows every line (#1970)
f84557b4c6 Merge remote-tracking branch 'upstream/main' into function-help
d19627fc26 fix(engine): walk stored cells in transitive precedent selection
f8cec7dd6d Merge main into fix/deep-recursion-crash
5e0b2dd45c Merge main into fix/sumproduct-mismatches
3df5e05f0f In-cell editor: measure wrapped text at the field's own wrap width (#1970)
49fe41afbf Merge pull request #1892 from vedran-dobos:options-prefix-translations
4401b3e5c5 Merge pull request #1877 from SocraticsAI:host-chrome
aa4125952e Merge pull request #1910 from Silvertree2010:fix/1907-bug-touchscreen-devices-cannot-p
8492416c74 Merge pull request #1916 from Silvertree2010:fix/1915-desktop-theme-watcher-opens-a-ne
47fc3d5d35 Merge pull request #1922 from Silvertree2010:fix/h552-rangeref-parse-accepts-signed-ro
70018d4e60 Merge pull request #1925 from DrM7md:nux/insert-delete-whole-lines
b402359fa4 Merge pull request #1938 from Mouhand-Kaddo:fix/html-export-rtl
3a2232cfef Enter bare numbers in Percentage-formatted cells as percents
92c0d1e936 Chrome: turning the File tab off closes a Backstage that is already open
27f4c9c7bc Touch pan: a pan that never saw its release doesn't swallow the next press
f5267cb74e docs: one Last updated line per parity doc after merging
b77848ee21 Merge pull request #1882 from neilcawse:fix/pivot-grand-totals
f8e916bcd4 Merge pull request #1902 from Shnrqpdr:fix/1846-autofit-keytips
ab6fd48856 Merge pull request #1867 from HyakoV3:fix/1808-csv-as-text
06a94d42b2 Merge pull request #1935 from Mouhand-Kaddo:fix/shape-text-rtl
7b8aaf9ca7 Merge pull request #1939 from Mouhand-Kaddo:fix/xls-right-to-left-sheets
12ee27a177 Merge pull request #1943 from Mouhand-Kaddo:fix/table-name-length
8d562e9b56 Merge pull request #1879 from Silvertree2010:fix/h2804-custom-autofilter-is-less-than-l
937cfd1e91 Merge pull request #1903 from justinjohn0306:fix/1855-backspace-undo
46c706a491 Merge pull request #1845 from MarekSpodBiedry:issue-1830
33ac9e5f64 Drop the dbus-run-session test: it spawns a bus, sleeps 9 s and fails where dbus-daemon is missing
8968e83359 RangeRef::parse: whole columns take at most one $ too
f2473d1f33 Ctrl+Shift+= on several whole-row areas still opens the Insert dialog
a6757829eb Merge pull request #1814 from Higgs32584:fix-1447-pivot-bool-error-flags
29f9959521 Merge pull request #1866 from HyakoV3:fix/1528-formula-edit-sheet
8e8e2ba73c Merge pull request #1920 from vedran-dobos:range-fill-formats
33a5415f0e Merge pull request #1941 from Silvertree2010:fix/h618-textbefore-textafter-with-negati
859e654dce Merge pull request #1923 from DrM7md:nux/clippy-1-95
93cb9828bd Merge pull request #1926 from DrM7md:nux/rtl-explicit-align
851583365f Merge pull request #1934 from Mouhand-Kaddo:fix/arabic-name-length
448c167e68 Merge pull request #1947 from Mouhand-Kaddo:fix/xls-dialog-sheets
9767efe66e Merge pull request #1965 from HaSh3003:fix/1714-outline-zero-width
752477a231 feat(ui): Ctrl+[ / Ctrl+] select precedent and dependent cells (#1865)
ea00ca6b1f Control channel: a request its sender gave up on is not run later
71acb0c50b Atualizar o i18n.rs
5c4dbbbc4a Atualizar o i18n.rs
8f239e3b2f Update i18n.rs
d890a1a7da Calc: a dynamic array of one value still anchors a spill range (#1491)
92e1e96997 Docs: §6's calculation bugs have all landed
5eae222fbc Outline: + shows zero-width hidden columns at the default width (fixes #1714)
02ceedee17 In-cell editor: a Wrap Text cell edits wrapped at the column width
31abf075b7 Translate and standardizes UI error feedback by locale
7cd0a386aa M12.AR17: skip .xls dialog sheets instead of reading them as worksheets
eee872e429 M12.AR16: limit table names to 255 characters
e9ffc71c6a Search from the end for negative TEXTBEFORE/TEXTAFTER instances
041bee2168 Accounting format: quote the symbol as format text, refuse control characters (review #1930)
a10ead1c09 M12.AR11: mark right-to-left sheets and Arabic text in HTML export
59074fdc16 M12.AR9: open right-to-left sheets from .xls files right-to-left
d312535c40 Keep date text with signed parts like +3/4/2026 as text
90344445d7 M12.AR10: keep right-to-left paragraph direction in text boxes and shapes
fb7b23dbad M12.AR8: count characters, not bytes, in name length limits
7776cfcc5c Accounting format: the documented currency `symbol` is honoured
620be76873 Reject signed and multi-$ whole-row ranges in RangeRef::parse
6ac8ad9216 fix(edit): Ctrl+Enter gives each cell the number format typing gives it
28cdf1d187 Fix two clippy lints new in Rust 1.95
62e52004f8 Keyboard: Ctrl+Shift+= and Ctrl+- act on whole rows and columns at once
5bafacff69 Grid: row and column heading labels grow with the zoom
86641d965b Grid: explicit Left/Right alignment keeps its side on a right-to-left sheet
cc21643b83 Reuse one D-Bus session connection in the desktop theme watcher
adcb460a63 i18n: the test also checks Page Layout's Sheet Options labels (#1891)
9a79dbef47 Print CJK text with a CID font instead of question marks
0e8e7e34e4 Pan the grid on a one-finger touch drag instead of selecting
5f748d5594 Keep the in-cell editor at the cell's height for one line
dcd4d1d13f #1855: redo selects the redone cell
4db6876c07 #1855: Backspace then Enter is one undo step
90e89d1b9f Contributors: add Shnrqpdr to people.toml
4ed93c3b2c Keytips: letters typed with Alt held continue the sequence (fixes #1846)
f1015e1e6b i18n: French and Serbian Options headings without the context prefix (#1891)
f1cb4f00f4 Merge upstream/main into fix/control-auth-777
66ce6be474 docs: add SonarCloud and CodeRabbit badges to README (#1860)
5f2fb705b8 Docs: correct stale chart round-trip notes
d0fdf948db Calc: a recursive LAMBDA stops at a fixed count of 140 calls
3b05abe05e Merge main into fix/lambda-recursion-stack
383bb7ba59 fix(xlsx): read and write PivotTable grand totals in Excel's direction
6e984bb84d ci: configure Dependabot for Cargo and GitHub Actions
4f3853d4a9 Hide blank and text rows for numeric ordering custom filters
9b8fde71ee feat(ui): let an embedding host turn off the title bar and File tab
d4f256d6ee docs: fix number format capitalization, restore generic familiar items, and clarify parity/renderer notes
95f8206bb9 #1808: file.open can keep every CSV/TSV field as text
beade8b734 #1528: a formula's references are outlined only on the sheet they belong to
dd5c7da6fc docs: use generic pivot table terminology instead of PivotTable
6082355c22 Translate the cell and header context menus into German (#1830)
ede2b435d5 Fxied CodeRabbit flags
ef0b243cd3 Allow multi-column/row selection inside formulas with shift
e60a74e9cf Clicking a row/column while in a formula now highlights that row/column
53e5227085 docs: drop references to competing commercial software
c30fa3f1cf fix(functions): avoid overflow in median midpoints (#1579) (#1585)
c5a53a90ac #1447: booleans and errors count as strings in pivot cache flags
19f4387cca Conditional formatting: show a rule's number format (fixes #1163) (#1769)
83189c0ccd Fonts: probe ChromeOS's /usr/share/fonts/chromeos for script fallbacks (fixes #1762) (#1768)
217a8907ff Reject unknown value-field func in insert.pivotTable (#1757)
823c56582d Release 0.8.0
09973e7831 Contributors: add dotCooCoo (Robert Lee)
672c102eb2 Calc: a LAMBDA that calls itself without end answers #NUM! instead of overflowing the stack
8ffff19dda Merge pull request #1782 from skylartaylor/control-input
0fe4cd840c i18n: add Vietnamese interface translations
c04c85579a Add Ukrainian localization (uk.rs)
fac8f858cb Fonts: render Lao text with an installed Lao face instead of tofu
2321afd677 i18n: translate sheet tab menu and AutoSave toggle (fixes #1537)
963219200c Ctrl+Alt+letter that types a character no longer triggers the Ctrl shortcut (#1530)
3f8167719a Keep chart source range in step with inserted and deleted lines
39c9d7cd63 Analysis ToolPak: moving-average standard errors use a running sum (fixes #1043)
71c1097d5a #1054: clean up web print iframe and blob resources
a6aa53cbff Move PivotTables with their cells on row/column insert and delete
8ca66c5c90 Use the platform clock for UI timing on the web (#1026)
edcc76d0a8 Fail CLI checks on incomplete or empty input discovery (#1051)
5627d2b6bf Prefill the Remove Duplicates range from the selection (#1388)
9e5cdf9e43 Tables: add the missing Resize Table button (#935)
2a9f40c65e Rows: a big font isn't counted twice when the sheet's default height already fits it
36e45a5c58 Reject table.resize when the new range overlaps another table
5539722557 Fonts: find the cell, serif, mono, Thai and Hebrew faces in Fedora's package folders (#1694)
94af08ad20 XLSX: new workbooks get <fileVersion appName="gridcraft"/> (fixes #1699)
70fc5e1c78 Merge main into fix/workbook-metadata-part
a28799d02b Merge main into fix/sumproduct-mismatches
ea3ef8faf7 Charts: honor box and whisker quartile methods
8e7438b434 Charts: write names in chart references qualified, as Excel needs (#1686)
e8f049943f Charts: series that refer to workbook names ([0]!Name) plot their data (#1686)
27932a2ae4 Close control connections on the first line that is not a request
6adb26c719 contributors: add Harrison-Booth
84ce99f9c7 Keep overflow text visible when its source cell scrolls out of view
ec930b2fc8 fix: theme PivotTable field group buttons
042ac7060f macOS: bold interface text draws Cyrillic е open, not like ө (fixes #1184)
4ca967e114 Auto-fit: skip merged cells when computing row heights
14f2ea9f57 Cell editor: the caret contrasts with the cell's fill (fixes #1408)
295f7dde33 Fill handle: right-drag opens the fill menu (Copy Cells, Fill Series, Fill Formatting Only, Fill Without Formatting, Series…)
86b124fca6 Charts: build multi-area series from every selected area
1131de97ff fix(ets): avoid repeated interpolation scans (#1042)
4548c6f7fc fix(xlsx): bound repeated column expansion (#1022)
3684349d9c Memory: floating pictures' textures are bounded, sized to what is drawn, and dropped with their workbook
a09d3f6934 Memory: undo steps share picture and macro bytes instead of copying them
c5baa829e3 Memory: interface fonts are read once and shared with egui, not copied into it
efc8171609 Keyboard: Ctrl+6 hides and shows objects, saved as workbookPr showObjects
214a67d53c feat(#1622): add Advanced Filter ribbon dialog
3379fb63a5 fix(#1031): constrain Advanced Filter copy output
0033dfcdeb Keyboard: Ctrl+Shift+A after a function name inserts its argument names
ad4422f5f6 Reject unsupported flip param in arrange.rotate
125c8b00e8 ci: switch to shared nix workflow from craft-common-actions
f1894c6da6 Merge pull request #1590 from dylanmtaylor/ci/shared-freebsd-workflow
ac8bbd84eb Grid: a cell with line breaks and Wrap Text off draws the whole string on one line (fixes #1604)
e8c6fcb8b0 XLSX: keep custom column widths that round to the default width (fixes #1607)
f3398ee218 Grid: a scrolled Table's header names and filter buttons in the column headings (#1423)
706127402a XLSX: keep header and footer pictures on save (part of #1257)
e91e7f7a68 ci: delegate FreeBSD workflow, add nix check, and remove flatpak-pages
bb685e3275 Merge pull request #1588 from marcoarnulfo/fix/filter-menu-enter-applies
81422c315d Contributors: add my name for the About window
79e8973c30 Web: keep preferences such as dark mode between visits (fixes #1562)
fda8e7b703 AutoFilter: Enter in the filter menu applies the filter and closes it (fixes #1516)
d50e32bf25 Docs: put the new sentence in the Fidelity / notes column
1ab9e60d88 Reject formula number literals too large for f64 as parse errors
9f6bd5848c Docs: update the progress docs for this change
47185eef1f XLSX export: a picture shared by several sheets is one media part (#985)
82ee02aac4 Formula parser: Excel's 8,192-character limit and postfix nesting (never crash) (#1330)
79e85c1b80 fix(edit): recalculate every cell changed by large clears (#1032) (#1128)
7a352cee09 Grid: an armed Format Painter paints whole rows and columns from their headers (refs #1211)
c0d6f290e7 Name Manager: preview a name over several ranges through parse_name
2bb222aea6 Sort and de-duplicate data.textToColumns fixed-width breaks
c6be911b99 ui: truncate long workbook titles in the title bar
883a07fb7b Keep nan/inf time and fraction look-alikes as text
27dab49e3d UI: Delete dismisses the AutoComplete proposal, and deleting text never brings it back (#1521)
98f4b9d855 Focus the Find what field when Find and Replace opens (#1518)
0ec27a6101 Open the Insert Chart dialog from Recommended Charts instead of inserting a chart (#1399)
f8cbfb7cb6 engine: sort and remove duplicates move the rows' notes and hyperlinks
e6c0f92d59 engine: a cut takes the source's notes, hyperlinks and merged areas with it
7deb382f3d xlsx: keep a table's filter criteria when the sheet AutoFilter coincides with it
18fecf8e8c engine: pageLayout.printTitles only touches the axes it is given
3f9b73b927 functions: NETWORKDAYS.INTL accepts the all-weekend string "1111111"
67be35564c Keep leading empty columns and rows when saving CSV/text
ea01ad999b fix #1443: Ctrl+Q no longer closes the window outside macOS
47268a42af UI: function help follows the interface language
b930d60bc3 #1505: keep scalar INDEX MATCH formulas scalar
e1902111d8 Read securities function dates in the workbook's date system
7f9f73d6ba fix(numfmt): share legacy colors across grid and PDF rendering
6db94d154a Calc: INDEX with one index on a 2-D reference is #REF!, as in Excel
9097170b08 XLSX: preserve carriage returns in saved text
4567aed5fb fix(engine): AutoFill refuses targets that don't hold the source in a corner
e1e02f82f1 i18n(it): Foglio previsione on the ribbon button too
a770845ebf i18n(it): align ten labels with Excel's Italian terminology
45644d3f43 Control channel: ui.dialog.confirm sends what OK sends (#1459)
348d955a0a Conditional formatting: text rules never match an error value (#1162)
2d4a537c6a i18n: add Italian (it) UI translation
370b220834 fix(solver): commit solutions and reports atomically
5bd6cc3d04 Options: Maximum Iterations and Maximum Change in File > Options > Formulas
cdc8177fae Let GROUPBY and PIVOTBY take a LAMBDA as their function
d59e1cf604 Merge remote-tracking branch 'up/main' into fix/sheet-param-honoured
bc524fa48e Merge remote-tracking branch 'up/main' into fix/conditional-format-style-colors
4d68300bc2 Add Greek (el) localization
22157433ce Fix fraction numerators saturating at u64::MAX for large values
1b4df8acc2 Refuse table names that clash with defined names or R1C1 references
9b155c48f7 Stop BINOM.INV/CRITBINOM hanging when trials exceed 2^53
f065f9168a Clean up Command Palette code
e6b6b34970 ci: add comfortable runtime limits to unbounded jobs (#1418)
be20ca163d UI: keep PivotTable field-list scrollbar at pane edge
cd94a6d7b4 Recalculation: a spill anchor given a formula that reads its old spill area sees it empty
ac7595975a Recalculation: formulas reading an array that loses a spill conflict see #SPILL!
4bfd0bc5a1 Improve Command Palette keyboard navigation and layout
ea190adad6 functions: Analysis ToolPak value arguments reject multi-cell references
01eb237209 Docs: corpus count for dropped dy…
d8c5f588 refactor: reduce cognitive complexity in options, python highlighter, i18n scanner, loop search (#2611)
f6b0cec6 Merge pull request #2619 from aiongg/g4
862dfc19 Merge pull request #2618 from aiongg/g3
1b63c3f3 Merge pull request #2617 from aiongg/g2
ecb0e546 Merge pull request #2616 from aiongg/g1
1f2da404 Merge g3 into g4
dbec5c58 Merge g2 into g3
57da3d46 Merge g1 into g2
380be36a G1: the W, W key tip opens Switch Windows through its control
5c250a7f Merge g3 into g4
c7911c83 G3: craft-libs at storytold main b926b5c0
0f5fc81a Merge g2 into g3
03167652 Merge g1 into g2
320bcfcf G1: regenerate the key tip tests
7fdceadd Merge g3 into g4
ec56e80f Merge g2 into g3
b29f05a2 Merge g1 into g2
59002470 G1: Switch Windows draws its check with the chrome fallback when no face has ✓
f102fe29 Merge g3 into g4
7085aa1c G3: build on current main
94fcbf8b G3: craft-libs at e8b4dde5 (craft-libs#340)
015b9abe Merge g2 into g3
929495e2 Merge g1 into g2
22aec7e6 G1: build on current main
903bece8 Merge upstream main into g1
42bbf6ba refactor: split complex functions for Sonar S3776 (#2612)
52cf8253 refactor: split complex functions for Sonar S3776 (#2609)
6f0e43c2 Linux: default to XWayland for file drag-and-drop on Wayland desktops (#165)
0870b1ad Merge pull request #2595 from storytold/chore/deps-safe-refresh
14dd23db chore(deps): refresh serde_json, arboard, muda, winresource, sha2
ad10881c build: pin craft-update to craft-libs main (495e597) (#2591)
ee7cbf32 build: pin craft-update to craft-libs main (495e597) (#2586)
2fbbed33 Merge pull request #783 from vangel76/fix/control-auth-777
1a36d9db feat: startup update prompt modal and direct self-updating (#2566)
41769f1d Migrate GridCraft to egui 0.37 (#2543)
3b65b9af Sonar maintainability: explicit imports, method paths, smaller functions (#2412)
4eb2fb5c Review fix for #2473: a repeated sheet name matches in any case
0665476b Merge pull request #2493 from Harrison-Booth:feat/options-iteration-fields
189c3cdb Merge pull request #2497 from marcoarnulfo:fix/full-column-extend-scroll
674e1c05 Merge pull request #2481 from marcoarnulfo:fix/trace-arrows-stay-on-traced-cell
0469b51c Merge pull request #2444 from OdooPudakMachinery:web-chrome-flag
4a44dec5 Merge pull request #2515 from Fubeo:fub/edit-note-keeps-thread
0f5227dd Merge pull request #2513 from Fubeo:fub/keep-sheet-id
97ec7653 Merge pull request #2512 from Fubeo:fub/open-saved-without-recalc
27e96a9a Merge pull request #2561 from arcanii:autosum-across-a-row
2c81adf9 Merge pull request #2557 from Silvertree2010:fix/2517-a-new-font-derived-from-the-them
9413c57e Merge pull request #2555 from Silvertree2010:fix/2407-xlsx-only-one-warning-when-sever
bd7b867a Merge pull request #2552 from Silvertree2010:fix/h2457-cli-eval-cat-print-huge-or-tiny
80ea166d Merge pull request #2551 from Silvertree2010:fix/h2446-deleting-a-row-or-column-leaves
cb286341 Merge pull request #2528 from Silvertree2010:fix/h2369-datetime-from-serial-returns-yea
39a56ee9 Merge pull request #2524 from Silvertree2010:fix/2453-row-height-dialog-uses-pixels-sh
0697abbb Merge pull request #2473 from Silvertree2010:fix/h2050-formula-with-a-sheet-qualified-r
6208f15d Merge pull request #2463 from Silvertree2010:fix/h2062-yearfrac-basis-0-counts-the-last
25d6a3a4 Merge pull request #2457 from Silvertree2010:fix/h1979-imsqrt-of-a-negative-real-return
18715419 Merge pull request #2443 from Silvertree2010:fix/h2018-isoweeknum-weeknum-21-return-wee
990aa131 Merge pull request #2428 from Silvertree2010:fix/h1934-minverse-returns-0-for-inverse-e
c9b9907c Merge pull request #2417 from Silvertree2010:fix/h1936-percentrank-percentrank-inc-perc
f86aec12 Release 0.12.1
bca67944 macOS signing: keep the temporary keychain until the build has signed with it
4995ecc6 Release 0.12.0
802c7823 AutoSum: a selected row gets its total to the right, as in Excel
85b6f564 Keep <scheme val="minor"/> on every body-font font on save
d07639c7 Warn for each skipped drawing object and chart on XLSX open
64a78a72 Print huge and tiny CLI numbers in exponent form
80e20411 Remove sparklines when their row or column is deleted
17b9f6ff Paste Name and Go To: follow-ups from the batch review (#2540)
52fa4406 Merge pull request #2538 from aiongg/dcc-batch
24e49d18 Batch: Subtotal puts summary rows below their detail in the same undo step (#2482)
850dc9c7 Batch: the cell menu offers no Show Details while a PivotTable has it turned off (#2467)
f17179ce Batch: Show Details turned off says so in plain words; the option is in the command's docs (#2461)
47fadb8d Batch: Go To lists its entries once when it opens and lays out only the rows in view (#2414)
87a649c7 Batch: Paste Name lists the names once, finds local names by hash and refuses a name it doesn't list (#2410)
77b37df6 Batch: the status bar names a circular reference by its address alone (#2510)
ffa08d3a Batch: Circular References submenu quotes sheet names that need quotes (#2501)
50c7ee39 Batch: undo, redo and rollbacks list the circular references of the restored cells (#2501)
f65e9f6b Merge upstream main into the batch
e1a12fa3 UI: theme tokens with a contrast test, ribbon overflow arrows and split button, multi-line formula bar, code editor widget (#456)
846d5b98 Merge storytold/gridcraft#2525: Ribbon: Insert › Column or Bar offers 100% Stacked Bar
6194f824 Merge storytold/gridcraft#2522: Charts: 100% Stacked Area draws each value as a share of its category's total
1e50c726 Merge storytold/gridcraft#2488: Headers and footers: printing follows the Scale with Document and Align with Page Margins check boxes
b58846a5 Merge storytold/gridcraft#2482: Outline: Settings puts summary rows above and summary columns left of their detail
17133345 Merge storytold/gridcraft#2477: Sheet tabs: drag the handle at the scrollbar's left edge to give the tabs more or less room
cb1fb895 Merge storytold/gridcraft#2467: PivotTables: right-clicking a value cell offers Show Details in the cell menu
75f7df9d Merge storytold/gridcraft#2461: PivotTables: Enable show details turns Show Details off for a PivotTable
8356b33c Merge storytold/gridcraft#2456: Fill handle: Fill Days, Fill Weekdays, Fill Months and Fill Years for a date
27416801 Merge storytold/gridcraft#2427: Keyboard: Ctrl+Shift+U expands and collapses the formula bar instead of underlining
924d36e2 Merge storytold/gridcraft#2421: Status bar: a right-click opens a statistics menu, with Numerical Count, Minimum and Maximum added
ae88b40f Merge storytold/gridcraft#2414: Go To: lists the named ranges of every sheet and the references entered, and goes to several at once
0217dbdf Merge storytold/gridcraft#2410: Formulas: F3 opens Paste Name, which inserts a defined name or pastes the list of names
91a1d18c Merge storytold/gridcraft#2510: Status bar: Circular References names a cell only when a loop is on the active sheet
58aa0f1d Merge storytold/gridcraft#2504: Circular references: Error Checking and the status bar quote sheet names that need quotes
26609732 Merge storytold/gridcraft#2501: Error Checking: its arrow opens a Circular References submenu listing a cell on each loop
44cc84ed Merge storytold/gridcraft#1809: Calc: a LAMBDA that calls itself without end answers #NUM! instead of overflowing the stack
f1b06a94 Merge storytold/gridcraft#2486: docs: Different First Page and Different Odd & Even Pages are no longer listed as missing
bb6f38d9 Merge storytold/gridcraft#2434: Tests: the engine's file-system tests each use their own temporary folder
960c64c3 Return None from datetime_from_serial when rounding carries past 9999
c44971fc Ribbon: Insert › Column or Bar offers 100% Stacked Bar
14e73dd0 Make the Row Height dialog use points like Excel
0eb2f1f6 Charts: 100% Stacked Area draws each value as a share of its category's total
4548bab2 feat(engine): open a saved workbook without recalculating it
3e6eac42 fix(engine): editing a note or comment keeps its thread
85e8f790 fix(xlsx): keep each sheet's sheetId across a rewrite
a2e4b2b1 Error Checking: the Circular References submenu scrolls
a7522461 Status bar: Circular References names a cell only when a loop is on the active sheet
1dd07b7f Circular references: Error Checking and the status bar quote sheet names that need quotes
71669dae Error Checking: its arrow opens a Circular References submenu listing a cell on each loop
0cf94762 Shift+Arrow on a whole column or row: still follow an extension that reaches the sheet's edge itself (#2451)
a2aa72c3 Docs: drop the stale Options-dialog-missing note from the Backstage row
a75d633d Shift+Arrow on a whole column or row keeps the view on the rows or columns it showed (fixes #2451)
3ef94601 Options: commit iteration fields only while iteration is on; accept the locale's decimal comma for Maximum Change
6bdde351 Merge origin/main into gc-options-iteration-fields
b745c136 Headers and footers: printing follows the Scale with Document and Align with Page Margins check boxes
9425358f docs: Different First Page and Different Odd & Even Pages are no longer listed as missing
118cd15d Outline: Settings puts summary rows above and summary columns left of their detail
010eddd2 PivotTables: the cell menu computes a report once for all its cells
b5bf14db Trace arrows stay on the traced cell when the selection moves (part of #2475)
7c10db07 PivotTables: Show Details reports the turned-off option before an out-of-date report
3d41bdb9 Sheet tabs: drag the handle at the scrollbar's left edge to give the tabs more or less room
4c0cc095 Fix parsing of ranges whose second end repeats the sheet name
28efc9da Docs: list the date fill modes in the ui-parity history row without table pipes
3fa6cb47 PivotTables: right-clicking a value cell offers Show Details in the cell menu
b4487663 Fix YEARFRAC basis 0 for February-end start and 31st end
30126a70 PivotTables: Enable show details turns Show Details off for a PivotTable
46f61578 Merge main into fix/lambda-recursion-stack
2ae23290 Docs: drop the stale missing-keys row that still listed Ctrl+6
92d2b989 Fix IMSQRT leaving a stray real part for negative reals
00edfd06 Fill handle: Fill Days, Fill Weekdays, Fill Months and Fill Years for a date
86064077 Fix ISOWEEKNUM/WEEKNUM(…,21) for the first days of the calendar
276cd0fe web: parse ?chrome= so an embedding host can leave out the title bar and File tab
3099df93 M7: verify Agile encryption's dataIntegrity before returning plaintext (#2425)
d0fe8b64 Tests: the engine's file-system tests each use their own temporary folder
6cb32201 Scale MINVERSE rounding cutoff to the input matrix
07890b47 Keyboard: Ctrl+Shift+U expands and collapses the formula bar instead of underlining
10bec748 M6: misc hardening — unbounded picture cache, stats walk, signing tmpdir, web clipboard, dash budget, fs cycle, rezip loop (#2422)
a005d823 M2.9: close protection gaps a trusted script or other sheet would slip through (sec scan findings 17,20,24) (#2420)
48d9ba26 M2.9: harden native file open/save (sec scan findings 15,22,25) (#2418)
89d8e819 M2.9: bound print/export/autofit work in the engine (sec scan findings 18,21,27,28,30) (#2416)
6fac430f M2.9: cap xlsx import work and gate hostile datetime field lengths (#2413)
7bc390d0 Status bar: a right-click opens a statistics menu, with Numerical Count, Minimum and Maximum added
14415f41 Fix PERCENTRANK returning #NUM! for very large significance
f284f6a8 M2.9: budget lambda work and bound wildcard substring search (#2415)
983d3d7e Go To: lists the named ranges of every sheet and the references entered, and goes to several at once
00b65d7e Merge main into fix/lambda-recursion-stack
3557b9f6 Formulas: F3 opens Paste Name, which inserts a defined name or pastes the list of names
72c1d57d Review fixes for #2393, #2394, #2397 and #2399
beda2a44 Merge PR #2394
ec841a01 Merge PR #2388
edea52e6 Merge PR #2402
2c6e529b Merge PR #2400
d743f219 Merge PR #2399
f9af0d88 Merge PR #2397
14d6dabc Merge PR #2396
05b77987 Merge PR #2393
deb16795 Merge PR #2392
6ead1fb5 Engine: building blocks for multi-command actions (undo groups, recording buffer, document trust, chunked hidden names) (#462)
c22787e5 Merge main into fix/lambda-recursion-stack
e93d15b5 Contributors: credit helenkwok as Helen Kwok
b389d906 XLSX: write accounting formats 42 and 44 with their code
b47c83f6 Reject unmatched '.' and ',' in NUMBERVALUE text
35067fa9 Read accounting negatives like $(1,234) in number text
86f41145 Merge remote-tracking branch 'origin/main' into gc-lookup-exact-number-compare
e883c84e Merge origin/main into the Analysis ToolPak value-argument branch
a80c7ff5 i18n: Japanese labels for the iteration settings live in ja.rs
9fd7693d Merge fork's border keytips fix into main
1062604f i18n: Russian Maximum Change reads as a change limit
ac890b83 Merge origin/main into gc-options-iteration-fields
1ce4781d Accuracy: PMT to Excel's last bits via ln_1p/exp_m1
74b2bda7 Merge origin/main into gc-index-2d-ref-one-index
b8771d51 Merge pull request #2390 from dylanmtaylor/ci/sonar-main-not-cancelled
2329507a ci(sonar): don't cancel superseded runs on main, so coverage is published
4b2ee2e2 Conditional formatting: New Rule remembers its sheet by name, so moving or inserting sheets while it is open keeps the rule there (#2348)
7cf44d0f Integration and review fixes for #2367, #2369 and #2387
45f06f50 Conditional formatting: New Rule keeps the range it was opened for when pointing on another sheet (#2348)
81fd0f6f Merge PR #2387
68da23e2 Merge PR #2386
fba4224f Merge PR #2375
2a4cc2a5 Merge PR #2369
ca0c3afb Merge PR #2367
87935eb2 Merge PR #2366
d5aa6fbc Conditional formatting: New Rule's formula box takes references clicked or dragged on the grid (#2348)
c746eea8 Fix MOD returning wrong sign and magnitude for tiny divisors
15a705e2 i18n: missing translations are reported, never a failure (#2383)
43a5a3c4 PivotTables: Show Details checks the report is up to date before looking at the cell
530a8cc8 CI: the gate builds with the release craft-fonts pin (#2381)
7111812b PivotTables: Show Details refuses an out-of-date report, and reports its errors instead of editing the cell
08820cb4 CI: run the gate through craft-common-actions' shared gate.yml; FreeBSD nightly and on release (#2338)
0c14f595 PivotTables: Show Details, double-click a value cell to list its source records on a new sheet (#2364)
aa8399be Grid: #### is sized by the width of #, so it fits its cell in every font (#2378)
49f26bdd Fill handle: the Auto Fill Options button on a right-to-left sheet is checked in screen space (#2368)
39450b80 Hyperlinks: Ctrl+Alt+click on a link extends the selection again (#2368)
33a45130 Packaging: pin the signing client and appimagetool, and check their hashes (#2073)
a7608ada CI: one test binary per crate, nextest, line tables only (#2372)
45ec9dfb Build the saved UiState in the test with struct update syntax (clippy field_reassign_with_default)
8f2a60d1 Keep the in-cell editor the cell's width while the text fits (#2336)
bdf8b8cc Use chrono instead of hand-rolled UTC conversion (#2121)
599762f5 AutoFilter: grow the range when a value is entered in the row below it (#2342)
ba980399 Keep the in-cell editor wide enough for the next character at high zoom (#2336)
168acc58 packaging: shell, PowerShell and web page fixes (SonarCloud S7688, S7679, S7682, S8677, S7926) (#2323)
a0ceea14 Open on the Home tab every launch, as in Excel (fixes #2329)
9135c7f6 Ribbon: fall back to Home when the active contextual tab is gone (fixes #2329)
f1e29fa8 Review fixes for #2267 and #2292
fe2f9a75 Merge PR #2357
a09454e2 Merge PR #2315
bcf55f0f Merge PR #2274
4b8725b2 Merge PR #2314
e92d8b4e Merge PR #2295
817cf804 Merge PR #2292
2d0fe1f0 Merge PR #2289
d1399ff2 Merge PR #2279
67f13d80 Merge PR #2275
50e5a3e9 Merge PR #2267
a725f2dc Merge PR #2266
27a33f1e Merge PR #2260
5d0fc0b0 Merge PR #2245
3c62ae27 Merge PR #2244
073ae2df Merge PR #2233
8eda5775 Page Up into frozen rows scrolls the rows below back to the top
7c1ec1df Fill handle: test the Auto Fill Options button on a right-to-left sheet, merge the duplicate fill handle row (#1403)
60776ff4 Hyperlinks: test that Ctrl+click beside the link text still extends the selection (#1198)
d19f6560 Fill handle: test the Auto Fill Options button's workbook-changed rule, report an undo error, document it (#1403)
6febf544 Fill handle: Auto Fill Options button after a drag offers Copy Cells, Fill Series and the formatting modes (#1403)
d046ba6a Hyperlinks: Ctrl+click on a link follows it instead of extending the selection (#1198)
ac8da7d4 Release 0.11.1
10fb7d56 macOS packaging: retry stapler when Apple's CloudKit drops the connection
73af8c6a Release 0.11.0
09f78cb3 Tables: Format as Table inside a table restyles it
450f4575 Calc: a formula calculated inside another one shares its stack budget
a8e2ed31 Add extra Japanese translations for UI elements
a0fa6c6e Merge main into fix/lambda-recursion-stack
9cbb674c Print numbers near f64::MAX in a form that parses back
1da640ab Merge upstream/main into fix/control-auth-777
d1db71d0 Merge pull request #2209 from Higgs32584/fix/2178-script-trust-gate
2ed3df2b G4: two windows on one workbook without copying it; Arrange All
b5b39693 scripts: trust gate review fixes (#2178)
6dedb931 Merge remote-tracking branch 'origin/main' into fix/2178-script-trust-gate
d4db58cd G3: feedback from a command that switched windows shows in the window it left active
5bd5d241 G3: a native window per workbook window
45d1d1ac G2: windows on workbooks in the engine; New Window shares the workbook
74f29a74 docs: Ctrl+Shift+A (argument names) is no longer listed as missing
e6ffca60 view: hidden outline symbols answer no clicks; parity rows updated
5bcbaacc Snapshot: catalog installed fonts before rendering
840ba5c3 view: Show Outline Symbols (Ctrl+8), read and written
99f92f4a range.setValues: `parse: false` stores a string as the text it is (#2255)
843c9b84 ui: a too-wide number in a repeat-fill format shows ####
56207f2d run --script: a line's unknown key stops the run (#2256)
a1c84547 Merge pull request #2249 from storytold/readme/app-icon
7ed49469 README: the app icon above the title
8307d3cb Treat empty instance_num in TEXTBEFORE/TEXTAFTER as 1
c39d2ad1 Keep '!' in structured-reference columns intact on XLSX save
742a6e85 functions: REGEXREPLACE bounds each replacement as it expands it (#2162)
e177bf1c calc: hardening: overlong digits, NaN indexes, REGEXREPLACE output (#2163, #2162)
4bafd4e8 Docs: Switch Windows and drafts kept in their workbook (UI parity, progress log)
a0d54b49 A refused cell draft stops the command; an untouched F2 draft changes nothing
1794c389 Keep the cell draft in its own workbook; Switch Windows lists open workbooks
b9801f3f Romanian: translate Options|Editing; 22 strings main added since (sheet tab menu, account, chart and error-checking labels)
06920de8 Merge pull request #2226 from aiongg/next
6f10378b Integration: #1320 font-measure AutoFit tests in their own test binary
c4c7f747 Integration: keytip NR test gives the sheet data so the Insert Chart dialog opens
818175f5 Integration: Japanese catalog covers the reference catalog's new keys; clear the texture delta in the completion test
c7016fb7 Integration: fix struct literals and call signatures after combining tracks (Series.quartiles, Comment.note_box, Image data Arc, signature language)
cde364f2 Integration: cargo fmt after combining tracks
d5cdd2ea Integration: track t15
561382cc Integration: track t14
ca1cdd42 Integration: track t13
c7fd66d8 Integration: track t12
9350ab1d Integration: track t11
4c5c345c Integration: track t10
6dda6be2 Integration: track t09
d3201e7c Integration: track t08
a680ac59 Integration: track t07
cfda01c8 Integration: track t06
4c81d658 Integration: track t05
512b2aa9 Integration: track t04
b0b64091 Integration: track t03
54d0f7cf Integration: track t02
f193f0d8 Integration: track t01
d056570d Integration: cargo fmt
21c3ec24 Integration: cargo fmt
ec61d59b Integration: cargo fmt
55aeed6f Integration: cargo fmt
1b4b5122 Integration: #1912 restore the end of add_page lost in the merge resolution
b35b5a8b Integration: cargo fmt
7b47c5a8 Integration: #995 test builds Image.data as Arc<Vec<u8>> (after #1629)
55877df8 Integration: cargo fmt
f02f4469 Integration: #1194 drop the duplicate Cut and Copy German arms (#1830 already translates them)
4ac3f2fa Integration: cargo fmt
1d9b29ff Integration: cargo fmt
c37298b4 Integration: #1151 test literal gains the category_levels field from #1088
36c9df45 Integration: order localization-parity revision rows newest first
47bf083d Integration: #2116 move name_sort_key and its test into the existing tests module
a1c1fc05 Merge PR #2116: Backstage: list the languages alphabetically by their own name
d4eabcee Merge PR #2106: Translate form-dialog field labels, choices and notes
10ac46c2 Integration: #2102 fill Romanian catalog gap (Options|Editing, English text)
0eeaeec0 Merge PR #2102: Romanian (ro) interface language
e72d5f29 Merge PR #2061: i18n: Dutch (nl) interface language
905ef6a6 Integration: #2000 remove duplicated Spanish financial alias block
4286ac29 Merge PR #2000: Spanish formula aliases for financial functions (#1986)
7649a762 Merge PR #1772: i18n: add Vietnamese interface translations
e4c406db Merge PR #1194: fix(ui): ribbon tooltips show each platform's shortcuts (Ctrl+B on Windows, ⌘B on macOS) (#1191)
8bfe3102 Integration: #1770 register Ukrainian (Language::Uk) and fill 573 missing keys with English text
a9a8fe7d Integration: #1754 translate the sheet-tab Delete button; Spanish Hide and Autoguardado; test that the sheet-tab and AutoSave labels translate in es, de, fr, ko, ru, zh, sr
3a01ce68 Integration: i18n drop duplicate Unprotect Sheet… entries (added by #1373 and #1754)
9d325218 Merge PR #1180: fix(ui): menu items highlight under the pointer (#1174)
1316d398 Merge PR #1151: Charts: a huge trendline forecast no longer collapses the chart (#1148)
56c31b0b Merge PR #1993: Grid: the selection outline follows a mouse drag at once
169c78dd Merge PR #1111: Respect workbook structure protection in sheet rename, move, copy, hide and unhide (#1049)
d8b73ecb Merge PR #1110: Size the list validation dropdown to up to 8 rows (#1089)
f5b35fb3 Merge PR #1109: fix(ui): commit a pointed formula on the sheet it was started on (#996)
470a2ae2 Merge PR #1765: Sheet protection: obey the Sort and Use AutoFilter boxes
ad1899e1 Merge PR #1770: Add Ukrainian localization (uk.rs)
01485e2b Merge PR #1838: Added multi-column/row selection in formulas & column/row selection highlighting.
37bf37d1 Merge PR #1103: Keep chart cache point positions when a reference has blank edges (#1015)
f4f18bb3 Merge PR #1701: XLSX: new workbooks get <fileVersion appName="gridcraft"/>
31d62214 Integration: #1725 prefill Remove Duplicates with the current region when only the cursor is placed
59e6f123 Integration: #2095 error-check colours come from theme tokens
ad7fe4ed Merge PR #1095: fix(grid): keep cursor stable during cell dragging (#936)
857bdae0 Merge PR #1692: XLSX: keep Japanese phonetic runs on open and save
46ddd610 Merge PR #1732: i18n(ja): translate the dialog, message and menu strings (943 entries, matching the pt-BR coverage)
48285a8f Merge PR #1754: i18n: translate sheet tab context menu and AutoSave toggle (fixes #1537)
e7380491 Merge PR #1088: Charts: multi-level category axes (year beside month) read, drawn and written back
75f6c92e Integration: #2086 test that the strip beside the column headings is filled in dark mode
6432253d Integration: #973 move the sheet-tab copy row from the element table to the change history
cd3fcfd2 Merge PR #1083: Colour menus: More Colors… and Recent Colors (#928)
c9941763 Integration: #2093 move the paste_special_shortcuts doc comment back onto its function
d44c08c3 Merge PR #2093: Paste Special: the reference app's two-column layout, translated, Paste Link button
6370fd22 Merge PR #1693: Charts: series that refer to defined names (`[0]!Name`) plot their data, and are saved qualified
e6ccfba9 Merge PR #2142: PivotTable Fields pane: scan the source once per change, not every frame
fccca928 Merge PR #1631: Memory: floating pictures' textures are bounded, sized to what is drawn, and dropped with their workbook
431aaaaf Merge PR #2022: Reject unparseable conditional-format formulas (#1999)
70426fc9 Merge PR #1657: Cell editor: the caret contrasts with the cell's fill
8ec29a8b Merge PR #1652: Fill handle: right-drag opens the fill menu (Copy Cells, Fill Series, Fill Formatting Only, Fill Without Formatting, Series…)
d97f6174 Merge PR #1946: XLSX: keep cell fonts' charset (Arabic 178) and family on save
8e2974cc Merge PR #1629: Memory: undo steps share picture and macro bytes instead of copying them
42768628 Merge PR #1473: i18n: add Italian translation
826a22dc Integration: #2131 remove a leftover conflict marker line in ROADMAP.md
cba89cfd Merge PR #1066: Engine: formulas.evaluate refuses what cell entry refuses, saying why
90d4c3af Merge PR #1981: Desktop theme: the watcher's link has a type off Linux, so the gate passes there
608925af Merge PR #1979: Seed the Sort dialog column from the active cell (#1906)
ced3f7ce Merge PR #1912: Print CJK text with a CID font instead of question marks
7fd1553a Merge PR #1626: Keyboard: Ctrl+6 hides and shows objects, saved as workbookPr showObjects
a8f74730 Merge PR #1056: Fix Command-click and Shift-click references during formula entry
929c506d Merge PR #2100: Fonts: a cell font named in another language matches its installed font (fixes #1898)
8590dca0 Merge PR #2207: clipboard: bound HTML colspan/rowspan expansion (#2171)
7221e11f Merge PR #1945: XLSX: keep the theme's per-script fonts (<a:font script="Arab">) on save (stacked on #1740, included)
d0394a0f Merge PR #2005: AutoFill refuses a target that doesn't hold the source in a corner (whole rows into whole columns aborted the app)
d67193f4 Merge PR #1685: #1447: a PivotChart's link names the workbook
75e84a26 Merge PR #1612: Grid: a scrolled Table's header names and filter buttons in the column headings (#1423)
82391415 Merge PR #2200: core: iterative number coercion for nested parentheses (#2180)
07f806d3 Merge PR #2098: docs: fix Trunk website link (#2076)
635056bd Merge PR #2131: Print: JIS B4/B5 and Japanese paper sizes (はがき・封筒・B6)
edb214b2 Merge PR #1725: Prefill the Remove Duplicates range from the selection
78b7ef49 Merge PR #1889: Docs: correct stale chart round-trip notes
7963cdb2 Merge PR #1758: Fonts: render Lao text with an installed Lao face instead of tofu
7269b12f Integration: #1976 scenarioShow writes stored numbers as values
c03d4a88 Merge PR #1570: XLSX: keep dynamic-array cell metadata (cm) on save
7e74b35a Merge PR #2095: Number Stored as Text: green indicator, warning button and Convert to Number (#1994)
66e6c9f5 Integration: #1468 fill Greek catalog gap (Options|Editing, English text)
508d230f Merge PR #1683: #1447: two value fields without a column field hide the Values row
5d0d1c2b Merge PR #973: Sheet tabs: Ctrl-drag (Cmd or Option on macOS) drops a copy of the sheet
05ecd6d4 Merge PR #1628: Add Advanced Filter dialog and fix copy-to data loss
2676c089 Merge PR #1671: fix: theme PivotTable field group buttons
8de6c837 Merge PR #1560: ui: truncate long workbook titles in the title bar
7768f566 Merge PR #1580: Calc: CELL("filename") names the workbook's file
7c94f9c9 Merge PR #1512: Reject formula number literals too large for f64 as parse errors
6b041109 Merge PR #1559: Sort and de-duplicate data.textToColumns fixed-width breaks
d20fe88b Merge PR #1485: UI: keep PivotTable field-list scrollbar at pane edge
9c2cc2bf Merge PR #2094: Dialogs: OK and Cancel in a row, so form dialogs fit their content
ee908a21 Merge PR #1468: Add Greek (el) interface localization
2fbb45ea Merge PR #2049: Word-wrap-aware automatic row height (#1969)
6f62e747 Merge PR #1753: Docs: §6's calculation bugs have all landed
881b3f5f Integration: restore sync_github_name for marcoarnulfo after merging the contributor entries
eaf9a3f2 Merge PR #1705: Fonts: find the cell, serif, mono, Thai and Hebrew faces in Fedora's package folders (#1694)
524ab89a Merge PR #1379: engine: subtotal honours header:false instead of dropping the first data row
6e66756c Merge PR #1976: Enter bare numbers in Percentage-formatted cells as percents
ff546d8f Merge PR #2090: fix(ui): Esc and Enter close a data validation alert, not the edit behind it, and the keyboard goes back to the entry (#2089)
44320b39 Merge PR #1648: fix(xlsx): bound repeated column expansion
c8a20cfa Merge PR #1674: contributors: add Harrison-Booth
0c45bd46 Merge PR #1937: Keep date text with signed parts like +3/4/2026 as text
05e4b5e3 Merge PR #2086: Grid: paint the scrollbar's column beside the column headings (white corner in dark mode)
7a016c2d Integration: #1531 fold the sheet filter into a table only when both start at the same column
46647fd6 Merge PR #1474: Conditional formatting: text rules never match an error value (#1162)
013ead73 Integration: #2033 drop the dated history from the auto-fit comments
2aec7f2d Integration: #1365 kittest for the font dropdown's filtered highlight and cleared filter
aab44d2c Merge PR #1535: engine: sort and remove duplicates move the rows' notes and hyperlinks
5c1b1718 Merge PR #1738: Keep chart source range in step with inserted and deleted lines
3ed16929 Merge PR #1320: AutoFit Column Width measures text in the font the grid draws it with
2aaa0911 Merge PR #1669: macOS: bold interface text draws Cyrillic е open, not like ө
e85afa6f Merge PR #2084: Right-click on a chart opens the chart's menu, not the cell's (fixes #2067)
d83dc11f Merge PR #1695: Charts: box & whisker charts honor their quartile method
6d4e62d1 Merge PR #2032: Formula entry: an incomplete formula's error describes what was typed (fixes #2030)
4e74bb76 Integration: #1414 kittest for command search keyboard navigation
994b2e66 Merge PR #1744: Ctrl+Alt+letter that types a character no longer triggers the Ctrl shortcut (#1530)
4fd4d39a Merge PR #1308: engine: refuse removeDuplicates with no valid column instead of deleting all rows
26c6e4ca Merge PR #1621: Reject unsupported flip param in arrange.rotate
0118413c Merge PR #2080: HTML export: place pictures and charts at their anchors
b17f47b2 Merge PR #2033: Row auto-fit: count line breaks only in cells that wrap
cede13d0 Merge PR #1527: engine: pageLayout.printTitles only touches the axes it is given
5f4309e4 Merge PR #1653: Charts: insert.chart builds a series from every area of a multi-area range
66c64a93 Merge PR #2019: Formulas: the reference app's longest legal operator chain (4,096 operands) no longer crashes entry or save
c31e25b3 Merge PR #1568: calc: bounded references up to 1,048,576 cells keep their full shape
e49b2d88 Integration: #1550 keytip NR expects the Insert Chart dialog
c29cac50 Merge PR #1477: Control channel: ui.dialog.confirm sends what OK sends (#1459)
0e298839 Merge PR #1292: Preserve hyperlinks in PDF export and support PDF in CLI convert
a2314b54 Merge PR #1630: Memory: interface fonts are read once and shared with egui, not copied into it
77b86139 Merge PR #1299: Filter: count empty text and ="" results as (Blanks)
c5007d55 Merge PR #1615: XLSX: keep custom column widths that round to the default width
faef39cc Merge PR #1600: XLSX: keep header and footer pictures on save
41bf1f0e Merge PR #1547: UI: Delete dismisses the AutoComplete proposal, and deleting text never brings it back (#1521)
8991b7d0 Merge PR #2150: Table Design: draw the Table Styles gallery in the ribbon (#2148)
3af424f7 Merge PR #1624: Keyboard: Ctrl+Shift+A after a function name inserts its argument names
195bd22a Merge PR #2038: Fix WebGL startup on devices with lower GPU limits
b4980ebd Merge PR #1734: fix(web): clean up print iframe and blob resources
10746f8e Merge PR #1614: XLSX: a note keeps its box's place and size through open and save (#1608)
d691e95f Merge PR #1285: Remove Duplicates, Filter and Subtotal: a Sheet! prefix on the range works on that sheet
c6fb01ff Merge PR #1596: Contributors: add Marco Arnulfo
4a8765aa Merge PR #970: Control: Go To and Select over the control channel scroll the active cell into view
f8c9f87f Merge PR #913: Keyboard: Enter after a run of Tabs goes to the next row in the column the run started from
b40c0a6d Merge PR #2069: Use scientific notation when number_to_text rounds up to 1e15
87df1947 Merge PR #1284: Sort: a Sheet! prefix on the range sorts that sheet, not the active one
a9e20d81 Merge PR #905: Keytips: Alt, F opens the File view, and its F letters still run
d5e2b2fc Merge PR #1971: Control channel: a request its sender gave up on is not run later
d26bbe34 Merge PR #1085: Format: Row Height and Column Width say pixels, and take points like the reference app
7da18f74 Merge PR #1942: CSV import: read Windows-1256 Arabic files as Arabic
cc76df40 Merge PR #2001: Formula editing: arrow pointing restarts from the edited cell after typing (#1949)
b388aaa2 Merge PR #1998: ui: language command docs and error list every language
1aa5d4ea Integration: #1996 same_name compares ASCII names without allocating
2023b964 Merge PR #2201: calc: cap array broadcast result size (#2182)
f68f1e48 Merge PR #1414: UI: Improve Command Palette keyboard navigation and layout
8709b416 Merge PR #1525: Keep leading empty columns and rows when saving CSV/text
33b6dfd4 Merge PR #1552: Keep nan/inf time and fraction look-alikes as text
bdb03349 Merge PR #1930: Accounting format: the documented currency `symbol` is honoured
0bf7d40f Integration: #1534 remove the What::Hyperlinks paste-special target
b10e41c1 Merge PR #1726: Fail CLI checks on incomplete or empty input discovery
9d1f5503 Merge PR #1438: Fix fraction numerators saturating at u64::MAX for large values
43cd35d4 Merge PR #1263: Bound Undo history growth after bulk edits
39add6b7 Merge PR #2026: Linux: time out the desktop theme's portal read
69f6ea36 Merge PR #1529: fix #1458: one reference-app sheet-name quoting rule for formulas, pivot sources and ADDRESS
5186b9c9 Merge PR #1523: UI: function help follows the interface language
4c3dc617 Merge PR #1365: Fix font dropdown list resizing and keyboard up/down navigation
8daa1f41 Merge PR #1731: Move PivotTables with their cells on row/column insert and delete
cd5d2174 Merge PR #1326: Reject a list data validation that has no formula1 (#1303)
cfd3e789 Merge PR #1331: Form dialogs open ready to type (Column Width, Row Height)
0592dd0a Integration: #1091 fill Polish catalog gap (Options|Editing, English text)
0e6b31ab Merge PR #1996: calc: LET and LAMBDA names ignore case in any script
71162529 Merge PR #1995: Persist the AutoSave preference across restarts (#1901)
8daecc77 Integration: #1975 remove stray empty file '=560'
9e56ed38 Merge PR #846: Closing the window asks to save unsaved workbooks
4cdffe45 Merge PR #1728: Use the platform clock for UI timing on the web
2c10a8da Merge PR #759: Names: a name over several ranges reads its top-level commas as unions
15dfbef5 Merge PR #2195: calc: cap LINEST-family regressor matrices (#2177)
cacb91d2 Merge PR #1520: fix #1443: Ctrl+Q no longer closes the window outside macOS
708c82cf Integration: #1059 delete_areas accepts a single row or column
c8e0323c Merge PR #1975: Select precedent/dependent cells with Ctrl+[ / Ctrl+] (#1865 part 1)
56cccd1f Merge PR #2194: calc: bound SUBTOTAL/AGGREGATE input work (#2175)
93517ccf Merge PR #1500: Fix number-format palette colours in grid and PDF output
1f9696d0 Merge PR #1958: Translate and standardizes UI error feedback by locale
3ad6034f Merge PR #1924: Grid: row and column heading labels grow with the zoom
ad490a13 Merge PR #1735: Analysis ToolPak: moving-average standard errors use a running sum (#1043)
cbf13a4c Integration: #1236 keep the sys-cjk-han-zh sample string at 页面布局 客户端配置
f8b75473 Merge PR #1709: Rows: a big font isn't counted twice when the sheet's default height already fits it
62c70242 Merge PR #1672: Keep overflow text visible when its source cell scrolls out of view
51401a38 Merge PR #1534: engine: a cut takes the source's notes, hyperlinks and merged areas with it
6f8b6c33 Integration: #1225 write a dxf's border before its protection
36763fb6 Merge PR #1236: Fix native CJK fallback paths in Flatpak
8fa5035b Merge PR #1277: Zoom dialog: the reference app's layout, current zoom pre-selected, Fit selection (#930)
013f60a8 Merge PR #1514: Fix scalar INDEX/MATCH XLSX export
32faa4f1 Merge PR #1661: Merged cell with Wrap Text: auto-fit skips it, so the text draws and the row keeps its default height
ee546462 Merge PR #1372: Edit: text that would parse as a number or formula keeps its quote prefix in the editor (#1362)
8d1263a0 Merge PR #1618: Grid: a cell with line breaks and Wrap Text off draws the whole string on one line
0f27cef4 Merge PR #1364: engine: keep case-insensitive replace from dropping text when folding shifts byte boundaries
6139ef75 Merge PR #1724: Tables: add the missing Resize Table button (#935)
6735e9e7 Integration: #451 qualify the run-stop row through value_ref
3eda63d5 Merge PR #1706: Reject table.resize when the new range overlaps another table
604d85e2 Merge PR #1531: xlsx: keep a table's filter criteria when the sheet AutoFilter coincides with it
9f03d2cd Merge PR #1434: Refuse table names that clash with defined names or R1C1 references
040d7781 Merge PR #1375: Header menus: Format Cells… for the selected rows or columns
ccbf28fe Merge PR #1589: Web: keep preferences such as dark mode between visits
e9479d21 Merge PR #1360: engine: keep AutoFill text series from panicking or wrapping on i64 overflow
675d96ef Merge PR #1373: Protection: Protect Sheet entries unprotect, selectLockedCells enforced (#1346)
5276fce0 Merge PR #1363: Context menu: the right-click that opens it doesn't close it
0cc4798c Merge PR #1650: fix(ets): avoid repeated scans while interpolating gaps
5b2a67c2 Merge PR #1252: Dialogs move by their title bar instead of staying pinned to the centre (fixes #1250)
696555f4 Merge PR #1332: Keyboard: Alt+= no longer starts an edit with the `=` it types
0087afce Merge PR #1230: Journal: cap by serialized size and keep a recording's start through trims
240e773e Merge PR #1905: Keep the in-cell editor at the cell's height for one line
38fb9794 Merge PR #1329: Slicer: find a named table on any sheet
93de710d Merge PR #1306: Show dynamic array source formulas read-only in spill cells
78225db6 Merge PR #1108: Refuse a cut-paste whose destination does not fit instead of dropping cells (#997)
0b573362 Merge PR #1059: rows/cols parameters: accept a single row or column
02640d66 Merge PR #1495: XLSX: preserve carriage returns in saved text
02e1828c Merge PR #995: XLSX export: a picture shared by several sheets is one media part
70451463 Merge PR #1550: Open the Insert Chart dialog from Recommended Charts instead of inserting a chart (#1399)
90cdb12f Merge PR #1470: fix(solver): commit solutions and reports atomically
ee6dead3 Merge PR #1057: Flash Fill: read the text cells show
49328f80 Merge PR #1381: engine: rebuild cell-store bands and counts when importing a JSON workbook
0d741d97 Merge PR #1510: Calc: a dynamic array of one value still anchors a spill range
9a22d1e6 Merge PR #1548: Focus the Find what field when Find and Replace opens (#1518)
a512a6a8 Merge PR #1117: Fix table without header: re-point references when the data moves down (#1030)
2a3ea02e Merge PR #1526: functions: NETWORKDAYS.INTL accepts the all-weekend string "1111111"
806a439e Merge PR #1507: Read securities function dates in the workbook's date system
83195870 Merge PR #1215: File: Save a Copy asks where to save a bare name instead of writing it to the working directory
4f711194 Merge PR #951: fix(fill): respect the workbook date system in monthly AutoFill
116cc869 Merge PR #1371: Keep Middle/Bottom vertical alignment for wrapped text taller than its row
00fd1e7a Merge PR #1428: Recalc: formulas reading an array that loses a spill conflict see #SPILL!
011ae726 Merge PR #1469: Let GROUPBY and PIVOTBY take a LAMBDA as their function
4fd76575 Merge PR #1068: Ribbon: more currency symbols in the Accounting Number Format menu
941da333 Merge PR #1432: Stop BINOM.INV/CRITBINOM hanging when trials exceed 2^53
522b8a1f Merge PR #1225: XLSX: keep a dxf's protection, font size and face, and the font parts it turns off
d34e3db0 Merge PR #949: Sheet tabs: New sheet (+) right after the last tab, the strip capped at 60%
e51bc1ab Merge PR #1136: Grid: per-frame work no longer scales with the whole sheet (#1098)
8e931b24 Merge PR #898: UI: File › Account shows the version, platform and licence, with an About GridCraft button
7f9cf33b Merge PR #632: Header & Footer dialog opens on the saved header and footer
a3baf552 Merge PR #1281: N() converts a computed array element by element, so it works inside SUMPRODUCT
91af0c60 Merge PR #952: Ribbon: Font Size is a box you type into, the sizes behind its arrow
7bf0c8db Merge PR #1249: Headers: mark hidden columns and rows, split cursor and double-click to unhide (#1247)
4ec2de25 Merge PR #1248: Opening an XLSX with a part over 512 MB says how to get the data in
2cbd39ca Merge PR #1223: Sheet tabs: right-clicking a tab activates its sheet
2c73c2b1 Merge PR #1214: Grid: an armed Format Painter pastes onto the next cells clicked or dragged
1f1be405 Merge PR #1427: Recalc: an anchor's new formula no longer reads its old spill area
4434e142 Merge PR #1380: xlsx: keep every property of the default cell format when importing a file
ccc0e8cf Merge PR #885: Row, column and freeze commands act on the sheet they are given
c4389fca Merge PR #701: Keep sheet navigation on visible worksheets at workbook boundaries
cedaa469 Merge PR #1156: XLSX: [Content_Types].xml is the first zip entry, workbook parts precede document properties, so libmagic detects the file type (#1090)
947930e8 Merge PR #584: Refuse inserting cells that would push values off the worksheet (#580)
c470450e Merge PR #1091: i18n: add Polish (pl) interface, full catalog (970 labels)
ed4b4e1c Merge PR #663: i18n: Turkish (tr) interface language
0e077cfd Merge PR #1974: In-cell editor: a Wrap Text cell edits wrapped at the column width (#1970)
f55cbcd0 Merge PR #1237: BAHTTEXT: a final one after the millions reads เอ็ด
bd4c8752 Merge PR #884: Conditional formats: hex colours in a custom style, and no more silently empty or never-matching rules
8a7f0348 Merge PR #1120: Open notice: do not promise to keep macros that were dropped (#1024)
8041fbfc Merge PR #451: perf: fill-handle double-click scans a dense neighbour column ~2.4x faster
91be1339 Merge PR #1114: Read date text arguments in the workbook date system (#1038)
34de196c Merge PR #1119: Fix xlsx: combine escaped UTF-16 surrogate pairs when decoding strings (#1025)
a0a4b6a7 Merge PR #1105: Fix row keys merging distinct text rows in UNIQUE and grouping (#1012)
2c22070a Merge PR #1060: LAMBDA helpers: #CALC! for nested arrays, #VALUE! for wrong parameter counts
307b25dc Merge PR #488: Build: the ui-egui build script reads CARGO_MANIFEST_DIR when it runs
a48f418a Merge PR #831: i18n: test that translations keep the shape of their English
df39416e Merge PR #1115: Cap CSV import fields per record at the worksheet column limit (#1037)
340ce131 Merge PR #1340: calc: calculate long dependency chains with bounded stack
136a8fa0 Merge PR #1337: Selection: whole columns and rows don't widen to merged cells
ec5e9396 Merge PR #1104: xlsx: keep the first group's series kind when importing a combination chart (#1014)
a4c53ad0 Merge PR #1061: Recalc: an array that spills as before doesn't requeue its dependents
954f30f9 Merge PR #1058: Format Cells: take the documented camelCase style keys
f8f7193f Merge PR #1084: Data validation: a list typed without quotes is saved as a quoted list, and an unknown type is refused
0288ad2f Merge PR #630: Cap queued pointer events from ui.click/ui.drag control requests (#525)
9aed6fb5 Merge PR #1102: CSV export: check the size cap before each field, not after the row (#1023)
f295fa09 Merge PR #629: Make check --json list warning messages instead of a count (#526)
06b7d09a clipboard: drop wall-clock timing from span test (clippy)
5392d95b scripts: require workbook trust before running embedded scripts (#2178)
b817c04a clipboard: bound HTML colspan/rowspan expansion (#2171)
836b2698 calc: cap array broadcast result size (#2182)
5b908c04 core: iterative number coercion for nested parentheses (#2180)
be94b011 calc: bound SUBTOTAL/AGGREGATE input work (#2175)
e1b8aad1 calc: cap LINEST-family regressor matrices (#2177)
912b817a security: enforce HTTPS on curl downloads (SonarCloud S6506) (#2188)
c3184b74 Address CodeRabbit review: borrow the workbook and keep both swatch outlines (#2148)
8ae67c55 ci: add sonar-project.properties for CI-based analysis
eb48beff ci: add SonarCloud scan via shared reusable workflow
a9223eab Table Design: draw the Table Styles gallery in the ribbon (#2148)
7ba381d9 i18n: Turkish (tr) interface language
0812d3ae PivotTable Fields pane: scan the source once per change, not every frame
2ebdf164 Release 0.10.0
b0926335 Print: Japanese Envelope #4 is 90×205 mm and add B6 (ISO) to the Size menu
f91f7c05 Print: JIS B4/B5/B6 and Japanese paper sizes
97aa04dc i18n(ja): add the §11 revision row and align the docs header dates
e42ebf93 XLSX: keep a phoneticPr that has no rPh runs, and document the limits
377bb922 Update i18n.rs
c812881f Backstage: list the languages alphabetically by their own name
c26290cd Show form notes that contain a pipe as they are
43e64c50 Romanian: print settings and status, five form labels; Page Setup… matches its dialog
8e38fc21 Romanian: feminine stângă/dreaptă for the margin labels
028a02ba Romanian (ro) interface language
29adb198 Translate form-dialog field labels, choices and notes
37e41424 Merge pull request #1620 from dylanmtaylor/ci/shared-nix-workflow
a35d241c XLSX: a note keeps its box's place and size through open and save (#1608)
d1ab0ea8 Merge upstream main (0.9.0) into fix/2030-incomplete-formula-error
a4a36e84 Fonts: a cell font named in another language matches its installed font (fixes #1898)
1abb771f docs: fix Trunk website link (#2076)
68f956a4 Number Stored as Text: green indicator, warning button and Convert to Number (#1994)
bdc0552a Dialogs: OK and Cancel in a row, so form dialogs fit their content
cacb620f Paste Special: Excel's two-column layout, translated, Paste Link button
b0ab1970 Merge main into fix/lambda-recursion-stack
226c055f fix(ui): Esc and Enter close a data validation alert, and the keyboard goes back to the entry (#2089)
1788c5a7 Grid: paint the scrollbar's column beside the column headings
83a41dcd Right-click on a chart opens the chart's menu, not the cell's (fixes #2067)
41cb19fd Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
eb30ab8f Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
feac1679 HTML export: place pictures and charts at their anchors
f29ac7d9 Use scientific notation when number_to_text rounds up to 1e15
c8a87f57 i18n: Dutch (nl) interface language
45c91ede i18n: Dutch (nl) interface language
60e113bc i18n: Dutch (nl) interface language
68e58a2e Skip CodeRabbit reviews on Dependabot PRs (#2057)
ed48389c Formulas: compare right operands only after the left spine of a chain matches
ad0ce61b fix(engine): strip one leading = when validating CF formulas
24ee1e4d fix(engine): count word-wrapped lines for automatic row height
bc58b277 Document the functions this PR touches
2fb880a6 Fix WebGL startup on devices with lower GPU limits
4faa3ff0 Row auto-fit: count line breaks only in cells that wrap
4e17be19 Merge upstream main into italian-translation
cfb0e186 Formula entry: an incomplete formula's error describes what was typed (fixes #2030)
189eb7ae M12.AR14: keep the theme's per-script typefaces (<a:font script="Arab">) on save
132e887e Linux: time out the desktop theme's portal read
ad32e6a8 i18n(ja): translate every dialog, message and menu string the pt-BR catalog covers
40803e6a XLSX: keep Japanese phonetic runs (ふりがな) on open and save
2c6ffe48 XLSX theme: keep the major/minor ea and cs typefaces through open + save
8ff06e21 fix(engine): reject unparseable conditional-format formulas at creation
fc1d629c fix: merge current main into hidden-sheet navigation repair
27760812 i18n: test that translations keep the shape of their English
a2cc4b42 Release 0.9.0
479d1b4b Update i18n.rs
199e5f8e Formulas: test the order walk and map visit nodes; date ROADMAP like the parity doc
edd6e0cb Atualizar o i18n.rs
4ce8dc55 Docs: date the long-chains revision entry 2026-10-19
52ab0e6b #1458: formula round-trip test for Excel's sheet-name quoting
b3e0a7e8 Formulas: count the leftmost operand of a chain at the same depth
2aeb21d4 Formulas: flat operator chains as long as Excel allows (#916)
d9d4d646 PR1372: merge main and preserve quote-prefix and CSV regression tests
23829d8c Merge pull request #1828 from dylanmtaylor/chore/drop-competitor-references
0ca15546 docs: sheet-name quoting rows in function and file-format parity (#1458)
0b4cc561 fix #1458: one Excel sheet-name quoting rule for formulas, pivot sources and ADDRESS
02623945 Formula editing: arrow pointing restarts from the edited cell after typing (#1949)
a74e82ac formula: same_name folds case without merging ı and i
122d3d9a feat(formula): Spanish aliases for financial functions (VNA, TIR, PAGO, VA, VF)
553b0bd9 ui: language command docs and error list every language
871c4e6c perf(engine): scan only the precedent area's stored cells
e9bcb8df calc: one shared same_name for LET/LAMBDA names, with case folding
9f134349 fix(ui): label sort columns from the region start, seed unused level columns
ac371be5 calc: LET and LAMBDA names ignore case in any script
e34b0aa3 fix(ui): persist the AutoSave preference across restarts
37f7b43b Fix pointer budget test: pass push_click a u32 click count (#525)
e8b3279d Merge origin/main into issue-525
ef339b9f Grid: the selection outline follows a mouse drag at once
13e730d4 calc: calculate every formula read at the depth limit in one suspension
4445aa6d calc: document deref's full-shape rule for bounded references
3979e48f Desktop theme: the watcher's link has a type off Linux, so the gate passes there
e5aeea7a Sheet protection: obey the Sort and Use AutoFilter boxes
aff9153d Calc: CELL("filename") names the workbook's file (#1489)
43655df8 Merge main into chore/contributors-harrison-booth
da97bde6 fix(ui): seed Sort dialog column from the active cell
6760e006 M12.AR15: never write a font family over 14 (review)
24b0b5d1 M12.AR15: keep cell fonts' charset and family on save
4faca498 M12.AR13: read Windows-1256 Arabic CSV and text files as Arabic
6481c171 In-cell editor: test that an unwrapped multiline edit shows every line (#1970)
f84557b4 Merge remote-tracking branch 'upstream/main' into function-help
d19627fc fix(engine): walk stored cells in transitive precedent selection
f8cec7dd Merge main into fix/deep-recursion-crash
5e0b2dd4 Merge main into fix/sumproduct-mismatches
3df5e05f In-cell editor: measure wrapped text at the field's own wrap width (#1970)
49fe41af Merge pull request #1892 from vedran-dobos:options-prefix-translations
4401b3e5 Merge pull request #1877 from SocraticsAI:host-chrome
aa412595 Merge pull request #1910 from Silvertree2010:fix/1907-bug-touchscreen-devices-cannot-p
8492416c Merge pull request #1916 from Silvertree2010:fix/1915-desktop-theme-watcher-opens-a-ne
47fc3d5d Merge pull request #1922 from Silvertree2010:fix/h552-rangeref-parse-accepts-signed-ro
70018d4e Merge pull request #1925 from DrM7md:nux/insert-delete-whole-lines
b402359f Merge pull request #1938 from Mouhand-Kaddo:fix/html-export-rtl
3a2232cf Enter bare numbers in Percentage-formatted cells as percents
92c0d1e9 Chrome: turning the File tab off closes a Backstage that is already open
27f4c9c7 Touch pan: a pan that never saw its release doesn't swallow the next press
f5267cb7 docs: one Last updated line per parity doc after merging
b77848ee Merge pull request #1882 from neilcawse:fix/pivot-grand-totals
f8e916bc Merge pull request #1902 from Shnrqpdr:fix/1846-autofit-keytips
ab6fd488 Merge pull request #1867 from HyakoV3:fix/1808-csv-as-text
06a94d42 Merge pull request #1935 from Mouhand-Kaddo:fix/shape-text-rtl
7b8aaf9c Merge pull request #1939 from Mouhand-Kaddo:fix/xls-right-to-left-sheets
12ee27a1 Merge pull request #1943 from Mouhand-Kaddo:fix/table-name-length
8d562e9b Merge pull request #1879 from Silvertree2010:fix/h2804-custom-autofilter-is-less-than-l
937cfd1e Merge pull request #1903 from justinjohn0306:fix/1855-backspace-undo
46c706a4 Merge pull request #1845 from MarekSpodBiedry:issue-1830
33ac9e5f Drop the dbus-run-session test: it spawns a bus, sleeps 9 s and fails where dbus-daemon is missing
8968e833 RangeRef::parse: whole columns take at most one $ too
f2473d1f Ctrl+Shift+= on several whole-row areas still opens the Insert dialog
a6757829 Merge pull request #1814 from Higgs32584:fix-1447-pivot-bool-error-flags
29f99595 Merge pull request #1866 from HyakoV3:fix/1528-formula-edit-sheet
8e8e2ba7 Merge pull request #1920 from vedran-dobos:range-fill-formats
33a5415f Merge pull request #1941 from Silvertree2010:fix/h618-textbefore-textafter-with-negati
859e654d Merge pull request #1923 from DrM7md:nux/clippy-1-95
93cb9828 Merge pull request #1926 from DrM7md:nux/rtl-explicit-align
85158336 Merge pull request #1934 from Mouhand-Kaddo:fix/arabic-name-length
448c167e Merge pull request #1947 from Mouhand-Kaddo:fix/xls-dialog-sheets
9767efe6 Merge pull request #1965 from HaSh3003:fix/1714-outline-zero-width
752477a2 feat(ui): Ctrl+[ / Ctrl+] select precedent and dependent cells (#1865)
ea00ca6b Control channel: a request its sender gave up on is not run later
71acb0c5 Atualizar o i18n.rs
5c4dbbbc Atualizar o i18n.rs
8f239e3b Update i18n.rs
d890a1a7 Calc: a dynamic array of one value still anchors a spill range (#1491)
92e1e969 Docs: §6's calculation bugs have all landed
5eae222f Outline: + shows zero-width hidden columns at the default width (fixes #1714)
02ceedee In-cell editor: a Wrap Text cell edits wrapped at the column width
31abf075 Translate and standardizes UI error feedback by locale
7cd0a386 M12.AR17: skip .xls dialog sheets instead of reading them as worksheets
eee872e4 M12.AR16: limit table names to 255 characters
e9ffc71c Search from the end for negative TEXTBEFORE/TEXTAFTER instances
041bee21 Accounting format: quote the symbol as format text, refuse control characters (review #1930)
a10ead1c M12.AR11: mark right-to-left sheets and Arabic text in HTML export
59074fdc M12.AR9: open right-to-left sheets from .xls files right-to-left
d312535c Keep date text with signed parts like +3/4/2026 as text
90344445 M12.AR10: keep right-to-left paragraph direction in text boxes and shapes
fb7b23db M12.AR8: count characters, not bytes, in name length limits
7776cfcc Accounting format: the documented currency `symbol` is honoured
620be768 Reject signed and multi-$ whole-row ranges in RangeRef::parse
6ac8ad92 fix(edit): Ctrl+Enter gives each cell the number format typing gives it
28cdf1d1 Fix two clippy lints new in Rust 1.95
62e52004 Keyboard: Ctrl+Shift+= and Ctrl+- act on whole rows and columns at once
5bafacff Grid: row and column heading labels grow with the zoom
86641d96 Grid: explicit Left/Right alignment keeps its side on a right-to-left sheet
cc21643b Reuse one D-Bus session connection in the desktop theme watcher
adcb460a i18n: the test also checks Page Layout's Sheet Options labels (#1891)
9a79dbef Print CJK text with a CID font instead of question marks
0e8e7e34 Pan the grid on a one-finger touch drag instead of selecting
5f748d55 Keep the in-cell editor at the cell's height for one line
dcd4d1d1 #1855: redo selects the redone cell
4db6876c #1855: Backspace then Enter is one undo step
90e89d1b Contributors: add Shnrqpdr to people.toml
4ed93c3b Keytips: letters typed with Alt held continue the sequence (fixes #1846)
f1015e1e i18n: French and Serbian Options headings without the context prefix (#1891)
f1cb4f00 Merge upstream/main into fix/control-auth-777
5f2fb705 Docs: correct stale chart round-trip notes
d0fdf948 Calc: a recursive LAMBDA stops at a fixed count of 140 calls
3b05abe0 Merge main into fix/lambda-recursion-stack
383bb7ba fix(xlsx): read and write PivotTable grand totals in Excel's direction
4f3853d4 Hide blank and text rows for numeric ordering custom filters
9b8fde71 feat(ui): let an embedding host turn off the title bar and File tab
d4f256d6 docs: fix number format capitalization, restore generic familiar items, and clarify parity/renderer notes
95f8206b #1808: file.open can keep every CSV/TSV field as text
beade8b7 #1528: a formula's references are outlined only on the sheet they belong to
dd5c7da6 docs: use generic pivot table terminology instead of PivotTable
6082355c Translate the cell and header context menus into German (#1830)
ede2b435 Fxied CodeRabbit flags
ef0b243c Allow multi-column/row selection inside formulas with shift
e60a74e9 Clicking a row/column while in a formula now highlights that row/column
53e52270 docs: drop references to competing commercial software
c5a53a90 #1447: booleans and errors count as strings in pivot cache flags
09973e78 Contributors: add dotCooCoo (Robert Lee)
672c102e Calc: a LAMBDA that calls itself without end answers #NUM! instead of overflowing the stack
0fe4cd84 i18n: add Vietnamese interface translations
c04c8557 Add Ukrainian localization (uk.rs)
fac8f858 Fonts: render Lao text with an installed Lao face instead of tofu
2321afd6 i18n: translate sheet tab menu and AutoSave toggle (fixes #1537)
96321920 Ctrl+Alt+letter that types a character no longer triggers the Ctrl shortcut (#1530)
3f816771 Keep chart source range in step with inserted and deleted lines
39c9d7cd Analysis ToolPak: moving-average standard errors use a running sum (fixes #1043)
71c1097d #1054: clean up web print iframe and blob resources
a6aa53cb Move PivotTables with their cells on row/column insert and delete
8ca66c5c Use the platform clock for UI timing on the web (#1026)
edcc76d0 Fail CLI checks on incomplete or empty input discovery (#1051)
5627d2b6 Prefill the Remove Duplicates range from the selection (#1388)
9e5cdf9e Tables: add the missing Resize Table button (#935)
2a9f40c6 Rows: a big font isn't counted twice when the sheet's default height already fits it
36e45a5c Reject table.resize when the new range overlaps another table
55397225 Fonts: find the cell, serif, mono, Thai and Hebrew faces in Fedora's package folders (#1694)
94af08ad XLSX: new workbooks get <fileVersion appName="gridcraft"/> (fixes #1699)
70fc5e1c Merge main into fix/workbook-metadata-part
a28799d0 Merge main into fix/sumproduct-mismatches
ea3ef8fa Charts: honor box and whisker quartile methods
8e7438b4 Charts: write names in chart references qualified, as Excel needs (#1686)
e8f04994 Charts: series that refer to workbook names ([0]!Name) plot their data (#1686)
6adb26c7 contributors: add Harrison-Booth
84ce99f9 Keep overflow text visible when its source cell scrolls out of view
ec930b2f fix: theme PivotTable field group buttons
042ac706 macOS: bold interface text draws Cyrillic е open, not like ө (fixes #1184)
4ca967e1 Auto-fit: skip merged cells when computing row heights
14f2ea9f Cell editor: the caret contrasts with the cell's fill (fixes #1408)
295f7dde Fill handle: right-drag opens the fill menu (Copy Cells, Fill Series, Fill Formatting Only, Fill Without Formatting, Series…)
86b124fc Charts: build multi-area series from every selected area
1131de97 fix(ets): avoid repeated interpolation scans (#1042)
4548c6f7 fix(xlsx): bound repeated column expansion (#1022)
3684349d Memory: floating pictures' textures are bounded, sized to what is drawn, and dropped with their workbook
a09d3f69 Memory: undo steps share picture and macro bytes instead of copying them
c5baa829 Memory: interface fonts are read once and shared with egui, not copied into it
efc81716 Keyboard: Ctrl+6 hides and shows objects, saved as workbookPr showObjects
214a67d5 feat(#1622): add Advanced Filter ribbon dialog
3379fb63 fix(#1031): constrain Advanced Filter copy output
0033dfcd Keyboard: Ctrl+Shift+A after a function name inserts its argument names
ad4422f5 Reject unsupported flip param in arrange.rotate
125c8b00 ci: switch to shared nix workflow from craft-common-actions
ac8bbd84 Grid: a cell with line breaks and Wrap Text off draws the whole string on one line (fixes #1604)
e8c6fcb8 XLSX: keep custom column widths that round to the default width (fixes #1607)
f3398ee2 Grid: a scrolled Table's header names and filter buttons in the column headings (#1423)
70612740 XLSX: keep header and footer pictures on save (part of #1257)
81422c31 Contributors: add my name for the About window
79e8973c Web: keep preferences such as dark mode between visits (fixes #1562)
d50e32bf Docs: put the new sentence in the Fidelity / notes column
1ab9e60d Reject formula number literals too large for f64 as parse errors
9f6bd584 Docs: update the progress docs for this change
47185eef XLSX export: a picture shared by several sheets is one media part (#985)
7a352cee Grid: an armed Format Painter paints whole rows and columns from their headers (refs #1211)
c0d6f290 Name Manager: preview a name over several ranges through parse_name
2bb222ae Sort and de-duplicate data.textToColumns fixed-width breaks
c6be911b ui: truncate long workbook titles in the title bar
883a07fb Keep nan/inf time and fraction look-alikes as text
27dab49e UI: Delete dismisses the AutoComplete proposal, and deleting text never brings it back (#1521)
98f4b9d8 Focus the Find what field when Find and Replace opens (#1518)
0ec27a61 Open the Insert Chart dialog from Recommended Charts instead of inserting a chart (#1399)
f8cbfb7c engine: sort and remove duplicates move the rows' notes and hyperlinks
e6c0f92d engine: a cut takes the source's notes, hyperlinks and merged areas with it
7deb382f xlsx: keep a table's filter criteria when the sheet AutoFilter coincides with it
18fecf8e engine: pageLayout.printTitles only touches the axes it is given
3f9b73b9 functions: NETWORKDAYS.INTL accepts the all-weekend string "1111111"
67be3556 Keep leading empty columns and rows when saving CSV/text
ea01ad99 fix #1443: Ctrl+Q no longer closes the window outside macOS
47268a42 UI: function help follows the interface language
b930d60b #1505: keep scalar INDEX MATCH formulas scalar
e1902111 Read securities function dates in the workbook's date system
7f9f73d6 fix(numfmt): share legacy colors across grid and PDF rendering
6db94d15 Calc: INDEX with one index on a 2-D reference is #REF!, as in Excel
9097170b XLSX: preserve carriage returns in saved text
4567aed5 fix(engine): AutoFill refuses targets that don't hold the source in a corner
e1e02f82 i18n(it): Foglio previsione on the ribbon button too
a770845e i18n(it): align ten labels with Excel's Italian terminology
45644d3f Control channel: ui.dialog.confirm sends what OK sends (#1459)
348d955a Conditional formatting: text rules never match an error value (#1162)
2d4a537c i18n: add Italian (it) UI translation
370b2208 fix(solver): commit solutions and reports atomically
5bd6cc3d Options: Maximum Iterations and Maximum Change in File > Options > Formulas
cdc8177f Let GROUPBY and PIVOTBY take a LAMBDA as their function
d59e1cf6 Merge remote-tracking branch 'up/main' into fix/sheet-param-honoured
bc524fa4 Merge remote-tracking branch 'up/main' into fix/conditional-format-style-colors
4d68300b Add Greek (el) localization
22157433 Fix fraction numerators saturating at u64::MAX for large values
1b4df8ac Refuse table names that clash with defined names or R1C1 references
9b155c48 Stop BINOM.INV/CRITBINOM hanging when trials exceed 2^53
f065f916 Clean up Command Palette code
be20ca16 UI: keep PivotTable field-list scrollbar at pane edge
cd94a6d7 Recalculation: a spill anchor given a formula that reads its old spill area sees it empty
ac759597 Recalculation: formulas reading an array that loses a spill conflict see #SPILL!
4bfd0bc5 Improve Command Palette keyboard navigation and layout
ea190ada functions: Analysis ToolPak value arguments reject multi-cell references
01eb2372 Docs: corpus count for dropped dynamic-array metadata
7ee11fe1 XLSX: keep dynamic-array cell metadata (cm) on save
5c20f164 core: read accounting negatives like $(1,234) in number text
ab4d58ca Lookups compare numbers exactly, like Excel
f9802ecc Improved font dropdown row sizing and scroll alignment
74de1b32 Keytips: Alt, H, B border letters apply their own preset
ced72432 calc: bounded references up to 1,048,576 cells keep their full shape (#1010)
34a4ed3e engine: rebuild cell-store bands and counts when importing a JSON workbook
0d181371 Protection: enforce selectLockedCells/selectUnlockedCells and offer them in Protect Sheet (#1346)
d66ed112 xlsx: keep every property of the default cell format when importing a file
33abe3a9 UI: Protect Sheet entries become Unprotect Sheet on a protected sheet (#1346)
833fe0da Edit: text that would parse as a number or formula keeps its quote prefix in the editor (#1362)
ac8f6f6c Keep Middle/Bottom vertical alignment for wrapped text taller than its row
2c23b619 engine: subtotal honours header:false instead of dropping the first data row
7b10212b Header menus: Format Cells… for th…
Summary
GridCraft's status bar always showed Average, Count and Sum for a selection of several cells, and a right-click on it did nothing. Microsoft's Excel status bar options page says "If you want to customize the status bar, right-click it, and then click the options that you want". It lists Average, Count and Sum as selected by default, and Numerical Count, Minimum and Maximum as "not selected by default".
Changes
view.statusBar {average?, count?, numericalCount?, minimum?, maximum?, sum?}sets the statistics and returns all six. The choice is a preference and is saved inprefs.json. Aprefs.jsonwithout it keeps the defaults.docs/ui-parity.mdgets the status bar row, the header's Last updated date and Change list, and a revision history row.ROADMAP.mdgets a progress log row.The page does not give the text the status bar shows for the new statistics. GridCraft labels them with the option names (
Numerical Count: 3,Minimum: -1,Maximum: 9). Minimum, Maximum and Sum show only when the selection holds a number. Count and Numerical Count show when it holds any value. The other options on the page (Cell Mode, Zoom Slider and the rest) stay as they are.Tests
cmd::view::tests::status_bar_statistics_default_to_average_count_and_sum_and_turn_on_one_at_a_timechecks the defaults, that a call changes only the statistics it names, and that an older or partialprefs.jsonkeeps the defaults.tabs::tests::status_bar_shows_the_statistics_that_are_turned_on_in_orderchecks the text for numbers mixed with text, for text only, and for one cell.tests/it/status_bar_menu.rs(egui_kittest) right-clicks an empty part of the status bar, clicks Minimum, and checks thatMinimum: -1is shown. A second test right-clicks onSum: 12and onReadyand checks that the menu opens.None of these builds on
main, which has no status bar preference. Each test fails on this branch when its part is broken:view.statusBarignoring its parameters, Minimum shown while it is off, the menu removed, and the status bar labels left selectable.Before the gate, these targeted checks were run:
cargo fmt --all -- --check,cargo clippy -p gridcraft-engine -p gridcraft-ui-egui --all-targets -- -D warnings,cargo test -p gridcraft-engine,cargo test -p gridcraft-ui-egui,cargo xtask assets,cargo xtask layers,cargo xtask parity --checkandcargo xtask keytips --check.cargo test -p gridcraft-ui-eguihad one failure,header_autofit::table_filter_autofit_works_through_command_and_header_double_click, which also fails onmainon this machine and which #2273 fixes.Checks
On Windows 11 (x86-64) with rustc 1.99.1, on top of
mainatf284f6a, with #2273 merged in:cargo xtask cipasses its 10 steps: 2,274 tests passed, 0 failed, 1 ignored.git merge-treereports no conflicts withmainat48d9ba2. With #2410 or #2414 merged,docs/ui-parity.mdconflicts in the header's Last updated / Change list and the top revision row, and with #2414ROADMAP.mdconflicts in the top progress log row; both sides are kept.Summary by CodeRabbit