Skip to content

Releases: markrusselldev/blockwright-blocks

blockwright-blocks 1.4.0

Choose a tag to compare

@markrusselldev markrusselldev released this 16 Oct 22:00

Your colors now stay put when the theme updates.

  • Color designer: your scheme was saved inside the theme's files, so a theme update put the default colors back. The plugin now keeps it, and schemes you already applied move over automatically. Colors the scheme does not set keep following the theme.
  • New: "Copy to site styles" keeps your colors if you deactivate the plugin.
  • The Colorfulness and Chroma limit controls reopen where you left them, and the designer works on hosts that block theme file writes.
  • Deleting the plugin now removes the data it saved.
  • On a theme other than Blockwright, the Design screen now says it is built for the Blockwright theme and links to it.

blockwright-blocks 1.3.1

Choose a tag to compare

[1.3.1] - 2026-09-21

Fixed

  • Design tool: the brand-color WCAG indicator now flags a color that had to be
    contrast-nudged. It grades the shipped color (post-fit), so an out-of-range
    pick used to read a false "pass"; per mode it now shows an amber "adjusted"
    state (with a word tag, not color alone) when the entered color was moved to
    stay legible. Grayscale is unaffected (its identity is mirrored, not fitted,
    so it stays a clean pass and never false-flags).

blockwright-blocks 1.3.0

Choose a tag to compare

[1.3.0] - 2026-09-18

Added

  • Design-system control plane (Appearance -> Design admin screen): a tabbed hub - an
    Overview that shows the modules at a glance plus shared restore points, then one tab per
    ability (Color live now; Typography, Spacing and Autowright stubbed "coming soon" so the
    structure is what it grows into). Tabs use the native TabPanel (ARIA tabs contract for
    free) and stay on one row.

    • Color module: pick a brand color plus a few bounded, WCAG-gated knobs and generate a
      full accessible color scheme, preview it live in light and dark, and Apply it to the
      active theme. One-click presets apply the theme's shipped schemes; the brand swatch
      follows the active color (preset or seed) and opens a color picker in place. The live
      preview is a small real interface (heading, links, the four button styles, and drawn
      checkbox/radio/focused-field) showing the brand color in context - the form controls are
      drawn rather than native so WP admin's own control styling cannot override the scheme
      color. The whole palette is also shown as a resolved light/dark token table, grouped by
      role and split into what the brand color drives vs what is independent, with each group
      collapsible.
    • Restore points are captured before every change, shown on the Overview and in the Color
      module, and can be deleted (the pristine "original" baseline is protected). The apply
      confirmation says a restore point was saved and clears itself.
    • Built on shared layers: the registry (which theme.json path the color category owns),
      the write engine (the supported theme.json file write - merge-patch the changed slice,
      surgically clear the same keys from the user Global Styles record, bust caches - with an
      automatic snapshot in uploads first), and the shared color recipe reused from the theme
      build. All writes require edit_theme_options + the REST nonce, and every incoming
      color value passes a strict allowlist. First ability; typography/spacing follow.
    • The shared color engine generates the filled-tonal Soft button (formerly "Accent") as a real solid tonal
      container (btn-soft-bg + hover/active + btn-soft-text ink gated to 4.5:1) alongside the
      Fill CTA (btn-fill-*), so every generated scheme - in the theme build AND this tool's
      Apply/preview - carries a real tonal button, not a faint accent wash. Button tokens are named
      after the styles (Fill/Soft); accent stays the brand color the swatch reads. Dropped the
      earlier "Bold accent" knob (it only produced an unshippably faint accent).
    • The WCAG-AA status line next to Apply is now quiet on success (a green check glyph, but the
      label itself is muted, not a green badge) and keeps the prominent red only for the actionable
      failure state; "WCAG AA" links to the W3C contrast-minimum page so users can learn more.
    • The color engine now degrades gracefully if the active theme's palette lags this plugin
      (a theme older than the plugin, or a stale theme.json cache): it generates every scheme it
      can and skips only the tokens the theme has not registered, instead of erroring out the
      whole tool. The build keeps the strict check that fails loudly on real drift.
    • The interactive role colors (links, their hover/active states, and the focus ring) are
      generated CONTRAST-FIRST - each solved to meet its accessibility target at the brand hue,
      rather than fixed to a preset lightness step. That keeps them vivid and on-hue in both light
      and dark instead of washing out pale (a dark-mode red link used to collapse to pale pink);
      tonal container backgrounds still derive from the ramp. On near-neutral schemes (Grayscale,
      Slate) a visited link is separated from the unvisited link by lightness, since there is no hue
      to distinguish them, so visited no longer renders identical to the link.
    • Added a committed color regression harness (npm run check:color-sweep): it runs a dense
      hue x chroma grid plus corner/known-bug fixtures through the shared engine and asserts WCAG
      AND identity (each role shade stays on-hue, is not chroma-collapsed, and the base link does not
      overshoot its target). The prior automated check gated only on contrast, which the wash-out
      failure mode passes - this catches it. All seeds pass.
    • Color module polish (pre-ship): preset chips now carry each scheme's own accent color
      instead of five identical buttons; the token-role groups collapse consistently (up to five
      rows, then a reveal) rather than one group showing six; the Advanced panel's control help and
      its lightness/contrast aside now share one type treatment; the Advanced panel has breathing
      room from the control above it; and the Chroma-limit help now names the hues the ceiling
      actually affects. Selecting a preset now syncs the controls to it (brand swatch, Chroma
      and Chroma-limit), so the sliders show the preset's real values and editing a control
      continues from the preset's hue instead of snapping back to the previously applied color.
    • The live preview now also renders the theme's editorial block-style roles in context -
      the brand site title (the exact brand color), the eyebrow, the badge pill, and the
      callout band - alongside the type/button/form samples, in both light and dark, so applying
      a scheme shows those roles rendered rather than only as swatches in the token table.
  • readme.txt: added a Source Code section linking the public GitHub repository (WordPress.org guideline 4).

