diff --git a/.github/release.sh b/.github/release.sh index 506097c32a9..f6f1b847ecb 100755 --- a/.github/release.sh +++ b/.github/release.sh @@ -17,10 +17,11 @@ echo "Doing a release..." LOG=$(git log --format="%s" -1 | grep -Poe "#\d+") PR_NUM=${LOG:1} -yarn run lerna publish prerelease --preid=prerelease --dist-tag=prerelease --yes 2>&1 | tee lerna-output.txt +# yarn run lerna publish patch --dist-tag=prerelease-patch --no-private --yes 2>&1 | tee lerna-output.txt +yarn run lerna publish patch --dist-tag=prerelease-patch --no-private --yes 2>&1 | tee lerna-output.txt # use lerna command below for dry run -#yarn run lerna version prerelease --preid=prerelease --yes --no-git-tag-version --no-push | tee lerna-output.txt +# yarn run lerna version patch --yes --no-git-tag-version --no-push --no-private | tee lerna-output.txt if grep -i "Successfully published" lerna-output.txt; # Leave a Github comment then diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 66e9c84d2df..0e7b8fd72d4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: Release on: push: branches: - - main + - 6.2.x concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true diff --git a/README.md b/README.md index cbcf1faa775..b2cdee88a52 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # PatternFly React - + [![lerna](https://img.shields.io/badge/maintained%20with-lerna-green.svg?style=for-the-badge)](https://lernajs.io/) [![PatternFly npm badge](https://img.shields.io/npm/v/@patternfly/react-core.svg?label=PF%20Core&style=for-the-badge)](https://www.npmjs.com/package/@patternfly/react-core) diff --git a/lerna.json b/lerna.json index 69ac0a90549..f2b35224f89 100644 --- a/lerna.json +++ b/lerna.json @@ -24,7 +24,7 @@ } }, "version": "independent", - "allowBranch": ["main", "v4", "5.0.x", "v5"], + "allowBranch": ["main", "v4", "5.0.x", "v5", "6.2.x"], "packages": ["packages/*", "packages/react-integration/demo-app-ts"], "$schema": "node_modules/lerna/schemas/lerna-schema.json" } diff --git a/package.json b/package.json index 2c8745caa5f..c08dcfc10fb 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.24.7", "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "^7.24.7", - "@eslint/compat": "^1.2.7", + "@eslint/compat": "^1.2.8", "@eslint/js": "^9.22.0", "@octokit/rest": "^21.1.1", "@rollup/plugin-commonjs": "^26.0.3", diff --git a/packages/react-charts/CHANGELOG.md b/packages/react-charts/CHANGELOG.md index 26ae5b6074a..4f0fe07ea13 100644 --- a/packages/react-charts/CHANGELOG.md +++ b/packages/react-charts/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-charts@8.2.1...@patternfly/react-charts@8.2.2) (2025-04-23) + +**Note:** Version bump only for package @patternfly/react-charts + +## [8.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-charts@8.2.0...@patternfly/react-charts@8.2.1) (2025-04-17) + +**Note:** Version bump only for package @patternfly/react-charts + +## [8.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-charts@8.2.0...@patternfly/react-charts@8.2.1-prerelease.0) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-charts + # 8.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-charts diff --git a/packages/react-charts/package.json b/packages/react-charts/package.json index 87f27d03c31..e91bc43242f 100644 --- a/packages/react-charts/package.json +++ b/packages/react-charts/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-charts", - "version": "8.2.0", + "version": "8.2.2", "description": "This library provides a set of React chart components for use with the PatternFly reference implementation.", "main": "dist/js/index.js", "module": "dist/esm/index.js", diff --git a/packages/react-code-editor/CHANGELOG.md b/packages/react-code-editor/CHANGELOG.md index f453226901b..71bd1d44850 100644 --- a/packages/react-code-editor/CHANGELOG.md +++ b/packages/react-code-editor/CHANGELOG.md @@ -3,6 +3,46 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1...@patternfly/react-code-editor@6.2.2) (2025-04-23) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.0...@patternfly/react-code-editor@6.2.1) (2025-04-17) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.6...@patternfly/react-code-editor@6.2.1-prerelease.7) (2025-04-15) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.5...@patternfly/react-code-editor@6.2.1-prerelease.6) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.4...@patternfly/react-code-editor@6.2.1-prerelease.5) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.3...@patternfly/react-code-editor@6.2.1-prerelease.4) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.2...@patternfly/react-code-editor@6.2.1-prerelease.3) (2025-04-11) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.1...@patternfly/react-code-editor@6.2.1-prerelease.2) (2025-04-10) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.1-prerelease.0...@patternfly/react-code-editor@6.2.1-prerelease.1) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@6.2.0...@patternfly/react-code-editor@6.2.1-prerelease.0) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-code-editor + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-code-editor diff --git a/packages/react-code-editor/package.json b/packages/react-code-editor/package.json index 67cfb6fd67a..432ff272f82 100644 --- a/packages/react-code-editor/package.json +++ b/packages/react-code-editor/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-code-editor", - "version": "6.2.0", + "version": "6.2.2", "description": "This package provides a PatternFly wrapper for the Monaco code editor\n", "main": "dist/js/index.js", "module": "dist/esm/index.js", diff --git a/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx b/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx index 63f1cd735ad..14026b20177 100644 --- a/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx +++ b/packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx @@ -1,4 +1,4 @@ -import { Component, createRef, Fragment } from 'react'; +import { HTMLProps, ReactNode, useEffect, useRef, useState } from 'react'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/CodeEditor/code-editor'; import fileUploadStyles from '@patternfly/react-styles/css/components/FileUpload/file-upload'; @@ -112,7 +112,7 @@ export enum Language { /** The main code editor component. */ -export interface CodeEditorProps extends Omit, 'onChange'> { +export interface CodeEditorProps extends Omit, 'onChange'> { /** Additional classes added to the code editor. */ className?: string; /** Code displayed in code editor. */ @@ -126,7 +126,7 @@ export interface CodeEditorProps extends Omit, ' /** A single node or array of nodes - ideally the code editor controls component - to display * above code editor. */ - customControls?: React.ReactNode | React.ReactNode[]; + customControls?: ReactNode | ReactNode[]; /** Accessible label for the download button. */ downloadButtonAriaLabel?: string; /** Text to display in the tooltip on the download button. */ @@ -136,15 +136,15 @@ export interface CodeEditorProps extends Omit, ' /** Additional props to pass to the monaco editor. */ editorProps?: EditorProps; /** Content to display in space of the code editor when there is no code to display. */ - emptyState?: React.ReactNode; + emptyState?: ReactNode; /** Override default empty state body text. */ - emptyStateBody?: React.ReactNode; + emptyStateBody?: ReactNode; /** Override default empty state button text. */ - emptyStateButton?: React.ReactNode; + emptyStateButton?: ReactNode; /** Override default empty state link text. */ - emptyStateLink?: React.ReactNode; + emptyStateLink?: ReactNode; /** Override default empty state title text. */ - emptyStateTitle?: React.ReactNode; + emptyStateTitle?: ReactNode; /** Editor header main content title. */ headerMainContent?: string; /** Height of code editor. 'sizeToFit' will automatically change the height @@ -175,13 +175,16 @@ export interface CodeEditorProps extends Omit, ' /** Language displayed in the editor. */ language?: Language; /** The loading screen before the editor will be loaded. Defaults to 'loading...'. */ - loading?: React.ReactNode; + loading?: ReactNode; /** Function which fires each time the content of the code editor is manually changed. Does * not fire when a file is uploaded. */ onChange?: ChangeHandler; /** Function which fires each time the code changes in the code editor. */ onCodeChange?: (value: string) => void; + /** Function which fires when the code is downloaded. Defaults to a function that + * downloads the current editor content. */ + onDownload?: (value: string, fileName: string) => void; /** Callback which fires after the code editor is mounted containing a reference to the * monaco editor and the monaco instance. */ @@ -191,17 +194,17 @@ export interface CodeEditorProps extends Omit, ' /** Refer to Monaco interface {monaco.editor.IEditorOverrideServices}. */ overrideServices?: editor.IEditorOverrideServices; /** Text to show in the button to open the shortcut popover. */ - shortcutsPopoverButtonText: string; + shortcutsPopoverButtonText?: string; /** Properties for the shortcut popover. */ shortcutsPopoverProps?: PopoverProps; /** Flag to show the editor. */ showEditor?: boolean; /** The delay before tooltip fades after code copied. */ - toolTipCopyExitDelay: number; + toolTipCopyExitDelay?: number; /** The entry and exit delay for all tooltips. */ - toolTipDelay: number; + toolTipDelay?: number; /** The max width of the tooltips on all button. */ - toolTipMaxWidth: string; + toolTipMaxWidth?: string; /** The position of tooltips on all buttons. */ toolTipPosition?: | TooltipPosition @@ -226,490 +229,402 @@ export interface CodeEditorProps extends Omit, ' width?: string; } -interface CodeEditorState { - height: string; - prevPropsCode: string; - value: string; - filename: string; - isLoading: boolean; - showEmptyState: boolean; - copied: boolean; -} - -class CodeEditor extends Component { - static displayName = 'CodeEditor'; - private editor: editor.IStandaloneCodeEditor | null = null; - private wrapperRef = createRef(); - private ref = createRef(); - private timer: number | null = null; - private observer = () => {}; - - static defaultProps: CodeEditorProps = { - className: '', - code: '', - onEditorDidMount: () => {}, - language: Language.plaintext, - isDarkTheme: false, - width: '', - isLineNumbersVisible: true, - isReadOnly: false, - isLanguageLabelVisible: false, - loading: '', - emptyState: '', - emptyStateTitle: 'Start editing', - emptyStateBody: 'Drag and drop a file or upload one.', - emptyStateButton: 'Browse', - emptyStateLink: 'Start from scratch', - downloadFileName: Date.now().toString(), - isUploadEnabled: false, - isDownloadEnabled: false, - isCopyEnabled: false, - isHeaderPlain: false, - copyButtonAriaLabel: 'Copy code to clipboard', - uploadButtonAriaLabel: 'Upload code', - downloadButtonAriaLabel: 'Download code', - copyButtonToolTipText: 'Copy to clipboard', - uploadButtonToolTipText: 'Upload', - downloadButtonToolTipText: 'Download', - copyButtonSuccessTooltipText: 'Content added to clipboard', - toolTipCopyExitDelay: 1600, - toolTipDelay: 300, - toolTipMaxWidth: '100px', - toolTipPosition: 'top', - customControls: null, - isMinimapVisible: false, - headerMainContent: '', - shortcutsPopoverButtonText: 'View Shortcuts', - shortcutsPopoverProps: { - bodyContent: '', - 'aria-label': 'Keyboard Shortcuts' - }, - showEditor: true, - options: {}, - overrideServices: {}, - onCodeChange: () => {} - }; - - static getExtensionFromLanguage(language: Language) { - switch (language) { - case Language.shell: - return 'sh'; - case Language.ruby: - return 'rb'; - case Language.perl: - return 'pl'; - case Language.python: - return 'py'; - case Language.mysql: - return 'sql'; - case Language.javascript: - return 'js'; - case Language.typescript: - return 'ts'; - case Language.markdown: - return 'md'; - case Language.plaintext: - return 'txt'; - default: - return language.toString(); - } - } - - constructor(props: CodeEditorProps) { - super(props); - this.state = { - height: this.props.height, - prevPropsCode: this.props.code, - value: this.props.code, - filename: '', - isLoading: false, - showEmptyState: true, - copied: false - }; - } - - setHeightToFitContent() { - const contentHeight = this.editor.getContentHeight(); - const layoutInfo = this.editor.getLayoutInfo(); - this.editor.layout({ width: layoutInfo.width, height: contentHeight }); +const getExtensionFromLanguage = (language: Language) => { + switch (language) { + case Language.shell: + return 'sh'; + case Language.ruby: + return 'rb'; + case Language.perl: + return 'pl'; + case Language.python: + return 'py'; + case Language.mysql: + return 'sql'; + case Language.javascript: + return 'js'; + case Language.typescript: + return 'ts'; + case Language.markdown: + return 'md'; + case Language.plaintext: + return 'txt'; + default: + return language.toString(); } +}; + +/** + * Downloads a file to a users device given its string content and a full file name. + */ +const defaultOnDownload = (value: string, fileName: string) => { + const link = document.createElement('a'); + link.href = URL.createObjectURL(new Blob([value], { type: 'text' })); + link.download = fileName; + link.click(); +}; + +export const CodeEditor = ({ + className = '', + code = '', + copyButtonAriaLabel = 'Copy code to clipboard', + copyButtonSuccessTooltipText = 'Content added to clipboard', + copyButtonToolTipText = 'Copy to clipboard', + customControls = null, + downloadButtonAriaLabel = 'Download code', + downloadButtonToolTipText = 'Download', + downloadFileName = Date.now().toString(), + editorProps, + emptyState = '', + emptyStateBody = 'Drag and drop a file or upload one.', + emptyStateButton = 'Browse', + emptyStateLink = 'Start from scratch', + emptyStateTitle = 'Start editing', + headerMainContent = '', + height, + isCopyEnabled = false, + isDarkTheme = false, + isDownloadEnabled = false, + isFullHeight = false, + isHeaderPlain = false, + isLanguageLabelVisible = false, + isLineNumbersVisible = true, + isMinimapVisible = false, + isReadOnly = false, + isUploadEnabled = false, + language = Language.plaintext, + loading = '', + onChange = () => {}, + onCodeChange = () => {}, + onDownload = defaultOnDownload, + onEditorDidMount = () => {}, + options = {}, + overrideServices = {}, + shortcutsPopoverButtonText = 'View Shortcuts', + shortcutsPopoverProps = { bodyContent: '', 'aria-label': 'Keyboard Shortcuts' }, + showEditor = true, + toolTipCopyExitDelay = 1600, + toolTipDelay = 300, + toolTipMaxWidth = '100px', + toolTipPosition = 'top', + uploadButtonAriaLabel = 'Upload code', + uploadButtonToolTipText = 'Upload', + width = '' +}: CodeEditorProps) => { + const [value, setValue] = useState(code); + const [isLoading, setIsLoading] = useState(false); + const [showEmptyState, setShowEmptyState] = useState(true); + const [copied, setCopied] = useState(false); + + const editorRef = useRef(null); + const wrapperRef = useRef(null); + const ref = useRef(null); + const observer = useRef(() => {}); + + const setHeightToFitContent = () => { + const contentHeight = editorRef.current?.getContentHeight(); + const layoutInfo = editorRef.current?.getLayoutInfo(); + editorRef.current?.layout({ width: layoutInfo.width, height: contentHeight }); + }; - onChange: ChangeHandler = (value, event) => { - if (this.props.height === 'sizeToFit') { - this.setHeightToFitContent(); + const onModelChange: ChangeHandler = (value, event) => { + if (height === 'sizeToFit') { + setHeightToFitContent(); } - if (this.props.onChange) { - this.props.onChange(value, event); + if (onChange) { + onChange(value, event); } - this.setState({ value }); - this.props.onCodeChange(value); + setValue(value); + onCodeChange(value); }; - // this function is only called when the props change - // the only conflict is between props.code and state.value - static getDerivedStateFromProps(nextProps: CodeEditorProps, prevState: CodeEditorState) { - // if the code changes due to the props.code changing - // set the value to props.code - if (nextProps.code !== prevState.prevPropsCode) { - return { - value: nextProps.code, - prevPropsCode: nextProps.code - }; - } - // else, don't need to change the state.value - // because the onChange function will do all the work - return null; - } - - handleResize = () => { - if (this.editor) { - this.editor.layout({ width: 0, height: 0 }); // ensures the editor won't take up more space than it needs - this.editor.layout(); + const handleResize = () => { + if (editorRef.current) { + editorRef.current.layout({ width: 0, height: 0 }); // ensures the editor won't take up more space than it needs + editorRef.current.layout(); } }; - componentDidMount() { - document.addEventListener('keydown', this.handleGlobalKeys); - this.observer = getResizeObserver(this.ref.current, this.handleResize, true); - this.handleResize(); - } - - componentWillUnmount() { - document.removeEventListener('keydown', this.handleGlobalKeys); - this.observer(); - } - - handleGlobalKeys = (event: KeyboardEvent) => { - if (this.wrapperRef.current === document.activeElement && (event.key === 'ArrowDown' || event.key === ' ')) { - this.editor?.focus(); + const handleGlobalKeys = (event: KeyboardEvent) => { + if (wrapperRef.current === document.activeElement && (event.key === 'ArrowDown' || event.key === ' ')) { + editorRef.current?.focus(); event.preventDefault(); } }; - editorDidMount: EditorDidMount = (editor, monaco) => { + // if the code changes due to the prop changing + // set the value to the code prop + useEffect(() => setValue(code), [code]); + + useEffect(() => { + document.addEventListener('keydown', handleGlobalKeys); + observer.current = getResizeObserver(ref.current, handleResize, true); + handleResize(); + return () => { + document.removeEventListener('keydown', handleGlobalKeys); + observer.current(); + }; + }, []); + + const editorDidMount: EditorDidMount = (editor, monaco) => { // eslint-disable-next-line no-bitwise - editor.addCommand(monaco.KeyMod.Shift | monaco.KeyCode.Tab, () => this.wrapperRef.current.focus()); + editor.addCommand(monaco.KeyMod.Shift | monaco.KeyCode.Tab, () => wrapperRef.current.focus()); Array.from(document.getElementsByClassName('monaco-editor')).forEach((editorElement) => editorElement.removeAttribute('role') ); - this.props.onEditorDidMount(editor, monaco); - this.editor = editor; - if (this.props.height === 'sizeToFit') { - this.setHeightToFitContent(); + onEditorDidMount(editor, monaco); + editorRef.current = editor; + if (height === 'sizeToFit') { + setHeightToFitContent(); } }; - handleFileChange = (value: string, filename: string) => { - this.setState({ - value, - filename - }); - this.props.onCodeChange(value); + const handleFileChange = (value: string) => { + setValue(value); + onCodeChange(value); }; - handleFileReadStarted = () => this.setState({ isLoading: true }); - handleFileReadFinished = () => this.setState({ isLoading: false }); + const handleFileReadStarted = () => setIsLoading(true); + const handleFileReadFinished = () => setIsLoading(false); - readFile(fileHandle: Blob) { - return new Promise((resolve, reject) => { + const readFile = (fileHandle: Blob) => + new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result as string); reader.onerror = () => reject(reader.error); reader.readAsText(fileHandle); }); - } - onDropAccepted = (acceptedFiles: File[]) => { + const onDropAccepted = (acceptedFiles: File[]) => { if (acceptedFiles.length > 0) { const fileHandle = acceptedFiles[0]; - this.handleFileChange('', fileHandle.name); // Show the filename while reading - this.handleFileReadStarted(); - this.readFile(fileHandle) + handleFileChange(''); // Show the filename while reading + handleFileReadStarted(); + readFile(fileHandle) .then((data) => { - this.handleFileReadFinished(); - this.toggleEmptyState(); - this.handleFileChange(data, fileHandle.name); + handleFileReadFinished(); + setShowEmptyState(false); + handleFileChange(data); }) .catch((error: DOMException) => { // eslint-disable-next-line no-console console.error('error', error); - this.handleFileReadFinished(); - this.handleFileChange('', ''); // Clear the filename field on a failure + handleFileReadFinished(); + handleFileChange(''); }); } }; - onDropRejected = (rejectedFiles: FileRejection[]) => { + const onDropRejected = (rejectedFiles: FileRejection[]) => { if (rejectedFiles.length > 0) { // eslint-disable-next-line no-console console.error('There was an error accepting that dropped file'); // TODO } }; - copyCode = () => { - navigator.clipboard.writeText(this.state.value); - this.setState({ copied: true }); + const copyCode = () => { + navigator.clipboard.writeText(value); + setCopied(true); }; - download = () => { - const { value } = this.state; - const element = document.createElement('a'); - const file = new Blob([value], { type: 'text' }); - element.href = URL.createObjectURL(file); - element.download = `${this.props.downloadFileName}.${CodeEditor.getExtensionFromLanguage(this.props.language)}`; - document.body.appendChild(element); // Required for this to work in FireFox - element.click(); + const editorOptions: editor.IStandaloneEditorConstructionOptions = { + scrollBeyondLastLine: height !== 'sizeToFit', + readOnly: isReadOnly, + cursorStyle: 'line', + lineNumbers: isLineNumbersVisible ? 'on' : 'off', + tabIndex: -1, + minimap: { + enabled: isMinimapVisible + }, + ...options }; - toggleEmptyState = () => { - this.setState({ showEmptyState: false }); + const tooltipProps = { + position: toolTipPosition, + exitDelay: toolTipDelay, + entryDelay: toolTipDelay, + maxWidth: toolTipMaxWidth, + trigger: 'mouseenter focus' }; - render() { - const { height, value, isLoading, showEmptyState, copied } = this.state; - const { - isDarkTheme, - width, - className, - isCopyEnabled, - copyButtonSuccessTooltipText, - isReadOnly, - isUploadEnabled, - isLanguageLabelVisible, - copyButtonAriaLabel, - copyButtonToolTipText, - uploadButtonAriaLabel, - uploadButtonToolTipText, - downloadButtonAriaLabel, - downloadButtonToolTipText, - toolTipDelay, - toolTipCopyExitDelay, - toolTipMaxWidth, - toolTipPosition, - isLineNumbersVisible, - isDownloadEnabled, - language, - emptyState: providedEmptyState, - emptyStateTitle, - emptyStateBody, - emptyStateButton, - emptyStateLink, - customControls, - isMinimapVisible, - isHeaderPlain, - headerMainContent, - shortcutsPopoverButtonText, - shortcutsPopoverProps: shortcutsPopoverPropsProp, - showEditor, - options: optionsProp, - overrideServices, - loading, - editorProps - } = this.props; - const shortcutsPopoverProps: PopoverProps = { - ...CodeEditor.defaultProps.shortcutsPopoverProps, - ...shortcutsPopoverPropsProp - }; - const options: editor.IStandaloneEditorConstructionOptions = { - scrollBeyondLastLine: height !== 'sizeToFit', - readOnly: isReadOnly, - cursorStyle: 'line', - lineNumbers: isLineNumbersVisible ? 'on' : 'off', - tabIndex: -1, - minimap: { - enabled: isMinimapVisible - }, - ...optionsProp - }; - const isFullHeight = this.props.height === '100%' ? true : this.props.isFullHeight; - - return ( - - {({ getRootProps, getInputProps, isDragActive, open }) => { - const emptyState = - providedEmptyState || - (isUploadEnabled ? ( - - {emptyStateBody} - {!isReadOnly && ( - - - - - - - - - )} - - ) : ( - - {!isReadOnly && ( - - - - - - )} - - )); - - const tooltipProps = { - position: toolTipPosition, - exitDelay: toolTipDelay, - entryDelay: toolTipDelay, - maxWidth: toolTipMaxWidth, - trigger: 'mouseenter focus' - }; - - const hasEditorHeaderContent = - ((isCopyEnabled || isDownloadEnabled) && (!showEmptyState || !!value)) || - isUploadEnabled || - customControls || - headerMainContent || - !!shortcutsPopoverProps.bodyContent; - - const editorHeaderContent = ( - -
- - {isCopyEnabled && (!showEmptyState || !!value) && ( - } - aria-label={copyButtonAriaLabel} - tooltipProps={{ - ...tooltipProps, - 'aria-live': 'polite', - content:
{copied ? copyButtonSuccessTooltipText : copyButtonToolTipText}
, - exitDelay: copied ? toolTipCopyExitDelay : toolTipDelay, - onTooltipHidden: () => this.setState({ copied: false }) - }} - onClick={this.copyCode} - /> - )} - {isUploadEnabled && ( - } - aria-label={uploadButtonAriaLabel} - tooltipProps={{ content:
{uploadButtonToolTipText}
, ...tooltipProps }} - onClick={open} - /> - )} - {isDownloadEnabled && (!showEmptyState || !!value) && ( - } - aria-label={downloadButtonAriaLabel} - tooltipProps={{ content:
{downloadButtonToolTipText}
, ...tooltipProps }} - onClick={this.download} - /> - )} - {customControls && customControls} -
-
- {headerMainContent &&
{headerMainContent}
} - {!!shortcutsPopoverProps.bodyContent && ( -
- - - -
- )} -
- ); - - const editorHeader = ( -
- {hasEditorHeaderContent && ( -
{editorHeaderContent}
+ + + + + )} - {isLanguageLabelVisible && ( -
- - - - {language.toUpperCase()} -
+ + ) : ( + + {!isReadOnly && ( + + + + + )} + + )); + + const editorHeaderContent = ( + <> +
+ + {isCopyEnabled && (!showEmptyState || !!value) && ( + } + aria-label={copyButtonAriaLabel} + tooltipProps={{ + ...tooltipProps, + 'aria-live': 'polite', + content:
{copied ? copyButtonSuccessTooltipText : copyButtonToolTipText}
, + exitDelay: copied ? toolTipCopyExitDelay : toolTipDelay, + onTooltipHidden: () => setCopied(false) + }} + onClick={copyCode} + /> + )} + {isUploadEnabled && ( + } + aria-label={uploadButtonAriaLabel} + tooltipProps={{ content:
{uploadButtonToolTipText}
, ...tooltipProps }} + onClick={open} + /> + )} + {isDownloadEnabled && (!showEmptyState || !!value) && ( + } + aria-label={downloadButtonAriaLabel} + tooltipProps={{ content:
{downloadButtonToolTipText}
, ...tooltipProps }} + onClick={() => { + onDownload(value, `${downloadFileName}.${getExtensionFromLanguage(language)}`); + }} + /> + )} + {customControls && customControls} +
- ); - - const editor = ( -
- -
- ); - - const hiddenFileInput = ; - - return ( -
- {(isUploadEnabled || providedEmptyState) && !value ? ( -
event.stopPropagation() // Prevents clicking TextArea from opening file dialog - })} - className={css(styles.codeEditorContainer, isLoading && fileUploadStyles.modifiers.loading)} - > - {editorHeader} -
- {(showEmptyState || providedEmptyState) && !value ? ( -
- {hiddenFileInput} - {emptyState} -
- ) : ( - <> - {hiddenFileInput} - {editor} - - )} -
-
- ) : ( - <> - {editorHeader} - {showEditor && ( -
+ {headerMainContent &&
{headerMainContent}
} + {!!shortcutsPopoverProps.bodyContent && ( +
+ + + +
+ )} + + ); + + const editorHeader = ( +
+ {hasEditorHeaderContent &&
{editorHeaderContent}
} + {isLanguageLabelVisible && ( +
+ + + + {language.toUpperCase()} +
+ )} +
+ ); + + const editor = ( +
+ +
+ ); + + return ( +
+ {(isUploadEnabled || emptyState) && !value ? ( +
event.stopPropagation() // Prevents clicking TextArea from opening file dialog + })} + className={css(styles.codeEditorContainer, isLoading && fileUploadStyles.modifiers.loading)} + > + {editorHeader} +
+ {(showEmptyState || emptyState) && !value ? ( +
{hiddenFileInput} - {editor} + {editorEmptyState}
+ ) : ( + <> + {hiddenFileInput} + {editor} + )} - - )} -
- ); - }} - - ); - } -} - -export { CodeEditor }; +
+
+ ) : ( + <> + {editorHeader} + {showEditor && ( +
+ {hiddenFileInput} + {editor} +
+ )} + + )} +
+ ); + }} + + ); +}; + +CodeEditor.displayName = 'CodeEditor'; diff --git a/packages/react-code-editor/src/components/CodeEditor/examples/CodeEditorShortcutMainHeader.tsx b/packages/react-code-editor/src/components/CodeEditor/examples/CodeEditorShortcutMainHeader.tsx index 5d996e38385..8efd31d562c 100644 --- a/packages/react-code-editor/src/components/CodeEditor/examples/CodeEditorShortcutMainHeader.tsx +++ b/packages/react-code-editor/src/components/CodeEditor/examples/CodeEditorShortcutMainHeader.tsx @@ -90,6 +90,7 @@ export const CodeEditorShortcutMainHeader: React.FunctionComponent = () => { value="Mac" /> { - setErrorText(validators.map((validator) => validator(date)).join('\n') || ''); + const validatorResults = validators.map((validator) => validator(date)); + const validatorsToApply = validatorResults.filter((validator) => validator !== ''); + setErrorText(validatorsToApply.join('\n') || ''); }; const onTextInput = (event: React.FormEvent, value: string) => { diff --git a/packages/react-core/src/components/DatePicker/__tests__/DatePicker.test.tsx b/packages/react-core/src/components/DatePicker/__tests__/DatePicker.test.tsx index 9d6030c0eef..4225fee64e4 100644 --- a/packages/react-core/src/components/DatePicker/__tests__/DatePicker.test.tsx +++ b/packages/react-core/src/components/DatePicker/__tests__/DatePicker.test.tsx @@ -11,19 +11,57 @@ test('disabled date picker', () => { expect(asFragment()).toMatchSnapshot(); }); -test('Date picker with multiple validators does not show invalid icon on valid input', async () => { +test('Does not render aria-invalid input when multiple validators return empty strings', async () => { const user = userEvent.setup(); const rangeValidator = (_date: Date) => ''; + const rangeValidatorB = (_date: Date) => ''; + render(); + + await user.click(screen.getByRole('textbox')); + await user.click(document.body); + expect(screen.getByRole('textbox')).not.toBeInvalid(); +}); +test('Does not render helper text when multiple validators return empty strings', async () => { + const user = userEvent.setup(); + + const rangeValidator = (_date: Date) => ''; const rangeValidatorB = (_date: Date) => ''; + render(); + await user.click(screen.getByRole('textbox')); + await user.click(document.body); + + expect(screen.queryByText(': error status;')).not.toBeInTheDocument(); +}); + +test('Renders helper text when at least 1 validator returns a string', async () => { + const user = userEvent.setup(); + + const rangeValidator = (_date: Date) => 'Some error.'; + const rangeValidatorB = (_date: Date) => ''; render(); await user.click(screen.getByRole('textbox')); + await user.click(document.body); + + expect(screen.getByText('Some error.')).toBeVisible(); + expect(screen.getByText(': error status;')).toBeInTheDocument(); +}); +test('Renders helper text when more than 1 validator returns a string', async () => { + const user = userEvent.setup(); + + const rangeValidator = (_date: Date) => 'Some error.'; + const rangeValidatorB = (_date: Date) => 'Another error.'; + render(); + + await user.click(screen.getByRole('textbox')); await user.click(document.body); - expect(screen.getByRole('textbox')).not.toBeInvalid(); + + expect(screen.getByText('Some error. Another error.')).toBeVisible(); + expect(screen.getByText(': error status;')).toBeInTheDocument(); }); test('Error state can be cleared from outside', async () => { diff --git a/packages/react-core/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap b/packages/react-core/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap index 1040a50cf6d..5ca4fb315f4 100644 --- a/packages/react-core/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +++ b/packages/react-core/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap @@ -21,7 +21,7 @@ exports[`With popover opened 1`] = ` { /** Classes applied to root element of dropdown group */ className?: string; /** Label of the dropdown group */ - label?: string; + label?: React.ReactNode; } export const DropdownGroup: React.FunctionComponent = ({ diff --git a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionBasic.tsx b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionBasic.tsx index 9d76f6e10b9..3fa53d6ffdc 100644 --- a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionBasic.tsx +++ b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionBasic.tsx @@ -9,7 +9,11 @@ export const ExpandableSectionBasic: React.FunctionComponent = () => { }; return ( - + This content is visible only when the component is expanded. ); diff --git a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDetached.tsx b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDetached.tsx index 3f7f9042e96..d136443f949 100644 --- a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDetached.tsx +++ b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDetached.tsx @@ -25,7 +25,7 @@ export const ExpandableSectionDetached: React.FunctionComponent = () => { contentId={contentId} direction="up" > - {isExpanded ? 'Show less' : 'Show more'} + {isExpanded ? 'Show less detached example content' : 'Show more detached example content'} diff --git a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDisclosure.tsx b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDisclosure.tsx index e9360aa5b13..13c866ce6a2 100644 --- a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDisclosure.tsx +++ b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionDisclosure.tsx @@ -10,7 +10,9 @@ export const ExpandableSectionDisclosure: React.FunctionComponent = () => { return ( { />
return ( diff --git a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolled.tsx b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolled.tsx index d8ecba22f0f..660de9eb1f8 100644 --- a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolled.tsx +++ b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolled.tsx @@ -1,7 +1,7 @@ import { ExpandableSection } from '@patternfly/react-core'; export const ExpandableSectionUncontrolled: React.FunctionComponent = () => ( - + This content is visible only when the component is expanded. ); diff --git a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolledDynamicToggleText.tsx b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolledDynamicToggleText.tsx index e4d9a624f72..6dbb40f197b 100644 --- a/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolledDynamicToggleText.tsx +++ b/packages/react-core/src/components/ExpandableSection/examples/ExpandableSectionUncontrolledDynamicToggleText.tsx @@ -1,7 +1,10 @@ import { ExpandableSection } from '@patternfly/react-core'; export const ExpandableSectionUncontrolledDynamicToggle: React.FunctionComponent = () => ( - + This content is visible only when the component is expanded. ); diff --git a/packages/react-core/src/components/HelperText/HelperTextItem.tsx b/packages/react-core/src/components/HelperText/HelperTextItem.tsx index 5595c0dd3b6..dfc05278293 100644 --- a/packages/react-core/src/components/HelperText/HelperTextItem.tsx +++ b/packages/react-core/src/components/HelperText/HelperTextItem.tsx @@ -56,6 +56,7 @@ export const HelperTextItem: React.FunctionComponent = ({ const Component = component as any; const isNotDefaultVariant = variant !== 'default'; const defaultIcon = isNotDefaultVariant && defaultVariantIcons[variant]; + const shouldRenderSRText = isNotDefaultVariant && screenReaderText && screenReaderText !== ''; return ( = ({ {children} - {isNotDefaultVariant && : {screenReaderText};} + {shouldRenderSRText && : {screenReaderText};} ); diff --git a/packages/react-core/src/components/HelperText/__tests__/HelperTextItem.test.tsx b/packages/react-core/src/components/HelperText/__tests__/HelperTextItem.test.tsx index 0213ffbbd9f..f6a3af0e33f 100644 --- a/packages/react-core/src/components/HelperText/__tests__/HelperTextItem.test.tsx +++ b/packages/react-core/src/components/HelperText/__tests__/HelperTextItem.test.tsx @@ -53,6 +53,18 @@ Object.values(['indeterminate', 'warning', 'success', 'error']).forEach((variant ); expect(screen.getByText(`: ${variant} status;`)).toBeInTheDocument(); }); + + test('Renders without screenreader text when screenReaderText is empty string', () => { + render( + + text + + ); + expect(screen.queryByText(`: ${variant} status;`)).not.toBeInTheDocument(); + }); }); test('Renders custom screen reader text', () => { diff --git a/packages/react-core/src/components/LoginPage/LoginForm.tsx b/packages/react-core/src/components/LoginPage/LoginForm.tsx index 980422f585f..821f6b6ef0e 100644 --- a/packages/react-core/src/components/LoginPage/LoginForm.tsx +++ b/packages/react-core/src/components/LoginPage/LoginForm.tsx @@ -28,6 +28,8 @@ export interface LoginFormProps extends Omit, ' onChangeUsername?: (event: React.FormEvent, value: string) => void; /** Flag indicating if the username is valid */ isValidUsername?: boolean; + /** Flag indicating if password is required */ + isPasswordRequired?: boolean; /** Label for the password input field */ passwordLabel?: string; /** Value for the password */ @@ -66,6 +68,7 @@ export const LoginForm: React.FunctionComponent = ({ usernameValue = '', onChangeUsername = () => undefined as any, isValidUsername = true, + isPasswordRequired = true, passwordLabel = 'Password', passwordValue = '', onChangePassword = () => undefined as any, @@ -85,7 +88,7 @@ export const LoginForm: React.FunctionComponent = ({ const passwordInput = ( = ({ onChange={onChangeUsername} /> - + {isShowPasswordEnabled && ( {passwordInput} diff --git a/packages/react-core/src/components/LoginPage/__tests__/LoginForm.test.tsx b/packages/react-core/src/components/LoginPage/__tests__/LoginForm.test.tsx index 302b3d919d1..95ef06cca88 100644 --- a/packages/react-core/src/components/LoginPage/__tests__/LoginForm.test.tsx +++ b/packages/react-core/src/components/LoginPage/__tests__/LoginForm.test.tsx @@ -48,4 +48,16 @@ describe('LoginForm', () => { const { asFragment } = render(); expect(asFragment()).toMatchSnapshot(); }); + + test('Renders LoginForm with password field required by default', () => { + render(); + const passwordField = screen.getByLabelText(/password/i); + expect(passwordField).toBeRequired(); + }); + + test('Renders LoginForm with password field not required when isPasswordRequired set to false', () => { + render(); + const passwordField = screen.getByLabelText(/password/i); + expect(passwordField).not.toBeRequired(); + }); }); diff --git a/packages/react-core/src/components/LoginPage/examples/LoginPage.md b/packages/react-core/src/components/LoginPage/examples/LoginPage.md index 7443ce7e6e8..50a24f6be00 100644 --- a/packages/react-core/src/components/LoginPage/examples/LoginPage.md +++ b/packages/react-core/src/components/LoginPage/examples/LoginPage.md @@ -31,6 +31,7 @@ import GitlabIcon from '@patternfly/react-icons/dist/esm/icons/gitlab-icon'; ### Basic +By default, a login page requires users to enter both a username and a password into their respective fields. The username must always be a required field, but you can make the password optional by passing the `isPasswordRequired` property to the ``. ```ts file='./LoginPageBasic.tsx' isFullscreen ``` diff --git a/packages/react-core/src/components/Page/Page.tsx b/packages/react-core/src/components/Page/Page.tsx index 00fb8080b65..ab068872472 100644 --- a/packages/react-core/src/components/Page/Page.tsx +++ b/packages/react-core/src/components/Page/Page.tsx @@ -22,7 +22,9 @@ export interface PageProps extends React.HTMLProps { className?: string; /** Masthead component (e.g. ) */ masthead?: React.ReactNode; - /** Sidebar component for a side nav (e.g. ) */ + /** Sidebar component for a side nav, recommended to be a PageSidebar. If set to null, the page grid layout + * will render without a sidebar. + */ sidebar?: React.ReactNode; /** Notification drawer component for an optional notification drawer (e.g. ) */ notificationDrawer?: React.ReactNode; @@ -336,6 +338,7 @@ class Page extends Component { width !== null && height !== null && 'pf-m-resize-observer', width !== null && `pf-m-breakpoint-${getBreakpoint(width)}`, height !== null && `pf-m-height-breakpoint-${getVerticalBreakpoint(height)}`, + sidebar === null && styles.modifiers.noSidebar, className )} > diff --git a/packages/react-core/src/components/Page/__tests__/Page.test.tsx b/packages/react-core/src/components/Page/__tests__/Page.test.tsx index dea572265bb..87bc72d9396 100644 --- a/packages/react-core/src/components/Page/__tests__/Page.test.tsx +++ b/packages/react-core/src/components/Page/__tests__/Page.test.tsx @@ -353,6 +353,24 @@ describe('Page', () => { expect(asFragment()).toMatchSnapshot(); }); + test(`Does not render with class ${styles.modifiers.noSidebar} by default`, () => { + render(); + + expect(screen.getByTestId('page')).not.toHaveClass(styles.modifiers.noSidebar); + }); + + test(`Does not render with class ${styles.modifiers.noSidebar} when sidebar prop is passed with valid content`, () => { + render(sidebar content
}>); + + expect(screen.getByTestId('page')).not.toHaveClass(styles.modifiers.noSidebar); + }); + + test(`Renders with class ${styles.modifiers.noSidebar} when sidebar is set to null`, () => { + render(); + + expect(screen.getByTestId('page')).toHaveClass(styles.modifiers.noSidebar); + }); + test(`Does not render with ${styles.modifiers.fill} or ${styles.modifiers.noFill} if isContentFilled is not passed`, () => { render(); diff --git a/packages/react-core/src/components/Pagination/Pagination.tsx b/packages/react-core/src/components/Pagination/Pagination.tsx index c2c66413481..335ce7947eb 100644 --- a/packages/react-core/src/components/Pagination/Pagination.tsx +++ b/packages/react-core/src/components/Pagination/Pagination.tsx @@ -3,7 +3,7 @@ import { ToggleTemplate, PaginationToggleTemplateProps } from './ToggleTemplate' import styles from '@patternfly/react-styles/css/components/Pagination/pagination'; import { css } from '@patternfly/react-styles'; import { fillTemplate } from '../../helpers'; -import { Navigation } from './Navigation'; +import { PaginationNavigation } from './PaginationNavigation'; import { PaginationOptionsMenu } from './PaginationOptionsMenu'; import { useOUIAProps, OUIAProps } from '../../helpers'; import { formatBreakpointMods } from '../../helpers/util'; @@ -342,7 +342,7 @@ export const Pagination: React.FunctionComponent = ({ appendTo={menuAppendTo} /> )} - { +export interface PaginationNavigationProps extends React.HTMLProps { /** Additional classes for the pagination navigation container. */ className?: string; /** Accessible label for the input displaying the current page. */ @@ -60,18 +60,18 @@ export interface NavigationProps extends React.HTMLProps { onSetPage: OnSetPage; } -export interface NavigationState { +export interface PaginationNavigationState { userInputPage?: number | string; } -class Navigation extends Component { - static displayName = 'Navigation'; - constructor(props: NavigationProps) { +class PaginationNavigation extends Component { + static displayName = 'PaginationNavigation'; + constructor(props: PaginationNavigationProps) { super(props); this.state = { userInputPage: this.props.page }; } - static defaultProps: PickOptional = { + static defaultProps: PickOptional = { className: '', isDisabled: false, isCompact: false, @@ -104,7 +104,7 @@ class Navigation extends Component { } private onChange(event: React.FormEvent, lastPage: number): void { - const inputPage = Navigation.parseInteger(event.currentTarget.value, lastPage); + const inputPage = PaginationNavigation.parseInteger(event.currentTarget.value, lastPage); this.setState({ userInputPage: Number.isNaN(inputPage) ? event.currentTarget.value : inputPage }); } @@ -126,7 +126,7 @@ class Navigation extends Component { 'ArrowDown' ]; if (event.key === KeyTypes.Enter) { - const inputPage = Navigation.parseInteger(this.state.userInputPage, lastPage); + const inputPage = PaginationNavigation.parseInteger(this.state.userInputPage, lastPage); onPageInput(event, Number.isNaN(inputPage) ? page : inputPage); this.handleNewPage(event, Number.isNaN(inputPage) ? page : inputPage); } else if (!/^\d*$/.test(event.key) && !allowedKeys.includes(event.key)) { @@ -141,7 +141,7 @@ class Navigation extends Component { return onSetPage(_evt, newPage, perPage, startIdx, endIdx); }; - componentDidUpdate(lastState: NavigationProps) { + componentDidUpdate(lastState: PaginationNavigationProps) { if ( this.props.page !== lastState.page && this.props.page <= this.props.lastPage && @@ -271,4 +271,4 @@ class Navigation extends Component { } } -export { Navigation }; +export { PaginationNavigation }; diff --git a/packages/react-core/src/components/Pagination/__tests__/Generated/Navigation.test.tsx b/packages/react-core/src/components/Pagination/__tests__/Generated/PaginationNavigation.test.tsx similarity index 91% rename from packages/react-core/src/components/Pagination/__tests__/Generated/Navigation.test.tsx rename to packages/react-core/src/components/Pagination/__tests__/Generated/PaginationNavigation.test.tsx index f4f2511067a..b535cf245ef 100644 --- a/packages/react-core/src/components/Pagination/__tests__/Generated/Navigation.test.tsx +++ b/packages/react-core/src/components/Pagination/__tests__/Generated/PaginationNavigation.test.tsx @@ -2,13 +2,13 @@ * This test was generated */ import { render } from '@testing-library/react'; -import { Navigation } from '../../Navigation'; +import { PaginationNavigation } from '../../PaginationNavigation'; // any missing imports can usually be resolved by adding them here import {} from '../..'; it('Navigation should match snapshot (auto-generated)', () => { const { asFragment } = render( - { /** Classes applied to root element of select group */ className?: string; /** Label of the select group */ - label?: string; + label?: React.ReactNode; } export const SelectGroup: React.FunctionComponent = ({ diff --git a/packages/react-core/src/components/Skeleton/examples/SkeletonDefault.tsx b/packages/react-core/src/components/Skeleton/examples/SkeletonDefault.tsx index f3a1713bf34..ae865c86707 100644 --- a/packages/react-core/src/components/Skeleton/examples/SkeletonDefault.tsx +++ b/packages/react-core/src/components/Skeleton/examples/SkeletonDefault.tsx @@ -1,3 +1,3 @@ import { Skeleton } from '@patternfly/react-core'; -export const SkeletonDefault: React.FunctionComponent = () => ; +export const SkeletonDefault: React.FunctionComponent = () => ; diff --git a/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageHeight.tsx b/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageHeight.tsx index b0353264662..e90a8e9d257 100644 --- a/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageHeight.tsx +++ b/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageHeight.tsx @@ -2,11 +2,11 @@ import { Skeleton } from '@patternfly/react-core'; export const SkeletonPercentageHeight: React.FunctionComponent = () => (
- - - - - - + + + + + +
); diff --git a/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageWidth.tsx b/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageWidth.tsx index 22eb411cadd..cf74d8cfe7c 100644 --- a/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageWidth.tsx +++ b/packages/react-core/src/components/Skeleton/examples/SkeletonPercentageWidth.tsx @@ -3,15 +3,15 @@ import { Skeleton } from '@patternfly/react-core'; export const SkeletonPercentageWidth: React.FunctionComponent = () => ( - +
- +
- +
- +
- +
diff --git a/packages/react-core/src/components/Skeleton/examples/SkeletonShapes.tsx b/packages/react-core/src/components/Skeleton/examples/SkeletonShapes.tsx index 06ab97da63f..900ee37817a 100644 --- a/packages/react-core/src/components/Skeleton/examples/SkeletonShapes.tsx +++ b/packages/react-core/src/components/Skeleton/examples/SkeletonShapes.tsx @@ -4,36 +4,36 @@ import { Skeleton } from '@patternfly/react-core'; export const SkeletonShapes: React.FunctionComponent = () => ( Small circle - +
Medium circle - +
Large circle - +
Small square - +
Medium square - +
Large square - +
Small rectangle
- +

Medium rectangle
- +

Large rectangle
- +
); diff --git a/packages/react-core/src/components/Skeleton/examples/SkeletonText.tsx b/packages/react-core/src/components/Skeleton/examples/SkeletonText.tsx index 6070ff8325f..180e67ad0a0 100644 --- a/packages/react-core/src/components/Skeleton/examples/SkeletonText.tsx +++ b/packages/react-core/src/components/Skeleton/examples/SkeletonText.tsx @@ -12,24 +12,24 @@ import t_global_font_size_sm from '@patternfly/react-tokens/dist/esm/t_global_fo export const SkeletonText: React.FunctionComponent = () => ( {t_global_font_size_4xl.name} - +
{t_global_font_size_3xl.name} - +
{t_global_font_size_2xl.name} - +
{t_global_font_size_xl.name} - +
{t_global_font_size_lg.name} - +
{t_global_font_size_md.name} - +
{t_global_font_size_sm.name} - +
); diff --git a/packages/react-core/src/demos/ExpandableSection/examples/ExpandableTextDemo.tsx b/packages/react-core/src/demos/ExpandableSection/examples/ExpandableTextDemo.tsx index 185495469f1..51a19fc0203 100644 --- a/packages/react-core/src/demos/ExpandableSection/examples/ExpandableTextDemo.tsx +++ b/packages/react-core/src/demos/ExpandableSection/examples/ExpandableTextDemo.tsx @@ -13,7 +13,7 @@ export const ExpandableTextDemo: React.FunctionComponent = () => { return ( { - - - + + + @@ -18,9 +18,9 @@ export const SkeletonCard: React.FunctionComponent = () => { - - - + + + diff --git a/packages/react-core/src/deprecated/components/Wizard/WizardNavItem.tsx b/packages/react-core/src/deprecated/components/Wizard/WizardNavItem.tsx index 66437617f5f..1a8b973050a 100644 --- a/packages/react-core/src/deprecated/components/Wizard/WizardNavItem.tsx +++ b/packages/react-core/src/deprecated/components/Wizard/WizardNavItem.tsx @@ -89,18 +89,20 @@ export const WizardNavItem: React.FunctionComponent = ({ {...(isExpandable && { 'aria-expanded': isExpanded })} {...ouiaProps} > - {isExpandable ? ( - <> - {content} - - - + + {isExpandable ? ( + <> + {content} + + + + - - - ) : ( - content - )} + + ) : ( + content + )} + {children} diff --git a/packages/react-core/src/deprecated/components/Wizard/__tests__/Generated/__snapshots__/WizardNavItem.test.tsx.snap b/packages/react-core/src/deprecated/components/Wizard/__tests__/Generated/__snapshots__/WizardNavItem.test.tsx.snap index 9160d81e912..ddc14ed5d3a 100644 --- a/packages/react-core/src/deprecated/components/Wizard/__tests__/Generated/__snapshots__/WizardNavItem.test.tsx.snap +++ b/packages/react-core/src/deprecated/components/Wizard/__tests__/Generated/__snapshots__/WizardNavItem.test.tsx.snap @@ -12,7 +12,11 @@ exports[`WizardNavItem should match snapshot (auto-generated) 1`] = ` data-ouia-component-type="PF6/WizardNavItem" data-ouia-safe="true" type="button" - /> + > + + ReactNode diff --git a/packages/react-core/src/deprecated/components/Wizard/__tests__/__snapshots__/Wizard.test.tsx.snap b/packages/react-core/src/deprecated/components/Wizard/__tests__/__snapshots__/Wizard.test.tsx.snap index 306b6a50773..ef385ff5aea 100644 --- a/packages/react-core/src/deprecated/components/Wizard/__tests__/__snapshots__/Wizard.test.tsx.snap +++ b/packages/react-core/src/deprecated/components/Wizard/__tests__/__snapshots__/Wizard.test.tsx.snap @@ -120,7 +120,11 @@ exports[`Wizard Expandable Nav Wizard should match snapshot 1`] = ` data-ouia-safe="true" type="button" > - A + + A +
  • - B - - + B + + - - - + + + + @@ -177,7 +185,11 @@ exports[`Wizard Expandable Nav Wizard should match snapshot 1`] = ` data-ouia-safe="true" type="button" > - B-1 + + B-1 +
  • - B-2 + + B-2 +
  • @@ -207,7 +223,11 @@ exports[`Wizard Expandable Nav Wizard should match snapshot 1`] = ` data-ouia-safe="true" type="button" > - C + + C +
  • - D + + D +
  • @@ -432,7 +456,11 @@ exports[`Wizard Wizard should match snapshot 1`] = ` id="step-A" type="button" > - A + + A +
  • - B + + B +
      - B-1 + + B-1 +
    1. - B-2 + + B-2 +
    @@ -497,7 +537,11 @@ exports[`Wizard Wizard should match snapshot 1`] = ` id="step-C" type="button" > - C + + C +
  • - D + + D +
  • @@ -672,7 +720,11 @@ exports[`Wizard bare wiz 1`] = ` data-ouia-safe="true" type="button" > - A + + A + diff --git a/packages/react-docs/CHANGELOG.md b/packages/react-docs/CHANGELOG.md index d11ccd4745b..cc1089fe16e 100644 --- a/packages/react-docs/CHANGELOG.md +++ b/packages/react-docs/CHANGELOG.md @@ -3,6 +3,56 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1...@patternfly/react-docs@7.2.2) (2025-04-23) + +### Bug Fixes + +- Updated to pull in 6.2.3 of patternfly. ([660cf4a](https://github.com/patternfly/patternfly-react/commit/660cf4add72c3f9184b6882f06ea69b501d181e3)) + +## [7.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.0...@patternfly/react-docs@7.2.1) (2025-04-17) + +### Bug Fixes + +- publish patch release. ([ec18e50](https://github.com/patternfly/patternfly-react/commit/ec18e50782c4a7ee2f6a8b072be6b5808b196661)) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([4b0c6e4](https://github.com/patternfly/patternfly-react/commit/4b0c6e4a79aba86508891985f19f4853e3b7f87f)) + +## [7.2.1-prerelease.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.6...@patternfly/react-docs@7.2.1-prerelease.7) (2025-04-15) + +**Note:** Version bump only for package @patternfly/react-docs + +## [7.2.1-prerelease.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.5...@patternfly/react-docs@7.2.1-prerelease.6) (2025-04-14) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([217aad3](https://github.com/patternfly/patternfly-react/commit/217aad3241e79b02ab8f1f74fd1d8022860a138b)) + +## [7.2.1-prerelease.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.4...@patternfly/react-docs@7.2.1-prerelease.5) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-docs + +## [7.2.1-prerelease.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.3...@patternfly/react-docs@7.2.1-prerelease.4) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-docs + +## [7.2.1-prerelease.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.2...@patternfly/react-docs@7.2.1-prerelease.3) (2025-04-11) + +**Note:** Version bump only for package @patternfly/react-docs + +## [7.2.1-prerelease.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.1...@patternfly/react-docs@7.2.1-prerelease.2) (2025-04-10) + +**Note:** Version bump only for package @patternfly/react-docs + +## [7.2.1-prerelease.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.1-prerelease.0...@patternfly/react-docs@7.2.1-prerelease.1) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-docs + +## [7.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@7.2.0...@patternfly/react-docs@7.2.1-prerelease.0) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-docs + # 7.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-docs diff --git a/packages/react-docs/package.json b/packages/react-docs/package.json index 4dbb98e9708..d2aee375612 100644 --- a/packages/react-docs/package.json +++ b/packages/react-docs/package.json @@ -1,7 +1,7 @@ { "name": "@patternfly/react-docs", "description": "PatternFly React Docs", - "version": "7.2.0", + "version": "7.2.2", "publishConfig": { "access": "public", "tag": "prerelease" @@ -23,7 +23,7 @@ "test:a11y": "patternfly-a11y --config patternfly-a11y.config" }, "dependencies": { - "@patternfly/patternfly": "6.2.0-prerelease.28", + "@patternfly/patternfly": "6.2.3", "@patternfly/react-charts": "workspace:^", "@patternfly/react-code-editor": "workspace:^", "@patternfly/react-core": "workspace:^", diff --git a/packages/react-drag-drop/CHANGELOG.md b/packages/react-drag-drop/CHANGELOG.md index f3511009172..cafab363205 100644 --- a/packages/react-drag-drop/CHANGELOG.md +++ b/packages/react-drag-drop/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.1...@patternfly/react-drag-drop@6.2.2) (2025-04-23) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.0...@patternfly/react-drag-drop@6.2.1) (2025-04-17) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1-prerelease.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.1-prerelease.4...@patternfly/react-drag-drop@6.2.1-prerelease.5) (2025-04-15) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1-prerelease.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.1-prerelease.3...@patternfly/react-drag-drop@6.2.1-prerelease.4) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1-prerelease.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.1-prerelease.2...@patternfly/react-drag-drop@6.2.1-prerelease.3) (2025-04-11) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1-prerelease.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.1-prerelease.1...@patternfly/react-drag-drop@6.2.1-prerelease.2) (2025-04-10) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1-prerelease.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.1-prerelease.0...@patternfly/react-drag-drop@6.2.1-prerelease.1) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-drag-drop + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-drag-drop@6.2.0...@patternfly/react-drag-drop@6.2.1-prerelease.0) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-drag-drop + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-drag-drop diff --git a/packages/react-drag-drop/package.json b/packages/react-drag-drop/package.json index 2c7b1e34064..bef13ccd1cd 100644 --- a/packages/react-drag-drop/package.json +++ b/packages/react-drag-drop/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-drag-drop", - "version": "6.2.0", + "version": "6.2.2", "description": "PatternFly drag and drop solution", "main": "dist/js/index.js", "module": "dist/esm/index.js", diff --git a/packages/react-icons/CHANGELOG.md b/packages/react-icons/CHANGELOG.md index e8711553b3a..a008c9f7613 100644 --- a/packages/react-icons/CHANGELOG.md +++ b/packages/react-icons/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-icons@6.2.1...@patternfly/react-icons@6.2.2) (2025-04-23) + +### Bug Fixes + +- Updated to pull in 6.2.3 of patternfly. ([660cf4a](https://github.com/patternfly/patternfly-react/commit/660cf4add72c3f9184b6882f06ea69b501d181e3)) + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-icons@6.2.0...@patternfly/react-icons@6.2.1) (2025-04-17) + +### Bug Fixes + +- publish patch release. ([ec18e50](https://github.com/patternfly/patternfly-react/commit/ec18e50782c4a7ee2f6a8b072be6b5808b196661)) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([4b0c6e4](https://github.com/patternfly/patternfly-react/commit/4b0c6e4a79aba86508891985f19f4853e3b7f87f)) + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-icons@6.2.0...@patternfly/react-icons@6.2.1-prerelease.0) (2025-04-14) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([217aad3](https://github.com/patternfly/patternfly-react/commit/217aad3241e79b02ab8f1f74fd1d8022860a138b)) + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-icons diff --git a/packages/react-icons/package.json b/packages/react-icons/package.json index b4ae4ec7dc5..756210e4d09 100644 --- a/packages/react-icons/package.json +++ b/packages/react-icons/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-icons", - "version": "6.2.0", + "version": "6.2.2", "description": "PatternFly 4 Icons as React Components", "main": "dist/js/index.js", "module": "dist/esm/index.js", @@ -33,7 +33,7 @@ "@fortawesome/free-brands-svg-icons": "^5.15.4", "@fortawesome/free-regular-svg-icons": "^5.15.4", "@fortawesome/free-solid-svg-icons": "^5.15.4", - "@patternfly/patternfly": "6.2.0-prerelease.28", + "@patternfly/patternfly": "6.2.3", "fs-extra": "^11.3.0", "tslib": "^2.8.1" }, diff --git a/packages/react-integration/CHANGELOG.md b/packages/react-integration/CHANGELOG.md index 5cc08e0ad87..a30b785b304 100644 --- a/packages/react-integration/CHANGELOG.md +++ b/packages/react-integration/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.0.0-prerelease.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-integration@6.0.0-prerelease.31...@patternfly/react-integration@6.0.0-prerelease.32) (2025-04-11) + +**Note:** Version bump only for package @patternfly/react-integration + # [6.0.0-prerelease.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-integration@6.0.0-prerelease.30...@patternfly/react-integration@6.0.0-prerelease.31) (2025-03-20) ### Bug Fixes diff --git a/packages/react-integration/cypress/integration/descriptionlist.spec.ts b/packages/react-integration/cypress/integration/descriptionlist.spec.ts index ea42072ec83..0f531400378 100644 --- a/packages/react-integration/cypress/integration/descriptionlist.spec.ts +++ b/packages/react-integration/cypress/integration/descriptionlist.spec.ts @@ -3,12 +3,32 @@ describe('Description List Demo Test', () => { cy.visit('http://localhost:3000/description-list-demo-nav-link'); }); - it('Verify list with help text', () => { + it('Verify list with help text triggered with mouse', () => { cy.get('#description-list-help-text').should('exist').children('.pf-v6-c-description-list__group'); cy.get('.pf-v6-c-popover__content').should('not.exist'); cy.get( '#description-list-help-text > :nth-child(1) > .pf-v6-c-description-list__term .pf-v6-c-description-list__text' ).click(); cy.get('.pf-v6-c-popover__content').should('exist'); + cy.get('.pf-v6-c-popover__close').click(); + cy.get('.pf-v6-c-popover__content').should('not.exist'); + }); + + it('Verify list with help text triggered with enter key', () => { + cy.get('#description-list-help-text').should('exist').children('.pf-v6-c-description-list__group'); + cy.get('.pf-v6-c-popover__content').should('not.exist'); + cy.tab().type('{enter}'); + cy.get('.pf-v6-c-popover__content').should('exist'); + cy.get('.pf-v6-c-popover__close').type('{enter}'); + cy.get('.pf-v6-c-popover__content').should('not.exist'); + }); + + it('Verify list with help text triggered with spacebar', () => { + cy.get('#description-list-help-text').should('exist').children('.pf-v6-c-description-list__group'); + cy.get('.pf-v6-c-popover__content').should('not.exist'); + cy.tab().tab().type(' '); + cy.get('.pf-v6-c-popover__content').should('exist'); + cy.get('.pf-v6-c-popover__close').type(' '); + cy.get('.pf-v6-c-popover__content').should('not.exist'); }); }); diff --git a/packages/react-integration/demo-app-ts/CHANGELOG.md b/packages/react-integration/demo-app-ts/CHANGELOG.md index 62fa66b56fb..71cdb730388 100644 --- a/packages/react-integration/demo-app-ts/CHANGELOG.md +++ b/packages/react-integration/demo-app-ts/CHANGELOG.md @@ -3,6 +3,30 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.0.0-prerelease.95](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.94...demo-app-ts@6.0.0-prerelease.95) (2025-04-15) + +**Note:** Version bump only for package demo-app-ts + +# [6.0.0-prerelease.94](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.93...demo-app-ts@6.0.0-prerelease.94) (2025-04-14) + +**Note:** Version bump only for package demo-app-ts + +# [6.0.0-prerelease.93](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.92...demo-app-ts@6.0.0-prerelease.93) (2025-04-11) + +**Note:** Version bump only for package demo-app-ts + +# [6.0.0-prerelease.92](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.91...demo-app-ts@6.0.0-prerelease.92) (2025-04-10) + +**Note:** Version bump only for package demo-app-ts + +# [6.0.0-prerelease.91](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.90...demo-app-ts@6.0.0-prerelease.91) (2025-04-08) + +**Note:** Version bump only for package demo-app-ts + +# [6.0.0-prerelease.90](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.89...demo-app-ts@6.0.0-prerelease.90) (2025-04-08) + +**Note:** Version bump only for package demo-app-ts + # [6.0.0-prerelease.89](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@6.0.0-prerelease.88...demo-app-ts@6.0.0-prerelease.89) (2025-04-01) **Note:** Version bump only for package demo-app-ts diff --git a/packages/react-integration/demo-app-ts/package.json b/packages/react-integration/demo-app-ts/package.json index 847a24c461f..6efa35f2d5f 100644 --- a/packages/react-integration/demo-app-ts/package.json +++ b/packages/react-integration/demo-app-ts/package.json @@ -1,7 +1,7 @@ { "name": "demo-app-ts", "private": true, - "version": "6.0.0-prerelease.89", + "version": "6.0.0-prerelease.95", "scripts": { "dev": "vite", "build": "tsc && vite build", diff --git a/packages/react-integration/package.json b/packages/react-integration/package.json index 338fae77829..0651342fdca 100644 --- a/packages/react-integration/package.json +++ b/packages/react-integration/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-integration", - "version": "6.0.0-prerelease.31", + "version": "6.0.0-prerelease.32", "private": true, "description": "Integration testing for PF5 using demo applications", "main": "lib/index.js", diff --git a/packages/react-styles/CHANGELOG.md b/packages/react-styles/CHANGELOG.md index 28ded3dac68..f9e27613576 100644 --- a/packages/react-styles/CHANGELOG.md +++ b/packages/react-styles/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-styles@6.2.1...@patternfly/react-styles@6.2.2) (2025-04-23) + +### Bug Fixes + +- Updated to pull in 6.2.3 of patternfly. ([660cf4a](https://github.com/patternfly/patternfly-react/commit/660cf4add72c3f9184b6882f06ea69b501d181e3)) + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-styles@6.2.0...@patternfly/react-styles@6.2.1) (2025-04-17) + +### Bug Fixes + +- publish patch release. ([ec18e50](https://github.com/patternfly/patternfly-react/commit/ec18e50782c4a7ee2f6a8b072be6b5808b196661)) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([4b0c6e4](https://github.com/patternfly/patternfly-react/commit/4b0c6e4a79aba86508891985f19f4853e3b7f87f)) + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-styles@6.2.0...@patternfly/react-styles@6.2.1-prerelease.0) (2025-04-14) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([217aad3](https://github.com/patternfly/patternfly-react/commit/217aad3241e79b02ab8f1f74fd1d8022860a138b)) + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-styles diff --git a/packages/react-styles/package.json b/packages/react-styles/package.json index d0f8ec0a74a..6bab901798b 100644 --- a/packages/react-styles/package.json +++ b/packages/react-styles/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-styles", - "version": "6.2.0", + "version": "6.2.2", "main": "dist/js/index.js", "module": "dist/esm/index.js", "types": "dist/esm/index.d.ts", @@ -19,7 +19,7 @@ "clean": "rimraf dist css" }, "devDependencies": { - "@patternfly/patternfly": "6.2.0-prerelease.28", + "@patternfly/patternfly": "6.2.3", "change-case": "^5.4.4", "fs-extra": "^11.3.0" }, diff --git a/packages/react-table/CHANGELOG.md b/packages/react-table/CHANGELOG.md index 9fb00e71600..58f2b613176 100644 --- a/packages/react-table/CHANGELOG.md +++ b/packages/react-table/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.1...@patternfly/react-table@6.2.2) (2025-04-23) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.0...@patternfly/react-table@6.2.1) (2025-04-17) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1-prerelease.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.1-prerelease.4...@patternfly/react-table@6.2.1-prerelease.5) (2025-04-15) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1-prerelease.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.1-prerelease.3...@patternfly/react-table@6.2.1-prerelease.4) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1-prerelease.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.1-prerelease.2...@patternfly/react-table@6.2.1-prerelease.3) (2025-04-11) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1-prerelease.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.1-prerelease.1...@patternfly/react-table@6.2.1-prerelease.2) (2025-04-10) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1-prerelease.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.1-prerelease.0...@patternfly/react-table@6.2.1-prerelease.1) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-table + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@6.2.0...@patternfly/react-table@6.2.1-prerelease.0) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-table + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-table diff --git a/packages/react-table/package.json b/packages/react-table/package.json index 0b075c13711..ba2931a8cd7 100644 --- a/packages/react-table/package.json +++ b/packages/react-table/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-table", - "version": "6.2.0", + "version": "6.2.2", "description": "This library provides a set of React table components for use with the PatternFly 4", "main": "dist/js/index.js", "module": "dist/esm/index.js", diff --git a/packages/react-templates/CHANGELOG.md b/packages/react-templates/CHANGELOG.md index 77c181b19c4..96f3fd043a9 100644 --- a/packages/react-templates/CHANGELOG.md +++ b/packages/react-templates/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.1...@patternfly/react-templates@6.2.2) (2025-04-23) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.0...@patternfly/react-templates@6.2.1) (2025-04-17) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1-prerelease.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.1-prerelease.4...@patternfly/react-templates@6.2.1-prerelease.5) (2025-04-15) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1-prerelease.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.1-prerelease.3...@patternfly/react-templates@6.2.1-prerelease.4) (2025-04-14) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1-prerelease.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.1-prerelease.2...@patternfly/react-templates@6.2.1-prerelease.3) (2025-04-11) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1-prerelease.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.1-prerelease.1...@patternfly/react-templates@6.2.1-prerelease.2) (2025-04-10) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1-prerelease.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.1-prerelease.0...@patternfly/react-templates@6.2.1-prerelease.1) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-templates + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-templates@6.2.0...@patternfly/react-templates@6.2.1-prerelease.0) (2025-04-08) + +**Note:** Version bump only for package @patternfly/react-templates + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-templates diff --git a/packages/react-templates/package.json b/packages/react-templates/package.json index 777d8dccc2a..ce64a77693d 100644 --- a/packages/react-templates/package.json +++ b/packages/react-templates/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-templates", - "version": "6.2.0", + "version": "6.2.2", "description": "This package provides wrapped component demos for ease of use\n", "main": "dist/js/index.js", "module": "dist/esm/index.js", diff --git a/packages/react-tokens/CHANGELOG.md b/packages/react-tokens/CHANGELOG.md index 3fdbd775cbc..f918eaf5640 100644 --- a/packages/react-tokens/CHANGELOG.md +++ b/packages/react-tokens/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-tokens@6.2.1...@patternfly/react-tokens@6.2.2) (2025-04-23) + +### Bug Fixes + +- Updated to pull in 6.2.3 of patternfly. ([660cf4a](https://github.com/patternfly/patternfly-react/commit/660cf4add72c3f9184b6882f06ea69b501d181e3)) + +## [6.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-tokens@6.2.0...@patternfly/react-tokens@6.2.1) (2025-04-17) + +### Bug Fixes + +- publish patch release. ([ec18e50](https://github.com/patternfly/patternfly-react/commit/ec18e50782c4a7ee2f6a8b072be6b5808b196661)) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([4b0c6e4](https://github.com/patternfly/patternfly-react/commit/4b0c6e4a79aba86508891985f19f4853e3b7f87f)) + +## [6.2.1-prerelease.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-tokens@6.2.0...@patternfly/react-tokens@6.2.1-prerelease.0) (2025-04-14) + +### Features + +- **Page:** Added support for sidebar-less layout ([#11760](https://github.com/patternfly/patternfly-react/issues/11760)) ([217aad3](https://github.com/patternfly/patternfly-react/commit/217aad3241e79b02ab8f1f74fd1d8022860a138b)) + # 6.2.0 (2025-04-07) **Note:** Version bump only for package @patternfly/react-tokens diff --git a/packages/react-tokens/package.json b/packages/react-tokens/package.json index 6a61d46ee46..d403594d28d 100644 --- a/packages/react-tokens/package.json +++ b/packages/react-tokens/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-tokens", - "version": "6.2.0", + "version": "6.2.2", "description": "This library provides access to the design tokens of PatternFly 4 from JavaScript", "main": "dist/js/index.js", "module": "dist/esm/index.js", @@ -29,7 +29,7 @@ "clean": "rimraf dist" }, "devDependencies": { - "@patternfly/patternfly": "6.2.0-prerelease.28", + "@patternfly/patternfly": "6.2.3", "css": "^3.0.0", "fs-extra": "^11.3.0" } diff --git a/scripts/promote.sh b/scripts/promote.sh index cfcc60506ab..658665b50c0 100755 --- a/scripts/promote.sh +++ b/scripts/promote.sh @@ -25,6 +25,8 @@ packagesExtensions=( @patternfly/react-log-viewer @patternfly/react-catalog-view-extension @patternfly/react-component-groups + @patternfly/react-data-view + @patternfly/chatbot ) prereleaseTag=prerelease diff --git a/yarn.lock b/yarn.lock index f21cb2d4324..3780a0041bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2132,15 +2132,15 @@ __metadata: languageName: node linkType: hard -"@eslint/compat@npm:^1.2.7": - version: 1.2.7 - resolution: "@eslint/compat@npm:1.2.7" +"@eslint/compat@npm:^1.2.8": + version: 1.2.8 + resolution: "@eslint/compat@npm:1.2.8" peerDependencies: eslint: ^9.10.0 peerDependenciesMeta: eslint: optional: true - checksum: 10c0/df89a0396750748c3748eb5fc582bd6cb89be6599d88ed1c5cc60ae0d13f77d4bf5fb30fabdb6c9ce16dda35745ef2e6417fa82548cde7d2b3fa5a896da02c8e + checksum: 10c0/1e004c6917220ff1731fdc562ada9ddcbcecc6f3ba2e4b0433fb6d8eddf2a443e009f1f9796b78128b78a0a588c723b78021319055ac6e5dda55c0ace346496b languageName: node linkType: hard @@ -3632,10 +3632,10 @@ __metadata: languageName: node linkType: hard -"@patternfly/patternfly@npm:6.2.0-prerelease.28": - version: 6.2.0-prerelease.28 - resolution: "@patternfly/patternfly@npm:6.2.0-prerelease.28" - checksum: 10c0/36a9acb6973471deb741f67922b13baf38258e5a1b400d67ec87caf76e48000b1188216d74f9bc5f348d6b33f7373858adb7ac8dd62887eb4d75b772abdab3db +"@patternfly/patternfly@npm:6.2.3": + version: 6.2.3 + resolution: "@patternfly/patternfly@npm:6.2.3" + checksum: 10c0/f9be9e21fd16270529a8f4ff8b9666496b629c61fbeec1ea642533a3d9cea1076f984c1ebb2c0b40e8cad661dbde5af874f079cfafdd07dc0b6a766f1fbdb5d7 languageName: node linkType: hard @@ -3733,7 +3733,7 @@ __metadata: version: 0.0.0-use.local resolution: "@patternfly/react-core@workspace:packages/react-core" dependencies: - "@patternfly/patternfly": "npm:6.2.0-prerelease.28" + "@patternfly/patternfly": "npm:6.2.3" "@patternfly/react-icons": "workspace:^" "@patternfly/react-styles": "workspace:^" "@patternfly/react-tokens": "workspace:^" @@ -3754,7 +3754,7 @@ __metadata: resolution: "@patternfly/react-docs@workspace:packages/react-docs" dependencies: "@patternfly/documentation-framework": "npm:^6.5.20" - "@patternfly/patternfly": "npm:6.2.0-prerelease.28" + "@patternfly/patternfly": "npm:6.2.3" "@patternfly/patternfly-a11y": "npm:5.1.0" "@patternfly/react-charts": "workspace:^" "@patternfly/react-code-editor": "workspace:^" @@ -3794,7 +3794,7 @@ __metadata: "@fortawesome/free-brands-svg-icons": "npm:^5.15.4" "@fortawesome/free-regular-svg-icons": "npm:^5.15.4" "@fortawesome/free-solid-svg-icons": "npm:^5.15.4" - "@patternfly/patternfly": "npm:6.2.0-prerelease.28" + "@patternfly/patternfly": "npm:6.2.3" fs-extra: "npm:^11.3.0" tslib: "npm:^2.8.1" peerDependencies: @@ -3821,7 +3821,7 @@ __metadata: "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7" "@babel/preset-react": "npm:^7.24.7" "@babel/preset-typescript": "npm:^7.24.7" - "@eslint/compat": "npm:^1.2.7" + "@eslint/compat": "npm:^1.2.8" "@eslint/js": "npm:^9.22.0" "@octokit/rest": "npm:^21.1.1" "@rollup/plugin-commonjs": "npm:^26.0.3" @@ -3878,7 +3878,7 @@ __metadata: version: 0.0.0-use.local resolution: "@patternfly/react-styles@workspace:packages/react-styles" dependencies: - "@patternfly/patternfly": "npm:6.2.0-prerelease.28" + "@patternfly/patternfly": "npm:6.2.3" change-case: "npm:^5.4.4" fs-extra: "npm:^11.3.0" languageName: unknown @@ -3919,7 +3919,7 @@ __metadata: version: 0.0.0-use.local resolution: "@patternfly/react-tokens@workspace:packages/react-tokens" dependencies: - "@patternfly/patternfly": "npm:6.2.0-prerelease.28" + "@patternfly/patternfly": "npm:6.2.3" css: "npm:^3.0.0" fs-extra: "npm:^11.3.0" languageName: unknown