From eccd63b793a088a690f4f4b9312e20e33e4fac28 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:23:16 -0400 Subject: [PATCH 01/29] docs(theming): Adds details around new unified theme. --- .../styles/theming/theming.md | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md index 8baa660e31..7aae718ef6 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md @@ -14,7 +14,35 @@ Theming is supported in PatternFly through [our design token system](/foundation ## PatternFly themes -The following themes are currently supported across PatternFly components and are designed to meet specific [WCAG accessibility standards](https://www.w3.org/WAI/standards-guidelines/wcag/). You can explore our different themes on our website by toggling your display preferences in our site's masthead dropdown. +PatternFly supports **light**, **dark**, and **high contrast** display modes across components. Those modes are designed to meet specific [WCAG accessibility standards](https://www.w3.org/WAI/standards-guidelines/wcag/). You can explore them on this site by toggling display preferences in the masthead. + +You can also choose between two **theme families**—**default** and **unified**—that layer on top of light, dark, and high contrast. Both families receive the same foundational token and interaction updates described below; the unified theme adds RHDS-aligned styling and enables glass contrast mode by default. + +### Default and unified theme families + +- **Default** — The standard PatternFly theme used by most products today. +- **Unified** — A theme aligned with the [Red Hat Design System (RHDS)](https://ux.redhat.com/) for closer visual consistency with other Red Hat experiences. For RHDS release information, roadmap, and design guidance, see the resources published on [ux.redhat.com](https://ux.redhat.com/) *(update this link to a specific release-notes or changelog page when available)*. + +#### Updates in both default and unified themes + +The following changes apply in **both** the default PatternFly theme and the unified theme (across light, dark, and high contrast modes where applicable): + +- **Control borders** — A new **control border** token improves non-text contrast and makes control boundaries easier to perceive for accessibility. +- **Cards** — Cards use **subtle borders and shadows** to define surfaces without heavy chrome. +- **Navigation** — Selected navigation items show an **accent mark** so the current location is clearer. +- **Expand and collapse** — **Expand/collapse** interactions use an updated **up/down** affordance for a more consistent vertical pattern. + +### Unified theme + +The unified theme is optional: opt in when your product should align with RHDS visuals and token choices. It supports the same **light**, **dark**, and **high contrast** modes as the default theme. + +**Glass contrast mode** is enabled **by default** in the unified theme. Glass adjusts surfaces, layering, and contrast for a distinct glass-like treatment. For implementation details, see [Glass contrast mode](#glass-contrast-mode). + +### Glass contrast mode + +**Glass contrast mode** is a visual mode that works alongside light, dark, and high contrast. The **unified** theme turns it on by default; you can also adopt glass in the **default** theme when your design system allows it. + +Use glass when you want the updated page treatments that depend on it (for example, background imagery, banded mastheads, and floating side navigation in traditional layouts). A dedicated glass / unified theming handbook will be linked here when it is available. ### Light mode From aad3e2087885ee7a30d0744d1daf5915581ba0ae Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Tue, 24 Mar 2026 12:45:08 -0400 Subject: [PATCH 02/29] docs(theming): Add new theming details. --- .../styles/theming/theming.md | 97 +++++++++++-------- 1 file changed, 58 insertions(+), 39 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md index 7aae718ef6..5ae7f27d7d 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md @@ -8,45 +8,48 @@ import '../../../components/components.css' import { Alert, AlertActionLink} from '@patternfly/react-core'; import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon'; -A **theme** applies a specific visual style to all UI components in order to create a unique, cohesive, and purposeful look. The use of theming can provide more flexibility for user preferences, as well as different options for accessibility needs. +A **theme** applies specific visual styles to UI components to create a unique, cohesive, and purposeful look. Our theming architecture leverages [our design token system](/foundations-and-styles/design-tokens/overview) to flexibly support different brand identities, user preferences, and accessibility needs. -Theming is supported in PatternFly through [our design token system](/foundations-and-styles/design-tokens/overview), which was intentionally structured so that sets of tokens can be adjusted together to create alternate UI styles. By reassigning token values, the fonts, spacing, shadows, and borders in a UI can be changed together to create a theme. This system has enabled us to create multiple PatternFly themes, while also supporting the ability for you to create custom themes. +## Theming architecture -## PatternFly themes +We utilize a tiered theming architecture to consistently manage the appearance of UIs: +- **Theme:** Defines the foundational brand appearance, including core colors, border radii, iconography, and assets. +- **Color scheme:** Controls the brightness and palette shifts between light and dark environments. +- **Contrast mode:** Adjusts the style of surfaces and elements for specific aesthetic or accessibility needs. -PatternFly supports **light**, **dark**, and **high contrast** display modes across components. Those modes are designed to meet specific [WCAG accessibility standards](https://www.w3.org/WAI/standards-guidelines/wcag/). You can explore them on this site by toggling display preferences in the masthead. +## Themes -You can also choose between two **theme families**—**default** and **unified**—that layer on top of light, dark, and high contrast. Both families receive the same foundational token and interaction updates described below; the unified theme adds RHDS-aligned styling and enables glass contrast mode by default. +We support 2 pre-built themes in PatternFly. While the visual identity of each theme differs, they share the same underlying interaction patterns and accessibility standards. -### Default and unified theme families +### Default theme -- **Default** — The standard PatternFly theme used by most products today. -- **Unified** — A theme aligned with the [Red Hat Design System (RHDS)](https://ux.redhat.com/) for closer visual consistency with other Red Hat experiences. For RHDS release information, roadmap, and design guidance, see the resources published on [ux.redhat.com](https://ux.redhat.com/) *(update this link to a specific release-notes or changelog page when available)*. +The Default theme creates the standard, open source PatternFly experience. It is characterized by blue branding, modern, square borders, and simple icons. -#### Updates in both default and unified themes +### Unified theme -The following changes apply in **both** the default PatternFly theme and the unified theme (across light, dark, and high contrast modes where applicable): +The Unified theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borderds, Red Hat icons, and glass contrast mode. Core interactive elements, such as primary buttons, continue to use blue for usability. -- **Control borders** — A new **control border** token improves non-text contrast and makes control boundaries easier to perceive for accessibility. -- **Cards** — Cards use **subtle borders and shadows** to define surfaces without heavy chrome. -- **Navigation** — Selected navigation items show an **accent mark** so the current location is clearer. -- **Expand and collapse** — **Expand/collapse** interactions use an updated **up/down** affordance for a more consistent vertical pattern. +For implementation guidance, refer to the Unified theme handbook. -### Unified theme +For a detailed look at the design philosophy and research behind the Unified theme, check out our Medium article: Title. -The unified theme is optional: opt in when your product should align with RHDS visuals and token choices. It supports the same **light**, **dark**, and **high contrast** modes as the default theme. +### Custom themes -**Glass contrast mode** is enabled **by default** in the unified theme. Glass adjusts surfaces, layering, and contrast for a distinct glass-like treatment. For implementation details, see [Glass contrast mode](#glass-contrast-mode). +To branch off of our themes and create your own, you can identify the design tokens you'd like to adjust on our [all tokens page](/foundations-and-styles/design-tokens/all-design-tokens) and provide new values to use within your application. -### Glass contrast mode +#### When to customize a theme -**Glass contrast mode** is a visual mode that works alongside light, dark, and high contrast. The **unified** theme turns it on by default; you can also adopt glass in the **default** theme when your design system allows it. +There are a couple of instances when you might want to adjust an existing PatternFly theme: +- One-off adjustments, like changing a single button color, spacer, or font size, when intentional deviation is needed across your product. +- Application-wide adjustments, like changing all button colors and font sizes to adjust the overall brand identity of your product. -Use glass when you want the updated page treatments that depend on it (for example, background imagery, banded mastheads, and floating side navigation in traditional layouts). A dedicated glass / unified theming handbook will be linked here when it is available. +## Color schemes ### Light mode -Generally, light mode is the default appearance of PatternFly. In this mode, dark text is presented on light backgrounds to meet a [text contrast ratio of at least 4.5:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#contrast-minimum), while colors for other UI elements meet a [non-text contrast ratio of at least 3:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#non-text-contrast). Some users might find it easier to read text on light screens, while others might simply prefer the appearance. +Light mode is the standard appearance for most web environments. + +Light mode places dark text on light backgrounds, while maintaining a [text contrast ratio of at least 4.5:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#contrast-minimum) and a [non-text contrast ratio of at least 3:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#non-text-contrast). Some users might find light screens easier to read, while others might simply prefer the appearance.
![A collage of multiple light-themed PatternFly components, like a calendar, alert, and menu. The components have white backgrounds and black text.](./img/components-light.svg) @@ -54,42 +57,54 @@ Generally, light mode is the default appearance of PatternFly. In this mode, dar ### Dark mode -In dark mode, light text is presented on dark backgrounds backgrounds, and our color palette adapts to maintain a [text contrast ratio of at least 4.5:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#contrast-minimum) and [non-text contrast ratio of at least 3:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#non-text-contrast). Some users might prefer dark mode for aesthetics, while others find it to be easier on the eyes and less straining for those with light sensitivities. +Dark mode adapts color palettes for light-sensitive users or low-light environments. It presents light text on dark backgrounds backgrounds while maintaining the same accessibility ratios as light mode. Some users might prefer dark mode for aesthetics, while others find it to be easier on the eyes and less straining for those with light sensitivities. -For development guidance, refer to the [dark theme handbook](/foundations-and-styles/theming/dark-theme-handbook). +For implementation guidance, refer to the [dark theme handbook](/foundations-and-styles/theming/dark-theme-handbook).
![A collage of multiple dark-themed PatternFly components, like a calendar, alert, and menu. The components have dark gray backgrounds and white text.](./img/components-dark.svg)
-### High contrast mode +## Contrast modes - -

High contrast mode is still under development and will continue to evolve and be enabled for charts and extensions. This beta allows you to preview our progress.

-
+Contrast modes adjust the surface treatment of UI elements across both color schemes. They are mutually exclusive and can't be applied simultaneously. -High contrast mode adjusts our default colors to meet an [enhanced contrast ratio of at least 7:1](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html), making it more suitable for users who require higher contrast between UI elements. By using wider border strokes and adjusted fill colors, high contrast mode creates more visual distinction and clarity between interactive elements. +### High contrast -In high contrast mode, distinct borders are also added to components to ensure that their boundaries are clearly defined without requiring users to rely on subtle background colors as a visual cue. +High contrast mode is focused on improving accessibility for users who require more clarity and higher contrast between UI elements. Turned on by user preference, high contrast mode adjusts border strokes and colors to meet an [enhanced contrast ratio of at least 7:1](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html). -For development guidance, refer to the [high contrast handbook](/foundations-and-styles/theming/high-contrast-handbook). +**Note:** Activating high contrast mode will override and disable glass mode to ensure all boundaries and text meet strict accessibility requirements. + +For implementation guidance, refer to the [high contrast handbook](/foundations-and-styles/theming/high-contrast-handbook).
![A collage of multiple PatternFly components, like a calendar, alert, and menu. The top half of the image has components on a white background with black text and the bottom half of the image has dark components on a black background with light text. All components have high contrast, with borders and noticeable colors.](./img/components-hc.svg)
-## Custom themes +### Glass -To branch off of our themes and create your own, you can identify the design tokens you'd like to adjust on our [all tokens page](/foundations-and-styles/design-tokens/all-design-tokens) and provide new values to use within your application. +Glass mode introduces transparency and depth to the UI, creating a layered visual effect. It is enabled in the Unified theme by default, but can also be manually enabled in the Default theme. -### When to customize a theme +When glass is enabled, the following changes will apply: +- **Transparency:** Container backgrounds will become more transparent, allowing the content below to subtly show through. +- **Background image:** A pre-approved background image will fill the page body. Product teams must work with the Brand team ensure these images maintain accessibility compliance behind UI elements. +- **Layout changes:** Layout variations, including the banded masthead and floating side navigation. -There are a couple of instances when you might want to adjust an existing PatternFly theme: -- One-off adjustments, like changing a single button color, spacer, or font size, when intentional deviation is needed across your product. -- Application-wide adjustments, like changing all button colors and font sizes to adjust the overall brand identity of your product. +For implementation guidance, refer to the glass handbook. + +## Feature compatibility + +The following table outlines the availability and compatibility of PatternFly features across themes. + +| Feature | Default theme | Unified theme | +| --- | --- | --- | +| Accent color | Blue | Red | +| Interactive element colors | Blue | Blue | +| Border radius shape | Square | Pill | +| Default contrast mode | Standard | Glass | +| Background image | Optional (Manual) | Required (with glass mode) | +| Branded icons | Optional (Manual) | Default +| High contrast support | Yes | Yes | ## Using themes in Figma @@ -97,6 +112,10 @@ Our Figma libraries fully support theming. Designers can create a single design The standard light PatternFly theme will be applied to components by default. If you want your mockups to use our dark or high contrast themes, you will need to adjust the following settings in Figma. +### Unified theme + +To swap between the Default and Unified themes, adjust the themevariable mode. The Unified mode will automatically apply the red accents, pill shapes, and glass treatment. + ### Dark mode To swap your components to our standard dark mode, change the Semantic Color Tokens variable mode to be "Dark": From 1f44f70f26b8e35d6123791676ccaa837a7db61b Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Fri, 27 Mar 2026 13:42:38 -0400 Subject: [PATCH 03/29] docs(theming): Update theming docs. --- .../styles/theming/theming.md | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md index 5ae7f27d7d..41484bef02 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md @@ -106,17 +106,35 @@ The following table outlines the availability and compatibility of PatternFly fe | Branded icons | Optional (Manual) | Default | High contrast support | Yes | Yes | -## Using themes in Figma + +## Best practices + +To ensure your application is robust, maintainable, and adaptable across different themes, we recommend following these best practices. + +- **Use default PatternFly components:** Whenever possible, use PatternFly components as they are. This ensures you stay up-to-date with our intended design, functionality, and accessibility standards. It also makes upgrades more seamless, decreases development time, and guarantees consistency across applications. +- **Use design tokens and variables for customizations:** If you must customize a component, use the appropriate method: + - **Design tokens:** For global changes + - **Component variables:** For component-specific changes + - Example: To override a primary button’s background color, declare `.pf-v6-c-button { --pf-v6-c-button--m-primary--BackgroundColor: [color token]; }` instead of `.pf-v6-c-button.pf-m-primary { background-color: [color token]; }`. +- **Always use tokens to create custom styles:** When creating custom components or styles, never use hard-coded values like hex codes or color names (`#fff` or `white`). Instead, use the appropriate design token, such as `var(--pf-t--global--background--color--primary--default)`. Tokens automatically adapt to different themes, while hard-coded values do not. +- **Prioritize semantic tokens:** Always use the most relevant semantic token for your use case to ensure the element's purpose is clear and that it receives the correct styling in any theme. If no semantic token exists, you can fall back to a base token. +- **Never use a palette token**: Do not use palette tokens (like `--pf-t--color--blue--20`) directly in your code, as the value is not guaranteed to be consistent across themes. +- **Use scalable icons:** For icons, use vector images (SVG) or icon fonts instead of raster or bitmap images (PNG, JPEG, GIF, BMP, and so on). This allows you to control their color with CSS `fill` and `color` properties. By assigning a design token to these properties, your icons will automatically change color to match the active theme. + - If you must use static images, you might need to hide and show different image files based presence of a theme-specific class (like `pf-v6-theme-dark`). + +## Theming in Figma Our Figma libraries fully support theming. Designers can create a single design and then swap between our themes using the "Apply Variable Mode" toggles in the "Appearance" section of the component properties panel. This makes it easy to visually test and validate designs across all supported themes. The standard light PatternFly theme will be applied to components by default. If you want your mockups to use our dark or high contrast themes, you will need to adjust the following settings in Figma. -### Unified theme +**Note:** Our charts use a unique token collection, so you will need to adjust chart variable modes separately from components in order to swap themes. To change the variable mode for charts, follow the same steps outlined for component theme adjustments. -To swap between the Default and Unified themes, adjust the themevariable mode. The Unified mode will automatically apply the red accents, pill shapes, and glass treatment. +### Swapping themes -### Dark mode +To swap between the Default and Unified themes, adjust the theme variable mode. The Unified mode will automatically apply the red accents, pill shapes, and glass treatment. + +### Swapping color schemes To swap your components to our standard dark mode, change the Semantic Color Tokens variable mode to be "Dark": @@ -124,29 +142,10 @@ To swap your components to our standard dark mode, change the Semantic Color Tok ![Figma settings menu to select different token variables.](./img/figma-dark-mode.svg)
-### High contrast mode +### Swapping contrast modes To swap your components to our high contrast mode, change the Semantic Dimension Tokens variable mode to be "High Contrast" and choose either "Light - High Contrast" or "Dark - High Contrast" for the Semantic Color Tokens variable mode:
![Figma settings menu to select different token variables.](./img/figma-hc-mode.svg) -
- -### Chart themes - -Our charts use a unique token collection, so you will need to adjust chart variable modes separately from components in order to swap themes. To change the variable mode for charts, follow the same steps previously outlined for component theme adjustments. - -## Best practices - -To ensure your application is robust, maintainable, and adaptable across different themes, we recommend following these best practices. - -- **Use default PatternFly components:** Whenever possible, use PatternFly components as they are. This ensures you stay up-to-date with our intended design, functionality, and accessibility standards. It also makes upgrades more seamless, decreases development time, and guarantees consistency across applications. -- **Use design tokens and variables for customizations:** If you must customize a component, use the appropriate method: - - **Design tokens:** For global changes - - **Component variables:** For component-specific changes - - Example: To override a primary button’s background color, declare `.pf-v6-c-button { --pf-v6-c-button--m-primary--BackgroundColor: [color token]; }` instead of `.pf-v6-c-button.pf-m-primary { background-color: [color token]; }`. -- **Always use tokens to create custom styles:** When creating custom components or styles, never use hard-coded values like hex codes or color names (`#fff` or `white`). Instead, use the appropriate design token, such as `var(--pf-t--global--background--color--primary--default)`. Tokens automatically adapt to different themes, while hard-coded values do not. -- **Prioritize semantic tokens:** Always use the most relevant semantic token for your use case to ensure the element's purpose is clear and that it receives the correct styling in any theme. If no semantic token exists, you can fall back to a base token. -- **Never use a palette token**: Do not use palette tokens (like `--pf-t--color--blue--20`) directly in your code, as the value is not guaranteed to be consistent across themes. -- **Use scalable icons:** For icons, use vector images (SVG) or icon fonts instead of raster or bitmap images (PNG, JPEG, GIF, BMP, and so on). This allows you to control their color with CSS `fill` and `color` properties. By assigning a design token to these properties, your icons will automatically change color to match the active theme. - - If you must use static images, you might need to hide and show different image files based presence of a theme-specific class (like `pf-v6-theme-dark`). \ No newline at end of file + \ No newline at end of file From deb9a60ebb094d0af0585bce49c942eaecb48ae4 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Tue, 31 Mar 2026 10:11:35 -0400 Subject: [PATCH 04/29] Adds glass mode handbook outline draft. --- .../styles/colors/colors.md | 2 + .../styles/theming/glass-mode-handbook.md | 41 +++++++++++++++++++ .../styles/theming/theming.md | 20 ++++----- 3 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md index 6a77d020d9..bc46c99614 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md @@ -190,6 +190,8 @@ Status and state colors are indicators that communicate data and actions to user To check the contrast between background and text colors, use a WCAG AA-compliance tool. +Beyond our standard contrast ratio, we support a high contrast and a glass contrast mode, as documented in our [theming guidelines](http://localhost:8003/foundations-and-styles/theming#contrast-modes). + ## Color families Our color palettes are organized into "families" that contain different shades of the same hue. In the following families, you can expand each color to see related tokens. diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md new file mode 100644 index 0000000000..e0571cec0e --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md @@ -0,0 +1,41 @@ +--- +id: Theming +section: foundations-and-styles +source: glass-mode-handbook +--- + +# Glass mode developer handbook + +## What is glass mode? + +Glass mode is a contrast mode option that's enabled in the Felt theme by default and can be manually enabled in the Default theme. Glass adds transparency, blurring, and depth to the UI to create a layered visual effect where brand-approved background images and layered UI elements subtly show through. + +### Background images + +The glass effect is most visible when placed over a background image. Background images should be selected or designed for each Red Hat product in collaboration with the Brand team. To retain readability and ensure proper contrast ratios are met, images shouldn't contain high levels of detail or extreme contrast. + +Text must never be placed directly on a background image—it should be placed within a container that has a background color or glass effect. Titles or headings with stronger font weights may be placed directly on background images only if they pass specific brand and contrast requirements. + +### Opacity + +The minimum level of glass opacity can vary significantly depending on the content that needs to be read, the background images and colors used behind the lowest level glass overlay, and whether any custom CSS overrides are being used in a product space. + +The default opacity values used in our components have been tested for accessibility, legibility, and visual appeal. Our research and testing revealed that a 40% to 60% opacity range is the ideal opacity range to balance aesthetics with usability. A 60% opacity is a slightly more cautious level that provides better reliability for dark themes. A 40% opacity provides a more distinct glass look and maintains AAA contrast for standard text in most light theme scenarios. + +## Enabling glass mode + +Glass mode is enabled by default in the Felt theme and is designed to work across light and dark color schemes. To enable glass in the Default theme, add the class `.pf-v6-theme-glass` to your application’s `` tag. It is important that you ensure that your use of glass does not impact the accessibility or usability of your product. + +**Note:** Layering multiple glass-enabled containers can cause significant accessibility and performance problems. We do not support glass-on-glass overlays, such as a glass modal placed over a glass card. Components that overlay others in the UI do not have a glass effect by default. + +### User controls and preferences +Because glass mode introduces legibility risks, any product utilizing glass must also let users swap between default contrast and high contrast modes via a theme switcher or preferences menu. When users select high contrast mode, it must always override and disable glass effects to ensure functional accessibility. + +Products should also respect the OS-level `prefers-reduced-transparency` media query, disabling glass or replacing it with a solid high-opacity background to accommodate users appropriately. + +## Best practices + +To ensure a successful implementation, follow these best practices: +- Ensure all text meets a 4.5:1 (AA) contrast ratio. +- Ensure that high contrast mode overrides any use of glass to maintain accessibility requirements. +- Always verify glass components against both light and dark background variations to catch contrast failures early. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md index 41484bef02..791939817a 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md @@ -25,13 +25,9 @@ We support 2 pre-built themes in PatternFly. While the visual identity of each t The Default theme creates the standard, open source PatternFly experience. It is characterized by blue branding, modern, square borders, and simple icons. -### Unified theme +### Felt theme -The Unified theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borderds, Red Hat icons, and glass contrast mode. Core interactive elements, such as primary buttons, continue to use blue for usability. - -For implementation guidance, refer to the Unified theme handbook. - -For a detailed look at the design philosophy and research behind the Unified theme, check out our Medium article: Title. +The Felt theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borderds, Red Hat icons, and [glass contrast mode](#glass). Core interactive elements, such as primary buttons, continue to use blue for usability. ### Custom themes @@ -69,6 +65,10 @@ For implementation guidance, refer to the [dark theme handbook](/foundations-and Contrast modes adjust the surface treatment of UI elements across both color schemes. They are mutually exclusive and can't be applied simultaneously. +### Default contrast + +Default contrast mode is used in the Default theme and doesn't include special enhancements to increase contrast in UI elements. This mode doesn't need to be enabled and simply refers to the standard color palette used to achieve level AA accessibility, with contrast ratios of 4.5:1 for normal text, 3:1 for large text, and 3:1 for graphics and other UI components. + ### High contrast High contrast mode is focused on improving accessibility for users who require more clarity and higher contrast between UI elements. Turned on by user preference, high contrast mode adjusts border strokes and colors to meet an [enhanced contrast ratio of at least 7:1](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html). @@ -83,20 +83,20 @@ For implementation guidance, refer to the [high contrast handbook](/foundations- ### Glass -Glass mode introduces transparency and depth to the UI, creating a layered visual effect. It is enabled in the Unified theme by default, but can also be manually enabled in the Default theme. +Glass mode introduces transparency and depth to the UI, creating a layered visual effect. It is enabled in the Felt theme by default, but can also be manually enabled in the Default theme. When glass is enabled, the following changes will apply: - **Transparency:** Container backgrounds will become more transparent, allowing the content below to subtly show through. - **Background image:** A pre-approved background image will fill the page body. Product teams must work with the Brand team ensure these images maintain accessibility compliance behind UI elements. - **Layout changes:** Layout variations, including the banded masthead and floating side navigation. -For implementation guidance, refer to the glass handbook. +For more details, including implementation guidance, refer to the [glass mode handbook](/foundations-and-styles/theming/glass-mode-handbook). ## Feature compatibility The following table outlines the availability and compatibility of PatternFly features across themes. -| Feature | Default theme | Unified theme | +| Feature | Default theme | Felt theme | | --- | --- | --- | | Accent color | Blue | Red | | Interactive element colors | Blue | Blue | @@ -132,7 +132,7 @@ The standard light PatternFly theme will be applied to components by default. If ### Swapping themes -To swap between the Default and Unified themes, adjust the theme variable mode. The Unified mode will automatically apply the red accents, pill shapes, and glass treatment. +To swap between the Default and Felt themes, adjust the theme variable mode. The Felt mode will automatically apply the red accents, pill shapes, and glass treatment. ### Swapping color schemes From 2735c8a6ced144d7341d27cef9de56fac3a32648 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Wed, 1 Apr 2026 16:19:12 -0400 Subject: [PATCH 05/29] Add tokens table and list of glass-supporting components. --- .../styles/theming/glass-mode-handbook.md | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md index e0571cec0e..bf92554f08 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md @@ -8,30 +8,55 @@ source: glass-mode-handbook ## What is glass mode? -Glass mode is a contrast mode option that's enabled in the Felt theme by default and can be manually enabled in the Default theme. Glass adds transparency, blurring, and depth to the UI to create a layered visual effect where brand-approved background images and layered UI elements subtly show through. +Glass mode is a contrast mode option that's enabled in our Felt theme by default and can be manually enabled in our Default theme. Glass adds transparency, blurring, and depth to the UI to create a more dynamic visual effect where brand-approved background images and layered UI elements subtly show through. + +When turned on, glass applies to the following components, including their uses within our extensions: +- Card +- Drawer +- Login page +- Masthead +- Navigation (docked) +- Page +- Panel ### Background images The glass effect is most visible when placed over a background image. Background images should be selected or designed for each Red Hat product in collaboration with the Brand team. To retain readability and ensure proper contrast ratios are met, images shouldn't contain high levels of detail or extreme contrast. -Text must never be placed directly on a background image—it should be placed within a container that has a background color or glass effect. Titles or headings with stronger font weights may be placed directly on background images only if they pass specific brand and contrast requirements. +Text must never be placed directly on a background image—it should be placed within a container that has a background color or glass effect. Titles or headings with stronger font weights can be placed directly on background images only if they pass specific brand and contrast requirements. ### Opacity -The minimum level of glass opacity can vary significantly depending on the content that needs to be read, the background images and colors used behind the lowest level glass overlay, and whether any custom CSS overrides are being used in a product space. +The default opacity values used in our components have been tested for accessibility, legibility, and visual appeal. +- Felt light typically utilizes a 40% opacity to maintain AAA contrast for standard text. +- Felt dark utilizes a 60% opacity to provide better reliability for the dark color scheme. -The default opacity values used in our components have been tested for accessibility, legibility, and visual appeal. Our research and testing revealed that a 40% to 60% opacity range is the ideal opacity range to balance aesthetics with usability. A 60% opacity is a slightly more cautious level that provides better reliability for dark themes. A 40% opacity provides a more distinct glass look and maintains AAA contrast for standard text in most light theme scenarios. +If a product team chooses to override these token values, they are responsible for conducting their own accessibility evaluation to ensure WCAG compliance. ## Enabling glass mode -Glass mode is enabled by default in the Felt theme and is designed to work across light and dark color schemes. To enable glass in the Default theme, add the class `.pf-v6-theme-glass` to your application’s `` tag. It is important that you ensure that your use of glass does not impact the accessibility or usability of your product. +Glass mode is designed to work across light and dark color schemes and is enabled by default in our Felt theme. To manually enable glass in our Default theme, add the class `.pf-v6-theme-glass` to your application’s `` tag. When implementing glass with our Default theme, it's important to ensure that glass does not harm the overall accessibility or usability of your product. + +### Technical constraints + +There are a few technical constraints to abide by when using glass in your product. + +- **No glass-on-glass layering:** Never layer glass-enabled containers. Doing so can cause significant performance and accessibility problems. For example, child objects inside a blurred parent container can become illegibly blurred themselves. To mitigate this, we have intentionally adjusted the opacity of our background color design tokens to simulate depth without introducing extra blur. +- **High contrast precedence:** If high-contrast mode is enabled, all glass effects must be automatically disabled to prioritize functional accessibility. +- **User controls and preferences:** Because glass mode introduces legibility risks, any product utilizing glass must also let users swap between default contrast and high contrast modes via a theme switcher or preferences menu. Products should also respect the OS-level `prefers-reduced-transparency` media query, disabling glass or replacing it with a solid high-opacity background to accommodate users appropriately. -**Note:** Layering multiple glass-enabled containers can cause significant accessibility and performance problems. We do not support glass-on-glass overlays, such as a glass modal placed over a glass card. Components that overlay others in the UI do not have a glass effect by default. +## Glass design tokens -### User controls and preferences -Because glass mode introduces legibility risks, any product utilizing glass must also let users swap between default contrast and high contrast modes via a theme switcher or preferences menu. When users select high contrast mode, it must always override and disable glass effects to ensure functional accessibility. +The following tokens are used together to create the glass effect. -Products should also respect the OS-level `prefers-reduced-transparency` media query, disabling glass or replacing it with a solid high-opacity background to accommodate users appropriately. +| Token | Value (in Felt theme) | Usage | +| --- | --- | --- | +| `-pf-t--global--background--color--glass--primary--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 at 50% opacity | Base fill for glass containers. | +| `-pf-t--global--background--filter--glass--default` | Light mode value: #C7C7C7 (25% opacity)
Dark mode value: #C7C7C7 (15% opacity) | Overlay tint used to enhance blur visibility. | +| `-pf-t--global--border--color--glass--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 (50% opacity) | Boundary highlight for glass surfaces. | +| `-pf-t--global--border--radius--glass--default` | #D6D6D6 with 16px radius | Default rounded border for glass element. | +| `-pf-t--global--background--color--sticky--default` | Light mode value: #FFFFFF (100% opacity)
Dark mode value: #292929 (100% opacity) | Solid background for sticky elements, like headers. | +| `-pf-t--global--box-shadow--medium` | #292929 (15% opacity) | Shadow that signifies elevation. | ## Best practices From 0d784aab2fa9c6974e9fbbdf31d49abae03f2a26 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:37:34 -0400 Subject: [PATCH 06/29] Change name to Project Felt. --- .../styles/theming/glass-mode-handbook.md | 10 +++++----- .../foundations-and-styles/styles/theming/theming.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md index bf92554f08..411e75bb68 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md @@ -8,7 +8,7 @@ source: glass-mode-handbook ## What is glass mode? -Glass mode is a contrast mode option that's enabled in our Felt theme by default and can be manually enabled in our Default theme. Glass adds transparency, blurring, and depth to the UI to create a more dynamic visual effect where brand-approved background images and layered UI elements subtly show through. +Glass mode is a contrast mode option that's enabled in our Project Felt theme by default and can be manually enabled in our Default theme. Glass adds transparency, blurring, and depth to the UI to create a more dynamic visual effect where brand-approved background images and layered UI elements subtly show through. When turned on, glass applies to the following components, including their uses within our extensions: - Card @@ -28,14 +28,14 @@ Text must never be placed directly on a background image—it should be plac ### Opacity The default opacity values used in our components have been tested for accessibility, legibility, and visual appeal. -- Felt light typically utilizes a 40% opacity to maintain AAA contrast for standard text. -- Felt dark utilizes a 60% opacity to provide better reliability for the dark color scheme. +- Project Felt light typically utilizes a 40% opacity to maintain AAA contrast for standard text. +- Project Felt dark utilizes a 60% opacity to provide better reliability for the dark color scheme. If a product team chooses to override these token values, they are responsible for conducting their own accessibility evaluation to ensure WCAG compliance. ## Enabling glass mode -Glass mode is designed to work across light and dark color schemes and is enabled by default in our Felt theme. To manually enable glass in our Default theme, add the class `.pf-v6-theme-glass` to your application’s `` tag. When implementing glass with our Default theme, it's important to ensure that glass does not harm the overall accessibility or usability of your product. +Glass mode is designed to work across light and dark color schemes and is enabled by default in our Project Felt theme. To manually enable glass in our Default theme, add the class `.pf-v6-theme-glass` to your application’s `` tag. When implementing glass with our Default theme, it's important to ensure that glass does not harm the overall accessibility or usability of your product. ### Technical constraints @@ -49,7 +49,7 @@ There are a few technical constraints to abide by when using glass in your produ The following tokens are used together to create the glass effect. -| Token | Value (in Felt theme) | Usage | +| Token | Value (in Project Felt theme) | Usage | | --- | --- | --- | | `-pf-t--global--background--color--glass--primary--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 at 50% opacity | Base fill for glass containers. | | `-pf-t--global--background--filter--glass--default` | Light mode value: #C7C7C7 (25% opacity)
Dark mode value: #C7C7C7 (15% opacity) | Overlay tint used to enhance blur visibility. | diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md index 791939817a..3318364d26 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md @@ -25,9 +25,9 @@ We support 2 pre-built themes in PatternFly. While the visual identity of each t The Default theme creates the standard, open source PatternFly experience. It is characterized by blue branding, modern, square borders, and simple icons. -### Felt theme +### Project Felt theme -The Felt theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borderds, Red Hat icons, and [glass contrast mode](#glass). Core interactive elements, such as primary buttons, continue to use blue for usability. +The Project Felt theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borderds, Red Hat icons, and [glass contrast mode](#glass). Core interactive elements, such as primary buttons, continue to use blue for usability. ### Custom themes @@ -83,7 +83,7 @@ For implementation guidance, refer to the [high contrast handbook](/foundations- ### Glass -Glass mode introduces transparency and depth to the UI, creating a layered visual effect. It is enabled in the Felt theme by default, but can also be manually enabled in the Default theme. +Glass mode introduces transparency and depth to the UI, creating a layered visual effect. It is enabled in the Project Felt theme by default, but can also be manually enabled in the Default theme. When glass is enabled, the following changes will apply: - **Transparency:** Container backgrounds will become more transparent, allowing the content below to subtly show through. @@ -96,7 +96,7 @@ For more details, including implementation guidance, refer to the [glass mode ha The following table outlines the availability and compatibility of PatternFly features across themes. -| Feature | Default theme | Felt theme | +| Feature | Default theme | Project Felt theme | | --- | --- | --- | | Accent color | Blue | Red | | Interactive element colors | Blue | Blue | @@ -132,7 +132,7 @@ The standard light PatternFly theme will be applied to components by default. If ### Swapping themes -To swap between the Default and Felt themes, adjust the theme variable mode. The Felt mode will automatically apply the red accents, pill shapes, and glass treatment. +To swap between the Default and Project Felt themes, adjust the theme variable mode. The Project Felt mode will automatically apply the red accents, pill shapes, and glass treatment. ### Swapping color schemes From 3de1c3e208c60c493dfd51ca7414428bde18b876 Mon Sep 17 00:00:00 2001 From: Andrew Ronaldson Date: Wed, 29 Apr 2026 21:32:00 -0300 Subject: [PATCH 07/29] fix(theming doc): typo fix Corrected a typo in the Project Felt theme description. --- .../content/foundations-and-styles/styles/theming/theming.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md index 3318364d26..14eb7f97b8 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/theming.md @@ -27,7 +27,7 @@ The Default theme creates the standard, open source PatternFly experience. It is ### Project Felt theme -The Project Felt theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borderds, Red Hat icons, and [glass contrast mode](#glass). Core interactive elements, such as primary buttons, continue to use blue for usability. +The Project Felt theme is designed for products within the Red Hat portfolio, providing closer alignment with the [Red Hat Design System](https://ux.redhat.com/). It is characterized by red accent colors, smooth, rounded borders, Red Hat icons, and [glass contrast mode](#glass). Core interactive elements, such as primary buttons, continue to use blue for usability. ### Custom themes @@ -148,4 +148,4 @@ To swap your components to our high contrast mode, change the Semantic Dimension
![Figma settings menu to select different token variables.](./img/figma-hc-mode.svg) -
\ No newline at end of file + From 611309b20570e0d703d1c0f499448aa569902c8b Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Thu, 30 Apr 2026 11:06:51 -0400 Subject: [PATCH 08/29] Updates from PR feedback. --- .../styles/colors/colors.md | 2 +- .../styles/theming/glass-mode-handbook.md | 20 ++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md index da9c117b98..8d3fbc0d6d 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/colors/colors.md @@ -191,7 +191,7 @@ Status and state colors are indicators that communicate data and actions to user To check the contrast between background and text colors, use a WCAG AA-compliance tool. -Beyond our standard contrast ratio, we support a high contrast and a glass contrast mode, as documented in our [theming guidelines](http://localhost:8003/foundations-and-styles/theming#contrast-modes). +Beyond our standard contrast ratio, we support a high contrast and a glass contrast mode, as documented in our [theming guidelines](/foundations-and-styles/theming#contrast-modes). ## Color families Our color palettes are organized into "families" that contain different shades of the same hue. In the following families, you can expand each color to see related tokens. diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md index 411e75bb68..c77ba7d437 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md @@ -15,13 +15,15 @@ When turned on, glass applies to the following components, including their uses - Drawer - Login page - Masthead -- Navigation (docked) +- Navigation - Page - Panel ### Background images -The glass effect is most visible when placed over a background image. Background images should be selected or designed for each Red Hat product in collaboration with the Brand team. To retain readability and ensure proper contrast ratios are met, images shouldn't contain high levels of detail or extreme contrast. +The glass effect is most visible when placed over a background image. To retain readability and ensure proper contrast ratios are met, images shouldn't contain high levels of detail or extreme contrast. + +Background images should be selected for each Red Hat product in collaboration with the Brand team. Text must never be placed directly on a background image—it should be placed within a container that has a background color or glass effect. Titles or headings with stronger font weights can be placed directly on background images only if they pass specific brand and contrast requirements. @@ -43,7 +45,7 @@ There are a few technical constraints to abide by when using glass in your produ - **No glass-on-glass layering:** Never layer glass-enabled containers. Doing so can cause significant performance and accessibility problems. For example, child objects inside a blurred parent container can become illegibly blurred themselves. To mitigate this, we have intentionally adjusted the opacity of our background color design tokens to simulate depth without introducing extra blur. - **High contrast precedence:** If high-contrast mode is enabled, all glass effects must be automatically disabled to prioritize functional accessibility. -- **User controls and preferences:** Because glass mode introduces legibility risks, any product utilizing glass must also let users swap between default contrast and high contrast modes via a theme switcher or preferences menu. Products should also respect the OS-level `prefers-reduced-transparency` media query, disabling glass or replacing it with a solid high-opacity background to accommodate users appropriately. +- **User controls and preferences:** Because some users might experience legibility issues in glass mode, any product utilizing glass must also let users swap to default contrast or high contrast via a theme switcher or preferences menu. Products should also respect the OS-level `prefers-reduced-transparency` media query, disabling glass or replacing it with a solid high-opacity background to accommodate users appropriately. ## Glass design tokens @@ -51,12 +53,12 @@ The following tokens are used together to create the glass effect. | Token | Value (in Project Felt theme) | Usage | | --- | --- | --- | -| `-pf-t--global--background--color--glass--primary--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 at 50% opacity | Base fill for glass containers. | -| `-pf-t--global--background--filter--glass--default` | Light mode value: #C7C7C7 (25% opacity)
Dark mode value: #C7C7C7 (15% opacity) | Overlay tint used to enhance blur visibility. | -| `-pf-t--global--border--color--glass--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 (50% opacity) | Boundary highlight for glass surfaces. | -| `-pf-t--global--border--radius--glass--default` | #D6D6D6 with 16px radius | Default rounded border for glass element. | -| `-pf-t--global--background--color--sticky--default` | Light mode value: #FFFFFF (100% opacity)
Dark mode value: #292929 (100% opacity) | Solid background for sticky elements, like headers. | -| `-pf-t--global--box-shadow--medium` | #292929 (15% opacity) | Shadow that signifies elevation. | +| `--pf-t--global--background--color--glass--primary--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 at 50% opacity | Base fill for glass containers. | +| `--pf-t--global--background--filter--glass--default` | Light mode value: #C7C7C7 (25% opacity)
Dark mode value: #C7C7C7 (15% opacity) | Overlay tint used to enhance blur visibility. | +| `--pf-t--global--border--color--glass--default` | Light mode value: #FFFFFF (60% opacity)
Dark mode value: #292929 (50% opacity) | Boundary highlight for glass surfaces. | +| `--pf-t--global--border--radius--glass--default` | #D6D6D6 with 16px radius | Default rounded border for glass element. | +| `--pf-t--global--background--color--sticky--default` | Light mode value: #FFFFFF (100% opacity)
Dark mode value: #292929 (100% opacity) | Solid background for sticky elements, like headers. | +| `--pf-t--global--box-shadow--medium` | #292929 (15% opacity) | Shadow that signifies elevation. | ## Best practices From e9e54a42aa4924721603b52db9a2245df0247ee5 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Fri, 1 May 2026 10:38:17 -0400 Subject: [PATCH 09/29] Apply suggestion from @edonehoo --- .../styles/theming/glass-mode-handbook.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md index c77ba7d437..b3aeaa3308 100644 --- a/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/foundations-and-styles/styles/theming/glass-mode-handbook.md @@ -11,12 +11,14 @@ source: glass-mode-handbook Glass mode is a contrast mode option that's enabled in our Project Felt theme by default and can be manually enabled in our Default theme. Glass adds transparency, blurring, and depth to the UI to create a more dynamic visual effect where brand-approved background images and layered UI elements subtly show through. When turned on, glass applies to the following components, including their uses within our extensions: -- Card -- Drawer -- Login page +- Login page - Masthead - Navigation - Page + +Additionally, glass can be manually enabled on the following components, via the `isGlass` prop: +- Card +- Drawer - Panel ### Background images From f2d9935b96ca59550d3bdf9164fe879ea1368ede Mon Sep 17 00:00:00 2001 From: Joachim Schuler Date: Tue, 12 May 2026 08:58:28 -0400 Subject: [PATCH 10/29] feat: bump design-tokens package (#5002) * feat: bump design-tokens package * chore(deps): bump @patternfly/design-tokens to 1.16.2 Co-authored-by: Cursor --------- Co-authored-by: nicolethoen Co-authored-by: Cursor --- packages/documentation-site/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/documentation-site/package.json b/packages/documentation-site/package.json index 2741efdef3..65a5374024 100644 --- a/packages/documentation-site/package.json +++ b/packages/documentation-site/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@patternfly/chatbot": "6.6.0-prerelease.6", - "@patternfly/design-tokens": "1.15.1", + "@patternfly/design-tokens": "1.16.2", "@patternfly/documentation-framework": "workspace:*", "@patternfly/quickstarts": "6.5.0-prerelease.4", "@patternfly/react-catalog-view-extension": "6.3.0-prerelease.3", diff --git a/yarn.lock b/yarn.lock index b0509b57ac..14dd3f3708 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5034,16 +5034,16 @@ __metadata: languageName: node linkType: hard -"@patternfly/design-tokens@npm:1.15.1": - version: 1.15.1 - resolution: "@patternfly/design-tokens@npm:1.15.1" +"@patternfly/design-tokens@npm:1.16.2": + version: 1.16.2 + resolution: "@patternfly/design-tokens@npm:1.16.2" dependencies: "@patternfly/react-core": "npm:^6.1" commander: "npm:^12.0.0" peerDependencies: react: ^17 || ^18 react-dom: ^18.0.0 - checksum: 10c0/440fc5f19247492dc1759c5ee5b66897373485e36baeb94c2c4e950d336200f47986bb88fe4490596776894f67aca51a9c32ff956e92db46ca3cc19292428f59 + checksum: 10c0/6b121f418eca03e688c93bb95fe3350781002033878d6abe12fa1a256ec718c8fbfb8e5d495df84aec9c3b089e52f06bba1faf671708e3be0c5be67e63ce70dd languageName: node linkType: hard @@ -18647,7 +18647,7 @@ __metadata: resolution: "patternfly-org@workspace:packages/documentation-site" dependencies: "@patternfly/chatbot": "npm:6.6.0-prerelease.6" - "@patternfly/design-tokens": "npm:1.15.1" + "@patternfly/design-tokens": "npm:1.16.2" "@patternfly/documentation-framework": "workspace:*" "@patternfly/patternfly-a11y": "npm:5.2.1" "@patternfly/quickstarts": "npm:6.5.0-prerelease.4" From 6c182c954b18151dcfc2fdc89eaf193ed68f0f46 Mon Sep 17 00:00:00 2001 From: patternfly-build Date: Tue, 12 May 2026 13:04:58 +0000 Subject: [PATCH 11/29] chore(release): releasing packages [ci skip] - @patternfly/ast-helpers@1.4.0-alpha.363 - @patternfly/documentation-framework@6.40.0 --- packages/ast-helpers/CHANGELOG.md | 11 +++++++++++ packages/ast-helpers/package.json | 2 +- packages/documentation-framework/CHANGELOG.md | 11 +++++++++++ packages/documentation-framework/package.json | 2 +- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/ast-helpers/CHANGELOG.md b/packages/ast-helpers/CHANGELOG.md index f0d2e8c4cc..5c4a564155 100644 --- a/packages/ast-helpers/CHANGELOG.md +++ b/packages/ast-helpers/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 1.4.0-alpha.363 (2026-05-12) + + +### Features + +* bump design-tokens package ([#5002](https://github.com/patternfly/patternfly-org/issues/5002)) ([0e2739b](https://github.com/patternfly/patternfly-org/commit/0e2739b49906f17a0a964d67ba603cbe45a3af77)) + + + + + # 1.4.0-alpha.362 (2026-05-11) diff --git a/packages/ast-helpers/package.json b/packages/ast-helpers/package.json index f008348efd..600fba74dd 100644 --- a/packages/ast-helpers/package.json +++ b/packages/ast-helpers/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/ast-helpers", "description": "Acorn AST helpers for working with live code", - "version": "1.4.0-alpha.362", + "version": "1.4.0-alpha.363", "author": "Red Hat", "license": "MIT", "publishConfig": { diff --git a/packages/documentation-framework/CHANGELOG.md b/packages/documentation-framework/CHANGELOG.md index 42b48397e3..a912837c30 100644 --- a/packages/documentation-framework/CHANGELOG.md +++ b/packages/documentation-framework/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 6.40.0 (2026-05-12) + + +### Features + +* bump design-tokens package ([#5002](https://github.com/patternfly/patternfly-org/issues/5002)) ([0e2739b](https://github.com/patternfly/patternfly-org/commit/0e2739b49906f17a0a964d67ba603cbe45a3af77)) + + + + + ## 6.39.2 (2026-05-11) diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 1ffaf8f5bf..6a1cbd75a1 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/documentation-framework", "description": "A framework to build documentation for PatternFly.", - "version": "6.39.2", + "version": "6.40.0", "author": "Red Hat", "license": "MIT", "bin": { From 54580e6a263c9a5f9bada0d8939867c27c3783be Mon Sep 17 00:00:00 2001 From: Nicole Thoen Date: Tue, 12 May 2026 09:21:39 -0400 Subject: [PATCH 12/29] fix: move generative AI docs and bump PF versions (#5007) * fix: move generative AI docs and bump PF versions * exclude compass demos' new location from ssr build * chore: remove stray patternfly-ai/components compass screenshots Co-authored-by: Cursor * rebase after CompassPanel removed * Update packages/documentation-site/patternfly-docs/content/components/components-data.json Co-authored-by: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> * Update packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/ReactFlow.md Co-authored-by: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> --------- Co-authored-by: Cursor Co-authored-by: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> --- package.json | 14 +- .../tableOfContents/tableOfContents.css | 4 +- .../layouts/sideNavLayout/sideNavLayout.js | 8 +- packages/documentation-framework/package.json | 10 +- packages/documentation-framework/routes.js | 1 + .../scripts/webpack/getHtmlWebpackPlugins.js | 2 +- .../documentation-framework/versions.json | 56 +++- packages/documentation-site/package.json | 12 +- .../AI/Compass/CompassIntegrationsDemo.d.ts | 3 - .../AI/Compass/CompassIntegrationsDemo.js | 267 ------------------ .../AI/Compass/assets/RHAiExperienceIcon.d.ts | 3 - .../AI/Compass/assets/RHAiExperienceIcon.js | 5 - .../AI/Compass/assets/RHAutomationsLogo.d.ts | 3 - .../AI/Compass/assets/RHAutomationsLogo.js | 5 - .../AI/Compass/assets/RHServerStackIcon.d.ts | 3 - .../AI/Compass/assets/RHServerStackIcon.js | 5 - .../AnimationsOverviewClusterInventory.d.ts | 3 - .../AnimationsOverviewClusterInventory.js | 39 --- .../AnimationsOverviewMemoryUtilization.d.ts | 3 - .../AnimationsOverviewMemoryUtilization.js | 41 --- .../AnimationsOverviewNetworkActivity.d.ts | 3 - .../AnimationsOverviewNetworkActivity.js | 49 ---- .../cards/AnimationsOverviewStorage.d.ts | 3 - .../cards/AnimationsOverviewStorage.js | 33 --- .../AI/Compass/cards/ClusterDetailsCard.d.ts | 3 - .../AI/Compass/cards/ClusterDetailsCard.js | 8 - .../AI/Compass/cards/RecentActivityCard.d.ts | 3 - .../AI/Compass/cards/RecentActivityCard.js | 52 ---- .../content/AI/Compass/dashboard.d.ts | 2 - .../content/AI/Compass/dashboard.js | 53 ---- .../content/AI/Compass/declarations.d.ts | 13 - .../content/AI/Compass/declarations.js | 1 - .../patternfly-docs/content/AI/ai.md | 2 +- .../AI/generative-uis/about-generative-ui.md | 90 ------ .../compass/.gitignore | 0 .../compass/Compass.md | 23 +- .../compass}/CompassHandbook.md | 30 +- .../compass/CompassIntegrationsDemo.tsx | 0 .../compass/assets/RHAiExperienceIcon.tsx | 0 .../compass/assets/RHAutomationsLogo.tsx | 0 .../compass/assets/RHServerStackIcon.tsx | 0 .../compass/assets/avatar.jpg | Bin .../compass/assets/hero-bg.png | Bin .../compass/assets/wallpaper-dark.png | Bin .../compass/assets/wallpaper-light.png | Bin .../AnimationsOverviewClusterInventory.tsx | 0 .../AnimationsOverviewMemoryUtilization.tsx | 0 .../AnimationsOverviewNetworkActivity.tsx | 0 .../cards/AnimationsOverviewStorage.tsx | 0 .../compass/cards/ClusterDetailsCard.tsx | 0 .../compass/cards/RecentActivityCard.tsx | 0 .../compass/dashboard.tsx | 0 .../compass/declarations.ts | 0 .../compass/tsconfig.json | 0 .../content/components/components-data.json | 4 + .../react-flow}/CompassReactFlowDemo.d.ts | 0 .../react-flow}/CompassReactFlowDemo.js | 2 +- .../react-flow}/CompassReactFlowDemo.tsx | 0 .../react-flow}/ReactFlow.md | 6 +- .../react-flow}/reactFlowOverrides.css | 0 .../developer-guides/react-flow/tsconfig.json | 24 ++ .../compass/html-demos/card-view.png | Bin 139302 -> 0 bytes .../compass/html-demos/dashboard.png | Bin 430623 -> 0 bytes .../compass/html-demos/multiple-sections.png | Bin 169644 -> 0 bytes .../compass/html-demos/with-drawer.png | Bin 116317 -> 0 bytes .../org-demos/card-and-data-view-layout.png | Bin 163859 -> 0 bytes .../compass/org-demos/dashboard-layout.png | Bin 270650 -> 0 bytes .../compass/react-demos/compass-layout.png | Bin 19851 -> 0 bytes .../compass/react-demos/docked-nav-demo.png | Bin 9053 -> 0 bytes .../about-modal/html-demos/basic.png | Bin 44317 -> 43681 bytes .../inline-alert-in-horizontal-form.png | Bin 28607 -> 28687 bytes .../inline-alert-in-stacked-form.png | Bin 30265 -> 30339 bytes .../components/alert/html-demos/toast.png | Bin 33782 -> 32705 bytes .../alert/html/toast-alert-group.png | Bin 18969 -> 18940 bytes ...t-group-toast-with-notification-drawer.png | Bin 38759 -> 38926 bytes .../back-to-top/html-demos/basic.png | Bin 55320 -> 50417 bytes .../react-demos/using-name-selector.png | Bin 200773 -> 200120 bytes .../components/banner/html-demos/basic.png | Bin 57123 -> 52179 bytes .../banner/html-demos/topbottom.png | Bin 57658 -> 52702 bytes .../react-demos/basic-sticky-banner.png | Bin 45473 -> 42147 bytes .../react-demos/top-and-bottom-banner.png | Bin 48842 -> 45754 bytes .../compass/html-demos/card-view.png | Bin 0 -> 119644 bytes .../compass/html-demos/dashboard.png | Bin 0 -> 146920 bytes .../docked-nav---expanded-on-mobile.png | Bin 0 -> 20359 bytes ...nav-text-expanded---expanded-on-mobile.png | Bin 0 -> 25419 bytes .../html-demos/docked-nav-text-expanded.png | Bin 0 -> 25419 bytes .../compass/html-demos/docked-nav.png | Bin 0 -> 20359 bytes .../compass/html-demos/docked.png | Bin .../compass/html-demos/multiple-sections.png | Bin 0 -> 136109 bytes .../compass/html-demos/with-drawer.png | Bin 0 -> 108205 bytes .../org-demos/card-and-data-view-layout.png | Bin 0 -> 74886 bytes .../compass/org-demos/dashboard-layout.png | Bin 0 -> 118410 bytes .../compass/react-demos/compass-layout.png | Bin 0 -> 48502 bytes .../compass/react-demos/docked-nav-demo.png | Bin 0 -> 18394 bytes .../compass/react/demo.png | Bin .../data-list/html-demos/actionable.png | Bin 37309 -> 37291 bytes .../components/data-list/html-demos/basic.png | Bin 40758 -> 40753 bytes .../data-list/html-demos/expandable-demo.png | Bin 54960 -> 54867 bytes .../html-demos/static-bottom-pagination.png | Bin 42694 -> 42684 bytes .../data-list/react-demos/actionable.png | Bin 21406 -> 21614 bytes .../data-list/react-demos/basic.png | Bin 39040 -> 39100 bytes .../expandable-control-in-toolbar.png | Bin 42247 -> 42408 bytes .../react-demos/static-bottom-pagination.png | Bin 48092 -> 48051 bytes .../description-list/html-demos/basic.png | Bin 23587 -> 23489 bytes .../html-demos/complex-content.png | Bin 31415 -> 31406 bytes .../description-list/html-demos/in-drawer.png | Bin 46773 -> 45948 bytes .../description-list/react-demos/basic.png | Bin 23931 -> 23888 bytes .../react-demos/in-drawer.png | Bin 48955 -> 46322 bytes .../collapsed-drawer-with-jump-links.png | Bin 156007 -> 156022 bytes .../drawer/html-demos/collapsed.png | Bin 21577 -> 20804 bytes .../drawer/html-demos/expanded-bottom.png | Bin 22527 -> 21776 bytes .../expanded-drawer-with-jump-links.png | Bin 125924 -> 125930 bytes .../components/drawer/html-demos/expanded.png | Bin 21636 -> 21008 bytes .../html-demos/horizontal-jump-links.png | Bin 147989 -> 148045 bytes .../html-demos/jump-links-in-drawer.png | Bin 156007 -> 156022 bytes .../jump-links-in-expanded-drawer.png | Bin 125924 -> 125930 bytes ...ertical-jump-links-collapsed-on-mobile.png | Bin 159011 -> 159101 bytes ...vertical-jump-links-expanded-on-mobile.png | Bin 159011 -> 159101 bytes ...tical-jump-links-toggle-text-on-mobile.png | Bin 159011 -> 159101 bytes .../scrollspy-with-subsections.png | Bin 118386 -> 118530 bytes .../jump-links/react-demos/with-drawer.png | Bin 139338 -> 139501 bytes .../components/login-page/html/basic.png | Bin 30705 -> 30580 bytes .../login-page/html/hide-password.png | Bin 31279 -> 31115 bytes .../components/login-page/html/invalid.png | Bin 32225 -> 32089 bytes .../login-page/html/show-password.png | Bin 31083 -> 30952 bytes .../html/with-language-selector.png | Bin 31113 -> 30957 bytes .../components/login-page/react/basic.png | Bin 30045 -> 29880 bytes .../login-page/react/showhide-password.png | Bin 30339 -> 30183 bytes .../react/with-header-utilities.png | Bin 30671 -> 30534 bytes ...advanced-integration-with-menu-options.png | Bin 21577 -> 20804 bytes .../components/masthead/html-demos/basic.png | Bin 21275 -> 20420 bytes .../masthead/html-demos/horizontal-nav.png | Bin 21139 -> 20639 bytes .../with-context-selector-and-dropdown.png | Bin 22771 -> 21692 bytes .../with-expandable-search-collapsed.png | Bin 21328 -> 20488 bytes .../with-expandable-search-expanded.png | Bin 21729 -> 20998 bytes .../with-toggle-group-and-filters.png | Bin 22580 -> 21543 bytes ...ers-expandable-content-expanded-mobile.png | Bin 20598 -> 19618 bytes .../html-demos/with-toolbar-filters.png | Bin 22580 -> 21543 bytes .../masthead/react-demos/horizontal-nav.png | Bin 23896 -> 22723 bytes .../utilities-and-user-dropdown-menu.png | Bin 22656 -> 21640 bytes .../components/modal/html-demos/basic.png | Bin 32087 -> 31550 bytes .../components/modal/html-demos/large.png | Bin 38309 -> 37784 bytes .../components/modal/html-demos/medium.png | Bin 36510 -> 35954 bytes .../modal/html-demos/modal-with-form.png | Bin 29836 -> 29152 bytes .../modal/html-demos/scrollable-content.png | Bin 80536 -> 79820 bytes .../modal/html-demos/top-aligned.png | Bin 31200 -> 30144 bytes .../generated/components/modal/html/basic.png | Bin 10025 -> 10029 bytes .../components/modal/html/custom-alert.png | Bin 7083 -> 7086 bytes .../components/modal/html/custom-title.png | Bin 11635 -> 11635 bytes ...ger-alert-with-modifier-on-modal-title.png | Bin 11337 -> 11340 bytes .../components/modal/html/danger-alert.png | Bin 11337 -> 11340 bytes .../generated/components/modal/html/icon.png | Bin 6687 -> 6691 bytes .../components/modal/html/info-alert.png | Bin 6859 -> 6866 bytes .../generated/components/modal/html/large.png | Bin 15083 -> 15088 bytes .../components/modal/html/medium.png | Bin 15143 -> 15150 bytes .../html/modal-box-as-generic-container.png | Bin 8521 -> 8518 bytes .../generated/components/modal/html/small.png | Bin 15326 -> 15325 bytes .../components/modal/html/success-alert.png | Bin 7208 -> 7212 bytes .../components/modal/html/warning-alert.png | Bin 7147 -> 7152 bytes .../modal/html/with-description.png | Bin 15091 -> 15090 bytes .../modal/html/with-help-button.png | Bin 20208 -> 20210 bytes .../components/modal/html/without-title.png | Bin 21691 -> 21700 bytes .../navigation/html-demos/default-nav.png | Bin 21577 -> 20804 bytes .../docked-nav---expanded-on-mobile.png | Bin 17091 -> 16208 bytes ...nav-text-expanded---expanded-on-mobile.png | Bin 19542 -> 18784 bytes .../html-demos/docked-nav-text-expanded.png | Bin 19522 -> 18784 bytes .../navigation/html-demos/docked-nav.png | Bin 17079 -> 16208 bytes .../navigation/html-demos/expandable-nav.png | Bin 24000 -> 22998 bytes .../navigation/html-demos/grouped-nav.png | Bin 24741 -> 23728 bytes .../horizontal-nav-with-horizontal-subnav.png | Bin 23703 -> 22828 bytes .../navigation/html-demos/horizontal-nav.png | Bin 21139 -> 20639 bytes .../html-demos/horizontal-subnav.png | Bin 24018 -> 22741 bytes .../navigation/react-demos/default-nav.png | Bin 26216 -> 25244 bytes .../navigation/react-demos/docked-nav.png | Bin 0 -> 16778 bytes .../navigation/react-demos/drilldown-nav.png | Bin 9502 -> 9485 bytes .../navigation/react-demos/expandable-nav.png | Bin 28595 -> 27716 bytes .../navigation/react-demos/flyout-nav.png | Bin 10824 -> 10792 bytes .../navigation/react-demos/grouped-nav.png | Bin 20978 -> 20966 bytes .../horizontal-nav-with-horizontal-subnav.png | Bin 34934 -> 33906 bytes .../navigation/react-demos/horizontal-nav.png | Bin 25635 -> 24604 bytes .../react-demos/horizontal-subnav.png | Bin 33455 -> 32456 bytes .../navigation/react-demos/manual-nav.png | Bin 23798 -> 22663 bytes .../html-demos/collapsed.png | Bin 21889 -> 21122 bytes .../html-demos/expanded-attention.png | Bin 72714 -> 71782 bytes .../html-demos/expanded-read.png | Bin 68883 -> 67749 bytes .../html-demos/expanded-unread.png | Bin 69878 -> 68959 bytes .../html-demos/expanded-with-groups.png | Bin 68161 -> 67200 bytes .../notification-drawer/react-demos/basic.png | Bin 19191 -> 19305 bytes .../react-demos/grouped.png | Bin 19191 -> 19305 bytes .../react/breakpoint-on-container-height.png | Bin 0 -> 9465 bytes .../components/page/html-demos/basic.png | Bin 21577 -> 20804 bytes .../page/html-demos/centered-section.png | Bin 31444 -> 30250 bytes .../context-selector-expanded-in-sidebar.png | Bin 23862 -> 22649 bytes .../context-selector-in-sidebar.png | Bin 22573 -> 21481 bytes .../multiple-sidebar-body-elements.png | Bin 24741 -> 23684 bytes .../html-demos/no-sidebar-or-masthead.png | Bin 14869 -> 14211 bytes .../components/page/html-demos/no-sidebar.png | Bin 18046 -> 17311 bytes .../page/html-demos/overflow-scroll.png | Bin 61094 -> 56519 bytes .../page/html-demos/sidebar-collapsed.png | Bin 18911 -> 17311 bytes .../page/html-demos/sidebar-expanded.png | Bin 21577 -> 20804 bytes .../sticky-breadcrumb-on-medium.png | Bin 53496 -> 48539 bytes .../page/html-demos/sticky-breadcrumb.png | Bin 53496 -> 48539 bytes .../html-demos/sticky-horizontal-subnav.png | Bin 52785 -> 48032 bytes .../page/html-demos/sticky-section-bottom.png | Bin 61016 -> 56410 bytes .../page/html-demos/sticky-section-group.png | Bin 53991 -> 49111 bytes ...electorperspective-switcher-in-sidebar.png | Bin 55446 -> 50504 bytes ...ky-section-breadcrumb-with-breakpoints.png | Bin 54310 -> 49356 bytes .../sticky-section-group-alternate-syntax.png | Bin 54791 -> 49920 bytes .../page/react-demos/sticky-section-group.png | Bin 54791 -> 49920 bytes .../react/dynamic-sticky-bottom.png | Bin 0 -> 21827 bytes .../pagination/react/dynamic-sticky-top.png | Bin 0 -> 21722 bytes .../components/pagination/react/sticky.png | Bin 61271 -> 55864 bytes .../components/popover/html/bottom-left.png | Bin 6234 -> 6238 bytes .../components/popover/html/bottom-right.png | Bin 6221 -> 6223 bytes .../components/popover/html/bottom.png | Bin 6907 -> 6907 bytes .../popover/html/custom-alert-popover.png | Bin 7288 -> 7288 bytes .../popover/html/danger-alert-popover.png | Bin 7473 -> 7475 bytes .../popover/html/info-alert-popover.png | Bin 7305 -> 7305 bytes .../components/popover/html/left-bottom.png | Bin 6104 -> 6106 bytes .../components/popover/html/left.png | Bin 6900 -> 6901 bytes .../components/popover/html/no-padding.png | Bin 7976 -> 7977 bytes .../html/popover-with-icon-in-the-title.png | Bin 7349 -> 7350 bytes .../components/popover/html/right.png | Bin 6962 -> 6962 bytes .../popover/html/success-alert-popover.png | Bin 7477 -> 7476 bytes .../generated/components/popover/html/top.png | Bin 7008 -> 7009 bytes .../popover/html/warning-alert-popover.png | Bin 7494 -> 7494 bytes .../components/popover/html/width-auto.png | Bin 5158 -> 5157 bytes .../popover/html/without-headerfooter.png | Bin 5374 -> 5373 bytes .../skeleton/html-demos/skeleton-card.png | Bin 23696 -> 23161 bytes .../skeleton/react-demos/skeleton-card.png | Bin 24118 -> 23687 bytes .../components/table/html-demos/basic.png | Bin 39243 -> 38887 bytes .../html-demos/cell-with-image-alignment.png | Bin 27986 -> 27940 bytes .../html-demos/column-management-modal.png | Bin 45161 -> 44690 bytes .../components/table/html-demos/compact.png | Bin 34207 -> 34169 bytes .../table/html-demos/compound-expansion.png | Bin 40853 -> 40736 bytes .../container-query-with-drawer.png | Bin 60701 -> 59788 bytes .../table/html-demos/empty-state.png | Bin 23208 -> 23278 bytes .../table/html-demos/expandable.png | Bin 45721 -> 45456 bytes .../table/html-demos/loading-state-demo.png | Bin 17502 -> 17575 bytes .../components/table/html-demos/sortable.png | Bin 40771 -> 40606 bytes .../html-demos/static-bottom-pagination.png | Bin 38707 -> 38233 bytes .../table/html-demos/sticky-first-column.png | Bin 57329 -> 73462 bytes .../sticky-header-and-last-column.png | Bin 56782 -> 71244 bytes .../sticky-header-and-multiple-columns.png | Bin 57848 -> 69594 bytes .../table/html-demos/sticky-header.png | Bin 38719 -> 53042 bytes .../html-demos/sticky-multiple-columns.png | Bin 57795 -> 69565 bytes .../react-demos/automatic-pagination.png | Bin 22415 -> 22387 bytes .../table/react-demos/bulk-select.png | Bin 29931 -> 29984 bytes .../column-management-with-draggable.png | Bin 55220 -> 55059 bytes .../table/react-demos/column-management.png | Bin 55220 -> 55059 bytes .../components/table/react-demos/compact.png | Bin 52194 -> 52011 bytes .../table/react-demos/compound-expansion.png | Bin 36390 -> 36394 bytes .../components/table/react-demos/empty.png | Bin 23049 -> 23203 bytes .../components/table/react-demos/error.png | Bin 22740 -> 22898 bytes .../table/react-demos/expandcollapse-all.png | Bin 29472 -> 29598 bytes .../table/react-demos/filterable.png | Bin 44373 -> 43942 bytes .../components/table/react-demos/loading.png | Bin 18160 -> 18290 bytes .../react-demos/sortable---responsive.png | Bin 78772 -> 78151 bytes .../static-bottom-pagination-on-mobile.png | Bin 54270 -> 54056 bytes ...sticky-columns-and-header-with-toolbar.png | Bin 29019 -> 28825 bytes .../table/react-demos/sticky-first-column.png | Bin 70018 -> 69962 bytes .../table/react-demos/sticky-header.png | Bin 64101 -> 63734 bytes .../components/tabs/html-demos/modal-tabs.png | Bin 36807 -> 36566 bytes .../tabs/html-demos/nested-tabs.png | Bin 39965 -> 39785 bytes .../html-demos/nested-unindented-tabs.png | Bin 36613 -> 36205 bytes .../open-tabs-with-secondary-tabs.png | Bin 30144 -> 30149 bytes .../components/tabs/html-demos/open-tabs.png | Bin 33432 -> 33474 bytes .../tabs/html-demos/tables-and-tabs.png | Bin 48514 -> 48236 bytes .../tabs/react-demos/modal-tabs.png | Bin 39381 -> 39348 bytes .../tabs/react-demos/nested-tabs.png | Bin 40593 -> 40386 bytes .../react-demos/nested-unindented-tabs.png | Bin 36868 -> 36615 bytes .../open-tabs-with-secondary-tabs.png | Bin 39184 -> 39543 bytes .../components/tabs/react-demos/open-tabs.png | Bin 37986 -> 38204 bytes .../tabs/react-demos/tables-and-tabs.png | Bin 46693 -> 46606 bytes ...oolbar-pagination-management-on-mobile.png | Bin 36222 -> 35703 bytes .../toolbar-with-validation-on-desktop.png | Bin 39911 -> 39476 bytes .../console-log-viewer-toolbar-demo.png | Bin 17762 -> 17921 bytes .../components/wizard/html-demos/basic.png | Bin 34837 -> 34152 bytes .../in-page-nav-expanded-mobile.png | Bin 27252 -> 27328 bytes .../components/wizard/html-demos/in-page.png | Bin 27252 -> 27328 bytes .../wizard/html-demos/nav-expanded-mobile.png | Bin 34837 -> 34152 bytes .../with-drawer-and-informational-step.png | Bin 37121 -> 36483 bytes .../wizard/html-demos/with-drawer-closed.png | Bin 34837 -> 34152 bytes .../html-demos/with-drawer-expanded.png | Bin 64431 -> 63768 bytes .../with-drawer-in-page-expanded.png | Bin 74412 -> 74239 bytes .../wizard/html-demos/with-drawer-in-page.png | Bin 27252 -> 27328 bytes .../components/wizard/html/basic.png | Bin 18785 -> 18713 bytes .../components/wizard/html/error-on-step.png | Bin 18759 -> 18695 bytes .../wizard/html/expandable-collapsed.png | Bin 17017 -> 16985 bytes .../wizard/html/expandable-expanded.png | Bin 18785 -> 18735 bytes .../components/wizard/html/finished.png | Bin 16614 -> 16252 bytes .../wizard/html/nav-expanded-mobile.png | Bin 18785 -> 18735 bytes .../html/nav-expanded-with-error-mobile.png | Bin 18759 -> 18695 bytes .../html/nav-expanded-with-success-mobile.png | Bin 18783 -> 18721 bytes .../html/nav-expanded-with-warning-mobile.png | Bin 18743 -> 18681 bytes .../components/wizard/html/plain.png | Bin 18150 -> 18118 bytes .../wizard/html/success-on-step.png | Bin 18783 -> 18721 bytes .../wizard/html/warning-on-step.png | Bin 18743 -> 18681 bytes .../components/wizard/html/with-drawer.png | Bin 21173 -> 20910 bytes ...dal-with-drawer-and-informational-step.png | Bin 25214 -> 25171 bytes .../react-demos/in-modal-with-drawer.png | Bin 19449 -> 19390 bytes .../wizard/react-demos/in-modal.png | Bin 31723 -> 31421 bytes ...age-with-drawer-and-informational-step.png | Bin 25795 -> 25837 bytes .../react-demos/in-page-with-drawer.png | Bin 22930 -> 22937 bytes .../components/wizard/react-demos/in-page.png | Bin 23407 -> 23527 bytes .../catalog-view/overview/react/demo.png | Bin 64953 -> 64334 bytes ...ach-via-menu-of-options-in-message-bar.png | Bin 22958 -> 22858 bytes ...ttach-via-upload-button-in-message-bar.png | Bin 29004 -> 29016 bytes .../messages/demo/message-auto-scrolling.png | Bin 30382 -> 30155 bytes .../chatbot/overview/demo/basic-chatbot.png | Bin 30382 -> 30175 bytes .../overview/demo/chat-transcripts.png | Bin 30382 -> 30155 bytes .../chatbot/overview/demo/compact-chatbot.png | Bin 37572 -> 37400 bytes .../overview/demo/comparing-chatbots.png | Bin 17898 -> 17830 bytes .../overview/demo/display-mode-switcher.png | Bin 28474 -> 28202 bytes .../overview/demo/embedded-chatbot.png | Bin 48241 -> 48017 bytes .../overview/demo/inline-drawer-chatbot.png | Bin 39572 -> 39240 bytes .../demo/primary-color-background.png | Bin 45146 -> 44945 bytes .../chatbot/ui/react/compact-onboarding.png | Bin 19464 -> 19464 bytes .../chatbot/ui/react/compact-settings.png | Bin 16719 -> 16636 bytes .../chatbot/ui/react/compact-terms-of-use.png | Bin 51012 -> 50942 bytes .../chatbot/ui/react/custom-toggle-icon.png | Bin 3518 -> 3527 bytes .../extensions/chatbot/ui/react/modal.png | Bin 7322 -> 7322 bytes .../chatbot/ui/react/onboarding.png | Bin 52981 -> 52982 bytes .../extensions/chatbot/ui/react/settings.png | Bin 18284 -> 18203 bytes .../chatbot/ui/react/terms-of-use.png | Bin 47670 -> 47604 bytes .../chatbot/ui/react/welcome-message.png | Bin 12755 -> 12732 bytes .../fullscreen-catalog-page.png | Bin 31290 -> 30779 bytes .../quick-starts-with-custom-drawer.png | Bin 33977 -> 33449 bytes .../fullscreen-help-topic.png | Bin 17097 -> 16849 bytes .../react-console/react/basic-usage.png | Bin 5926 -> 5926 bytes .../motion/demo/animated-ui.png | Bin 85872 -> 85085 bytes .../sizing/html/height-viewport-units.png | Bin 18113 -> 15192 bytes .../sizing/html/width-viewport-units.png | Bin 11556 -> 10136 bytes .../compass/html-demos/card-view.png | Bin .../compass/html-demos/dashboard.png | Bin .../compass/html-demos/multiple-sections.png | Bin .../compass/html-demos/with-drawer.png | Bin .../org-demos/card-and-data-view-layout.png | Bin .../compass/org-demos/dashboard-layout.png | Bin .../compass/react/demo.png | Bin .../card-view/html-demos/card-view.png | Bin 87839 -> 89744 bytes .../card-view/react-demos/card-view.png | Bin 83253 -> 82380 bytes .../patterns/dashboard/html-demos/basic.png | Bin 84622 -> 83884 bytes .../html-demos/inline-modifier.png | Bin 52478 -> 52362 bytes ...tail-card-data-list-expanded-on-mobile.png | Bin 39736 -> 39259 bytes ...il-card-simple-list-expanded-on-mobile.png | Bin 31651 -> 31476 bytes .../primary-detail-card-view-expanded.png | Bin 91672 -> 90908 bytes .../html-demos/primary-detail-collapsed.png | Bin 41425 -> 41377 bytes .../primary-detail-content-body-padding.png | Bin 51553 -> 51522 bytes .../html-demos/primary-detail-expanded.png | Bin 53511 -> 53443 bytes .../react-demos/primary-detail-card-view.png | Bin 90267 -> 89471 bytes .../primary-detail-content-padding.png | Bin 41934 -> 42007 bytes .../primary-detail-data-list-in-card.png | Bin 26762 -> 26503 bytes .../react-demos/primary-detail-full-page.png | Bin 41936 -> 42042 bytes .../primary-detail-inline-modifier.png | Bin 41936 -> 42042 bytes .../primary-detail-simple-list-in-card.png | Bin 23572 -> 23564 bytes .../react-demos/paginated-table.png | Bin 56811 -> 56776 bytes yarn.lock | 212 +++++++------- 358 files changed, 240 insertions(+), 863 deletions(-) delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.d.ts delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.js delete mode 100644 packages/documentation-site/patternfly-docs/content/AI/generative-uis/about-generative-ui.md rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/.gitignore (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/Compass.md (80%) rename packages/documentation-site/patternfly-docs/content/{AI/Compass => components/compass}/CompassHandbook.md (86%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/CompassIntegrationsDemo.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/RHAiExperienceIcon.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/RHAutomationsLogo.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/RHServerStackIcon.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/avatar.jpg (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/hero-bg.png (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/wallpaper-dark.png (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/assets/wallpaper-light.png (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/cards/AnimationsOverviewClusterInventory.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/cards/AnimationsOverviewMemoryUtilization.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/cards/AnimationsOverviewNetworkActivity.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/cards/AnimationsOverviewStorage.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/cards/ClusterDetailsCard.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/cards/RecentActivityCard.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/dashboard.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/declarations.ts (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis => components}/compass/tsconfig.json (100%) rename packages/documentation-site/patternfly-docs/content/{AI/Compass => developer-guides/react-flow}/CompassReactFlowDemo.d.ts (100%) rename packages/documentation-site/patternfly-docs/content/{AI/Compass => developer-guides/react-flow}/CompassReactFlowDemo.js (98%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis/compass => developer-guides/react-flow}/CompassReactFlowDemo.tsx (100%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis/compass => developer-guides/react-flow}/ReactFlow.md (88%) rename packages/documentation-site/patternfly-docs/content/{AI/generative-uis/compass => developer-guides/react-flow}/reactFlowOverrides.css (100%) create mode 100644 packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/tsconfig.json delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/card-view.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/dashboard.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/multiple-sections.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/with-drawer.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/org-demos/card-and-data-view-layout.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/org-demos/dashboard-layout.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/react-demos/compass-layout.png delete mode 100644 packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/react-demos/docked-nav-demo.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/card-view.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/dashboard.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/docked-nav---expanded-on-mobile.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/docked-nav-text-expanded---expanded-on-mobile.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/docked-nav-text-expanded.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/docked-nav.png rename packages/documentation-site/patternfly-docs/generated/{ai/generative-uis => components}/compass/html-demos/docked.png (100%) create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/multiple-sections.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/html-demos/with-drawer.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/org-demos/card-and-data-view-layout.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/org-demos/dashboard-layout.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/react-demos/compass-layout.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/compass/react-demos/docked-nav-demo.png rename packages/documentation-site/patternfly-docs/generated/{ai/generative-uis => components}/compass/react/demo.png (100%) create mode 100644 packages/documentation-site/patternfly-docs/generated/components/navigation/react-demos/docked-nav.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/overflow-menu/react/breakpoint-on-container-height.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/pagination/react/dynamic-sticky-bottom.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/pagination/react/dynamic-sticky-top.png rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/html-demos/card-view.png (100%) rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/html-demos/dashboard.png (100%) rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/html-demos/multiple-sections.png (100%) rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/html-demos/with-drawer.png (100%) rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/org-demos/card-and-data-view-layout.png (100%) rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/org-demos/dashboard-layout.png (100%) rename packages/documentation-site/patternfly-docs/generated/patternfly-ai/{generative-uis => components}/compass/react/demo.png (100%) diff --git a/package.json b/package.json index dd9ac4fda7..1cc0f6bda2 100644 --- a/package.json +++ b/package.json @@ -39,10 +39,10 @@ }, "devDependencies": { "@octokit/rest": "^19.0.13", - "@patternfly/patternfly": "^6.5.0-prerelease.81", - "@patternfly/react-code-editor": "^6.5.0-prerelease.68", - "@patternfly/react-core": "^6.5.0-prerelease.65", - "@patternfly/react-table": "^6.5.0-prerelease.68", + "@patternfly/patternfly": "^6.5.0-prerelease.86", + "@patternfly/react-code-editor": "^6.5.0-prerelease.77", + "@patternfly/react-core": "^6.5.0-prerelease.74", + "@patternfly/react-table": "^6.5.0-prerelease.78", "glob": "^8.1.0", "lerna": "^9.0.5", "monaco-editor": "0.54.0", @@ -74,9 +74,9 @@ "ajv": ">=6.14.0", "qs": ">=6.15.0", "@isaacs/brace-expansion": ">=5.0.1", - "@patternfly/react-code-editor": "^6.5.0-prerelease.68", - "@patternfly/react-core": "^6.5.0-prerelease.65", - "@patternfly/react-table": "^6.5.0-prerelease.68", + "@patternfly/react-code-editor": "^6.5.0-prerelease.77", + "@patternfly/react-core": "^6.5.0-prerelease.74", + "@patternfly/react-table": "^6.5.0-prerelease.78", "monaco-editor": "0.54.0" } } diff --git a/packages/documentation-framework/components/tableOfContents/tableOfContents.css b/packages/documentation-framework/components/tableOfContents/tableOfContents.css index ca4b90b1df..8676e319e1 100644 --- a/packages/documentation-framework/components/tableOfContents/tableOfContents.css +++ b/packages/documentation-framework/components/tableOfContents/tableOfContents.css @@ -2,7 +2,7 @@ align-self: flex-start; position: sticky; width: calc(100% + var(--pf-v6-c-page__main-section--PaddingInlineStart) + var(--pf-v6-c-page__main-section--PaddingInlineEnd)); - background-color: var(--pf-t--global--background--color--secondary--default); + background-color: var(--pf-t--global--background--color--sticky--default); z-index: 201; margin-block-start: calc(var(--pf-v6-c-page__main-section--PaddingTop) * -1); margin-block-end: var(--pf-t--global--spacer--md); @@ -19,7 +19,7 @@ box-shadow: var(--pf-t--global--box-shadow--sm--bottom) } -.ws-toc .pf-v6-c-jump-links__toggle { +.ws-toc .pf-v6-c-jump-links__toggle button { background-color: var(--pf-t--global--background--color--secondary--default); } diff --git a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js index 9b4c6ef20b..38b76252ef 100644 --- a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js +++ b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js @@ -265,11 +265,9 @@ export const SideNavLayout = ({ children, groupedRoutes, navOpen: navOpenProp }) const SideBar = ( -
{/** TODO: fix with updated React components after https://redhat.atlassian.net/browse/PF-3728 merges */} - - - -
+ + +
); diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 6a1cbd75a1..4c78a3521e 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -68,11 +68,11 @@ "webpack-merge": "5.10.0" }, "peerDependencies": { - "@patternfly/patternfly": "^6.5.0-prerelease.81", - "@patternfly/react-code-editor": "^6.5.0-prerelease.68", - "@patternfly/react-core": "^6.5.0-prerelease.65", - "@patternfly/react-icons": "^6.5.0-prerelease.29", - "@patternfly/react-table": "^6.5.0-prerelease.68", + "@patternfly/patternfly": "^6.5.0-prerelease.86", + "@patternfly/react-code-editor": "^6.5.0-prerelease.77", + "@patternfly/react-core": "^6.5.0-prerelease.74", + "@patternfly/react-icons": "^6.5.0-prerelease.34", + "@patternfly/react-table": "^6.5.0-prerelease.78", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, diff --git a/packages/documentation-framework/routes.js b/packages/documentation-framework/routes.js index c14223c5df..b90a7a19fa 100644 --- a/packages/documentation-framework/routes.js +++ b/packages/documentation-framework/routes.js @@ -87,6 +87,7 @@ const sourceOrder = { 'upgrade-guide': 101, 'release-notes': 102, 'org-demos': 103, + 'Development-guide': 104, }; const sortSources = ({ source: s1 }, { source: s2 }) => { diff --git a/packages/documentation-framework/scripts/webpack/getHtmlWebpackPlugins.js b/packages/documentation-framework/scripts/webpack/getHtmlWebpackPlugins.js index 66cd51e174..82d6017c52 100644 --- a/packages/documentation-framework/scripts/webpack/getHtmlWebpackPlugins.js +++ b/packages/documentation-framework/scripts/webpack/getHtmlWebpackPlugins.js @@ -18,7 +18,7 @@ async function getHtmlWebpackPlugin({ isProd, googleAnalyticsID, algolia, url, t !url.includes('chatbot') && !url.includes('topology') && !url.includes('extensions') && - !url.includes('generative-uis') + !url.includes('compass') ? await prerender(url) : null, // Don't use GA in dev mode diff --git a/packages/documentation-framework/versions.json b/packages/documentation-framework/versions.json index 08c3ada1a7..14136b1d40 100644 --- a/packages/documentation-framework/versions.json +++ b/packages/documentation-framework/versions.json @@ -1,9 +1,63 @@ { "Releases": [ + { + "name": "6.5.0-prerelease.74", + "date": "2026-05-11", + "latest": true, + "versions": { + "@patternfly/chatbot": "6.6.0-prerelease.6", + "@patternfly/patternfly": "6.5.0-prerelease.86", + "@patternfly/quickstarts": "6.5.0-prerelease.4", + "@patternfly/react-catalog-view-extension": "6.3.0-prerelease.3", + "@patternfly/react-charts": "8.5.0-prerelease.27", + "@patternfly/react-code-editor": "6.5.0-prerelease.77", + "@patternfly/react-component-groups": "6.4.0-prerelease.19", + "@patternfly/react-console": "6.1.0-prerelease.3", + "@patternfly/react-core": "6.5.0-prerelease.74", + "@patternfly/react-data-view": "6.5.0-prerelease.1", + "@patternfly/react-drag-drop": "6.5.0-prerelease.75", + "@patternfly/react-icons": "6.5.0-prerelease.34", + "@patternfly/react-log-viewer": "6.4.0-prerelease.2", + "@patternfly/react-styles": "6.5.0-prerelease.24", + "@patternfly/react-table": "6.5.0-prerelease.78", + "@patternfly/react-templates": "6.5.0-prerelease.74", + "@patternfly/react-tokens": "6.5.0-prerelease.23", + "@patternfly/react-topology": "6.5.0-prerelease.5", + "@patternfly/react-user-feedback": "6.2.0-prerelease.3", + "@patternfly/react-virtualized-extension": "6.2.0" + } + }, + { + "name": "6.5.0-prerelease.72", + "date": "2026-05-08", + "hidden": true, + "versions": { + "@patternfly/chatbot": "6.6.0-prerelease.6", + "@patternfly/patternfly": "6.5.0-prerelease.85", + "@patternfly/quickstarts": "6.5.0-prerelease.4", + "@patternfly/react-catalog-view-extension": "6.3.0-prerelease.3", + "@patternfly/react-charts": "8.5.0-prerelease.26", + "@patternfly/react-code-editor": "6.5.0-prerelease.75", + "@patternfly/react-component-groups": "6.4.0-prerelease.19", + "@patternfly/react-console": "6.1.0-prerelease.3", + "@patternfly/react-core": "6.5.0-prerelease.72", + "@patternfly/react-data-view": "6.5.0-prerelease.1", + "@patternfly/react-drag-drop": "6.5.0-prerelease.73", + "@patternfly/react-icons": "6.5.0-prerelease.33", + "@patternfly/react-log-viewer": "6.4.0-prerelease.2", + "@patternfly/react-styles": "6.5.0-prerelease.23", + "@patternfly/react-table": "6.5.0-prerelease.75", + "@patternfly/react-templates": "6.5.0-prerelease.72", + "@patternfly/react-tokens": "6.5.0-prerelease.22", + "@patternfly/react-topology": "6.5.0-prerelease.5", + "@patternfly/react-user-feedback": "6.2.0-prerelease.3", + "@patternfly/react-virtualized-extension": "6.2.0" + } + }, { "name": "6.5.0-prerelease.49", "date": "2026-04-06", - "latest": true, + "hidden": true, "versions": { "@patternfly/chatbot": "6.6.0-prerelease.6", "@patternfly/patternfly": "6.5.0-prerelease.64", diff --git a/packages/documentation-site/package.json b/packages/documentation-site/package.json index 65a5374024..7ca9a03080 100644 --- a/packages/documentation-site/package.json +++ b/packages/documentation-site/package.json @@ -10,7 +10,7 @@ "build": "yarn build:ts && pf-docs-framework build all", "build:server": "pf-docs-framework build server", "build:client": "pf-docs-framework build client", - "build:ts": "tsc --project patternfly-docs/content/foundations-and-styles/styles/motion/tsconfig.json && tsc --project patternfly-docs/content/AI/generative-uis/compass/tsconfig.json", + "build:ts": "tsc --build patternfly-docs/content/foundations-and-styles/styles/motion/tsconfig.json && tsc --build patternfly-docs/content/components/compass/tsconfig.json && tsc --build patternfly-docs/content/developer-guides/react-flow/tsconfig.json", "clean": "rm -rf .cache public size-plugin.json patternfly-docs/generated/**/*.js", "develop": "yarn build:ts && pf-docs-framework start", "generate": "pf-docs-framework generate", @@ -23,14 +23,14 @@ "@patternfly/documentation-framework": "workspace:*", "@patternfly/quickstarts": "6.5.0-prerelease.4", "@patternfly/react-catalog-view-extension": "6.3.0-prerelease.3", - "@patternfly/react-charts": "8.5.0-prerelease.18", - "@patternfly/react-component-groups": "6.4.0-prerelease.17", + "@patternfly/react-charts": "8.5.0-prerelease.27", + "@patternfly/react-component-groups": "6.4.0-prerelease.19", "@patternfly/react-console": "6.1.0-prerelease.3", "@patternfly/react-data-view": "6.5.0-prerelease.1", - "@patternfly/react-docs": "7.5.0-prerelease.58", - "@patternfly/react-icons": "6.5.0-prerelease.20", + "@patternfly/react-docs": "7.5.0-prerelease.86", + "@patternfly/react-icons": "6.5.0-prerelease.34", "@patternfly/react-log-viewer": "6.4.0-prerelease.2", - "@patternfly/react-topology": "6.5.0-prerelease.4", + "@patternfly/react-topology": "6.5.0-prerelease.5", "@patternfly/react-user-feedback": "6.2.0-prerelease.3", "@patternfly/react-virtualized-extension": "6.2.0", "@xyflow/react": "^12.10.1", diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.d.ts deleted file mode 100644 index 48e568a66a..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; -export declare const CompassIntegrationsDemo: React.FunctionComponent; -//# sourceMappingURL=CompassIntegrationsDemo.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.js deleted file mode 100644 index 6b74c7f195..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassIntegrationsDemo.js +++ /dev/null @@ -1,267 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; -import { useState, useEffect } from 'react'; -import { Compass, CompassHeader, CompassContent, CompassMainHeader, Panel, PanelMain, CompassMessageBar, Tabs, TabsComponent, Tab, TabTitleText, ActionList, ActionListGroup, ActionListItem, Button, Title, Tooltip, Toolbar, ToolbarContent, ToolbarGroup, ToolbarItem, SearchInput, ToggleGroup, ToggleGroupItem, Pagination, DescriptionList, DescriptionListGroup, DescriptionListTerm, DescriptionListDescription, Label, Gallery, Card, CardBody, CardHeader, Content, Dropdown, MenuToggle, DropdownItem, DropdownList, Flex, Avatar, Icon, SkipToContent, Switch, DrawerPanelContent, DrawerHead, DrawerActions, DrawerCloseButton, DrawerPanelBody } from '@patternfly/react-core'; -import { ActionsColumn } from '@patternfly/react-table'; -import { DataViewToolbar } from '@patternfly/react-data-view/dist/dynamic/DataViewToolbar'; -import { DataViewTextFilter } from '@patternfly/react-data-view/dist/dynamic/DataViewTextFilter'; -import { DataViewTable } from '@patternfly/react-data-view/dist/dynamic/DataViewTable'; -import { MessageBar } from '@patternfly/chatbot'; -import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon'; -import OutlinedPlusSquare from '@patternfly/react-icons/dist/esm/icons/outlined-plus-square-icon'; -import OutlinedCopy from '@patternfly/react-icons/dist/esm/icons/outlined-copy-icon'; -import OutlinedQuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/outlined-question-circle-icon'; -import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; -import ThIcon from '@patternfly/react-icons/dist/esm/icons/th-icon'; -import ListIcon from '@patternfly/react-icons/dist/esm/icons/list-icon'; -import pfBackground from '@patternfly/patternfly/assets/images/pf-background.svg'; -import imgAvatar from './assets/avatar.jpg'; -import { RHAutomationsLogo } from './assets/RHAutomationsLogo'; -import { RHAiExperienceIcon } from './assets/RHAiExperienceIcon'; -export const CompassIntegrationsDemo = () => { - const [isThinking, setIsThinking] = useState(false); - const [isDropdownOpen, setIsDropdownOpen] = useState(false); - const [activeDisplay, setActiveDisplay] = useState("table"); - const [isGlassTheme, setIsGlassTheme] = useState(true); - const [isDrawerOpen, setIsDrawerOpen] = useState(false); - const onDrawerToggle = () => { - setIsDrawerOpen(!isDrawerOpen); - }; - useEffect(() => { - if (isGlassTheme) { - document.documentElement.classList.add('pf-v6-theme-glass'); - } - else { - document.documentElement.classList.remove('pf-v6-theme-glass'); - } - }, [isGlassTheme]); - const integrations = [ - { - id: 1, - name: "Ansible Automation Platform", - description: "Ansible Automation Platform is an entrprise framework for building and operating IT automation at scale.", - status: "success", - statusText: "Connected", - type: "MCP Server", - url: "ansible.example.com", - }, - { - id: 2, - name: "Github", - description: "Github is a code hosting platform for version control and collaboration. ", - status: "danger", - statusText: "Disconnected", - type: "Version Control", - url: "github.example.com", - }, - { - id: 3, - name: "Kubernetes Cluster", - description: "A Kubernetes cluster is a set of node machines for running containerized applications.", - status: "warning", - statusText: "Invalid fields", - type: "MCP Server", - url: "k8s.example.com", - }, - { - id: 4, - name: "Docker Registry", - description: "A Docker registry is a storage and distribution system for Docker images.", - status: "success", - statusText: "Connected", - type: "Container Registry", - url: "registry.example.com", - }, - { - id: 5, - name: "Jenkins CI/CD", - description: "Jenkins is an open source automation server for building, testing, and deploying software.", - status: "success", - statusText: "Connected", - type: "CI/CD", - url: "jenkins.example.com", - }, - { - id: 6, - name: "GitLab", - description: "GitLab is a complete DevOps platform delivered as a single application.", - status: "danger", - statusText: "Disconnected", - type: "Version Control", - url: "gitlab.example.com", - }, - { - id: 7, - name: "Prometheus", - description: "Prometheus is a monitoring system and time series database for metrics collection.", - status: "success", - statusText: "Connected", - type: "Monitoring", - url: "prometheus.example.com", - }, - { - id: 8, - name: "Elasticsearch", - description: "Elasticsearch is a distributed search and analytics engine for all types of data.", - status: "warning", - statusText: "Degraded", - type: "Search Engine", - url: "elasticsearch.example.com", - }, - { - id: 9, - name: "Redis Cache", - description: "Redis is an in-memory data structure store used as a database, cache, and message broker.", - status: "success", - statusText: "Connected", - type: "Cache", - url: "redis.example.com", - }, - { - id: 10, - name: "PostgreSQL Database", - description: "PostgreSQL is a powerful, open source object-relational database system.", - status: "success", - statusText: "Connected", - type: "Database", - url: "postgres.example.com", - }, - { - id: 11, - name: "Apache Kafka", - description: "Apache Kafka is a distributed event streaming platform for building real-time data pipelines.", - status: "warning", - statusText: "Limited", - type: "Message Queue", - url: "kafka.example.com", - }, - { - id: 12, - name: "Terraform", - description: "Terraform is an infrastructure as code tool for building, changing, and versioning infrastructure.", - status: "success", - statusText: "Connected", - type: "Infrastructure", - url: "terraform.example.com", - }, - { - id: 13, - name: "Splunk", - description: "Splunk is a platform for searching, monitoring, and analyzing machine-generated big data.", - status: "danger", - statusText: "Disconnected", - type: "Logging", - url: "splunk.example.com", - }, - ]; - const handleSendMessage = () => { - setIsThinking(true); - setTimeout(() => { - setIsThinking(false); - }, 10000); // 10 seconds - }; - const navContent = (_jsx(_Fragment, { children: _jsx(Panel, { isPill: true, isGlass: true, children: _jsx(PanelMain, { children: _jsxs(Tabs, { activeKey: 1, isNav: true, onSelect: () => { }, component: TabsComponent.nav, "aria-label": "Compass global", inset: { default: 'insetXl' }, children: [_jsx(Tab, { eventKey: 0, title: _jsx(TabTitleText, { children: "Tab 1" }) }), _jsx(Tab, { eventKey: 1, title: _jsx(TabTitleText, { children: "Integrations" }) }), _jsx(Tab, { eventKey: 2, title: _jsx(TabTitleText, { children: "Tab 3" }) }), _jsx(Tab, { eventKey: 3, title: _jsx(TabTitleText, { children: "Disabled Tab 4" }), isDisabled: true })] }) }) })); - const startSidebarContent = (_jsx(Panel, { isPill: true, isGlass: true, children: _jsx(PanelMain, { children: _jsxs(ActionList, { isIconList: true, isVertical: true, children: [_jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Play", children: _jsx(Button, { variant: "plain", icon: _jsx(PlayIcon, {}), "aria-label": "Play", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Add", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedPlusSquare, {}), "aria-label": "Add", isCircle: true }) }) })] }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Chat with AI", children: _jsx(Button, { variant: "plain", icon: _jsx(Icon, { style: { translate: ".05em .1em; scale: 1.1" }, children: _jsx(RHAiExperienceIcon, {}) }), "aria-label": "Chat with AI", isCircle: true, className: "pf-v6-m-ai-indicator" }) }) }), _jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Help", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedQuestionCircleIcon, {}), "aria-label": "Help", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Copy", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedCopy, {}), "aria-label": "Copy", isCircle: true }) }) })] })] }) })); - const endSidebarContent = (_jsx(Panel, { isPill: true, isGlass: true, children: _jsx(PanelMain, { children: _jsx(ActionList, { isIconList: true, isVertical: true, children: _jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Help", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedQuestionCircleIcon, {}), "aria-label": "Help", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Add", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedPlusSquare, {}), "aria-label": "Add", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Other help icon", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedQuestionCircleIcon, {}), "aria-label": "Other help", isCircle: true }) }) })] }) }) })); - const userDropdownItems = (_jsxs(_Fragment, { children: [_jsx(DropdownItem, { children: "My profile" }), _jsx(DropdownItem, { children: "User management" }), _jsx(DropdownItem, { children: "Logout" })] })); - const userDropdown = (_jsx(Dropdown, { isOpen: isDropdownOpen, onSelect: () => setIsDropdownOpen(false), onOpenChange: (isOpen) => setIsDropdownOpen(isOpen), popperProps: { position: "right" }, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, onClick: () => setIsDropdownOpen(!isDropdownOpen), isExpanded: isDropdownOpen, variant: "plain", isCircle: true, children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, gap: { default: "gapMd" }, children: ["User Name", _jsx(Avatar, { src: imgAvatar, alt: "", size: "md" })] }) })), children: _jsx(DropdownList, { children: userDropdownItems }) })); - const headerContent = _jsx(CompassHeader, { logo: _jsx("a", { href: "#", "aria-label": "Red Hat automations", tabIndex: 0, children: _jsx(RHAutomationsLogo, {}) }), nav: navContent, profile: userDropdown }); - const cardViewContent = (_jsxs(_Fragment, { children: [_jsx(Toolbar, { children: _jsxs(ToolbarContent, { children: [_jsx(ToolbarGroup, { children: _jsx(ToolbarItem, { children: _jsx(SearchInput, { "aria-label": "Integrations example search input", placeholder: "Filter by name" }) }) }), _jsxs(ToggleGroup, { children: [_jsx(ToggleGroupItem, { icon: _jsx(ThIcon, {}), "aria-label": "Card view", isSelected: activeDisplay === "card", onChange: () => { - setActiveDisplay("card"); - } }), _jsx(ToggleGroupItem, { icon: _jsx(ListIcon, {}), "aria-label": "Table view", isSelected: activeDisplay === "table", onChange: () => { - setActiveDisplay("table"); - } })] }), _jsx(ToolbarItem, { variant: "pagination", align: { default: "alignEnd" }, children: _jsx(Pagination, { itemCount: 523, perPage: 20, page: 1, onSetPage: () => { }, widgetId: "pagination-options-card-view", onPerPageSelect: () => { }, isCompact: true }) })] }) }), _jsx(Gallery, { hasGutter: true, children: integrations.map((product) => (_jsxs(Card, { isCompact: true, isFullHeight: true, id: product.name.replace(/ /g, "-"), children: [_jsxs(CardHeader, { actions: { - actions: (_jsx(_Fragment, { children: _jsx(Dropdown, { isOpen: false, onOpenChange: () => { }, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, "aria-label": `${product.name} actions`, variant: "plain", icon: _jsx(EllipsisVIcon, {}) })), popperProps: { position: "right" } }) })), - }, children: [_jsx(Content, { component: "h2", children: product.name }), _jsx(Content, { component: "small", children: product.type })] }), _jsx(CardBody, { isFilled: true, children: product.description }), _jsx(CardBody, { children: _jsxs(DescriptionList, { "aria-label": `${product.name} details`, children: [_jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Status" }), _jsx(DescriptionListDescription, { children: _jsx(Label, { status: product.status, isCompact: true, variant: "outline", children: product.statusText }) })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Url" }), _jsx(DescriptionListDescription, { children: _jsx("a", { children: product.url }) })] })] }) })] }, product.name))) })] })); - const rowActions = [ - { - title: "Some action", - onClick: () => console.log("clicked on Some action"), // eslint-disable-line no-console - }, - { - title: _jsx("div", { children: "Another action" }), - onClick: () => console.log("clicked on Another action"), // eslint-disable-line no-console - }, - { - isSeparator: true, - }, - { - title: "Third action", - onClick: () => console.log("clicked on Third action"), // eslint-disable-line no-console - }, - ]; - const rows = integrations.map(({ name, type, status, statusText }, index) => ({ - id: name, - row: [ - { - id: "select", - row: name, - cell: undefined, - props: { - select: { - index, - rowIndex: index, - onSelect: () => { }, - isSelected: false, - 'aria-label': `Select row ${name}`, - }, - }, - }, - name, - type, - { - cell: (_jsx(Label, { status: status, isCompact: true, variant: "outline", children: statusText })), - }, - { - cell: _jsx(ActionsColumn, { items: rowActions }), - props: { isActionCell: true }, - }, - ], - })); - const columns = [ - { - cell: undefined, - props: { - select: { - onSelect: () => { }, - isSelected: false, - 'aria-label': "Select all", - }, - }, - }, - "Name", - "Type", - "Status", - { - cell: undefined, - props: { - screenReaderText: "Actions", - }, - } - ]; - const tableViewContent = (_jsxs(_Fragment, { children: [_jsx(DataViewToolbar, { clearAllFilters: () => { }, filters: _jsx(DataViewTextFilter, { filterId: "name", title: "Name", placeholder: "Filter by name" }), actions: _jsxs(ToggleGroup, { children: [_jsx(ToggleGroupItem, { icon: _jsx(ThIcon, {}), "aria-label": "grid icon button", isSelected: activeDisplay === "card", onChange: () => setActiveDisplay("card") }), _jsx(ToggleGroupItem, { icon: _jsx(ListIcon, {}), "aria-label": "list icon button", isSelected: activeDisplay === "table", onChange: () => setActiveDisplay("table") })] }), pagination: _jsx(Pagination, { page: 1, perPage: 10, isCompact: true }) }), _jsx(DataViewTable, { "aria-label": "Integrations", columns: columns, rows: rows, className: "pf-m-plain" })] })); - const mainContent = (_jsxs(_Fragment, { children: [_jsx(CompassMainHeader, { title: _jsx(Title, { headingLevel: "h1", children: "Integrations" }), toolbar: (_jsx(Toolbar, { hasNoPadding: true, children: _jsxs(ToolbarContent, { children: [_jsx(ToolbarGroup, { children: _jsx(ToolbarItem, { children: _jsx(Button, { variant: "primary", onClick: onDrawerToggle, children: "Toggle drawer" }) }) }), _jsx(ToolbarGroup, { children: _jsx(ToolbarItem, { children: _jsx(Button, { icon: _jsx(EllipsisVIcon, {}), variant: "plain", "aria-label": "More options" }) }) })] }) })) }), _jsx(CompassContent, { children: _jsx(Panel, { isScrollable: true, isGlass: true, id: "integrations-main-content", children: _jsx(PanelMain, { tabIndex: -1, children: (() => { - if (activeDisplay === "table") { - return tableViewContent; - } - else { - return cardViewContent; - } - })() }) })] })); - const footerContent = (_jsx(CompassMessageBar, { children: _jsx(Panel, { isPill: true, hasNoBorder: true, isGlass: true, children: _jsxs(PanelMain, { children: [_jsx(MessageBar, { isCompact: true, onSendMessage: handleSendMessage, alwayShowSendButton: true, hasAttachButton: false, hasAiIndicator: true, isThinking: isThinking }), _jsx("div", { "aria-live": "polite", className: "pf-v6-screen-reader", children: isThinking ? "Ai is thinking..." : "Ai is ready to chat" })] }) }) })); - const handleClick = (e) => { - e.preventDefault(); - const mainContentElement = document.getElementById('integrations-main-content'); - if (mainContentElement) { - mainContentElement.focus(); - mainContentElement.scrollIntoView(); - } - }; - const drawerContent = (_jsxs(DrawerPanelContent, { children: [_jsxs(DrawerHead, { children: [_jsx("span", { children: "Content Details" }), _jsx(DrawerActions, { children: _jsx(DrawerCloseButton, { onClick: onDrawerToggle }) })] }), _jsxs(DrawerPanelBody, { children: [_jsx(Content, { component: "h3", children: "Content Information" }), _jsx(Content, { component: "p", children: "This drawer contains detailed information about the content." })] })] })); - return (_jsxs(_Fragment, { children: [_jsx(SkipToContent, { onClick: handleClick, href: "#integrations-main-content", children: "Skip to content" }), _jsx(Compass, { header: headerContent, sidebarStart: startSidebarContent, main: mainContent, sidebarEnd: endSidebarContent, footer: footerContent, backgroundSrcDark: pfBackground, backgroundSrcLight: pfBackground, drawerContent: drawerContent, drawerProps: { isExpanded: isDrawerOpen, isPill: true } }), _jsx("div", { style: { - position: 'absolute', - bottom: '1rem', - right: '1rem', - zIndex: 1000 - }, children: _jsx(Switch, { id: "glass-theme-toggle", label: "Glass theme", isChecked: isGlassTheme, onChange: (_, checked) => setIsGlassTheme(checked) }) })] })); -}; -//# sourceMappingURL=CompassIntegrationsDemo.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.d.ts deleted file mode 100644 index 21c7e7a9a8..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import React from "react"; -export declare const RHAiExperienceIcon: React.FunctionComponent; -//# sourceMappingURL=RHAiExperienceIcon.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.js deleted file mode 100644 index 665a62c66b..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAiExperienceIcon.js +++ /dev/null @@ -1,5 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -export const RHAiExperienceIcon = () => { - return (_jsxs("svg", { "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", width: "1em", height: "1em", viewBox: "0 0 32 32", children: [_jsx("g", { id: "uuid-75f76c23-c1b6-4d16-98c6-ad548b061af4", children: _jsx("rect", { width: "32", height: "32", fill: "none" }) }), _jsxs("g", { id: "uuid-08df3350-7f5a-4f9c-8ddc-ec9ca74ef47e", children: [_jsx("path", { fill: "var(--pf-t--global--icon--color--regular)", d: "M26.03711,16.96191c-5.9043-.46826-10.53027-5.09424-10.99902-10.99121-.03711-.52344-.51367-.96973-1.03809-.96973-.52148,0-.99707.44189-1.03809.96191-.46875,5.90479-5.09473,10.53076-10.99121,10.99854-.52344.0376-.96973.51416-.96973,1.03857,0,.52148.44238.99707.96191,1.03809,5.9043.46875,10.53027,5.09473,10.99902,10.99121.03711.52344.51367.96973,1.03809.96973.52148,0,.99707-.44238,1.03809-.96191.46875-5.9043,5.09473-10.53027,10.99902-10.99902.51953-.04199.96191-.51562.96191-1.03809,0-.52148-.44238-.99707-.96191-1.03809Z" }), _jsx("path", { fill: "var(--pf-t--global--icon--color--regular)", d: "M30.06836,6.14746c-1.59668-.35693-2.85938-1.61914-3.21582-3.21387-.08887-.40332-.43945-.68555-.85254-.68555s-.76367.28223-.85156.68311c-.35742,1.59717-1.62012,2.85938-3.21973,3.2168-.40039.09131-.68066.44141-.68066.85205s.28027.76074.68359.85254c1.59668.35693,2.85938,1.61914,3.21582,3.21387.08887.40332.43945.68555.85254.68555s.76367-.28223.85156-.68311c.35742-1.59717,1.62012-2.85938,3.2168-3.21631.00098,0,.00195-.00049.00293-.00049.40039-.09131.68066-.44141.68066-.85205s-.28027-.76074-.68359-.85254Z" })] })] })); -}; -//# sourceMappingURL=RHAiExperienceIcon.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.d.ts deleted file mode 100644 index 1ebfc5ae8e..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import React from "react"; -export declare const RHAutomationsLogo: React.FunctionComponent; -//# sourceMappingURL=RHAutomationsLogo.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.js deleted file mode 100644 index 2c86c8e96b..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHAutomationsLogo.js +++ /dev/null @@ -1,5 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -export const RHAutomationsLogo = () => { - return (_jsx("div", { id: "brand-logo", children: _jsxs("svg", { "aria-hidden": "true", width: "192", height: "39", viewBox: "0 0 192 39", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("path", { d: "M33.3807 22.9001C36.6672 22.9001 41.4287 22.2167 41.4287 18.2926C41.4287 17.9865 41.4209 17.6883 41.3472 17.3901L39.3885 8.85069C38.9336 6.97444 38.5392 6.11944 35.2501 4.47014C32.7023 3.16125 27.1468 1 25.5035 1C23.9733 1 23.5211 2.98972 21.7069 2.98972C19.8927 2.98972 18.6465 1.51194 17.0032 1.51194C15.3599 1.51194 14.395 2.59389 13.6036 4.81056C13.6036 4.81056 11.3924 11.0674 11.1085 11.9778C11.0506 12.1493 11.0506 12.3393 11.0506 12.4897C11.0506 14.9228 20.5921 22.9001 33.3833 22.9001M41.9414 19.8839C42.3963 22.0451 42.3963 22.2721 42.3963 22.5571C42.3963 26.2542 38.2579 28.3019 32.818 28.3019C20.5185 28.3019 9.74918 21.0767 9.74918 16.3003C9.74918 15.5614 9.92008 14.8779 10.1462 14.366C5.72383 14.5929 0 15.3899 0 20.4539C0 28.7585 19.6114 39 35.1396 39C47.0421 39 50.0447 33.5956 50.0447 29.3285C50.0447 25.9718 47.1552 22.1612 41.9388 19.8839", fill: "#EE0000" }), _jsx("path", { d: "M41.9386 19.8864C42.3935 22.0477 42.3935 22.2746 42.3935 22.5596C42.3935 26.2567 38.255 28.3045 32.8152 28.3045C20.5157 28.3045 9.74634 21.0792 9.74634 16.3028C9.74634 15.5639 9.91724 14.8804 10.1434 14.3685L11.1083 11.9777C11.0504 12.1492 11.0504 12.3392 11.0504 12.4896C11.0504 14.9227 20.5919 22.9 33.3831 22.9C36.6696 22.9 41.4312 22.2165 41.4312 18.2925C41.4312 17.9864 41.4233 17.6882 41.3496 17.39L41.9412 19.8864H41.9386Z", fill: "black" }), _jsx("path", { d: "M75.764 16V1.29995H82.295C83.261 1.29995 84.115 1.48895 84.857 1.86695C85.599 2.24495 86.173 2.76995 86.579 3.44195C86.999 4.09995 87.209 4.86995 87.209 5.75195C87.209 6.70395 86.943 7.53695 86.411 8.25095C85.893 8.95095 85.186 9.46195 84.29 9.78395L87.398 16H84.605L81.77 10.12H78.284V16H75.764ZM78.284 8.10395H82.064C82.848 8.10395 83.478 7.89395 83.954 7.47395C84.43 7.03995 84.668 6.47295 84.668 5.77295C84.668 5.05895 84.43 4.49195 83.954 4.07195C83.478 3.63795 82.848 3.42095 82.064 3.42095H78.284V8.10395Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M93.9392 16.21C92.9312 16.21 92.0212 15.972 91.2092 15.496C90.3972 15.006 89.7532 14.3549 89.2772 13.5429C88.8012 12.7169 88.5632 11.7859 88.5632 10.75C88.5632 9.71395 88.7872 8.78995 89.2352 7.97795C89.6832 7.16595 90.2922 6.52195 91.0622 6.04595C91.8462 5.55595 92.7142 5.31095 93.6662 5.31095C94.6462 5.31095 95.5072 5.54895 96.2492 6.02495C97.0052 6.50095 97.5932 7.14495 98.0132 7.95695C98.4472 8.76895 98.6642 9.69995 98.6642 10.75V11.3169H90.8942C90.9782 11.8909 91.1602 12.4019 91.4402 12.8499C91.7342 13.2839 92.1052 13.627 92.5532 13.879C93.0152 14.1309 93.5122 14.257 94.0442 14.257C94.5342 14.257 94.9962 14.173 95.4302 14.005C95.8782 13.823 96.2492 13.578 96.5432 13.2699L98.0972 14.677C97.4532 15.209 96.7952 15.601 96.1232 15.853C95.4652 16.091 94.7372 16.21 93.9392 16.21ZM90.9152 9.84695H96.4172C96.3332 9.34295 96.1582 8.89495 95.8922 8.50295C95.6402 8.11095 95.3182 7.80295 94.9262 7.57895C94.5482 7.35495 94.1282 7.24295 93.6662 7.24295C93.2042 7.24295 92.7772 7.35495 92.3852 7.57895C92.0072 7.78895 91.6922 8.08995 91.4402 8.48195C91.1882 8.87395 91.0132 9.32895 90.9152 9.84695Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M105.388 16.1049C104.506 16.1049 103.708 15.867 102.994 15.391C102.28 14.901 101.706 14.257 101.272 13.459C100.852 12.6469 100.642 11.7439 100.642 10.75C100.642 9.74195 100.859 8.83895 101.293 8.04095C101.727 7.22895 102.315 6.58495 103.057 6.10895C103.813 5.63295 104.646 5.39495 105.556 5.39495C106.158 5.39495 106.718 5.51395 107.236 5.75195C107.768 5.97595 108.23 6.31195 108.622 6.75995V0.94295L110.995 0.522949V16H108.643V14.6139C108.265 15.0899 107.796 15.461 107.236 15.727C106.676 15.979 106.06 16.1049 105.388 16.1049ZM106.123 14.11C106.627 14.11 107.096 14.012 107.53 13.816C107.964 13.606 108.328 13.319 108.622 12.955V8.52395C108.314 8.15995 107.943 7.87995 107.509 7.68395C107.075 7.48795 106.613 7.38995 106.123 7.38995C105.521 7.38995 104.982 7.53695 104.506 7.83095C104.044 8.11095 103.673 8.50295 103.393 9.00695C103.113 9.51095 102.973 10.092 102.973 10.75C102.973 11.38 103.113 11.9539 103.393 12.4719C103.673 12.976 104.044 13.375 104.506 13.669C104.982 13.9629 105.521 14.11 106.123 14.11Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M118.848 16V1.29995H121.368V7.47395H128.676V1.29995H131.196V16H128.676V9.72095H121.368V16H118.848Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M137.314 16.189C136.586 16.189 135.935 16.056 135.361 15.79C134.801 15.51 134.36 15.132 134.038 14.656C133.73 14.166 133.576 13.606 133.576 12.976C133.576 12.346 133.737 11.7999 134.059 11.3379C134.395 10.8759 134.864 10.519 135.466 10.267C136.068 10.015 136.782 9.88895 137.608 9.88895C138.098 9.88895 138.581 9.94495 139.057 10.0569C139.533 10.1549 139.995 10.323 140.443 10.561V9.38495C140.443 8.68495 140.24 8.15995 139.834 7.80995C139.442 7.45995 138.84 7.28495 138.028 7.28495C137.594 7.28495 137.125 7.35495 136.621 7.49495C136.131 7.62095 135.578 7.82395 134.962 8.10395L134.122 6.38195C135.662 5.66795 137.118 5.31095 138.49 5.31095C139.862 5.31095 140.919 5.64695 141.661 6.31895C142.417 6.97695 142.795 7.91495 142.795 9.13295V16H140.443V14.908C139.995 15.342 139.512 15.6639 138.994 15.874C138.476 16.084 137.916 16.189 137.314 16.189ZM135.802 12.934C135.802 13.424 135.998 13.809 136.39 14.089C136.782 14.3689 137.307 14.509 137.965 14.509C138.441 14.509 138.882 14.439 139.288 14.299C139.708 14.1449 140.093 13.9209 140.443 13.627V11.926C140.079 11.7579 139.701 11.6319 139.309 11.5479C138.917 11.464 138.49 11.422 138.028 11.422C137.342 11.422 136.796 11.5549 136.39 11.8209C135.998 12.0869 135.802 12.458 135.802 12.934Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M149.897 16.21C148.833 16.21 148.028 15.9649 147.482 15.4749C146.936 14.971 146.663 14.236 146.663 13.2699V7.36895H144.563V5.47895H146.663V2.58095L149.036 2.07695V5.47895H151.955V7.36895H149.036V12.745C149.036 13.2629 149.148 13.634 149.372 13.858C149.596 14.068 149.974 14.1729 150.506 14.1729C150.744 14.1729 150.961 14.1589 151.157 14.1309C151.367 14.089 151.626 14.0189 151.934 13.9209V15.9159C151.64 16.0139 151.304 16.084 150.926 16.1259C150.562 16.1819 150.219 16.21 149.897 16.21Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M73.916 38L79.964 23.2999H83.471L89.456 38H86.159L84.668 34.1359H78.599L77.087 38H73.916ZM79.544 31.6999H83.744L81.644 26.2819L79.544 31.6999Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M94.4493 38.2099C93.6093 38.2099 92.8603 38.028 92.2023 37.664C91.5583 37.286 91.0473 36.768 90.6693 36.11C90.3053 35.452 90.1233 34.6959 90.1233 33.8419V27.059H93.0003V33.422C93.0003 34.122 93.2033 34.682 93.6093 35.102C94.0293 35.522 94.5823 35.7319 95.2683 35.7319C96.2483 35.7319 97.0043 35.368 97.5363 34.6399V27.059H100.413V38H97.5363V37.118C96.6963 37.846 95.6673 38.2099 94.4493 38.2099Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M107.842 38.1679C106.625 38.1679 105.7 37.895 105.07 37.3489C104.454 36.7889 104.146 35.9769 104.146 34.9129V29.4529H101.899V27.059H104.146V24.2659L107.024 23.6149V27.059H110.153V29.4529H107.024V34.325C107.024 34.829 107.136 35.193 107.36 35.417C107.583 35.6269 107.975 35.7319 108.535 35.7319C108.815 35.7319 109.068 35.7179 109.292 35.6899C109.529 35.6479 109.789 35.5779 110.069 35.4799V37.853C109.775 37.951 109.404 38.028 108.956 38.084C108.522 38.1399 108.15 38.1679 107.842 38.1679Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M116.767 38.2099C115.675 38.2099 114.688 37.958 113.806 37.4539C112.924 36.9499 112.224 36.271 111.706 35.417C111.188 34.563 110.929 33.604 110.929 32.54C110.929 31.476 111.188 30.517 111.706 29.663C112.224 28.795 112.924 28.1089 113.806 27.6049C114.688 27.101 115.675 26.8489 116.767 26.8489C117.859 26.8489 118.846 27.101 119.728 27.6049C120.61 28.1089 121.31 28.795 121.828 29.663C122.346 30.517 122.605 31.476 122.605 32.54C122.605 33.604 122.346 34.563 121.828 35.417C121.31 36.271 120.61 36.9499 119.728 37.4539C118.846 37.958 117.859 38.2099 116.767 38.2099ZM116.767 35.7109C117.341 35.7109 117.852 35.5709 118.3 35.291C118.762 35.011 119.126 34.6329 119.392 34.1569C119.672 33.6669 119.812 33.128 119.812 32.54C119.812 31.938 119.672 31.399 119.392 30.923C119.126 30.447 118.762 30.069 118.3 29.7889C117.852 29.4949 117.341 29.3479 116.767 29.3479C116.207 29.3479 115.696 29.4949 115.234 29.7889C114.772 30.069 114.408 30.447 114.142 30.923C113.876 31.399 113.743 31.938 113.743 32.54C113.743 33.128 113.876 33.6669 114.142 34.1569C114.408 34.6329 114.772 35.011 115.234 35.291C115.696 35.5709 116.207 35.7109 116.767 35.7109Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M124.373 38V27.059H127.25V27.8989C128.034 27.1989 128.986 26.8489 130.106 26.8489C130.82 26.8489 131.457 26.996 132.017 27.2899C132.577 27.57 133.039 27.969 133.403 28.4869C134.313 27.3949 135.517 26.8489 137.015 26.8489C137.841 26.8489 138.562 27.038 139.178 27.416C139.808 27.78 140.298 28.291 140.648 28.9489C141.012 29.5929 141.194 30.3489 141.194 31.2169V38H138.338V31.6369C138.338 30.9229 138.149 30.3629 137.771 29.9569C137.393 29.5369 136.889 29.327 136.259 29.327C135.377 29.327 134.677 29.6909 134.159 30.4189C134.173 30.5449 134.187 30.6709 134.201 30.7969C134.215 30.9229 134.222 31.063 134.222 31.2169V38H131.345V31.6369C131.345 30.9229 131.156 30.3629 130.778 29.9569C130.414 29.5369 129.917 29.327 129.287 29.327C128.405 29.327 127.726 29.6629 127.25 30.3349V38H124.373Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M146.87 38.1889C146.086 38.1889 145.393 38.049 144.791 37.769C144.189 37.475 143.72 37.076 143.384 36.5719C143.048 36.0679 142.88 35.4869 142.88 34.8289C142.88 33.7789 143.272 32.9669 144.056 32.393C144.854 31.805 145.946 31.511 147.332 31.511C148.284 31.511 149.18 31.6579 150.02 31.952V31.1539C150.02 29.8799 149.25 29.243 147.71 29.243C147.248 29.243 146.751 29.32 146.219 29.4739C145.687 29.6139 145.071 29.8379 144.371 30.146L143.321 28.025C144.189 27.6329 145.015 27.3389 145.799 27.143C146.597 26.947 147.395 26.8489 148.193 26.8489C149.663 26.8489 150.804 27.2059 151.616 27.92C152.442 28.62 152.855 29.6139 152.855 30.9019V38H150.02V37.2229C149.572 37.5589 149.089 37.804 148.571 37.958C148.053 38.1119 147.486 38.1889 146.87 38.1889ZM145.61 34.7659C145.61 35.186 145.792 35.5219 146.156 35.7739C146.52 36.0119 147.003 36.131 147.605 36.131C148.571 36.131 149.376 35.893 150.02 35.417V33.8209C149.32 33.541 148.55 33.401 147.71 33.401C147.052 33.401 146.534 33.527 146.156 33.7789C145.792 34.0169 145.61 34.346 145.61 34.7659Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M159.912 38.1679C158.694 38.1679 157.77 37.895 157.14 37.3489C156.524 36.7889 156.216 35.9769 156.216 34.9129V29.4529H153.969V27.059H156.216V24.2659L159.093 23.6149V27.059H162.222V29.4529H159.093V34.325C159.093 34.829 159.205 35.193 159.429 35.417C159.653 35.6269 160.045 35.7319 160.605 35.7319C160.885 35.7319 161.137 35.7179 161.361 35.6899C161.599 35.6479 161.858 35.5779 162.138 35.4799V37.853C161.844 37.951 161.473 38.028 161.025 38.084C160.591 38.1399 160.22 38.1679 159.912 38.1679Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M163.625 38V27.059H166.502V38H163.625ZM165.053 25.757C164.605 25.757 164.22 25.596 163.898 25.274C163.576 24.952 163.415 24.5669 163.415 24.1189C163.415 23.6569 163.576 23.2719 163.898 22.9639C164.22 22.6419 164.605 22.4809 165.053 22.4809C165.515 22.4809 165.9 22.6419 166.208 22.9639C166.53 23.2719 166.691 23.6569 166.691 24.1189C166.691 24.5669 166.53 24.952 166.208 25.274C165.9 25.596 165.515 25.757 165.053 25.757Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M174.086 38.2099C172.994 38.2099 172.007 37.958 171.125 37.4539C170.243 36.9499 169.543 36.271 169.025 35.417C168.507 34.563 168.248 33.604 168.248 32.54C168.248 31.476 168.507 30.517 169.025 29.663C169.543 28.795 170.243 28.1089 171.125 27.6049C172.007 27.101 172.994 26.8489 174.086 26.8489C175.178 26.8489 176.165 27.101 177.047 27.6049C177.929 28.1089 178.629 28.795 179.147 29.663C179.665 30.517 179.924 31.476 179.924 32.54C179.924 33.604 179.665 34.563 179.147 35.417C178.629 36.271 177.929 36.9499 177.047 37.4539C176.165 37.958 175.178 38.2099 174.086 38.2099ZM174.086 35.7109C174.66 35.7109 175.171 35.5709 175.619 35.291C176.081 35.011 176.445 34.6329 176.711 34.1569C176.991 33.6669 177.131 33.128 177.131 32.54C177.131 31.938 176.991 31.399 176.711 30.923C176.445 30.447 176.081 30.069 175.619 29.7889C175.171 29.4949 174.66 29.3479 174.086 29.3479C173.526 29.3479 173.015 29.4949 172.553 29.7889C172.091 30.069 171.727 30.447 171.461 30.923C171.195 31.399 171.062 31.938 171.062 32.54C171.062 33.128 171.195 33.6669 171.461 34.1569C171.727 34.6329 172.091 35.011 172.553 35.291C173.015 35.5709 173.526 35.7109 174.086 35.7109Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("path", { d: "M181.693 38V27.059H184.57V27.962C185.396 27.2199 186.418 26.8489 187.636 26.8489C188.49 26.8489 189.239 27.038 189.883 27.416C190.541 27.78 191.052 28.291 191.416 28.9489C191.78 29.5929 191.962 30.3489 191.962 31.2169V38H189.085V31.6369C189.085 30.9229 188.882 30.3629 188.476 29.9569C188.07 29.5369 187.517 29.327 186.817 29.327C186.327 29.327 185.893 29.425 185.515 29.621C185.137 29.803 184.822 30.0689 184.57 30.4189V38H181.693Z", fill: "var(--pf-t--global--text--color--regular)" }), _jsx("line", { x1: "66.5", y1: "1.5", x2: "66.5", y2: "38.5", stroke: "var(--pf-t--global--text--color--regular)", strokeLinecap: "round" })] }) })); -}; -//# sourceMappingURL=RHAutomationsLogo.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.d.ts deleted file mode 100644 index 33b24c7b0d..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import React from "react"; -export declare const RHServerStackIcon: React.FunctionComponent; -//# sourceMappingURL=RHServerStackIcon.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.js deleted file mode 100644 index ecd4522c7d..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/assets/RHServerStackIcon.js +++ /dev/null @@ -1,5 +0,0 @@ -import { jsx as _jsx } from "react/jsx-runtime"; -export const RHServerStackIcon = () => { - return (_jsx("svg", { "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 32 32", className: "pf-v6-svg", children: _jsx("path", { fill: "var(--pf-t--global--icon--color--regular)", d: "M28.5 1h-25C2.673 1 2 1.673 2 2.5v27c0 .827.673 1.5 1.5 1.5h25c.827 0 1.5-.673 1.5-1.5v-27c0-.827-.673-1.5-1.5-1.5ZM28 29H4V3h24v26ZM7 8a1 1 0 0 1 1-1h5a1 1 0 0 1 0 2H8a1 1 0 0 1-1-1Zm0 16a1 1 0 0 1 1-1h5a1 1 0 0 1 0 2H8a1 1 0 0 1-1-1Zm0-8a1 1 0 0 1 1-1h5a1 1 0 0 1 0 2H8a1 1 0 0 1-1-1Zm14.38-7.987a1.626 1.626 0 1 1 3.251.001 1.626 1.626 0 0 1-3.251-.001Zm0 8a1.626 1.626 0 1 1 3.251.001 1.626 1.626 0 0 1-3.251-.001Zm-.005 8.002a1.626 1.626 0 1 1 3.251.001 1.626 1.626 0 0 1-3.251-.001Z" }) })); -}; -//# sourceMappingURL=RHServerStackIcon.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.d.ts deleted file mode 100644 index 2a8c501fce..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const ClusterInventoryCard: React.FunctionComponent; -export default ClusterInventoryCard; -//# sourceMappingURL=AnimationsOverviewClusterInventory.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.js deleted file mode 100644 index af5f4406cc..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewClusterInventory.js +++ /dev/null @@ -1,39 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from "react"; -import { Card, CardHeader, CardTitle, CardBody, CardFooter, Dropdown, DropdownList, DropdownItem, MenuToggle, Flex, FlexItem, Button, Icon, } from "@patternfly/react-core"; -import ListIcon from "@patternfly/react-icons/dist/esm/icons/list-icon"; -import EllipsisVIcon from "@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"; -import CubesIcon from "@patternfly/react-icons/dist/esm/icons/cubes-icon"; -import CubeIcon from "@patternfly/react-icons/dist/esm/icons/cube-icon"; -import ArrowRightIcon from "@patternfly/react-icons/dist/esm/icons/arrow-right-icon"; -export const ClusterInventoryCard = () => { - const [isKebabOpen, setIsKebabOpen] = useState(false); - // Data for the list items in the card body - const inventoryItems = [ - { icon: _jsx(CubesIcon, {}), text: "15 Deployments" }, - { icon: _jsx(CubesIcon, {}), text: "15 Deployments" }, - { icon: _jsx(CubesIcon, {}), text: "15 Deployments" }, - { icon: _jsx(CubesIcon, {}), text: "15 Deployments" }, - { icon: _jsx(CubeIcon, {}), text: "126 pods" }, - ]; - // Items for the kebab dropdown menu - const dropdownItems = [ - _jsx(DropdownItem, { children: "Action 1" }, "action1"), - _jsx(DropdownItem, { children: "Action 2" }, "action2"), - _jsx(DropdownItem, { children: "Action 3" }, "action3"), - ]; - // The kebab menu toggle button - const kebabToggle = (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, variant: "plain", onClick: () => setIsKebabOpen(!isKebabOpen), isExpanded: isKebabOpen, "aria-label": "Cluster inventory card options", children: _jsx(EllipsisVIcon, {}) })); - return (_jsxs(Card, { isGlass: true, isFullHeight: true, children: [_jsx(CardHeader - // We use a Flex layout in the header to position the title and actions - , { - // We use a Flex layout in the header to position the title and actions - actions: { - actions: (_jsx(Dropdown, { isOpen: isKebabOpen, onSelect: () => setIsKebabOpen(false), onOpenChange: (isOpen) => setIsKebabOpen(isOpen), toggle: kebabToggle, popperProps: { position: "right" }, children: _jsx(DropdownList, { children: dropdownItems }) })), - hasNoOffset: false, - className: "", - }, children: _jsx(CardTitle, { children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, children: [_jsx(ListIcon, {}), _jsx("span", { children: " Cluster inventory" })] }) }) }), _jsx(CardBody, { children: _jsx(Flex, { direction: { default: "column" }, spaceItems: { default: "spaceItemsMd" }, children: inventoryItems.map((item, index) => (_jsx(FlexItem, { children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, spaceItems: { default: "spaceItemsSm" }, children: [_jsx(FlexItem, { children: _jsx(Icon, { children: item.icon }) }), _jsx(FlexItem, { children: item.text })] }) }, index))) }) }), _jsx(CardFooter, { children: _jsx(Button, { variant: "link", isInline: true, icon: _jsx(ArrowRightIcon, {}), iconPosition: "end", component: "a", href: "#", children: "Cluster inventory page" }) })] })); -}; -ClusterInventoryCard.displayName = "ClusterInventoryCard"; -export default ClusterInventoryCard; -//# sourceMappingURL=AnimationsOverviewClusterInventory.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.d.ts deleted file mode 100644 index 2d62746bb9..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const MemoryUtilizationCard: React.FunctionComponent; -export default MemoryUtilizationCard; -//# sourceMappingURL=AnimationsOverviewMemoryUtilization.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.js deleted file mode 100644 index ec418c70f5..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewMemoryUtilization.js +++ /dev/null @@ -1,41 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from "react"; -import { Card, CardTitle, CardBody, CardFooter, Flex, Button, Dropdown, DropdownItem, MenuToggle, CardHeader, DropdownList, FlexItem, } from "@patternfly/react-core"; -import { ChartDonutThreshold, ChartDonutUtilization, } from "@patternfly/react-charts/dist/esm/victory/components"; -import ArrowRightIcon from "@patternfly/react-icons/dist/esm/icons/arrow-right-icon"; -import EllipsisVIcon from "@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"; -import TachometerAltIcon from "@patternfly/react-icons/dist/esm/icons/tachometer-alt-icon"; -export const MemoryUtilizationCard = () => { - const [isKebabOpen, setIsKebabOpen] = useState(false); - const dropdownItems = [ - _jsx(DropdownItem, { children: "Action 1" }, "action1"), - _jsx(DropdownItem, { children: "Action 2" }, "action2"), - _jsx(DropdownItem, { children: "Action 3" }, "action3"), - ]; - // The kebab menu toggle button - const kebabToggle = (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, variant: "plain", onClick: () => setIsKebabOpen(!isKebabOpen), isExpanded: isKebabOpen, "aria-label": "Memory usage card options", children: _jsx(EllipsisVIcon, {}) })); - return (_jsxs(Card, { isGlass: true, isFullHeight: true, children: [_jsx(CardHeader, { actions: { - actions: (_jsx(Dropdown, { isOpen: isKebabOpen, onSelect: () => setIsKebabOpen(false), onOpenChange: (isOpen) => setIsKebabOpen(isOpen), toggle: kebabToggle, popperProps: { position: "right" }, children: _jsx(DropdownList, { children: dropdownItems }) })), - hasNoOffset: false, - className: "", - }, children: _jsx(CardTitle, { children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, children: [_jsx(TachometerAltIcon, {}), _jsx("span", { children: "Memory usage" })] }) }) }), _jsx(CardBody, { children: _jsxs(Flex, { direction: { default: "column" }, justifyContent: { default: "justifyContentCenter" }, alignItems: { default: "alignItemsCenter" }, children: [_jsx(FlexItem, { children: _jsx(ChartDonutThreshold, { ariaDesc: "Mock memory utilization", ariaTitle: "Mock memory utilization chart", constrainToVisibleArea: true, data: [ - { x: "Warning at 60%", y: 60 }, - { x: "Danger at 90%", y: 90 }, - ], height: 200, labels: ({ datum }) => (datum.x ? datum.x : null), padding: { - bottom: 0, - left: 10, - right: 10, - top: 0, - }, width: 200, children: _jsx(ChartDonutUtilization, { data: { x: "Memory capacity", y: 95 }, labels: ({ datum }) => datum.x ? `${datum.x}: ${datum.y}%` : null, title: "95%", subTitle: "CPU", thresholds: [{ value: 60 }, { value: 90 }] }) }) }), _jsx(FlexItem, { children: _jsx(ChartDonutThreshold, { ariaDesc: "Mock memory utilization", ariaTitle: "Mock memory utilization chart", constrainToVisibleArea: true, data: [ - { x: "Warning at 60%", y: 60 }, - { x: "Danger at 90%", y: 90 }, - ], height: 200, labels: ({ datum }) => (datum.x ? datum.x : null), padding: { - bottom: 0, - left: 10, - right: 10, - top: 0, - }, width: 200, children: _jsx(ChartDonutUtilization, { data: { x: "GPU capacity", y: 55 }, labels: ({ datum }) => datum.x ? `${datum.x}: ${datum.y}%` : null, title: "55%", subTitle: "GPU", thresholds: [{ value: 60 }, { value: 90 }] }) }) })] }) }), _jsx(CardFooter, { children: _jsx(Button, { variant: "link", isInline: true, icon: _jsx(ArrowRightIcon, {}), iconPosition: "end", component: "a", href: "#", children: "Memory usage page" }) })] })); -}; -MemoryUtilizationCard.displayName = "MemoryUtilizationCard"; -export default MemoryUtilizationCard; -//# sourceMappingURL=AnimationsOverviewMemoryUtilization.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.d.ts deleted file mode 100644 index 79e3c46f27..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const NetworkActivityCard: React.FunctionComponent; -export default NetworkActivityCard; -//# sourceMappingURL=AnimationsOverviewNetworkActivity.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.js deleted file mode 100644 index b5afe480c6..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewNetworkActivity.js +++ /dev/null @@ -1,49 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from "react"; -import { Card, CardHeader, CardTitle, CardBody, Dropdown, DropdownList, DropdownItem, MenuToggle, Flex, } from "@patternfly/react-core"; -import EllipsisVIcon from "@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"; -import NetworkIcon from "@patternfly/react-icons/dist/esm/icons/network-icon"; -import { Chart, ChartArea, ChartAxis, ChartGroup, ChartThemeColor, ChartVoronoiContainer, } from "@patternfly/react-charts/dist/esm/victory/components"; -export const NetworkActivityCard = () => { - const [isKebabOpen, setIsKebabOpen] = useState(false); - // Data for the chart - const chartData = [ - { name: "Network Activity", x: "1", y: 10 }, - { name: "Network Activity", x: "2", y: 8 }, - { name: "Network Activity", x: "3", y: 6 }, - { name: "Network Activity", x: "4", y: 5 }, - { name: "Network Activity", x: "5", y: 5.5 }, - { name: "Network Activity", x: "6", y: 5 }, - { name: "Network Activity", x: "7", y: 4 }, - { name: "Network Activity", x: "8", y: 4.5 }, - { name: "Network Activity", x: "9", y: 4.5 }, - { name: "Network Activity", x: "10", y: 0 }, - ]; - // Items for the kebab dropdown menu - const dropdownItems = [ - _jsx(DropdownItem, { children: "View details" }, "action1"), - _jsx(DropdownItem, { children: "Refresh data" }, "action2"), - _jsx(DropdownItem, { children: "Settings" }, "action3"), - ]; - // The kebab menu toggle button - const kebabToggle = (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, variant: "plain", onClick: () => setIsKebabOpen(!isKebabOpen), isExpanded: isKebabOpen, "aria-label": "Network activity card options", children: _jsx(EllipsisVIcon, {}) })); - return (_jsxs(Card, { isGlass: true, isFullHeight: true, children: [_jsx(CardHeader, { actions: { - actions: (_jsx(Dropdown, { isOpen: isKebabOpen, onSelect: () => setIsKebabOpen(false), onOpenChange: (isOpen) => setIsKebabOpen(isOpen), toggle: kebabToggle, popperProps: { position: "right" }, children: _jsx(DropdownList, { children: dropdownItems }) })), - hasNoOffset: false, - className: "", - }, children: _jsx(CardTitle, { children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, children: [_jsx(NetworkIcon, {}), _jsx("span", { children: "Network activity" })] }) }) }), _jsx(CardBody, { children: _jsxs(Chart, { ariaDesc: "Network activity chart", ariaTitle: "Network activity chart", containerComponent: _jsx(ChartVoronoiContainer, { labels: ({ datum }) => `${datum.name}: ${datum.y}`, constrainToVisibleArea: true }), height: 250, padding: { - bottom: 50, - left: 50, - right: 20, - top: 20, - }, themeColor: ChartThemeColor.multi, width: 400, children: [_jsx(ChartAxis, {}), _jsx(ChartAxis, { dependentAxis: true, showGrid: true }), _jsx(ChartGroup, { children: _jsx(ChartArea, { data: chartData, interpolation: "catmullRom" // This creates the smooth curve - , style: { - data: { - stroke: "#0066CC", // Line color - fill: "rgba(0, 102, 204, 0.4)", // Area fill color with opacity - }, - } }) })] }) })] })); -}; -NetworkActivityCard.displayName = "NetworkActivityCard"; -export default NetworkActivityCard; -//# sourceMappingURL=AnimationsOverviewNetworkActivity.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.d.ts deleted file mode 100644 index d4c317ca2a..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const StorageCard: React.FunctionComponent; -export default StorageCard; -//# sourceMappingURL=AnimationsOverviewStorage.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.js deleted file mode 100644 index 4db46b4489..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/AnimationsOverviewStorage.js +++ /dev/null @@ -1,33 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { useState } from "react"; -import { CardTitle, CardBody, CardFooter, Flex, Button, Dropdown, DropdownItem, MenuToggle, Card, CardHeader, DropdownList, FlexItem, } from "@patternfly/react-core"; -import { ChartDonutThreshold, ChartDonutUtilization, } from "@patternfly/react-charts/dist/esm/victory/components"; -import StorageDomainIcon from "@patternfly/react-icons/dist/esm/icons/storage-domain-icon"; -import ArrowRightIcon from "@patternfly/react-icons/dist/esm/icons/arrow-right-icon"; -import EllipsisVIcon from "@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"; -export const StorageCard = () => { - const [isKebabOpen, setIsKebabOpen] = useState(false); - const dropdownItems = [ - _jsx(DropdownItem, { children: "Action 1" }, "action1"), - _jsx(DropdownItem, { children: "Action 2" }, "action2"), - _jsx(DropdownItem, { children: "Action 3" }, "action3"), - ]; - // The kebab menu toggle button - const kebabToggle = (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, variant: "plain", onClick: () => setIsKebabOpen(!isKebabOpen), isExpanded: isKebabOpen, "aria-label": "Storage card options", children: _jsx(EllipsisVIcon, {}) })); - return (_jsxs(Card, { isFullHeight: true, isGlass: true, children: [_jsx(CardHeader, { actions: { - actions: (_jsx(Dropdown, { isOpen: isKebabOpen, onSelect: () => setIsKebabOpen(false), onOpenChange: (isOpen) => setIsKebabOpen(isOpen), toggle: kebabToggle, popperProps: { position: "right" }, children: _jsx(DropdownList, { children: dropdownItems }) })), - hasNoOffset: false, - className: "", - }, children: _jsx(CardTitle, { children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, children: [_jsx(StorageDomainIcon, {}), _jsx("span", { children: "Storage" })] }) }) }), _jsx(CardBody, { children: _jsx(Flex, { direction: { default: "row" }, justifyContent: { default: "justifyContentCenter" }, alignItems: { default: "alignItemsCenter" }, children: _jsx(FlexItem, { children: _jsx(ChartDonutThreshold, { ariaDesc: "Mock storage capacity", ariaTitle: "Mock donut utilization chart", constrainToVisibleArea: true, data: [ - { x: "Warning at 60%", y: 60 }, - { x: "Danger at 90%", y: 90 }, - ], height: 200, labels: ({ datum }) => (datum.x ? datum.x : null), padding: { - bottom: 0, - left: 10, - right: 10, - top: 0, - }, width: 200, children: _jsx(ChartDonutUtilization, { data: { x: "Storage capacity", y: 80 }, labels: ({ datum }) => datum.x ? `${datum.x}: ${datum.y}%` : null, title: "80%", subTitle: "Available", thresholds: [{ value: 60 }, { value: 90 }] }) }) }) }) }), _jsx(CardFooter, { children: _jsx(Button, { variant: "link", isInline: true, icon: _jsx(ArrowRightIcon, {}), iconPosition: "end", component: "a", href: "#", children: "Storage page" }) })] })); -}; -StorageCard.displayName = "StorageCard"; -export default StorageCard; -//# sourceMappingURL=AnimationsOverviewStorage.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.d.ts deleted file mode 100644 index 8e80ccb067..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const ClusterDetailsCard: React.FunctionComponent; -export default ClusterDetailsCard; -//# sourceMappingURL=ClusterDetailsCard.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.js deleted file mode 100644 index 5ef6869e13..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/ClusterDetailsCard.js +++ /dev/null @@ -1,8 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { Card, CardTitle, CardBody, CardFooter, Title, DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm, Divider, } from '@patternfly/react-core'; -export const ClusterDetailsCard = () => { - return (_jsxs(Card, { isGlass: true, isFullHeight: true, children: [_jsx(CardTitle, { children: _jsx(Title, { id: "cluster-details-title", headingLevel: "h1", size: "xl", children: "Cluster Details" }) }), _jsx(CardBody, { children: _jsxs(DescriptionList, { "aria-labelledby": 'cluster-details-title', children: [_jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Cluster API Address" }), _jsx(DescriptionListDescription, { children: _jsx("a", { href: "#", children: "https://api1.devcluster.openshift.com" }) })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Cluster ID" }), _jsx(DescriptionListDescription, { children: "63b97ac1-b850-41d9-8820-239becde9e86" })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Provide" }), _jsx(DescriptionListDescription, { children: "AWS" })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "OpenShift Version" }), _jsx(DescriptionListDescription, { children: "4.5.0.ci-2020-06-16-015028" })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Update Channel" }), _jsx(DescriptionListDescription, { children: "stable-4.5" })] })] }) }), _jsx(Divider, {}), _jsx(CardFooter, { children: _jsx("a", { href: "#", children: "View Settings" }) })] })); -}; -ClusterDetailsCard.displayName = 'ClusterDetailsCard'; -export default ClusterDetailsCard; -//# sourceMappingURL=ClusterDetailsCard.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.d.ts deleted file mode 100644 index f8ce137c5b..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const RecentActivityCard: React.FunctionComponent; -export default RecentActivityCard; -//# sourceMappingURL=RecentActivityCard.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.js deleted file mode 100644 index 28b0c173b5..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/cards/RecentActivityCard.js +++ /dev/null @@ -1,52 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; -import { Card, CardHeader, CardTitle, CardBody, Flex, Dropdown, MenuToggle, ProgressStep, ProgressStepper, Spinner, Button, } from '@patternfly/react-core'; -import PortIcon from '@patternfly/react-icons/dist/esm/icons/port-icon'; -import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; -import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon'; -import ResourcesFullIcon from '@patternfly/react-icons/dist/esm/icons/resources-full-icon'; -import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon'; -import ExclamationTriangleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-triangle-icon'; -import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; -export const RecentActivityCard = () => { - const activityData = [ - { - id: 1, - name: 'frontend-deployment', - project: 'automation-platform', - progress: ['success', 'success', 'success'], - }, - { - id: 2, - name: 'backend-deployment', - project: 'automation-platform', - progress: ['success', 'pending', 'default'], - }, - { - id: 3, - name: 'database-deployment', - project: 'automation-platform', - progress: ['success', 'success', 'danger'], - }, - { - id: 4, - name: 'frontend-deployment', - project: 'ci-dashboard', - progress: ['success', 'warning', 'pending'], - }, - ]; - const iconMap = { - success: _jsx(CheckCircleIcon, {}), - info: _jsx(ResourcesFullIcon, {}), - pending: _jsx(Spinner, { isInline: true }), - danger: _jsx(ExclamationCircleIcon, {}), - warning: _jsx(ExclamationTriangleIcon, {}), - }; - return (_jsxs(Card, { isGlass: true, isFullHeight: true, children: [_jsx(CardHeader, { actions: { - actions: (_jsx(Dropdown, { isOpen: false, onSelect: () => { }, onOpenChange: () => { }, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, variant: "plain", onClick: () => { }, isExpanded: false, "aria-label": "Recent activity card options", children: _jsx(EllipsisVIcon, {}) })), popperProps: { position: 'right' } })), - hasNoOffset: false, - className: '', - }, children: _jsx(CardTitle, { children: _jsxs(Flex, { alignItems: { default: 'alignItemsCenter' }, children: [_jsx(PortIcon, {}), _jsx("span", { children: "Recent activity" })] }) }) }), _jsx(CardBody, { children: _jsxs(Table, { "aria-label": "Recent activity table", variant: "compact", className: "pf-m-plain", children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { width: 30, children: "Name" }), _jsx(Th, { width: 30, children: "Project" }), _jsx(Th, { width: 30, children: "Progress" }), _jsx(Th, { width: 10 })] }) }), _jsx(Tbody, { children: activityData.map((activity, rowIndex) => (_jsxs(Tr, { children: [_jsx(Td, { children: _jsx(Button, { variant: "link", isInline: true, component: "a", href: "#", children: activity.name }) }), _jsx(Td, { children: _jsx(Button, { variant: "link", isInline: true, component: "a", href: "#", children: activity.project }) }), _jsx(Td, { children: _jsx(ProgressStepper, { isCompact: true, "aria-label": `Progress for activity ${activity.name} in project ${activity.project}`, children: activity.progress.map((stepVariant, stepIndex) => (_jsx(ProgressStep, { id: `progress-step-${rowIndex}-${stepVariant}-${stepIndex}`, variant: stepVariant, icon: iconMap[stepVariant], "aria-label": `Step ${stepIndex + 1} is ${stepVariant}` }, stepIndex))) }) }), _jsx(Td, { isActionCell: true, children: _jsx(Dropdown, { isOpen: false, onSelect: () => { }, onOpenChange: () => { }, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, variant: "plain", onClick: () => { }, isExpanded: false, "aria-label": `Options for activity ${activity.name} in project ${activity.project}`, children: _jsx(EllipsisVIcon, {}) })), popperProps: { position: 'right' } }) })] }, activity.id))) })] }) })] })); -}; -RecentActivityCard.displayName = 'RecentActivityCard'; -export default RecentActivityCard; -//# sourceMappingURL=RecentActivityCard.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.d.ts deleted file mode 100644 index db1d617902..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const CompassBasic: React.FunctionComponent; -//# sourceMappingURL=dashboard.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.js deleted file mode 100644 index 536076b953..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/dashboard.js +++ /dev/null @@ -1,53 +0,0 @@ -import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; -import { useState } from 'react'; -import { Compass, CompassHeader, CompassContent, Panel, PanelMain, CompassMessageBar, Hero, Tabs, TabsComponent, Tab, TabTitleText, ActionList, ActionListGroup, ActionListItem, Button, Tooltip, Content, Avatar, Dropdown, DropdownItem, DropdownList, Flex, MenuToggle, Grid, GridItem, Icon, SkipToContent } from '@patternfly/react-core'; -import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon'; -import OutlinedPlusSquare from '@patternfly/react-icons/dist/esm/icons/outlined-plus-square-icon'; -import OutlinedCopy from '@patternfly/react-icons/dist/esm/icons/outlined-copy-icon'; -import OutlinedQuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/outlined-question-circle-icon'; -import { MessageBar } from '@patternfly/chatbot'; -import { RHAutomationsLogo } from './assets/RHAutomationsLogo'; -import { RHAiExperienceIcon } from './assets/RHAiExperienceIcon'; -import AnimationsOverviewClusterInventory from "./cards/AnimationsOverviewClusterInventory"; -import AnimationsOverviewNetworkActivity from "./cards/AnimationsOverviewNetworkActivity"; -import AnimationsOverviewStorage from "./cards/AnimationsOverviewStorage"; -import AnimationsOverviewMemoryUtilization from "./cards/AnimationsOverviewMemoryUtilization"; -import { ClusterDetailsCard } from './cards/ClusterDetailsCard'; -import { RecentActivityCard } from './cards/RecentActivityCard'; -import heroBg from './assets/hero-bg.png'; -import pfBackground from '@patternfly/patternfly/assets/images/pf-background.svg'; -import imgAvatar from './assets/avatar.jpg'; -export const CompassBasic = () => { - const [activeTab, setActiveTab] = useState(0); - const [isDropdownOpen, setIsDropdownOpen] = useState(false); - const [isThinking, setIsThinking] = useState(false); - const navContent = (_jsx(_Fragment, { children: _jsx(Panel, { isPill: true, isGlass: true, children: _jsx(PanelMain, { children: _jsxs(Tabs, { activeKey: activeTab, isNav: true, onSelect: (_event, tabIndex) => setActiveTab(tabIndex), component: TabsComponent.nav, "aria-label": "Compass global", inset: { default: 'insetXl' }, children: [_jsx(Tab, { eventKey: 0, title: _jsx(TabTitleText, { children: "Dashboard" }) }), _jsx(Tab, { eventKey: 1, title: _jsx(TabTitleText, { children: "Builder" }), isDisabled: true }), _jsx(Tab, { eventKey: 2, title: _jsx(TabTitleText, { children: "Automations" }) }), _jsx(Tab, { eventKey: 3, title: _jsx(TabTitleText, { children: "Approvals" }), isDisabled: true }), _jsx(Tab, { eventKey: 4, title: _jsx(TabTitleText, { children: "Configuration" }) }), _jsx(Tab, { eventKey: 5, title: _jsx(TabTitleText, { children: "Test Page" }) })] }) }) })); - const westContent = (_jsx(Panel, { isPill: true, isGlass: true, children: _jsx(PanelMain, { children: _jsxs(ActionList, { isIconList: true, isVertical: true, children: [_jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Play", children: _jsx(Button, { variant: "plain", icon: _jsx(PlayIcon, {}), "aria-label": "Play", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Add", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedPlusSquare, {}), "aria-label": "Add", isCircle: true }) }) })] }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Assistant", children: _jsx(Button, { variant: "plain", icon: _jsx(Icon, { style: { translate: ".05em .1em; scale: 1.1" }, children: _jsx(RHAiExperienceIcon, {}) }), "aria-label": "Assistant", isCircle: true, className: "pf-v6-m-ai-indicator" }) }) }), _jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Help", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedQuestionCircleIcon, {}), "aria-label": "Help", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Copy", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedCopy, {}), "aria-label": "Copy", isCircle: true }) }) })] })] }) })); - const userDropdownItems = (_jsxs(_Fragment, { children: [_jsx(DropdownItem, { children: "My profile" }, "group 2 profile"), _jsx(DropdownItem, { children: "User management" }, "group 2 user"), _jsx(DropdownItem, { children: "Logout" }, "group 2 logout")] })); - const onDropdownSelect = () => { - setIsDropdownOpen(false); - }; - const onDropdownToggle = () => { - setIsDropdownOpen(!isDropdownOpen); - }; - const userDropdown = (_jsx(Dropdown, { isOpen: isDropdownOpen, onSelect: () => onDropdownSelect, onOpenChange: (isOpen) => setIsDropdownOpen(isOpen), popperProps: { position: "right" }, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, onClick: onDropdownToggle, isExpanded: isDropdownOpen, variant: "plain", isCircle: true, children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, gap: { default: "gapMd" }, children: ["Aliyah Frazier", _jsx(Avatar, { src: imgAvatar, alt: "", size: "md" })] }) })), children: _jsx(DropdownList, { children: userDropdownItems }) })); - const northContent = _jsx(CompassHeader, { logo: _jsx("a", { href: "#", "aria-label": "Red Hat automations", tabIndex: 0, children: _jsx(RHAutomationsLogo, {}) }), nav: navContent, profile: userDropdown }); - const mainContent = (_jsxs(_Fragment, { children: [_jsx(Hero, { gradientDark: { stop1: '#3d2785', stop2: '#1b0d33', stop3: '#000' }, backgroundSrcDark: heroBg, children: _jsxs(Content, { children: [_jsx("h1", { children: "Automation that does more" }), _jsx("p", { children: "Red\u00A0Hat Ansible Automation Platform offers more capabilities, accessibility, and flexibility, so you can bring the power of automation to the teams, tasks, and environments that need it." }), _jsx(ActionList, { children: _jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Button, { variant: "primary", children: "Upgrade today" }) }), _jsx(ActionListItem, { children: _jsx(Button, { variant: "secondary", children: "Talk to a Red Hatter" }) })] }) })] }) }), _jsx(CompassContent, { id: "main", children: _jsxs(Grid, { hasGutter: true, style: { maxHeight: 'none' }, children: [_jsx(GridItem, { span: 12, sm: 12, md: 6, lg: 4, xl: 3, rowSpan: 4, children: _jsx(ClusterDetailsCard, {}) }), _jsx(GridItem, { span: 12, sm: 12, md: 6, lg: 4, xl: 3, rowSpan: 2, children: _jsx(AnimationsOverviewClusterInventory, {}) }), _jsx(GridItem, { span: 12, sm: 12, md: 6, lg: 4, xl: 3, rowSpan: 2, children: _jsx(AnimationsOverviewStorage, {}) }), _jsx(GridItem, { span: 12, sm: 12, md: 12, lg: 8, xl: 3, rowSpan: 2, children: _jsx(AnimationsOverviewMemoryUtilization, {}) }), _jsx(GridItem, { span: 12, sm: 12, md: 12, lg: 12, xl: 3, rowSpan: 2, children: _jsx(AnimationsOverviewNetworkActivity, {}) }), _jsx(GridItem, { span: 12, sm: 12, md: 12, lg: 8, xl: 6, rowSpan: 2, children: _jsx(RecentActivityCard, {}) })] }) })] })); - const eastContent = (_jsx(Panel, { isPill: true, isGlass: true, children: _jsx(PanelMain, { children: _jsx(ActionList, { isIconList: true, isVertical: true, children: _jsxs(ActionListGroup, { children: [_jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Help 2", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedQuestionCircleIcon, {}), "aria-label": "Help 2", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Add", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedPlusSquare, {}), "aria-label": "Add", isCircle: true }) }) }), _jsx(ActionListItem, { children: _jsx(Tooltip, { content: "Help 3", children: _jsx(Button, { variant: "plain", icon: _jsx(OutlinedQuestionCircleIcon, {}), "aria-label": "Help 3", isCircle: true }) }) })] }) }) })); - const handleSendMessage = () => { - setIsThinking(true); - setTimeout(() => { - setIsThinking(false); - }, 10000); // 10 seconds - }; - const southContent = (_jsxs(CompassMessageBar, { children: [_jsx(Panel, { isPill: true, hasNoBorder: true, isGlass: true, children: _jsx(PanelMain, { children: _jsx(MessageBar, { isCompact: true, onSendMessage: handleSendMessage, alwayShowSendButton: true, hasAttachButton: false, hasAiIndicator: true, isThinking: isThinking }) }) }), _jsx("div", { className: "pf-v6-screen-reader", "aria-live": "polite", children: isThinking && "AI is thinking..." })] })); - const skipToContentClick = (e) => { - e.preventDefault(); - const mainContent = document.getElementById('main'); - if (mainContent) { - mainContent.focus(); - } - }; - return (_jsxs(_Fragment, { children: [_jsx(SkipToContent, { onClick: skipToContentClick, href: "#main", children: "Skip to content" }), _jsx(Compass, { header: northContent, sidebarStart: westContent, main: mainContent, sidebarEnd: eastContent, footer: southContent, backgroundSrcDark: pfBackground, backgroundSrcLight: pfBackground })] })); -}; -//# sourceMappingURL=dashboard.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.d.ts b/packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.d.ts deleted file mode 100644 index 053714deed..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare module "*.svg" { - const content: string; - export default content; -} -declare module "*.png" { - const content: string; - export default content; -} -declare module "*.jpg" { - const content: string; - export default content; -} -//# sourceMappingURL=declarations.d.ts.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.js b/packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.js deleted file mode 100644 index af74c5824a..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/declarations.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=declarations.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/ai.md b/packages/documentation-site/patternfly-docs/content/AI/ai.md index db0f8a791e..3f158aed86 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/ai.md +++ b/packages/documentation-site/patternfly-docs/content/AI/ai.md @@ -19,7 +19,7 @@ The following guides are intended to help you integrate AI into your workflows a - **[Marketplace](/ai/marketplace):** Plugins that give AI coding assistants knowledge and skills to generate more accurate, PatternFly-compliant code. - **[AI-assisted code migration](/ai/ai-assisted-code-migration):** Guidance for using AI to speed up and simplify codebase migrations. - **[Conversational design principles](/ai/conversation-design):** Guidance for designing effective and human-centered AI conversations. -- **[Generative UIs](/ai/generative-uis/overview):** Proof-of-concept resources for creating UIs that can utilize AI to dynamically generate elements as needed. +- **[Compass layout (org demos)](/components/compass/org-demos):** Full-page Compass layout examples for generative UI patterns. For React Flow integration, see the [React Flow guide](/developer-guides/react-flow). --- diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/about-generative-ui.md b/packages/documentation-site/patternfly-docs/content/AI/generative-uis/about-generative-ui.md deleted file mode 100644 index b6e7349803..0000000000 --- a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/about-generative-ui.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -id: Overview -title: Generative UIs overview -section: AI -subsection: Generative UIs -sortValue: 1 ---- - -import { Alert } from "@patternfly/react-core"; - -## What is generative UI? - -**Generative UI (GenUI)** refers to a user interface design approach where AI is leveraged to dynamically create and adapt UI elements based on context, user needs, and data. Unlike traditional, static UIs, GenUI can produce layouts, components, and visual styles in real-time, offering more flexible and personalized user experiences. - ---- - -## Compass: PatternFly's GenUI exploration - -Compass is best suited for use in proof of concept generative UI use cases. It is not yet production quality code and should be used for exploration and experimentation purposes only. - -GenUI represents a significant opportunity for PatternFly to explore new patterns, layouts, and styles that support consistent AI-driven interface generation. To explore how we can enable GenUI in PatternFly, we've created a proof of concept called "Compass". - -**Compass** is a new layout, built with PatternFly styles and design tokens, but optimized to support dynamic, personalized information. - -### What does Compass look like? - -Compass places a main section in the center of the screen and surrounds it with a header, a footer, and sidebars on either side. Compass screens are conversation-focused, utilizing an interactive message bar in the footer to drive interactions with the AI model. The main section displays components dynamically generated based on the user's request. - -To explore Compass and its features, take a look at the [Compass component documentation](/ai/generative-uis/compass), which includes the following full-page demos: -- [Conversation-focused, full-page demo with card view and table layouts](/ai/generative-uis/compass#card-and-data-view-layout) -- [Conversation-focused, full-page demo with dashboard layout](/ai/generative-uis/compass/org-demos#dashboard-layout) -- [Static, full-page HTML demo with multiple content sections](/ai/generative-uis/compass/html-demos#multiple-sections) -- [Static, full-page HTML demo with drawer](/ai/generative-uis/compass/html-demos#with-drawer) - -### What does Compass include? - -To support the different ways you might use Compass, we've introduced several new capabilities to PatternFly: - -- **Design tokens**: New design tokens that enable the following styles: - - Glass-like visual effects - - Background and border gradients - - Additional micro animations - - New background image options -- [**Compass layout component**](/ai/generative-uis/compass): A new layout, designed specifically for GenUI patterns, with a main content section, header, footer, and sidebars. -- **New modifiers for existing components**: These new props enable different Compass effects and are documented across component documentation where they can be used: - - Transparency: - - `isPlain` makes cards, data lists, and tables transparent. This allows backgrounds to be visible through components, creating the modern, glass-like visual effect. - - Layout and navigation: - - `isVertical` changes action lists to a vertical layout. This enables Compass's sidebars. - - `isNav` places tabs within a pill-shaped container, so they can better function as top navigation. - - Shape and form: - - `isCircle` creates circular buttons and icon menu toggles, and pill-shaped standard menu toggles. - - `isPill` gives a drawer a rounded, floating look. - - AI indicators: - - `isThinking` adds a pulsing animation to a component (like a text input) to show a system is actively processing (like an AI "thinking"). - - `hasAiIndicator` adds a gradient border to a component (like a text input) to visually highlight AI-related content. - -### Accessibility consideration - -Because GenUIs introduce new interaction patterns and visual styles, it is essential to ensure that GenUI experiences remain accessible to all users. To keep Compass designs in line with the accessibility standards maintained by the rest of PatternFly, we've kept accessibility a major focus throughout the design and development of Compass. - -### How do I use Compass? - -For technical details and full-page demos, refer to the [Compass documentation](/ai/generative-uis/compass). - -#### AI-enabled seed app - -We are creating an AI-enabled seed app in [the compass_theme branch of the patternfly-react-seed repo](https://github.com/patternfly/patternfly-react-seed/tree/compass_theme) that will make it easier for you to create your own Compass-based prototypes. The seed app includes the Compass layout with all styles set up, providing you with a foundation on which you can build. To build out your own proof of concept, you can leverage AI tools like Cursor or Claude Code alongside the seed app, making it easier to experiment with generative UI patterns and explore new use cases. - -#### React Flow integration - -When creating GenUI concepts with PatternFly's Compass component, you might want to utilize [React Flow](https://reactflow.dev/). The React Flow package `@xyflow/react` is compatible with PatternFly through customization of its [theme](https://reactflow.dev/learn/customization/theming) and [rendered nodes](https://reactflow.dev/learn/customization/custom-nodes). A custom override stylesheet can assign PatternFly's global design tokens to React Flow's own tokens to ensure consistent styling. For more information on using React Flow with Compass, refer to our [React Flow documentation](/ai/generative-uis/react-flow). - -### Development status - -Compass is still under development, with new components being built, evaluated, and refined based on feedback. As we learn more about GenUI patterns and as more projects experiment with Compass, the design will continuously evolve to support practical applications. - -As of Dec 10, 2025, the following prereleases are available for building out Compass-based POCs. - -- `"@patternfly/patternfly": "6.5.0-prerelease.33"` -- `"@patternfly/react-charts": "8.5.0-prerelease.9"` -- `"@patternfly/react-code-editor": "6.5.0-prerelease.26"` -- `"@patternfly/react-core": "6.5.0-prerelease.24"` -- `"@patternfly/react-drag-drop": "6.5.0-prerelease.24"` -- `"@patternfly/react-icons": "6.5.0-prerelease.11"` -- `"@patternfly/react-styles": "6.5.0-prerelease.9"` -- `"@patternfly/react-table": "6.5.0-prerelease.24"` -- `"@patternfly/react-templates": "6.5.0-prerelease.24"` -- `"@patternfly/react-tokens": "6.5.0-prerelease.9"` -- `"@patternfly/chatbot": "6.5.0"` \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/.gitignore b/packages/documentation-site/patternfly-docs/content/components/compass/.gitignore similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/.gitignore rename to packages/documentation-site/patternfly-docs/content/components/compass/.gitignore diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/Compass.md b/packages/documentation-site/patternfly-docs/content/components/compass/Compass.md similarity index 80% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/Compass.md rename to packages/documentation-site/patternfly-docs/content/components/compass/Compass.md index 0a8cb91a88..9af4a6745e 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/Compass.md +++ b/packages/documentation-site/patternfly-docs/content/components/compass/Compass.md @@ -1,24 +1,25 @@ --- id: Compass -section: AI +section: components source: org-demos -subsection: Generative UIs --- +import '../components.css'; + ## Demos import { useState, memo, useCallback, useRef, useEffect } from 'react'; -import { ActionsColumn } from "@patternfly/react-table"; -import { DataViewTable } from "@patternfly/react-data-view/dist/dynamic/DataViewTable"; -import { DataViewToolbar } from "@patternfly/react-data-view/dist/dynamic/DataViewToolbar"; -import { DataViewTextFilter } from "@patternfly/react-data-view/dist/dynamic/DataViewTextFilter"; +import { ActionsColumn } from '@patternfly/react-table'; +import { DataViewTable } from '@patternfly/react-data-view/dist/dynamic/DataViewTable'; +import { DataViewToolbar } from '@patternfly/react-data-view/dist/dynamic/DataViewToolbar'; +import { DataViewTextFilter } from '@patternfly/react-data-view/dist/dynamic/DataViewTextFilter'; import { MessageBar } from '@patternfly/chatbot'; import ThIcon from '@patternfly/react-icons/dist/esm/icons/th-icon'; import ListIcon from '@patternfly/react-icons/dist/esm/icons/list-icon'; -import EllipsisVIcon from "@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon"; +import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon'; import OutlinedPlusSquare from '@patternfly/react-icons/dist/esm/icons/outlined-plus-square-icon'; import OutlinedCopy from '@patternfly/react-icons/dist/esm/icons/outlined-copy-icon'; @@ -28,10 +29,10 @@ import pfBackground from '@patternfly/patternfly/assets/images/pf-background.svg import imgAvatar from './assets/avatar.jpg'; import { RHAutomationsLogo } from './assets/RHAutomationsLogo'; import { RHAiExperienceIcon } from './assets/RHAiExperienceIcon'; -import AnimationsOverviewClusterInventory from "./cards/AnimationsOverviewClusterInventory"; -import AnimationsOverviewNetworkActivity from "./cards/AnimationsOverviewNetworkActivity"; -import AnimationsOverviewStorage from "./cards/AnimationsOverviewStorage"; -import AnimationsOverviewMemoryUtilization from "./cards/AnimationsOverviewMemoryUtilization"; +import AnimationsOverviewClusterInventory from './cards/AnimationsOverviewClusterInventory'; +import AnimationsOverviewNetworkActivity from './cards/AnimationsOverviewNetworkActivity'; +import AnimationsOverviewStorage from './cards/AnimationsOverviewStorage'; +import AnimationsOverviewMemoryUtilization from './cards/AnimationsOverviewMemoryUtilization'; import { ClusterDetailsCard } from './cards/ClusterDetailsCard'; import { RecentActivityCard } from './cards/RecentActivityCard'; diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassHandbook.md b/packages/documentation-site/patternfly-docs/content/components/compass/CompassHandbook.md similarity index 86% rename from packages/documentation-site/patternfly-docs/content/AI/Compass/CompassHandbook.md rename to packages/documentation-site/patternfly-docs/content/components/compass/CompassHandbook.md index 57f0a5c0f5..b35dd6ddad 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassHandbook.md +++ b/packages/documentation-site/patternfly-docs/content/components/compass/CompassHandbook.md @@ -1,8 +1,8 @@ --- id: Compass -section: AI +section: components source: Development-guide -subsection: Generative UIs +tabName: Development guide --- ## Structural patterns @@ -11,9 +11,9 @@ When building generative UI layouts using the Compass components, there are seve ### Transparent containers Transparent containers create a modern glass look and feel. To enable transparency on a container, apply `pf-v6-theme-glass` to the `html` element class list, similar to the approach for enabling the dark mode theme. -Within Compass layouts, elements with a transparent glass background and rounded borders should be wrapped in a `` and `` (some Compass components do this automatically). You can adjust various options of the `` to adapt its padding and behavior to fit the context of your use case. +Within Compass layouts, elements with a transparent glass background and rounded borders should be wrapped in a [`Panel`](/components/panel) stack (`Panel`, `PanelMain`, and `PanelMainBody`), using the `isGlass` modifier on `Panel` where appropriate (some Compass components compose this automatically). Use `Panel` props such as `isPill`, `hasNoBorder`, and `isFullHeight`, and set body padding via `PanelMainBody` (for example `style={{ padding: 0 }}` when you need no inner padding). -To prevent styling issues, do not nest `` components while using the glass effects. +To prevent styling issues, do not nest glass-styled `Panel` stacks while using the glass effects. ### Header You can add a header to a Compass layout via the `` component. `` constructs 3 sections, which can contain any custom content, but will typically include the following: @@ -35,7 +35,7 @@ You can add a header to a Compass layout via the `` component. `< ``` ### Sidebars -There are 2 vertical sidebars in a Compass layout: 1 at the start of the page and another at the end. There are no specific helper components for these sections, so they're usually created by passing a `` and `` that contains an [``](/components/action-list) with the `isVertical` flag. +There are 2 vertical sidebars in a Compass layout: 1 at the start of the page and another at the end. There are no specific helper components for these sections, so they're usually created by passing a pill [`Panel`](/components/panel) (`isPill`) that contains an [``](/components/action-list) with the `isVertical` flag. ### Docked navigation As an alternative to the above header and sidebars, a docked navigation may be used to organize navigation elements into a single anchored sidebar. You can add a docked nav to the Compass layout via the `dock` property. @@ -45,16 +45,18 @@ A docked nav will typically contain a [``](/components/masthead) with ### Footer There are 2 methods of adding a footer to a compass layout. -In both methods, the footer content will remain the same, typically containing a [ChatBot ``](/extensions/chatbot/messages/), wrapped in a ``, ``, and `` component: +In both methods, the footer content will remain the same, typically containing a [ChatBot ``](/extensions/chatbot/messages/), wrapped in a pill [`Panel`](/components/panel) and `` component: ``` - - + + - -
- // aria anouncments for message bar's state updates -
+ + +
+ // aria announcements for message bar's state updates +
+
@@ -71,9 +73,9 @@ In both methods, the footer content will remain the same, typically containing a ### Main content The main content in a Compass layout includes the generated information displays. Main content fills the center of the viewport and typically consists of a `` or ``, a ``, and an optional ``. -Often, the main section will contain a `` and `` with `` and `` children containing the primary page content. +Often, the main section will contain a `` and `` with a [`Panel`](/components/panel) stack child containing the primary page content. -When making [a dashboard view](/patterns/dashboard), use a `` instead of a ``. Instead of having a single `` and `` structure within a ``, each individual dashboard item should be wrapped in a `` and ``. For example, in a dashboard with many content cards, each `` (with `isPlain` flag) should be wrapped by a `` and `` structure inside of a [``](/foundations-and-styles/layouts/grid). +When making [a dashboard view](/patterns/dashboard), use a `` instead of a ``. Instead of having a single scrollable `Panel` within a ``, each individual dashboard item should be wrapped in its own `Panel` stack. For example, in a dashboard with many content cards, each `` (with `isPlain` flag) should be wrapped by a glass `Panel` (`isGlass`, `isFullHeight`) with `PanelMain` / `PanelMainBody` inside of a [``](/foundations-and-styles/layouts/grid). ## CSS customization diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/CompassIntegrationsDemo.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/CompassIntegrationsDemo.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/CompassIntegrationsDemo.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/CompassIntegrationsDemo.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/RHAiExperienceIcon.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/assets/RHAiExperienceIcon.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/RHAiExperienceIcon.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/RHAiExperienceIcon.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/RHAutomationsLogo.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/assets/RHAutomationsLogo.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/RHAutomationsLogo.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/RHAutomationsLogo.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/RHServerStackIcon.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/assets/RHServerStackIcon.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/RHServerStackIcon.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/RHServerStackIcon.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/avatar.jpg b/packages/documentation-site/patternfly-docs/content/components/compass/assets/avatar.jpg similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/avatar.jpg rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/avatar.jpg diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/hero-bg.png b/packages/documentation-site/patternfly-docs/content/components/compass/assets/hero-bg.png similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/hero-bg.png rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/hero-bg.png diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/wallpaper-dark.png b/packages/documentation-site/patternfly-docs/content/components/compass/assets/wallpaper-dark.png similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/wallpaper-dark.png rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/wallpaper-dark.png diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/wallpaper-light.png b/packages/documentation-site/patternfly-docs/content/components/compass/assets/wallpaper-light.png similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/assets/wallpaper-light.png rename to packages/documentation-site/patternfly-docs/content/components/compass/assets/wallpaper-light.png diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewClusterInventory.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewClusterInventory.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewClusterInventory.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewClusterInventory.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewMemoryUtilization.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewMemoryUtilization.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewMemoryUtilization.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewMemoryUtilization.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewNetworkActivity.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewNetworkActivity.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewNetworkActivity.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewNetworkActivity.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewStorage.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewStorage.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/AnimationsOverviewStorage.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/cards/AnimationsOverviewStorage.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/ClusterDetailsCard.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/cards/ClusterDetailsCard.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/ClusterDetailsCard.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/cards/ClusterDetailsCard.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/RecentActivityCard.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/cards/RecentActivityCard.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/cards/RecentActivityCard.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/cards/RecentActivityCard.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/dashboard.tsx b/packages/documentation-site/patternfly-docs/content/components/compass/dashboard.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/dashboard.tsx rename to packages/documentation-site/patternfly-docs/content/components/compass/dashboard.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/declarations.ts b/packages/documentation-site/patternfly-docs/content/components/compass/declarations.ts similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/declarations.ts rename to packages/documentation-site/patternfly-docs/content/components/compass/declarations.ts diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/tsconfig.json b/packages/documentation-site/patternfly-docs/content/components/compass/tsconfig.json similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/tsconfig.json rename to packages/documentation-site/patternfly-docs/content/components/compass/tsconfig.json diff --git a/packages/documentation-site/patternfly-docs/content/components/components-data.json b/packages/documentation-site/patternfly-docs/content/components/components-data.json index 6a0f889c17..1913d157ce 100644 --- a/packages/documentation-site/patternfly-docs/content/components/components-data.json +++ b/packages/documentation-site/patternfly-docs/content/components/components-data.json @@ -71,6 +71,10 @@ "illustration": "./img/component-illustrations/chip.png", "summary": "A chip is used to communicate a value or a set of attribute-value pairs within workflows that involve filtering a set of objects.

Note: The chip component has been deprecated. Our new recommendation is to use the label component instead." }, + "compass": { + "illustration": "./img/component-illustrations/panel.png", + "summary": "Compass is a full-viewport layout for generative and conversational UIs, with a header, optional sidebars, main content, and a footer area that often uses a ChatBot message bar." + }, "clipboard-copy": { "illustration": "./img/component-illustrations/clipboard-copy.png", "summary": "The clipboard copy component allows users to quickly and easily copy content to their clipboard." diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassReactFlowDemo.d.ts b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.d.ts similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/Compass/CompassReactFlowDemo.d.ts rename to packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.d.ts diff --git a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassReactFlowDemo.js b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.js similarity index 98% rename from packages/documentation-site/patternfly-docs/content/AI/Compass/CompassReactFlowDemo.js rename to packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.js index 72e0799050..1febb5f062 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/Compass/CompassReactFlowDemo.js +++ b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.js @@ -109,7 +109,7 @@ const AddNodeOnEdgeDrop = () => { }); } }, [screenToFlowPosition]); - return (_jsx("div", { className: "wrapper", ref: reactFlowWrapper, style: { height: "100%", width: "100%" }, children: _jsx(ReactFlow, { nodes: nodes, edges: edges, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onConnect: onConnect, onConnectEnd: onConnectEnd, nodeTypes: nodeTypes, fitView: true, fitViewOptions: { padding: 2 }, nodeOrigin: nodeOrigin, children: _jsx(Background, {}) }) })); + return (_jsx("div", { className: "wrapper", ref: reactFlowWrapper, style: { height: "100%", width: "100%" }, children: _jsx(ReactFlow, { nodes: nodes, edges: edges, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onConnect: onConnect, onConnectEnd: onConnectEnd, nodeTypes: nodeTypes, fitView: true, fitViewOptions: { padding: 2 }, nodeOrigin: nodeOrigin, "aria-label": "React flow demo", children: _jsx(Background, {}) }) })); }; export const CompassReactFlowDemo = () => (_jsx("div", { style: { height: "400px" }, children: _jsx(ReactFlowProvider, { children: _jsx(AddNodeOnEdgeDrop, {}) }) })); //# sourceMappingURL=CompassReactFlowDemo.js.map \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/CompassReactFlowDemo.tsx b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.tsx similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/CompassReactFlowDemo.tsx rename to packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/CompassReactFlowDemo.tsx diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/ReactFlow.md b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/ReactFlow.md similarity index 88% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/ReactFlow.md rename to packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/ReactFlow.md index aee998bd40..3cd0116f80 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/ReactFlow.md +++ b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/ReactFlow.md @@ -1,7 +1,7 @@ --- id: React Flow -section: AI -subsection: Generative UIs +title: React Flow with PatternFly +section: developer-guides --- import { useState, memo, useCallback, useRef } from 'react'; @@ -21,7 +21,7 @@ import { import "@xyflow/react/dist/style.css"; import "./reactFlowOverrides.css"; -When creating GenUI concepts with PatternFly's compass component, you might want to utilize [React Flow](https://reactflow.dev/). The React Flow package `@xyflow/react` is compatible with PatternFly through customization of its [theme](https://reactflow.dev/learn/customization/theming) and [rendered nodes](https://reactflow.dev/learn/customization/custom-nodes). +When creating generative UI concepts with PatternFly's [Compass component](/components/compass), you might want to utilize [React Flow](https://reactflow.dev/). The React Flow package `@xyflow/react` is compatible with PatternFly through customization of its [theme](https://reactflow.dev/learn/customization/theming) and [rendered nodes](https://reactflow.dev/learn/customization/custom-nodes). ### Example diff --git a/packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/reactFlowOverrides.css b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/reactFlowOverrides.css similarity index 100% rename from packages/documentation-site/patternfly-docs/content/AI/generative-uis/compass/reactFlowOverrides.css rename to packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/reactFlowOverrides.css diff --git a/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/tsconfig.json b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/tsconfig.json new file mode 100644 index 0000000000..ff67adc66f --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/developer-guides/react-flow/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "assumeChangesOnlyAffectDirectDependencies": true, + "jsx": "react-jsx", + "lib": ["es2015", "dom"], + "target": "es2015", + "module": "es2015", + "moduleResolution": "node", + "esModuleInterop": true, + "skipLibCheck": true, + "importHelpers": true, + "composite": true, + "sourceMap": true, + "declarationMap": true, + "strict": false, + "strictNullChecks": false, + "isolatedModules": true, + "rootDir": "./", + "outDir": "./", + "baseUrl": "." + }, + "include": ["./*", "./**/*"], + "exclude": ["**/**.test.tsx", "**/**.test.ts", "**/examples/**", "**/__mocks__/**"] +} diff --git a/packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/card-view.png b/packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/card-view.png deleted file mode 100644 index 6361cd87f2c70e68881a33ab40762d2806affd88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139302 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