Skip to content

Release v4.0.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 21:26
6573b13

Summary

Components 4 replaces the PrimeReact-backed Components 3 foundation with Cratis-owned React APIs, semantic markup, typed parts, state attributes, and design tokens while preserving the established component catalog.

React Aria supplies selected interaction primitives internally; it is not part of the public prop, DOM, styling, provider, or type contract. Native semantic HTML and Components-owned implementations remain the default where they are simpler.

This is a major release. Applications should follow the Components 3 to 4 migration guide.

Added

  • Add Components-owned typed parts, stable data-cratis-part values, canonical state attributes, provider messages, strict public declarations, and standalone Common controls. (#173)
  • Add semantic Button variant, tone, and shape props and value-first ChangeHandler<T> callbacks.
  • Add the stable nine-slot stable-presentation/v1 renderer profile for Button, IconButton, TextInput, TextArea, Checkbox, Radio, Switch, ProgressBar, and Surface.
  • Add @cratis/components.mui, @cratis/components.primereact, and @cratis/components.primereact10 as optional presentation adapters. (#191, #192)
  • Add @cratis/components.conformance, a development-only verification harness for renderer adapter authors covering behavior, parts, state, SSR, and accessibility. Ordinary applications do not install it.
  • Add @cratis/components.migrator, an optional development CLI for upgrading Components 3 source imports, Button appearance props, and value-first callbacks. It uses syntax-aware codemods internally and is not an application runtime dependency.
  • Add a Components ESLint configuration that prevents deprecated root imports and protects renderer-independent boundaries.
  • Add a generated Components 3/4 compatibility manifest used by migration tooling and release validation.
  • Add the explicit @cratis/components/Chat subpath with sidebar, topic, conversation, message-body, action, mention, emoji, and observable-query surfaces.
  • Add Canvas region auto-membership, optional Arc messenger notifications, Canvas controls, and Canvas minimap support.
  • Add ItemAddedToRegion, ItemRemovedFromRegion, NoteTextChanged, and ChatMessageAdded messaging contracts.
  • Add renderer coexistence, primitive adaptation, custom composition, licensing, migration, capability-profile, Chat, and Canvas messaging documentation.

Changed

  • Make the package root setup-only; import components from explicit @cratis/components/* subpaths. (#162)
  • Replace PrimeReact provider/theme/pass-through contracts with Components-owned configuration, tokens, typed parts, and semantic state. (#163, #170)
  • Keep React Aria as an internal dependency behind Components-owned public contracts.
  • Move pixi.js to an optional peer used only by Canvas and PivotViewer.
  • Rebuild ChatSidebar without PrimeReact dependencies or public PrimeReact contracts.
  • Move the generic Pixi-free Chat Kit to @cratis/components/Chat while retaining Canvas ChatBubble compatibility exports.
  • Define loaded-page table search, filtering, and sorting separately from server-side complete-result behavior.
  • Use one shared repository release version for Core, ESLint, Migrator, Conformance, MUI, PrimeReact 11, and PrimeReact 10 packages.
  • Keep renderer ABI major 1 separate from the repository package version.
  • Preserve zero-configuration built-in rendering while allowing one optional presentation adapter through CratisComponentsProvider.
  • Keep dialogs, dropdowns, date pickers, tooltips, paginator behavior, focus management, overlays, and complex Components composites owned by Core.
  • Commit a reproducible dependency lockfile and use immutable installation throughout CI. (#130)

Fixed

  • Keep built-in AutoCommandForm field providers available after aggressive production tree shaking.
  • Handle malformed and non-JSON-representable SchemaEditor input without crashing, and recover when valid input returns.
  • Keep nested SchemaEditor required-property state consistent across rename, deletion, and type changes.
  • Restrict SchemaEditor names and DataTable/Pivot property paths to explicit own data instead of inherited or reserved prototype keys.
  • Keep id-less Canvas items available to minimap and fit-to-content without leaking generated React IDs into region membership messages.
  • Preserve Canvas registry metadata transitions and provider-fed asynchronous Chat mention candidates.
  • Give Chat topic lists semantic list/button markup and readable light/dark token contrast.
  • Make DatePicker Today respect date and date-time bounds and preserve provider-owned accessible labels.
  • Prevent DataTable date filters from mutating caller-owned dates and preserve loaded-page row indices after filtering and sorting.
  • Make query-backed DataTable containers scroll correctly and keep sticky headers attached to the actual scrolling ancestor. (#195, #196)
  • Let Dialog titles wrap instead of overflowing. (#198)
  • Keep FilterPanel clear actions outside disclosure buttons and clamp portaled panels within the viewport. (#199, #200)
  • Prevent PivotViewer filter, grouping, search, worker-correlation, stale-result, and selection-identity regressions.
  • Localize Toolbar's default accessible name through CratisComponentsProvider. (#174)
  • Document the deprecated clientFiltering prop as a no-op; complete-result behavior belongs to explicit server query arguments. (#159)
  • Render string-valued Tag icons as consumer-owned CSS classes instead of literal text. (#220)
  • Preserve packed TSDoc and @deprecated guidance without shipping declaration-only prose in runtime JavaScript.
  • Reject inherited and reserved renderer metadata keys consistently across Core, Conformance, and adapter discovery.

Removed

  • Remove PrimeReact, PrimeIcons, PrimeUI, and Prime theme dependencies and peers from @cratis/components.
  • Remove renderer-specific styled, compatibility, and primereact-v10-palette exports.
  • Remove root component-family namespace exports in favor of explicit subpaths.
  • Remove accidental implementation exports that were not intended public contracts.
  • Remove unused renderer-specific prop-extension declarations that no component implemented.