Changed

  • Color engine unified onto one seed-build formula (the math the Design tool and the theme share):
    a fixed accessible lightness ramp at the brand's hue, with link/focus/tonal-button tokens derived
    as ramp aliases. Any brand color you enter - light, dark, warm, or neutral - now builds the same
    way, so the light-hue brands that used to come out muddy generate cleanly. Contrast is measured in
    the 8-bit color the browser actually paints, so the tool's "always meets AA" guarantee holds at
    render precision.
  • A solid button's automatic dark label is now a deep shade of the brand color instead of flat
    black (pure gray on a grayscale brand), and a visited link is a softer, desaturated shade of the
    link's own hue (the accessibility-recommended "used" look) - distinct per scheme, not all one
    purple.
  • The generated CTA fill IS the brand color (ADR 0015 "brand-hug") and its label is pure white: the
    engine uses the exact brand and moves its lightness only for a WCAG contrast floor (3:1 vs the page,
    and - since the CTA label is large text, bold 700 / 19px - a small on-hue deepen so white clears 3:1).
    The label gates at the WCAG large-text 3:1 level, so a pure-white label works on a vivid brand color;
    pale hues that can't reach white within the cap keep the dark brand-toned ink. The CTA is now
    borderless (the old btn-fill-border is removed - a white-labeled fill already reads on the page).
    WCAG 2 is the gate; APCA is advisory only, confirming the white labels are crisp (Lc 62-100) and never
    moving the fill (enforced by check:brand-fill, hue-locked, 0.14 L cap). Same math in the Design tool's
    live preview and the theme build, so they cannot drift. Details: docs/color-role-research.md §5.

Added

  • check:apca-advisory script (scripts/check-apca-advisory.mjs, dev-only): reports each shipped
    scheme's CTA fill/label APCA Lc in light and dark, flagging pairings that pass WCAG but read
    perceptually weak. Advisory - never gates. Uses a vendored, reference-validated APCA implementation
    (lib/color/apca.mjs, W3-licensed).

Security

  • Restore-point snapshots (uploads/blockwright/snapshots/) are now web-hardened on creation:
    a core-style <?php // Silence is golden. index.php in the directory and its parent to
    prevent directory listing on any server, plus a .htaccess denying direct file access on
    Apache/LiteSpeed (guarded for Apache 2.4 and 2.2). The files capture theme.json and the global
    styles record, so they should not be publicly listable or fetchable.

Fixed

  • The palette token-reference group titles and descriptions in the Color module are now
    translatable (__()); they were previously hardcoded English and shipped untranslated.
  • REST design routes now return the correct HTTP status for each condition (404 for a missing
    restore point, 409 for a not-writable/locked theme, 422 for an unreadable snapshot) instead of
    a blanket 400/500; the status is set at each error's source in the write engine.
  • The generated-scheme WCAG gate now also covers the active and visited link states (it checked
    only the default and hover states), so the tool's "always meets WCAG AA" statement holds for
    every emitted link color. Verified across the full brand-seed spread.
  • The color engine's CTA-fit fallback for extreme (very light/dark) brand colors now clamps
    lightness to the valid band, so it can never emit an out-of-range OKLCH value.
  • The live preview is now marked inert: its illustrative buttons and links are no longer in
    the tab order or exposed to screen readers (the accessible path to every value is the token
    inventory below). A translatable, non-split engine-error message replaces a concatenated one.
  • Applying a scheme no longer offers a no-op Apply on page load (which created an empty restore
    point); Apply activates only after a real control or preset change.