Changelog
Release history for ARC UI. All packages are versioned together.
v2.1.0 — Export Namespace Fix
Resolves a namespace collision where @arclux/arc-ui/input imported the
input category barrel instead of the arc-input component.
Breaking Changes
- Category barrel exports moved — Tier barrel imports like
@arclux/arc-ui/input,@arclux/arc-ui/content, etc. are now under@arclux/arc-ui/categories/(e.g.@arclux/arc-ui/categories/input). No known consumers were using the old paths.
New
@arclux/arc-ui/input— Now correctly registers thearc-inputcomponent, matching the convention used by all other components.
v2.0.1 — Export Fixes & Build Pipeline
Fixes 43 missing package exports and consolidates the build pipeline into a single orchestrator with automatic export syncing so missing exports can never slip through again.
Bug Fixes
- 43 missing package exports — The
exportsmap in@arclux/arc-uiwas missing entries for all 14 new v2 components and 29 older components. Imports like@arclux/arc-ui/prosenow resolve correctly.
Infrastructure
- Unified generate pipeline — Replaced 5 chained npm scripts with a single
scripts/generate.jsorchestrator. Runs tokens → registrations → brand → Prism → exports with per-step timing output and fail-fast error handling. - Automatic export syncing — New
scripts/generate-exports.jsscans all.register.jsfiles and adds any missing entries topackage.jsonexports duringpnpm generate. Missing exports can no longer slip through.
v2.0.0 — Design System Overhaul
A major release adding 14 new components, theme presets, category-level package exports, a type scale overhaul, and a comprehensive quality pass across the entire library. Standardizes token usage, fixes subtle bugs, improves mobile interactions, and brings the full sci-fi luminescence vocabulary to every interactive surface.
New Data Components
arc-diff— Line-based text diff viewer with inline and side-by-side modes. Uses a longest-common-subsequence algorithm to highlight added, removed, and unchanged lines with color-coded backgrounds.arc-key-value— Key-value pair list with horizontal and stacked layout modes. Pairs render with uppercase accent-font labels and optional dividers. Hover highlights each pair row.arc-countdown-timer— Live countdown to a target date with segmented day/hour/minute/second cards. Numbers use gradient accent text with tabular-nums alignment. Dispatchesarc-expiredwhen the countdown reaches zero.arc-comparison— Multi-column comparison table for pricing tiers and feature matrices. Accepts JSON-driven features and column values. Boolean values render as check/cross icons. Supports a highlighted column with accent styling.arc-sparkline— Tiny inline SVG line or bar chart for embedding metrics in tables, stats, and cards. Supports area fill, custom colors, and a draw-in stroke animation on load.arc-description-list— Structured term/detail pair list in a responsive grid. Supports multi-column layouts with automatic vertical dividers and collapses to a single column below 640px.
New Typography Components
arc-blockquote— Styled pull-quote with a top gradient accent line, decorative opening-quote glyph, and optional citation footer. Supports a default and accent variant with gradient text.arc-prose— Long-form content wrapper that applies typographic rhythm to slotted HTML. Styles headings, paragraphs, lists, links, code blocks, images, and tables with consistent spacing and token-driven typography. Three size variants: sm, md, lg.arc-typewriter— Character-by-character text reveal animation with configurable speed, delay, and looping. Blinking accent-colored cursor fades out on completion. Dispatchesarc-completeand exposes areplay()method.arc-gradient-text— Inline text wrapper that applies gradient fills declaratively. Five built-in variants (accent, display, sunset, ocean, custom) plus an animated mode that cycles the gradient position. Includes a subtle drop-shadow glow.arc-number-format— Locale-aware number formatter powered byIntl.NumberFormat. Supports number, currency, percent, and compact notation types with configurable decimals and locale. Uses tabular-nums for column alignment.arc-time-ago— Auto-updating relative time display (“3 minutes ago”, “yesterday”). UsesIntl.RelativeTimeFormatwith an adaptive update interval that slows as the timestamp ages. Renders a semantic<time>element with a full-date title tooltip.
New Input Components
arc-time-picker— Time selection dropdown with scrollable hour, minute, and AM/PM columns. Supports 12h and 24h display formats, configurable step increments (1/5/15/30 minutes), and min/max time constraints. Matches the DatePicker interaction pattern with keyboard navigation and outside-click dismiss.arc-range-slider— Dual-thumb slider for selecting a value range. Custom-rendered track with pointer-capture drag, snap-to-step, and full keyboard support (ArrowKeys, Home/End). Both thumbs emitarc-inputduring drag andarc-changeon release with{ low, high }detail. Same glow effects as the single Slider.
Theme Presets
- Minimal theme (
@arclux/arc-ui/themes/minimal) — Strips all glow effects, gradient backgrounds, and depth shadows. Replaces the sci-fi aesthetic with a clean, flat look while preserving layout and spacing. Import afterbase.css. - High Contrast theme (
@arclux/arc-ui/themes/high-contrast) — WCAG AAA compliant with 7:1+ contrast ratios. Brightened text, stronger borders, bolder focus rings (3px solid), and larger interactive targets (36px minimum). Includes both dark and light mode overrides.
Semantic Token Layer
A new semantic token layer adds ~25 CSS custom properties that describe purpose rather than appearance.
All interactive colors now use --interactive (aliased to --accent-primary), all surface
backgrounds use --surface-*, and feedback composites (error/success/warning/info borders, glows, and
subtle backgrounds) are available as ready-made tokens. The semantic layer is additive — both old and new token
names remain available — but all ~170 component files have been migrated to the semantic names internally.
- Interactive tokens —
--interactive,--interactive-rgb,--interactive-hover,--interactive-active,--interactive-focus,--interactive-focus-ring,--interactive-muted. Override--interactiveat:rootto retheme every clickable element at once. - Surface tokens —
--surface-base,--surface-primary,--surface-raised,--surface-overlay,--surface-hover. A clear elevation hierarchy for page background → content → cards → dropdowns. - Divider tokens —
--dividerand--divider-glowdistinguish separator lines from component edge borders. - Feedback composites —
--feedback-{error,success,warning,info}-{subtle,border,glow}. Pre-composed background, border, and glow values for each feedback level, eliminating manualrgba()composition in components. - Theme preset integration — Minimal theme overrides flatten
--interactive-hover/--interactive-activetononeand simplifies--interactive-focusto a 2px ring. High Contrast theme strengthens all--interactive-focusand--feedback-*-glowvalues.
Category Package Exports
- Import by category — New package entry points:
@arclux/arc-ui/content,/data,/typography,/input,/feedback,/navigation,/layout,/shared. Import an entire tier with a single import statement. Existing per-component imports remain unchanged.
Vertical Tabs
- New
orientationprop on Tabs —arc-tabsnow acceptsorientation="vertical"to render the tab list as a sidebar column with the panel to the right. Arrow key navigation automatically switches to up/down. Works with both underline and pills variants. Default remains horizontal.
Nested TOC & Sidebar Support
- New
levelprop on SpyLink and SidebarLink — Botharc-spy-linkandarc-sidebar-linknow accept alevelnumber prop (default0) for visual nesting. Links withlevel > 0render with progressive indentation and a smaller, dimmed font (--text-xs/--text-ghost). Active state highlighting overrides the dimmed color automatically. Zero breaking changes — existing flat lists default to level 0 and render identically.
Typography & Token Changes
- Text size floor raised to 16px —
--text-smbumped from 14px to 16px;--text-mdand--body-sizebumped from 15px to 17px. All body and secondary text across the library is now larger and more readable. - Code font size set to 14px —
--code-sizeis now a fixed 14px (was 13px). Slightly smaller than body text for clear visual distinction in inline code and code blocks. - Sidebar & TOC widened to 280px —
arc-sidebardefault width andarc-app-shellsidebar/TOC columns bumped from 260px to 280px to accommodate the larger text.
Visual Elevation
A systematic pass bringing the full sci-fi luminescence vocabulary — glow lines, entrance animations, inset shadows, and spring easing — to workhorse components that previously had minimal interaction treatments.
- Glow line dividers — Card (body/footer), Accordion (between items), Modal (header & footer), and Tooltip (popup top) now use
--glow-line-gradientpseudo-element dividers instead of flatborder-colorseparators. - Dropdown entrance animations — Select, Combobox, and Multi-Select dropdowns now animate in with a 120ms slide-fade (
opacity+translateY), matching the Date Picker. Each dropdown also gets a glow-line accent at the top edge. Respectsprefers-reduced-motion. - Form field hover glow — Input, Select, Textarea, Combobox, and Multi-Select now show
var(--glow-hover)on hover alongside the existing border-color change. Checkbox unchecked state gains a subtle accent glow on hover. - Inset shadow on recessed surfaces — New
--shadow-insettoken (inset 0 1px 3px rgba(0,0,0,0.25)) applied to all form field backgrounds, giving them a pressed-in depth. Combines with glow-hover and focus-glow via comma-separated box-shadows. - Checkbox spring-pop — Check icon now uses a
check-popkeyframe (scale 0.5 → 1.15 → 1) with--ease-out-expoinstead of a linear scale transition. Respectsprefers-reduced-motion. - Toggle thumb spring easing — Toggle thumb transition uses
300ms var(--ease-out-expo)for a natural overshoot feel on slide. - Skeleton shimmer accent tint — Skeleton shimmer highlight now uses
rgba(var(--accent-primary-rgb), 0.04)instead ofvar(--border-subtle), giving loading states a faint accent-colored pulse. - Active state spring easing — Button, Icon Button, and Theme Toggle release transitions now use
var(--ease-out-expo)for the transform property, giving the scale-up a springy bounce-back.
Interaction Polish
A second visual pass adding hover glows, active press feedback, and pulse animations to 10 components
that previously had flat or minimal interaction states. All enhancements are CSS-only and respect
prefers-reduced-motion.
- Accordion — Trigger hover glow,
scale(0.98)active press, expo easing on chevron rotation. - Tabs — Active tab glow on both underline and pills variants,
scale(0.95)press, expo transform easing. - ListItem — Hover glow,
scale(0.98)press with expo easing, selected state inset glow. - Select — Option
scale(0.97)active press, expo chevron easing, dropdown zoom-in entrance (scale(0.96)start). - Breadcrumb — Hover background with accent tint and glow, rounded corners,
scale(0.95)press. - Pagination — Hover glow on inactive pages,
scale(0.93)active press, expo transform easing. - Radio Group — Hover glow on radio circles with subtle border-color shift.
- Sidebar — Section toggle hover glow, link hover inset glow.
- Stepper — Completed step glow, active step pulse animation.
- Avatar —
scale(1.05)hover lift, online status pulse animation.
Mobile Navigation Menu
- Thematic mobile triggers — Mobile menu items are now bordered cards with accent glow, matching the desktop navigation style. Supports default, primary, and muted variants.
- Tap feedback — All mobile triggers and child links show an instant
scale(0.98)press state with accent tint on tap. - Swipe-to-close — Swiping up on the mobile panel (when scrolled to top) dismisses the menu.
- GPU-accelerated animation — Panel open/close animation replaced from
max-heighttoclip-pathfor smoother performance on mobile devices. - Smooth sub-menu expand — Replaced the
max-height: 500pxhack with CSSgrid-template-rows: 0fr → 1frfor properly measured expand/collapse transitions. - ARIA improvements — Mobile panel now declares
role="dialog",aria-modal="true", andaria-label.
Layout
- Page Header top padding removed —
arc-page-headerno longer addsvar(--space-lg)top padding, eliminating the extra margin on component doc pages. The app shell content area already provides consistent top spacing.
Bug Fixes
- Sidebar toggle event collision — The
arc-togglerename toarc-sidebar-togglefixes a latent bug wherearc-toggleevents from nested Collapsible or TreeView components could bubble up and incorrectly trigger the app-shell sidebar. - Breadcrumb active item alignment — The current (last) breadcrumb item now has matching padding and min-height with link items, fixing a visual offset.
- Marquee ResizeObserver leak —
_setupResizeObservernow disconnects any existing observer before creating a new one, preventing duplicate observers. - Tree-view keyboard performance — Arrow key navigation now queries the DOM once per keypress instead of twice.
- Pagination aria-current — Non-current pages now omit the
aria-currentattribute entirely instead of setting it to"false". - Hotkey render —
render()now returns Lit’snothingsentinel instead ofundefined. - DatePicker lazy init —
new Date()computation moved from constructor toconnectedCallbackfor lazy initialization. - Timeline line gap — Fixed a 4px gap between timeline dots and their connecting lines.
Style Consistency
- Transition token adoption — Replaced hardcoded transition durations in Accordion, Collapsible, Sidebar, DatePicker, and ThemeToggle with
var(--transition-fast)orvar(--transition-slow). - Hover glow standardization — Components that independently defined
0 0 12px rgba(accent, 0.15)now referencevar(--glow-hover). - Breakpoint documentation — Added token-equivalent comments to 9 hardcoded media queries across 8 components.
New Tokens
--z-dropdown,--z-tooltip,--z-overlay,--z-modal,--z-toast,--z-max— Semantic z-index scale. All 22 components with z-index values now reference these tokens instead of hardcoding numbers.--glow-hover— Standardized hover glow (0 0 12px rgba(var(--accent-primary-rgb), 0.15)). Used by Avatar, Tag, Badge, NavigationMenu, and available for consumer use.
Breaking Changes
- Text size scale —
--text-smis now 16px (was 14px),--text-mdis now 17px (was 15px),--code-sizeis now 14px (was 13px). Components using these tokens will render larger text. - Z-index token restructure — Replaced the old numeric scale (
--z-sticky,--z-drawer,--z-popover, values 100–700) with a semantic scale:--z-dropdown(1000),--z-tooltip(1100),--z-overlay(1200),--z-modal(1300),--z-toast(1400),--z-max(9999). If you referenced the old token names in your CSS, update them. - Disabled opacity standardized to 0.5 — 25 components previously used
opacity: 0.4for disabled states. All now use0.5, matching the--opacity-disabledtoken. Disabled elements will appear slightly more visible than before. - Event renames — Three custom events have been renamed for clarity:
arc-trigger→arc-hotkey-trigger(Hotkey)arc-toggle(top-bar/app-shell sidebar) →arc-sidebar-togglearc-item-click→arc-item-select(List, ListItem)
arc-toggleevents from Collapsible, Truncate, TreeView, and SidebarSection are unchanged.
Tree-Shaking
sideEffects: false— Added to all 7 framework packages (React, Vue, Svelte, Angular, Solid, Preact, HTML). Bundlers can now reliably tree-shake unused components from framework wrapper imports.
Docs
- Front page overhaul — Tabbed code examples (React/Vue/Svelte/HTML), “What’s New in v2” highlight section, animated stat counters, glow-line section dividers, and a Prism visual replacing the bare frameworks strip.
- OG image refresh — Gradient title, framework pills, varied accent stat colors, and tighter layout spacing.
Internal
- 22 components updated from hardcoded z-index values to semantic tokens.
- 25 components updated from
opacity: 0.4to0.5in disabled states. - 5 components updated from hardcoded transition durations to token references.
- 4 components updated to use
var(--glow-hover)instead of inline shadow definitions.
v1.11.0 — Footer Containment & Layout Improvements
Adds a contained layout mode to the footer (matching the top bar) and converts the docs site footer to use arc-footer.
Footer
- New
containedattribute — Constrains footer content usingarc-containerwith the same breakpoints as the top bar. Acceptssm,md(default),lg, orxl. The footer background stays full-width. - Built-in horizontal padding — Full-width mode now applies
padding-inline: var(--space-lg)to the footer content.
Docs
- Footer rewrite — Replaced the custom
SiteFooter.astromarkup with<arc-footer>using its slot-based API (logo, default columns,legal). - CSP headers — Added
_headersfile to allow blob: fonts and Cloudflare Insights under Content-Security-Policy.
v1.10.2 — Top Bar Containment & Brand Integration
Adds a contained layout mode to the top bar and replaces custom footer branding with @arclux/brand components.
Top Bar
- New
containedattribute — Constrains top-bar content to the same breakpoints asarc-container. Acceptssm(720px),md(1120px, default),lg(1400px), orxl(1600px). The bar background stays full-width. - Built-in horizontal padding — Full-width mode now applies
padding-inline: var(--space-lg)to the content area, removing the need for external::part(content)overrides.
Docs
- Footer branding — Replaced the custom inline SVG “by Arclight” markup with the
<arclight-by>component from@arclux/brand.
v1.10.1 — Tier Reorganization & API Cleanup
Splits the overloaded content/ tier into three focused categories, removes the last
deprecated API, and aligns token naming between JavaScript and CSS.
Content Tier Split
- New
data/tier (14 components) — Structured data display: animated-number, badge, data-table, list, list-item, meter, stat, step, stepper, table, tag, timeline, timeline-item, value-card. - New
typography/tier (6 components) — Text rendering & formatting: code-block, highlight, kbd, markdown, text, truncate. content/retains 27 presentational components (accordion, avatar, card, carousel, icon, etc.).- All framework wrappers (React, Vue, Svelte, Angular, Solid, Preact) regenerated with new directory structure.
Deprecation Removal
- Tabs
itemsproperty removed — The deprecateditemsarray prop and its legacy rendering path have been deleted. Use<arc-tab>children exclusively.
Token Naming Alignment
- Renamed JS token keys:
accentBlue→accentPrimary,accentViolet→accentSecondary. - Renamed glow keys:
glow.blue→glow.primary,glow.violet→glow.secondary,glowLine.blue→glowLine.primary. - CSS variable names unchanged (
--accent-primary,--accent-secondary) — JS now matches CSS.
Slot Naming Standardization
- Empty State — Renamed slot
action→actions(consistent with cta-banner, top-bar, fieldset). - Status Bar — Renamed slots
left/right→start/end(consistent with toolbar, RTL-friendly).
Code Block Improvements
- Fixed copy button scroll — Copy button no longer scrolls with code content on horizontal overflow. It stays pinned to the top-right of the code area.
- Copy button transparency — Copy button is now semi-transparent with backdrop blur by default, becoming fully opaque on hover. Code beneath is visible.
- Basic variant layout — Copy button uses inline flex layout so the block grows naturally on mobile instead of overlapping.
- Fixed window variant footer — Status bar metadata (language, line count) now renders correctly after slot rename.
Scroll Spy Improvements
- Sticky heading — The “On this page” heading now sticks to the top of the TOC when scrolling through long link lists.
- Heading redesign — Gradient accent text, surface background, border, and glow-on-hover treatment.
- Scroll to top — Clicking the heading smooth-scrolls both the page and the TOC back to the top.
Docs Site
- Homepage code blocks — Replaced custom hero install and code example markup with native
<arc-code-block>components (basic and window variants).
v1.10.0 — The Big Component Update
40 new components in a single release. Layout primitives, navigation patterns, form helpers, content building blocks, and feedback overlays — basically everything we kept saying "we'll add that later" about. Later is now.
New Components — Layout
- Center (
arc-center) — Content centering primitive with max-width, intrinsic centering, and text-center modes. - Cluster (
arc-cluster) — Flex-wrap primitive for tags, chips, and button groups with token gap spacing. - Dock (
arc-dock) — Edge-snapped auto-hide panel with hover-reveal and spring easing. - Float Bar (
arc-float-bar) — Floating toolbar anchored to viewport bottom with backdrop blur. For bulk actions and unsaved-changes prompts. - Aspect Grid (
arc-aspect-grid) — CSS grid with uniform aspect-ratio cells. - Inset (
arc-inset) — Padding primitive with optional negative-margin bleed. - Masonry (
arc-masonry) — CSS-columns masonry layout. No JavaScript, just columns and gap. - Responsive Switcher (
arc-responsive-switcher) — Container-query layout switcher: row above threshold, column below. - Sticky (
arc-sticky) — Sticky wrapper with IntersectionObserver-based stuck detection andarc-stuckevent.
New Components — Navigation
- Anchor Nav (
arc-anchor-nav) — In-page link bar with IntersectionObserver-driven active state. Horizontal or vertical. - Bottom Nav (
arc-bottom-nav) — Mobile bottom navigation bar with icon + label items and backdrop blur. - Breadcrumb Menu (
arc-breadcrumb-menu) — Breadcrumb segments that double as dropdown triggers for sibling navigation. - Command Bar (
arc-command-bar) — Always-visible search input designed for toolbar placement. - Page Indicator (
arc-page-indicator) — Dot-based position indicator for carousels and onboarding flows. - Rail (
arc-rail) — Ultra-narrow icon-only vertical navigation strip. Think VS Code activity bar. - Skip Link (
arc-skip-link) — Accessible skip-to-content link, invisible until focused. - Speed Dial (
arc-speed-dial) — FAB that fans out secondary icon actions with staggered animation. - Stepper Nav (
arc-stepper-nav) — Full wizard navigation controller with Back/Next/Skip and validation gates.
New Components — Content
- Separator (
arc-separator) — Semanticrole="separator"with optional centered label text. Variants: line, dashed, dotted, fade. - Image (
arc-image) — Responsive image with loading skeleton shimmer, fade-in transition, and error fallback. - Scroll Indicator (
arc-scroll-indicator) — Sticky progress bar showing scroll position. rAF-throttled for smooth performance. - List (
arc-list) — Container for list items with keyboard navigation and single/multiple selection. - List Item (
arc-list-item) — List item with prefix/suffix/description slots. - Virtual List (
arc-virtual-list) — Renders only visible items for 10K+ row datasets.
New Components — Input
- Label (
arc-label) — Form label with required indicator, description slot, and tooltip slot. - Fieldset (
arc-fieldset) — Form group with native<fieldset>+<legend>, error messages, and card variant. - Switch Group (
arc-switch-group) — Groupsarc-togglechildren with propagated size and disabled. - Button Group (
arc-button-group) — Connected button borders with propagated size and variant. - Input Group (
arc-input-group) — Prefix/suffix addon slots with connected borders and shared focus glow. - Hotkey (
arc-hotkey) — Invisible keyboard shortcut listener with modifier combos and chord sequences.
New Components — Feedback
- Announcement (
arc-announcement) — ARIA live-region wrapper for screen-reader announcements. No visual output. - Banner (
arc-banner) — Full-width persistent notification strip with status variants and dismiss. - Confirm (
arc-confirm) — Programmatic confirmation dialog with staticopen()returningPromise<boolean>. - Connection Status (
arc-connection-status) — Auto online/offline detector with amber pulse animation. - Guided Tour (
arc-guided-tour) — Multi-step onboarding overlay composing spotlight + tooltip. - Inline Message (
arc-inline-message) — Compact icon + text feedback with status variants. - Loading Overlay (
arc-loading-overlay) — Semi-transparent loading cover with centered spinner. - Progress Toast (
arc-progress-toast) — Toast with embedded progress bar and imperative show/update/complete API. - Snackbar (
arc-snackbar) — Bottom-anchored notification with imperativeshow()API and action button. - Spotlight (
arc-spotlight) — Element-highlighting overlay for onboarding and feature discovery.
Enhancements
- Avatar — Image loading now shows a shimmer skeleton, fades in on load, and falls back to initials on error.
- Data Table — New
virtualandrow-heightprops enable row virtualization for large datasets. - Dropdown Menu — Internal divider rendering now uses
arc-separator. - Context Menu — Internal divider rendering now uses
arc-separator.
See you in v1.10.1 when we inevitably fix half of these.
v1.9.2 — Top Bar Container Alignment
Bug Fixes
- Top bar content alignment —
arc-top-barnow uses the same centering strategy asarc-container(max-width+margin-inline: auto+padding-inline) so nav content aligns pixel-perfect with page content at every viewport width. Consumers no longer need::part(topbar)padding overrides.
v1.9.1 — Fix Icon Loading in Production Builds
Bug Fixes
- Icons broken in production — v1.9.0's dynamic imports used template literal paths that Vite/Rollup can't resolve from
node_modules, causing 404s in production builds. Replaced with generated resolver maps containing staticimport()paths per icon, which bundlers can analyze and chunk correctly.
v1.9.0 — Per-Icon Lazy Loading
Icons are now loaded on demand — each icon is its own ~500-byte module, dynamically imported when first used. Previously, importing arc-icon eagerly pulled in both Phosphor (817KB) and Lucide (736KB) regardless of how many icons you actually used. Now, 0KB of icon data is loaded upfront, and only the icons your app renders are fetched.
New
- Per-icon lazy loading —
<arc-icon name="star">dynamically imports onlystar.js(~500 bytes), not the entire library. Bundlers tree-shake unused icons automatically. - Per-icon subpath exports — Individual icons are available via
@arclux/arc-ui/icons/phosphor/starand@arclux/arc-ui/icons/lucide/arrow-rightfor direct static imports. - Full-library opt-in —
import icons from '@arclux/arc-ui/icons/phosphor'still works for use cases that need all icons (e.g. icon pickers).
Breaking Changes
iconRegistry.get()is now async — Returns aPromise<string | null>instead of a string. This only affects code that callsget()directly;<arc-icon>handles this internally.iconRegistry.list()is now async — Returns aPromise<string[]>. Update any direct callers toawaitthe result.
Bundle Impact
- 0 icons used — Before: +1.6MB. After: +0KB.
- 1 icon used — Before: +1.6MB. After: ~500 bytes (lazy).
- 10 icons used — Before: +1.6MB. After: ~5KB (lazy).
- Full library (explicit import) — Before: +1.6MB. After: +817KB (opt-in).
v1.8.6 — Theme Toggle Icon-Only Size Fix
Bug Fixes
- Theme toggle icon-only size — No, actually fixed this time. Restored 36px dimensions to match
arc-icon-button, with--touch-minas a floor for mobile.
v1.8.5 — Theme Toggle Padding Fix
Bug Fixes
- Theme toggle padding — Restored desktop padding on
arc-theme-toggleafter v1.8.4 got a little too enthusiastic with the touch target tokens.
v1.8.4 — Mobile Touch Targets, Code Block Fix
Improvements
- Mobile touch targets — 8 interactive components now scale up on touch devices via
--touch-min/--touch-padtokens:arc-icon-button,arc-toggle,arc-input,arc-select,arc-pagination,arc-theme-toggle,arc-tag, andarc-chip. - Touch token tuning — Mobile touch targets set to 36px min-height / 8px padding (up from 24px/4px desktop defaults).
Bug Fixes
- Code block basic variant — Single-line code now vertically centers alongside the copy button instead of sitting at the top.
v1.8.3 — Rename tokens.css → base.css, FOUC Prevention
Breaking Changes
- Renamed
tokens.css→base.css— The stylesheet contains design tokens, theme overrides, and touch media queries. Update imports from@arclux/arc-ui/tokens.cssto@arclux/arc-ui/base.css.
New
- FOUC prevention —
base.cssadds:not(:defined) { opacity: 0 }and each component's:hostincludestransition: opacity 150ms ease, so unregistered elements are hidden and fade in smoothly when their JS loads.
Infrastructure
- Prism 1.2.2 — Updated
@arclux/prismwith renamedbaseCSSconfig key.
v1.8.2 — Missing Subpath Exports
Adds missing per-component subpath exports and removes unused tier-level exports.
Bug Fixes
- Missing subpath exports — Added
./cta-bannerand./inputtopackage.jsonexports soimport '@arclux/arc-ui/cta-banner'andimport '@arclux/arc-ui/input'resolve correctly for tree-shaking.
Cleanup
- Removed tier exports — Dropped
./content,./feedback,./navigation,./layout, and./sharedtier-level subpath exports. Use per-component imports (@arclux/arc-ui/button) or the barrel (@arclux/arc-ui) instead.
v1.8.1 — Tree-Shaking Bugfix
Fixes named barrel imports like import { ArcButton } from '@arclux/arc-ui'
being tree-shaken away by Vite/Rollup, causing components to silently not render.
Bug Fixes
- Barrel now registers components — Tier index files (
content/index.js,input/index.js, etc.) now re-export from.register.jsfiles instead of pure class files. This means named imports through the barrel correctly callcustomElements.define()and are preserved by bundlers via thesideEffectsfield. - Stale docs imports — Fixed several docs pages still showing the pre-v1.8.0
import '@arclux/arc-ui'pattern which no longer registers components. Updated getting-started, frameworks, and data-table examples to useimport '@arclux/arc-ui/register'or per-component imports. - CDN script tags — Fixed CDN
<script>examples in getting-started and frameworks pages to point to@arclux/arc-ui/registerinstead of the bare entry point.
Docs
- Import patterns callout — Getting-started page now documents the three import patterns and their tree-shaking trade-offs.
v1.8.0 — Tree-Shakeable Components
Component source files are now side-effect-free, enabling bundlers to tree-shake unused components.
Registration is handled by generated .register.js files.
Breaking Changes
- No auto-registration —
import '@arclux/arc-ui'no longer registers custom elements as a side effect. Named imports still work and are now tree-shakeable. If you relied on the side-effect registration, switch toimport '@arclux/arc-ui/register'.
New Consumer API
import { ArcButton } from '@arclux/arc-ui'— named class import. Registers all components via the barrel (not tree-shakeable). Fixed in v1.8.1 to actually callcustomElements.define().import '@arclux/arc-ui/register'— registers all components (replaces bare side-effect import).import '@arclux/arc-ui/button'— single component, auto-registered with its dependencies.
Infrastructure
- Side-effect-free sources — Removed
customElements.define()from all 117 component source files. Added@tagand@requiresJSDoc annotations for metadata. - Registration generator — New
scripts/generate-registrations.jsproduces per-component.register.jsfiles and a top-levelregister.jsduringpnpm generate. - sideEffects —
package.jsonnow declares"sideEffects": ["./src/*/*.register.js", "./src/register.js"]so bundlers can drop unused modules. - Prism v1.2.1 — Parser extracts tag names from
@tagJSDoc with fallback tocustomElements.define(). Ignore patterns support leading wildcards.
Docs
- Homepage live demo — Expanded from 5 showcase cards to 10, covering buttons, badges & tags, inputs, feedback, toggles & checks, rating & slider, navigation (tabs + breadcrumb), data (avatars + stepper), accordion, and controls (segmented control + pagination).
Bug Fixes
- Dashboard Grid — Fixed non-responsive layout when explicit
columnsattribute is set. The grid now usesauto-fillwith a derived minimum column width so it wraps naturally on narrow viewports instead of forcing a fixed column count.
v1.7.2 — Themeable Syntax Highlighting
Enhancements
- Code Block — Switched from baked hex Shiki themes to a CSS custom-properties theme. Syntax colors now derive from design tokens (
--accent-primary,--accent-secondary,--color-success, etc.) so consumers can override them alongside the rest of the palette. - Code Block — Shiki core and regex engine are now lazy-loaded on first use, removing ~600KB from the initial bundle.
Infrastructure
- Removed 9 redundant per-page
import '@arclux/arc-ui'script tags — BaseLayout already loads the library globally.
v1.7.1 — Token Consolidation
Infrastructure
- Single source of truth — Removed the duplicate
tokens.jsfrom the web-components package.shared/tokens.jsis now the only token file. - Code Block — Fixed cross-package runtime import of
shared/tokens.jsthat broke external consumers.
v1.7.0 — Code Block Variants
Code Block gains three visual variants and built-in Shiki syntax highlighting.
New Props
- NavItem — Replaced
mutedboolean with avariantprop (default|primary|muted). The newprimaryvariant renders accent-colored text and border in the resting state with a stronger glow on hover and active. - Code Block — Added
variantprop with three modes:default— Header bar with filename (left) and language label (top-right), no status bar footer.window— macOS-style title bar with colored traffic-light orbs, centered filename, elevated shadow, and status bar footer with language + line count.basic— Minimal: no header, no footer, compact padding, inline copy button. Ideal for single-line snippets.
Enhancements
- Code Block — Integrated Shiki syntax highlighting using fine-grained imports (
shiki/core+shiki/engine/javascript) — no WASM, tree-shakable, with lazy per-language loading from@shikijs/langs. - Code Block — Custom
arc-darkandarc-lightsyntax themes derived from the design token palette. Keywords use accent blue, strings use success green, constants use accent violet, and all colors cascade fromshared/tokens.js. - Code Block — Dual-theme support via CSS
light-dark()— syntax colors switch automatically with the site theme, no re-render needed. - Code Block —
filenameprop now reflects to the HTML attribute. - Code Block — Default variant moved language label from the status bar into the header bar (top-right) and removed the status bar footer for a cleaner look.
- Code Block — Copy button repositioned inside the code body so it sits in the same spot across default and window variants.
Infrastructure
- Tokens — Added
color-scheme: dark/color-scheme: lightto the generated token CSS, enabling the CSSlight-dark()function across all components.
Fixes
- Copy Button — Replaced hardcoded dark backdrop (
rgba(black, 0.6)) with theme-aware--bg-elevatedtoken so the button renders correctly in light mode.
v1.6.0 — New Component Props
New props across six components — semantic status variants for Badge, layout controls for Divider, and form-critical props for Input, Button, and Select.
New Props
- Badge — Added
success,warning,error, andinfosemantic variants. Addedcolorprop for custom RGB colors. - Divider — Added
alignprop (left/right) for asymmetric gradient origins andverticalprop for inline separators. - Input — Added
valueprop for controlled-component patterns androwsprop for multiline textarea height. - Button — Added
typeprop (button/submit/reset) for native form submission behavior. - Select — Added
openprop for programmatic dropdown control.
Fixes
- Accordion — Removed incorrect
itemsprop from docs that never existed in the component.
v1.5.2 — Bug Fixes
Bug Fixes
- Accordion chevron — Replaced the tiny Unicode triangle character with an 18px SVG chevron icon for proper sizing and crisp rendering.
v1.5.1 — Bug Fixes
Bug Fixes
- Shadow DOM CSS reset — Added a universal reset (
margin: 0; padding: 0; box-sizing: border-box) to the shared style module injected into every component. Consumer CSS resets (* { margin: 0 }) cannot cross shadow DOM boundaries, so browser user-agent defaults (e.g.h2 { margin: 0.83em 0 }) were leaking into component internals. - Boolean prop reflection — 11 boolean properties were missing
reflect: true, preventing them from syncing back to HTML attributes when set via JavaScript. Affected props: Alertdismissible, Modalclosable, Inputrequired/multiline, DataTablesortable/selectable, ScrollToTopsmooth, Formnovalidate/error-summary, Linkexternal, FileUploadmultiple.
v1.5.0 — Utility Props Sweep
A comprehensive pass adding utility props across the entire component library. Most additions are pure CSS — no breaking changes.
New Props — High Impact
- Button —
loadingprop shows a spinner and disables the button for async operations. - Input —
errorprop for inline validation messages with red border styling.sizeprop (sm/md/lg). - Card —
paddingprop (none/sm/md/lg) andinteractiveboolean for clickable cards without href. - Tabs —
alignprop (start/center/end) andvariantprop (underline/pills). - Avatar —
statusindicator dot (online/offline/busy/away) andshapeprop (circle/square/rounded). - Badge / Tag —
sizeprop (sm/md/lg) for both components. - Container —
sizeprop (sm/md/lg/xl/full) for max-width control.paddingprop (none/sm/md/lg). - Breadcrumb —
separatorprop for custom separator characters (/, >, •). - TopBar —
nav-alignprop (left/center/right) to pin navigation within the center slot.
New Props — Form Controls
- Checkbox / Toggle / RadioGroup —
sizeprop (sm/md/lg) for all three. - Select —
sizeprop (sm/md/lg) anderrorprop for validation state. - Textarea —
sizeprop (sm/md/lg) andauto-resizeboolean that grows the textarea to fit content.
New Props — Content & Navigation
- Divider —
labelprop for labeled dividers (e.g. "OR" between form sections). - Stat —
trendprop (up/down/neutral) with arrow indicator andchangeprop for percentage display. - Callout —
dismissibleboolean adds a close button and firesarc-dismiss. - Link —
underlineprop (hover/always/never) for fine-grained underline control. - Progress —
show-valueboolean displays the current percentage. - Sidebar —
positionprop (left/right) moves the border to the opposite edge. - Footer —
alignprop (left/center) for centered footer layouts.
New Props — Feedback & Layout
- Modal —
fullscreenboolean for full-viewport modals on mobile. - Alert —
compactboolean reduces padding and font sizes for inline use. - Toast —
show()now acceptsactionLabel,actioncallback, andpersistentto prevent auto-dismiss. - Accordion —
multipleboolean allows multiple panels open simultaneously. - Skeleton —
countprop renders multiple stacked skeleton items. - Pagination —
compactboolean shows only prev/next with a "current / total" label.
Navigation Menu
- Muted nav style — Reworked muted nav items: transparent background by default, white text on hover with soft glowing white pill, faint primary glowing pill for active state.
Docs
- See Also links — Every component page now shows a "See Also" section linking to related components and guide pages. Guide pages also cross-link to each other. Helps users discover related components and navigate between docs naturally.
v1.4.0 — Component Composition & Token Infrastructure
Refactors
- Shared style modules — Extracted reusable style sheets into composable modules that multiple components import:
button-styles.js— variant styles (secondary, ghost, focus, disabled) shared by Button, IconButton, and Chipcard-styles.js— hover glow and gradient border shared by Card and FeatureCardstatus-styles.js— status color CSS custom properties shared by Alert, Callout, and Toaststatus-utils.js— status icon resolver shared by Alert, Callout, and Toast
- Callout — Now uses status color tokens for border and background tinting instead of neutral card styling. Icon color matches the variant.
- TopBar — Added inner content wrapper to separate backdrop/border from flex layout, exposing a
contentCSS part.
Infrastructure
- Token single source of truth —
shared/tokens.jsis now the sole source.tokens.cssis generated from it.pnpm generateruns token generation then Prism. - Fixed focus-glow drift — Shadow DOM fallbacks had different
--focus-ringand--focus-glowvalues than the CSS file. Both now derive fromtokens.focus. - Light theme completeness —
lightTokensnow includes gradient, glow-line, and utility overrides that were previously only in hand-maintained CSS.
v1.3.0 — Visual Refinements
Enhancements
- Badge — Switched to mono font with no uppercase for a quieter, code-like appearance. Added
colorprop accepting an RGB triplet (same API as Tag). - Tag — Increased vertical padding for more visual prominence. Removed
min-heightconstraint so tags are naturally taller than badges when side by side. - Toggle — Label now uses the primary body font instead of the accent font, with normal casing.
Docs
- Component page header: tier and interactivity labels now use
arc-tagwith customcolorprops instead ofarc-badge.
v1.2.0 — Component Enhancements
Enhancements
- Input — Added
prefixandsuffixslots for placing icons or inline adornments inside the field box. The input/textarea is now wrapped in a flex container that holds the border and focus styles. - Tag — Added
colorprop accepting an RGB triplet (e.g."77, 126, 247") for custom category colours. Overrides variant colours for border, text, background, and hover glow. - Button — Added
prefixandsuffixslots for icons alongside the button label. Both<button>and<a>render paths support slots.
v1.1.0 — New Components & Enhancements
New Component
- CTA Banner (
arc-cta-banner) — Full-width call-to-action banner with gradient background, eyebrow text, headline, and actions slot. Replaces inline CSS patterns on landing pages.
Enhancements
- Card — Added
footerslot for action buttons, links, or metadata. Hides automatically when empty. - PageHeader — Replaced semantic slots (
breadcrumb,actions,tabs) with positional slots (above,aside,below). Addedborderprop to opt-in to the bottom border (now off by default). - Form — Added
loadingprop to prevent double-submit,disabledprop that propagates to all child controls,error-summarywith rendered error list,formDatain event detail, andarc-resetevent. - NavItem — Added
mutedprop for subdued navigation items that render with lighter text and no border. Supported in both desktop and mobile views.
Docs
- Homepage CTA section now uses
arc-cta-banner, removing ~50 lines of inline CSS. - Fixed navigation menu preview dropdown overflow and hover bleed.
- Fixed container preview overflow by using simulated layout.
- Dashboard grid preview: labels now use accent font (Tektur), numbers use body font (Host Grotesk).
v1.0.0 — Initial Release
The first stable release of ARC UI. Includes 152 components across 5 tiers, framework wrappers for React, Vue, Svelte, Angular, Solid, and Preact, standalone CSS output, and a comprehensive design token system with dark and light themes.
Components
All 152 components ship as Lit web components with zero external dependencies beyond Lit itself.
Layout
Navigation
Content
Data
Typography
Input
Framework Wrappers
Generated by Prism, our custom code generator that reads the Lit source and produces idiomatic bindings for each framework:
@arclux/arc-ui-react— React 18+ via@lit/react@arclux/arc-ui-vue— Vue 3.3+@arclux/arc-ui-svelte— Svelte 5+@arclux/arc-ui-angular— Angular 17+ standalone components@arclux/arc-ui-solid— Solid 1.8+@arclux/arc-ui-preact— Preact 10.19+@arclux/arc-ui-html— Standalone CSS + HTML examples
Design Tokens
The v1.0 token set includes 90+ CSS custom properties covering color, typography, spacing, shadows, gradients, glows, z-index, breakpoints, motion, and focus styles. Both dark and light themes are fully defined. See the Tokens page for the full reference.