Changelog
Every release of @intentface/ui, newest first.
@intentface/ui
0.8.0
Minor Changes
- ChipFix
parseChipSegmentsdropping chips whose label has brackets, and keeping the backslashesencodeChipMarkdownadds before brackets, parentheses and backslashes. - ChipBreakingRemove
CHIP_REF_PATTERN. Read chip tokens withparseChipSegments. - ChipBreakingRemove
variantandChipStatefromChip.Root. Style a chip with a class or your owndata-variant, and use that value directly where aclassName,styleorrendercallback readstate.variant. - ComposerBreaking
Composer.Rootrenders a<div>instead of a<form>. Target[data-composer-root]instead ofform, and passrender={<form />}to keep a form. - ComposerBreaking
Composer.SubmitandAskUser.Continuearetype="button"and send through the store. Don't rely on them submitting an enclosing form. - ComposerBreaking
useComposerSubmitreturnsonClickin place oftype. SpreadonClickonto your button and settype="button". - ComposerNew
submit()on the composer store. - ComposerFix
Composer.Textarea'srequirednever blocking the submit of a form it sits in. - ComposerNew
--composer-height,--composer-width,--composer-container-heightand--composer-container-widthonComposer.Root, and the same numbers assizeon the composer store. - ComposerNew
getServerSnapshot()on the composer store, withsizenull as the server rendered it.useComposeranduseComposerStorehydrate against it. - ComposerBreaking
Composer.PanelandComposer.Popoverrender callbacks receiveOmit<ComposerState, "size">. Let a separately declared callback infer its argument, or type it with that. - ThreadBreakingRemove
Thread.Overlay, itsThreadOverlayPropsandThreadOverlayStatetypes, thedata-thread-overlayattribute and--thread-overlay-top-height. Render your ownaria-hidden,pointer-events-nonedivfor a fade, and set the space above a landed turn with--thread-inset-top. - ThreadBreakingRename
--thread-overlay-bottom-heightto--thread-inset-bottom, which now includes--thread-composer-gap. PadThread.Contentwithpb-(--thread-inset-bottom)and set--thread-composer-gaponThread.Rootfor the room above the composer. - ThreadBreakingRemove
--thread-turn-area. Read--thread-turn-min-heightinstead. - ThreadBreaking
Thread.Viewportis a size container, so it needs a definite height. Give ith-fullinside a sizedThread.Rootrather than only amax-height. - ThreadBreaking
--thread-inset-bottomand--thread-turn-min-heightassume the composer overlays the viewport. If your composer sat in flow below aflex-1viewport, giveThread.Composerabsolute inset-x-0 bottom-0, padThread.Contentwithpb-(--thread-inset-bottom), and renderMessage.Turns or passautoScroll="bottom". - ThreadMove
--thread-turn-min-heightfromThread.ContenttoThread.Root. It is the viewport's height (100cqh) minus the top inset and the bottom inset infollowandjump, and0pxinbottomandoff, so[&>*:last-child]:min-h-(--thread-turn-min-height)can stay onThread.Contentin every mode. - ThreadNew
--thread-inset-topfor the space above a landed turn and--thread-composer-gapfor the room between the last line and the composer. Set both onThread.Root. - ThreadNew
--thread-composer-heightand--thread-composer-width, theThread.Composerslot's size. - ThreadFix a
Thread.Composerthat mounts late or remounts going unmeasured. Its variables are removed when it unmounts. - Message
groupTurnsaccepts any records with anidand arole.
Patch Changes
- ComposerFix sent attachments being released before
onSubmitcould read them, which left theirblob:URLs dead. They are now released onceonSubmitsettles.
0.7.0
Minor Changes
- BreakingRenamed from
@intentface/chat. Swap the dependency for@intentface/uiand replace@intentface/chat/with@intentface/ui/in imports; the rename changes nothing else.
0.6.0
Minor Changes
- New
@intentface/chat/generativeentry, experimental: typed helpers that check a model's UI tool call against a catalog (defineCatalog,tree.schema,tree.validate), read it while it streams (useTree,tree.read), resolve its data bindings (bindings.resolve) and write it as Markdown (markdown.tree).
0.5.3
Patch Changes
- ComposerFix
Composer.Rootlosing its state under StrictMode or a hidden<Activity>, which drew the placeholder over a controlledvalue. - ComposerFix an embedded composer scrolling the page around it on
clear(),setText()and ask-user step changes. - ComposerFix a trailing empty line in an overflowing composer not scrolling into view.
- AskUserFix moving focus between options scrolling the page around an embedded question.
- ComposerAdd focus options to the controller's
focus(), such as{ preventScroll: true }. - Remove the
nanoiddependency. - AttachmentsUse the file's blob URL as the attachment id.
- ComposerFix a hydration mismatch when
Composer.Popoveror an overlayComposer.Panelis server-rendered. - AskUserFix
AskUser.OptionsandAskUser.Optionwriting to refs during render. - ComposerFix
Composer.Commandwriting to a ref during render. - AskUserImprove re-renders:
AskUser.Root,AskUser.OptionsandAskUser.Optionmemoize their context values. - ReasoningStepsImprove re-renders: their collapsible context is memoized.
- TabsImprove re-renders: the anchored surface memoizes its context value.
0.5.2
Patch Changes
- Add JSDoc to every part of
Attachments,Chip,Message,ReasoningandSteps, so editors show the same reference as the docs. - Refresh the README to match the rewritten docs.
0.5.1
Patch Changes
- ThreadFix losing the bottom while the container is resized.
0.5.0
Minor Changes
- TabsFix
dismissOnEscapeclosing the panel on an Escape another handler already prevented. - ComposerFix an Escape in one composer stopping generation in another.
- ComposerBreakingEscape stops generation only from inside
Composer.Root. To stop on any Escape, handle it on your chat container, such asThread.Root.
0.4.0
Minor Changes
- NavNew
Nav.Toggle: a caret insideNav.Trigger, so a branch row can also be a page. - NavAdd
aria-current="page"to activeNav.ItemandNav.Triggerrows. - NavFix a disabled
Nav.Triggerrendered as a link still navigating. - NavFix Space not following a link row.
- TabsNew
openOnHover,openDelayandcloseDelayonTabs.Trigger. - TabsAdd
eventDetailstoonValueChangeandonItemsChange, withreasonandcancel(), so a close can be cancelled. - TabsFix Escape from a floating
Tabs.Popupdropping focus instead of returning it to its tab. - Breaking
event.preventBaseUIHandler()is nowevent.preventPrimitiveHandler(), andevent.baseUIHandlerPreventedis nowevent.primitiveHandlerPrevented.
0.3.0
Minor Changes
- ShellNew primitive: a collapsible, resizable sidebar with hover-peek.
- NavNew primitive: a nav tree with roving focus, typeahead and a guide ladder.
- TabsNew primitive: closable tabs whose panel renders in the layout or anchored to its tab.
- ComposerFix a closing
Composer.Panelstaying mounted when there was nothing to animate. - Fix anchored surfaces animating in from before they were placed, and add
--anchor-available-width.
0.2.1
Patch Changes
- ThreadFix visibly scrolling to the bottom while the container animates open.
- ThreadFix losing a few pixels of scroll position when the composer changes height.
0.2.0
Minor Changes
- StepsReasoningFix the panel clipping content that grows after it opens.
- StepsReasoningBreakingThe panel height variable
--collapsible-panel-heightis now--panel-height. - ThreadBreaking
Thread.Rootno longer takesdockSelector. Put the composer inThread.Composerand it is measured automatically.
Patch Changes
- ComposerFix
Composer.Textareagaining phantom newlines during rapid editing. - Fix the npm registry listing
exportspaths the package doesn't ship. Installs were unaffected. - Point
homepageand the README links at https://ui.intentface.com.
0.1.2
Patch Changes
- Fix the package failing to load during server-side rendering.
0.1.1
Patch Changes
- Fix a regex in
parseChipSegmentsthat could hang the browser on long messages. - ComposerFix a regex that could freeze the editor on large pasted text.
0.1.0
Minor Changes
- Initial release: headless chat primitives for React.
Composer,Thread,Message,Steps,Reasoning,Chip,AttachmentsandAskUser, plus the message types and utilities.