Skip to content
HELiX

Upgrading to 3.9.0

apps/docs/src/content/docs/migration/3-8-0-to-3-9-0 Click to copy
Copied! apps/docs/src/content/docs/migration/3-8-0-to-3-9-0

This release adds the @helixui/icons peer dependency and refactors internal icon rendering across 25+ components to use <hx-icon>. Most consumers will not notice — pre-3.9.0 bare-name <hx-icon name="check"> usage is preserved via the empty-default library attribute.

@helixui/library@3.9.0 adds a new required peer dependency:

Terminal window
pnpm add @helixui/library @helixui/icons @helixui/tokens

If you’re upgrading an existing project that already has @helixui/library, add @helixui/icons to your dependencies.

The library attribute on <hx-icon> defaults to the empty string in 3.9.0. This preserves the pre-3.9.0 contract where <hx-icon name="check"> renders <use href="#check"> against a document-local sprite — exactly the behavior consumers had before. To opt into the new registry, set library explicitly:

<!-- back-compat: document-local sprite (no change from 3.8.0) -->
<hx-icon name="check"></hx-icon>
<!-- new in 3.9.0: registry-resolved fa-free library -->
<hx-icon library="fa-free" name="check"></hx-icon>
<!-- new in 3.9.0: curated helix glyph set -->
<hx-icon library="helix" name="check"></hx-icon>

See the @helixui/icons docs for the registry API.

The following components were migrated from inline SVG to <hx-icon library="helix"> internally — no consumer change required. Listed here for awareness:

  • hx-alert, hx-banner, hx-toast (status icons)
  • hx-checkbox (check) — hx-radio’s selected dot is still drawn in CSS, not migrated
  • hx-rating (star)
  • hx-tree-item (chevron) — hx-tree-view itself does not render an icon; the chevron lives on the leaf item
  • hx-stat (trend arrow)
  • hx-combobox (chevron) — hx-select continues to draw its chevron as a CSS shape, not migrated
  • hx-date-picker, hx-time-picker (calendar/clock)
  • hx-file-upload (remove/close glyph for file removal — the upload affordance itself stays SVG)
  • hx-copy-button — renders icons via slots (does not import or render hx-icon internally)
  • plus a handful of smaller surfaces

hx-pagination remains on literal chevron characters ( / ) for now — not migrated to hx-icon in 3.9.0.

<hx-slider> and <hx-file-upload> now wire ElementInternals.setValidity() so they participate in native form-validity machinery. Consumer apps reading form.checkValidity() or form.reportValidity() will now see these components in the validation flow.

This closes the WCAG 3.3.6 Error Prevention (All) gap. No consumer migration required.

The 3.9.0 release fixes structural issues in the AAA cert harness that were producing inaccurate verdicts. The current matrix:

  • 376 Supports verdicts (44 components × applicable criteria)
  • 0 Partial verdicts
  • 0 Fail verdicts
  • 109 Not Applicable cells (criterion does not apply per component class)

Reproducible via pnpm aaa:audit against a running Storybook.

See the VPAT 2.5 conformance report for the per-criterion ledger.

None. The version was originally cut as 4.0.0 due to a changeset-config defect (deprecated on npm); the corrected 3.9.0 publish is the canonical release.