* 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
* 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>
* 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
* Remove the unused Editor.raw/wasmMemory/wasmImport
* Split out Editor.subscriptions
* Replace editor.handle.* with editor.* (1 of 2)
* Replace editor.handle.* with editor.* (2 of 2)
* Replace Editor typedef with EditorHandle import
* Pluralize subscription-router and rename subscriptionsRef->subscriptionsRouter and editorRef->editorHandle
* Remove editor.ts
* Update the readme
* Fix demo art loading bug
* Replace parameter passing with getContext and extract destroy functions to module-level exports
* Resend layouts from Rust when editor is re-mounted on HMR
* Code review
* Clean up component setup/tear-down side effects
* Clean up more component setup/tear-down side effects
* Remove nonfunctional debouncer
* Clean up even more component setup/tear-down side effects
* Reuse backend state
* Fix HMR for IO Managers and for State Providers
* Rename IO Managers -> Managers and State Providers -> Stores
* Restructure and partially flatten managers/stores
* Code review fixes
* Review fixes
* Migrate Specta to Tsify to auto-generate messages.ts, working except colors and widgets
* Adopt the generated FillColor/Color/GradientStops
* Fix widget typing
* Separate WidgetGroup enum variants into wrapper structs
* Small rename
* Simplify widgets further
* Clean up message type references
* Switch type imports to the auto-generated file
* Remove lowercase serde rename
* Fix FillChoice deserialization
* Fix small regression from #3837
* Improve type safety
* Make WidgetSpan type-safe
* More cleanup and type safety
* More type safety
* More type safety
* Get the rest to type-check without errors; improve widget builder macro to have optional icons; improve Svelte 5 configs
* Cargo fmt
* Fix imports
* Update outdated readme info
* Fix lint command rename references
* Fix typos
* One more typos fix
* Remove unnecessary dep: prefix from the edited Cargo.toml files
* Remove excess parts from Cargo.toml
* Fix compiling on desktop
* Revert "Remove excess parts from Cargo.toml"
This reverts commit 6b711117b3a5d5d8a3ee20f36a43bc74930b7c82.
* Update dev docs with simpler, more accurate instructions
* Fix gamma correction with HTML-based editable Text tool text
* Migrate simple, undecorated classes to types
* Remove TupleToVec2 transformation
* Remove @Transform from tooltips
* Cleanup: replace value.toString() with String(value) everywhere
* Convert documentId from string to bigint
* Migrate the rest of the easy @Transform/@Type decorations
* Migrate FillChoice
* Migrate WidgetDiffUpdate
* Migrate WidgetInstance
* Migrate away from classes that extend WidgetProps
* Remove class-transformer and all classes in messages.ts
* Migrate UI layout passing
* Remove dead code
* Remove unnecessary export and readonly prefixes
* Remove HSVA type
* Break out Color, Gradient, and FillChoice functions into a utility-functions file
* Move widget helper functions from messages.ts into a new utility-functions file; restructure type imports
* Reduce internal type defs
* Rename JsMessage to FrontendMessage
* Code review fixes
* Fix other usages
* Tidying up