diff --git a/docs-ui/src/utils/changelog.ts b/docs-ui/src/utils/changelog.ts index a99c0e8335..21ffa93651 100644 --- a/docs-ui/src/utils/changelog.ts +++ b/docs-ui/src/utils/changelog.ts @@ -1,4 +1,6 @@ export * from './types'; +import { changelog_0_13_0 } from './changelogs/v0.13.0'; +import { changelog_0_12_0 } from './changelogs/v0.12.0'; import { changelog_0_11_0 } from './changelogs/v0.11.0'; import { changelog_0_10_0 } from './changelogs/v0.10.0'; import { changelog_0_9_1 } from './changelogs/v0.9.1'; @@ -18,6 +20,8 @@ import { changelog_0_2_0 } from './changelogs/v0.2.0'; import { changelog_0_1_0 } from './changelogs/v0.1.0'; export const changelog = [ + ...changelog_0_13_0, + ...changelog_0_12_0, ...changelog_0_11_0, ...changelog_0_10_0, ...changelog_0_9_1, diff --git a/docs-ui/src/utils/changelogs/v0.12.0.ts b/docs-ui/src/utils/changelogs/v0.12.0.ts new file mode 100644 index 0000000000..f83920c36f --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.12.0.ts @@ -0,0 +1,526 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_12_0: ChangelogProps[] = [ + { + components: ['alert'], + version: '0.12.0', + prs: ['32711'], + description: `**BREAKING**: Alert no longer accepts a \`surface\` prop + + The Alert component's background is now driven entirely by its \`status\` prop. The \`surface\` prop has been removed. + + \`\`\`diff + - + + + \`\`\``, + breaking: true, + commitSha: '46a9adc', + }, + { + components: [], + version: '0.12.0', + prs: ['32723'], + description: `**BREAKING**: Removed gray scale tokens and renamed background surface tokens to neutral tokens + + The \`--bui-gray-1\` through \`--bui-gray-8\` tokens have been removed. The \`--bui-bg-surface-*\` and \`--bui-bg-neutral-on-surface-*\` tokens have been replaced by a unified \`--bui-bg-neutral-*\` scale.`, + migration: `Replace surface tokens directly: + +\`\`\`diff +- background: var(--bui-bg-surface-0); ++ background: var(--bui-bg-neutral-0); +\`\`\` + +Replace on-surface tokens shifted by +1: + +\`\`\`diff +- background: var(--bui-bg-neutral-on-surface-0); ++ background: var(--bui-bg-neutral-1); +\`\`\` + +Replace gray tokens 1-4 with neutral equivalents (\`--bui-gray-5\` through \`--bui-gray-8\` have no direct replacement): + +\`\`\`diff +- background: var(--bui-gray-1); ++ background: var(--bui-bg-neutral-1); +\`\`\``, + breaking: true, + commitSha: 'b63c25b', + }, + { + components: [ + 'box', + 'button', + 'button-icon', + 'button-link', + 'toggle-button', + 'card', + 'flex', + 'grid', + ], + version: '0.12.0', + prs: ['32711'], + description: `**BREAKING**: Replaced \`Surface\` / \`onSurface\` system with new provider/consumer background system + + The old \`Surface\` type (\`'0'\`–\`'3'\`, \`'auto'\`) and its associated props (\`surface\`, \`onSurface\`) have been replaced by a provider/consumer \`bg\` architecture. + + **Types:** + + - \`ContainerBg\` — \`'neutral-1'\` | \`'neutral-2'\` | \`'neutral-3'\` | \`'danger'\` | \`'warning'\` | \`'success'\` + - \`ProviderBg\` — \`ContainerBg | 'neutral-auto'\` + + Consumer components (e.g. Button) inherit the parent's \`bg\` via \`data-on-bg\`, and CSS handles the visual step-up. See "Neutral level capping" below for details on how levels are bounded. + + **Hooks:** + + - \`useBgProvider(bg?)\` — for provider components. Returns \`{ bg: undefined }\` when no \`bg\` is given (transparent). Supports \`'neutral-auto'\` to auto-increment from the parent context. + - \`useBgConsumer()\` — for consumer components. Returns the parent container's \`bg\` unchanged. + + **Component roles:** + + - **Provider-only** (Box, Flex, Grid): set \`data-bg\`, wrap children in \`BgProvider\`. **Transparent by default** — they do _not_ auto-increment; pass \`bg="neutral-auto"\` explicitly if you want automatic neutral stepping. + - **Consumer-only** (Button, ButtonIcon, ButtonLink): set \`data-on-bg\`, inherit the parent container's \`bg\` unchanged. + - **Provider + Consumer** (Card): sets both \`data-bg\` and \`data-on-bg\`, wraps children. Card passes \`bg="neutral-auto"\` to its inner Box, so it auto-increments from the parent context. + + **Neutral level capping:** + + Provider components cap at \`neutral-3\`. There is no \`neutral-4\` prop value. The \`neutral-4\` level exists only in consumer component CSS — for example, a Button sitting on a \`neutral-3\` surface uses \`neutral-4\` tokens internally via \`data-on-bg\`.`, + migration: `Rename the \`surface\` prop to \`bg\` on provider components and update values: + +\`\`\`diff +- ++ + +- ++ + +- ++ + +- ++ +\`\`\` + +Remove \`onSurface\` from consumer components — they now always inherit from the parent container: + +\`\`\`diff +- ++ +\`\`\``, + breaking: true, + commitSha: '058ffd9', + }, + { + components: ['link'], + version: '0.12.0', + prs: ['32608'], + description: `**BREAKING**: Removed link and tint color tokens, added new status foreground tokens, and improved Link component styling + + The following color tokens have been removed: + + - \`--bui-fg-link\` (and all related tokens: \`-hover\`, \`-pressed\`, \`-disabled\`) + - \`--bui-fg-tint\` (and all related tokens: \`-hover\`, \`-pressed\`, \`-disabled\`) + - \`--bui-bg-tint\` (and all related tokens: \`-hover\`, \`-pressed\`, \`-disabled\`) + - \`--bui-border-tint\` (and all related tokens) + + **New Status Tokens:** + + Added dedicated tokens for status colors that distinguish between usage on status backgrounds vs. standalone usage: + + - \`--bui-fg-danger-on-bg\` / \`--bui-fg-danger\` + - \`--bui-fg-warning-on-bg\` / \`--bui-fg-warning\` + - \`--bui-fg-success-on-bg\` / \`--bui-fg-success\` + - \`--bui-fg-info-on-bg\` / \`--bui-fg-info\` + + The \`-on-bg\` variants are designed for text on colored backgrounds, while the base variants are for standalone status indicators with improved visibility and contrast.`, + migration: `For link colors, migrate to one of the following alternatives: + +\`\`\`diff +.custom-link { +- color: var(--bui-fg-link); ++ color: var(--bui-fg-info); /* For informational links */ ++ /* or */ ++ color: var(--bui-fg-primary); /* For standard text links */ +} +\`\`\` + +For tint colors (backgrounds, foregrounds, borders), migrate to appropriate status or neutral colors: + +\`\`\`diff +.info-section { +- background: var(--bui-bg-tint); ++ background: var(--bui-bg-info); /* For informational sections */ ++ /* or */ ++ background: var(--bui-bg-neutral-1); /* For neutral emphasis */ +} +\`\`\` + +If you're using status foreground colors on colored backgrounds, update to the new \`-on-bg\` tokens: + +\`\`\`diff +.error-badge { +- color: var(--bui-fg-danger); ++ color: var(--bui-fg-danger-on-bg); + background: var(--bui-bg-danger); +} +\`\`\``, + breaking: true, + commitSha: '110fec0', + }, + { + components: ['full-page'], + version: '0.12.0', + prs: ['32822'], + description: `Added a new \`FullPage\` component that fills the remaining viewport height below the \`PluginHeader\`. + + \`\`\`tsx + + + {/* content fills remaining height */} + + \`\`\``, + + commitSha: '644e303', + }, + { + components: [], + version: '0.12.0', + prs: ['32825'], + description: `Fixed dark theme \`--bui-fg-secondary\` and \`--bui-fg-disabled\` tokens using black-based \`oklch(0% ...)\` instead of white-based \`oklch(100% ...)\`, making secondary and disabled text visible on dark backgrounds.`, + + commitSha: '44877e4', + }, + { + components: ['box'], + version: '0.12.0', + prs: ['32536'], + description: `Fixed Box component to forward HTML attributes to the underlying div element.`, + + commitSha: '350c948', + }, + { + components: [], + version: '0.12.0', + prs: ['32516'], + description: `Use node prefix on native imports`, + + commitSha: '7455dae', + }, + { + components: ['accordion'], + version: '0.12.0', + prs: ['32488'], + description: `Fixed nested Accordion icon state issue where the inner accordion's arrow icon would incorrectly show as expanded when only the outer accordion was expanded. The CSS selector now uses a direct parent selector to ensure the icon only responds to its own accordion's expanded state.`, + + commitSha: 'c8ae765', + }, + { + components: ['popover', 'tooltip'], + version: '0.12.0', + prs: ['32575'], + description: `Fixed CSS Module syntax to comply with Next.js 16 Turbopack validation by flattening nested dark theme selectors.`, + + commitSha: '4d1b7f4', + }, + { + components: ['button'], + version: '0.12.0', + prs: ['32554'], + description: `Added \`destructive\` prop to Button for dangerous actions like delete or remove. Works with all variants (primary, secondary, tertiary).`, + + commitSha: '2c219b9', + }, + { + components: [], + version: '0.12.0', + prs: ['32553'], + description: `Fixed \`useDefinition\` hook adding literal "undefined" class name when no className prop was passed.`, + + commitSha: '5af9e14', + }, + { + components: ['tag'], + version: '0.12.0', + prs: ['32742'], + description: `Allow \`ref\` as a prop on the \`Tag\` component`, + + commitSha: '5c76d13', + }, + { + components: [], + version: '0.12.0', + prs: ['32799'], + description: `Cleaned up \`useDefinition\` \`ownProps\` types to remove never-typed ghost properties from autocomplete.`, + + commitSha: 'ab25658', + }, + { + components: ['table'], + version: '0.12.0', + prs: ['32685'], + description: `Allow data to be passed directly to the \`useTable\` hook using the property \`data\` instead of \`getData()\` for mode \`"complete"\`. + + This simplifies usage as data changes, rather than having to perform a \`useEffect\` when data changes, and then reloading the data. It also happens immediately, so stale data won't remain until a rerender (with an internal async state change), so less flickering.`, + + commitSha: '741a98d', + }, + { + components: ['table'], + version: '0.12.0', + prs: ['32684'], + description: `Fixed changing columns after first render from crashing. It now renders the table with the new column layout as columns change.`, + + commitSha: 'a0fe1b2', + }, + { + components: ['alert'], + version: '0.12.0', + prs: ['32520'], + description: `Added new \`Alert\` component with support for status variants (info, success, warning, danger), icons, loading states, and custom actions. + + Updated status color tokens for improved contrast and consistency across light and dark themes: + + - Added new \`--bui-bg-info\` and \`--bui-fg-info\` tokens for info status + - Updated \`--bui-bg-danger\`, \`--bui-fg-danger\` tokens + - Updated \`--bui-bg-warning\`, \`--bui-fg-warning\` tokens + - Updated \`--bui-bg-success\`, \`--bui-fg-success\` tokens`, + + commitSha: '508bd1a', + }, + { + components: [ + 'tabs', + 'tab', + 'tag-group', + 'tag', + 'menu', + 'menu-item', + 'menu-autocomplete', + ], + version: '0.12.0', + prs: ['32373'], + description: `Fixed client-side navigation for container components by wrapping the container (not individual items) in RouterProvider. Components now conditionally provide routing context only when children have internal links, removing the Router context requirement when not needed. This also removes the need to wrap these components in MemoryRouter during tests when they are not using the \`href\` prop. + + Additionally, when multiple tabs match the current URL via prefix matching, the tab with the most specific path (highest segment count) is now selected. For example, with URL \`/catalog/users/john\`, a tab with path \`/catalog/users\` is now selected over a tab with path \`/catalog\`.`, + + commitSha: 'da30862', + }, + { + components: [], + version: '0.12.0', + prs: ['32540'], + description: `Fixed an infinite render loop in Tabs when navigating to a URL that doesn't match any tab \`href\`.`, + + commitSha: '092c453', + }, + { + components: [], + version: '0.12.0', + prs: ['32643'], + description: `export PasswordField component`, + + commitSha: 'becf851', + }, + { + components: [], + version: '0.12.0', + prs: ['32843'], + description: `Migrated Accordion components to use \`useDefinition\` instead of \`useStyles\`, and added automatic background adaptation based on parent container context.`, + + commitSha: 'becee36', + }, + { + components: ['link', 'button-link', 'row'], + version: '0.12.0', + prs: ['32373'], + description: `Fixed components to not require a Router context when rendering without internal links.`, + + commitSha: '5320aa8', + }, + { + components: [], + version: '0.12.0', + prs: ['31818'], + description: `Updated \`react-router-dom\` peer dependency to \`^6.30.2\` and explicitly disabled v7 future flags to suppress deprecation warnings.`, + + commitSha: 'a7e0d50', + }, + { + components: ['table'], + version: '0.12.0', + prs: ['32686'], + description: `The Table component now wraps the react-aria-components \`Table\` with a \`ResizableTableContainer\` only if any column has a width property set. This means that column widths can adapt to the content otherwise (if no width is explicitly set).`, + + commitSha: '8c39412', + }, + { + components: [], + version: '0.12.0', + prs: ['32537'], + description: `Bump react-aria-components to v1.14.0`, + + commitSha: 'cb090b4', + }, + { + components: [], + version: '0.12.0', + prs: ['32428'], + description: `Fixed React 17 compatibility by using \`useId\` from \`react-aria\` instead of the built-in React hook which is only available in React 18+.`, + + commitSha: 'c429101', + }, + { + components: ['switch'], + version: '0.12.0', + prs: ['32551'], + description: `Fixed Switch component disabled state styling to show \`not-allowed\` cursor and disabled text color.`, + + commitSha: '74c5a76', + }, + { + components: [], + version: '0.12.0', + prs: ['32761'], + description: `Migrated to use the standard \`backstage-cli package build\` for CSS bundling instead of a custom build script.`, + + commitSha: '20131c5', + }, +]; diff --git a/docs-ui/src/utils/changelogs/v0.13.0.ts b/docs-ui/src/utils/changelogs/v0.13.0.ts new file mode 100644 index 0000000000..8b4f93afda --- /dev/null +++ b/docs-ui/src/utils/changelogs/v0.13.0.ts @@ -0,0 +1,527 @@ +import type { ChangelogProps } from '../types'; + +export const changelog_0_13_0: ChangelogProps[] = [ + { + components: [ + 'box', + 'flex', + 'grid', + 'card', + 'accordion', + 'popover', + 'tooltip', + 'dialog', + 'menu', + ], + version: '0.13.0', + prs: ['33002'], + description: `**BREAKING**: Simplified the neutral background prop API for container components. The explicit \`neutral-1\`, \`neutral-2\`, \`neutral-3\`, and \`neutral-auto\` values have been removed from \`ProviderBg\`. They are replaced by a single \`'neutral'\` value that always auto-increments from the parent context, making it impossible to skip or pin to an explicit neutral level.`, + migration: `Replace any explicit \`bg="neutral-1"\`, \`bg="neutral-2"\`, \`bg="neutral-3"\`, or \`bg="neutral-auto"\` props with \`bg="neutral"\`. To achieve a specific neutral level in stories or tests, use nested containers — each additional \`bg="neutral"\` wrapper increments by one level. + +\`\`\`tsx +// Before +... + +// After + + ... + +\`\`\``, + breaking: true, + commitSha: '768f09d', + }, + { + components: ['popover', 'tooltip', 'menu', 'dialog'], + version: '0.13.0', + prs: ['32979'], + description: `**BREAKING**: Removed \`--bui-bg-popover\` CSS token. Popover, Tooltip, Menu, and Dialog now use \`--bui-bg-app\` for their outer shell and \`Box bg="neutral-1"\` for content areas, providing better theme consistency and eliminating a redundant token.`, + migration: `Replace any usage of \`--bui-bg-popover\` with \`--bui-bg-neutral-1\` (for content surfaces) or \`--bui-bg-app\` (for outer shells): + +\`\`\`diff +- background: var(--bui-bg-popover); ++ background: var(--bui-bg-neutral-1); +\`\`\``, + breaking: true, + commitSha: 'b42fcdc', + }, + { + components: ['searchfield'], + version: '0.13.0', + prs: ['33050'], + description: `**BREAKING**: Data attributes rendered by components are now always lowercase. This affects CSS selectors targeting camelCase data attributes.`, + migration: `Update any custom CSS selectors that target camelCase data attributes to use lowercase instead: + +\`\`\`diff +- [data-startCollapsed='true'] { ... } ++ [data-startcollapsed='true'] { ... } +\`\`\``, + breaking: true, + commitSha: 'bd3a76e', + }, + { + components: [], + version: '0.13.0', + prs: ['33050'], + description: `**BREAKING**: Removed deprecated types \`ComponentDefinition\`, \`ClassNamesMap\`, \`DataAttributeValues\`, and \`DataAttributesMap\` from the public API. These were internal styling infrastructure types that have been replaced by the \`defineComponent\` system.`, + migration: `Remove any direct usage of these types. Component definitions now use \`defineComponent()\` and their shapes are not part of the public API contract. + +\`\`\`diff +- import type { ComponentDefinition, ClassNamesMap } from '@backstage/ui'; +\`\`\` + +If you were reading \`definition.dataAttributes\`, use \`definition.propDefs\` instead — props with \`dataAttribute: true\` in \`propDefs\` are the equivalent.`, + breaking: true, + commitSha: '95702ab', + }, + { + components: ['link', 'button-link', 'tabs', 'menu', 'tag-group', 'table'], + version: '0.13.0', + prs: ['33267'], + description: `**BREAKING**: Centralized client-side routing in \`BUIProvider\`. Components like Link, ButtonLink, Tabs, Menu, TagGroup, and Table now require a \`BUIProvider\` rendered inside a React Router context for client-side navigation to work.`, + migration: `This change requires updating \`@backstage/plugin-app\` and \`@backstage/core-app-api\` alongside \`@backstage/ui\`. If you only upgrade \`@backstage/ui\`, BUI components will fall back to full-page navigation. + +If you cannot upgrade all packages together, or if you have a custom app shell, add a \`BUIProvider\` inside your Router: + +\`\`\`diff ++ import { BUIProvider } from '@backstage/ui'; + + ++ + ++ + +\`\`\``, + breaking: true, + commitSha: '42f8c9b', + }, + { + components: ['header'], + version: '0.13.0', + prs: ['33354'], + description: `**BREAKING**: Renamed internal CSS classes to match the \`Header\` component name. + + **Migration:** If you are targeting these classes directly in your styles, update the following: + + - \`bui-HeaderPage\` → \`bui-Header\` + - \`bui-HeaderPageContent\` → \`bui-HeaderContent\` + - \`bui-HeaderPageBreadcrumbs\` → \`bui-HeaderBreadcrumbs\` + - \`bui-HeaderPageTabsWrapper\` → \`bui-HeaderTabsWrapper\` + - \`bui-HeaderPageControls\` → \`bui-HeaderControls\``, + breaking: true, + commitSha: '17d6398', + }, + { + components: ['checkbox'], + version: '0.13.0', + prs: ['33323'], + description: `Removed redundant \`selected\` and \`indeterminate\` props from the \`Checkbox\` component. Use the \`isSelected\` and \`isIndeterminate\` props instead, which are the standard React Aria props and already handle both the checkbox behaviour and the corresponding CSS data attributes.`, + migration: `Replace any usage of the \`selected\` and \`indeterminate\` props on \`Checkbox\` with the \`isSelected\` and \`isIndeterminate\` props. Note that the checked state and related CSS data attributes (such as \`data-selected\` and \`data-indeterminate\`) are now driven by React Aria, so any custom logic that previously inspected or set these via the old props should instead rely on the React Aria-managed state and attributes exposed through the new props.`, + breaking: true, + commitSha: '9d5f3ba', + }, + { + components: ['list', 'list-row'], + version: '0.13.0', + prs: ['33358'], + description: `Added \`List\` and \`ListRow\` components. These provide a standalone, accessible list of interactive rows built on top of React Aria's \`GridList\` and \`GridListItem\` primitives. Rows support icons, descriptions, actions, menus, and single or multiple selection modes.`, + + commitSha: '04d9d8d', + }, + { + components: ['accordion'], + version: '0.13.0', + prs: ['32935'], + description: `Made Accordion a \`bg\` provider so nested components like Button auto-increment their background level. Updated \`useDefinition\` to resolve \`bg\` \`propDef\` defaults for provider components.`, + + commitSha: 'a1f4bee', + }, + { + components: ['card'], + version: '0.13.0', + prs: ['33116'], + description: `Added interactive support to the \`Card\` component. Pass \`onPress\` to make the entire card surface pressable, or \`href\` to make it navigate to a URL. A transparent overlay handles the interaction while nested buttons and links remain independently clickable.`, + + commitSha: 'db92751', + }, + { + components: ['link', 'button-link', 'tab', 'menu-item', 'tag', 'row'], + version: '0.13.0', + prs: ['33150'], + description: `Added analytics capabilities to the component library. Components with navigation behavior (Link, ButtonLink, Tab, MenuItem, Tag, Row) now fire analytics events on click when a \`BUIProvider\` is present. + + New exports: \`BUIProvider\`, \`useAnalytics\`, \`getNodeText\`, and associated types (\`AnalyticsTracker\`, \`UseAnalyticsFn\`, \`BUIProviderProps\`, \`AnalyticsEventAttributes\`). + + Components with analytics support now accept a \`noTrack\` prop to suppress event firing.`, + + commitSha: '12d8afe', + }, + { + components: ['table-root'], + version: '0.13.0', + prs: ['33322'], + description: `Added a \`loading\` prop and \`data-loading\` data attribute to \`TableRoot\`, allowing consumers to distinguish between stale data and initial loading states. Both \`stale\` and \`loading\` set \`aria-busy\` on the table.`, + + commitSha: 'b838cc9', + }, + { + components: ['table'], + version: '0.13.0', + prs: ['33322'], + description: `Improved the \`Table\` component loading state to show a skeleton UI with visible headers instead of plain "Loading..." text. The table now renders its full structure during loading, with animated skeleton rows in place of data. The loading state includes proper accessibility support with \`aria-busy\` on the table and screen reader announcements.`, + + commitSha: '690786f', + }, + { + components: [], + version: '0.13.0', + prs: ['33078'], + description: `Fixed neutral-1 hover & pressed state in light mode.`, + + commitSha: '58224d3', + }, + { + components: [ + 'avatar', + 'checkbox', + 'container', + 'dialog', + 'field-error', + 'field-label', + 'flex', + 'full-page', + 'grid', + 'header-page', + 'link', + 'menu', + 'password-field', + 'plugin-header', + 'popover', + 'radio-group', + 'searchfield', + 'select', + 'skeleton', + 'switch', + 'table', + 'table-pagination', + 'tabs', + 'tag-group', + 'text', + 'textfield', + 'toggle-button', + 'toggle-button-group', + 'tooltip', + 'visually-hidden', + ], + version: '0.13.0', + prs: ['33050'], + description: `Migrated all components from \`useStyles\` to \`useDefinition\` hook. Exported \`OwnProps\` types for each component, enabling better type composition for consumers.`, + + commitSha: '95702ab', + }, + { + components: ['card'], + version: '0.13.0', + prs: ['33151'], + description: `Fixed interactive cards so that CardBody can scroll when the card has a constrained height. Previously, the overlay element blocked scroll events.`, + + commitSha: '430d5ed', + }, + { + components: ['container'], + version: '0.13.0', + prs: ['32984'], + description: `Removed the \`transition\` on \`Container\` padding to prevent an unwanted animation when the viewport is resized.`, + + commitSha: '4c2c350', + }, + { + components: [], + version: '0.13.0', + prs: ['32542'], + description: `Fixed --bui-fg-success token in light mode to be more accessible.`, + + commitSha: 'e0b7eb0', + }, + { + components: [], + version: '0.13.0', + prs: ['33188'], + description: `Deprecated the \`HeaderPage\` component name in favor of \`Header\`. The old \`HeaderPage\`, \`HeaderPageProps\`, \`HeaderPageOwnProps\`, \`HeaderPageBreadcrumb\`, and \`HeaderPageDefinition\` exports are still available as deprecated aliases.`, + + commitSha: 'ad7c883', + }, + { + components: [], + version: '0.13.0', + prs: ['33379'], + description: `Added documentation for the table cell wrapper requirement to TSDoc comments for \`Cell\`, \`CellText\`, \`CellProfile\`, \`ColumnConfig\`, and \`RowRenderFn\`.`, + + commitSha: '0ebde15', + }, + { + components: ['search-autocomplete', 'search-autocomplete-item'], + version: '0.13.0', + prs: ['33340'], + description: `Added \`SearchAutocomplete\` and \`SearchAutocompleteItem\` components for building accessible search-with-results patterns. Built on React Aria's Autocomplete with keyboard navigation and screen reader support. Designed for async/external search results with a configurable popover width.`, + + commitSha: 'd9d2dd6', + }, + { + components: ['checkbox'], + version: '0.13.0', + prs: ['33394'], + description: `Made Checkbox \`children\` optional and added a dev warning when neither a visible label, \`aria-label\`, nor \`aria-labelledby\` is provided. The label wrapper div is no longer rendered when there are no children, removing the unnecessary gap.`, + + commitSha: 'a6b84e1', + }, + { + components: ['dialog'], + version: '0.13.0', + prs: ['33352'], + description: `Fixed \`Dialog\` content overflowing when no \`height\` prop is set. The dialog now grows with its content and scrolls when content exceeds the viewport height.`, + + commitSha: 'b99f6d5', + }, + { + components: [ + 'accordion', + 'button', + 'button-icon', + 'button-link', + 'card', + 'list', + 'menu', + 'select', + 'toggle-button-group', + ], + version: '0.13.0', + prs: ['33358'], + description: `Fixed focus ring styles to use React Aria's \`[data-focus-visible]\` data attribute instead of the native CSS \`:focus-visible\` pseudo-class. This ensures keyboard focus rings render reliably when focus is managed programmatically by React Aria (e.g. inside a GridList, Menu, or Select).`, + + commitSha: '2f581de', + }, + { + components: ['container', 'header'], + version: '0.13.0', + prs: ['33354'], + description: `Fixed incorrect bottom spacing caused by \`Container\` using \`padding-bottom\` for its default bottom spacing. Changed to \`margin-bottom\` and prevented it from applying when \`Container\` is used as the \`Header\` root element.`, + + commitSha: '17d6398', + }, + { + components: ['plugin-header'], + version: '0.13.0', + prs: ['33368'], + description: `Fixed \`PluginHeader\` to avoid triggering \`ResizeObserver loop completed with undelivered notifications\` warnings when used in layouts that react to the header height, such as pages that use \`FullPage\`.`, + + commitSha: '2e5c651', + }, + { + components: ['tabs', 'plugin-header'], + version: '0.13.0', + prs: ['33047'], + description: `Fixed tab \`matchStrategy\` matching to ignore query parameters and hash fragments in tab \`href\` values. Previously, tabs with query params in their \`href\` (e.g., \`/page?group=foo\`) would never show as active since matching compared the full \`href\` string against \`location.pathname\` which never includes query params.`, + + commitSha: 'd4fa5b4', + }, + { + components: [], + version: '0.13.0', + prs: ['33363'], + description: `Fixed Table component to use current \`--bui-bg-neutral-1\` tokens instead of the removed \`--bui-bg-tint\` tokens, restoring row hover, selected, pressed, and disabled background colors.`, + + commitSha: 'bc42b60', + }, + { + components: [], + version: '0.13.0', + prs: ['33378'], + description: `Fixed a bug in the \`useTable\` hook where the loading skeleton was never shown for \`complete\` mode when using \`getData\`. The initial data state was an empty array instead of \`undefined\`, causing the \`Table\` component to skip the loading state.`, + + commitSha: '9314ff5', + }, + { + components: ['table'], + version: '0.13.0', + prs: ['33256'], + description: `Fixed Table column headers overflowing and wrapping when there is not enough space. Headers now truncate with ellipsis instead.`, + + commitSha: 'f42f4cc', + }, + { + components: ['row'], + version: '0.13.0', + prs: ['33394'], + description: `Fixed Table row hover, selected, pressed, and disabled background states to use the correct neutral token level based on the container background.`, + + commitSha: '1f9682b', + }, + { + components: ['row'], + version: '0.13.0', + prs: ['33256'], + description: `Fixed Table rows showing a pointer cursor when not interactive. Rows now only show \`cursor: pointer\` when they have an \`href\`, are selectable, or are pressable.`, + + commitSha: 'fbd5c5a', + }, + { + components: ['row'], + version: '0.13.0', + prs: ['33353'], + description: `Fixed \`Table\` rows with external \`href\` values to open in a new tab by automatically applying \`target="_blank"\` and \`rel="noopener noreferrer"\`.`, + + commitSha: '612c217', + }, + { + components: ['table'], + version: '0.13.0', + prs: ['33394'], + description: `Updated Table selection checkboxes to use \`aria-label\` instead of empty fragment children, improving accessibility and removing the unnecessary label gap in the selection cells.`, + + commitSha: '545129a', + }, + { + components: ['button', 'button-icon', 'button-link'], + version: '0.13.0', + prs: ['33095'], + description: `Fixed handling of the \`style\` prop on \`Button\`, \`ButtonIcon\`, and \`ButtonLink\` so that it is now correctly forwarded to the underlying element instead of being silently dropped.`, + + commitSha: '36987db', + }, + { + components: ['link'], + version: '0.13.0', + prs: ['33050'], + description: `Fixed Link variant default from \`'body'\` to \`'body-medium'\` to match actual CSS selectors. The previous default did not correspond to a valid variant value.`, + + commitSha: '95702ab', + }, + { + components: ['menu', 'select'], + version: '0.13.0', + prs: ['33049'], + description: `Fixed scroll overflow in Menu and Select popover content when constrained by viewport height.`, + + commitSha: '9027b10', + }, + { + components: ['flex', 'grid', 'grid-item'], + version: '0.13.0', + prs: ['33136'], + description: `Added support for native HTML div attributes on the \`Flex\`, \`Grid\`, and \`Grid.Item\` components.`, + + commitSha: '7960d54', + }, + { + components: [], + version: '0.13.0', + prs: ['33246'], + description: `Added \`virtualized\` prop to \`Table\` component for virtualized rendering of large datasets. Accepts \`true\` for default row height, \`{ rowHeight: number }\` for fixed height, or \`{ estimatedRowHeight: number }\` for variable height rows.`, + + commitSha: '0559408', + }, + { + components: ['menu', 'select'], + version: '0.13.0', + prs: ['32983'], + description: `Fixed focus-visible outline styles for Menu and Select components.`, + + commitSha: '8909359', + }, + { + components: [], + version: '0.13.0', + prs: ['33150'], + description: `Fixed MenuItem \`onAction\` prop ordering so user-provided \`onAction\` handlers are chained rather than silently overwritten.`, + + commitSha: '12d8afe', + }, + { + components: [], + version: '0.13.0', + prs: ['33389'], + description: `Pages created with \`PageBlueprint\` now render the plugin header by default in the new frontend system.`, + + commitSha: 'aa29b50', + }, + { + components: ['select'], + version: '0.13.0', + prs: ['33102'], + description: `The \`Select\` trigger now automatically adapts its background colour based on the parent background context.`, + + commitSha: 'bb66b86', + }, + { + components: ['plugin-header'], + version: '0.13.0', + prs: ['33085'], + description: `Merged the internal \`PluginHeaderToolbar\` component into \`PluginHeader\`, removing the separate component and its associated types (\`PluginHeaderToolbarOwnProps\`, \`PluginHeaderToolbarProps\`) and definition (\`PluginHeaderToolbarDefinition\`). This is an internal refactor with no changes to the public API of \`PluginHeader\`.`, + + commitSha: '4105a78', + }, + { + components: [], + version: '0.13.0', + prs: ['33251'], + description: `Updated dependency \`globals\` to \`^17.0.0\`.`, + + commitSha: '9599697', + }, + { + components: [], + version: '0.13.0', + prs: ['32971'], + description: `Improved type safety in \`useDefinition\` by centralizing prop resolution and strengthening the \`BgPropsConstraint\` to require that \`bg\` provider components declare \`children\` as a required prop in their OwnProps type.`, + + commitSha: '0f462f8', + }, + { + components: ['radio-group'], + version: '0.13.0', + prs: ['32983'], + description: `Added proper cursor styles for RadioGroup items.`, + + commitSha: '8909359', + }, + { + components: ['card'], + version: '0.13.0', + prs: ['33343'], + description: `Fixed \`Card\` interactive cards not firing the \`onPress\` handler when clicking the card surface.`, + + commitSha: 'fcaac3b', + }, + { + components: ['textfield', 'searchfield', 'password-field'], + version: '0.13.0', + prs: ['33050'], + description: `Fixed \`isRequired\` prop not being passed to the underlying React Aria field components in TextField, SearchField, and PasswordField. Previously, \`isRequired\` was consumed locally for the secondary label text but never forwarded, which meant the input elements lacked \`aria-required="true"\` and React Aria's built-in required validation was not activated.`, + + commitSha: 'b303857', + }, + { + components: ['searchfield', 'textfield'], + version: '0.13.0', + prs: ['33081'], + description: `\`SearchField\` and \`TextField\` now automatically adapt their background color based on the parent bg context, stepping up one neutral level (e.g. neutral-1 → neutral-2) when placed on a neutral background. \`TextField\` also gains a focus ring using the \`--bui-ring\` token.`, + + commitSha: '934ac03', + }, + { + components: [], + version: '0.13.0', + prs: ['33045'], + description: `Improved \`useBreakpoint\` performance by sharing a single set of \`matchMedia\` listeners across all component instances instead of creating independent listeners per hook call.`, + + commitSha: 'cd3cb0f', + }, + { + components: ['alert', 'container', 'dialog-body', 'field-label'], + version: '0.13.0', + prs: ['33095'], + description: `Extended \`AlertProps\`, \`ContainerProps\`, \`DialogBodyProps\`, and \`FieldLabelProps\` with native div element props to allow passing attributes like \`aria-*\` and \`data-*\`.`, + + commitSha: '36987db', + }, +];