* Add TaggedValue::TypeDefault to avoid baking placeholder Tables into saved documents
* Add TaggedValue::TypeDefault to avoid baking placeholder Tables into saved documents
* Migrate empty Vector/Raster/Graphic/Artboard placeholder values to TypeDefault on load
Documents written before the TypeDefault mechanism existed have empty Table<Vector>/<Raster>/<Graphic>/<Artboard> values baked into every unwired exposed input. Walk each migrated node's inputs and rewrite any such placeholder NodeInput::Value into the equivalent NodeInput::type_default, so re-saved documents shed the placeholder payloads. Marked with a TODO for eventual removal once enough documents have been re-saved.
* Re-save demo artwork
* Remove Graphic and Artboard placeholder containers from TaggedValue
* Remove Raster placeholder TaggedValue variant
* Simplify document migration
* Remove Vector placeholder TaggedValue variant
* Remove NodeIdTable from the TaggedValue
* Remove StringTable from the TaggedValue
* Remove F64Table in place of F64Array in TaggedValue
* Replace TaggedValue::Color(Table<Color>) with ::Color(Option<Color>)
* Replace TaggedValue::GradientTable(Table<GradientStops>) with ::Gradient(GradientStops)
* Replace TaggedValue::BrushStrokeTable(Table<BrushStroke>) with ::BrushStrokes(Vec<BrushStroke>)
* Make TaggedValue::DocumentNode runtime-only with TypeDefault placeholder
* Make TaggedValue::ContextFeatures runtime-only
* Remove Serialize/Deserialize from Table<T>
* Add a widget for TaggedValue::BrushStrokes to visualize strokes and samples
* Define a reusable list of TaggedValue::TypeDefault types for its generated methods
* Re-save demo artwork
* Fix tool overlays and snap targets to use upstream Path node geometry not downstream final geometry
* Snap to upstream Path free points, dedupe the lookup via a helper
* Rename the 'Identity' node to 'Passthrough' internally
* Rename the 'Memoize' node to 'Cache' internally
* Let skip_impl proto nodes auto-generate as document node definitions
* Remove the wrapper 'Passthrough' node from document_node_definitions.rs
* Remove the wrapper 'Cache' node from document_node_definitions.rs
* Remove the wrapper 'Monitor' node from document_node_definitions.rs
* Remove the wrapper 'Noise Pattern' node from document_node_definitions.rs
* Remove the wrapper 'Brush' node from document_node_definitions.rs
* Remove the wrapper 'Transform' node from document_node_definitions.rs
* Code review improvements
* Rename Cache node back to Memoize
* More code review
* Compensate for upstream row-0 transform absorption in viewport-space 'TransformSet'
* Add 'editor:text_frame' row attribute so the Text tool's drag cage tracks multi-row text
* "Separate Glyph Elements" -> "Separate Glyphs"
* Improve artboard migration robustness from older documents
* Code review
* Make the tools visualize the text frame based on attribute not upstream node
* Stop pushing duplicate layer entries when re-clicking an already-selected layer
* Make Text node generate per-glyph bounding box click targets
* Show source-geometry outlines and aggregate all rows for layer click targets
* Strip 'editor:click_target' override on Path node so direct edits restore precise hit testing
* Fix inverting a zero-determinate transform
* Separate 'Clip' into its own node out from the removed 'Blending' node
* Code review
* Rename to Clipping Mask
* Update Opacity node in demo art that use it
* Use DIsplay not Debug for printing blend modes
* Use 'Transform', 'Gradient Type', and 'Spread Method' nodes for table gradients
* Add gradient widget to the tool's control bar and update where the two swap buttons go
* Fix gradient rendering
* Format
* Code review
* Add Table<GradientStops> gradient rendering
* Add SVG and Vello renderers for Table<GradientStops>
* Add thumbnail rendering for Table<GradientStops>
* Use row transform to map (0,0), (1,0) unit line to document space
* Set 100px width for the initially created gradient
* Add support of table gradients for the gradient tool
* Fix after review
* Thumbnail rendering of artboard with infinite gradient layer
* Hide radial gradient's reverse direction button for gradient table
* Remove unused imports
* Format
* Fix conflict with spread method
* Code review
* Fix thumbnails
* Connect up gradient_type and spread_method to attributes
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Replace the Artboard struct with a Table<Table<Graphic>> shape
* Remove the never-functional, seemingly unneeded migrate_type_descriptor_names due to typo
* Allow negative artboard sizes
* Move Vec<String> to Table<String>
* Remove old VecDVec2
* Move Vec<u8> to Table<u8>
* Move Vec<f64> to Table<f64>
* Move [f64; 4] to Table<f64>
* Move Vec<NodeId> to Table<NodeId>
* Tidy up the TaggedValue variants
* Move Vec<BrushStroke> to Table<BrushStroke>
* Add missing type implementations
* Fix tests
---------
* Feature-gate serde derives behind cfg_attr in all runtime node graph type crates
* Refactor Table to move its hard-coded fields into an attributes field
* Encapsulate TableRow/TableRowRef/TableRowMut attribute fields behind accessor methods
* Remove TaggedValue::GraphicUnused
* Refactor Table<T> to use dynamic attributes instead fixed names
* Fix code review soundness concerns
* Add todo work
* Replace row-oriented Table<T> API with column-oriented access
* Fix attribute propagation bugs
---------
* Rename 'Image Value' node to 'Image' and have its input value be Image<Color> not Table<Raster<CPU>>
* Add a Properties panel widget labeling "width x height" for images in the Image node
* Add Image<Color> node registry entry for MonitorNode
* Code review
* Add spread method support for gradients
* Add GradientSpreadMethod enum (Pad, Repeat, Reflect) to vector-types
* Add radio buttons to gradient tool and fill properties panel
* Convert spread method when importing SVGs via usvg
* Sync backup gradient input when changing spread method
* Table<GradientStops> rendering is not yet updated for spread method
* Sync gradient tool options with layer's gradient
* Sync gradient_type and spread_method from the selected
layer's existing gradient to the tool options bar when
switching to the gradient tool
* Refactor has_gradient_on_selected_layers
to reuse a new get_gradient_on_selected_layer helper
* Swap Reflect and Repeat order in UI radio buttons
* Fix alignment of the radio buttons in right panel
* Fix the position of the radio buttons in the tool
* Rename SpreadMethod to SetSpreadMethod
* Move default spread method omission logic
* Add checkered transparency rendering to infinite canvas and artboards
* Enable artboard clipping by default
* Make new infinite canvas documents begin with a white background layer
* Remove the export dialog's transparency option now that it's redundant
* Make exporting transparent JPGs use white not black
* 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 NaN points produced by Sample Polylines on 0-scaled input
* Fix Jitter Points inverse transform for zero-scale axes and stop resetting stroke transform
* Remove a couple confusing Debug nodes
* Fix edge case
* Update demo art
* Fix order change in Jitter Points causing different results from earlier
* Fix bug in bisect tool
* Break out functionality into helper functions
* 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
* Fix half-pixel offset on imported images
* Break out reused function
* Fix SVG/image open flow placing content with unnecessary Transform nodes
* Fix redundant Transform nodes when opening SVG/image files as documents
* Offset the parent to its destination position not the child objects
* Fix SVG/image File > Open artboard dimensions, origin, and clipping
* Fix the SVG to drag in at the mouse position relative to its visible center
* Fix importing images into offset artboards so they don't get offset as well
* Code review
* Make the order of Shape tool shape types consistent
* Add Arrow shape modifier keys and snapping support
* Add endpoint dragging to arrows
* Show the default cursor when hovering line/arrow endpoints
* Reduce duplicated function
* Fix incorrect coordinate spaces
* Improve endpoint dragging clarity
* 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
* Improve Gradient tool dragging behavior and make hints reactive to current interaction state
* Reduce code duplication for drawing stops
* Fix coordinate system issue when PTZ'ing document during drag or autopan