chore: sync upstream (62 Commits) #10

Merged
alf merged 62 commits from chore/sync-upstream-20261027 into main 2026-10-27 20:21:42 +00:00
Owner

Upstream-Sync von upstream/main (62 Commits). Fast-Forward.

  • 89ac453e Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types
  • c596bad6 Merge pull request #2749 from Silvertree2010/perf/export-speed
  • 393a524a Speed up XLSX worksheet writing
  • 63038650 fix(ui): dropdown menus grow back after a search with no matches (#2743)
  • 4425fed5 Add an XLSX write benchmark example
  • 45f5ab18 Merge pull request #2690 from aiongg/layout
  • 8117b666 Merge pull request #2680 from storytold/fix/nextest-0.9.150
  • 5f041665 refactor(ui-egui): move SheetApp methods to app/
  • e0211fbb refactor(ui-egui): move SheetApp methods and UI types out of lib.rs
  • 6b743e46 refactor(ui-egui): move backstage.rs items to backstage/
  • 41ab3067 refactor(ui-egui): move control.rs items to control/
  • d840d55c refactor(ui-egui): move theme.rs items to theme/
  • b36ec74f refactor(ui-egui): move ribbon.rs items to ribbon/
  • da0cb382 refactor(gridcraft-cli): move check.rs items to check/
  • bbb570dc refactor(model): move features.rs items to features/
Upstream-Sync von `upstream/main` (62 Commits). Fast-Forward. - 89ac453e Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types - c596bad6 Merge pull request #2749 from Silvertree2010/perf/export-speed - 393a524a Speed up XLSX worksheet writing - 63038650 fix(ui): dropdown menus grow back after a search with no matches (#2743) - 4425fed5 Add an XLSX write benchmark example - 45f5ab18 Merge pull request #2690 from aiongg/layout - 8117b666 Merge pull request #2680 from storytold/fix/nextest-0.9.150 - 5f041665 refactor(ui-egui): move SheetApp methods to app/ - e0211fbb refactor(ui-egui): move SheetApp methods and UI types out of lib.rs - 6b743e46 refactor(ui-egui): move backstage.rs items to backstage/ - 41ab3067 refactor(ui-egui): move control.rs items to control/ - d840d55c refactor(ui-egui): move theme.rs items to theme/ - b36ec74f refactor(ui-egui): move ribbon.rs items to ribbon/ - da0cb382 refactor(gridcraft-cli): move check.rs items to check/ - bbb570dc refactor(model): move features.rs items to features/
alf added 62 commits 2026-10-27 20:21:42 +00:00
The Chart Type section of the Format Chart Area pane listed nine types,
with stacked column as the only stacked one, so a chart could not be
switched there to stacked bar, 100% stacked column or bar, stacked
line, or stacked or 100% stacked area. It now lists them after their
family's entries, and "Stacked" is renamed "Stacked Column".

Each entry is drawn selected when it is the chart's current type, as
the Legend entries are, using the same type and subtype mapping that
chart.set applies.
* refactor: split complex functions for Sonar S3776

Extract helpers from backstage options (general, calculation and iteration
sections), code_editor python (string scanning), xtask i18n literals
(escape and string readers) and calc recalc loops_among (SCC search).
No behaviour change.

* Restore the loop count that loops_among's refactor dropped

The S3776 split moved the loop-detection body into loops_among without
the 'let n = circ.len()' it reads, so calc failed to compile and the
Sonar build broke. Restore the binding from main.

* Extract the SCC pop step from components() to reduce cognitive complexity (S3776)

Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>

---------

Co-authored-by: Codebuff <noreply@codebuff.com>
Use the fixed release for GHSA-vc25-qg58-w57c.
ci: require nextest 0.9.150
refactor: shared module layout (craft-contrib#20)
`cargo run --release -p gridcraft-xlsx --example write_perf -- [rows] [runs] [out.xlsx]`
builds a sales-style workbook (order ids, dates, categories, numbers, two
formula columns with cached values, booleans, sparse notes, a summary sheet)
and times write_xlsx, printing each run and the median / minimum. An optional
output path keeps the last package for byte comparisons between builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* fix(ui-egui): dropdown menus regrow while open

Use craft_ui's ComboBox and combo::Menu so a menu that shrank (a filter with
no matches) grows back when the filter is cleared (egui#5225). Repin
craft-libs to one revision.

* chore(deps): craft-libs 60d60d48 (dropdown fixes)

* chore(deps): craft-libs 6af63481 (dropdown fixes)

* chore(deps): craft-libs 4d7b82f7 (dropdown fixes)

* chore(deps): craft-libs 92d392cf (#387 merged)
Saving a large workbook spent about half its time building worksheet XML,
mostly in small per-cell allocations. The writer now appends to the part
directly:

- Cell references, row numbers, style ids, shared string indexes and
  numbers are appended without temporary strings (push_a1, push_u64,
  push_num), and text is escaped in place (push_esc, with a fast path for
  plain ASCII).
- sheetData walks the cell store in its own row-major order instead of
  copying every address into a BTreeSet and a per-row BTreeMap and looking
  each cell up again. Cells outside the store (pictures, spill values,
  table headers) still go through the sorted set.
- Formulas with nothing the file spells differently (no LET/LAMBDA, no
  _xlfn function, no spill, @, trim operator or structured reference) are
  printed from the shared expression instead of being cloned and rebuilt
  twice by the file rewrite.
- The A1 printer in gridcraft-formula appends references to the output
  instead of formatting each anchor into its own string.

The output is byte-for-byte unchanged.

write_perf, 200,000 rows (2.0M cells, 14.2 MB package), release, Ryzen
16 threads / Linux, 36 interleaved runs each:
  before: median 2083.9 ms, min 1615.7 ms
  after:  median 1501.3 ms, min 1192.3 ms  (-28.0 % median, -26.2 % min)

What remains is mostly deflate (zlib-rs, level 6), about 70 % of the save.

Tests pin the exact sheetData of a workbook covering row settings between
cell rows, spill values, every value kind, number spellings, escaping and
formulas with and without a file spelling (generated with the previous
writer), and check each appending helper and the formula fast path against
the code they replace.

The formula fast path is guarded by a test that runs both paths over every
function in the gridcraft-functions registry (a new dev-dependency, allowed
by the layer rules), in 15 surrounding shapes covering every operator and
rewrite, so a function or rewrite added later without updating the trigger
list fails it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Speed up XLSX save by writing worksheet XML without per-cell allocations
Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types
Some checks failed
ci.yml / Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types (pull_request) Failing after 0s
nix.yml / Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types (pull_request) Failing after 0s
sonarcloud.yml / Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types (pull_request) Failing after 0s
ci.yml / Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types (push) Failing after 0s
nix.yml / Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types (push) Failing after 0s
sonarcloud.yml / Merge pull request #2605 from dotCooCoo/feat/format-chart-pane-stacked-types (push) Failing after 0s
89ac453efa
Format Chart Area: Chart Type offers the stacked and 100% stacked types and marks the current one
alf merged commit 89ac453efa into main 2026-10-27 20:21:42 +00:00
alf deleted branch chore/sync-upstream-20261027 2026-10-27 20:21:43 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/gridcraft!10
No description provided.