Button changelog
v2.20.0 (2026-10-22)
Internal content uses the shared minimum single-line spacing while preserving Hug sizing, size and padding, icon size, motion and events. Callers do not need an extra Frame.
2026-10-05: Changed the former Indigo default palette to Brand (
--brand), retaining existing opacity, state, and override behavior.
2026-09-28
Stabilized the built-in hover background composite layer to avoid rebuilding the layer and repainting the background on repeated pointer entry and exit; text scaling, ratios, color, and timing remain.
v2.19.0 (2026-09-27)
Added
contentScaleOnHover: content scales as a whole with default background hover and click scaling, and can be disabled independently. Content does not scale when the background does not; layout and hit area stay fixed.Fixed a visual downward shift from text repaint at the end of hover scaling; sm / md / lg regressions compare pixels in the final animation frame with the settled frame.
2026-09-21: Aligned the usage guide, source Prop table, and Site / AI reading entry. Documentation only; component behavior is unchanged.
v2.18.1 (2026-09-12)
Capped total horizontal hover background expansion at 0.25rem while retaining the vertical ratio. Borderless hidden starting state and click shrink compensate by axis, so expansion no longer grows without bound with button width. Shared size observation is reused; content, layout, and timing remain.
v2.18.0 (2026-09-04)
Compensated md / lg hover endpoints, Borderless hidden starting points, and click midpoints inversely to standard height; default / sm appearance is unchanged. Retained proportional background transforms, colors, timing, content, and composition switches. Final appearance awaits Owner visual acceptance.
2026-09-03
Added click shrink and recovery to built-in hover background enlargement, controlled together by
scaleOnHover.
v2.17.1 (2026-09-02)
Expanded per-Prop descriptions, default fallbacks, and usage boundaries based on the current source. Runtime behavior is unchanged.
v2.17.0 (2026-08-27)
BTN-Hover.14 Restored the background-layer ratio scheme approved by the Owner on 2026-08-19, replacing the current effect of BTN-Hover.9–13: gray / filled / outline use
1 → 1.06; Borderless uses a hidden0.84 → 1.06; background transform uses200ms ease, color uses shared150ms ease-out. Content, hit area, layout, and composite-control disabling rules remain.
v2.16.0 (2026-08-19)
BTN-Hover.13 Hover color opacity and background inset/radius now share
150ms ease-in-out, starting and finishing together on entry and exit; final color and geometry endpoints remain.
v2.15.0 (2026-08-19)
Motion stability
BTN-Hover.12 Frame-by-frame browser inspection of the real Test A2 sm
Smallfilled Button confirmed stable root layout. Perceived jitter came from high-contrast edge repaint at subpixels under200ms easeand staggered geometry/color completion. Geometry changed to150ms ease-in-outto shorten repaint and soften entry/exit; color retained a gentle300ms ease-in-outtransition.
v2.14.0 (2026-08-19)
Motion geometry
BTN-Hover.11 Independent hover background radius became the Button's resolved root radius plus current expansion, sharing
200ms easewith inset. For sm / md / lg, iconOnly and text Buttons gain 1px of radius when expanding 1px per edge; root size, content, and continuous-corner curve remain.
v2.13.0 (2026-08-19)
Visual architecture
BTN-Corner.2 Replaced Button's hardcoded continuous corners with the shared cross-component rounded-rectangle primitive in
tokens.cssandlayout.css. The hover background explicitly inherits the root curve; existing radius values, variants, bare mode, and ButtonGroup embedding remain.
v2.12.0 (2026-08-19)
Visuals
BTN-Corner.1 Added
corner-shape: superellipse(1.1)to gray / filled / outline / borderless root shells and independent hover backgrounds for mild continuous-corner smoothing close to ordinary rounding. Existing sm / md / lg radii, public radius overrides, bare mode, and ButtonGroup embedded ownership remain; unsupported browsers fall back toborder-radius.
v2.11.0 (2026-08-19)
Motion
BTN-Hover.10 Restored the hover color layer's opacity transition at
300ms ease-in-out, slower than200ms easebackground expansion for softer color entry and exit. Both commit their final state immediately under reduced motion.
v2.10.0 (2026-08-19)
Motion
BTN-Hover.9 Using the real Test A2 sm
SmallButton at54.78125 × 24px, oldscale(1.05)added2.739pxtotal width and1.2pxtotal height. Rounded each to the nearest 2px multiple,2px. Default hover then added 2px total width and height in all three sizes rather than proportional scaling by Button size or content width.
v2.9.0 (2026-08-19)
Motion
BTN-Hover.8 Changed the lg hover background endpoint from
1.01to1.015. Removed opacity transition from the Button hover background color layer so entry and exit switch immediately; scale motion remains.
v2.8.0 (2026-08-19)
Motion
BTN-Hover.7 Hover background endpoint now follows final resolved size: sm
1.05, md1.03, lg1.01. Size Context and explicitsizeretain Button's existing priority.
v2.7.2 (2026-08-19)
Motion
BTN-Hover.6 Changed
BUTTON_HOVER_SCALE_UP_MOTIONbackground endpoint from1.06to1.05; content, layout dimensions, color feedback, and composite-control disabling remain.
v2.7.1 (2026-08-19)
Performance
BTN-Hover.5 Separated base background from the hover color overlay. Scaling updates only the background
transform, while color feedback updates only the overlayopacity;color-mix()background is no longer recomputed each frame during scale. Outline's existing border-color transition remains.
v2.7.0 (2026-08-19)
Motion
BTN-Hover.3 Moved built-in hover scale from the Button root to an independent background layer; text, Icon, Spinner, state content, and hit area retain their size.
BTN-Hover.4 Gray / filled / outline / borderless retain base background plus overlay color composition. Borderless background expands from
0.84to1.06; bare has no background layer and does not run built-in enlargement.
v2.6.0 (2026-08-19)
Motion
BTN-Hover.1 Standalone action Buttons defaulted to enlarging the component root visual channel to
1.06without changing layout size. Borderless kept Light 4% / Dark 10% hover color and expanded an independent background from0.84to full size; bare remained without background.BTN-Hover.2
scaleOnHovercontrols the built-in default independently. Composite-control owners disable it by default but instances may explicitly opt in. ExplicitwhileHovertakes over default scaling; disabled Buttons do not scale, and reduced motion commits the final ratio directly.
v2.5.1 (2026-08-16)
Restored Static White text and icon colors for Filled; the host baseline's inherited color no longer depends on CSS injection order to override the component foreground.
Existing priority of external classes and inline styles remains unchanged.
Button-Docs.2026-05-25 Archived the historical changelog from the source header. New changes belong in this document's changelog; the source header retains only its role, current key architecture, and documentation path.
v2.5.0 (2026-08-11)
Breaking changes
BTN-IconOnly.2 Added explicit
iconOnly, defaultfalse. Button no longer infers single-visual-content layout from children DOM.BTN-IconOnly.3
iconOnly=trueemitsdata-icon-only="true"to coordinate symmetric padding, size context, bare minimum hit area, and render hints.BTN-A11y.2 In development, an icon-only Button warns if it lacks
aria-label,aria-labelledby, ortitle.BTN-IconOnly.4 ColorSchemeButton, StyleButton, CopyButton, ExpandButton, and icon-only Button usages in the repository now declare
iconOnlyexplicitly.
v2.4.0 (2026-08-09)
Changes
BTN-Bare.2
barenow defaults toemphasis="normal", retaining 100% opacity at rest and hover. Secondary actions explicitly useemphasis="muted"for 40% to 100% on hover. Disabled state still has priority through global--snowui-state-opacity.BTN-Bare.3 CopyButton feedback inherits its host Button's resting bare emphasis rather than unconditionally returning to 40%.
v2.3.2 (2026-07-08)
Fixes
BTN-Text.2 Default
--snowui-button-min-widthis nowmax-content, retaining the natural text + gap + padding minimum in outer flex-fill layouts such as PaginationwidthMode="fill". The outer layout can still stretch it when space permits, or handle wrapping/overflow when space is insufficient.
v2.3.1 (2026-07-08)
Fixes
BTN-Text.1 Text Buttons now default to
white-space: nowrap, preventing short labels such as “Previous / Next” from wrapping character by character in compressed layouts such as PaginationwidthMode="fill".
v2.3.0 (2026-07-04)
New features
BTN-Blur.1 Added opt-in
backgroundBlur, reusing BarChart overlay blur atbackdrop-filter: blur(1.25rem).BTN-Blur.2 Added
--snowui-button-background-blur-overrideto control blur strength.
v2.2.0 (2026-06-23)
Breaking changes
BTN-Bare.3 Consolidated shell-free Button behavior into
barewithout a parallel entry. Bare retains normal content gap; for a single Icon it injects 12/16/20px size context and provides a transparent hit area of at least 16×16px.BTN-Bare.4 Exact Icon size now comes from child Icon's
size; Button no longer accepts a numeric size through shell-free mode.
v2.1.0 (2026-06-22)
New features
BTN-Bare.1 Initially introduced shell-free
baremode for text, Icon, and other content, without padding, radius, background, or border. It usedcurrentColor × opacity: 0.4 -> 1at the time; since 2026-08-09 that appearance requires explicitemphasis="muted", while bare defaults to 100%.BTN-Bare.2 When bare is placed in Tab, Tab's
--snowui-button-opacity-overridecontrols opacity on the same Button root, without multiplying two opacity layers.
v2.0.0 (2026-06-01)
Breaking changes
BTN-Link.1 Removed
variant="link"without a compatibility alias. Text links use a separate<Link>; button-style navigation continues to use<Button href>.
v1.5.1 (2026-05-25)
New features
BTN-Breadcrumb.1 Added the
as="item"composition role for Breadcrumb path segments.BTN-Breadcrumb.2 When Breadcrumb marks
Button as="item"witharia-current="page", hover overlay, click, Enter, and Space activation are disabled, and Breadcrumb does not forcibly override Button size.BTN-Breadcrumb.3
Button as="item"inherits Breadcrumbvariantwhen Button does not specify one. An explicit Button variant takes priority; with no Breadcrumb variant, Button returns to its default.BTN-Pagination.1 Added composition roles
as="current"/as="page"/as="prev"/as="next"for Pagination role styling. Button does not calculate page numbers.
v1.5.0 (2026-05-21)
New features
BTN-A11y.1 Emits
aria-pressedautomatically when theClickdictionary is anIdle ↔ Activetoggle andcurrentState ∈ {Idle, Active}; the root reflects state asaria-pressed="true|false".BTN-A11y.2 Explicit external
aria-pressed/aria-selectedhas highest priority and is no longer overwritten, supporting listbox/tab selection contexts.BTN-Toggle.1 Added
togglesyntax sugar.<Button toggle>injectsClick={{ Idle: "Active", Active: "Idle" }}andwhileClick=false, giving full toggle behavior (state transition, Indigo color, aria-pressed) with the active-state rule below. Consumers may still overrideClick/whileClickexplicitly.
Changes
BTN-Active.1 Active styling is driven by Frame's automatic
data-state="Active". The root applies Secondary/Indigo while Active; consumers need no internal class instateClass. The earlier v1.5.0 proposal requiringstateClass={{ Active: "snowui-button-active" }}is obsolete.BTN-Active.2 Automatic Indigo active styling applies to
gray/outline/borderless, excludingfilledto avoid conflict with variant colors. Consumers can customize filled activation throughstateClass/stateStyle.
v1.4.4 (2026-03-16)
Changes
BTN-Role.4 Removed
control="date-picker"; date triggers now use only theas="trailing"composition rule.BTN-Role.5 A date trigger within a complex structure works only in a recognizable local container, such as a direct
Fieldchild orFrame as="row".
v1.4.3 (2026-03-15)
Fixes
BTN-Role.3 Button now forwards
ascorrectly to Frame role classes soas="trailing"participates in Field composition.
v1.3.10 (2026-03-10)
New features
BTN-Role.1 Button can join the
Imagehost positioning protocol throughas="badge"/as="icon".BTN-Role.2 Button can join the
ImageViewercontrol-button positioning protocol throughas="prev"/as="next"/as="close".
v1.3.8 (2026-02-26)
Architecture changes
BTN-Refactor.1 Removed the specialized
stateTextfeature; Button returns to generic children rendering.BTN-Refactor.2 Frame's shared capabilities now own state variables, classes, and styles (
stateVars/stateClass/stateStyle).
v1.3.6 (2026-02-26)
New features
BTN-Feat.1 Button children now receive Frame's state object, including
currentState, allowing declarative state-dependent labels through achildrensnippet.
v1.3.5 (2026-02-25)
Fixes
BTN-Fix.3 Injected
RESOURCE_ICON_CONTEXT_KEYsize context. At the time, direct resource Icons were detected from DOM and sized sm/md/lg => 16/20/24; since v2.5.0 this requires explicit<Button iconOnly>.
v1.3.4 (2026-02-25)
Fixes
BTN-Fix.2
as="more"no longer relies onTextContextfor its role class. Declaringas="more"attachessnowui-text-expand-buttonand keeps it visible inside Text; clicking still expands Text when TextContext is present.
v1.3.3 (2026-02-25)
Fixes
BTN-Fix.1 Changed rendering of
as="more": it no longer depends onisCollapsedfor visibility.<Button as="more">renders when declared inside Text and still coordinates expansion after click.
v1.3.2 (2026-02-23)
Architecture changes
BT-Refactor.1 Removed Button's built-in text truncation (
buttonLines+truncateaction).BT-Refactor.2 Text now owns truncation; Button retains interaction and layout responsibilities.
v1.3.1 (2026-02-18)
Style refinements
BT-Bridge.1 Button core visual properties (
width/height/padding/gap/radius/font-size/line-height/color/background/inner-border) now use the variable chainoverride -> internal -> token.BT-Bridge.2
sm/md/lgandicon-onlynow override only internal variables, not final visual values, enabling host composition to override them.BT-Bridge.3 Variant states now use bridge variables and
data-variantas a Level 4 selector entry, while excluding disabled hover.
v1.3.0 (2026-02-18)
Changes
BT-Layout.1 Removed
min-width/min-heightconstraints from sm/md/lg Buttons; content and padding alone determine size.BT-Style.2 Simplified size style variables: sm is the default, md/lg override only differences, and duplicate icon-only selectors are merged.
BT-Spec.1 Aligned the three Button sizes with Figma: sm/md/lg
icon-size,padding,gap, andradiusare16/20/24,4x12/8x16/12x20,4/6/8, and12/16/20.BT-Typography.1 Paired font size and line height:
sm=--text-12 + --leading-12,md=--text-14 + --leading-14,lg=--text-16 + --leading-16.BT-IconOnly.1 Single-Icon button
icon-onlypadding matches each size's vertical padding (4/8/12).
v1.2.8 (2026-02-07)
Fixes
BT-Fix.5 Fixed
icon + textbeing misidentified asicon-only.BT-Fix.6 At the time, icon-only detection changed to exact runtime checks (one icon element and no text node); v2.5.0 removed this automatic inference.
v1.2.3 (2026-02-07)
Fixes
BT-Fix.2 Fixed
Icon.svelteinside Button failing to follow sm/md/lg16/20/24automatically through Frame Size Context.BT-Fix.3 Fixed the single-Icon rule missing the
Iconroot by including.snowui-icon-wrapper.BT-Fix.4 Corrected minimum-height reset for the
linkvariant (min-height: 0).
v1.2.2 (2026-02-07)
New features
BT-Size.1 Added minimum width and height for sm/md/lg (
28/40/56).BT-Size.2 Linked child
Icon.sveltesize with Button size (16/20/24).BT-Size.3 Added distinct padding for a single-Icon Button.
Changes
BT-Style.1 Changed regular sm padding to
12horizontally and4vertically.
v1.2.1 (2026-02-03)
Fixes
BT-Fix.1 Passed Frame capability switches explicitly.
v1.2.0 (Initial)
Initial release.