Repository navigation
Releases
v0.1.5
This bumps Cipher to 0.1.5 and points the README install line and registry URL at v0.1.5. This body is the release notes.
v0.1.5 ships #31 and #32. Everything in it is additive. With no new props set, existing call sites behave as they do on v0.1.4.
Behavior changes
- SortableList moved onto the shared sortable model (#31). Its keys, announcements and focus handling are unchanged. One fix: pressing a grip without dragging no longer leaves the item held.
New
SortableGrid(#31): items in responsive columns (minItemWidth) that a person puts in order. Each item places its grip fromrenderItem'shandle, for example in a Card'saction.- A pointer drag moves the item into the slot under the pointer.
- From the keyboard, Left and Right move one place, and Up and Down move one row. Space or Enter picks up and drops, Escape cancels, and Alt with an arrow moves one step.
- A held card takes the pop shadow, and
isItemDisabledlocks an item.
- DataTable
reorder(#31):{ onReorder, isRowDisabled? }puts a grip at the start of the first column. A held row takes the selected surface, and the drop edge fromdata-drop-targetshows where it will land, by pointer or Up and Down.onReorderruns once, on drop. It works on flatrowsonly; leavesortunset while it's on. SortableHandleandSortableAnnouncer(#31): exported fromsortable-listfor custom sortable surfaces.- ErrorState
homeLabelandhomeLink(#32): the home link's label, and a CipherLink target that goes through the app's router. The home link is crash's secondary action and the default primary action on not-found and forbidden. - Glyphs (#32):
award,scan-line,scan-search,radar,zap,vault,file-keyandusers.layout-gridandserverare new names for the existingappsandmachineshapes.
v0.1.4
This bumps Cipher to 0.1.4 and points the README install line and registry URL at v0.1.4. This body is the release notes.
v0.1.4 ships #5, #14, #15, #16, #17 and #18.
Breaking or behavior changes
These apply to both consumers, the Infisical v4 app and license-server-go, unless a line says otherwise.
- Icon props take
IconSource(#14). Every prop that tookIconNamenow takes a glyph name or a Lucide component. Names still work as before. Code that types its own values asIconNamebefore passing them in still compiles, but it can switch toIconSourceto pass components. - MultiSelect
descriptionmoves under the label (#14). The trailing slot is nowmeta. Callers that useddescriptionfor short values such as counts should move them tometa. The app doesn't use MultiSelect. license-server-go should check its call sites. - Number inputs lose the browser spin buttons (#14). The arrow keys still step the value.
- MultiStep
validateno longer accepts a string (#5). It returnsboolean | void | { fields?, message? }.fieldsputs each message on the<Field name>with that key, and anything thrown fromvalidateoronCompletebecomes atoast.error. Callers that returned a string fail typecheck and need to move tofieldsormessage. - Sheet and dialog steps slide by direction (#5). They no longer morph height. Focus goes to the picked option, else the first field. The MultiStep viewport and Accordion content now pad by the focus clearance and give it back as negative margin, so focus rings at their edges are no longer clipped.
- Sheet and Dialog open on the first form control (#17).
FieldHelpand anything markeddata-skip-autofocusare skipped. - ActivityLog shows the actor first in each row (#17). license-server-go#102 puts the actor in its summary text, so it should drop it there.
totalis now optional. - An untitled Alert gets its tone icon and actions (#17), and the PageHeader description renders a div.
- List counts rows through context (#15). Rows inside wrapper components, fragments or sections now count toward select-all, eligibility and the empty state.
- DataTable with pinned actions shrinks the primary column before scrolling sideways (#15). This applies when that column has no width and no wrap set.
- FilterBar
onChangeonly receives filters that have values (#16). A new filter stays in FilterBar's own state until its picker closes, so URL-backed filters no longer drop a new chip. - DateRangePicker commits on Apply only with two months or presets (#16). Then day picks and presets fill a draft that Apply commits and Cancel or Escape discard. A single month without presets still commits each pick immediately. Pass
commit="immediate"orcommit="apply"to choose explicitly.
New
- MultiStep: a step can take
render: ({ next }) => ...to advance on pick. Steps also takedisabledReason, which blocks Continue.Fieldtakesname, andFieldErrorsis exported for forms outside MultiStep (#5, #17). - ErrorState:
actionLabelwithactionLinkoronAction(#14). - Combobox: option
groupanddescription, pluscreateLabel(also on MultiSelect) (#14, #16). - Glyphs:
- DataTable:
column.wrap,column.footer(a summary row) andcolumn.secondary(a muted second line).isRowMuted.rowPropswithdata-drop-targetfor drop indicators.refreshing, also on List.CellLink(#15).
- DatePicker: a single-date picker with a presets rail (#16).
- FilterBar: search-only mode, with
searchValue,onSearchChange,searchLabelandsearchPlaceholder(#16). - Select
icon, FieldSetlegend,description,helpandactions, andhelpon a group Field (#16). - ActivityLog:
hasMore,emptyand per-entrybadge(#17). - Small props: StatusText
size, ChartContainerheightandaspect, ButtonloadingLabel, Badgeicon, and Text and SmallTextpreWrap(#17). - Card:
badgeson the title line, andselected, which uses the choice look.CardChoicemakes a whole card one radio or checkbox with a visible mark (#18). - StatCard: a stacked metric card with label, value, icon, tone, delta and trend, note, link, plus loading and error states (#18).
Not in this release
The sortable grid and sortable DataTable rows that license-server-go asked for (INF-110) aren't built yet. They're planned for v0.1.5.
v0.1.3
Bumps Cipher to 0.1.3. The README now installs #v0.1.3, pins the registry example to v0.1.3, and points to the releases page for the latest tag. This body is the release notes.
Breaking or behavior changes
These change what existing call sites render. Check them in the v4 app and in license-server-go when you bump.
- DataList borders (#24). Lines now sit only between pairs (
.dataPair + .dataPair), so a DataList no longer ends with a line under its last item. In compact density, when the list opens with a half-width pair, the first visual row has no top edge. Default spacing is unchanged. Any app CSS that hid or replaced the trailing line can go. - DataTable grouped rows (#24, #28).
- Depth. Rows under
groupsnow start at depth 0, so onlygetRowChildrenrows indent. Grouped tables that looked indented (such as the app's Approval Policies) lose that indent. - Shade. Group header rows now use
--cipher-paperinstead of the header's--cipher-tint, so they stand apart from the header row. - Checkbox. In a
selectablegrouped DataTable, each group row now draws a tri-state checkbox. It selects every selectable row in the group, children included, and it stays in sync with the header select-all. Call sites get it without any change; check that the selection handlers expect whole-group selections.
- Depth. Rows under
- Halftone (#27).
- Hover effect. Hovering a Card no longer zooms the pattern into larger cells. It grows outward from the anchor at the same cell size, over about a second.
- Hover strength.
halftone-peak-hoverrises to 90% in Light and Dark (from 60% and 30%), so every Halftone in a hovered Card reads much stronger. - New props.
bounds="header",size,reveal="hover"andambientare opt-in, and a Halftone with none of them set keeps its resting look.
- Item (#25). Below the 44rem container breakpoint, badges stay beside the title and only
metamoves to the end of the title row. Actions with no visible text (an icon button, an icon group or a RowActions menu) now stay inline at every width. - Card hint (#25). When a framed Card title is a fragment with a Badge, the dotted hint underline now covers only the text before the first Badge.
- Boot theme (#25).
readBootThemefollowsprefers-color-schemewhen no preference is stored. It used to fall back to Dark.storageKeysandkeysalso accept a single key. - Calendar (#13). Range ends and a single selected day use the
selectfill with the selected border instead of solid ink. Days between the ends sit on a quiet band, and today is a dot instead of a fill.
New
- SortableList (#12). Reorderable rows with a grip handle, keyboard pick up, move and drop, a live region, and
onReorderonce per committed move. It adds agripglyph. - DateRangePicker and FilterBar (#13).
DateRangePickeropens Calendar in range mode with presets. FilterBar gets a"date-range"field type. - Field widths (#26).
width="xs" | "sm" | "md"on Input (boxed and plain), Select, SelectTrigger and Combobox, backed by new tokens--cipher-size-field-xs,-smand-md(96, 176 and 256px). A set width doesn't shrink. With no width, fields fill the row as before. - Layout (#26).
RadioGroup columns={2 | 3 | 4}, and<InlineGrow>, an Inline child that takes the leftover width. - TableGroupRow (#28). A group header row for a hand-built Table, with
label,meta,actions, acheckboxslot andcolSpan.DataTableGrouptakes an optionalnamefor its checkbox label. - CSS lint (#24).
npm run checknow flags aborder-bottomon*Row,*Pairor*Itemselectors that never reset it for the last row.
Not in this release
These are still open and wait for a later release: #5 (sheet steps, advance on pick, field errors, unclipped focus rings), #14 (icon components, ErrorState action, Card description node, Combobox groups, no number spinners), #15 (DataTable wrap, refreshing, summary row and more), #16 (DatePicker, apply-mode DateRangePicker, search-only FilterBar and more), #17 (first-control focus in Sheet and Dialog, untitled Alert, ActivityLog and more) and #18 (Card badges and selected state, CardChoice, StatCard).
v0.1.2
Breaking changes
Version-free naming (#10). No back-compat aliases are kept, so every consumer (the Infisical app and license-server-go) has to update in this release.
V4Scopeis nowCipherScope, and the.v4scope class is now.cipher.--v4-*custom properties are now--cipher-*, including the hue tokens.data-v4-*attributes are nowdata-cipher-*, and.v4-switcher-*classes are now.cipher-switcher-*.- The source stylesheet
src/v4.cssis nowsrc/base.css. The built./styles.cssexport (dist/cipher.css) doesn't change. Registry installs now land insrc/components/cipher/. - These hooks and helpers lose their
v4prefix:usePortalContainer,useCollisionBoundary,useToastLayer,useScheme,useThemereadBootTheme,themes,defaultTheme,legacyThemes,toTheme,themeScheme,themeChain,themedValue,themeStorage- the
SchemeandThemeDefinitiontypes
V4_TOASTER_IDis nowTOASTER_ID, with the value"cipher".useV4ActionBarReserveis nowuseActionBarReport.top-baralready exports a differentuseActionBarReserve.v4LiveOrgPathis removed. It describes an app route, so it now lives in the app.readBootThemeandBootLoadertake their storage keys andallowPreviewfrom the host (keysandstorageKeys). The defaults arecipher-scheme,cipher-themeandcipher-theme-override. Pass your existing keys to keep users' saved themes.
Framed Cards take no description (#19). On variant="framed", description is now typed never. Plain Cards keep it. When a framed table needs an explanation, use the new hint.
Documentation link (#20). DocumentationLinkBadge (ui/documentation-link-badge) is replaced by DocumentationLink (ui/documentation-link):
- It's an icon-only link with no text, background or border, and
subjectis required. - The
variantprop is removed. - The
data-slotand the registry item are renamed todocumentation-link. - PageHeader's badges container now has
data-slot="page-header-badges".
Added and improved
- Halftone, hue scopes and grain (#7). Adds
ui/halftoneand Card'sbackdropslot. Hue scopes come fromlib/hue:--cipher-huewithdata-hue="subtle" | "pop", which drives--cipher-hue-icon,-tint,-softand-fill.<AppShell grain>paints an opt-in band grain. - Bare icon toggles (#9). An icon-only Button with
selectedoraria-pressedrenders bare, and its filled state takes the product hue. - Polish (#11):
- Card links are scoped to the card.
- The pager select is lighter, toasts sit lower, the calendar is bounded, and sheet footers keep their buttons in one row.
- Framed Card
hint(#19). A dotted underline on the title, plus a plain-text Tooltip on hover and keyboard focus. - DocumentationLink sizes (#20). It sizes itself to where it sits:
- 32px glyph in a 32x44 hit area beside a page title, and 20px beside a medium title.
- 12px in Field labels and framed card headers, and 16px everywhere else.
size="sm" | "md" | "lg"overrides it, using the new token--cipher-size-icon-2xl.
- Item rows with actions (#21). A container query at 44rem switches between two layouts:
- Inline: the timestamp hugs the title on its first-line baseline, with 32px before the buttons.
- Stacked: the timestamp sits at the end of the title row, and the buttons get their own row.
- Outline rows get 24px insets and a 2px gap from title to description.
- The new
titleLinesprop clamps the title and shows the full title in a Tooltip.
- Showcase theme switch (#22). It's now one bare sun and moon toggle. This only affects the docs site.