* Delete dead code function
* Add a Gradient Interpolation axis with Stepped, Linear, and Smooth paths through the stops
* Keep the gradient interpolation attached when dragging stops in the picker
* Give the gradient popover's dropdowns the same tooltips as their row labels
* Order the gradient popover with Intrp. above Space
* Hold gradient stops in place when the cyclic flag is toggled
* Fix wrong Smooth gradient colors around stops sitting on the ramp boundaries
* Consolidate gradient settings plumbing and fix bugs
* Bundle whole-ramp gradient settings into GradientSettings across the editor plumbing
* Name the Smooth gradient interpolation's spline type in its tooltip
* Linearize the gamma hex stop colors recovered from imported Graphite SVGs
* Code review
* Aim the Smooth bake's seam subdivision at the copied boundary color
* Add GradientEvaluator to build gradient sampling state once per loop instead of per sample
* Correct the gradient evaluator's documented setup cost to O(n log n)
* Add a Cyclic gradient attribute that wraps the stop list through the 1|0 boundary back to the first stop
* Show the wrap segment's midpoint diamond in the color picker spectrum strip when cyclic
* Keep the wrap midpoint diamond tracking the pointer by a wrapped strip width when dragged past the ends
* Give the Gradient tool's viewport overlay the same cyclic wrap midpoint diamond and drag behavior
* Correct the docs claiming the final stop's midpoint is always ignored now that cyclic uses it
* Move the gradient cyclic toggle onto the Ends row as a Link icon checkbox
* Update labels
* Register GradientHueDirection with the Data panel so its attribute column renders
* Reword wrap segment to wrapped interval and stray segment usages to interval
* Clean up comments
* Fix the color picker write-back losing default position elision and the blend path guessing the cyclic flag
* Add an OkLab gradient interpolation space and make it the new default
* Fix the Properties panel fill row resetting the gradient interpolation space to the default
* Add OkLch, Lab, LCh, and HSL gradient interpolation spaces
* Add a hue direction attribute and picker choice for polar gradient interpolation spaces
* Add an HSV gradient interpolation space
* Rename the sRGB Linear and sRGB Gamma gradient spaces to RGB Linear and RGB Gamma
* Divide the gradient interpolation dropdown between absolute and relative color spaces
* Rename the OkLch gradient interpolation space to OkLCh for channel-notation capitalization
* Shorten the color picker popover's hue direction row label to Arc
* Call the Gradient Interpolation node's parameter Space and extend the picker tooltip title to match
* Rename the gradient interpolation attribute and type family to gradient space
* Rename the gradient tool's gradient space transform to gradient to viewport transform
* Add serde aliases and a node replacement covering the gradient space renames
* Give the gradient space choices artist-facing labels and reorder the dropdown sections
* Add a Gradient Hue Direction node and its attribute read node
* Say interpolate instead of blend for gradient stop color traversal in docs and tooltips
* Label the polar perceptual gradient spaces as Perceptual Hue and group the dropdown sections by geometry
* Add a migration alias covering the gradient space attribute reader rename
* Carry the gradient hue direction attribute through boolean operations
* Register GradientHueDirection wire types in the node registry
* Build dropdown menu entries from choice type metadata
* Add a gradient interpolation color space attribute, blending stops in linear light by default
* Add a Space interpolation dropdown to the color picker popover
* Stamp legacy gradient ramps with their implicit gamma interpolation during deserialization
* Resolve color-interpolation from SVG style blocks and fix cascade order among repeated declarations
* Rename spread method to gradient spread so it matches the other gradient attribute names
* Keep the legacy gradient struct's spread method field name matching its on-disk key
* Add a spread method field to GradientRamp, carried at runtime as the gradient item's attribute
* Retire the Fill node's spread method input, folding its value into the gradient ramps on document upgrade
* Add an Ends spread method radio to the color picker popover, replacing the Gradient tool's control bar radio
* Update the demo art
* Introduce the GradientRamp exchange struct as the serialized TaggedValue::Gradient payload
* Unify FillChoice and FillChoiceUI into one enum generic over color format, carrying GradientRamp stops
* Rename the TaggedValue::Gradient variant to GradientRamp to match its payload
* Move the Color variant into the tagged_value macro list since its stored and wire forms match
* Rework Gradient into a newtype of List<Color> with optional position and midpoint attributes
* Fix Vello stopless-gradient fallback coverage, empty legacy gradient tables, the node docs gradient swatch, NaN position elision, and wired setter input overwrites
* Allow using any graphics type for fill
* Adapt gradient/fill property panels and tools to handle List<T>
* Make the initial gradient transform covers the target's bounding box
* Introduce AnyGraphicListDyn to avoid combinatorial explosion
* Allow using any graphics type for stroke paint
* Add FIll node migration
* Add `for_each_vector_list_mut` instead of `set_paint_attribute`
* Adapt paint flow to read and write attributes instead of legacy Fill/Stroke.color
* Fix responsibilities of paint related node input setters
* Fix Morph by storing List<Graphic> for attributes rather than the concrete types
Store fill/stroke paints as List<Graphic> so Color/Gradient transitions
do not hit set_attribute_value_dyn's type-mismatch fallback to default paint.
* Preserve paint attributes in vector editing ops
* Enhance the clarity between direct and chained fill gradients
* Update demo arts
* Consolidate Fill node gradient appearance inputs
* Fix after the cubic review
* Revert "Consolidate Fill node gradient appearance inputs"
This reverts commit 9622feb20196e2c4da99e98ca95dcc2e34c2c98e.
* Replace AnyGraphicListDyn with generic paint connectors on the Fill and Stroke nodes
* Canonicalize paint attribute storage to List<Graphic> with a single write helper
* Fix Solidify Stroke missing fills stored in the legacy style
* Fix Solidify Stroke producing invisible strokes for legacy-only stroke colors
* Fix the initial gradient transform ignoring the bounding box's vertical extent
* Step paint at the morph midpoint instead of dropping it for unmixable pairings
* Remove migration-stage comments
* Clarify the initial gradient transform helper's doc and name
* Correct the bake_paint_transforms doc and prune dead tolerance arms
* Delete the unused Gradient::lerp
* Fix a comment typo
* Thread network paths through the legacy gradient bake so nested fills migrate
* Restore the legacy fill fallback in Expand Fill and Stroke
* Read gradient stops from the node's own input in the Fill properties panel
* Use the transform input constant instead of a hardcoded index
* Remove the unreachable wired color fallback in the Fill properties solid branch
* Narrow the fill overlay redraw check to actual fill inputs
* Coalesce the fill setter's graph runs into a single dispatch
* Position the Gradient Value node inserted for gradient stops
* Bake backup gradient placement during migration
* Persist pending gradient bakes so unfinished migrations retry on reopen
* Migrate the backup gradient's type and spread method
* Harden the gradient-migration pass against document switches and stale bakes
* Keep the Fill properties UI for layerless and nested Fill nodes
* Leave a wired gradient transform input connected instead of overwriting it
* Refuse to start a gradient chain ahead of existing layer content
* Decode a Fill node's gradient through one shared reader
* Nudge a degenerate bounding box so the Fill gradient transform stays invertible
* Broadcast Fill and Stroke paint with a single attribute-column pass
* Fix Morph stepping the target's stroke in near the source instead of the target
* Tidy conventions: clippy get_first, comment periods, sentence-case test messages
* Reattach the gradient orientation doc to its function
* Re-save demo artwork
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* feat: Render List<String> as raw paths in SVG and Vell mode
* chore: code review
* chore: change the hardcoded layout bounds to parley's
* chore: code review
* feat: Split text node to text_layer and text_to_vector node
* fix: CI fail because of difference in nature of Mac and github action
* chore: fix
* chore: replace FontStack as it got removed in parley 0.9
* chore: fmt
* chore: migrate the rendering as of new resource architechture
* chore: add text_layer node to text tool for testing
* code review
* Make boolean ops support the Text type
* chore: Move fallback_font_resource authority from editor to text node
* Fix 'Text Layer' node missing font dropdown
* Change node doc comments from Vec<T> to T[]
* Add migrations from the old Text node to Text -> Text to Vector
* Consolidate
* Rename the text attributes and reorder tilt to come before max_width/height
* Detect legacy Text nodes in the split migration by their trailing separate_glyphs input
* Code review
* Frame Text layer thumbnails by laying out their text for bounds
* Give Text layers click targets and selection outlines via collect_metadata
* Route Text tool through Text to Vector with fill, fixing editing-preview placement
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>