Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.5.0 - 2026-10-04
Added
- Generative UI schema for assistants: the package ships
dist/ui-schema.json(JSON Schema of a window spec, generated from the component types and JSDoc) anddist/ui-tools.json(Claude API tool definitionsopen_window,update_window,control_player,close_window), exported asjarvis-react-ui/ui-schema.jsonandjarvis-react-ui/ui-tools.json.UI_REGISTRY_METAexposes the allowlist as plain data. - Generative UI (new entry
jarvis-react-ui/generative):UiRendererrenders a window from a JSON spec (allowlisted components and props, state with$bind/$state/{{key}}templates,visibleIf,set/toggle/emitactions);useUiWindowsmanages several generated windows forWindowManager(open,patchState,callfor players,close);validateUiSpecreports problems with their JSON path;UI_REGISTRYandUI_ICONSlist what specs may use. WindowManager:ManagedWindow.defaultSizeopens a floating window at a given size while it still centres and cascades.WebFrame: a web page in a sandboxed iframe with a toolbar (address, reload, open in new tab); onlyhttp(s)URLs are loaded.- Layout:
Stack(column or row,gapon the--s-*tokens,align,justify,wrap) andGrid(1–6 equal columns or auto-fit withminColumnWidth) lay out content without Tailwind. - Form controls:
Slider: range input with pointer drag, track click and keyboard (arrows, PageUp/PageDown, Home/End),onValueChange/onValueCommit,min/max/step,formatValue,fullWidth.Checkbox: native checkbox in HUD chrome with anindeterminatestate.Textarea: multi-line field matchingInput, withautoResizebetweenrowsandmaxRows.RadioGroup: mutually exclusive options with roving focus, descriptions and disabled items.Select: dropdown with keyboard navigation, typeahead and icons; the list opens in a portal, so it is not clipped inside windows, and Escape closes only the list.
- Docs: new "Forms" group in the sidebar (Input, Textarea, Select, Checkbox, RadioGroup, Switch, Slider).
- Media:
MediaControls: source-independent transport controls (play/pause, seek bar, time, mute, volume, optional previous/next/fullscreen), fully controlled, withK/M/ arrow-key shortcuts; unknown or live durations showLIVE.MediaPlayer: video or audio file player withMediaControls, captions track, error state and aMediaHandleref (play,pause,seek,setVolume,setMuted).YouTubePlayer: YouTube video with HUD controls via the IFrame Player API (loaded on first mount, privacy-enhancedyoutube-nocookie.comby default), the sameMediaHandle, and a "Watch on YouTube" fallback when embedding is disabled.
- Docs: new "Media" group in the sidebar.
WindowManager: floating windows for content created at runtime.ManagedWindow.floatingopens a window free-floating without a slot (no limit of nine),defaultRectsets its initial rect (otherwise it opens centred and cascades), andclosableplus the newonCloseprop add a close button and Escape-to-close. The window used last is drawn on top. A new floating window playsmenu_open.Window:closeOnEscapeandstackIndexprops; closing now also playsmenu_close.StatusDock:labels(status text per state, e.g. for localization) andbrandprops, passed through to the built-inStatusLabel.
Changed
Window/WindowManager: the window body now fills the window height, so content can useheight: 100%(e.g. aWebFrameor a player filling a floating window).
Fixed
ThreeOrb(particle,halo,signal,reactor,lattice) andcreateVariantOrb: the canvas painted an opaque dark background over everything behind it, e.g. theHUDShellgrid, stars and horizon. The variant orbs now render on a transparent canvas, including their bloom glow.
0.4.1 - 2026-10-04
Fixed
style.css: the published stylesheet contained no component styles and none of the library's keyframes (.lib-panel,.hud-shell,.lib-scene, ... had no rules), so components rendered unstyled. Affected every release up to 0.4.0. The build now fails when a component stylesheet or keyframe is missing fromdist/style.css.Panel,TopBar,StateSimulatorandTweaks: the glass blur (backdrop-filter) was dropped from the built CSS in Chrome and Firefox; only the-webkit-variant was left.
0.4.0 - 2026-10-04
Added
- Docs for AI coding assistants: the package ships
dist/llms.txt,dist/llms-full.txtanddist/api.json(every public component with entry point, props and demo sources), also exported asjarvis-react-ui/llms.txt,jarvis-react-ui/llms-full.txtandjarvis-react-ui/api.json. The docs site serves/llms.txt,/llms-full.txtand a Markdown version of every page (<page>.md). - API reference: the public helper types that props use (
TabItem,TableColumn<T>,TableAlign,AppOrbState,NavListGroup,ChartSeries, ...) are documented with their fields or definition below each API table, inllms-full.txtand inapi.json(typesper component).
0.3.0 - 2026-10-03
Added
ThreeOrb: five new WebGL designs via thevariantprop:particle,halo,signal,reactorandlattice(bloom-lit, each loaded as its own chunk). The original look stays the default asconstellation.ThreeOrb: new propsquality('high'/'low'for weak GPUs),interactive(drag to rotate, scroll to zoom),analyser(Web AudioAnalyserNodefor audio reactivity; the variant designs simulate a voice without one) andfill('viewport'default, or'container'to fill the parent element).jarvis-react-ui/orb:createVariantOrb(variant, container, options)to drive the variant designs without React,readAudio/createAudioBuffershelpers,ORB_VARIANTS,ORB_VISUAL_STATES,BAND_COUNTand theOrbRenderer,OrbVariant,OrbVisualState,OrbQuality,VariantOrbOptions,ThreeOrbVariantandThreeOrbFilltypes.
Fixed
ThreeOrb/createOrb: no longer log theTHREE.Clockdeprecation warning with three r183 or newer.
0.2.0 - 2026-10-03
Added
-
Charts:
LineChart(linear or smooth, optional dots),AreaChart(optionally stacked) andBarChart(grouped or stacked, negative values). Dependency-free SVG in token colors, responsive width, nice y-axis ticks, legend, hover tooltip, keyboard inspection (arrow keys) and a screen-reader data table. SharedChartSeries,ChartColorandBaseChartPropstypes. -
Dialog: modal dialog rendered intodocument.bodywith focus trap, Escape and backdrop closing, focus return, scroll lock,initialFocusRef, three sizes andmenu_open/menu_closesounds. -
Kbd: keyboard key chip (<kbd>) in two sizes. -
JarvisProvider: root provider that mounts the audio engine (UI sounds, on by default,sfx={false}starts muted), the toast system anduseJarvis()(isMuted,toggleMute). -
Toast notifications:
Toastelement,ToastProvideranduseToast()(toast,dismiss,dismissAll) with four variants, actions, auto-dismiss that pauses on hover/focus, a queue (max), four placements, id-based replacement and variant sounds. -
useAudioEngine: newinitialMutedoption, used when the user has no stored mute preference. -
CodeBlock: newonCopycallback, called after the code was copied. -
New primitives:
Input(text field with start/end adornments, sizes, invalid state),IconButton(square icon-only button with accessible label and pressed state),Tooltip(hover/focus bubble with placements),Switch(accessible on/off toggle, controlled or uncontrolled),Divider(horizontal/vertical separator with optional label) andLink(accent/muted/nav anchor with external and active states). All props carry JSDoc descriptions. -
New compositions:
NavList(grouped side navigation with active entry, badges and anonItemClickhook for client-side routers),Tabs(accessible tab list with keyboard navigation, controlled or uncontrolled),Table(typed columns with custom cell renderers, dense mode, caption, empty state),CodeBlock(code panel with title, language label, copy button and optional pre-highlighted HTML) andCallout(info/success/warning/error note). -
Documentation website at https://joeyash.github.io/jarvis_ui_lib/ with getting-started guides, theming playground, design token reference, live demos with source and generated API tables; the package
homepagenow points to it. -
JSDoc descriptions for the props of
Button,Panel,TopBar,WindowManager,Input,IconButton,Switch,Link,Tooltip,Divider,Callout,CodeBlock,NavList,TableandTabs, shown in editor tooltips. -
JSDoc descriptions for the props of all primitives (
Pill,Label,Mono,Metric,ProgressBar,Sparkline,Icon,Hint,BrandMark, the HUD decoration layers,PushToTalkButton,WaveformMeter,WaveStrip,StatusLabel,StateSimulator,Tweaks), with documentation pages and live demos for each. -
JSDoc descriptions for the props of
Window,SnapOverlay,SwapOverlay,SlotGhost,CssOrb,ThreeOrb,GlassCard,StatusBadge,StatusDockandHUDShell. Every public component is now documented on the docs site, plus pages for the hooks and the slot-grid and time helpers. -
TopBar: newpositionprop ('fixed'default,'sticky','static') so the bar can be used inside a page layout; newTopBarPositiontype. -
StatusLabel:labelsprop to override or localize the text per state, andliveprop that turns the status text into a polite live region. -
StatusDock:pttLabelprop for the accessible name of the built-in push-to-talk button. -
StateSimulator:FOLLOW UPbutton for thefollow_upstate. -
WindowManager:onExpandedRectsChangeprop, so controlledexpandedRectscan be moved and resized. -
HUDShell:workingshows an accent light trace along the top edge and a soft edge vignette. -
Scene:starCountprop (default 60). -
CssOrb,ThreeOrb: optionalaria-label; when set, the orb is exposed asrole="img". -
PushToTalkButton: accepts all native<button>attributes and events (disabled,id,onPointerDown/onPointerUpfor hold-to-talk, ...), forwards itsrefand supportsaria-label. -
Hint: the position union is exported asHintPosition.
Changed
Label,Mono,Pill,Metric: native attributes (id,title,aria-*,data-*, event handlers) are forwarded to the root element;MonoacceptsdateTimeforas="time".Icon: decorative by default (aria-hidden="true"withoutaria-label); witharia-labelit getsrole="img".classNameno longer defaults to an empty string.Window: the root is a non-modalrole="region"named by its title (wasrole="dialog");onDragStart/onResizeStartare typed with the nativePointerEventthey receive; header icons are lucide-react icons; accent glows replace black drop shadows.HUDShell: idle panels areinert, and leaving idle crossfades like entering it.StatusDock: the state text is a polite live region, so state changes are announced.StatusLabel:follow_upshowsfollow-up...instead oflistening....GlassCard: draws one set of corner brackets (the Panel's own) instead of two.LightTrace:coloralso tints the bright center and glow, not only the tails.PushToTalkButton:onClickis a standard click handler and receives the event (no-argument handlers still work).useTweakApply: removes the CSS variables it set when the component unmounts.StateSimulator,Tweaks: buttons and swatches expose their selection viaaria-pressed.Hint: the fixed corner modifier class is nowlib-hint--fixed-br(wasfixed-br);Hint.Keyrenders theKbdchip.- Styling: inline styles were replaced by classes and CSS variables in
ProgressBar,Sparkline,Reticle,CornerBrackets,Scanlines,GridBackground,GlowFrame,StarField,CssOrb,Window,SnapOverlay,SwapOverlayandSlotGhost; colors inSparkline,Scanlines,GridBackground,Scene,Reactor,CssOrb,PushToTalkButtonandStateSimulatorderive from the theme tokens, so they follow token overrides. No visual change with the default tokens.
Deprecated
PushToTalkButton: theariaLabelprop; usearia-labelinstead (it wins when both are set).
Fixed
GlowFramebreathe,GridBackgrounddrift,Scanlinessweepand theStatusBadgepulse referenced animations that did not exist, so they did nothing (breatheeven removed the glow). The keyframes now ship in the stylesheet.prefers-reduced-motionis now respected byGridBackgrounddrift,GlowFramebreathe (falls back to the static glow),StarFieldandScenetwinkle/drift,LightTrace,PanelBloom,StatusBadgepulse and theCssOrbparticle loop.CssOrbis decorative by default (aria-hidden) instead of anaria-labelon a role-less element; theThreeOrbcanvas isaria-hiddenby default.WindowManager: dragging or resizing an expanded window with controlledexpandedRectsno longer snaps back;homeAssignmentschanges are picked up by Reset (was read once on mount).Window: double-clicking the header plays theexpand/collapsesound like the button.WaveformMeter: every bar gets its own animation delay, not only the first 12.Tweaks: slider ids are unique per instance (useId).StateSimulator: the toolbar wraps on narrow screens instead of overflowing its container.PushToTalkButton: the rotating dashed rim was shifted to the top left (it reused aspinkeyframe meant for centered orb rings).- The stylesheet no longer defines
spinandpulsekeyframes, which overrode Tailwind'sanimate-spin/animate-pulsein apps that use Tailwind.
0.1.0 - 2026-10-03
Initial public release.
Added
- Component library: primitives (
Button,Pill,Label,Metric,Panel,Sparkline,ProgressBar, decorative HUD layers, ...) and compositions (HUDShell,GlassCard,StatusBadge,StatusDock,WindowManager). - Window system: draggable, resizable windows with a 9-slot snap grid (
Window,SnapOverlay,SwapOverlay,SlotGhost,useDraggable,useResizable,useSlotDrag). - Orbs:
CssOrbin the main entry andThreeOrb/createOrbinjarvis-react-ui/orb(threeis an optional peer dependency). - UI sound effects:
SfxProvider,useSfx,useClickSfx,useHoverSfx,useAudioEngineand the bundled sound files. - Configurable sound base URL:
AudioEngine.setSoundBaseUrl()/getSoundBaseUrl(), thesoundBaseUrloption ofuseAudioEngine(4th argument) andDEFAULT_SOUND_BASE_URL(/sounds/), so sounds can be served from a custom path or a CDN. - Design tokens and a single compiled
style.css(no Tailwind needed in consumer projects). - Live showcase (
npm run dev). - Published as the ESM npm package
jarvis-react-uiwith TypeScript declarations, MIT licensed.