Fix missing welcome panel after closing all documents
Closing all documents left the Welcome panel as the only tab, but the old active document index could still point to a tab that no longer existed. The fix is to reset it to 0 when the document list becomes empty.
* Break out VisualColorPickersInput.svelte
* Break out ColorComparisonInput.svelte and ColorPresetsInput.svelte
* Add backend definitions and plumbing for the 4 new widgets
* Port the ColorPicker.svelte layout and business logic to Rust
* Port more ColorComparisonInput.svelte logic to Rust
* Port more SpectrumInput.svelte logic to Rust
* Port more frontend logic to Rust
* Code review
* Code review
* Fix some CSS
* Add a pointer hover marker line to the rulers
* Fix rulers and pointer marker when document is flipped
* Reduce duplicate code
* Fix ruler label placement
* Performance
* Add support for double-clicking to rename layers in the graph view
* Fix text double-click area ending 10px too early from the right
* Fix clicking out and intermittent cursor clicking in text field
* Improve the Data panel with more type-specific detail pages
* Add network_path to SetDisplayName so renames target any network depth
* Track nested layers via full editor:layer paths and rename parent_layer to path_of_subgraph
* Polish the data panel NodeId leaf page with an editable name field
* Make lock and visibility toggles work for layers in nested subgraphs
* Fix formatting
* Fix connected_to_output running in the wrong network for nested-layer toggles
* Fix dropdown menus spawning offset in scrolled panels, a regression from upgrading to Svelte 5.54
Regression introduced in #3933 by upgrading from Svelte 5.47.1 to 5.54.1
* Code review
* Fix unrelated typo
* Add assets build size to build link comment
* Improve the Data panel's data display with monospaced text and copyable number values
* Revert attempted fix for dropdown menus appearing lower in scrolled Properties panel, since it makes other floating menus freeze the app
* Code review
* Switch indexedDb document serialized struct from camelCase to snake_case
* Refactor and migrate old indexedDb format to the same shape as desktop persistence
* Avoid duplicate struct definitions in the desktop crate
* Refactor frontend message handling to consolidate auto-save document loading
* Code review
* Review
---------
Co-authored-by: Timon <me@timon.zip>
* Add interactive panel docking
* Preserve active tab when a panel group is docked
* Add inter-panel gutter hover color
* Code review fixes
* More code review
* Add support for dragging panel tabs docked into other panel tab bars
* Fix terminology
* Add Group suffix to PanelGroupId enums variants
* Code review
* Fix Morph node transform interpolation and preservation in the table
* Fix click target positions for Morph's nested layers by pre-compensating upstream_data transforms
* Redesign Morph node (v3) with control path input and uniformly spaced progression, and fix Stroke::lerp interpolation weights
* Add migration from Morph node v2 to v3
* Redesign the 'Blend Shapes' node behavior and subgraph definition
* Add the Layer > Blend menu entry to easily set up a blend
* Optimize the Morph node
* Refactor the Morph node to remove the roundtrip through BezPath
* Fine-tune Morph node Bezier order promotion and handle interpolation
* Add the Layer > Morph menu bar entry
* Fix NaN and guard against other potential NaN bugs breaking the editor
* Add InterpolationDistribution parameter to Morph with weighted progression, swap parameter orders, and rename shear to skew
* Add the Reverse parameter to the Morph node
* Update the order of the inputs to Blend Shapes for consistency with Morph
* Make Layer > Morph create the Morph Path control layer
* Fix migrations
* Move 10 to a constant
* Avoid division by 0 in the Blend Shapes node internals
* Rename nodes 'Blend' -> 'Mix' and 'Blend Shapes' to 'Blend'
* Fix a crash encountered while testing
* Final code review
* Make domain push dupe checks debug-only and use push_unchecked in the Morph node
* Pre-allocate for pushes to the vector domains
* Add fast path at t=0
* Inline reserve()
* Set up the control path layer above not below, and starting collapsed
* Review fixes
---------
Co-authored-by: Timon <me@timon.zip>
One appeared on load (a deprecated meta tag). One appeared when adding an Identity (Passthrough) node. One appeared when exposing the the Weight parameter of the Stroke node. This also fixes the intended behavior of the bisect script, which was involved when finding the prevenance of these errors.
* Fix virtual scrolling MenuList dropdowns shrinking when wider content goes away
* Code review fixes
* Fix small CI workflow bug
* Stop scrolling in dropdowns from horizontally scrolling the control bar
* Use more robust way of getting commit hash in CI workflow
* Implement the service worker for cached offline mode
* Improve pre-loaded font menu preview visualization
* Code review fixes
* Simplify Response construction
* Attempt to fix ERR_FAILED when reloading page on CF Pages
* Reject service worker install if any precache fetch fails
* Fix an assertion failure bug when scaling a line in the transform cage
* Fix missing defaults on node gradient inputs
* Fix Blend Shapes path input wire not updating to show in the UI after Layer > Blend
* Fix assertion failure due to browser non-monotonic timestamp
* Fix SVG renderer drawing 1px strokes as half-width when using stroke alignment
* Fix incorrect appearance of the ColorInput widget when set to "none" and "disabled"
* Fix lerp function in Fill enum to handle None cases correctly
* Fix stroke alignment bug