* perf(app): defer inactive Code panel generation
- Skip JSX serialization and syntax highlighting while the Code tab is hidden
- Restore code generation when desktop or mobile users activate the tab
- Cover large Design-tab selections without hidden Code-panel work
* test(app): cover deferred Code panel updates
- Keep mobile JSX generation inactive while the drawer is closed
- Measure the complete two-frame inactive selection flow
- Verify mobile Code output refreshes when the drawer reopens
- Show complete user messages with every image immediately after sending
- Analyze up to four bounded images without adding pixels to Design context
- Organize image handling under the extensible attachment domain
- Resolve clipPath geometry referenced through use elements
- Import clipped paint runs as editable mask groups
- Cover clipped multicolor SVG imports with a regression test
- Build parent-to-child indexes once while decoding Figma clipboard data
- Reuse the index for hierarchy traversal and internal component discovery
- Avoid quadratic scans that blocked large flat pastes
- Return native FIG archives as raw IPC responses instead of JSON byte arrays
- Decode the response as an ArrayBuffer and cover the binary contract
- Prevent large desktop exports from multiplying memory use during save
- Route bounded selection renders through the optional Vision model
- Return compact text findings without retaining image data in Design chat history
- Bound MCP and AI image exports by their longest pixel edge
- Track loaded font provenance and aggregate page-level face fidelity, including synthesized styles and active Inter substitutions
- Add a localized warning banner with retry and affected-layer actions
- Expose get_font_status through the Figma API and MCP tool registry
- Persist debounced FIG snapshots for source-less documents in IndexedDB
- Restore or discard orphaned snapshots from the editor startup dialog
- Clear recovery data after successful saves and explicit tab closure
- Report credit and output-limit failures through localized toasts and debug logs
- Persist optional provider-specific reasoning effort on model profiles
- Classify insufficient-credit connection tests and cover failure diagnostics
- Standardize release headings across every version
- Consolidate historical sections into the public changelog taxonomy
- Normalize bullet punctuation while preserving release wording
* fix(tauri): prevent Windows font loading crashes
- Return native font files over binary Tauri IPC instead of JSON byte arrays
- Resolve desktop script fallbacks without parsing large system fonts in JavaScript
* fix(core): restore quality checks
- Use the shared Vector primitive for render-bound offsets
- Remove unsupported SLICE handling from SceneGraph rescaling
- Drop an unused generated-text test binding
* chore: address font fix review
- Place the release note under the Fixed heading
- Name fallback resolution options and use the shared Tauri constant
- Render segments not referenced by any region loop alongside filled paths\n- Add focused path construction coverage and a canvas visual snapshot\n- Resolve Plugin API type-aware lint findings exposed by the full quality gate
- Match Figma rescale behavior across geometry, typography, effects, and descendants\n- Expose page backgrounds through preserved FIG metadata\n- Return nullable visual render bounds with stroke, effect, and clipping support\n- Cover the Plugin API behavior against live Figma probes
* fix(storage): polish workspace and connection feedback
- Move Refresh into the Storage Workspace header and keep shell theme actions available outside the editor route
- Split native shell and editor menu listeners behind the app shell
- Replace permanent CORS controls and inline connection results with standard toasts and clearer browser guidance
* fix(app): harden native menu routing
- Dispose menu listeners that finish registering after their Vue scope closes
- Mark shell-owned actions in the shared menu schema instead of duplicating IDs
- Cover route-neutral shell action classification
* fix(core): preserve inline SVG primitives
- Convert parsed circle, ellipse, rect, line, polyline, and polygon children through the shared SVG path pipeline
- Preserve nested presentation attributes, transforms, and JSX-style SVG attribute names
- Cover mixed and primitive-only inline SVG renders
* chore: format merged mobile navigation
* fix(core): disambiguate xmldom document types
- Alias the xmldom Document type so clean CI does not resolve it as the browser DOM type
- Guard the generated SVG document root before collecting paths
* fix(core): preserve inline SVG root styles
- Carry root presentation properties into parsed SVG child conversion
- Apply nested SVG transforms before creating vector networks
- Cover inherited root fills and transformed primitive geometry
* fix(core): scale transformed SVG strokes
- Use macOS predefined copy, cut, and paste menu items so WebKit routes accelerators to focused editing controls\n- Keep canvas clipboard events handled by OpenPencil and recognize composed contenteditable targets\n- Cover editable input and nested contenteditable event paths
- Localize import, collaboration, settings, color, font, and accessibility text across supported locales
- Synchronize the document language through reactive Unhead attributes
- Translate connection failures, browser fallbacks, notifications, and save prompts
- Remap component IDs through SceneGraph updates so the instance index stays consistent
- Cover imported instances resolving through the remapped source ID
- Restore source component synchronization for the reporter's .fig file
- Load Prism JSX only after exposing the Prism runtime
- Treat unavailable MCP automation as optional during startup
- Connect the desktop automation bridge only after MCP is ready
- Load embedded Figma thumbnails through bounded S3 byte-range requests
- Add a headless Vue workspace composable with lazy previews and refresh lifecycle
- Cache local previews and refresh the workspace after saves and synchronization
- Rename first-party API, RPC, JSON, CORS, SVG, JSX, and related identifiers to preserve acronym casing
- Keep upstream and serialized boundary names unchanged
- Add a lint guardrail and migration notes for exported APIs
- Separate model, connection, and advanced settings
- Resolve capabilities and output limits from provider catalogs
- Keep custom model compatibility declarations explicit
Keep authoritative derived glyphs through layout, alignment, fill, and decoration changes while still invalidating them for actual shaping edits.
Add scene-graph invalidation coverage and a Gold Preview fixture regression test.
Co-authored-by: Joseph Cumines <joeycumines@gmail.com>
- Scale retained margins to a fixed device-pixel budget on large viewports
- Fall back to direct scene rendering when CanvasKit rejects an offscreen surface
- Cover the reported wide HiDPI geometry without coupling rendering to a WebGL context
- Traverse fixed wrappers only to reach descendants with SCALE constraints
- Preserve fixed siblings and use component geometry as the scale basis
- Cover target-aspect icons without changing the Preline geometry baseline
- Use preserved targetAspectRatio metadata as the instance scale basis
- Scale nested geometry through fixed wrapper layers
- Cover proportion-constrained logo imports with a regression test
- Return rotation and reflection matrices for relative and absolute transforms
- Preserve authoritative imported FIG transforms until geometry is edited
- Cover nested rotation and reflected vector behavior
- Reconcile stale generated text widths with CanvasKit measurements
- Propagate effective widths through HUG containers while preserving fixed geometry
- Cover component-lineage and stretched-text safeguards
- Preserve Figma min/max constraints, scalar variable bindings, and direct text bounds
- Reflow only authoritative generated instance geometry and pinned descendants
- Avoid double-applying auto spacing and unsafe lone-child normalization
- Reframe entries around user-visible outcomes and consolidate related changes
- Document missing features, fixes, performance improvements, and SDK migrations
- Support vectorPaths, vectorNetwork, and async network assignment
- Normalize geometry bounds and preserve winding and region paint semantics
- Validate network topology and expose handle mirroring only on vectors
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Include stroke color and rounded weight in node and child summaries
- Select the first visible stroke when hidden paints precede it
- Cover both describe output paths with mixed stroke visibility
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>