# Changelog
## 8.0.1 - 2026-05-18
- Fixed text input selection geometry on the web by using the same non-wrapping
shaped text layout for paint, caret placement, and selection highlights.
- Aligned the direct `cosmic-text` dependency with `glyphon` so browser and
native text measurement use the same shaping engine.
## 8.0.0 - 2026-05-18
- Added application-shell APIs for command registries, scoped hotkeys,
shortcut remapping, command diagnostics, and command palette examples.
- Added the animation state-machine runtime with inputs, triggers, blend
bindings, topology morph values, debug graph views, and showcase examples for
timed, scrubbed, boolean, and interaction-driven animation.
- Added host capability profiles and backend diagnostics for native, web, and
test hosts so applications can gate hotkeys, text editing, canvas editing,
flycam input, docking, drag/drop, and accessibility behavior explicitly.
- Expanded canvas input support with key release, raw mouse motion, cursor
capture requests, host-capture diagnostics, WGPU canvas callbacks, and replay
coverage for editor-style and flycam-style interactions.
- Added reusable diagnostics for layout, paint, intrinsic sizing, accessibility,
command routing, theme editing, animation, runtime errors, platform responses,
virtualization, and performance summaries.
- Added interaction recording and replay infrastructure, scenario harnesses,
long-wheel helpers, topmost input-consumption assertions, and external
showcase regression tests.
- Added virtualized tree and data-table APIs with stable focus preservation,
selection/export/sort/filter/resize metadata, sticky regions, diagnostics,
and showcase coverage.
- Added docking workspace primitives with split panes, drawers, drawer rails,
persisted layout snapshots, panel reorder targets, floating panel state, and
domain-neutral dock drag/drop contracts.
- Added layout animation transition records and reduced-motion-aware paint-list
interpolation while keeping layout output authoritative.
- Hardened widget layout, scroll, overlay, text input, selection, scrollbar,
color picker, styling, forms, media, drag/drop, and showcase behavior through
generic primitive fixes instead of showcase-only sizing patches.
- Added the WASM/WebGPU showcase path for GitHub Pages, including root and
`/showcase/` artifacts, favicon packaging, browser smoke checks, and web
startup error reporting.
- Documented v8 API stability categories and the reusable release process for
future Operad releases.
## 7.0.0 - 2026-05-14
- Started the v7 source-organization pass by moving retained document
primitives into `src/core/document.rs` and widget module wiring into
`src/widgets/mod.rs`.
- Added `operad::prelude` as the preferred broad import surface for application
code.
- Added v7 roadmap, migration-guide, and release-checklist drafts so API moves,
compatibility aliases, widget parity work, and release gates are tracked as
work happens.
- Carried the released `6.1.0` WGPU baseline forward, including `wgpu` 29.0.3
and `glyphon` 0.11.0.
- Moved widget-gated tests out of `core::document` and into the widget module
so the first source split also moves module ownership for widget behavior.
- Added v7 widget builders for text-style labels, standalone images,
separators/spacers, spinners, radio buttons/groups, toggle switches, visual
drag values, generic grids, and panel containers so examples can use normal
Operad primitives instead of hand-building those nodes.
- Added renderer-neutral performance diagnostics that name frame pipeline stages
and aggregate cache hit, miss, and eviction rates from display-list reuse
reports.
- Added v7 overlay/widget builders for collapsing headers, tooltip boxes, and
modal dialogs so examples and applications can use normal Operad surfaces
instead of hand-building those nodes from low-level containers.
- Added link, hyperlink, and selectable-label builders so egui-style text
controls are available separately from selectable read-only text input.
- Added text-input convenience builders for single-line input, multiline input,
text areas, code editors, search boxes, and password fields.
- Added generic drag/drop source and drop-zone builders backed by the existing
drag/drop descriptors and platform drag-start requests.
- Added small, icon, image, toggle, and reset button convenience builders on top
of the default button primitive.
- Added form section, row, field label, help text, validation message, and error
summary widget helpers backed by the existing form validation contracts.
- Added egui-style container helpers for panels, frames, groups, sides, columns,
indentation, resize handles, and resize containers.
- Added compact color button, color swatch button, color-format display, and
RGB/RGBA/SRGB/SRGBA/HSVA/OKLCH color-edit button helpers.
- Added menu-button state, trigger builders, image menu buttons,
image-and-text menu buttons, submenu item helpers, and anchored submenu popup
composition.
- Added selectable-value and angle-drag helper builders over the existing
selectable-label and drag-value primitives.
- Added egui-style color conveniences for premultiplied/unmultiplied RGBA and
SRGBA buttons, `Color32`-style color buttons, and standalone HSV 2D picker
fields.
- Added `area` and `scene` widget helpers so absolute-positioned regions and
scene primitives can be built through the normal public widget API.
- Added widget interaction helpers for visible/enabled UI blocks, fixed/minimum
allocations, scene painter allocations, and programmatic scrolling.
- Added global theme preference button-group and switch builders so applications
can expose System/Light/Dark theme controls without showcase-specific code.
- Added form action buttons plus field-order traversal helpers for
submit/apply/cancel/reset workflows.
- Added tooltip trigger resolution and tooltip animation presets to the widget
layer.
- Added modal dialog dismissal policy, focus-trap helpers, and overlay-frame
event helpers to the visual modal builder.
- Added drag-image policy and drop-preview state helpers to the drag/drop widget
layer.
- Added a composed scroll area with aligned vertical/horizontal scrollbar
helpers.
- Added required frame-stage and cache-domain performance diagnostics to the
unified diagnostic report surface.
- Documented v7 performance stress probes, budgets, and repeatable smoke
commands outside the showcase.
- Trimmed package contents so old internal planning docs are not shipped as
current crate guidance.
- Added a v7 showcase audit covering public API use, hidden harness removal,
widget state coverage, text input, scrollbar, and overlay validation.
## 6.1.0
- Updated the optional WGPU stack to `wgpu` 29.0.3 and `glyphon` 0.11.0 so
native-window and GPU canvas consumers can share the same WGPU version as
downstream renderers that have already moved past WGPU 25.
- Adjusted the WGPU adapter for WGPU 29 surface acquisition, pipeline layout,
render pass, polling, sampler, and glyphon text-buffer APIs.
## 6.0.0
- Added a native window runner so simple apps can open a window with
`run_ui_document` or `run_app` instead of wiring winit and WGPU by hand.
- Added a widget library for common controls, including buttons, checkboxes,
sliders, text input, selection controls, menus, date and color pickers,
lists, tables, trees, floating windows, toasts, popup panels, and canvas
surfaces.
- Added app-owned WGPU canvas rendering. Applications can declare a GPU canvas
in the UI tree, register a renderer with `NativeWgpuCanvasRenderRegistry`,
and record their own WGPU work into the canvas texture before Operad
composites the UI.
- Added `WgpuCanvasContext` and `WgpuCanvasRenderPass` under the `wgpu` feature.
`WgpuCanvasContext::render_pass` remains a convenience helper for simple WGSL
passes; apps can also create command encoders and render passes directly.
- Added OKLCH support to the color picker and fixed hue endpoint handling so
dragging hue to the far right no longer snaps the control back to the left.
- Removed the transient WebGL/WebGL2 naming from the canvas API; the public
surface uses native GPU and WGPU terminology.
- Moved the source tree toward the v6 module organization while preserving
common v5 public compatibility paths for downstream consumers.
- Updated README, migration notes, and release validation guidance for the v6
public API.
## 5.0.0
- Added Operad-owned public layout primitives for common API use, with conversion
paths back to `LayoutStyle` and Taffy for migration and advanced cases.
- Added localization and internationalization policy types for locale identity,
text direction, bidi behavior, layout mirroring, and dynamic label metadata.
- Carried localization policy through text content, localized labels, paint
output, and accessibility metadata.
- Added public API stability/versioning marker types so v5 consumers can
distinguish stable, experimental, backend-specific, and migration-only APIs.
- Added backend-neutral runtime/frame lifecycle contracts, widget action queues,
retained widget state lifecycle, edit transactions, and selection/history
helpers for interaction-oriented hosts.
- Added core widget action routing helpers and action bindings for buttons,
checkboxes, sliders, and text inputs.
- Wired widget text input edits into `TextEditHistory`, including committed
transactions and keyboard undo/redo for text input state.
- Added async task lifecycle and form validation contracts for progress,
cancellation, stale async results, dirty/pending state, submit/apply/cancel
workflows, and accessible error summaries.
- Added shared effective-geometry, advanced scrolling, compositor feature, and
resource cache lifecycle contracts for renderer and host integration.
- Added font lifecycle contracts for fallback stacks, loaded/missing/failed
states, generation checks, cache byte accounting, and eviction planning.
- Added headless accessibility adapter contracts, accessibility target
publication records, error classification, resource/input limits, and release
guardrails for adapter and renderer failures.
- Added an optional `accesskit-winit` adapter that converts Operad
`AccessibilityTree` output into AccessKit tree updates and publishes it
through winit hosts.
- Added touch/stylus/gamepad routing, multi-window routing, navigation/overlay
contracts, virtualization planning, tooltip/help/context menu policy, unified
diagnostics, and theme/design-token stability documentation.
- Updated consumer-style probes and render tests to use the new public
conversion helpers where direct backend layout fields are not required.
- Documented the v5 completion audit, migration posture, release checklist, and
CI/release gates for fmt, feature-matrix checks, docs, examples, package
verification, WGPU validation, perf smoke, and semver review.
- Added a bounded native WGPU window smoke mode to `native_wgpu_host` so release
validation can prove OS-surface presentation without snapshot readback while
keeping display-dependent execution opt-in.
- Added CPU/WGPU rich-rect gradient rendering coverage and corrected compositor
quality profiles so fallback and unsupported effects are not overclaimed.
- Added explicit composited paint layers with CPU snapshot reference rendering
and WGPU render-to-texture composition for rounded clips, rectangular masks,
opacity, and basic brightness/contrast/saturate/blur filters.
- Added CPU/WGPU soft rich-rect shadow falloff coverage and compositor quality
planning for basic native shadow blur limits.
- Added WGPU parity coverage for glyphon text inside composited paint layers
and release-gated the sRGB-only snapshot color-management policy.
- Added explicit compositor quality fallback records for backdrop filters, which
remain disabled until a backend samples the already-composited framebuffer.
- Added lyon-backed path fill/stroke tessellation with even-odd holes, curved
concave fills, configurable stroke caps/joins, and WGPU parity coverage.
- Added WGPU parity coverage for fractional grayscale glyph positioning without
claiming RGB/LCD component subpixel masks for v5.
- Expanded the native WGPU host example document to include buttons, text input,
popup/menu items, a drag-handle target, and a canvas viewport.
## 4.0.0
- Added optional `wgpu` rendering support behind the `wgpu` feature.
- Added `WgpuRenderer` and `WgpuSurfaceRenderer` exports under the `wgpu` feature.
- Added GPU snapshot parity test coverage in `tests/wgpu_snapshot_parity.rs`,
covering CPU parity, texture upload, SDF rounded rectangles, glyphon text, and
paint order across text and geometry.
- Added WGPU no-readback perf coverage for cached text and mixed changing UI
scenes, with a release-mode 1 ms p95 render budget.
- Added opt-in GPU render-pass timestamp timing via `RenderOptions::collect_gpu_timing`.
- Added glyphon text chunk caching so changing one text run does not force
preparing every visible text surface each frame.
- Split the legacy egui painter into `egui-renderer-compat`; the `egui`
feature now represents host/input/platform compatibility rather than the
renderer backend path.
- Added initial v4 migration guidance and release checklist.
- Added v4 migration-compat constructors so legacy `taffy::Style` inputs can be passed
into common node/style constructors (`UiNode::container`, `UiNode::text`, etc.) during
downstream upgrades.
- Expanded migration compatibility in widget entry points by allowing
`label`/`scroll_area` to accept legacy layout styles and adding `with_layout(...)`
to widget option structs (`ButtonOptions`, `CheckboxOptions`, `SliderOptions`,
`TextInputOptions`, `ComboBoxOptions`).
## 3.0.0
- Breaking layout API updates (LayoutStyle ownership migration) and host/rendering
modernization for v3 contracts.