Skip to content

ExpressiveCSS v0.14.0

Choose a tag to compare

@BaezFJ BaezFJ released this 11 Oct 08:04
· 189 commits to master since this release
e48e958

Added

  • The expressivecss-review agent skill reviews a page, template, fragment
    or screenshot with five specialist subagents (theme and tokens, layout,
    component markup, lifecycle and accessibility, framework rules). It reuses
    the expressivecss guides, version resolver and expressivecss-lint, and
    returns one report scored out of 100 with five 20-point sections. One or two
    critical findings cap the score at 69, and three or more at 49.
  • .map is an interactive map built on MapLibre. The page installs
    maplibre-gl and passes the module to MapView.init(); ExpressiveCSS does
    not bundle it. .map-marker children sit at their data-lng-lat, can open
    a .map-popup named by aria-controls, show a .map-marker-label and be
    dragged with data-draggable. .map-controls buttons zoom, reset north,
    locate the reader and go full screen. addRoute(), addArcs() and
    addClusters() draw data in theme colors. The default OpenFreeMap style
    follows the light or dark theme.
  • .confetti bursts theme-colored confetti. A button with the class bursts
    from its center over the page when clicked, a <canvas class="confetti">
    bursts inside its own box, and Expressive.Confetti.fire(options) bursts
    over the page from script. Options cover the count, angle, spread, speed,
    gravity, drift, colors, shapes and size. The page canvas draws above an
    open modal dialog and lets clicks through. Nothing is drawn when the reader
    prefers reduced motion.
  • <canvas class="particles"> fills its positioned ancestor with drifting
    dots in the theme's on-surface color that lean toward the pointer. Options
    cover the count, size, color, drift and how far and how fast the dots
    follow the pointer. The canvas lets clicks through, and under reduced
    motion the dots are drawn once and stay still.

Changed

  • The docs site has a new shell. A rail holds the five catalogue groups from
    840px, with the current group's pages beside it from 1200px. Below 1200px
    the menu button opens the catalogue in a side sheet. Each page opens with a
    breadcrumb, title, description and a "View as Markdown" link, and the table
    of contents sits in a sticky column. Page content and URLs are unchanged.
  • The expressivecss skill is version 0.10.0. It adds guides for map,
    confetti and particles. Its version resolver sizes file reads to the file
    and reports a file that grows during a read as changed.

Fixed

  • Idle components no longer listen to the whole document. Carousel attaches
    its pointer listeners while a mouse press is down, Tooltip listens for Escape
    while open, and the docked date picker listens for outside clicks while
    shown.
  • Calling Forms.Init(), BottomSheets.Init() or SideSheets.Init() again,
    as a page that loads both the root and /modular entries can, no longer
    adds a second set of document listeners.
  • Menu.destroy() no longer throws when the menu's target element is missing,
    which used to leave its listeners attached.
  • Utils.throttle times calls with performance.now(), so a system clock
    change cannot hold a call back.
  • More hot-path fixes:
    • ScrollSpy skips the document-wide link lookup while the same section
      stays current.
    • MapView finds its zoom buttons once, not on every move event.
    • PieChart reuses one percent formatter per legend instead of making one
      per row.
    • Snackbar measures its width once per swipe, not on every pointer move.
    • Slider updates once per drag frame. Its pointermove update also ran
      before the browser moved the value.
    • The heatmap tooltip measures its cell before writing to the page.
    • Datepicker checks each calendar row's markup once.
  • Less work on hot paths:
    • Datepicker arrow keys inside the shown month move focus without
      redrawing the grid.
    • Autocomplete renders the result list once per keystroke while its menu is
      open. It used to render the previous results first, and twice more with
      isMultiSelect.
    • Particles stop animating and tracking the pointer while the canvas is off
      screen.
    • Carousel reads all item positions before writing parallax offsets and works
      out item sizes before setting them, so scrolling no longer forces a style
      recalculation per item.
    • Tabs throttle their window resize handling.
    • Utils.throttle no longer stalls when the system clock moves backwards.
  • Autocomplete with allowUnsafeHTML highlights the typed text inside the
    label's text only. It used to insert the highlight into the HTML string, so a
    match inside an attribute value could close the attribute and turn the rest
    of the sanitized label into markup.
  • Table-of-contents links are 48dp tall, the Material touch target, instead
    of 32dp. --md-comp-toc-item-height sets a denser height.
  • In Firefox, a carousel that moved several items while its item sizes were
    still changing could slide back to an earlier item after it had settled.
    Firefox re-snapped the track to whichever item it had passed mid-move.
    Snapping is now off while the carousel scrolls to an item and comes back
    once the item is in place.