chore: sync upstream (93 Commits) #17
No reviewers
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/gridcraft!17
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "chore/sync-upstream-20261105"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Upstream-Sync von
upstream/main(93 Commits). Fast-Forward.21b64df0Paste of a whole-column or whole-row copy no longer aborts the app (#2018)292b784ffix(calc): apply "Set precision as displayed" in calculation (#1366)c4029538Merge pull request #3425 from ZIDAN44/fix/2874-german-insert-cells0a58f945Merge remote-tracking branch 'origin/main' into pr6ea9f538Merge pull request #2593 from helenkwok/web/host-page4e43ad88UI: RefEdit follow-ups: a dialog keeps the sheet it was opened on, a click on the selected cell picks, quoted sheet names in Solver (#3180)e06b2a7egridcraft-web: speak the host messages through craft-web-hostbf6bee50web host mode: refuse an oversized host file before copying it, cap the name, and document trust and limitsd628abb7Web: page host mode, so a page can host GridCraft in its own document (#2592)cb059716i18n: German context menus' Insert reads "Zellen einfügen", not a second "Einfügen" (#2874)1fb19157Charts: draw every doughnut series as a ring (#1827)ede12f9dAbout: credits tables fit without side-scrolling and their columns resize (#3320)642980b7Merge pull request #481 from prxnvt/pr/form-controls73fad546Merge origin/main into pr/form-controls919a6b58Merge pull request #2203 from Higgs32584/fix/2181-link-open-confirmationThe sheet tracked the selected object as a bare id in `selected_chart`, so only charts and text boxes drew a selection frame, only the bottom-right corner resized, and the kind of the selected object had to be guessed from the id. The selection is now `SheetApp::selected_object: Option<ObjRef>`, with `selected_chart()` kept for the Chart Design tab and the Format Chart pane. - Model: `ObjKind` (chart, image, shape, slicer) and `ObjRef { kind, id }`; `Sheet` helpers find, move and remove an object by `ObjRef` and walk every object's anchor in a fixed order. `next_object_id` saturates instead of overflowing on an id at `u32::MAX` read from a file. - Commands: `object.delete`, `object.move` and `object.setAnchorMode` accept the four kinds through one parameter check, refuse an unknown kind or id instead of succeeding silently, and clamp hostile offsets. `object.delete` replies with the deleted object. Arrange and the Selection Pane include slicers, which stack above the other objects. - Sheet: the selected object of any kind draws a frame with eight handles over every object. Each handle resizes only its own edges, which never cross; the body moves the object, and the first drag frame already applies the pointer's movement. The pointer shows the handle's resize cursor or a move cursor, with the diagonals swapped on a right-to-left sheet, where the frame moves with its object. - Keys: Escape drops the object selection; Delete and Backspace keep deleting the selected object (#213). A selection whose object disappears (undo, redo, delete, sheet switch) is cleared. - Double-click: `open_object` routes by kind (a text box edits in place, a chart opens Format Chart). - Control protocol: `ui.inspect` reports `selectedObject {kind, id}` and keeps `selectedChart`; `ui.object.select` selects any object and replies with its rect. The snapshot example takes `--object <id>`. Tests: engine tests for every kind by kind and id, the Selection Pane and hostile parameters; UI tests for selecting each kind (a slicer over a chart takes the click), all eight handles on four kinds, cursors, Delete, Backspace and Escape, undo and redo, double-click routing, and resizing on a right-to-left sheet. Existing tests use the new selection API.Structural edits and sorts kept three hand-indexed lists (charts, images, shapes) in step in two places, and slicers were left out of both, so a slicer stayed put when rows were inserted above it. Chart series were rewritten for inserted and deleted lines and for sheet renames, but not for cut-moves or sheet deletes, which left them pointing at the old cells. - Inserting and deleting rows and columns and sorting walk `Sheet::object_anchors` and `object_anchors_mut`, one fixed order over every kind, so slicers now follow their cells by their anchor mode like the other objects, and a new kind cannot be forgotten in one of the passes. - `rewrite_cell_links` is the one place that rewrites the references floating objects hold (chart series values, categories and names, and the source block a chart was made from). `rewrite_all_formulas` calls it, which covers inserting and deleting lines and cells and cut-moves on one sheet or across sheets; renaming and deleting a sheet call it too, so a series into a deleted sheet becomes #REF!, as a formula does. - Copying a sheet gives its charts, pictures, shapes and slicers fresh ids, keeping ids unique across the workbook, which object selection and the `{kind, id}` commands rely on. Tests: every kind through row and column inserts and deletes, an absolute shape, a sort and undo; a slicer through inserted rows; chart series through a cut-move, a sheet rename, a sheet delete and undo; ids after a sheet copy.f5030432) into pr/objects dd9a01e3b2df98e9ce, with origin/mainf5030432) into w/form-controls 40aa1e8b66a6afa053) into w/form-controls 63400c9afd25881a8e) into w/objects 082e379412082e3794, main25881a8e) into w/form-controls dcefd523eb05851de4) into w/form-controls a4faa9091eA button's command ran through the macro policy and the file sandbox, but not through the macro runner's request filter, so a file-borne button assigned `link.open {url}` opened the page once the generic trust question was answered. Now `link.open` is refused for buttons up front, when it is assigned and when a file brings it in, with the wording of the other denied commands; and after a press runs its command, the UI requests it queued are checked as the macro runner checks a step's: a dialog or a web page makes the press fail with the reason and rolls the group back, a cell edit is dropped, and messages for the person stay queued. Tests: link.open joins a_denied_command_is_refused_when_assigned_and_when_a_file_brings_it_in (assign, insert and a file-borne press refuse it; no OpenUrl request is left), and a_button_command_that_would_open_a_dialog_or_a_page_is_refused_after_it_runs (insert.link with no parameters is refused with the dialog wording and its request dropped; the filter refuses a page, drops a cell edit and keeps messages). docs/macros.md says what a button's command may not do.f6a0556b, the squash of upstream pull request 470) into w/form-controls ccc2fb60763379f12a, the squash of upstream pull request 501) into w/form-controls 76c70c2b896f52cc50, the squash of upstream pull request 471) into w/form-controls 2fa94f111f9172516a, the Python cells pull requests) into w/form-controls 5483c7bc47A button could be given a fixed input range for any macro name; pressing it then passed the range to macro.run as `inputs`, which check_params refuses for a macro without inputs ("it takes no inputs"), so such a button failed on every press. Now insert.button and control.assign refuse a fixed input when the named macro exists and declares no inputs, naming the macro; a macro the workbook does not have yet is not checked, and the assignment is kept as given. On open, a stored fixed input for a macro without inputs becomes the selection: the file itself assigns the macro on the selection, and the stored range would fail every press. Tests: a_fixed_input_for_a_macro_without_inputs_is_refused_when_assigned (insert and assign are refused with the reason in any letter case; a macro with an input and a macro not yet defined take the range; a stored fixed input comes back as the selection). format_and_assign and a_kept_button_action_comes_back_only_on_the_same_button give their macro an input.7bb397a3, the squash of #494) into w/form-controls 89e141ca3eGerman showed "Einfügen" for Paste and again for Insert in the cell menu ("Einfügen…") and the row and column header menus ("Einfügen"). The cell menu's Insert… now reads "Zellen einfügen…", as Excel's German menu does. The header menus' Insert gets its own key, "Header Menu|Insert", German "Zellen einfügen"; the plain "Insert" stays as the Insert dialog's title and button use it, and every other catalog gets the new key with the text it shows today. A test reads the three menus' items from menus.rs and checks that no two read alike in German. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>