Releases: Cratis/Components
Releases · Cratis/Components
Release list
Release v4.25.0
The toolbar folder can now open as a headed drawer of labeled tiles, and a new @cratis/components/ConfigurationEditor entry point provides the controls for configuring a component.
Added
ToolbarFolderpresentation='drawer': a visible heading, a close button and labeled icon tiles driven by a host-supplieditemscatalogue and/orToolbarButtonchildren. Tile payloads are delivered unchanged on activation and on drag, disabled tiles stay focusable with a reason, and the drawer flips and shifts to stay inside the viewport. The icon-only grid and list presentations are unchanged. (#358)OrderedItemEditor: edits an ordered collection of items with a label, an icon and a destination. It lists locked fixed items separately, enforces per-operation and per-field capabilities, validates entries, and reorders by dragging, with the handle's arrow keys, or with labeled move buttons while keeping focus and announcing the new position. The icon field is the Components icon picker, fed by aniconCatalogand restricted byallowedIcons, withrenderIconFieldas an override. (#358)PropertyControls: text, number, on/off and choice controls described by host descriptors in titled groups, for flow, grid-placement, freeform-placement and responsive settings. (#358)ConfigurationEditorProvider,ConfigurationEditoranduseConfigurationEditor: register a component-specific editor under a host-defined component type, with generic controls as the fallback. (#358)messages.toolbar.closeDraweronCratisComponentsProviderfor the drawer's close button, and styling parts for the drawer and both editors.
Fixed
- The icon picker's provider name on a selected tile now meets the 4.5:1 contrast ratio.
Release v4.24.0
Added
IconPickerin@cratis/components/IconPicker: a controlled icon property control whose closed trigger shows the selected glyph and name and whose popout offers search by name, tag and alias, category groups with Show all, and library filtering over a host-supplied catalog. (#359)- Selections are qualified
library,keyand optionalvariantvalues, so the same icon name in two libraries stays distinct. A selection missing from the catalog is shown by its raw identity with a warning instead of being replaced. (#359) - Read-only, disabled and
allowedrestrictions that never emit an unauthorized change, plus loading, empty, no-results and provider-failure states. (#359) - Lazily drawn previews, a library credit line, a contained sheet on narrow viewports, keyboard navigation with focus return, and stable
data-cratis-partstyling parts with anIconPicker/stylesstylesheet. (#359)
Release v4.23.1
Fixed
- Builds of apps using Components no longer fail with a missing
observeTimelineexport frommotion-dom. When upgrading, remove anyresolutionsor overrides from the workaround that pinmotion-domto 13.2.0 ormotion-utilsto 13.0.0:framer-motion13.5.0 requiresanimateElement, whichmotion-dom13.2.0 does not export. (#390)
Release v4.23.0
Added
MarkdownEditor(@cratis/components/MarkdownEditor): a markdown editor with a formatting toolbar, keyboard shortcuts, a write/preview toggle and file uploads, styled through--cratis-*tokens andptparts (part of Cratis/Direct#1275)- Configurable completion for
MarkdownEditor: give it trigger characters or patterns (for example#) and a callback that returns suggestions. The editor shows the list and inserts the chosen item (part of Cratis/Direct#1275)
Release v4.22.1
Fixed
- The dark theme maps
--color-errorto the lighter red the field outline already uses and--color-error-bgto a deep red, so a field's validation message and Arc's command exception panel reach the WCAG AA 4.5:1 contrast on the dark surfaces instead of about 2.5:1. Every explicitly light root or subtree keeps the original red on a light background, including a light subtree under a root that is dark only because of the system setting. (#388) - The README setup imports the stylesheets from a CSS entry file with
@import, and documents the ambient declarations a TypeScript project needs to import them from TypeScript, so the documented setup type-checks on TypeScript 6 (TS2882). (#387)
Release v4.22.0
Added
Messageacceptslive={false}to render without itsalert/statusrole, so it can be composed inside an existing live region without being announced twice (#385)
Release v4.21.1
The renderer adapters and Conformance now install on Node.js 22, and the migration guide describes how adapter versions pair with @cratis/components.
Fixed
@cratis/components.mui,@cratis/components.primereact,@cratis/components.primereact10and@cratis/components.conformancedeclaredengines.node >=23.0.0, so npm and pnpm withengine-strictrefused to install them on Node.js 22, a maintained LTS release. They now declare>=22.0.0. CI installs each adapter on Node.js 22 withengine-stricton. (#371)MIGRATION.mdsaid the adapters declare a@cratis/components >=4 <5peer range. Each published adapter and Conformance release requires exactly the@cratis/componentsversion it was released with, so install and upgrade them together. (#370)
Release v4.21.0
Toolbars can offer a single Tab stop, chat hosts can add their own content to messages and the sidebar header, and DataTableCore can have its sort, filter and search state controlled by the host.
Added
ToolbarFocusMode.SingleTabStopforToolbarandActionMenubarimplements the WAI-ARIA toolbar pattern. The toolbar's own tools share one Tab stop, which starts at the first available tool, moves with the arrow keys and returns to the last focused tool. When that tool is disabled, hidden or removed, the Tab stop moves to the next available tool. Controls you add yourself, widgets such as inputs, tools rendered outside the toolbar's markup (for example through a portal), and tools with an explicit tab index keep their own Tab stop.Arrowsremains the default until the next major release. (#353)ChatConversation.renderMessageExtrarenders your content under a message body, for example reactions or a notice that a reply failed.ChatSidebarforwards it. (#194)ChatSidebar.renderHeaderActionsrenders your content between the sidebar title and its close button, and receives the open topic. Neither slot adds markup when you leave it unset. (#194)DataTableCoreacceptssortwithonSortChange,filters(reported through the existingonFilter), andglobalFilterwithonGlobalFilterChange, so the host can own that state. When a value is left undefined, the table keeps managing it as before. SetrowProcessing={DataTableRowProcessing.None}to render rows exactly as given when the source has already filtered and sorted them.DataTableSort,DataTableSortDirectionandDataTableRowProcessingare exported from@cratis/components/DataTables. (#178)
Release v4.20.0
Chat topic lists can offer per-topic actions, and applications no longer need to install tsyringe themselves.
Added
ChatTopicListandChatSidebaraccepttopicActions: labeled buttons next to each topic, such as Rename, Pin or Archive, with an optionalisAvailablecheck per topic. Each button's accessible name includes its topic, the buttons can be reached with the keyboard, and activating one does not open the topic. When an action hides itself or removes its topic, focus moves to that topic, to the topic that took its place, or to New topic, unless your handler already moved focus.ChatSidebar's existingactionsprop still means message actions. Topics without actions render as before. TheChatTopicActiontype is exported. (#206)
Changed
tsyringeis now an optional peer. Components never imports it, and Arc React installs it as its own dependency, so you no longer need to install it yourself.reflect-metadatastays a required peer: keep installing it and importing it at your entry point. The package check now fails if a published file imports either package. (#248)
Release v4.19.2
Published JavaScript and declaration files now ship working source maps.
Fixed
- Source maps survive the build step that rewrites relative ESM import specifiers. Before, every rewritten
.jsand.d.tsfile lost its map. JavaScript maps now embed their original sources, so stack traces and debuggers show the component source. Declaration maps keep go-to-definition working wherever the sources are available, such as linked or monorepo checkouts. The package grows from about 723 KB to about 1.0 MB, all of it source maps; production bundlers ignore them. (#213) - A packed-package check verifies the maps of every file the build rewrote: the exact source positions after each edit, that no stale map is left, and TypeScript's go-to-definition. (#213)
Closes #213.