Yenilikler
Yenilikler
Paketlerin yayımlanmayı bekleyen ve yayımlanmış değişiklikleri.
Bu sayfa derleme sırasında iki kaynaktan üretilir: yayımlanmayı bekleyenler depodaki değişiklik kayıtlarından (.changeset/*.md), yayımlanmış sürümler her paketin CHANGELOG.md dosyasından. Değişiklikler pakete göre gruplanır; uyumu bozan (büyük) değişiklikler en üsttedir. Bir değişiklik bir bileşeni adıyla anıyorsa bileşenin Değişiklikler sekmesine bağlantı verilir. Değişiklik metinleri İngilizce yazılır.
Yayımlanmayı bekleyenler
Bölüm başlığı “Yayımlanmayı bekleyenler”@bigbang/icons1 değişiklik
Add the icon registry package: typed kebab-case names over lucide-react 1.59.0 (ISC, NOTICE included), directional icons marked to mirror in right-to-left text. Add
icon-size-xs|sm|md|lg|xl(12-32 px) component tokens.
@bigbang/tokens26 değişiklik
Accordion: the
linelook draws rules between items only (none above the first or below the last), drops its inline padding so the header text lines up with the content around it, and underlines the header on hover instead of filling it;containedkeeps the filled hover. The default size is nowsm(40 px header, 14/500 text) and the chevron sits on the first title line. New tokens:dimension.10andaccordion.padding-block.sm|md(10 and 12 px).AppShell: navigation items are 32 px (
app-shell.item.height) with 14/400 labels, 16 px icons, 8 px padding and gap, a pressed fill and a medium-weight current page; a folding group's items hang from a 1 px rail. The collapsed sidebar is 48 px and the drawer at most 288 px, both from newapp-shell.*tokens (sidebar.width,sidebar.width-collapsed,drawer.width,item.height,rail.width). Ctrl+B or Cmd+B toggles the sidebar (the drawer below 1024 px), a 16 px hit zone on the sidebar edge toggles it with the pointer, and each change is written to thebigbang_sidebar_collapsedcookie (APP_SHELL_COOKIE) for seven days.Breaking:
badge-heightandbadge-padding-inlinesplit by size intobadge-height-sm(16 px),badge-height-md(20 px),badge-padding-inline-sm(6 px) andbadge-padding-inline-md(8 px). Addsbadge-icon-size(12 px).Export the brand files as
@bigbang/tokens/brands/<id>.jsonso the docs theme generator can load the fixture brands.Add the brand pack contract:
schema/brand-pack.schema.json(JSON Schema 2020-12), shipped as@bigbang/tokens/schema/brand-pack.schema.json. Brand files stateschemaVersion: 1; the validator rejects any other version, and a test keeps the schema in step with the validator's keys, ramps, appearance values and override cap. The docs theme generator writes the version into the files it exports.Brand ramps now have 11 steps (50 to 950) derived in OKLCH from a recorded seed, and every brand defines an
accentramp. New semantic groups:color-illustration-*(14 illustration slots, light and dark) andcolor-chart-categorical-1to-8. New@bigbang/tokens/brandmodule andbrand:validatescript: closed brand-file schema, BRAND-07 contrast pairs in both modes and at most eight dark exceptions, shared by the build and the docs theme generator. Brand files may replace the neutral or status ramps and declare dark exceptions underoverrides.dark. Existing semantic tokens keep their names and ramp steps; brand colour values shift slightly where the OKLCH derivation differs from the hand-picked values.Card: new
padding="sm"(12 px); the description is 14 px (body-md);Card.Footerspans the card width on a tinted band (surface-layer-1) with a top rule; a leading or trailing directimgreaches the card edges and is clipped to its corners. Badge: the icon side of a badge with an icon is 2 px tighter (newbadge.padding-inline-icon.sm|md, 4 and 6 px). Avatar: the default size issm(32 px) for Avatar and Avatar.Group, and group avatars overlap by 8 px.Raise touch targets under a coarse pointer:
button-height-md,input-height-mdandtab-height-mdgo from 40 px to 44 px, andbutton-height-lgandinput-height-lgfrom 40 px to 48 px, solgstays abovemd. Fine-pointer sizes do not change.Add
color-action-danger-subtle-hovered,color-action-danger-subtle-pressedandcolor-action-on-danger-subtle-defaultfor secondary and tertiary danger Buttons: red text on the secondary fill or the page, with a light red fill on hover and press.Focus now shows as a soft 3 px halo in the focus colour at 70 % (3.15:1 on the light page, 4.77:1 on the dark page) instead of a 2 px outline; fields also turn their border to the focus colour. Pressed controls move down 1 px instead of scaling, and triggers that open a popup stay put.
Glass material, an alternative look for chrome surfaces. - New
color.material.glass.{regular,regular-contrast,clear,dim,rim,edge,shade,specular}per mode,blur.surface.glass(16 / 20 px) andblur.surface.glass-clear(6 / 8 px),material.glass.{saturate,brightness,refraction-scale,refraction-band,scroll-edge,prominent-tint},shadow.glassandmotion.glass.press.scale(1.02, 1 with reduced motion). New white, black and neutral alpha primitives feed them. - The Tailwind theme adds theglass:variant and thematerial-glass,material-glass-contrast,material-glass-clear,material-glass-prominent,material-glass-refract,material-glass-interactiveandmaterial-glass-scroll-edgeutilities.glass:applies underdata-material="glass"only where backdrop blur is supported and neither more contrast nor forced colours is requested; an element withdata-material="solid", anything inside one, or anything insidedata-material-pref="solid"stays solid. Reduced transparency and slow displays fall back to the raised surface. - Each brand CSS file re-declares the tokens that differ between modes under[data-backdrop="light"]and[data-backdrop="dark"], so glass over imagery can take the other mode. - Newdist/assets/glass-edge-map.svg(exported as@bigbang/tokens/assets/*), the edge normal map of the refraction filter, anddist/platform/material.jsonwith its displacement scale. -validateBrandandcontrastReport(resolved, mode)check glass text and icons over seven worst-case backdrops after the material filters, with and without the specular highlight, plus the prominent glass label and clear-glass icons. New helperswithAlphaandfilterBackdrop.ListItem: titles are medium weight and show one line, subtitles are 14 px and show two lines, slots are 10 px apart (8 px at
sm), rows carry a transparent 1 px border, newvariant(default,outline,muted), and an image placed directly inleadingis sized 32, 40 or 48 px. Kbd: the default size issm(20 px, 12 px text) and keys are flat on a muted fill with 6 px corners; inside a tooltip they take a light tint of the tooltip text colour. ScrollArea: the track is 10 px with a 1 px inset, so the thumb is 8 px. New tokens:list-item.gap.*,list-item.media-size.*,kbd.radius,kbd.size.sm|md,scroll-area.track-size.2026 visual refresh of the token set. - New default brand pack
neutral: an achromatic OKLCH neutral ramp with a newneutral.450step, a near-black primary in light mode and a near-white primary in dark mode, and iris/peach brand and accent ramps for badges, illustration and the brand tone. The teal packbigbangbecomes optional and keeps a brand-coloured primary. - New brand slotappearancewithprimary(neutralorbrand) andradius(default,none,compact,soft,round).primarypicks the overlay of the twelve primary-dependent semantic colours;radiuspicks a radius preset. - Seven pastel ramps (red, orange as amber, green, blue, violet, teal, pink) on one lightness table, steps 50–950. Status colours use pastel fills (status.*.background= step 100, dark 900) with darker text, softer edges, mid-tone emphasis fills and dark tintedon-emphasistext. Brand files may now overrideviolet,tealandpink. - Newcolor.tag.{red,orange,green,blue,violet,teal,pink}.{background,foreground,border}pastel pairs. - Fixed eight-series chart palette independent of the brand, newchart.soft.1–8fills andchart.grid,chart.axis,chart.cursor.chart.series.Nnow aliasescolor.chart.categorical.N, so it follows the mode. Newchart.bar-radiusandchart.line-width. - Radius scale on a 10 px base:lg16 → 10 px,xl24 → 14 px, newbase,2xland3xl. - Shadows on the Tailwind v4 scale: newshadow.xs; two-layershadow.raisedandshadow.overlayin light mode; strongershadow.popupandshadow.panelin dark mode. Newcolor.border.overlayhairline for floating surfaces. - Control heights 32/36/40 (button.height,input.heightwith a newsm,tab.height); the 36 pxmdstep stays 40 px under(pointer: coarse). Newinput.shadow,card.radius,popover.radius,menu.radius,menu.item-radius, menu item padding and gap,menu.inset,toast.radius. Button, input, tag, tab and dialog radii move up the scale. The table header has no fill. - Focus:border.width.focus3 → 2 px and a newfocus.offsetfor a solid outline;focus.ringisneutral.500/neutral.450with the neutral primary. - Typography: tracking tokens fordisplayand headings,heading-smat medium weight,title-smon a 20 px line, and heading utilities that balance their lines. - Theme presets: neutral presetszinc,stone,slate,gray(chroma clamped to the neutral cap) and accent presetsblue,green,orange,rose,violet,teal, applied withapplyPreset. - More gated contrast pairs: status emphasis fills on surfaces, status text on raised surfaces, tag pairs and chart series on the default surface. - Table:table.header.border(the stronger rule under the header),table.row.height.{compact,standard,comfortable}at 32, 40 and 48 px, and compact cells on 4 px block padding. - Drawer:drawer.sheet-height.{sm,md}(320 and 560 px), the height of a small or medium drawer shown as a bottom sheet. -input-action.size.sm(24 px) for actions inside a small input. - The Tailwind theme adds thefocus-outlineandfocus-outline-insetutilities: a solidborder.width.focusoutline infocus.ring, offset byfocus.offsetor drawn inside the element.Add the motion standard tokens: enter and exit easing curves for the productive and expressive families,
easing-linear, spring tokens (spring-*settle time plus a matchingeasing-spring-*curve), loop periods, state-layer opacities and semanticmotion-*tokens per component and pattern. Every token CSS file now ends with oneprefers-reduced-motionblock and adata-motion="reduce"override that replace movement with short fades. The Tailwind theme addsease-*for the new curves,animate-shimmer,animate-indeterminateand thereduce-motion:variant.platform/motion.jsoncarries the same values in milliseconds, Bézier arrays and spring parameters for JS and native code.easing-exitstays as an alias ofeasing-productive-exit.Overlay tokens:
color-surface-scrimdims the page by 32 % in light and 48 % in dark mode (was 10 %). Newpopup-offset(4 px) for every anchored popup.command-widthfollowsdialog-width-md(560 px) and newcommand-offset-topplaces the command dialog 12dvh from the top.dialog-paddingis split intodialog-padding-sm(16 px, below 640 px) anddialog-padding-md(24 px, from 640 px); the singledialog-paddingtoken is removed.Match the shadcn reference for overlays and feedback:
color.surface.scrimis black at 10 % in both modes,dialog.paddingis 16 px,popover.paddingis 10 px and the drawer handle is 96 px wide. New tokens:shadow.popupandshadow.panel,text.title-smandtext.label-lg,radius.2xs(2 px),dialog.backdrop-blur,dialog.media,drawer.sheet-offset,drawer.stack.peekanddrawer.stack.step,popover.gap,tooltip.arrow-size,command.width,command.search-heightandempty-state.actions-gap. The contrast check now also coverstext.subtleon the status backgrounds.Remove
color-surface-overlay. It duplicated the backdrop role; usecolor-surface-scrimbehind dialogs andcolor-surface-raisedwithshadow-overlayfor menus.Form and action component tokens follow the shadcn reference: -
slider-vertical-min-height(160 px) for vertical sliders. -checkbox-mark-size(14 px) for the check and dash. - Switch tokens gain sizes:switch-width-md/switch-height-md/switch-thumb-mdare 32 / 18 / 16 px andswitch-width-sm/switch-height-sm/switch-thumb-sm24 / 14 / 12 px. They replaceswitch-width,switch-heightandswitch-thumb(36 / 20 / 16 px). -combobox-list-max-height(252 px) caps the Combobox option list. -button-icon-inset(2 px) is taken off the Button padding on the side of a start or end icon. -input-group-button-size(24 px) forInputGroup.Button. -period-caret-blink(1000 ms) and theanimate-caret-blinkutility for the drawn OtpInput caret, which blinks five times and stops. -text.label-lg(16 / 24 px, medium) and thetype-label-lgutility forField.Legend.Soften the page surfaces. Light pages use the new neutral step 75 (#F7F7F7) under white cards, popups and inputs; layers, sunken, hovered and selected move one step darker. Dark pages use neutral 850 (#1E1E1E) instead of 950, cards and layer-1 use 800, and the new step 750 (#303030) carries layer-2, hovered and the neutral badge; borders, secondary and subtle actions follow. Every neutral preset gains steps 75 and 750 in its own hue. Dark translucent and glass tints are based on the new page colour (
neutral-alpha.850-*), with the regular glass tint at 84% so subtle text keeps 4.5:1 over any backdrop.green.500andteal.500are a touch darker so the success emphasis and the second chart series keep 3:1 on the grey page.Table and DataTable: a new
standarddensity (8 px block padding, 37 px rows, 40 px header) is the default; cells have 8 px inline padding (table.cell.padding-inline) and checkbox cells none at the end. The last body row has no divider; the footer draws its own rule above. Table rows tint on hover by default (hoverablenow defaults to true), and a row holding an expanded disclosure keeps the hover tint. New tokens:table.cell.padding-block.standard,table.header.height.Build a resolved DTCG token tree per brand and mode as
@bigbang/tokens/dtcg/<brand>-<mode>.tokens.json. CSS-only tokens (springlinear()curves, percentage distances) are listed by name under$extensions["com.pupas.cssOnly"].Add
button-icon-size-sm,button-icon-size-mdandbutton-icon-size-lg(16, 16 and 20 px) for icons and the loading spinner inside Button.Add
chart.series.1tochart.series.8(categorical series colours, each at least 3:1 againstcolor.surface.raisedin light and dark mode, checked by the contrast test),chart.height.sm|md|lg(160, 240, 320 px) andchart.sparkline.height(32 px).Pin the accepted glass values in tests (dark regular tint 84 %, prominent tint 90 %, press swell 1.02 with 1 under reduced motion) and check that no motion, duration or spring token uses 700 ms and that only the period tokens loop.
Gate the outline badge and layer-1 text pairs. - The contrast test also checks
tag-violet-foreground,tag-teal-foregroundandtag-pink-foregroundonsurface-default(outline badges) andtext-defaultandtext-subtleonsurface-layer-1(CodeBlock). Every pack and preset passes. -drawer.sheet-heightdescribes top and bottom sheets.Add the
stepper.track-thicknessandtimeline.rail-thicknesscomponent tokens (2 px); Stepper and Timeline use them instead of raw pixel values, and date segments usepx-px.
@bigbang/ui123 değişiklik
Add Accordion (
Accordion,AccordionItem) and Collapsible (Collapsible,CollapsibleTrigger,CollapsiblePanel) on Base UI: single ormultipleopen items,lineandcontainedvariants,smandmdsizes, a configurable heading level, an optional description read as the trigger's description, closed content findable with find in page (hidden="until-found") by default, content that fades in and drops 4 px while the height changes at once, and a chevron that turns half a turn.Add ActionBar: bulk actions for selected items with a count announcement, Escape to clear and an entry motion.
Add the action components: IconButton (required
label, square or circle, loading), Link (inline or standalone,externalwithrel="noopener noreferrer"and a localised new-tab notice, unsafe URL schemes removed), ButtonGroup (spaced or attached, horizontal or vertical, logical corners), Toggle (Base UI, pressed shown by fill and border) and ToggleGroup (single ormultiple, roving focus, shared size and variant). Add theui.link.externalstring.Add AmountInput: a money field that parses typed and pasted text in the Provider language into bigint minor units (never a float), drops letters, formats on blur, shows the currency symbol in the box and its name to screen readers, and has messages for too many decimals,
minandmax. The form value is the minor units as an integer string.Add Anchor: in-page navigation with
#idlinks, one sublevel, and the section being read marked witharia-current="location"while the page scrolls.AppShell no longer writes a cookie:
APP_SHELL_COOKIEis removed, and apps store the collapsed state themselves throughonCollapsedChangeand pass it back asdefaultCollapsed. Ctrl+B (Cmd+B) is ignored while focus is in a text field, select or editable content, and the newshortcutprop (defaulttrue) turns it off.Add AppShell, NavGroup and NavItem: a skip link, a sidebar that narrows to icons, a mobile menu drawer and a sliding current-page indicator.
Add Autocomplete: a text input with suggestions that accepts any text, on Base UI Autocomplete.
Add
AvatarwithAvatar.Image,Avatar.Fallback,Avatar.StatusandAvatar.Group. It shows a picture, or the initials ofname(upper-cased for the Provider language,İin Turkish) on a status tone chosen from the name, or a person or company icon without a name.sizeis 24, 32, 40, 48 or 64 px,kindispersonorcompany,shapeiscircleorsquare, andstatusadds an online, offline or busy dot that is also part of the accessible name. The picture fades in withmotion.reveal;delayholds the fallback back;decorativehides the avatar from screen readers. Adds theavatar.size.*andavatar.status-size.*component tokens and theui.avatar.*strings.Breaking:
Badgerenamesemphasistovariant(subtle,bold); migrateemphasis="bold"tovariant="bold". Addssize(sm16 px,md20 px, defaultmd), a decorativestartIconanddata-component="badge".Breadcrumbs: the trail is 14 px (
body-md) with muted links (fg-subtle) that turn the default text colour on hover instead of brand links that underline, a regular-weight current page and a 6 px gap between items. Pagination: page buttons are 2 px apart instead of 4 px.Add Breadcrumbs: a named navigation landmark with an ordered trail, the current page as
aria-current="page"text, mirrored chevron separators hidden from screen readers, long trails folded into a "…" button that expands in place with a staggered entrance and moves focus to the first revealed link, a parent-only link below 640 px, routerrenderand safe hrefs through Link. Add theui.breadcrumbs.labelandui.breadcrumbs.expandstrings.Add a loading state and icon slots to Button.
loadingshows a spinner over the label, keeps the Button's width and focus, ignores clicks and setsaria-busyanddata-loading;loadingLabelis the text screen readers read meanwhile.startIconandendIconrender decorative icons sized from the Button size.Breaking:
Buttonreplacesappearancewithvariant(primary,secondary,tertiary) andtone(neutral,danger). Migrateappearance="subtle"tovariant="tertiary"andappearance="danger"totone="danger";tone="danger"also works withsecondaryandtertiary. A loading Button no longer setsaria-busy: it keeps its label as its name and announcesloadingLabelonce in a polite status region next to it, defaulting to the newui.button.loadingstring ("Yükleniyor", or "Loading" inside<Provider locale="en-GB">).startIconandendIconnow take aReactElement. AddsProvider, which sets the language of the library's own strings, anddata-component="button".Add Calendar on
@internationalized/date(new dependency, Apache-2.0): an APG date grid with roving focus, arrow, Home/End, Page Up/Down and Shift + Page Up/Down keys, weeks starting on the locale's first day (Monday in Turkish),Intlday and month names, full-date day names with today, status and unavailable added,min,max,isDateUnavailable,dayStatusdots, and a month change that slides 4 px in the direction of travel. Re-exportsCalendarDate,Time,parseDate,parseTime,todayandgetLocalTimeZone. Adds thecalendar-cell-sizecomponent token andui.calendar.*strings.Add
CardwithCard.Header,Card.Title,Card.Description,Card.Actions,Card.Body,Card.FooterandCard.Link.variantisoutlined,elevatedorfilled;paddingismd(16 px) orlg(24 px). A card with a title renders a<section>named by it.interactivestretches the oneCard.Linkover the card, lifts it 2 px on hover withmotion.liftand draws the focus ring around the card.Add
ChartandChart.Sparkline, drawn with tree-shaken ECharts and the SVG renderer only.kindisline,area,bar,stacked-barordonut;heightissm,mdorlg. Colours and the font are read from the design tokens at run time and the chart redraws when the brand or mode changes. Every chart is afigurewith a caption, a generated summary sentence as the accessible name, decal patterns on bars and donuts, distinct symbols and dashes on line series, and a semantic data table (tableistoggle,visibleorhidden). Alsoloading, an empty state,hideValues,formatValue,formatCategoryandui.chart.*strings. Motion uses the chart enter and update tokens and is off with reduced motion.Add Checkbox (Base UI Checkbox: label, description, checked or indeterminate, invalid, required, disabled,
parent) and CheckboxGroup (a<fieldset>with legend, help text, error, necessity marker, shared value list,allValuesfor a parent checkbox, vertical or horizontal). The mark usesmotion.selectionMark. Add thecheckbox.size,checkbox.radius,radio.sizeandswitch.width|height|thumbcomponent tokens.Add CodeBlock: code in the mono type with an optional header, line numbers, highlighted lines, wrapping and a copy button, with no syntax-highlighting dependency.
Add Combobox on Base UI Combobox: single and multiple choice with chips, server results (filter, onInputValueChange, loading) and user-created options (onCreate).
Add Command and CommandDialog: a grouped command palette with keyword search, shortcut keys and a ⌘K / Ctrl+K hotkey, on Base UI Combobox and Dialog.
Wire the motion presets into the existing components. Button presses with
motion.pressand gainssuccessandsuccessLabel(a check mark that grows once and an announcement fromui.button.success). TextInput and Field fade field colours withmotion.fieldand drop error messages in withmotion.fieldMessage. Badge fades in withmotion.reveal. The motion demos use neutral demo texts.ConsentBlock takes
items: one checkbox per purpose, each withdocumentId,version,documentName,requiredandmustRead. A button opens the document throughonOpenDocument(a dialog on the page, never a new tab),readIdsunlocksmustReaditems, which are disabled with the reason "Önce metni okuyun" until then, andvalue/onValueChangecarry the accepted ids. The component stores nothing; the app sends the id, document and version of each accepted item to the server. The single-text form (title,children,checkboxLabel) still works but is deprecated and warns in development. New typesConsentItem,ConsentBlockItemsPropsandConsentBlockTextProps.Add ConsentBlock: a text to read in a named, keyboard-focusable scroll region with a reading progress bar and a bottom fade, a version line and full-text link, and a consent checkbox that
requireScrollkeeps locked (with the reason linked) until the end, announcing when it unlocks. Adds theconsent-block-max-heightcomponent token.Add ContextMenu: an action menu opened at the pointer by right click or long press, on Base UI Context Menu, with the DropdownMenu parts.
Add Copy: copies a value to the clipboard from an icon button, a text button or an inline value, shows a check mark with the success motion, announces "Copied" or "Could not copy" and falls back to a hidden text area where the Clipboard API is missing.
Add CountdownTimer and
formatClock: time left to a target moment as arole="timer"clock, an optional ring that drains linearly (stepping under reduced motion), warning and done colours, milestones spoken in a status region (5 min, 1 min, 10 s, time is up by default) and a one-timeonComplete. Adds thecountdown-timer-ring-sizecomponent token.Add
DataTableon TanStack Table v9 and TanStack Virtual, built from theTableparts andtableStyles. Sorting (sorting,defaultSorting,manualSorting) with a header button,aria-sortand a polite live region; row selection (selectionMode,rowSelection) with a select-all checkbox that shows a mixed state and row checkboxes named throughgetRowLabel; column visibility withDataTable.ColumnToggle; built-instatusstates (loading skeleton witharia-busy, empty, filtered-empty, error);rowActions,onRowOpen,toolbar,footerandtotalRowCount; andvirtualizewitharia-rowcountandaria-rowindex. ExportcreateDataTableColumnHelper,dataTableStylesand the columnmetaoptions (align,numeric,truncate,headerLabel,rowHeader). Add theui.data-table.*strings in Turkish and English.Add DatePicker: day, month and year spinbutton segments in the locale's order (
gg.aa.yyyyin Turkish) with typed entry, auto-advance, wrapping arrows and Backspace, a calendar popup on Base UI Popover with focus on the selected day, built-in localised messages for dates outsidemin/maxor unavailable,dayStatus, andYYYY-MM-DDform submission. Adds theui.date.*andui.date-picker.*strings.Add DateRangePicker: start and end segment groups that move from one to the other, a calendar popup with two months from 1024 px and one below, two-click picking with pointer and keyboard range preview, preset ranges on a Base UI radio group (today, yesterday, last 7 days, this month, last month, this year, custom),
maxRangeDays,apply="instant" | "confirm"with Apply and Cancel, built-in reversed, too-long and out-of-range messages, and ISO 8601 interval form submission. ExportspresetRange,DateRangeandDateRangePreset. Keyboard focus in the calendar now previews ranges as hover does.Add DateTimePicker: a DatePicker and a TimeField in one named group with a CalendarDateTime value. Export CalendarDateTime and parseDateTime.
Add DateTimeText and
relativeParts: a date, date-time, time or relative time in a<time>element, written with Intl in the Provider language, with date and time styles, a time zone, plain ISO dates that do not shift a day, and relative time that refreshes every 30 seconds with a cross-fade and keeps the exact time intitle.Add
DescriptionListwithDescriptionList.Item,DescriptionList.Term,DescriptionList.DetailsandDescriptionList.Action, built on nativedl,dtanddd. Passitemsor compose the parts.layoutisinline(stacked below 1024 px, term and details side by side from 1024 px),stackedorgrid(columns1 to 3);dividersandsize(sm,md) are optional. Empty details show a dash with a hidden reason (ui.description-list.empty), long values wrap, and an action at the end of a row is its own tab stop. The list is static, with no entrance motion.Add Dialog and AlertDialog on Base UI Dialog and AlertDialog. Dialog has a required
title,description, a scrolling body that becomes keyboard-scrollable only when it overflows,footeractions,Dialog.Close,sizesm/md/lg from the newdialog-width-*tokens, a bottom-sheet layout below 640 px, a localized close button (ui.dialog.close) anddismissible={false}for forced decisions. AlertDialog asks a single question withconfirmLabel, a localized cancel action (ui.alertDialog.cancel),tone="danger", focus on cancel first, and an asynconConfirmthat keeps the dialog busy until it settles. Both enter and leave withmotion.dialogover amotion.scrimbackdrop. New component tokens:dialog-width-sm|md|lg,dialog-radius,dialog-padding,dialog-margin.Add Drawer on Base UI Drawer: a panel from the inline end (
side="end", mirrored in right-to-left text) or the bottom,sizesm/md/lg from the newdrawer-width-*tokens, swipe to close towards its edge with the backdrop clearing as it moves, an automatic bottom sheet with a handle below 640 px,modal={false}for panels used next to the page, a scrolling body,footeractions,Drawer.Closeand the localized close button. Adds themotion.sheetpreset (the drawer motion on the block axis) and thedrawer-width-sm|md|lg,drawer-handle-width,drawer-handle-heightcomponent tokens.Add DropdownMenu on Base UI Menu with
DropdownMenu.Item(icon,tone="danger",shortcutshown with Kbd and exposed asaria-keyshortcuts,description,disabledReasonread as the item's description,closeOnSelect),LinkItem,CheckboxItemandRadioGroup/RadioItemwith themotion.selectionMarkcheck and dot, labelledGroup,SeparatorandSubmenu(opens on hover, press and the inward arrow key, mirrored in right-to-left text). The popup usesmotion.popoverand items fade their highlight withmotion.hover. New component tokens:menu-min-width,menu-max-width,menu-item-height.Add EmptyState and ResultState. EmptyState shows an icon tile or an illustration, a title at a chosen
headingLevel, a description and the next step, inmdfor pages andsmfor cards, and cross-fades in withmotion.reveal. ResultState ends a task or flow with a toned icon that grows in (motion.success), a title with a spoken tone prefix, details, next steps andfocusOnMountto move focus to the title when it replaces the last step. New component tokens:empty-state-text-width,empty-state-media-sm,empty-state-media-md.Field:
erroralso takes a list of messages, shown as a list and linked to the control; an empty list leaves the field valid. AddField.Counter, which shows characters used out of a limit, announces the remaining characters politely from 80 % of the limit and turns danger over it (newui.field.counterRemainingandui.field.counterOverstrings). A bareField.Controlnow has the TextInput look; passclassNameto replace it.FileDropzone: add
onUpload(file, signal). The component never makes a network request; it runs the upload the app supplies for each accepted file with its ownAbortController, cancels it when the file is removed, calls it again on retry, and never passes rejected files. A real "Choose files" Button now opens the chooser (the native input leaves the tab order and focus returns to the Button after a removal), several rejected files are listed one per line, and the live region sums up the uploads when they finish.Add FileDropzone: a clickable drop zone around a native, labelled file input with
accept,maxSize,maxFilesandmultiplerules, built-in localised rejection messages andonReject, a list of chosen files with sizes inIntlunits and named Remove buttons that return focus to the input, announcements for added and removed files, and drag motion (solid border, fill, a 1% lean and a lifting icon). ExportsacceptsFileandformatBytes. Adds theui.file-dropzone.*strings.Add the generic
FilterBar<TFilter>withFilterBar.Search,Field,More,Apply,Clear,AppliedandResultCount. Fields are plain typed config (search,select,multi-select,toggle) and the value is a typed object.applyisinstantorbatch; applied filters show as removable Tag chips, "Clear filters" returns todefaultValueand moves focus to the first control, andresultCountis announced politely 500 ms after it stops changing. Below 1024 px the extra fields move under a "More filters" button. Also exports the purefiltersToSearchParamsandsearchParamsToFiltershelpers and theui.filter-bar.*strings.Form gains
schema: any Standard Schema v1 schema (Zod, Valibot, ArkType) checks the form data on submit. Issues go to the fields by name unless a field has its ownerror, join native and server problems in the summary, and the schema's output is the third argument ofonSubmit. Async schemas are awaited with the submit buttonaria-disabled. The contract is copied as types (StandardSchemaV1), so the library ships no schema package;formDataToObjectandissuesToErrorsare exported. Field controls read schema and server errors for theirnamefrom the Form.Add Form: a native form that checks fields on submit (server
errorsby name, fields markedaria-invalid, browser constraints), stops the submit when there are problems, shows arole="alert"validation summary with links to each field and focuses it (or the first invalid field withsummary={false}), summarises server errors that arrive after a submit, and scrolls linked fields into view with reduced motion respected. ExportscollectProblems. Adds theui.form.*strings.Glass material for chrome surfaces. -
Providertakesmaterial: 'solid' | 'glass'(default solid). Glass setsdata-material="glass", mounts the refraction filter once in engines that render it, and renders solid when the system asks for reduced transparency. A Provider without the prop keeps the material of the one around it. NewuseMaterialhook. - Under a glass Provider these surfaces turn glass, and each takesmaterial="solid"to stay solid: Popover, DropdownMenu (with submenus), Select and Combobox lists, CommandDialog, Dialog and AlertDialog (higher-contrast tint), Toaster, Toolbar, SegmentedControl, Tabscontained, ActionBar, SaveBar and the AppShell top bar (with a scroll edge) and inset sidebar. InfoPopover, the AppShell menu drawer, tooltips, tables, forms, cards, charts and money fields stay solid. The popover arrow is hidden on glass. -Buttongainsvariant="glass"andvariant="glass-prominent", glass even without a glass Provider, with the secondary and primary look as the solid fallback. An icon-only glassIconButtoninside a darkdata-backdropuses the clear material. - Storybook serves@bigbang/tokens/assetsat/assets/bigbang, the path the refraction filter reads its edge map from.Add IbanInput and the
normalizeIban,formatIbanandisValidIbanhelpers: a Turkish IBAN field with a fixed TR prefix, digits grouped in fours while typing with the caret kept in place, paste handling, an ISO 7064 mod 97 check with bigint, a check mark with the success motion and a "valid" announcement, and messages for a failed check and an incomplete IBAN.Add InlineAlert and Banner. Both take
tone(info,success,warning,danger) with a status icon and a spoken tone prefix (ui.alert.*strings),dismissiblewith an exit fade (motion.collapsible) that moves focus to the next control,onDismiss,dismissLabelandannounce, which givesdangerrole="alert"and other tonesrole="status"for messages that appear after load. InlineAlert sits in the content with an optionaltitleand up to twoactions; Banner spans the top of the app on the bold status colours with oneaction.Add InlineEdit: a value shown as text that turns into an input in place, with save, cancel, validation and async save.
Add InputGroup: a text control with addons inside one bordered box, built on Field. Parts
InputGroup.Input,InputGroup.Textarea,InputGroup.TextandInputGroup.Addonwithaligninline-start,inline-end,block-startorblock-end. Clicking an addon's surface focuses the control; focus and error colour the whole box.Add Kbd: one key or a combination as nested
<kbd>elements, named keys (mod,shift,alt,enter, arrows…) with platform-aware symbols and localised spoken names (ui.kbd.*), and two sizes.Add Label: a native
<label>for controls outside Field, withhtmlFor,size(sm,md), a disabled look and the same localised necessity marker as Field (required,necessityIndicator).Add the layout and base components: Box, Stack, Inline, Grid (with Grid.Item), Container, Text, Heading, VisuallyHidden, Separator and Icon, with
renderfor semantics and token-only styling. Provider gainsdirectionandreducedMotionand now renders onedisplay: contentselement carryinglang,diranddata-motion. Addcontainer-max-width-sm|md|lgandcontainer-padding-inline-base|mdcomponent tokens.Add
ListItemwithListItem.List,ListItem.Leading,ListItem.Content,ListItem.Title,ListItem.Subtitle,ListItem.MetaandListItem.Trailing. A row has leading, title, subtitle, meta and trailing slots and asizeofsm,mdorlg(8, 12 or 16 px block padding). It is static by default;render={<a href="…" />}or a button makes the row one interactive target with themotion.stateLayerhover and press, a focus ring,selected(aria-current="true"and a selected bar) anddisabled.truncatekeeps the title on one line.ListItem.Listrenders theul, withdividedseparator lines and an optionalanimatestagger withmotion.listItem.Add MaskedValue and
maskValue: a sensitive value shown masked with visible ends or a fixed mask length, a pressed show toggle with a cross-fade, auto hide, an optional Copy button, and a screen reader text that says only the visible end.Add
Meter, a scalar value in a known range (storage used, a quota, a score), built on Base UI Meter withrole="meter". Props:label,labelHidden,value,min,max,format(Intl.NumberFormatoptions; percent of the range by default),showValue,valueText,description,size(sm4 px,md8 px) andtone.tone="auto"follows the HTML<meter>regions throughlow,highandoptimumand adds a word to the value text so colour is never the only signal. The fill grows withmotion.progress, starts from the right edge in right-to-left text and never loops; the track gets an outline in forced-colours mode. Adds theui.localeandui.meter.*strings and themeter.height.sm,meter.height.mdandmeter.radiustokens.Bring the components and variants added after the 2026 refresh in line with it. - NativeSelect gains
size="sm"(32 px), the field shadow, the solid focus outline and the invalid halo. MonthPicker, YearPicker, DateTimePicker and Autocomplete gainsize="sm". - Combobox and Autocomplete use 24 px field buttons atsm, so they fit inside the 32 px field. - InlineEdit shows the TextInput invalid edge and halo on a validation error. - Month and year cells, the DataTable expand button, the CodeBlock scroll region and Anchor links draw the solid focus outline instead of the 70 % ring. - Select and Combobox group headings use one shared recipe (optionGroupLabelStyles), lined up with the option text as in menus. - DataTable: pinned header cells take the page fill, the pinned edge takes the table rule colour, the expanded row sits onsurface-layer-1and the column panel uses the shared overlay surface. - Drawerstartandtopmirrorendandbottom: the overlay hairline instead of a border, 14 px free corners, andtopsheets take thesm/mdheights. - Badgevariant="outline"covers theviolet,tealandpinkhues; the neutral outline takes the pastel neutral border. - CodeBlock moves tosurface-layer-1with 10 px corners. - A failed FileDropzone upload row takes the danger border.2026 visual refresh of the components. - Focus: every focusable part draws a 2 px outline with a 2 px offset in the focus ring colour (
focus-outline), or an inset outline where the part sits flush against its neighbours (focus-outline-inset). - One overlay surface for Popover, DropdownMenu, Select, Combobox, Command, DatePicker, DateRangePicker, Dialog, Drawer, Toast, SplitButton, FilterBar and ActionBar: raised fill, theborder.overlayhairline, the popup, overlay or panel shadow and the popover, menu, dialog or toast radius token. Menu and list rows share one option row metric (menu item height, padding, gap and radius tokens) and highlight with the selected fill. - One height grid: 32, 36 and 40 px. TextInput, Select, Combobox, OtpInput, InputGroup and the inputs built on them gain asmsize. Tabs default tomd(36 px). Toolbar draws its frame at the height of a control of the same size. - Drawer: asmormddrawer on a narrow viewport keeps its size as a bottom sheet height instead of filling the screen. End and bottom drawers round their inner corners and draw the overlay hairline. - Inputs: a hairline shadow, a 4 px danger halo when invalid, and the outside focus outline. Checkbox and Radio use the input border. - Pastel status: InlineAlert and Banner use the status background and border; toned Tag is filled; Badge and Tag gainviolet,tealandpink; Avatar fallbacks hash over the seven pastel tag pairs. - Link always underlines, with a muted line that takes the text colour on hover. - Card uses the card radius and a ring instead of a border; Kbd, Tooltip, EmptyState, Switch, Skeleton, Tabs and SegmentedControl follow the new surfaces and radii. - AppShell gainsvariant="inset": from 1024 px the top bar and content float as a raised, rounded panel on the sidebar fill. - Table and DataTable: a transparent header with small labels on a stronger rule, minimum row heights of 32, 40 and 48 px per density, and a raised fill under a sticky header. - Chart: horizontal split lines only, axis labels inchart.axis, a tooltip on the popup surface, a band cursor for bars and a rule for lines, bars rounded at the outer end (only the top segment of a stack), smooth 2 px lines with the point on hover, area fills fading from 30 % to 2 %, a donut ring with a pad angle and the legend at the top start. Values use tabular numerals. - Meter, ProgressBar, Slider, Stepper and Timeline draw their tracks onsurface.layer-2. ProgressBar gains thewarningtone and Timeline thebrandtone. - Spinner: the primary action tone is now namedbrand, as in the other components;primarykeeps working and draws the same colour. - Body text uses Inter'scv11andss01features, and paragraphs wrap withtext-wrap: pretty.MoneyText gains
hiddenandcompact.hiddenshows "••••" with the currency and the name "Tutar gizli" / "Amount hidden" (ui.money-text.hidden); the amount is then nowhere in the DOM, includingtitle,aria-*,data-*and the<data>value.compactuses Intl compact notation for charts and summaries.formatMoneyPartsandformatMoneytake the samecompactoption.Add MoneyText and the money helpers (
toMinor,minorToDecimal,currencyDigits,formatMoney,formatMoneyParts,parseAmount,formatAmountInput,separators): amounts travel as bigint minor units and are formatted exactly with Intl from a decimal string, never a float. TRY is the default; Turkish writes the currency after the number (ui.money.currency-position). MoneyText adds a sign tone, a subtle fraction, sizes, a<data>value and a change motion.Add MonthPicker and YearPicker: fields that choose a month or a year from a twelve-cell grid, with min, max, unavailable months and a hidden form value.
Add the
motionpresets (press, hover, state layer, field, selection, overlays, collapsible, indicator, skeleton, list, progress, success),motionValuesanduseReducedMotion. Components will compose these presets in their style recipes; no props change.Add NativeSelect: an HTML select with the Select look, flat or grouped options, a placeholder option and Field wiring.
Add NumberField: a labelled number field on Base UI NumberField with step buttons inside the box (
motion.press),min,max,step,largeStep, Intlformatin the Provider language, an optionalunitadded to the accessible name,stepper={false},onValueCommitted, and a polite announcement when a typed value is moved to a bound. Thearia-roledescriptionand step button names are localised (ui.number-field.*). Adds theinput-action-size-mdandinput-action-size-lgcomponent tokens.OtpInput gains
purpose('login' | 'confirm', default'confirm').autoSubmitnow works only forpurpose="login"; with a confirmation code it is ignored and a development warning explains why, so an approval code is always submitted by the user. Both purposes keepautocomplete="one-time-code". The Turkish slot name is now "Hane 2 / 6".Add OtpInput on Base UI OTP Field: one box per character with a single tab stop, arrow-key movement, paste and
one-time-codeautofill,length,groupSizeseparators hidden from screen readers,validationType,mask,autoSubmit,onValueComplete, and box names by position localised throughui.otp.*.Overlays: the Dialog, Drawer and command-dialog scrim keeps its blur only where the user has not asked for a solid material, more contrast, reduced transparency or forced colours. Every anchored popup sits 4 px from its trigger (Combobox and Autocomplete were 6 px, DateRangePicker, PhoneInput and PreviewCard 8 px); DateRangePicker opens aligned to the start like DatePicker. The command dialog is 560 px wide, 12dvh from the top, with a thin visible list scrollbar. Dialog, AlertDialog and Drawer padding is 16 px below 640 px and 24 px from 640 px. A bottom-sheet Drawer shows its handle by default when it has snap points (
handlestill overrides), and its exit after a flick is clamped to half to the full exit duration.Match the shadcn reference in overlays. Dialog and AlertDialog: 16 px padding, a hairline ring instead of a shadow, a lighter blurred scrim, the title at 16 px medium, and the actions on a sunken band that stacks below 640 px. AlertDialog takes an optional
icontile and centres its header on phones. Drawer: a square end drawer with a start border andshadow-panel, a bottom sheet with a top border and a 96 px top gap, a stacked full-width footer, a centred bottom-sheet header, an opt-inhandle,snapPoints, nested-drawer stacking and an exit that shortens after a flick. Popover centres on its trigger by default and uses 10 px padding, a ring andshadow-popup; DropdownMenu uses the ring and shadow too, puts check and radio indicators after the label and addsinset. Tooltip sits 4 px from its trigger with a 10 px rounded arrow and lays out a Kbd beside the text. Command uses an inset filled search field, hides the list scrollbar, and opens its dialog a third of the way down at 384 px wide. Match the shadcn reference in feedback components. InlineAlert keeps the tone in its tint and a 16 px icon, with a neutral border, muted message text and a 2 px title gap. ProgressBar defaults to the 4 px track, uses 14 px label and value text 12 px above the track, and its fill slides withtranslate(newmotion.progressSlidepreset) so its ends stay round. Skeleton text lines use 8 px corners. Spinner draws an open arc without a track. EmptyState uses the 16 px heading at both sizes, 24 px padding and wider gaps atmd, and 10 px between actions.Add
PaginationwithPagination.List,Pagination.Previous,Pagination.Next,Pagination.Page,Pagination.Ellipsis,Pagination.PageSizeandPagination.Summary, built onButtonandSelect, and the purepaginationRangehelper. Page mode (page,pageCount,onPageChange) and cursor mode (mode="cursor");pageSize,pageSizeOptions,onPageSizeChangeandtotalCountadd the page size select and the "21-40 / 345" summary;getPageHrefrenders links. Controls at an end or whiledisabledstay focusable witharia-disabled, focus stays on the clicked control after a page change, the current page hasaria-current="page", and below 1024 px the page numbers give way to previous, next and a counter. The summary range cross-fades withmotion.reveal. Adds theui.pagination.*strings.Add PasswordInput: a password field with an eye button (
aria-pressed, localised name, icon swap withmotion.success), requiredautoComplete, an optionalruleschecklist linked witharia-describedbyand read as met or not met, a three-stepshowStrengthbar with a text level, a Caps Lock warning, and a delayed polite announcement of rule progress. Paste is never blocked. Adds theui.password.*strings.Add PhoneInput: a country code picker (Base UI Select, country names from
Intl.DisplayNamesin the Provider language) and a number in one labelled group, Turkey (+90) by default, grouping while typing (532 123 45 67), trunk0dropped,+and00prefixes switching the country on paste, and E.164 submitted undername. ExportsparsePhone,toE164,isPhoneCompleteandphoneCountries. Adds theui.phone.countrystring.Add Popconfirm: a small alertdialog next to a button that asks yes or no before a light action, with async confirm support.
Add Popover and InfoPopover on Base UI Popover. Popover is a non-modal panel anchored to a required
trigger, named by itstitle, withdescription, logicalside,align,sizesm/md/lg from the newpopover-width-*tokens, an optionalarrow,modal,Popover.Close, collision flipping andmotion.popover. InfoPopover is a toggletip: a round info IconButton named bylabel(defaultui.infoPopover.label) that opens a short explanation on press, so it works on touch and with the keyboard where a Tooltip does not. New component tokens:popover-width-sm|md|lg,popover-padding.motion.pressscales the control tomotion-press-scale(97 %, 1 under reduced motion) instead of moving it down 1 px, and springs back on release. Triggers that open a popup still do not move.Add PreviewCard: a link that shows a short preview of its destination on hover or focus, on Base UI Preview Card.
Add ProgressBar on Base UI Progress: determinate with the value formatted as a percentage in the Provider's locale, or indeterminate without a value (a sweep that stops under reduced motion). It takes
label(always in the accessible name,hideLabelhides it visually),max,showValue,valueText,descriptionlinked witharia-describedby,sizeandtone(brand,success,danger), and mirrors in right-to-left text. The fill grows on the compositor withmotion.progress. Provider gainsuseLocale. New component tokens:progress-height-sm,progress-height-md.Add QrCode: shows a finished payload, such as a payment link or a TR Karekod string, as one SVG path with a four-module quiet zone. Error correction is M by default and Q with a centre
logo;labelnames the code andcaptionshows the reference and domain as text. Encoding usesuqr; the component never builds payment payloads and uses no HTML strings. Newqr-foregroundandqr-backgroundtokens keep the code black on white in every brand, mode and in print.Add RadioCard: a large option for use inside RadioGroup with a title, description, decorative icon and
meta, where the whole card is a label, the radio is named by the title alone with the rest as its description, the focus ring and selection border are drawn on the card, and the selection dot scales in.Add RadioGroup (Base UI RadioGroup on a
<fieldset>: legend, help text, error that marks every item, necessity marker, single value,name, vertical or horizontal) and Radio (label, description, per-itemdisabled). The dot usesmotion.selectionMarkand theradio.sizetoken.ButtonandBadgenow requirechildren. A button or badge without a visible label is not supported; give the text it should show.Add SaveBar: a named region that rises from the bottom while
open(fixed or sticky), isinertwhile closed, announces its message, has Discard and Save with saving and saved states, stacks full-width buttons below 640 px, and asks the browser to confirm leaving while open. Adds theui.save-bar.*strings.Add ScrollArea (themed thin scrollbars that fade in on hover and scroll, fading edges where content is hidden, a focusable viewport and an optional named region), SegmentedControl (a radio group with a required label, arrow keys that move and select, a thumb that slides on the base spring, press motion, sizes and full width) and PageHeader (title heading with breadcrumbs or a back link, status, description, actions that wrap on narrow screens, and a loading placeholder that keeps the heading). Add the
ui.pageHeader.loadingstring.Add SearchInput: a
type="search"field with a search icon, a named clear button that grows in and returns focus, Escape to clear (passing on when empty),onSearchwithdebounceMs,onSubmiton Enter,loadingwith a spinner and one polite announcement,hideLabeland an optionalrole="search"landmark. Adds theui.search.*strings.Add Select: a single choice from a short list on Base UI Select, wired to Field (label, help text, error, necessity marker). Options come from
items(value,label, optionaliconanddisabled);placeholder,size(md,lg),readOnly,disabled, controlled or uncontrolledstring | nullvalue. The popup usesmotion.popoverand the check markmotion.selectionMark. Export theSelectItemtype.Form and action components follow the shadcn reference: - Slider: the thumb stays inside the track ends (edge alignment) and marks sit under its centre; new
orientation="vertical". - Checkbox: the check and dash are 14 px; box, circle and track sit 8 px from their label in Checkbox, Radio and Switch, and RadioGroup items are 8 px apart. - Switch: 32 × 18 px track by default and a newsize="sm"(24 × 14 px); the thumb has no shadow and the track has a larger invisible hit area. The off track stays strong grey for 3:1 contrast. - Chevrons in SplitButton and Combobox no longer turn while their popup is open, as in Select; the open fill shows the state. - Select, Combobox and SplitButton popups have 4 px padding. - Combobox: the clear button is opt-in with the newshowClearand takes the chevron's place while it shows; the list opens 6 px from the field and scrolls past 252 px; chips are 4 px apart. - Select:itemstakes{ label, items }groups with headings and separators, and the list shows scroll arrows; the trigger fits its value with the chevron 8 px from the end, and the newfullWidthstretches it to the field. NewSelectItemGrouptype. - Button: the fill stops inside the border (bg-clip-padding), and the side withstartIconorendIconhas 2 px less padding; icon spans carrydata-icon="start|end". - ButtonGroup: nested groups sit 8 px apart; newButtonGroup.TextandButtonGroup.Separatorparts. - ToggleGroup: items are 8 px apart. - Textarea: grows with its content by default (autoResizenow defaults totrue, starting atrowslines); block padding is 8 px. PassautoResize={false}for the old fixed height with a resize handle. - InputGroup: newInputGroup.Button, a compact 24 px ghost button; addon text is medium weight with 8 px gaps; block addons have no divider unlessdivideris set;InputGroup.Textareagrows with its content and has 8 px block padding. - OtpInput: the slots join into one strip per group (shared borders, round outer corners), and the empty active slot shows a drawn 1 × 16 px caret that blinks five times and stops (still under reduced motion). - Label: items inside it (icon, text, control) sit 8 px apart; the*and "(optional)" marks keep their 2 and 4 px. - Field: new layout partsField.Set(a fieldset, fields 16 px apart, 12 px around a CheckboxGroup or RadioGroup),Field.Legend(variantlegend16 px orlabel14 px),Field.Group(fields 20 px apart, nested groups 16 px) andField.Separator(a line with optional centred text).Add Skeleton: text lines, a block or a circle on
motion.skeleton(the highlight crosses three times and stops), a busy status with the localisedui.skeleton.loadinglabel ordecorative, andloading={false}to show its children withmotion.reveal.Add Slider on Base UI Slider: a single value or a
[low, high]range with named thumbs,Intlformatting in the provider locale, a visible value, a value bubble on drag, hover and keyboard focus, marks,onValueCommitted, a 40 px touch area, a thumb that grows on hover and while held on the productive spring, and a glide on track clicks and keys that stops while dragging. Adds theslider-track-height,slider-thumb-sizeandslider-hit-sizecomponent tokens andui.slider.*strings.Add Spinner (four sizes, three tones, a localised
ui.spinner.loadinglabel ordecorative; loops atperiod-spinnerand stops under reduced motion) and Switch (Base UI Switch: label, description, controlled or uncontrolled,loadingwith a spinner in the thumb,aria-busyand one announcement, disabled, RTL-aware thumb travel onmotion.switchThumb).Add SplitButton: a main action joined to a Base UI menu of related actions, with an animated chevron and menu.
Add
StatCard, a key figure tile built onCard, withStatCard.Label,StatCard.Value,StatCard.Delta,StatCard.Period,StatCard.TrendandStatCard.Info. Passlabel,value,delta,period,trendandinfofor the common case or compose the parts. The delta shows an arrow and a screen reader word with a sentiment colour (text-data-positive,text-data-negative,text-fg-subtle) that can differ from the direction. States:loading(placeholder withmotion.skeletonandaria-busy), no value (a dash with a reason) andhidden(privacy mode). A changed value cross-fades withmotion.reveal. Adds theui.stat-card.*strings.Add
StatusBadgeand thestatusVocabulary(StatusKey): a status label built onBadgethat maps twelve domain-neutral statuses (draft,pending,in-review,active,approved,completed,paused,cancelled,rejected,failed,expired,archived) to a tone, an icon and aui.status.*label in Turkish and English. Pages passstatus,size,variant(subtleorbold) and an optionallabel, never a tone. An unknown code shows as a neutral badge with the raw code and warns once in development. A changed status remounts the badge so it reveals again withmotion.reveal;announceadds a polite live region.Add Stepper and WizardFooter. Stepper is an ordered list in a named
navwitharia-current="step", hidden status text, horizontal and vertical layouts, a compact layout below 640 px, connectors that fill withmotion.progress, a check that grows in on completion, an attention state and optional buttons for complete steps. WizardFooter has Back (hidden on the first step), a step count that fades in, extra actions, Next with a nudging arrow or Finish on the last step,loadingandnextType="submit". Adds thestepper-marker-sizecomponent token andui.stepper.*andui.wizard.*strings. Calendar month buttons no longer rotate in RTL on top of the icon's own mirroring.Clear the accessibility errors Storybook reported. Accordion triggers and DropdownMenu items now take their name from their visible text (title or label, then the second line) instead of
aria-labelledbyandaria-describedby, so the name matches what is shown (WCAG 2.5.3). A decorative Avatar draws its initials from CSS, so they stay out of the name of the control around it. Disabled Slider, InputGroup and FileDropzone carryaria-disabled; disabled static ListItem rows and Tags, and the help line under a disabled Checkbox, Radio, RadioCard or Switch, keep text contrast. Dialog and Drawer measure body overflow once the body has mounted, so a long body is keyboard-scrollable. Label, IconButton and MoneyText list their union prop values inline, which fixes a Storybook docgen error.Add
TablewithTable.Header,Table.Body,Table.Footer,Table.Row,Table.HeaderCell,Table.RowHeaderandTable.Cell, and exporttableStylesfor DataTable to reuse. A static semantic table inside a named, focusable scroll region;captionis required. Options:density(compactorcomfortable),striped,stickyHeader,hoverable(colour only, no lift) anddividers; cells takealign,numericandtruncate; rows takeselected. Add thetable.*component tokens (header, row backgrounds, border, cell padding) that follow the colour mode.Tabs: the default size is now
sm(32 px row) and both sizes use 14/500 labels. Thelinelist no longer draws a track line; only the 2 px indicator marks the selected tab. Thecontainedtrack is as tall as the row (32 or 40 px), so its tabs are 4 px shorter, and the list and panel are 8 px apart instead of 12 px.Add Tabs (
Tabs,TabList,Tab,TabPanel) on Base UI Tabs:lineandcontainedvariants,smandmdsizes, horizontal or vertical, automatic or manual activation, an indicator that follows the selected tab on the base spring, a fading panel, tab icons and counts read as part of the name, and a required list label. Add thetab.*component tokens.Add
TagwithTag.Icon,Tag.Label,Tag.RemoveandTag.Group: an outlined label with six tones and two sizes (24 and 32 px).onRemoveadds a real remove button (24 px target, name fromui.tag.remove);selected,defaultSelectedandonSelectedChangemake it a Base UITogglewitharia-pressedand a check mark animated bymotion.selectionMark. A tag cannot be both removable and selectable.Tag.Groupis a named list that moves focus to the next, else the previous tag, elseonEmptyafter a removal with click, Enter, Space, Backspace or Delete. Addtag.height,tag.padding-inlineandtag.radiuscomponent tokens and theui.tag.removestring.TextInputaddsinvalid,requiredwithnecessityIndicator(a*with a hidden "zorunlu"/"required", or "(isteğe bağlı)"/"(optional)" on optional fields, from theui.*strings),startContentandendContent,data-required,data-readonly,data-componentanddata-partattributes, and a fixedaria-describedbyorder (description, then error). Adds the publicFieldwithField.Root,Field.Label,Field.Control,Field.DescriptionandField.Errorfor custom controls. The border and focus ring now sit on a box that wraps the input.Add Textarea: multi-line text entry built on Field with label, help text, errors (one or a list), necessity marker,
rows,autoResizeup tomaxRows(CSSfield-sizing), and a character counter (maxLength+showCount) that announces near the limit and marks the field invalid over it. Controlled and uncontrolled.Add TimeField: 24-hour hour and minute (and optional second) spinbutton segments on
@internationalized/dateTime, with typed entry and auto-advance, wrapping arrows, a decorative clock icon, built-in localised messages outsidemin/max, andHH:MMform submission. Adds theui.time-field.*strings.Add Timeline: an ordered list of events with toned dot or icon markers on a rail, titles,
<time>values written withIntlin the provider locale (plain dates do not shift with the time zone), descriptions, extra content and a staggered entrance. Adds thetimeline-marker-sizecomponent token.Add Toast on Base UI Toast: a
Toasterregion (F6 landmark, labelled with theui.toast.regionstring) that stacks up to three toasts at the inline end of the bottom edge, expands them on hover or focus and lets people swipe them down or towards the edge, and theuseToasthook withshow,update,closeandpromise(a loading toast with a spinner that becomes a success or an error toast). Toasts taketone(neutral,success,info,warning,danger), oneaction, and atimeoutof at least 5000 ms that pauses on hover and focus;dangeris announced at once and stays until closed. Newmotion.toastStackpreset and component tokenstoast-width,toast-gap,toast-peek,toast-margin.Add Toolbar, ToolbarButton, ToolbarGroup and ToolbarSeparator on Base UI Toolbar: one tab stop, arrow-key movement and pressed toggles.
Add Tooltip (Base UI Tooltip: opens on hover after the
motion.tooltip.delaytoken and at once on keyboard focus, closes on Escape, logical sides, an arrow,motion.tooltip,aria-describedbywhile open unlessdescribes={false}) and thetooltip.max-widthcomponent token. IconButton now shows itslabelas a tooltip; turn it off withtooltip={false}and place it withtooltipSide.Add DataTable column pinning and expandable rows, Select multiple selection, Combobox option groups and FileDropzone per-file upload state.
Add variants: Badge
count(withmax,99+),dot,labelandvariant="outline"; Button and IconButtonsize="xs"(24 px); ProgressBartone="warning"; ResultStatesize(sm,md); Dialogsize="xl"(960 px) andsize="full"; Drawerside="start"andside="top". Add the Dialog parts API (Dialog.Root,Dialog.Popup,Dialog.Header,Dialog.Title,Dialog.Description,Dialog.Body,Dialog.Footer) and the Drawer parts API (Drawer.Root,Drawer.Header,Drawer.Title,Drawer.Description,Drawer.Body,Drawer.Footer). New tokens:button-height-xs,button-padding-inline-xs,button-icon-size-xs,badge-dot-size,dialog-width-xl; the contrast check covers status foregrounds and emphasis colours on the default surface.AppShell's current-page indicator takes its thickness from the
tab.indicator.thicknesstoken (2 px) instead of a raw 3 px value, so it matches the Tabs indicator.StatusBadge stories name the variants "Sade" and "Belirgin" in Turkish, matching the Badge docs and the glossary ("Sade", "Belirgin", "Çerçeveli").
Breadcrumbs links underline on hover and keyboard focus, so the cue does not rely on colour alone.
Button and IconButton: when
loadinganddisabledare both set, loading wins. The control keeps its variant colours and spinner, stays in the tab order witharia-disabled="true", ignores activation and form submission, and announcesloadingLabel. When loading ends withdisabledstill set, the disabled look and behaviour return.Calendar: weekday names are regular weight (
body-sm). DatePicker: the calendar popup opens aligned to the start of the field, 4 px below it, with 8 px padding.Document component props with TSDoc and expose the generated
@bigbang/ui/props.json.Form takes its
StandardSchemaV1types from@standard-schema/spec1.1.0 (types only) instead of a local copy; the exported type names stay the same. Contract tests show Form working with Zod 4 and Valibot 1 schemas as they are.isValidIbanand IbanInput reject check digits outside 02 to 98 and a Turkish reserve digit other than 0, even when mod 97 holds.parseAmountand AmountInput treat a second decimal separator as invalid instead of reading it as grouping.Buttonno longer falls back to the English "Loading" whileloadingis set. WithoutloadingLabel, screen readers read the Button's own label with a busy state; with it, they read the given text.MonthPicker and YearPicker no longer set
aria-requiredon their trigger button, where the attribute is not allowed; the label still marks the field as required.Motion standard gates: a test stops component recipes from adding raw
transition,duration-*orease-*classes (MOT-14; the existing ones are listed and may only go down), the state-layer opacities are pinned (MOT-15), and ESLint rejects animation engines until their ADRs merge (MOT-06). The docs site drops its global reduced-motion reset, which deleted motion instead of replacing it, and the easing scale plays each spring curve at its own settle time.Neutral demo text: the motion demo keys
autopayandreceiveare renamedsettingandincrease, and the Anchor, Card, CodeBlock, DataTable, PreviewCard and Avatar stories drop payment and e-money wording. A test keeps foundations demos and generic component stories free of payments nouns, currency amounts and transaction counts; money and identity components keep their realistic fixtures.Neutral demo texts in the SaveBar story and docs examples (no person names), and in the Avatar fallback example.
Use neutral demo texts in stories, docs examples and prop descriptions: realistic person names become "Kullanıcı N" / "User N", the amount and currency input demo becomes a quantity with an
itemsunit, and the ButtonfullWidthdescription no longer mentions payment steps.Export the part prop types of Card, Table, ListItem, StatCard, DescriptionList, Avatar, Field, InputGroup, Pagination, Dialog, Drawer and Popover, and declare the missing ones (
FieldRootProps,FieldControlProps,FieldDescriptionProps,FieldErrorProps,InputGroupAddonProps,InputGroupInputProps,InputGroupTextareaProps,InputGroupTextProps,InputGroupButtonProps,DialogCloseProps,DrawerCloseProps,PopoverCloseProps). SplitButton gives thesecondarypair an explicit divider in its border colour. Add the InputGroup block-start, CountdownTimer sizes, Popover large and Accordion medium stories.Detail fixes from a side-by-side review against the shadcn reference: tooltips and side popups drift toward their trigger on every side; tooltip padding 12/6 px; popover 4 px from its trigger and 14 px body text; Command highlight and list padding match DropdownMenu; InlineAlert message at 14 px; dialog footer button gap 8 px; submenu aligned to its trigger item; select and combobox options leave room for the check; text fields use 16 px text below 768 px so iOS does not zoom; the field ring follows the text control; buttons keep their hovered fill while their menu is open; combobox chip and icon buttons give press feedback; SplitButton menu at least 192 px wide; calendar range band joins its end marks and outside days are lighter; AppShell sidebar on
surface.layer-1, 8 px item corners and tooltips in the collapsed rail; Accordion chevron 16 px; Avatar hairline inner edge; Kbd reads on a tooltip; DatePicker popup 8 px corners; skeleton shimmer visible in light mode.Button and Combobox loading spinners turn at the
period.spinnerpace like Spinner, and the Button spinner now also stops under ProviderreducedMotion, not only under the system setting.A toast with an
actionstays open until people act on it or close it, unless atimeoutis given (WCAG 2.2.1 Timing adjustable).Draw the Button success mark and the DropdownMenu check on the 24-unit icon grid, so their stroke matches registry icons. Turn only the glyph of the AppShell collapse button, so the button keeps the hover and press transitions of every IconButton. Use the focus border width token for the Form error summary links.
Sürüm türleri
Bölüm başlığı “Sürüm türleri”Paketler 0.x sürümünde olduğu sürece uyumu bozan değişiklikler küçük (minor) sürümle yayımlanır ve metni bir geçiş notu içerir. 1.0 sonrasında uyumu bozan her değişiklik büyük (major) sürüm olur.