Changelog
Changelog
Release notes and upcoming changes for @mielui/svelte.
0.4.1
Unreleased
- Dark-mode colors from a theme, such as Background and On brand in the Theme Studio, now apply instead of being overridden by the default dark palette.
0.4.0
- The default theme is flat. Primary, secondary, and destructive buttons, switch and slider thumbs, checked checkboxes and radios, selected tabs, toggles, pagination pages, and calendar days take one solid fill held by a hairline, with no gradient, inner light, or drop shadow.
-
chrome.edgeHighlightdefaults to 0 instead of 0.33. Set it above 0 to light every filled control again; 0.33 restores the previous look. -
chrome.controlShadowsdefaults to off, so fields, outline buttons, keycaps, and toolbar keys are held by their hairline without an edge light or contact shadow. - Flat filled controls change tone on hover at once and darken further on press, instead of fading in a light.
- The
glowbutton variant stays lit in every theme, including flat ones. Add the newmielui-glow-litclass to light any other.mielui-glowcontrol. - The
glowvariant is now lit in Ink, Console, and Daydream, which set the edge highlight to 0. - The Magic, Open, Functional, Honey, Forest, Ocean, Lilac, Profitable, Raven, Clawd, Inspiration, and Government presets now render flat. Bitsy and Ember keep their lit look.
- The
panelbutton variant no longer carries a resting elevation. - Tooltips wait 500ms for a resting pointer instead of 125ms. Keyboard focus opens them at once, and
delayapplies to the pointer only. - The default radius scale is rounder: 10/12/16/20px, 28px plates and 14px controls, up from 8/10/14/18px, 26px and 12px. Pick the sharp scale or set the radius tokens to keep the old shape.
- The
glowvariant and.mielui-glow-litlight at 30% when the theme is flat, down from 33%.
-
@mielui/svelteaccepts SvelteKit 3 as a peer dependency, alongside SvelteKit 2. Mielui imports no SvelteKit runtime, so package installs work in either version. - Source copied by the Mielui CLI still imports from
$lib/mielui, which SvelteKit 3 no longer provides. In a SvelteKit 3 app, install the package or add a$libalias until the CLI supports#libimports.
- Fixed docs pages going partly or fully blank while scrolling the sidebar in Chrome. Pinned sidebar labels now fade without a blur.
- Component pages appear complete after an in-app link, so scrolling down quickly no longer reaches examples that are still loading.
- A docs page opened from an in-app link no longer flashes at the previous scroll position or jumps back to the top after scrolling starts.
- Scrolling the docs no longer restyles the whole page on every frame, so it stays smooth on long pages.
- An open docs tab picks up a new deploy on the next link instead of running the old version until a reload.
- Scrolling a docs page quickly in Chrome no longer leaves parts of it blank.
- The component catalog renders every preview with the page, so scrolling quickly no longer reaches empty cards that fill in afterwards.
- Hover colors on Button, Badge, table rows, calendar days, breadcrumbs, disclosure rows, and other hover-only controls change instantly instead of fading in.
- The press scale on buttons and menu items settles in 120ms instead of 160ms, and no longer delays hover colors.
- Closing a Sheet or Dialog while it opens, or reopening it while it closes, turns it around from where it is instead of jumping or snapping into place.
- Reopening a Popover, DropdownMenu, ContextMenu, HoverCard, or DatePicker while it closes turns it around from where it is instead of restarting its entrance.
- Clicking a DropdownMenu trigger while its menu closes reopens the menu instead of being swallowed.
- In light mode, checked Checkbox and Radio fills and the on Switch track are slightly darker, so the default brand color reaches 3:1 against the page.
0.3.0
- The default theme is redesigned. Surfaces are white plates on a grey stage, every neutral is derived from the foreground color, every control shares one radius, and filled buttons are lit. Explicit themes keep their colors, and every theme picks up the new shapes and motion.
- The default fonts are Inter Tight and Geist Mono instead of Manrope and JetBrains Mono.
ui.cssimports them from@fontsource/inter-tightand@fontsource/geist-mono, and the package no longer depends on the old two. - Text weight stops at 500.
font-semiboldandfont-boldresolve to 500, and--font-weight-headeris 500. Build hierarchy from size and color, or set--font-weight-semiboldand--font-weight-boldback to 600 and 700. -
--color-border,--color-border-strong, and--color-inputare translucent mixes of the foreground instead of opaque greys. A theme that setsfoundation.borderkeeps its own color. - Two-layer surfaces swap their layers. The frame is now the card color and the inner surface is the page background, so content in an inset Card, a Dialog, a CodeBlock, or a Composer sits on the recessed stage color with white fields on top.
- The default edge highlight is 33% instead of 50%. Borders stay single and cards and menus stay without shadows, as before.
- The radius scale changes.
--radius-xlis 18px instead of 20px, plates use the new--radius-2xl(26px), and controls use the new--radius-control: 4px in the sharp scale, 12px in the default scale, and a pill in the rounded scale. Buttons were 14px before. - Primary, secondary, and destructive buttons are lit like
glow. Outline is flat: a hairline on the field color with no inset shading. - The primary button's text is dark on the default brand in light mode as well as dark, so it passes contrast.
--color-on-primaryis#21151ein both. - Text fields, native selects, select and combobox triggers, and number fields take
--radius-controllike buttons. Textarea and TagInput use--radius-xl. - The focus ring is 3px at half the primary color instead of 2px at 80%.
- Menus, selects, and popovers spring open in 220ms from their trigger's side and close on a 100ms fade. Dialogs pop from 96% scale in 400ms and leave in 150ms. The blur on both is gone.
--motion-duration-panel-in,--motion-duration-modal-in, and the menu and modal offset tokens have new defaults. - ToggleGroup sits in a segmented track, so it is two spacing units taller and wider. Its selected item is a lit fill that glides between items.
- Table's default variant has no outer frame or header fill.
variant="inset"and DataTable put the header and footer on the frame and the rows on a recessed surface. - Alert is one notice strip. Status variants tint the icon only, with no colored fill or border.
- ScrollArea no longer shows chevrons at an edge with more content.
showCuesfades the edge instead, and the thumb stays hidden until hover, focus, or scroll. - Composer is a recessed frame holding a white writing surface. Its focus ring shows only while the textarea is focused.
- The default Toolbar paints a grey track behind its keys.
- Badges take
--radius-controlinstead of a pill, and status variants have no colored border. - Tag Input renders its tags as secondary badges instead of outline badges.
- The Checkbox card row (
variant="card", formerlyprimary) no longer tints with the primary color. - Collapsible content is muted and inset to line up with its trigger text.
- Breadcrumb items are padded, so the trail's text starts one item padding further in.
- Tooltips reposition instantly when the pointer moves to the next trigger instead of gliding there.
- Switch thumbs no longer stretch while pressed.
- Calendar, RangeCalendar, DatePicker, DateRangePicker, and OTPField parts expose their DOM node as
bind:element, like every other component.bind:refon those parts no longer works. HugeiconsIcon'srefprop iselementtoo. - The exported
PopoverStatetype losesfocusedInside,trigger,focusedElement,onclick, andhovering. Nothing read them. -
closeMenuLayersis no longer exported from@mielui/svelte/utils. No component used it. - The internal overlay module no longer exports
useOverlay,OverlayOptions, orparentOverlayDepth. Dialog and Sheet stopped using them when Bits UI took over focus and dismissal. - Tabs, CodeBlock, FileDiff, and the
labelsof every family share state under private keys. Code that read them withgetContext('tabs')or a similar string key getsundefined. - Button takes a
labelsobject (ButtonLabels) instead ofloadingLabel,successLabel, anderrorLabel. Menu items, select and combobox options, dialog buttons,Form.Submit, and other parts built on Button follow. - CopyButton takes
labelsinstead oflabelandcopiedLabel.CodeBlock.Copydrops both props and readscopyandcopiedfrom thelabelson CodeBlock. - ShowMore takes
labels(more,less,region) instead ofmoreLabel,lessLabel, andlabel. -
Command.Contentdropslabel. Name the palette withlabels.paletteonCommand.Root. - TaskSteps takes
labelsinstead oflabel. The same object translates the summary sentence. -
FolderCard.Countdropsunit. Set the count text withlabels.countonFolderCard.Root, which now says "1 file" for one. - DataTable's
labels.rowsandlabels.selectedreturn the whole phrase and receive the counts, so a translation can place the number.selectedalso receives the total. -
Composer.RootdropserrorMessage, andComposer.Submitdropslabel,queueLabel,stopLabel, andloadingLabel. PasslabelstoComposer.Rootinstead. -
Question.RootdropserrorMessage, andQuestion.SubmitdropslabelandloadingLabel. Uselabels.submitError,labels.submit, andlabels.submittingonQuestion.Root. -
Conversation.ScrollButtondropslabel. PasslabelstoConversation.Rootinstead. - Reasoning's
labels.thoughtapplies only without aduration. With a duration,labels.thoughtForsets the whole status line. -
AccordionContext,AlertDialogState,CollapsibleState,ContextMenuCheckboxItemState,TabsState, andToggleGroupContextare no longer exported. -
ContextMenu.ItemandDropdownMenu.Itemaccept onlyvariant="destructive". Menu rows no longer acceptsizeorunstyled, which they ignored. -
DropdownMenu.SubTriggerno longer accepts Button props it ignored, such asicon,variant,size, andunstyled. -
Select.Triggerno longer acceptsicon,Select.Itemno longer acceptsunstyled,Select.Valueaccepts onlyplaceholderandclass, and Slider no longer acceptschildren. None of them were used. -
DatePicker.Rootrenders a wrappingdivso it can exposebind:element. - Dialog and Alert Dialog no longer accept
orientation, andDialogOrientationis no longer exported.sizeon Content is now the only width control, and it accepts a newxsstep. - Popover and Combobox no longer accept
stateKeyorstate_key, andDialog.Contentno longer acceptsrole,contentClass, orpanelIdPrefix. Combobox Content no longer acceptsfocusTrap, which it ignored. -
Select.ItemandCombobox.Itemno longer acceptvariant,size, orunstyled, which they ignored. - TagInput's
requiredMessageis replaced bylabels.required. -
AlertDialog.Exitis renamedAlertDialog.Close, matching Dialog. -
Sheet.HeadertakesshowClosein place ofclose, matchingDialog.Content. - TagInput takes
invalidandissuesin place oferror, matchingField.Root. - Hover Card takes
placementon Root in place ofsideandalignon Content, anddelayin place ofopenDelay, matching Popover and Tooltip. - Checkbox's
variant="primary"is renamedvariant="card". - Spinner's
curvedis renamedeased.
- Composer has a
Footerpart: a strip on the frame under the writing surface for hints, connected apps, or message-wide settings. - Button has a
glowvariant: a lit fill for a page's headline action, with--mielui-glow-colorand--mielui-glow-lightto change its color and brightness. -
ui.cssships four class contracts:mielui-platefor a resting surface,mielui-float-framefor a floating panel,mielui-glowfor the lit fill of filled actions, andmielui-glow-neutralfor the white selected fill on a track. -
--color-washis the one hover and selected-row fill. -
--mielui-glow-ringsets the outer edge of a lit control. - Four spring curves are theme tokens:
--ease-spring-panel,--ease-spring-layout,--ease-spring-pop, and--ease-spring-flick, with--motion-duration-spring,--motion-duration-pop, and--motion-duration-flick.springEasein@mielui/svelte/transitionbuilds the same curves for Svelte transitions. - Plates and frames use continuous-curvature corners where the browser supports
corner-shape: squircle. - The theme's edge highlight now scales the light on every lit control.
- Tabs, ToggleGroup, Toggle, and Pagination mark selection with a lit fill. Tabs and ToggleGroup indicators glide between items.
- Switch and Slider thumbs, the checked Checkbox and Radio, and the selected Calendar day are lit.
-
DropdownMenu.ItemandContextMenu.Itemrendervariant="destructive"as an error-colored row with a tinted highlight. Radio items show a dot. - A direct button or link inside Alert becomes its one action, at the end on wide layouts and last when stacked.
- SkeletonSwap lines sweep out of phase, and arriving content sharpens from a slight blur.
- Composer's send button becomes a lit stop control while streaming.
- Reasoning's label shimmers while thinking.
- Chart, pie, and heatmap tooltips and the crosshair follow the pointer on the layout spring.
- Calendar days take the control radius with a dot under today, and a selected range is a continuous wash.
- Date and color pickers open as floating panels.
- Kbd is a mono keycap and takes an inverse look inside tooltips.
- Spinner is a thin ring.
- A selected Question option takes the neutral wash instead of a primary tint, and its radio or check mark is lit.
- FolderCard is a single plate with the cover flush to its edge and a card-colored body.
- The theme's motion feel scales the spring, pop, flick, item, panel, and dialog durations together, and
--ease-draweris a theme token. - A second agent skill,
mielui-design, teaches coding agents to lay out whole pages with Mielui: app shells, dashboards, data tables, settings, chat workspaces, and marketing sites. Install it withnpx skills add mielsense/mielui --skill mielui-design. - Slider, NumberField, Dialog, Sheet, Notch, Toaster, Command, ColorPicker, Question, and Gauge take a
labelsprop that translates their built-in text and accessible names. Each exports its<Name>Labelstype; Toaster's isToastLabels. -
TagInputLabelsaddsadded,removed, andrequired.FileUploadLabelsaddsuploadFailed.DataTableLabelsaddsremoveFilter,done,previous, andnext.ChartLabelsaddsnoData, andHeatmapLabelsaddssummaryPending. -
createContextfrom@mielui/svelte/utilsreturnsfind()next toget()andset().find()returnsundefinedoutside the root instead of throwing. -
@mielui/svelte/utilsexports theWithElementtype, which swaps a primitive'srefprop for a bindableelement. - Button, Kbd,
Form.ErrorSummary, SkeletonSwap, CopyButton, ShowMore, TaskSteps, FolderCard, Composer, and Conversation take alabelsprop. Each exports its<Name>Labelstype. -
CommandLabelsaddspaletteandavailable.ToastLabelsaddscount.ColorPickerLabelsadds the trigger name and a name for each channel slider.DataTableLabelsaddsrow,selectPage, and the filter summary keys.QuestionLabelsaddssubmit,submitting,answer, andplaceholder.ReasoningLabelsaddstitle. - Chart, Heatmap, Table, Group, and NativeSelect export a prop type for every part. Select adds
SelectTriggerProps,SelectContentProps, andSelectLabelProps, and HoverCard addsHoverCardTitlePropsandHoverCardDescriptionProps. - The root entry exports every public prop, labels, and variant type, including the PieChart, EmptyState, and Notch types.
-
DatePicker.Rootsupportsbind:element, likeDateRangePicker.Root.
- Outline buttons inside a Group use the same border color as the inputs, text, and dividers beside them. They kept a lighter border, so the frame changed color partway around.
- Composer gives the input and its joined toolbar more padding.
- Outline buttons wrapped in a Tooltip or another trigger inside a Group take the group's border color too, so the frame no longer changes color at the wrapped button.
- The traveling highlight in menus and the command palette is measured correctly while its panel is still scaling in, so the first highlighted row is no longer too narrow after a keyboard open.
- The traveling highlight snaps to the active row for arrow keys and selection changes, and only glides for a pointer.
- Combobox results no longer animate their height on every keystroke.
- An indeterminate Progress pulses under reduced motion instead of freezing as a one-third bar.
- Tooltips scale from their trigger instead of their center.
- Toasts fade in as they rise instead of appearing at full opacity.
- Nested corners share a centre. Dialog, Sheet, Drawer, inset Card, Table, and Composer frames take their radius from the control radius plus their two-unit strip padding, menus and popovers from their rows, and CodeBlock, Toolbar, and the Reorder List handle follow the same rule.
- A closed Select or Combobox no longer intercepts clicks on whatever sits below its trigger.
- Dropdown menus, context menus, their submenus, and Select and Combobox lists keep an 8px margin from the window edge instead of sitting flush against it.
- Collapsing an Accordion, Collapsible, Reasoning, or Tool no longer logs an "Invalid keyframe value for property height" warning.
-
Message.Contentcaps assistant and system text at 65 characters per line, as intended. The cap was losing to a full-width class. - Closing a Dialog or Sheet from a menu item or confirmation inside it, in the same tick, no longer logs Svelte's
derived_inertwarning. - The info status color and the accent tint follow
--color-primary, so setting that one token rebrands them too. -
Command.Headerleaves the palette when it is removed instead of staying until the page reloads. -
Popover.Triggerrenders the chevron itsiconprop describes. It is off by default and turns while the popover is open. - CodeBlock keeps its gutter beside the code when
theme="custom"is combined with line numbers or an inline copy button. -
Toolbar.Groupstacks its items in a vertical toolbar, and vertical items share one width. - Calendar, Range Calendar, Date Picker, and Date Range Picker keep the visible month when their props change, which also stops a crash in the month and year selects when props are spread onto the root.
- Long weekday names are cut with an ellipsis instead of overlapping in the calendar header.
- A date field with
granularity="hour"no longer shows a stray "(second: 00)" after the hour. -
Select.Triggeracceptsaria-invalidin its type. - The placeholder and chevron on primary, destructive, and glow Select and Combobox triggers take the button's text color, so they are readable on the fill.
- A Combobox search field keeps the typed query after a pick instead of showing the picked label.
- A Textarea with a footer no longer shows the browser's resize grip inside its frame.
-
Group.Textmatches the height of the controls beside it in a vertical group. - Checked task items in Markdown show a tick instead of a dash.
- The Conversation scroll button no longer catches clicks while it is hidden.
- User messages are capped at 90% of the transcript width and system messages at their own measure. Both caps were losing to a full-width class.
- A selected radio and a selected Toggle Group item keep their lit edge while focused, instead of showing only the focus ring.
- A disabled radio's label shows the not-allowed cursor.
- The Reorder List handle darkens while its row is lifted.
- A tabbed CodeBlock scrolls in one place. Its panels no longer carry a second, competing height limit.
-
Tabs.Listacceptsid,aria-label, andaria-labelledbyin its type, andCombobox.Triggeracceptsaria-labelledby. - A standalone Label uses the same line height as the labels built into fields.
-
mielui add kbdinstalls the two modules Kbd imports. Its manifest left them out, so a CLI install could not compile. -
mielui add data-tablelists the shared context helper its parts use. - A part of Accordion, Radio Group, Toggle Group, Hover Card, Tooltip, or File Upload used outside its root throws an error that names the missing root.
-
Combobox.Labelno longer copies its own props onto the paragraph as HTML attributes. -
FileUpload.Triggershowslabels.choosewhen it has no children. It ignored the label before. - Chart tooltips, the crosshair, and the line marker appear at the hovered point instead of sliding in from the chart's corner.
- Chart, Pie Chart, and Heatmap tooltips move instantly when the keyboard drives them, and glide only for the pointer.
- Chart axes keep as many decimals as their ticks need, so 0.25 no longer reads as 0.3.
- The chart's screen-reader data table formats dates and numbers the same way as the visible chart.
- Gauge and Pie Chart read a unitless motion duration token as milliseconds instead of seconds.
- Reasoning no longer renders
data-streaming="false"while idle, so[data-streaming]selectors match only a live trace. - The Composer error notice uses the accessible error text color.
- Closed popovers no longer recompute their position on every scroll and resize.
-
DropdownMenu.Triggerdraws its chevron wheniconis set instead of writing aniconattribute onto the button. - File Upload adds files on pages served over plain HTTP. It threw because it relied on
crypto.randomUUID(). -
Group.Textrenders at the label size. -
Buttonstays a non-submit button whentype={undefined}is passed. - Checkbox keeps the native input in sync when an
oninputhandler cancels the change, and after a form reset. - Checkbox items inside a
ContextMenu.Subkeep their checked state after the menu closes and reopens. - Alert Dialog's Exit and Confirm buttons sit on the correct sides in right-to-left layouts.
- Link badges show the shared focus ring and use the theme's interactive cursor.
- The highlight in menus, Select, and Combobox no longer sits a fraction of a pixel off its row.
- SkeletonSwap stops its loading sweep once the placeholder is hidden, offscreen, or in a background tab.
- Tag Input tags use the theme's interactive cursor instead of always showing a pointer.
- Folder Card titles keep the same id between server and client render.
- The Toast position counter is announced to screen readers.
-
mielui addinstalls the peers and shared modules that Command, Data Table, Toast, Popover, Select, Radio Group, and the date pickers import, and no longer copies files they do not use. - Manifests declare the Svelte version Mielui actually requires,
^5.56.0, somielui addno longer accepts an older Svelte that cannot compile the copied files. -
Select.Triggerbinds its node withbind:element, as its docs said. - CopyButton's
oncopyaccepts a(text) => voidhandler without a type error. - Server-rendered inset cards, code blocks, and other two-layer surfaces put their header or footer strip on the theme's inset edge from the first paint, instead of moving it once scripts load.
- Tabs show the selected tab's indicator in server-rendered HTML, before scripts measure it.
- The Toast close button uses the small control size, the control radius, the shared hover wash, and press feedback.
- Data Table filter options hover with the shared wash instead of the secondary fill.
- OTP Field cells take the control radius, so the sharp and rounded radius scales apply to them.
- The Hover Card trigger shows the shared focus ring.
- An empty Data Table shows "No pages" without a page button beside it.
- The File Upload dropzone's default description starts in lowercase, so it reads as one sentence with its title.
- Heatmap reads the theme's motion once per chart instead of once per cell, so year-long heatmaps mount faster.
- The Toast stack computes each toast's offset once per change instead of re-summing every height for each toast.
- Copied component folders name their context module
context.tsinstead ofcontext.svelte.ts. Re-adding a component leaves the old file behind; delete it.
0.2.1
-
Composer.Toolbarrenames and swaps its two looks.variantis now'default' | 'inset'andchromeis gone. The default joins the toolbar to the input on one surface.variant="inset"puts the input on its own inset surface with the toolbar in the frame under it, like an inset Card. To keep the look you had, addvariant="inset"where you set nothing orchrome, and remove it where you setinset. -
DataTable.ColumnHeadersorts on click instead of opening a menu. Each click moves to the next state: ascending, descending, then unsorted. Shift-click adds the column to a multi-column sort. Three new optional labels cover its tooltips:sortAscending,sortDescendingandclearSorting. - Data Table's inset variant frames only the table and its footer.
DataTable.Toolbarnow floats above the frame instead of sitting inside it. -
DropdownMenu.Item,ContextMenu.Item,ContextMenu.CheckboxItem,Select.ItemandCombobox.Itemno longer accepthref. These rows always rendered a button and ignored it. Navigate fromcallbackinstead. - Surfaces are solid by default. Menus, dialogs, popovers, toasts and the Composer were frosted glass unless a theme said otherwise. To get glass back, set
--mielui-surface: glasson:root, turn it on in Theme Studio, or passsurface="glass"to one component. Built-in presets that do not set a surface are solid now too. - The default theme's font is Manrope instead of Inter.
ui.cssnow imports@fontsource/manrope, and the package no longer depends on@fontsource/inter. To keep Inter, install@fontsource/inter, import its CSS, and set--font-sans: 'Inter', sans-serif.
- Card accepts
surface="glass", which frosts the card frame so a backdrop shows through while the content stays on a solid surface. - Slider accepts
variant="field", a bar with the label and value inside that you drag anywhere to scrub, andformatto control how the value reads. - Slider's field variant takes
editable, so people can click the value or press Enter and type an exact number, withparsefor custom formats. - Slider reports finished changes through
onValueCommit, once per drag and after each keyboard or typed change. - Hold Shift with an arrow key to move a Slider ten steps.
- Folder Card takes
onclickwithouthrefto make the whole card a button, named by its title, withdisabledto block it. - Label takes
requiredto show a required mark after its text. Input and Textarea show the same mark on their built-in label when they are required, andField.Labelshows it whenField.Rootis required. -
HoverCard.ContentacceptssideOffsetto set the gap between the trigger and the card. - Color Picker shows a pipette button that picks a color from anywhere on screen, in browsers with the EyeDropper API.
- Press 1 to 9 inside a Question to pick that option. Each option shows its number key.
- Add seven built-in theme presets: Honey, Forest, Ink, Ocean, Console, Ember, and Lilac.
- Add five theme presets from Sivir UI: Profitable, Raven, Clawd, Inspiration, and Government.
- Rework the Magic preset with cool gray surfaces and a brighter indigo, and the Bitsy preset with a coral accent on cream surfaces.
- Make the Open preset neutral monochrome with Geist Mono, and darken the Functional preset's text for contrast.
- Group the Studio settings into Color, Type, Shape, Surface, and Motion tabs.
- Show every Studio token inline as a row in place of the Advanced dialogs. Numeric settings are scrub fields you can drag or type into.
- Undo and redo any Studio edit, preset switch or reset from the top bar or with Cmd/Ctrl+Z and Shift+Cmd/Ctrl+Z.
- Click any element in the Studio preview to edit the tokens it uses, in a panel anchored to it.
- Export a Studio theme from a side sheet with CSS, JSON and CLI tabs.
- Copy a share link from the Studio that opens your theme for someone else.
- Reset a single Studio setting to the preset with the button that appears beside its label once it changes.
- Studio drafts take the name of the preset they start from.
- Drawer floats a small gap from the edge it opens from, with all corners rounded. Top and bottom drawers are centered at a readable width instead of spanning the viewport;
classonDrawer.Contentsizes the panel. - Drawer footer actions line up with the panel's content instead of drifting past it.
- Opening a Drawer focuses the panel instead of its first control, so no control looks selected and touch keyboards stay closed. Use
onOpenAutoFocusto focus something else. -
Drawer.Handlesits at the bottom of a top drawer and becomes a vertical bar on the inner edge of left and right drawers. - Drawer no longer flashes back into view for a frame as it closes, and neither does its backdrop.
- Data Table, Composer, Toast and Code Block follow the single or double border setting. They kept a gutter in single mode before.
- Scroll Area contains overscroll only when its content overflows. An area with nothing to scroll no longer swallows the wheel, which also fixes a short Conversation blocking page scroll.
- Card no longer doubles the gap when a Footer follows a Header directly, and a Header that ends a card has no trailing margin.
- Glass cards frost dark in dark mode, where they used a pale white veil.
- Keep the divider between grouped controls visible after one of them is clicked. A focused control now rises above its neighbors only while its focus ring shows.
- Switch and Radio Group items without a description center inside their touch-height box on small screens. They sat at the top of it, out of line with neighboring controls.
- Radio Group leaves more room between options, so each description sits closer to its own label than to the next option.
- Composer's toolbar and send button use the small control size, so the strip under the input is shorter.
- Stop descenders such as g and p being cut off in Select triggers, in truncated text inside buttons, and in truncated menu, select, combobox and command rows.
- Classes passed to
Command.Headernow override its default padding and text color. - Keep the Command search row at its full height when the results are long.
- Color Picker no longer outlines its color area when opened with the mouse. The focus ring shows for keyboard focus only.
- File Diff rows no longer draw a red or green bar on their leading edge; the tint and the plus or minus sign mark the change.
- File Diff added and removed rows keep their full tint in dark mode.
- Number Field steppers use minus and plus icons instead of text glyphs. Source-copy installs now need
@hugeicons/core-free-icons. - Opening Theme Studio no longer changes the default theme's colors. It applied its own defaults on top, which turned primary button text white and flattened input borders across the site.
- A theme applied on the Themes page stays applied when you open Theme Studio, which now opens on that theme. It used to put its old draft back.
- The default theme's primary button text is white in light mode and stays dark in dark mode. It was dark in both.
0.2.0
- Default to single borders, bottom inset strips, glass surfaces, half-strength edge highlights, and primary button borders, with surface shadows off and control and dialog shadows on.
- Use rounder default corners: 8, 10, 14, and 20px.
- Large controls are taller than medium ones, and icon buttons now match the medium button height.
- Menus, selects, comboboxes, popovers, hover cards, date-picker panels, and chart tooltips always use a single border, regardless of the border setting.
- Text fields, selection triggers, checkboxes, and radios are flat, with a hairline border and no embossed edge.
- Sheet and Drawer footers sit on the frame below the content in one row, with a ghost Close at the start; Sheet.Close defaults to ghost.
- Chart category inspection is one tab stop: arrow keys, Home, and End move between categories instead of Tab.
- Switch has one bindable state prop,
checked. Replacebind:switchedandswitchedwithbind:checkedandchecked; theSwitchStatetype is removed. - Toggle accepts
variant="outline"only. Replacevariant="outlined".
- Add FolderCard, a folder-shaped card with a tinted or image cover, a title tab, an index, and an animated file count.
- Add Composer.Header for content above the input, and a chip variant for Attachment.List and Attachment.Item that shows files as compact pills with file-type icons or image thumbnails.
- Add an optional inset DataTable layout with compact filters and shared pagination inside the frame.
- Add an opt-in depth toolbar variant with raised keys and recessed selections; the default remains flat.
- Add
surfaceto Drawer.Content, with the shared frame kept flush on the edge the drawer opens from. - Add the Daydream preset with flat sage-gray cards, soft pink controls, and pastel chart colors in light and dark modes.
- Choose single or double borders across framed surfaces, including cards, dialogs, Notch, and Toast in themes and Studio.
- Choose the top or bottom position of inset strips, with local overrides for fixed headers.
- Customize five pastel chart colors in Studio; chart demos and default series share the same palette, with pink in Chart 2 and blue in Chart 3.
- Use number shuffle for changing numeric readouts in tables, charts, uploads, commands, Studio, and interactive examples.
- Organize Studio appearance and interaction settings, with toggle buttons for value choices and a compact Advanced colors action in the Color header.
- Preview glass against a colored Studio backdrop, with dropdown, popover, and hover-card examples.
- Use the theme storage helpers in
@mielui/svelte/themes/livewithout SvelteKit;@sveltejs/kitis now an optional peer dependency. - Translate or reword built-in text with an optional
labelsprop on Combobox, TagInput, FileUpload, DatePicker, DateRangePicker, Pagination, DataTable, ReorderList, FileDiff, CodeBlock, Markdown, Attachment, Tool, Reasoning, Message, Chart, PieChart, and Heatmap. Each exports a<Name>Labelstype; English stays the default. - Set
sizeon ToggleGroup.Root tosm,md, orlg. Every item inherits it; the default stayssm. - Render custom content in Combobox.Item by passing children;
labelstill drives search and the trigger text.
- Keep toasts clickable and announced while a Dialog, Sheet, or Popover is open.
- Stop
Kbd shortcut="enter"andshortcut="space"from taking the key away from a focused button, link, or menu item, so Enter on a focused Cancel no longer confirms. - Fire Alt shortcuts in Kbd on macOS.
- Restore Checkbox and RadioGroup to their initial value when their form is reset.
- Show Button success and error status colors on every variant.
- Limit tall popovers to the viewport.
- Keep line breaks while ResponseStream is streaming, and expose its text to screen readers as text instead of an image.
- Wrap completed ResponseStream text on whole words.
- Let a deliberate upward scroll pause Conversation auto-follow, even close to the bottom.
- Stop Composer from submitting again on Enter while
status="submitting". - Let text be dragged into fields inside Attachment.Root; only file drops are intercepted.
- Move Command arrow keys through filtered results in the order they are shown.
- Stack AlertDialog and Command correctly above a Dialog, with one scrim and the parent hidden from assistive technology.
- Apply the trigger-width minimum to DropdownMenu panels.
- Keep the Toast close button clear of its actions when the inset strip is on top.
- Give Tabs unique trigger and panel IDs for values that differ only by case, punctuation, or non-Latin characters.
- Wrap Pagination instead of overflowing narrow containers.
- Keep code clear of the CodeBlock overlay copy button.
- Show one focus ring in TagInput and NumberField: on the field while typing, on the tag or stepper otherwise.
- Align NumberField, TagInput, NativeSelect, and date picker triggers to the same height as Input.
- Mark invalid Checkbox and RadioGroup controls with an error border.
- Use one disabled opacity across Checkbox, RadioGroup, Switch, Slider, and Combobox, and stop a disabled Field from dimming its control twice.
- Respect a custom
aria-labelledbyon Select.Trigger. - Give the primary Checkbox card a visible border when unchecked.
- Announce FileUpload status changes without reading every progress percentage.
- Keep a DataTable facet's operator when its value is cleared.
- Reject invalid characters visibly in the ColorPicker hex field, and include the current color in the trigger's accessible name.
- Show initially expanded ShowMore content in full before its first measurement.
- Name both line numbers correctly for screen readers in FileDiff rows.
- Expose the Spinner label to assistive technology.
- Keep the Table caption clear of the scroll area's rounded corner.
- Render Gauge when
strokeWidthis at least half its size, and use the header weight for its value. - Keep the Heatmap entrance from replaying when data changes, keep arrow keys in place at grid edges, and say "1 contribution".
- Animate PieChart slice dimming and use the shared focus ring on its legend.
- Mirror chevrons and use logical alignment in right-to-left layouts for menus, Tabs, Command, Breadcrumb, Pagination, Select, CodeBlock, Markdown tables, and ReorderList.
- Raise the Drawer handle contrast.
- Extend menu and Command separators across the full inner panel width, including submenus.
- Keep glass tooltips high contrast by retaining the solid tooltip colors with a hairline edge.
- Share one single-border tooltip surface across chart, pie, and heatmap tooltips, keep pie tooltips off the inspected slice, and follow the pointer without a trailing animation.
- Soften live chart highlights, add quiet intervals, and suppress them while inspecting values.
- Preserve continuous single-border outlines on tables and preview/code cards.
- Keep glass inset panels visually distinct while allowing backdrop colors through, and keep inset panels white in light glass mode.
- Align the Native Select chevron with other selection controls without a duplicate native arrow.
- Retain structural inset gutters on data tables, composers, toasts, and code/preview panels in single-border mode.
- Soften the dark glass composer input tint so backdrop color stays visible without a heavy grey fill.
- Preserve custom accessible labels on numbered data-table pagination.
- Avoid duration-formatting errors for tool status values with excessive decimal precision.
- Keep file diff signs attached to their animated counts, and keep filenames and change counts above the patch when the theme uses bottom inset strips.
- Show visible square boxes for unchecked checkboxes and radios in both themes.
- Align menu item labels and icons to the start instead of spreading them across the row.
- Highlight only one row at a time in Select.
- Make status text in badges, alerts, toasts, and forms meet text contrast in light mode.
- Make keyboard focus rings clearly visible in both themes.
- Separate dark-mode frames from their inner surfaces and give dark floating panels visible shadows.
- Keep Switch thumbs light in both themes so the off state is clear against the track.
- Show CodeBlock code when it is composed without tab triggers.
- Place Toast titles above their descriptions in the content area, with only actions in the footer.
- Render Fieldset legends and form section titles semibold, above field labels.
- Show muted placeholder text in empty DatePicker and DateRangePicker segments.
- Make pending TaskSteps labels and Markdown links meet text contrast.
- Share one close button across Dialog, Sheet, and Notch, aligned with the title.
- Use the 16px header size for AlertDialog, Sheet, Drawer, and Popover titles.
- Use the shared frame inset in Sheet and Notch.
- Give Reasoning, Tool, Accordion, and Collapsible one row style with a hover fill, rounded focus ring, and trailing chevron.
- Show failed tools with an alert icon and text, and keep tool names in the foreground color.
- Use the shared square checkbox and round radio in Question, with one error message and edge.
- Make the user message bubble visible in dark mode and use the body weight for message and streamed text.
- Remove the Conversation empty-state icon tile and keep the scroll button visible in dark mode.
- Use the primary color for Gauge
tone="primary". - Remove heatmap cell outlines and raise chart axis and heatmap labels to 12px.
- Give every Badge variant the same compact pill height with a hairline border.
- Show the Alert icon and title above the description on one surface.
- Make H3 and Lead text one step larger than H4 and supporting text.
- Keep the selected segmented tab lighter than its track in dark mode.
- Remove faint column seams in inset Table and DataTable.
- Round the range calendar band at week edges and make it visible in dark mode.
- Render Breadcrumb as an ordered list with a rounded keyboard focus ring on its links.
- Size Tabs triggers and Toggle controls with the shared control heights, and show a focus ring on focused tab panels.
- Match the CodeBlock copy button to its tab height, remove the dark-mode ring around its tabs, and label trigger-less code panels as regions.
- Use the shared focus ring on Table scroll areas and remove the last-row border notch from row headers.
- Keep Combobox text clear of its chevron and match the chevron size to Select.
- Flatten the ColorPicker trigger and show preset names in the interface font.
- Give the Functional theme preset its own description.
- Keep generated dark-theme shadows consistent with the built-in stylesheet and respect reduced motion when heatmap tooltips move.
- Tighten menu highlight corners to fit their panel.
- Float Composer attachment chips above the frame, slim the bottom action strip, and shorten the initial input height while retaining automatic growth.
- Compact data-table filter popovers with denser option rows, smaller editor controls, and widths suited to each filter type.
- Remove gaps around edge-attached notch previews and the border along their attached edge.
- Preserve preset colors, typography, and token overrides when selecting or exporting a theme in Studio.
- Update vulnerable transitive dependencies.
- Style the Calendar month and year selects like other selection controls instead of showing the browser's native select.
- Name the single-date DatePicker panel "Choose date" instead of "Choose dates".
- Accept
aria-labelandaria-labelledbyin the RadioGroup.Root, ToggleGroup.Root, and Select.Trigger prop types.
0.1.1
- Remove Fullscreen Nav. Use Sheet with navigation links for mobile menus.
- Rename Modal to Dialog, including its types, package subpath, and CLI command.
- Replace standalone Toast usage with Toast.Root and its composable parts. Toast progress bars have been removed.
- Renamed Shortcut to Kbd, including its import path and prop type.
- Require Svelte 5.33 or newer for attachment support.
- Card titles default to level-two headings and accept an explicit heading level.
- Alert announcements are opt-in, with separate polite and assertive modes.
- Breadcrumb current-page state is explicit instead of inferred from the router.
- Reorder List dragging starts from its handle; row content remains interactive and accessible.
- Enforce mode-specific Input, Question, Accordion, and Toggle Group values and branch-specific Button and Badge attributes.
- Require Svelte 5.56 or newer for modern reactive template declaration syntax.
- Group components into Components, Blocks, AI components, and Chart components. Existing imports and docs URLs stay available.
- Toast notifications use an inset content area with a title and action buttons in the footer.
- Slider adds pill-shaped handles, a two-handle range mode, and right-to-left support.
- Group connects related controls with separators and optional text, in horizontal or vertical layouts.
- Add Heatmap with composable calendar, labels, summary, detail, legend, and keyboard navigation.
- Add Morph for SVG geometry transitions and text changes, including the theme switch.
- Add optional glass surfaces to overlays, menus, tooltips, selection popups, and toasts.
- Add a centered component preview and wide or narrow canvases to Theme Studio.
- Animate Heatmap cells and Gauge arcs on entry, with reduced-motion support.
- Add Table with default and inset variants, plus Native Select with grouped and multiple options.
- Add the Shimmer action and a shimmer variant for Skeleton.
- Add site-wide documentation search with Command-K and Control-K.
- Add a glass Composer surface and a Thinking text example for Shimmer.
- Add composable Task Steps rows and summaries, Reorder List handles and content, and Message metadata parts.
- Add separate Tool trigger/content parts, Color Picker surfaces, and Show More preview/trigger slots.
- Add Command search/result slots, optional Alert icons, and an optional Sheet header close control.
- Add controlled Context Menu state and manual tab activation.
- Add scoped Tooltip providers and noninteractive rich descriptions.
- Add composable Field, Fieldset, and Form components with accessible errors and SvelteKit remote-form examples.
- Add Calendar, Range Calendar, Date Picker, and Date Range Picker with keyboard navigation and date constraints.
- Add Number Field and OTP Field with native form submission and reset support.
- Add Separator and a public composable Toolbar with keyboard navigation.
- Add a swipe-dismissable Drawer with modal focus management.
- Add a composable Data Table powered by TanStack Table v9, with explicit sort menus, editable filter chips, selection, and pagination.
- Data Table filters accept a search control as children and align filter and sort buttons with inputs.
- Form error summaries accept validation paths directly and focus after unsuccessful submissions.
- Add File Upload with validation, progress, cancellation, retries, and animated completion.
- Initialize Mielui from a Studio JSON preset with
init --preset, or apply it withadd theme. - Set glass surfaces globally from Studio or the
--mielui-surfaceCSS variable. - Studio’s AI workspace demonstrates streamed Markdown, reasoning, tool activity, file attachments, and an overlaid composer with stop and replay controls.
- Studio’s component preview centers interactive mini cards for controls, checklists, team members, and disclosures.
- Checkbox supports small, medium, and large sizes, with a larger 18px default.
- Add composable bar, line, area, mixed, pie, and donut charts powered by LayerChart, with tooltips, legends, and animated data updates.
- Charts offer entry reveals and ongoing live highlights that respect reduced motion and pause offscreen.
- Add a composable Empty State for first-use screens, empty search results, and completed work.
- Add Notch for custom activities at any screen edge, with solid and glass surfaces and animated expansion.
- Toast notifications can use a shared Notch surface through the Toaster variant.
- Notch offers a persistent peek rail, timed notifications, and swipe dismissal, with timers paused during interaction.
- Heatmap includes a shared tooltip for hovered and keyboard-focused days, with an optional Tooltip part for custom layouts.
- Adjust edge highlight strength in Studio or theme presets. Controls, keycaps, and raised surfaces now use half strength by default.
- Notch supports detached side actions that unfold on hover or focus. Notch notifications show one item at a time with previous and next controls.
- Place counters or custom content outside a Notch with Accessory; notification counts now use this separate part.
- Add built-in live motion to Gauge and Heatmap through their animation props.
- Add built-in loading and empty-data states to Gauge and Heatmap.
- Select and Combobox support multiple selection with array values and menus that stay open while choosing options.
- Add the Number shuffle action and animate Gauge values with rolling digits.
- Replace the logo and favicons with the approved compact cat silhouette.
- Tag Input values have visible badge borders and backgrounds.
- Toast timers pause during keyboard interaction, and close buttons remain visible.
- Toast descriptions have more room above a compact title and action row.
- Tag Input badges use stronger borders and a contrasting fill.
- Homepage navigation uses equal button heights and spacing, with the redundant Components button removed.
- Tag Input uses the standard transparent outline Badge styling.
- Restore Changelog and Studio pages after TypeScript preprocessing and component path errors.
- Preserve Group outer borders with single-pixel separators and composed Input, menu, and popup examples.
- Match Alert to the inset Toast layout, with the description above the status row.
- Render Tag Input tags as transparent outline badges.
- Keep the darker inset panel inside frosted glass overlays.
- Match Alert text size, vertical centering, and status-row spacing to Toast.
- Use a minus indicator for checked checkboxes.
- Keep morph visuals in place while updating SVG geometry without a delayed icon swap.
- Keep the theme icon color synchronized with the active theme during morph transitions.
- Align Switch labels with the pill-shaped control.
- Keep Accordion borders between items only.
- Restore original SVG visibility when Morph is removed or its child icon changes.
- Respect the theme’s disabled-motion setting in chart entrances and motion actions.
- Preserve checkbox state while disabled and forward accessible names to the native input.
- Size Composer submission controls to their visible content and respect custom action labels.
- Preserve fractional Gauge ranges and normalize invalid numeric values.
- Fix preview deployment type checks for icon imports, native controls, table captions, and documentation examples.
- Use Bits UI for dialogs, sheets, popovers, menus, selection controls, tabs, disclosures, switches, and toggles while retaining Mielui styling and motion.
- Add menu keyboard navigation, typeahead, nested dismissal, and touch long-press behavior.
- Preserve canceled events, optional overlay labels, and conditional dialog actions.
- Keep option labels and disabled selections synchronized as collections change.
- Prevent obsolete streams, clipboard requests, and canceled reorder gestures from overwriting newer state.
- Reconcile toast persistence, durations, paused timers, and visible notification limits.
- Connect field and tooltip descriptions to their controls, and ignore inactive or composing shortcuts.
- Update scroll cues after content changes and support fractional progress ranges.
- Preserve preview state when switching to source code and reduce redundant status animation.
- Reset Avatar loading state on source changes and preserve native image callbacks.
- Keep skeleton placeholders inert, normalize pagination bounds, and prevent silent inset Card footer replacement.
- Add keyboard navigation to Toolbar and improve Color Picker labels, pointer ownership, and reduced motion.
- Preserve Slider handle identity while adopting Bits UI keyboard behavior and adding named form values and reset support.
- Use Bits UI for Combobox navigation and selection while preserving fuzzy search and Mielui styling.
- Show submission errors without losing Composer drafts or Question answers, and ignore obsolete completions.
- Keep disabled Button links from navigating and preserve native Input checkbox, radio, and file semantics.
- Repair active tabs after removal or disabling, and keep Command results synchronized during collection changes.
- Keep IME confirmation and canceled click handlers from activating commands or opening selection popups.
- Give toasts one visual exit and stop long response streams from animating every character.
- Preserve Group variant styling with a single joined divider.
- Forward overlay action refs and keep cancel actions from stealing focus after opening.
- Defer offscreen documentation previews while preserving mounted preview state.
- Remove the resting shadow from outline buttons while retaining their border and keyboard focus indicator.
- Show invalid input borders and reveal field errors with interruptible, reduced-motion-aware transitions.
- Restore pointer hover and selection in menus and floating panels by keeping their content above dismissal layers.
- Keep top and bottom drawers full width in the examples and give nested drawers separate backdrops and focus boundaries, with cancelled swipes returning to rest.
- Prevent date segments from overlapping on narrow screens and keep calendar popups above surrounding navigation.
- Keep advanced Studio spacing and motion overrides until their corresponding preset changes.
- Match date-picker trigger heights to their inputs and keep hover feedback distinct.
- Position Toast dismiss buttons at the top-right without covering the message.
- Use round send and stop icons in Composer without changing its toolbar variants.
- Show rejected attachments in compact error cards without decoding oversized image previews.
- Animate promise toast resizing in 50 ms and place title-only messages inside a fitted inset panel.
- Preserve Studio color, typography, spacing, and motion choices in CLI-compatible theme exports.
- Keep tab highlights aligned while their dialog or other parent animates in.
- Studio places advanced colors below the color controls and groups shape and motion presets with labeled advanced-settings buttons.
- Studio previews share one surface, with dedicated Charts and AI tabs and flush joins on advanced-setting controls.
- Studio uses full-width previews, a denser component gallery, and joined preset and copy controls.
- Studio shows a year of heatmap activity and pairs a full-width conversation with the narrower Composer layout used in its documentation.
- Fix TypeScript errors in composed controls, upload and toast motion, and documentation examples while preserving native event handlers and refs.
- Update the docs and installer workspace to Svelte 5.57.1 and SvelteKit 2.70.3, with svelte-check 4.7.6.
- Honor a consumer project's declared package manager and recognize Bun lockfiles in the CLI.
- Keep theme editing usable when browser storage is blocked or full, and report failed theme saves.
- Keep upload image previews stable as progress changes.
- Keep Dialog, Sheet, Popover, and File Diff state synchronized with their bound values and current props.
- Restore nested dialog stacking, single-layer dismissal, focus return, and shared background scroll locks.
- Cache the GitHub star count and retain the last valid count during temporary API failures.
- Preserve invoice-preview state when switching Studio tabs.
- Buttons, fields, selects, and floating surfaces share subtle light-catching edges that follow the theme’s shadow settings.
- Gauge defaults to a larger 120px display with proportional arcs and labels, and smoothly animates value changes.
- Pie chart tooltips use opaque inset surfaces.
- Menus, overlays, tooltips, conversation scrolling, and response text respect reduced motion and the theme’s disabled-motion setting.
- Accordion triggers retain their content relationships, and focus traversal includes editable text regions.
- Joined inputs, selects, and buttons share one control height across sizes. Table badges fit their labels instead of filling the cell.
- Segmented tabs keep even rail padding at fractional spacing and inside scaled containers.
- Keep inset Cards stable when their footer is removed during a state change.
- Studio groups edge highlight strength under its switch and restores the previous strength when re-enabled.
- Data Table uses the shared inset Table surface with a compact header.
- Alert dialogs announce their title and description. Select triggers and option lists now expose linked combobox semantics and accessible names.
- Combobox results collapse smoothly when filtered and stop locking page scroll as soon as the menu closes.
- Give Notch content more padding and keep its detached actions close to the panel.
- Dialogs restore focus when removed while open without interrupting a newly opened dialog.
- Escape closes only the deepest open dropdown or context submenu, keeping its parent menu available.
- Notch side actions unfold with synchronized shape and button motion, including interrupted hover changes.
- Morph and Shimmer stop active effects when inherited theme motion is disabled and clean up their theme observers on removal.
- Stopping a controlled Composer response no longer submits the preserved prompt again when the control returns to Send.
- Let Show More content fade into its surrounding surface without a mismatched background strip.
- Rework live chart motion with stationary pie highlights, area-fill sweeps, and staggered bar highlights; keep offscreen effects paused without trapping visible sweeps.
- Keep Reasoning duration labels spaced, respect reduced motion in copy feedback, and keep notch notification text wrapped during morphs.
- Guard font preference storage and isolate font state between server renders.
- Keep Accordion accessibility relationships valid when content is omitted and honor disabled Tag Input controls.
- Keep disabled Popover triggers closed and dismiss empty tooltips.
- Preserve invoice draft validation and reset stale filters when creating or locating an invoice in Studio.
- Scale Heatmap entrance timing with the theme motion setting.
- Keep page-outline jumps aligned after lazy previews load and track section headings by their document position.
- Remove content and icon morphing from Toast notifications, including stacked Notch notifications.
- Prevent hidden chart data tables from creating extra scroll space inside previews.
- Give chart loading and empty messages the shared inset card appearance.
- Match Heatmap tooltips to the shared chart surface and inset the Gauge arc inside a thicker track.
- Give Gauge arc ends a subtle corner radius.
- Keep Gauge loading and empty states compact without a nested card.
- Preserve the Heatmap calendar layout while loading or showing no activity.
- Match the Gauge background track to its colored arc thickness.
- Restore the Color Picker hue slider’s rainbow track.
- Match catalog preview button text colors to the active theme.
- Place Switch edge highlights on the thumb, keep passive surfaces flat, and preserve control edges when fields and buttons receive focus.
- Restrict the native file picker to one file when maxFiles is one.
- Keep File Upload removal animations inside the file list instead of jumping toward the viewport corner.
- Preserve the Gauge loading ring while using theme colors for its mask.
- Keep slider dragging focused without rescheduling focus on every pointer movement, and clear stale tab hover indicators when tabs disappear or become disabled.
- Honor motion settings and visibility for spinner, progress, and shimmer animations; update traveling highlights when theme motion settings change.
- Restore Notch swipe position and release pointer capture when gestures reverse or are cancelled.
- Handle large chart datasets without argument-limit failures and avoid rebuilding number formatters for every tick or slice.
- Parse small percentage color alpha and repeated CSS variable references correctly in Studio.
- Keep Studio header sizing within supported limits and reject font values that can break generated CSS declarations.
- Show indeterminate attachment progress for nonfinite values and refresh Morph text colors after theme changes.
- Evaluate nested Studio length calculations with correct arithmetic precedence and root-relative units.
- Include upstream license and attribution notices with CLI source installations without replacing the application's own license.
- Remove unused bundled documentation fonts that lacked accompanying license notices.
- Keep theme registry schema normalization compatible with its Elysia runtime.
- Avoid false tab-alignment test failures caused by browser subpixel rounding.
- Prevent dependency discovery from reloading browser tests during fresh CI runs.