diff --git a/.github/release.sh b/.github/release.sh index 534a95074cf..d3c96813572 100755 --- a/.github/release.sh +++ b/.github/release.sh @@ -17,10 +17,10 @@ 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 prerelease --preid=alpha --dist-tag=alpha --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 prerelease --preid=alpha --dist-tag=alpha --no-private --yes --no-git-tag-version --no-push | 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 6285416ac42..578c33b50bd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: release on: push: branches: - - main + - v6 jobs: build: runs-on: ubuntu-latest diff --git a/lerna.json b/lerna.json index 96a1d87ef8b..9d113d5f1dc 100644 --- a/lerna.json +++ b/lerna.json @@ -24,7 +24,7 @@ } }, "version": "independent", - "allowBranch": ["main", "v4", "5.0.x"], + "allowBranch": ["main", "v4", "5.0.x", "v6"], "packages": ["packages/*", "packages/react-integration/demo-app-ts"], "$schema": "node_modules/lerna/schemas/lerna-schema.json" } diff --git a/packages/eslint-plugin-patternfly-react/package.json b/packages/eslint-plugin-patternfly-react/package.json index 97388df3ee2..e48d188e815 100644 --- a/packages/eslint-plugin-patternfly-react/package.json +++ b/packages/eslint-plugin-patternfly-react/package.json @@ -1,11 +1,12 @@ { "name": "eslint-plugin-patternfly-react", - "version": "5.1.1-prerelease.1", + "version": "6.0.0-alpha.0", "private": false, "main": "./lib/index.js", "license": "MIT", "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", diff --git a/packages/react-charts/CHANGELOG.md b/packages/react-charts/CHANGELOG.md index 473eec67629..ec6162b2e94 100644 --- a/packages/react-charts/CHANGELOG.md +++ b/packages/react-charts/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.1.1-prerelease.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-charts@7.1.1-prerelease.8...@patternfly/react-charts@7.1.1-prerelease.9) (2023-09-22) + +### Features + +- **charts:** add RTL legend support ([#9570](https://github.com/patternfly/patternfly-react/issues/9570)) ([99d8d97](https://github.com/patternfly/patternfly-react/commit/99d8d975eeb2d562357cdcaa37502748d5794564)) + +## 7.1.1-prerelease.8 (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-charts + ## [7.1.1-prerelease.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-charts@7.1.1-prerelease.6...@patternfly/react-charts@7.1.1-prerelease.7) (2023-09-18) **Note:** Version bump only for package @patternfly/react-charts diff --git a/packages/react-charts/package.json b/packages/react-charts/package.json index 9454fbec1db..c9b7c1822a9 100644 --- a/packages/react-charts/package.json +++ b/packages/react-charts/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-charts", - "version": "7.1.1-prerelease.7", + "version": "8.0.0-alpha.0", "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", @@ -11,7 +11,8 @@ "*.scss" ], "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", @@ -28,8 +29,8 @@ }, "homepage": "https://github.com/patternfly/patternfly-react#readme", "dependencies": { - "@patternfly/react-styles": "^5.1.1-prerelease.6", - "@patternfly/react-tokens": "^5.1.1-prerelease.6", + "@patternfly/react-styles": "^6.0.0-alpha.0", + "@patternfly/react-tokens": "^6.0.0-alpha.0", "hoist-non-react-statics": "^3.3.0", "lodash": "^4.17.19", "tslib": "^2.5.0", diff --git a/packages/react-charts/src/components/Chart/Chart.tsx b/packages/react-charts/src/components/Chart/Chart.tsx index d7954a92db9..10803be4699 100644 --- a/packages/react-charts/src/components/Chart/Chart.tsx +++ b/packages/react-charts/src/components/Chart/Chart.tsx @@ -26,11 +26,13 @@ import { ChartCommonStyles } from '../ChartTheme/ChartStyles'; import { ChartThemeDefinition } from '../ChartTheme/ChartTheme'; import { getClassName } from '../ChartUtils/chart-helpers'; import { getLabelTextSize } from '../ChartUtils/chart-label'; -import { getComputedLegend, getLegendItemsExtraHeight } from '../ChartUtils/chart-legend'; +import { getComputedLegend, getLegendItemsExtraHeight, getLegendMaxTextWidth } from '../ChartUtils/chart-legend'; import { getPaddingForSide } from '../ChartUtils/chart-padding'; import { getPatternDefs, mergePatternData, useDefaultPatternProps } from '../ChartUtils/chart-patterns'; import { getChartTheme } from '../ChartUtils/chart-theme-types'; import { useEffect } from 'react'; +import { ChartLabel } from '../ChartLabel/ChartLabel'; +import { ChartPoint } from '../ChartPoint/ChartPoint'; /** * Chart is a wrapper component that reconciles the domain for all its children, controls the layout of the chart, @@ -284,6 +286,10 @@ export interface ChartProps extends VictoryChartProps { * cases, the legend may not be visible until enough padding is applied. */ legendPosition?: 'bottom' | 'bottom-left' | 'right'; + /** + * @beta Text direction of the legend labels. + */ + legendDirection?: 'ltr' | 'rtl'; /** * The maxDomain prop defines a maximum domain value for a chart. This prop is useful in situations where the maximum * domain of a chart is static, while the minimum value depends on data or other variable information. If the domain @@ -471,6 +477,7 @@ export const Chart: React.FunctionComponent = ({ legendComponent = , legendData, legendPosition = ChartCommonStyles.legend.position, + legendDirection = 'ltr', name, padding, patternScale, @@ -522,11 +529,30 @@ export const Chart: React.FunctionComponent = ({ ...(labelComponent && { labelComponent }) // Override label component props }); + let legendXOffset = 0; + if (legendDirection === 'rtl') { + legendXOffset = getLegendMaxTextWidth(legendData, theme); + } + const legend = React.cloneElement(legendComponent, { data: legendData, ...(name && { name: `${name}-${(legendComponent as any).type.displayName}` }), orientation: legendOrientation, theme, + ...(legendDirection === 'rtl' && { + dataComponent: legendComponent.props.dataComponent ? ( + React.cloneElement(legendComponent.props.dataComponent, { transform: `translate(${legendXOffset})` }) + ) : ( + + ) + }), + ...(legendDirection === 'rtl' && { + labelComponent: legendComponent.props.labelComponent ? ( + React.cloneElement(legendComponent.props.labelComponent, { direction: 'rtl', dx: legendXOffset - 30 }) + ) : ( + + ) + }), ...legendComponent.props }); diff --git a/packages/react-charts/src/components/ChartBullet/ChartBullet.tsx b/packages/react-charts/src/components/ChartBullet/ChartBullet.tsx index 72d01043bea..42ab60edcd5 100644 --- a/packages/react-charts/src/components/ChartBullet/ChartBullet.tsx +++ b/packages/react-charts/src/components/ChartBullet/ChartBullet.tsx @@ -17,7 +17,7 @@ import { ChartLegend } from '../ChartLegend/ChartLegend'; import { ChartThemeDefinition } from '../ChartTheme/ChartTheme'; import { ChartTooltip } from '../ChartTooltip/ChartTooltip'; import { ChartBulletStyles } from '../ChartTheme/ChartStyles'; -import { getComputedLegend, getLegendItemsExtraHeight } from '../ChartUtils/chart-legend'; +import { getComputedLegend, getLegendItemsExtraHeight, getLegendMaxTextWidth } from '../ChartUtils/chart-legend'; import { ChartBulletComparativeErrorMeasure } from './ChartBulletComparativeErrorMeasure'; import { ChartBulletComparativeMeasure } from './ChartBulletComparativeMeasure'; import { ChartBulletComparativeWarningMeasure } from './ChartBulletComparativeWarningMeasure'; @@ -29,6 +29,8 @@ import { getBulletDomain } from './utils/chart-bullet-domain'; import { getBulletThemeWithLegendColorScale } from './utils/chart-bullet-theme'; import { getPaddingForSide } from '../ChartUtils/chart-padding'; import { useEffect } from 'react'; +import { ChartPoint } from '../ChartPoint/ChartPoint'; +import { ChartLabel } from '../ChartLabel/ChartLabel'; /** * ChartBullet renders a dataset as a bullet chart. @@ -252,6 +254,10 @@ export interface ChartBulletProps { * cases, the legend may not be visible until enough padding is applied. */ legendPosition?: 'bottom' | 'bottom-left' | 'right'; + /** + * @beta Text direction of the legend labels. + */ + legendDirection?: 'ltr' | 'rtl'; /** * The maxDomain prop defines a maximum domain value for a chart. This prop is useful in situations where the maximum * domain of a chart is static, while the minimum value depends on data or other variable information. If the domain @@ -509,6 +515,7 @@ export const ChartBullet: React.FunctionComponent = ({ legendComponent = , legendItemsPerRow, legendPosition = 'bottom', + legendDirection = 'ltr', maxDomain, minDomain, name, @@ -656,6 +663,20 @@ export const ChartBullet: React.FunctionComponent = ({ ...comparativeZeroMeasureComponent.props }); + let legendXOffset = 0; + if (legendDirection === 'rtl') { + legendXOffset = getLegendMaxTextWidth( + [ + ...(primaryDotMeasureLegendData ? primaryDotMeasureLegendData : []), + ...(primarySegmentedMeasureLegendData ? primarySegmentedMeasureLegendData : []), + ...(comparativeWarningMeasureLegendData ? comparativeWarningMeasureLegendData : []), + ...(comparativeErrorMeasureLegendData ? comparativeErrorMeasureLegendData : []), + ...(qualitativeRangeLegendData ? qualitativeRangeLegendData : []) + ], + theme + ); + } + // Legend const legend = React.cloneElement(legendComponent, { data: [ @@ -670,6 +691,20 @@ export const ChartBullet: React.FunctionComponent = ({ orientation: legendOrientation, position: legendPosition, theme, + ...(legendDirection === 'rtl' && { + dataComponent: legendComponent.props.dataComponent ? ( + React.cloneElement(legendComponent.props.dataComponent, { transform: `translate(${legendXOffset})` }) + ) : ( + + ) + }), + ...(legendDirection === 'rtl' && { + labelComponent: legendComponent.props.labelComponent ? ( + React.cloneElement(legendComponent.props.labelComponent, { direction: 'rtl', dx: legendXOffset - 30 }) + ) : ( + + ) + }), ...legendComponent.props }); diff --git a/packages/react-charts/src/components/ChartDonut/ChartDonut.tsx b/packages/react-charts/src/components/ChartDonut/ChartDonut.tsx index 19f323ddc97..d5b3aa74b27 100644 --- a/packages/react-charts/src/components/ChartDonut/ChartDonut.tsx +++ b/packages/react-charts/src/components/ChartDonut/ChartDonut.tsx @@ -345,6 +345,10 @@ export interface ChartDonutProps extends ChartPieProps { * cases, the legend may not be visible until enough padding is applied. */ legendPosition?: 'bottom' | 'right'; + /** + * @beta Text direction of the legend labels. + */ + legendDirection?: 'ltr' | 'rtl'; /** * The name prop is typically used to reference a component instance when defining shared events. However, this * optional prop may also be applied to child elements as an ID prefix. This is a workaround to ensure Victory @@ -573,6 +577,7 @@ export const ChartDonut: React.FunctionComponent = ({ containerComponent = , innerRadius, legendPosition = ChartCommonStyles.legend.position, + legendDirection = 'ltr', name, padAngle, padding, @@ -698,6 +703,7 @@ export const ChartDonut: React.FunctionComponent = ({ innerRadius={chartInnerRadius > 0 ? chartInnerRadius : 0} key="pf-chart-donut-pie" legendPosition={legendPosition} + legendDirection={legendDirection} name={name} padAngle={padAngle !== undefined ? padAngle : getPadAngle} padding={padding} diff --git a/packages/react-charts/src/components/ChartDonutUtilization/ChartDonutUtilization.tsx b/packages/react-charts/src/components/ChartDonutUtilization/ChartDonutUtilization.tsx index 26892f0e747..90b8cf1ee03 100644 --- a/packages/react-charts/src/components/ChartDonutUtilization/ChartDonutUtilization.tsx +++ b/packages/react-charts/src/components/ChartDonutUtilization/ChartDonutUtilization.tsx @@ -337,6 +337,10 @@ export interface ChartDonutUtilizationProps extends ChartDonutProps { * cases, the legend may not be visible until enough padding is applied. */ legendPosition?: 'bottom' | 'right'; + /** + * @beta Text direction of the legend labels. + */ + legendDirection?: 'ltr' | 'rtl'; /** * The labelRadius prop defines the radius of the arc that will be used for positioning each slice label. * If this prop is not set, the label radius will default to the radius of the pie + label padding. @@ -589,6 +593,7 @@ export const ChartDonutUtilization: React.FunctionComponent = ({ legendComponent = , legendData, legendPosition = ChartCommonStyles.legend.position, + legendDirection = 'ltr', name, patternScale, patternUnshiftIndex, - padding, radius, standalone = true, style, themeColor, - // destructure last theme = getTheme(themeColor), labelComponent = allowTooltip ? ( @@ -576,6 +581,11 @@ export const ChartPie: React.FunctionComponent = ({ /> ); + let legendXOffset = 0; + if (legendDirection === 'rtl') { + legendXOffset = getLegendMaxTextWidth(legendData, theme); + } + const legend = React.cloneElement(legendComponent, { colorScale, data: legendData, @@ -583,6 +593,20 @@ export const ChartPie: React.FunctionComponent = ({ key: 'pf-chart-pie-legend', orientation: legendOrientation, theme, + ...(legendDirection === 'rtl' && { + dataComponent: legendComponent.props.dataComponent ? ( + React.cloneElement(legendComponent.props.dataComponent, { transform: `translate(${legendXOffset})` }) + ) : ( + + ) + }), + ...(legendDirection === 'rtl' && { + labelComponent: legendComponent.props.labelComponent ? ( + React.cloneElement(legendComponent.props.labelComponent, { direction: 'rtl', dx: legendXOffset - 30 }) + ) : ( + + ) + }), ...legendComponent.props }); diff --git a/packages/react-charts/src/components/ChartUtils/chart-legend.ts b/packages/react-charts/src/components/ChartUtils/chart-legend.ts index 060a683535f..3bbd51bda43 100644 --- a/packages/react-charts/src/components/ChartUtils/chart-legend.ts +++ b/packages/react-charts/src/components/ChartUtils/chart-legend.ts @@ -4,6 +4,7 @@ import { VictoryLegend } from 'victory-legend'; import { ChartLegendProps } from '../ChartLegend/ChartLegend'; import { ChartCommonStyles } from '../ChartTheme/ChartStyles'; import { ChartThemeDefinition } from '../ChartTheme/ChartTheme'; +import { getLabelTextSize } from '../ChartUtils/chart-label'; import { getPieOrigin } from './chart-origin'; import * as React from 'react'; @@ -49,6 +50,22 @@ interface ChartLegendTextMaxSizeInterface { theme: ChartThemeDefinition; // The theme that will be applied to the chart } +/** + * Returns the max text length in a legend data set to calculate the x offset for right aligned legends. + * @private + */ + +export const getLegendMaxTextWidth = (legendData: any[], theme: ChartThemeDefinition) => { + let legendXOffset = 0; + legendData.map((data: any) => { + const labelWidth = getLabelTextSize({ text: data.name, theme }).width; + if (labelWidth > legendXOffset) { + legendXOffset = labelWidth; + } + }); + return legendXOffset; +}; + /** * Returns a legend which has been positioned per the given chart properties * @private diff --git a/packages/react-code-editor/CHANGELOG.md b/packages/react-code-editor/CHANGELOG.md index b395ff65413..096e9ac75d5 100644 --- a/packages/react-code-editor/CHANGELOG.md +++ b/packages/react-code-editor/CHANGELOG.md @@ -3,6 +3,42 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.1.1-prerelease.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.21...@patternfly/react-code-editor@5.1.1-prerelease.22) (2023-09-25) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.20...@patternfly/react-code-editor@5.1.1-prerelease.21) (2023-09-25) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.19...@patternfly/react-code-editor@5.1.1-prerelease.20) (2023-09-22) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.18...@patternfly/react-code-editor@5.1.1-prerelease.19) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.17...@patternfly/react-code-editor@5.1.1-prerelease.18) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.16...@patternfly/react-code-editor@5.1.1-prerelease.17) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.15...@patternfly/react-code-editor@5.1.1-prerelease.16) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.14...@patternfly/react-code-editor@5.1.1-prerelease.15) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-code-editor + +## [5.1.1-prerelease.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.13...@patternfly/react-code-editor@5.1.1-prerelease.14) (2023-09-20) + +**Note:** Version bump only for package @patternfly/react-code-editor + ## [5.1.1-prerelease.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-code-editor@5.1.1-prerelease.12...@patternfly/react-code-editor@5.1.1-prerelease.13) (2023-09-19) ### Bug Fixes diff --git a/packages/react-code-editor/package.json b/packages/react-code-editor/package.json index b9e852d4908..5ea89737f26 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": "5.1.1-prerelease.13", + "version": "6.0.0-alpha.0", "description": "This package provides a PatternFly wrapper for the Monaco code editor\n", "main": "dist/js/index.js", "module": "dist/esm/index.js", @@ -8,7 +8,8 @@ "patternfly:src": "src/", "sideEffects": false, "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", @@ -29,9 +30,9 @@ "clean": "rimraf dist" }, "dependencies": { - "@patternfly/react-core": "^5.1.1-prerelease.13", - "@patternfly/react-icons": "^5.1.1-prerelease.6", - "@patternfly/react-styles": "^5.1.1-prerelease.6", + "@patternfly/react-core": "^6.0.0-alpha.0", + "@patternfly/react-icons": "^6.0.0-alpha.0", + "@patternfly/react-styles": "^6.0.0-alpha.0", "react-dropzone": "14.2.3", "tslib": "^2.5.0" }, diff --git a/packages/react-core/CHANGELOG.md b/packages/react-core/CHANGELOG.md index 674bc9bbcb6..d08ccb93012 100644 --- a/packages/react-core/CHANGELOG.md +++ b/packages/react-core/CHANGELOG.md @@ -3,6 +3,67 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.1.1-prerelease.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.21...@patternfly/react-core@5.1.1-prerelease.22) (2023-09-25) + +### Bug Fixes + +- **Draggable:** dont disable droppable on false ondrag ([#9646](https://github.com/patternfly/patternfly-react/issues/9646)) ([8e1e08d](https://github.com/patternfly/patternfly-react/commit/8e1e08d0d0c052ff50a43b72a50724dc2053f416)) + +## [5.1.1-prerelease.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.20...@patternfly/react-core@5.1.1-prerelease.21) (2023-09-25) + +### Bug Fixes + +- **PrimaryDetail:** remove primary detail card view require statement ([#9661](https://github.com/patternfly/patternfly-react/issues/9661)) ([9ae107f](https://github.com/patternfly/patternfly-react/commit/9ae107f1f3bc6e87cf15f4f51249c1614d16ea57)) + +## [5.1.1-prerelease.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.19...@patternfly/react-core@5.1.1-prerelease.20) (2023-09-22) + +### Bug Fixes + +- **Nav:** allow RTL scrolling ([#9637](https://github.com/patternfly/patternfly-react/issues/9637)) ([faddb9c](https://github.com/patternfly/patternfly-react/commit/faddb9cf243a5d4e0ac4cebd95c56e5723f7a8f2)) + +## [5.1.1-prerelease.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.18...@patternfly/react-core@5.1.1-prerelease.19) (2023-09-21) + +### Bug Fixes + +- **Tabs:** allow RTL scrolling ([#9633](https://github.com/patternfly/patternfly-react/issues/9633)) ([72f13c8](https://github.com/patternfly/patternfly-react/commit/72f13c883b528ffc4ca428d068d479e2b688dc79)) + +## [5.1.1-prerelease.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.17...@patternfly/react-core@5.1.1-prerelease.18) (2023-09-21) + +### Bug Fixes + +- **Dropdown:** Add appendTo to dropdownPopperProps interface ([#9635](https://github.com/patternfly/patternfly-react/issues/9635)) ([1bc53da](https://github.com/patternfly/patternfly-react/commit/1bc53da876b757211a237832881820ccad64bdd7)) +- **popper:** add start/end positioning with RTL support, update default ([#9628](https://github.com/patternfly/patternfly-react/issues/9628)) ([033e6bc](https://github.com/patternfly/patternfly-react/commit/033e6bcca19994f0dc1ead8bcd076096d045bd77)) + +### Features + +- **Timestamp:** allowed displayed datetime to be UTC ([#9649](https://github.com/patternfly/patternfly-react/issues/9649)) ([7b3ec92](https://github.com/patternfly/patternfly-react/commit/7b3ec9275e6a8909b1e230c6e6f52d74c9c72842)) + +## [5.1.1-prerelease.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.16...@patternfly/react-core@5.1.1-prerelease.17) (2023-09-21) + +### Bug Fixes + +- **Slider:** Updated slider to work in RTL. ([#9655](https://github.com/patternfly/patternfly-react/issues/9655)) ([1eb77cb](https://github.com/patternfly/patternfly-react/commit/1eb77cbdf98f1d9f140933ec5baaba37b8907492)) + +## [5.1.1-prerelease.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.15...@patternfly/react-core@5.1.1-prerelease.16) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-core + +## [5.1.1-prerelease.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.14...@patternfly/react-core@5.1.1-prerelease.15) (2023-09-21) + +### Bug Fixes + +- **misc:** fixed broken CodeSandbox demos ([#9519](https://github.com/patternfly/patternfly-react/issues/9519)) ([c02dcbc](https://github.com/patternfly/patternfly-react/commit/c02dcbcfe84c6aa5f67e8fa79839913c142541b4)) + +## [5.1.1-prerelease.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.13...@patternfly/react-core@5.1.1-prerelease.14) (2023-09-20) + +### Bug Fixes + +- **Modal:** Prevent duplicate ids within Modal ([#9555](https://github.com/patternfly/patternfly-react/issues/9555)) ([2953b78](https://github.com/patternfly/patternfly-react/commit/2953b78290b3baee6cf506303c88dfc5ab9d0329)) + +### Features + +- **Drawer:** Added start and end to position props, updated resizing to work with RTL ([#9627](https://github.com/patternfly/patternfly-react/issues/9627)) ([e12b872](https://github.com/patternfly/patternfly-react/commit/e12b8726b9ebc2fec921b7316a270a9c09decf96)) + ## [5.1.1-prerelease.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-core@5.1.1-prerelease.12...@patternfly/react-core@5.1.1-prerelease.13) (2023-09-19) ### Bug Fixes diff --git a/packages/react-core/package.json b/packages/react-core/package.json index 196eaa25dd6..a60b15e3e10 100644 --- a/packages/react-core/package.json +++ b/packages/react-core/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-core", - "version": "5.1.1-prerelease.13", + "version": "6.0.0-alpha.0", "description": "This library provides a set of common React components for use with the PatternFly reference implementation.", "main": "dist/js/index.js", "module": "dist/esm/index.js", @@ -21,7 +21,8 @@ "*.scss" ], "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", @@ -45,9 +46,9 @@ "subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json" }, "dependencies": { - "@patternfly/react-icons": "^5.1.1-prerelease.6", - "@patternfly/react-styles": "^5.1.1-prerelease.6", - "@patternfly/react-tokens": "^5.1.1-prerelease.6", + "@patternfly/react-icons": "^6.0.0-alpha.0", + "@patternfly/react-styles": "^6.0.0-alpha.0", + "@patternfly/react-tokens": "^6.0.0-alpha.0", "focus-trap": "7.5.2", "react-dropzone": "^14.2.3", "tslib": "^2.5.0" diff --git a/packages/react-core/src/components/BackgroundImage/__tests__/BackgroundImage.test.tsx b/packages/react-core/src/components/BackgroundImage/__tests__/BackgroundImage.test.tsx index ddca7b08c6b..5bed2e3e323 100644 --- a/packages/react-core/src/components/BackgroundImage/__tests__/BackgroundImage.test.tsx +++ b/packages/react-core/src/components/BackgroundImage/__tests__/BackgroundImage.test.tsx @@ -1,20 +1,34 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { BackgroundImage } from '../BackgroundImage'; +import styles from '@patternfly/react-styles/css/components/BackgroundImage/background-image'; -test('has default className and src URL applied to style', () => { +test(`renders with default className ${styles.backgroundImage}`, () => { render(); + expect(screen.getByTestId('test-id')).toHaveClass(styles.backgroundImage, { exact: true }); +}); + +test('spreads additional props', () => { + render(); + expect(screen.getByTestId('test-id')).toHaveProperty('lang'); +}); - const backgroundImage = screen.getByTestId('test-id'); - const backgroundImageStyle = backgroundImage.getAttribute('style'); +test('has src URL applied to style', () => { + render(); - expect(backgroundImage).toHaveClass('pf-v5-c-background-image'); - expect(backgroundImageStyle).toContain('--pf-v5-c-background-image--BackgroundImage'); - expect(backgroundImageStyle).toContain('/image/url.png'); + expect(screen.getByTestId('test-id')).toHaveAttribute( + 'style', + '--pf-v5-c-background-image--BackgroundImage: url(/image/url.png);' + ); }); -test('has additional className when one is provided', () => { +test('renders with custom className when one is provided', () => { render(); expect(screen.getByTestId('test-id')).toHaveClass('another-class'); }); + +test('Matches the snapshot', () => { + const { asFragment } = render(); + expect(asFragment()).toMatchSnapshot(); +}); diff --git a/packages/react-core/src/components/BackgroundImage/__tests__/__snapshots__/BackgroundImage.test.tsx.snap b/packages/react-core/src/components/BackgroundImage/__tests__/__snapshots__/BackgroundImage.test.tsx.snap new file mode 100644 index 00000000000..4fba894cd6b --- /dev/null +++ b/packages/react-core/src/components/BackgroundImage/__tests__/__snapshots__/BackgroundImage.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Matches the snapshot 1`] = ` + +
+ +`; diff --git a/packages/react-core/src/components/Brand/__tests__/Brand.test.tsx b/packages/react-core/src/components/Brand/__tests__/Brand.test.tsx index 08e4fd1051f..7ed327f91db 100644 --- a/packages/react-core/src/components/Brand/__tests__/Brand.test.tsx +++ b/packages/react-core/src/components/Brand/__tests__/Brand.test.tsx @@ -3,34 +3,109 @@ import { render, screen } from '@testing-library/react'; import { Brand } from '../Brand'; import '@testing-library/jest-dom'; -describe('Brand', () => { - test('simple brand', () => { - const { asFragment } = render(); - expect(asFragment()).toMatchSnapshot(); - }); - - test('passing children creates picture brand', () => { - render( - -
test
-
- ); - expect(screen.getByText('test')).toBeInTheDocument(); - }); - - test('styles get spread when there are children', () => { - render( - -
test width
-
- ); - expect(screen.getByTestId('brand')).toHaveStyle(`color: blue`); - }); - - test('styles get spread when there are no children', () => { - render( - - ); - expect(screen.getByAltText('brand no children')).toHaveStyle(`width: 30px`); - }); +test('simple brand', () => { + render(); + expect(screen.getByAltText('brand')).toBeInTheDocument(); +}); + +test('Renders with custom class name when className prop is provided', () => { + render(); + expect(screen.getByAltText('brand')).toHaveClass('custom-class'); +}); + +test('Renders with custom class name when className prop and children are provided', () => { + render( + +
test
+
+ ); + expect(screen.getByText('test')?.parentElement).toHaveClass('custom-class'); +}); + +test('Renders passed children', () => { + render( + +
test
+
+ ); + expect(screen.getByText('test')).toBeInTheDocument(); +}); + +test('Renders as picture when children are present', () => { + render( + +
test
+
+ ); + expect(screen.getByText('test')?.parentElement?.tagName).toBe('PICTURE'); +}); + +test('Renders as img when no children are present', () => { + render(); + expect(screen.getByAltText('brand')?.tagName).toBe('IMG'); +}); + +test('Has correct src with passed src prop', () => { + render(); + const image = screen.getByRole('img') as HTMLImageElement; + expect(image.src).toMatch('test.png'); +}); + +test('Has correct alt text with passed alt prop', () => { + render(); + + expect(screen.getByAltText('brand')).toBeTruthy(); +}); + +test('Has correct src with passed children', () => { + render( + +
test width
+
+ ); + const image = screen.getByRole('img') as HTMLImageElement; + expect(image.src).toMatch('test.png'); +}); + +test('Has correct alt text with passed children', () => { + render( + +
test width
+
+ ); + expect(screen.getByAltText('brand')).toBeTruthy(); +}); + +test('styles get spread when there are children', () => { + render( + +
test width
+
+ ); + expect(screen.getByTestId('brand')).toHaveStyle(`color: blue`); +}); + +test('styles get spread when there are no children', () => { + render(); + expect(screen.getByAltText('brand no children')).toHaveStyle(`width: 30px`); +}); + +test('width styles are present when passed', () => { + render( + + ); + expect(screen.getByAltText('brand with widths')).toHaveAttribute( + 'style', + '--pf-v5-c-brand--Width: 100px; --pf-v5-c-brand--Width-on-sm: 25px; --pf-v5-c-brand--Width-on-md: 50px; --pf-v5-c-brand--Width-on-lg: 100px; --pf-v5-c-brand--Width-on-xl: 125px; --pf-v5-c-brand--Width-on-2xl: 150px;' + ); }); diff --git a/packages/react-core/src/components/Brand/__tests__/__snapshots__/Brand.test.tsx.snap b/packages/react-core/src/components/Brand/__tests__/__snapshots__/Brand.test.tsx.snap deleted file mode 100644 index 11d5e553ce6..00000000000 --- a/packages/react-core/src/components/Brand/__tests__/__snapshots__/Brand.test.tsx.snap +++ /dev/null @@ -1,11 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Brand simple brand 1`] = ` - - brand - -`; diff --git a/packages/react-core/src/components/Breadcrumb/examples/BreadcrumbDropdown.tsx b/packages/react-core/src/components/Breadcrumb/examples/BreadcrumbDropdown.tsx index ca6d166c18c..946f7b8253b 100644 --- a/packages/react-core/src/components/Breadcrumb/examples/BreadcrumbDropdown.tsx +++ b/packages/react-core/src/components/Breadcrumb/examples/BreadcrumbDropdown.tsx @@ -7,6 +7,7 @@ import { Dropdown, DropdownList, DropdownItem, + Icon, MenuToggle, MenuToggleElement } from '@patternfly/react-core'; @@ -14,13 +15,34 @@ import AngleLeftIcon from '@patternfly/react-icons/dist/esm/icons/angle-left-ico import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon'; const dropdownItems = [ - } key="edit"> + + + + } + key="edit" + > Edit , - } key="action"> + + + + } + key="action" + > Deployment , - } key="apps"> + + + + } + key="apps" + > Applications ]; diff --git a/packages/react-core/src/components/DragDrop/Draggable.tsx b/packages/react-core/src/components/DragDrop/Draggable.tsx index e76b802946e..dd59a9d1a62 100644 --- a/packages/react-core/src/components/DragDrop/Draggable.tsx +++ b/packages/react-core/src/components/DragDrop/Draggable.tsx @@ -265,6 +265,7 @@ export const Draggable: React.FunctionComponent = ({ if (!onDrag({ droppableId, index })) { // Consumer disallowed drag + droppableItems.forEach((item) => resetDroppableItem(item)); return; } diff --git a/packages/react-core/src/components/Drawer/Drawer.tsx b/packages/react-core/src/components/Drawer/Drawer.tsx index e7516cb4d78..c8ffba99f3c 100644 --- a/packages/react-core/src/components/Drawer/Drawer.tsx +++ b/packages/react-core/src/components/Drawer/Drawer.tsx @@ -11,7 +11,7 @@ export enum DrawerColorVariant { export interface DrawerProps extends React.HTMLProps { /** Additional classes added to the Drawer. */ className?: string; - /** Content rendered in the left hand panel */ + /** Content rendered in the drawer panel */ children?: React.ReactNode; /** Indicates if the drawer is expanded */ isExpanded?: boolean; @@ -19,8 +19,8 @@ export interface DrawerProps extends React.HTMLProps { isInline?: boolean; /** Indicates if the drawer will always show both content and panel. */ isStatic?: boolean; - /** Position of the drawer panel */ - position?: 'left' | 'right' | 'bottom'; + /** Position of the drawer panel. left and right are deprecated, use start and end instead. */ + position?: 'start' | 'end' | 'bottom' | 'left' | 'right'; /** Callback when drawer panel is expanded after waiting 250ms for animation to complete. */ onExpand?: (event: KeyboardEvent | React.MouseEvent | React.TransitionEvent) => void; } @@ -39,7 +39,7 @@ export const DrawerContext = React.createContext>({ isExpanded: false, isStatic: false, onExpand: () => {}, - position: 'right', + position: 'end', drawerRef: null, drawerContentRef: null, isInline: false @@ -51,7 +51,7 @@ export const Drawer: React.FunctionComponent = ({ isExpanded = false, isInline = false, isStatic = false, - position = 'right', + position = 'end', onExpand = () => {}, ...props }: DrawerProps) => { @@ -66,7 +66,7 @@ export const Drawer: React.FunctionComponent = ({ isExpanded && styles.modifiers.expanded, isInline && styles.modifiers.inline, isStatic && styles.modifiers.static, - position === 'left' && styles.modifiers.panelLeft, + (position === 'left' || position === 'start') && styles.modifiers.panelLeft, position === 'bottom' && styles.modifiers.panelBottom, className )} diff --git a/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx b/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx index 0a98f7c0fd2..a7069c01fa0 100644 --- a/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx +++ b/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx @@ -87,8 +87,8 @@ export const DrawerPanelContent: React.FunctionComponent { let splitterPos; let drawerSize; + const isRTL = window.getComputedStyle(panel.current).getPropertyValue('direction') === 'rtl'; - if (isInline && position === 'right') { - splitterPos = panel.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left; - drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left; - } else if (isInline && position === 'left') { - splitterPos = splitterRef.current.getBoundingClientRect().right - panel.current.getBoundingClientRect().left; - drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left; - } else if (position === 'right') { - splitterPos = - drawerContentRef.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left; - drawerSize = - drawerContentRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left; - } else if (position === 'left') { - splitterPos = - splitterRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left; - drawerSize = - drawerContentRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left; + if (isInline && (position === 'end' || position === 'right')) { + if (isRTL) { + splitterPos = panel.current.getBoundingClientRect().left - splitterRef.current.getBoundingClientRect().right; + drawerSize = drawerRef.current.getBoundingClientRect().left - drawerRef.current.getBoundingClientRect().right; + } else { + splitterPos = panel.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left; + drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left; + } + } else if (isInline && (position === 'start' || position === 'left')) { + if (isRTL) { + splitterPos = splitterRef.current.getBoundingClientRect().left - panel.current.getBoundingClientRect().right; + drawerSize = drawerRef.current.getBoundingClientRect().left - drawerRef.current.getBoundingClientRect().right; + } else { + splitterPos = splitterRef.current.getBoundingClientRect().right - panel.current.getBoundingClientRect().left; + drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left; + } + } else if (position === 'end' || position === 'right') { + if (isRTL) { + splitterPos = + drawerContentRef.current.getBoundingClientRect().left - splitterRef.current.getBoundingClientRect().right; + drawerSize = + drawerContentRef.current.getBoundingClientRect().left - + drawerContentRef.current.getBoundingClientRect().right; + } else { + splitterPos = + drawerContentRef.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left; + drawerSize = + drawerContentRef.current.getBoundingClientRect().right - + drawerContentRef.current.getBoundingClientRect().left; + } + } else if (position === 'start' || position === 'left') { + if (isRTL) { + splitterPos = + splitterRef.current.getBoundingClientRect().left - drawerContentRef.current.getBoundingClientRect().right; + drawerSize = + drawerContentRef.current.getBoundingClientRect().left - + drawerContentRef.current.getBoundingClientRect().right; + } else { + splitterPos = + splitterRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left; + drawerSize = + drawerContentRef.current.getBoundingClientRect().right - + drawerContentRef.current.getBoundingClientRect().left; + } } else if (position === 'bottom') { splitterPos = drawerContentRef.current.getBoundingClientRect().bottom - splitterRef.current.getBoundingClientRect().top; @@ -166,6 +195,8 @@ export const DrawerPanelContent: React.FunctionComponent { + const isRTL = window.getComputedStyle(panel.current).getPropertyValue('direction') === 'rtl'; + e.stopPropagation(); if (!isResizing) { return; @@ -173,17 +204,22 @@ export const DrawerPanelContent: React.FunctionComponent { + const isRTL = window.getComputedStyle(panel.current).getPropertyValue('direction') === 'rtl'; + const key = e.key; if ( key !== 'Escape' && @@ -248,9 +286,17 @@ export const DrawerPanelContent: React.FunctionComponent { +export const DrawerInlinePanelEnd: React.FunctionComponent = () => { const [isExpanded, setIsExpanded] = React.useState(false); const drawerRef = React.useRef(); diff --git a/packages/react-core/src/components/Drawer/examples/DrawerInlinePanelLeft.tsx b/packages/react-core/src/components/Drawer/examples/DrawerInlinePanelStart.tsx similarity index 92% rename from packages/react-core/src/components/Drawer/examples/DrawerInlinePanelLeft.tsx rename to packages/react-core/src/components/Drawer/examples/DrawerInlinePanelStart.tsx index c4ab29674ae..499f1ec7be3 100644 --- a/packages/react-core/src/components/Drawer/examples/DrawerInlinePanelLeft.tsx +++ b/packages/react-core/src/components/Drawer/examples/DrawerInlinePanelStart.tsx @@ -10,7 +10,7 @@ import { Button } from '@patternfly/react-core'; -export const DrawerInlinePanelLeft: React.FunctionComponent = () => { +export const DrawerInlinePanelStart: React.FunctionComponent = () => { const [isExpanded, setIsExpanded] = React.useState(false); const drawerRef = React.useRef(); @@ -47,7 +47,7 @@ export const DrawerInlinePanelLeft: React.FunctionComponent = () => { - + {drawerContent} diff --git a/packages/react-core/src/components/Drawer/examples/DrawerPanelLeft.tsx b/packages/react-core/src/components/Drawer/examples/DrawerPanelEnd.tsx similarity index 93% rename from packages/react-core/src/components/Drawer/examples/DrawerPanelLeft.tsx rename to packages/react-core/src/components/Drawer/examples/DrawerPanelEnd.tsx index 391b1ee953f..657a2bd0830 100644 --- a/packages/react-core/src/components/Drawer/examples/DrawerPanelLeft.tsx +++ b/packages/react-core/src/components/Drawer/examples/DrawerPanelEnd.tsx @@ -10,7 +10,7 @@ import { Button } from '@patternfly/react-core'; -export const DrawerPanelLeft: React.FunctionComponent = () => { +export const DrawerPanelEnd: React.FunctionComponent = () => { const [isExpanded, setIsExpanded] = React.useState(false); const drawerRef = React.useRef(); @@ -47,7 +47,7 @@ export const DrawerPanelLeft: React.FunctionComponent = () => { - + {drawerContent} diff --git a/packages/react-core/src/components/Drawer/examples/DrawerPanelRight.tsx b/packages/react-core/src/components/Drawer/examples/DrawerPanelStart.tsx similarity index 93% rename from packages/react-core/src/components/Drawer/examples/DrawerPanelRight.tsx rename to packages/react-core/src/components/Drawer/examples/DrawerPanelStart.tsx index abb563a9700..df0f1d7802f 100644 --- a/packages/react-core/src/components/Drawer/examples/DrawerPanelRight.tsx +++ b/packages/react-core/src/components/Drawer/examples/DrawerPanelStart.tsx @@ -10,7 +10,7 @@ import { Button } from '@patternfly/react-core'; -export const DrawerPanelRight: React.FunctionComponent = () => { +export const DrawerPanelStart: React.FunctionComponent = () => { const [isExpanded, setIsExpanded] = React.useState(false); const drawerRef = React.useRef(); @@ -47,7 +47,7 @@ export const DrawerPanelRight: React.FunctionComponent = () => { - + {drawerContent} diff --git a/packages/react-core/src/components/Drawer/examples/DrawerResizableOnRight.tsx b/packages/react-core/src/components/Drawer/examples/DrawerResizableAtEnd.tsx similarity index 91% rename from packages/react-core/src/components/Drawer/examples/DrawerResizableOnRight.tsx rename to packages/react-core/src/components/Drawer/examples/DrawerResizableAtEnd.tsx index 59a4cc30851..99ee9bdd29c 100644 --- a/packages/react-core/src/components/Drawer/examples/DrawerResizableOnRight.tsx +++ b/packages/react-core/src/components/Drawer/examples/DrawerResizableAtEnd.tsx @@ -10,7 +10,7 @@ import { Button } from '@patternfly/react-core'; -export const DrawerResizableOnRight: React.FunctionComponent = () => { +export const DrawerResizableAtEnd: React.FunctionComponent = () => { const [isExpanded, setIsExpanded] = React.useState(false); const drawerRef = React.useRef(); @@ -32,7 +32,7 @@ export const DrawerResizableOnRight: React.FunctionComponent = () => { }; const panelContent = ( - + drawer-panel @@ -52,7 +52,7 @@ export const DrawerResizableOnRight: React.FunctionComponent = () => { - + {drawerContent} diff --git a/packages/react-core/src/components/Drawer/examples/DrawerResizableOnLeft.tsx b/packages/react-core/src/components/Drawer/examples/DrawerResizableAtStart.tsx similarity index 96% rename from packages/react-core/src/components/Drawer/examples/DrawerResizableOnLeft.tsx rename to packages/react-core/src/components/Drawer/examples/DrawerResizableAtStart.tsx index 6e11e2525a8..d51cd308ef3 100644 --- a/packages/react-core/src/components/Drawer/examples/DrawerResizableOnLeft.tsx +++ b/packages/react-core/src/components/Drawer/examples/DrawerResizableAtStart.tsx @@ -10,7 +10,7 @@ import { Button } from '@patternfly/react-core'; -export const DrawerResizableOnLeft: React.FunctionComponent = () => { +export const DrawerResizableAtStart: React.FunctionComponent = () => { const [isExpanded, setIsExpanded] = React.useState(false); const drawerRef = React.useRef(); @@ -47,7 +47,7 @@ export const DrawerResizableOnLeft: React.FunctionComponent = () => { - + {drawerContent} diff --git a/packages/react-core/src/components/Dropdown/Dropdown.tsx b/packages/react-core/src/components/Dropdown/Dropdown.tsx index b94c301f017..5fed1c51552 100644 --- a/packages/react-core/src/components/Dropdown/Dropdown.tsx +++ b/packages/react-core/src/components/Dropdown/Dropdown.tsx @@ -8,7 +8,7 @@ export interface DropdownPopperProps { /** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */ direction?: 'up' | 'down'; /** Horizontal position of the popper */ - position?: 'right' | 'left' | 'center'; + position?: 'right' | 'left' | 'center' | 'start' | 'end'; /** Custom width of the popper. If the value is "trigger", it will set the width to the dropdown toggle's width */ width?: string | 'trigger'; /** Minimum width of the popper. If the value is "trigger", it will set the min width to the dropdown toggle's width */ @@ -17,6 +17,8 @@ export interface DropdownPopperProps { maxWidth?: string | 'trigger'; /** Enable to flip the popper when it reaches the boundary */ enableFlip?: boolean; + /** The container to append the popper to. Defaults to 'inline'. */ + appendTo?: HTMLElement | (() => HTMLElement) | 'inline'; } export interface DropdownToggleProps { diff --git a/packages/react-core/src/components/Label/Label.tsx b/packages/react-core/src/components/Label/Label.tsx index 7f15a1a56ac..6fa01a5b447 100644 --- a/packages/react-core/src/components/Label/Label.tsx +++ b/packages/react-core/src/components/Label/Label.tsx @@ -55,10 +55,12 @@ export interface LabelProps extends React.HTMLProps { closeBtnAriaLabel?: string; /** Additional properties for the default close button. */ closeBtnProps?: any; - /** Href for a label that is a link. If present, the label will change to an anchor element. */ + /** Href for a label that is a link. If present, the label will change to an anchor element. This should not be passed in if the onClick prop is also passed in. */ href?: string; - /** Flag indicating if the label is an overflow label */ + /** Flag indicating if the label is an overflow label. */ isOverflowLabel?: boolean; + /** Callback for when the label is clicked. This should not be passed in if the href or isEditable props are also passed in. */ + onClick?: (event: React.MouseEvent) => void; /** Forwards the label content and className to rendered function. Use this prop for react router support.*/ render?: ({ className, @@ -94,6 +96,7 @@ export const Label: React.FunctionComponent = ({ tooltipPosition, icon, onClose, + onClick: onLabelClick, onEditCancel, onEditComplete, closeBtn, @@ -118,6 +121,20 @@ export const Label: React.FunctionComponent = ({ }; }); + React.useEffect(() => { + if (onLabelClick && href) { + // eslint-disable-next-line no-console + console.warn( + 'Link labels cannot have onClick passed, this results in invalid HTML. Please remove either the href or onClick prop.' + ); + } else if (onLabelClick && isEditable) { + // eslint-disable-next-line no-console + console.warn( + 'Editable labels cannot have onClick passed, clicking starts the label edit process. Please remove either the isEditable or onClick prop.' + ); + } + }, [onLabelClick, href, isEditable]); + const onDocMouseDown = (event: MouseEvent) => { if ( isEditableActive && @@ -235,14 +252,22 @@ export const Label: React.FunctionComponent = ({ let LabelComponentChildElement = 'span'; if (href) { LabelComponentChildElement = 'a'; - } else if (isEditable) { + } else if (isEditable || (onLabelClick && !isOverflowLabel)) { LabelComponentChildElement = 'button'; } + const clickableLabelProps = { + type: 'button', + onClick: onLabelClick + }; + + const isButton = LabelComponentChildElement === 'button'; + const labelComponentChildProps = { className: css(styles.labelContent), ...(isTooltipVisible && { tabIndex: 0 }), ...(href && { href }), + ...(isButton && clickableLabelProps), ...(isEditable && { ref: editableButtonRef, onClick: (e: React.MouseEvent) => { @@ -289,6 +314,7 @@ export const Label: React.FunctionComponent = ({ isEditableActive && styles.modifiers.editableActive, className )} + onClick={isOverflowLabel ? onLabelClick : undefined} > {!isEditableActive && labelComponentChild} {!isEditableActive && onClose && button} diff --git a/packages/react-core/src/components/Label/__tests__/Label.test.tsx b/packages/react-core/src/components/Label/__tests__/Label.test.tsx index be3c3605986..519d99969cd 100644 --- a/packages/react-core/src/components/Label/__tests__/Label.test.tsx +++ b/packages/react-core/src/components/Label/__tests__/Label.test.tsx @@ -109,4 +109,39 @@ describe('Label', () => { expect(screen.queryByRole('button', { name: 'Something' })).toBeNull(); expect(asFragment()).toMatchSnapshot(); }); + + test('a button is not rendered when onClick is not passed', () => { + render(); + + expect(screen.queryByRole(`button`)).not.toBeInTheDocument(); + }); + + test('a button is rendered when onClick is passed', () => { + const fn = jest.fn(); + + render(); + + expect(screen.getByRole(`button`)).toBeVisible(); + }); + + test('clickable label does not call the passed callback when it is not clicked', async () => { + const mockCallback = jest.fn(); + + render(); + + expect(mockCallback).not.toHaveBeenCalled(); + }); + + test('clickable label calls passed callback on click', async () => { + const mockCallback = jest.fn(); + const user = userEvent.setup(); + + render(); + + const label = screen.getByRole('button'); + + await user.click(label); + + expect(mockCallback).toBeCalledTimes(1); + }); }); diff --git a/packages/react-core/src/components/Label/__tests__/__snapshots__/Label.test.tsx.snap b/packages/react-core/src/components/Label/__tests__/__snapshots__/Label.test.tsx.snap index f876111ced5..c8c126cb8d6 100644 --- a/packages/react-core/src/components/Label/__tests__/__snapshots__/Label.test.tsx.snap +++ b/packages/react-core/src/components/Label/__tests__/__snapshots__/Label.test.tsx.snap @@ -7,6 +7,7 @@ exports[`Label editable label 1`] = ` > } - rightActions={ + endActions={ @@ -85,7 +85,7 @@ export const SliderActions: React.FunctionComponent = () => { inputLabel="%" isInputVisible isDisabled={isDisabled} - rightActions={buildAction(isDisabled)} + endActions={buildAction(isDisabled)} /> ); diff --git a/packages/react-core/src/components/Tabs/Tabs.tsx b/packages/react-core/src/components/Tabs/Tabs.tsx index 5781894ac37..ea37e047675 100644 --- a/packages/react-core/src/components/Tabs/Tabs.tsx +++ b/packages/react-core/src/components/Tabs/Tabs.tsx @@ -63,10 +63,14 @@ export interface TabsProps extends Omit { static displayName = 'Tabs'; tabList = React.createRef(); leftScrollButtonRef = React.createRef(); + private direction = 'ltr'; constructor(props: TabsProps) { super(props); this.state = { enableScrollButtons: false, showScrollButtons: false, renderScrollButtons: false, - disableLeftScrollButton: true, - disableRightScrollButton: true, + disableBackScrollButton: true, + disableForwardScrollButton: true, shownKeys: this.props.defaultActiveKey !== undefined ? [this.props.defaultActiveKey] : [this.props.activeKey], // only for mountOnEnter case uncontrolledActiveKey: this.props.defaultActiveKey, uncontrolledIsExpandedLocal: this.props.defaultIsExpanded, @@ -177,7 +182,9 @@ class Tabs extends React.Component { isBox: false, hasNoBorderBottom: false, leftScrollAriaLabel: 'Scroll left', + backScrollAriaLabel: 'Scroll back', rightScrollAriaLabel: 'Scroll right', + forwardScrollAriaLabel: 'Scroll forward', component: TabsComponent.div, mountOnEnter: false, unmountOnExit: false, @@ -232,8 +239,8 @@ class Tabs extends React.Component { clearTimeout(this.scrollTimeout); this.scrollTimeout = setTimeout(() => { const container = this.tabList.current; - let disableLeftScrollButton = true; - let disableRightScrollButton = true; + let disableBackScrollButton = true; + let disableForwardScrollButton = true; let enableScrollButtons = false; let overflowingTabCount = 0; @@ -246,8 +253,8 @@ class Tabs extends React.Component { enableScrollButtons = overflowOnLeft || overflowOnRight; - disableLeftScrollButton = !overflowOnLeft; - disableRightScrollButton = !overflowOnRight; + disableBackScrollButton = !overflowOnLeft; + disableForwardScrollButton = !overflowOnRight; } if (isOverflowHorizontal) { @@ -256,14 +263,14 @@ class Tabs extends React.Component { this.setState({ enableScrollButtons, - disableLeftScrollButton, - disableRightScrollButton, + disableBackScrollButton, + disableForwardScrollButton, overflowingTabCount }); }, 100); }; - scrollLeft = () => { + scrollBack = () => { // find first Element that is fully in view on the left, then scroll to the element before it if (this.tabList.current) { const container = this.tabList.current; @@ -278,12 +285,18 @@ class Tabs extends React.Component { } } if (lastElementOutOfView) { - container.scrollLeft -= lastElementOutOfView.scrollWidth; + if (this.direction === 'ltr') { + // LTR scrolls left to go back + container.scrollLeft -= lastElementOutOfView.scrollWidth; + } else { + // RTL scrolls right to go back + container.scrollLeft += lastElementOutOfView.scrollWidth; + } } } }; - scrollRight = () => { + scrollForward = () => { // find last Element that is fully in view on the right, then scroll to the element after it if (this.tabList.current) { const container = this.tabList.current as any; @@ -297,7 +310,13 @@ class Tabs extends React.Component { } } if (firstElementOutOfView) { - container.scrollLeft += firstElementOutOfView.scrollWidth; + if (this.direction === 'ltr') { + // LTR scrolls right to go forward + container.scrollLeft += firstElementOutOfView.scrollWidth; + } else { + // RTL scrolls left to go forward + container.scrollLeft -= firstElementOutOfView.scrollWidth; + } } } }; @@ -314,6 +333,7 @@ class Tabs extends React.Component { if (canUseDOM) { window.addEventListener('resize', this.handleScrollButtons, false); } + this.direction = getComputedStyle(this.tabList.current).getPropertyValue('direction'); // call the handle resize function to check if scroll buttons should be shown this.handleScrollButtons(); } @@ -360,6 +380,8 @@ class Tabs extends React.Component { } else if (prevState.enableScrollButtons && !enableScrollButtons) { this.setState({ showScrollButtons: false }); } + + this.direction = getComputedStyle(this.tabList.current).getPropertyValue('direction'); } render() { @@ -376,6 +398,8 @@ class Tabs extends React.Component { hasNoBorderBottom, leftScrollAriaLabel, rightScrollAriaLabel, + backScrollAriaLabel, + forwardScrollAriaLabel, 'aria-label': ariaLabel, component, ouiaId, @@ -400,8 +424,8 @@ class Tabs extends React.Component { const { showScrollButtons, renderScrollButtons, - disableLeftScrollButton, - disableRightScrollButton, + disableBackScrollButton, + disableForwardScrollButton, shownKeys, uncontrolledActiveKey, uncontrolledIsExpandedLocal, @@ -497,10 +521,10 @@ class Tabs extends React.Component { diff --git a/packages/react-core/src/components/Tabs/examples/Tabs.md b/packages/react-core/src/components/Tabs/examples/Tabs.md index 0f52f7e728d..cf519f60f5b 100644 --- a/packages/react-core/src/components/Tabs/examples/Tabs.md +++ b/packages/react-core/src/components/Tabs/examples/Tabs.md @@ -28,7 +28,7 @@ You can adjust a tab in the following ways: - To disable a tab, but keep it perceivable to assistive technology users, use the `isAriaDisabled` property. If a disabled tab has a tooltip, use this property instead of `isDisabled`. - To add a tooltip to an aria-disabled tab, use the `tooltip` property. -Most tab variations can either be 'default' or 'boxed': +Tabs can be styled as 'default' or 'boxed': - Default tabs do not have any borders and use a bottom line to distinguish between a selected tab, a hovered tab, and an inactive tab. - Boxed tabs are outlined to emphasize the area that a tab spans. To preview boxed tabs in the following examples, select the 'isBox' checkbox, which sets the `isBox` property to true. @@ -207,8 +207,6 @@ The tab its content should only be mounted when the tab is visible. To enable closeable tabs, pass the `onClose` property to the `` component. To enable a button that adds new tabs, pass the `onAdd` property to ``. -Aria labels may be controlled manually by passing the `closeButtonAriaLabel` property to a `` and the `addButtonAriaLabel` property to ``. - ```ts file="./TabsDynamic.tsx" ``` diff --git a/packages/react-core/src/components/Timestamp/Timestamp.tsx b/packages/react-core/src/components/Timestamp/Timestamp.tsx index 941a8c5a18b..76e7caff5a4 100644 --- a/packages/react-core/src/components/Timestamp/Timestamp.tsx +++ b/packages/react-core/src/components/Timestamp/Timestamp.tsx @@ -64,6 +64,10 @@ export interface TimestampProps extends React.HTMLProps { * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation */ locale?: string; + /** Flag indicating whether the default content should be displayed as a UTC string + * instead of a local string. + */ + shouldDisplayUTC?: boolean; /** Determines the format of the displayed time in the timestamp and UTC tooltip. Examples: * "Full" => 11:25:00 AM Eastern Daylight Time * "Long" => 11:25:00 AM EDT @@ -84,6 +88,7 @@ export const Timestamp: React.FunctionComponent = ({ displaySuffix = '', is12Hour, locale, + shouldDisplayUTC, timeFormat, tooltip, ...props @@ -117,7 +122,6 @@ export const Timestamp: React.FunctionComponent = ({ ...formatOptions, ...(hasTimeFormat && { timeStyle: timeFormat }) }); - const defaultDisplay = `${dateAsLocaleString}${displaySuffix ? ' ' + displaySuffix : ''}`; const utcTimeFormat = timeFormat !== 'short' ? 'medium' : 'short'; const convertToUTCString = (date: Date) => new Date(date).toUTCString().slice(0, -3); @@ -125,8 +129,13 @@ export const Timestamp: React.FunctionComponent = ({ ...formatOptions, ...(hasTimeFormat && { timeStyle: utcTimeFormat }) }); - const defaultTooltipContent = `${utcDateString}${tooltip?.suffix ? ' ' + tooltip.suffix : ' UTC'}`; + const defaultUTCSuffix = timeFormat === 'full' ? 'Coordinated Universal Time' : 'UTC'; + const createUTCContent = (customSuffix: string) => + `${utcDateString} ${customSuffix ? customSuffix : defaultUTCSuffix}`; + const defaultDisplay = shouldDisplayUTC + ? createUTCContent(displaySuffix) + : `${dateAsLocaleString}${displaySuffix ? ' ' + displaySuffix : ''}`; const { dateTime, ...propsWithoutDateTime } = props; const timestamp = ( @@ -143,7 +152,7 @@ export const Timestamp: React.FunctionComponent = ({ return tooltip ? ( {timestamp} diff --git a/packages/react-core/src/components/Timestamp/__tests__/Timestamp.test.tsx b/packages/react-core/src/components/Timestamp/__tests__/Timestamp.test.tsx index 14108715d51..804ee1b4f92 100644 --- a/packages/react-core/src/components/Timestamp/__tests__/Timestamp.test.tsx +++ b/packages/react-core/src/components/Timestamp/__tests__/Timestamp.test.tsx @@ -55,6 +55,12 @@ test('Renders passed in date with default formatting', () => { expect(screen.getByText('1/1/2022, 12:00:00 AM')).toBeInTheDocument(); }); +test('Renders passed in date as UTC when shouldDisplayUTC is true', () => { + render(); + + expect(screen.getByText('1/1/2022, 5:00:00 AM UTC')).toBeInTheDocument(); +}); + test('Renders with correct datetime attribute when date is passed in', () => { const passedDate = new Date(2022, 0, 1); render(); diff --git a/packages/react-core/src/components/Timestamp/examples/Timestamp.md b/packages/react-core/src/components/Timestamp/examples/Timestamp.md index 377f15a630e..54534005e4e 100644 --- a/packages/react-core/src/components/Timestamp/examples/Timestamp.md +++ b/packages/react-core/src/components/Timestamp/examples/Timestamp.md @@ -12,7 +12,10 @@ beta: true By default, a timestamp will display the current date and time based on the current locale if the `date` prop is not passed in. +Passing the `shouldDisplayUTC` property will display the UTC date and time instead of the current or passed in locale. + ```ts file="./TimestampDefault.tsx" + ``` ### Basic formats @@ -22,6 +25,7 @@ The format of the displayed content can be customized by passing in the `dateFor You can also pass in the `displaySuffix` prop to display a custom suffix at the end of the displayed content. This will not override a timezone that is already displayed from the applied time format. ```ts file="./TimestampBasicFormats.tsx" + ``` ### Custom format @@ -29,6 +33,7 @@ You can also pass in the `displaySuffix` prop to display a custom suffix at the The format of the displayed content can be further customized by passing in the `customFormat` prop. Read [datetime format options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options) for a list of options that can be passed in. ```ts file="./TimestampCustomFormat.tsx" + ``` ### Default tooltip @@ -38,6 +43,7 @@ To render a tooltip that displays the timestamp content as a UTC time, you can p You can customize the suffix of this default tooltip variant by passing in `suffix` to the `tooltip` prop. ```ts file="./TimestampDefaultTooltip.tsx" + ``` ### Custom content @@ -47,6 +53,7 @@ To display custom content, such as a relative time or prefacing text, you can pa When also rendering a default tooltip with the `tooltip` prop, you can pass in the `dateFormat` and/or `timeFormat` props to customize the tooltip content without affecting the custom timestamp content. ```ts file="TimestampCustomContent.tsx" + ``` ### Custom tooltip @@ -54,4 +61,5 @@ When also rendering a default tooltip with the `tooltip` prop, you can pass in t By passing in `variant="custom"` and `content` to the `tooltip` prop, you can display custom content within the timestamp's tooltip. ```ts file="TimestampCustomTooltip.tsx" + ``` diff --git a/packages/react-core/src/components/Timestamp/examples/TimestampDefault.tsx b/packages/react-core/src/components/Timestamp/examples/TimestampDefault.tsx index b74ca416155..96a21fa14d6 100644 --- a/packages/react-core/src/components/Timestamp/examples/TimestampDefault.tsx +++ b/packages/react-core/src/components/Timestamp/examples/TimestampDefault.tsx @@ -1,4 +1,10 @@ import React from 'react'; import { Timestamp } from '@patternfly/react-core'; -export const TimestampDefault: React.FunctionComponent = () => ; +export const TimestampDefault: React.FunctionComponent = () => ( + <> + +
+ + +); diff --git a/packages/react-core/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx b/packages/react-core/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx index a1ca1e109a0..2dad0d988c3 100644 --- a/packages/react-core/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx +++ b/packages/react-core/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx @@ -11,7 +11,7 @@ export const TimestampDefaultTooltip: React.FunctionComponent = () => {
); diff --git a/packages/react-core/src/components/Toolbar/examples/Test.tsx b/packages/react-core/src/components/Toolbar/examples/Test.tsx deleted file mode 100644 index e4ad498ca23..00000000000 --- a/packages/react-core/src/components/Toolbar/examples/Test.tsx +++ /dev/null @@ -1,258 +0,0 @@ -import React from 'react'; -import { - MenuToggle, - MenuToggleElement, - Toolbar, - ToolbarItem, - ToolbarContent, - ToolbarToggleGroup, - ToolbarGroup, - SearchInput, - Select, - SelectList, - SelectOption, - ToolbarFilter, - Badge -} from '@patternfly/react-core'; -import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; - -export const Test: React.FunctionComponent = () => { - const statusChipContainerRef = React.useRef(); - const riskChipContainerRef = React.useRef(); - - const [isStatusGroupExpanded, setIsStatusGroupExpanded] = React.useState(false); - const [isRiskGroupExpanded, setIsRiskGroupExpanded] = React.useState(false); - - const [isStatusMenuExpanded, setIsStatusExpanded] = React.useState(false); - const [isRiskMenuExpanded, setIsRiskExpanded] = React.useState(false); - const [inputValue, setInputValue] = React.useState(''); - const [filters, setFilters] = React.useState({ - risk: ['Low'], - status: ['New', 'Pending'] - }); - - const closeToggleGroups = () => { - setIsStatusGroupExpanded(false); - setIsRiskGroupExpanded(false); - }; - - React.useEffect(() => { - window.addEventListener('resize', closeToggleGroups); // Resize observer to toggle off expand groups is required to properly reformat toolbar when growing - return () => { - window.removeEventListener('resize', closeToggleGroups); - }; - }, []); - - const onInputChange = (newValue: string) => { - setInputValue(newValue); - }; - - const onStatusToggle = () => { - setIsStatusExpanded(!isStatusMenuExpanded); - }; - - const onRiskToggle = () => { - setIsRiskExpanded(!isRiskMenuExpanded); - }; - - const onSelect = (type: string, event: React.MouseEvent | React.ChangeEvent | undefined, selection: string) => { - const checked = (event?.target as HTMLInputElement).checked; - setFilters((prev) => { - const prevSelections = prev[type]; - return { - ...prev, - [type]: checked ? [...prevSelections, selection] : prevSelections.filter((value) => value !== selection) - }; - }); - }; - - const onStatusSelect = (event: React.MouseEvent | React.ChangeEvent | undefined, selection: string) => { - onSelect('status', event, selection); - }; - - const onRiskSelect = (event: React.MouseEvent | React.ChangeEvent | undefined, selection: string) => { - onSelect('risk', event, selection); - }; - - const onDelete = (type: string, id: string) => { - if (type === 'Risk') { - setFilters({ risk: filters.risk.filter((fil: string) => fil !== id), status: filters.status }); - } else if (type === 'Status') { - setFilters({ risk: filters.risk, status: filters.status.filter((fil: string) => fil !== id) }); - } else { - setFilters({ risk: [], status: [] }); - } - }; - - const onDeleteGroup = (type: string) => { - if (type === 'Risk') { - setFilters({ risk: [], status: filters.status }); - } else if (type === 'Status') { - setFilters({ risk: filters.risk, status: [] }); - } - }; - - const statusToggleGroupItems = ( - - - onInputChange(value)} - value={inputValue} - onClear={() => { - onInputChange(''); - }} - /> - - - onDelete(category as string, chip as string)} - deleteChipGroup={(category) => onDeleteGroup(category as string)} - categoryName="Status" - isExpanded={isStatusGroupExpanded} - expandableChipContainerRef={statusChipContainerRef} // Required to link the toolbar filter chip group to the custom expandable group - > - - - - - ); - - const riskToggleGroupItems = ( - - onDelete(category as string, chip as string)} - categoryName="Risk" - isExpanded={isRiskGroupExpanded} - expandableChipContainerRef={riskChipContainerRef} // Required to link the toolbar filter chip group to the custom expandable group - > - - - - ); - - return ( - - - { - setIsStatusGroupExpanded(!isStatusGroupExpanded); - setIsRiskGroupExpanded(false); - }} // Required to control expanded state - toggleIcon={} - breakpoint="md" - chipContainerRef={statusChipContainerRef} - showClearFiltersButton - clearAllFilters={() => onDeleteGroup('Status')} - clearFiltersButtonText="Clear status filter" - > - {statusToggleGroupItems} - - { - setIsRiskGroupExpanded(!isRiskGroupExpanded); - setIsStatusGroupExpanded(false); - }} // Required to control expanded state - toggleIcon={} - breakpoint="xl" - chipContainerRef={riskChipContainerRef} - showClearFiltersButton - clearAllFilters={() => onDeleteGroup('Risk')} - clearFiltersButtonText={'Clear risk filter'} - > - {riskToggleGroupItems} - - - - ); -}; diff --git a/packages/react-core/src/components/Toolbar/examples/Toolbar.md b/packages/react-core/src/components/Toolbar/examples/Toolbar.md index de3011cd7f3..1ab04da5720 100644 --- a/packages/react-core/src/components/Toolbar/examples/Toolbar.md +++ b/packages/react-core/src/components/Toolbar/examples/Toolbar.md @@ -14,12 +14,6 @@ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-ico ## Examples -### TEST - remove before merging - -```ts file="./Test.tsx" - -``` - ### Toolbar items A toolbar can contain multiple toolbar items, like filters and buttons. diff --git a/packages/react-core/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx b/packages/react-core/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx index 2c14ae05576..93ec1fe1770 100644 --- a/packages/react-core/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +++ b/packages/react-core/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx @@ -12,7 +12,7 @@ import { DropdownItem } from '@patternfly/react-core'; import ThIcon from '@patternfly/react-icons/dist/js/icons/th-icon'; -import pfIcon from 'pf-logo-small.svg'; +import pfIcon from '@patternfly/react-core/src/demos/Card/pf-logo-small.svg'; const MockLink: React.FunctionComponent = ({ to, ...props }: any) => ; diff --git a/packages/react-core/src/demos/PrimaryDetail.md b/packages/react-core/src/demos/PrimaryDetail.md index b792fb60ba1..cf06304627f 100644 --- a/packages/react-core/src/demos/PrimaryDetail.md +++ b/packages/react-core/src/demos/PrimaryDetail.md @@ -24,14 +24,13 @@ import azureIcon from './assets/FuseConnector_Icons_AzureServices.png'; import restIcon from './assets/FuseConnector_Icons_REST.png'; import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; import { data } from '@patternfly/react-core/src/demos/Card/examples/CardData.jsx'; -import DashboardWrapper from './examples/DashboardWrapper'; +import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; ## Demos ### Primary-detail full page ```js file="./examples/PrimaryDetail/PrimaryDetailFullPage.tsx" isFullscreen - ``` ### Primary-detail content padding diff --git a/packages/react-core/src/helpers/Popper/Popper.tsx b/packages/react-core/src/helpers/Popper/Popper.tsx index 403e232dfd6..b7ba8663470 100644 --- a/packages/react-core/src/helpers/Popper/Popper.tsx +++ b/packages/react-core/src/helpers/Popper/Popper.tsx @@ -45,6 +45,21 @@ const getOppositePlacement = (placement: Placement): any => export const getOpacityTransition = (animationDuration: number) => `opacity ${animationDuration}ms cubic-bezier(.54, 1.5, .38, 1.11)`; +export const getLanguageDirection = (targetElement: HTMLElement) => { + const defaultDirection = 'ltr'; + let direction = defaultDirection; + + if (targetElement) { + direction = getComputedStyle(targetElement).getPropertyValue('direction'); + } + + if (['ltr', 'rtl'].includes(direction)) { + return direction as 'ltr' | 'rtl'; + } + + return defaultDirection; +}; + export interface PopperProps { /** * Trigger reference element to which the popper is relatively placed to. @@ -66,7 +81,7 @@ export interface PopperProps { /** popper direction */ direction?: 'up' | 'down'; /** popper position */ - position?: 'right' | 'left' | 'center'; + position?: 'right' | 'left' | 'center' | 'start' | 'end'; /** Instead of direction and position can set the placement of the popper */ placement?: Placement; /** Custom width of the popper. If the value is "trigger", it will set the width to the trigger element's width */ @@ -177,7 +192,7 @@ export const Popper: React.FunctionComponent = ({ trigger, popper, direction = 'down', - position = 'left', + position = 'start', placement, width, minWidth = 'trigger', @@ -226,6 +241,28 @@ export const Popper: React.FunctionComponent = ({ const refOrTrigger = refElement || triggerElement; const showPopper = isVisible || internalIsVisible; + const triggerParent = ((triggerRef as React.RefObject)?.current || triggerElement)?.parentElement; + const languageDirection = getLanguageDirection(triggerParent); + + const internalPosition = React.useMemo<'left' | 'right' | 'center'>(() => { + const fixedPositions = { left: 'left', right: 'right', center: 'center' }; + + const positionMap = { + ltr: { + start: 'left', + end: 'right', + ...fixedPositions + }, + rtl: { + start: 'right', + end: 'left', + ...fixedPositions + } + }; + + return positionMap[languageDirection][position] as 'left' | 'right' | 'center'; + }, [position, languageDirection]); + const onDocumentClickCallback = React.useCallback( (event: MouseEvent) => onDocumentClick(event, refOrTrigger, popperElement), [showPopper, triggerElement, refElement, popperElement, onDocumentClick] @@ -333,15 +370,15 @@ export const Popper: React.FunctionComponent = ({ return placement; } let convertedPlacement = direction === 'up' ? 'top' : 'bottom'; - if (position !== 'center') { - convertedPlacement = `${convertedPlacement}-${position === 'right' ? 'end' : 'start'}`; + if (internalPosition !== 'center') { + convertedPlacement = `${convertedPlacement}-${internalPosition === 'right' ? 'end' : 'start'}`; } return convertedPlacement as Placement; }; - const getPlacementMemo = React.useMemo(getPlacement, [direction, position, placement]); + const getPlacementMemo = React.useMemo(getPlacement, [direction, internalPosition, placement]); const getOppositePlacementMemo = React.useMemo( () => getOppositePlacement(getPlacement()), - [direction, position, placement] + [direction, internalPosition, placement] ); const widthMods: Modifier<'widthMods', {}> = React.useMemo( diff --git a/packages/react-docs/CHANGELOG.md b/packages/react-docs/CHANGELOG.md index 682468257e6..f0028ee0d2e 100644 --- a/packages/react-docs/CHANGELOG.md +++ b/packages/react-docs/CHANGELOG.md @@ -3,6 +3,42 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.1.1-prerelease.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.22...@patternfly/react-docs@6.1.1-prerelease.23) (2023-09-25) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.21...@patternfly/react-docs@6.1.1-prerelease.22) (2023-09-25) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.20...@patternfly/react-docs@6.1.1-prerelease.21) (2023-09-22) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.19...@patternfly/react-docs@6.1.1-prerelease.20) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.18...@patternfly/react-docs@6.1.1-prerelease.19) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.17...@patternfly/react-docs@6.1.1-prerelease.18) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.16...@patternfly/react-docs@6.1.1-prerelease.17) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.15...@patternfly/react-docs@6.1.1-prerelease.16) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-docs + +## [6.1.1-prerelease.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.14...@patternfly/react-docs@6.1.1-prerelease.15) (2023-09-20) + +**Note:** Version bump only for package @patternfly/react-docs + ## [6.1.1-prerelease.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@6.1.1-prerelease.13...@patternfly/react-docs@6.1.1-prerelease.14) (2023-09-19) **Note:** Version bump only for package @patternfly/react-docs diff --git a/packages/react-docs/package.json b/packages/react-docs/package.json index df5d97f50f4..4a1b51ccd6f 100644 --- a/packages/react-docs/package.json +++ b/packages/react-docs/package.json @@ -1,9 +1,10 @@ { "name": "@patternfly/react-docs", "description": "PatternFly React Docs", - "version": "6.1.1-prerelease.14", + "version": "7.0.0-alpha.0", "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", @@ -23,13 +24,13 @@ }, "dependencies": { "@patternfly/patternfly": "5.1.0-prerelease.28", - "@patternfly/react-charts": "^7.1.1-prerelease.7", - "@patternfly/react-code-editor": "^5.1.1-prerelease.13", - "@patternfly/react-core": "^5.1.1-prerelease.13", - "@patternfly/react-icons": "^5.1.1-prerelease.6", - "@patternfly/react-styles": "^5.1.1-prerelease.6", - "@patternfly/react-table": "^5.1.1-prerelease.13", - "@patternfly/react-tokens": "^5.1.1-prerelease.6" + "@patternfly/react-charts": "^8.0.0-alpha.0", + "@patternfly/react-code-editor": "^6.0.0-alpha.0", + "@patternfly/react-core": "^6.0.0-alpha.0", + "@patternfly/react-icons": "^6.0.0-alpha.0", + "@patternfly/react-styles": "^6.0.0-alpha.0", + "@patternfly/react-table": "^6.0.0-alpha.0", + "@patternfly/react-tokens": "^6.0.0-alpha.0" }, "devDependencies": { "@patternfly/documentation-framework": "^5.0.15", diff --git a/packages/react-docs/patternfly-docs/generated/components/alert/react-demos/alert-group-toast-with-notification-drawer.png b/packages/react-docs/patternfly-docs/generated/components/alert/react-demos/alert-group-toast-with-notification-drawer.png index 18c3c038474..e5fa733c430 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/alert/react-demos/alert-group-toast-with-notification-drawer.png and b/packages/react-docs/patternfly-docs/generated/components/alert/react-demos/alert-group-toast-with-notification-drawer.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/back-to-top/react-demos/using-name-selector.png b/packages/react-docs/patternfly-docs/generated/components/back-to-top/react-demos/using-name-selector.png index 9c30c5fc026..a4806f8c2e9 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/back-to-top/react-demos/using-name-selector.png and b/packages/react-docs/patternfly-docs/generated/components/back-to-top/react-demos/using-name-selector.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/backdrop/react/basic.png b/packages/react-docs/patternfly-docs/generated/components/backdrop/react/basic.png index f0aa25bd4a2..53eff2fc815 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/backdrop/react/basic.png and b/packages/react-docs/patternfly-docs/generated/components/backdrop/react/basic.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/background-image/react/basic.png b/packages/react-docs/patternfly-docs/generated/components/background-image/react/basic.png index c01e1f78570..85a28c63adc 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/background-image/react/basic.png and b/packages/react-docs/patternfly-docs/generated/components/background-image/react/basic.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/basic-sticky-banner.png b/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/basic-sticky-banner.png index 95145d5e8e6..57a85c098b4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/basic-sticky-banner.png and b/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/basic-sticky-banner.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/top-and-bottom-banner.png b/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/top-and-bottom-banner.png index 743a02b0107..11a6527325d 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/top-and-bottom-banner.png and b/packages/react-docs/patternfly-docs/generated/components/banner/react-demos/top-and-bottom-banner.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/scrollspy-with-subsections.png b/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/scrollspy-with-subsections.png index eb216c1ecf6..36e7c6b8740 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/scrollspy-with-subsections.png and b/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/scrollspy-with-subsections.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/with-drawer.png b/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/with-drawer.png index 2608a802588..6e2e4d67f75 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/with-drawer.png and b/packages/react-docs/patternfly-docs/generated/components/jump-links/react-demos/with-drawer.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/login-page/react/basic.png b/packages/react-docs/patternfly-docs/generated/components/login-page/react/basic.png index 6584eb4cae5..c93a4aa5e76 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/login-page/react/basic.png and b/packages/react-docs/patternfly-docs/generated/components/login-page/react/basic.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/login-page/react/showhide-password.png b/packages/react-docs/patternfly-docs/generated/components/login-page/react/showhide-password.png index ffc1e2f5ed9..1eb06d6dac2 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/login-page/react/showhide-password.png and b/packages/react-docs/patternfly-docs/generated/components/login-page/react/showhide-password.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/login-page/react/with-header-utilities.png b/packages/react-docs/patternfly-docs/generated/components/login-page/react/with-header-utilities.png index aafcf41252b..04e43fe00a2 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/login-page/react/with-header-utilities.png and b/packages/react-docs/patternfly-docs/generated/components/login-page/react/with-header-utilities.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/masthead/react-demos/masthead-with-utilities-and-user-dropdown-menu.png b/packages/react-docs/patternfly-docs/generated/components/masthead/react-demos/masthead-with-utilities-and-user-dropdown-menu.png index 30e6fd39fc2..de2bc003996 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/masthead/react-demos/masthead-with-utilities-and-user-dropdown-menu.png and b/packages/react-docs/patternfly-docs/generated/components/masthead/react-demos/masthead-with-utilities-and-user-dropdown-menu.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/default-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/default-nav.png index dc102e18035..9a3a40b3234 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/default-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/default-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/drilldown-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/drilldown-nav.png index b5e7a0f6665..5a33e5722b4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/drilldown-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/drilldown-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/expandable-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/expandable-nav.png index 87973356334..81ca2af0c3c 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/expandable-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/expandable-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/flyout-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/flyout-nav.png index 6f42a0bb233..6f9648c4b74 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/flyout-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/flyout-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/grouped-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/grouped-nav.png index 09e877757a9..3e1b4ecb31d 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/grouped-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/grouped-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav-with-horizontal-subnav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav-with-horizontal-subnav.png index f0c8b296a2d..594bf24842b 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav-with-horizontal-subnav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav-with-horizontal-subnav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav.png index b4bc23dcf71..9139bf9edb4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-subnav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-subnav.png index 4b3aa430331..6c448613825 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-subnav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/horizontal-subnav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/light-nav-deprecated.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/light-nav-deprecated.png index b7d7fee2b92..cf0189f3dd4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/light-nav-deprecated.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/light-nav-deprecated.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/manual-nav.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/manual-nav.png index 411a3028438..400a871858e 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/manual-nav.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/manual-nav.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/tertiary-nav-deprecated.png b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/tertiary-nav-deprecated.png index eceffd5f1b0..4d38728b2cc 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/tertiary-nav-deprecated.png and b/packages/react-docs/patternfly-docs/generated/components/navigation/react-demos/tertiary-nav-deprecated.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/basic.png b/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/basic.png index 06d13a3aa67..3fb634c97a5 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/basic.png and b/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/basic.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/grouped.png b/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/grouped.png index 06d13a3aa67..3fb634c97a5 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/grouped.png and b/packages/react-docs/patternfly-docs/generated/components/notification-drawer/react-demos/grouped.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-breadcrumb-with-breakpoints.png b/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-breadcrumb-with-breakpoints.png index 0e0c09dfb3f..83ac5313eea 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-breadcrumb-with-breakpoints.png and b/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-breadcrumb-with-breakpoints.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group-alternate-syntax.png b/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group-alternate-syntax.png index e1910d96007..690cb2454f4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group-alternate-syntax.png and b/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group-alternate-syntax.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group.png b/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group.png index e1910d96007..690cb2454f4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group.png and b/packages/react-docs/patternfly-docs/generated/components/page/react-demos/sticky-section-group.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/pagination/react/sticky.png b/packages/react-docs/patternfly-docs/generated/components/pagination/react/sticky.png index 032dc20065b..c786a3606e4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/pagination/react/sticky.png and b/packages/react-docs/patternfly-docs/generated/components/pagination/react/sticky.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/skip-to-content/react/basic.png b/packages/react-docs/patternfly-docs/generated/components/skip-to-content/react/basic.png index 7be0b4a6c30..a7d1721fe1e 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/skip-to-content/react/basic.png and b/packages/react-docs/patternfly-docs/generated/components/skip-to-content/react/basic.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/automatic-pagination.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/automatic-pagination.png index 26bd544d985..8d45567707b 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/automatic-pagination.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/automatic-pagination.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/bulk-select.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/bulk-select.png index f987e913afb..7725b874ada 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/bulk-select.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/bulk-select.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/column-management.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/column-management.png index 56aa37cc5dd..7ba28e5ac25 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/column-management.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/column-management.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compact.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compact.png index 849ddf90ec2..cdbc9992f1f 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compact.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compact.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compound-expansion.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compound-expansion.png index 8a3495ac2af..456dffef64e 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compound-expansion.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/compound-expansion.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/empty.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/empty.png index 9b20efc9ef2..491cacf3f31 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/empty.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/empty.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/error.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/error.png index b27db09ba13..0af029b6e81 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/error.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/error.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/expandcollapse-all.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/expandcollapse-all.png index 05fc615585b..ce95981552a 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/expandcollapse-all.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/expandcollapse-all.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/filterable.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/filterable.png index f42c1fda1fe..ba6412355df 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/filterable.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/filterable.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/loading.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/loading.png index 56c49aa7ad5..b389d5fef89 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/loading.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/loading.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sortable---responsive.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sortable---responsive.png index d6e44202aac..2b52ac3d00a 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sortable---responsive.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sortable---responsive.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/static-bottom-pagination-on-mobile.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/static-bottom-pagination-on-mobile.png index 34db37a3268..842477b6afd 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/static-bottom-pagination-on-mobile.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/static-bottom-pagination-on-mobile.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-columns-and-header-with-toolbar.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-columns-and-header-with-toolbar.png index 2ac283ccc02..0fe26067190 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-columns-and-header-with-toolbar.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-columns-and-header-with-toolbar.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-first-column.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-first-column.png index 3b762e86346..beb254754bc 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-first-column.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-first-column.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-header.png b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-header.png index 6d25564cba1..2470d661559 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-header.png and b/packages/react-docs/patternfly-docs/generated/components/table/react-demos/sticky-header.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/modal-tabs.png b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/modal-tabs.png index 07bd853ecc6..8b07f59a050 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/modal-tabs.png and b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/modal-tabs.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-tabs.png b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-tabs.png index 133f60a883e..815c617c4c8 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-tabs.png and b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-tabs.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-unindented-tabs.png b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-unindented-tabs.png index 5db50a9e124..c0f411db9a7 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-unindented-tabs.png and b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/nested-unindented-tabs.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs-with-secondary-tabs.png b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs-with-secondary-tabs.png index 27dda4ee179..30a8c25faf8 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs-with-secondary-tabs.png and b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs-with-secondary-tabs.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs.png b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs.png index 6d421aab939..a389185da6a 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs.png and b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/open-tabs.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/tables-and-tabs.png b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/tables-and-tabs.png index 57a176e2c60..ee544edbb98 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/tables-and-tabs.png and b/packages/react-docs/patternfly-docs/generated/components/tabs/react-demos/tables-and-tabs.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/toolbar/react-demos/console-log-viewer-toolbar-demo.png b/packages/react-docs/patternfly-docs/generated/components/toolbar/react-demos/console-log-viewer-toolbar-demo.png index c2e1f94692a..4da26021d74 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/toolbar/react-demos/console-log-viewer-toolbar-demo.png and b/packages/react-docs/patternfly-docs/generated/components/toolbar/react-demos/console-log-viewer-toolbar-demo.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer-and-informational-step.png b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer-and-informational-step.png index 5c8cf9fe377..0271c8bf05f 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer-and-informational-step.png and b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer-and-informational-step.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer.png b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer.png index 831bbb575e0..6b77a03d5c6 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer.png and b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal-with-drawer.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal.png b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal.png index 3edc08852a2..bb7d6edde13 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal.png and b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-modal.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer-and-informational-step.png b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer-and-informational-step.png index 5d6badfe04f..ef6f8438229 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer-and-informational-step.png and b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer-and-informational-step.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer.png b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer.png index 9b1583ec279..0cd84d2eed8 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer.png and b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page-with-drawer.png differ diff --git a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page.png b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page.png index 4e0770e7c6b..bc822e25d66 100644 Binary files a/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page.png and b/packages/react-docs/patternfly-docs/generated/components/wizard/react-demos/in-page.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/card-view/react-demos/card-view.png b/packages/react-docs/patternfly-docs/generated/patterns/card-view/react-demos/card-view.png index 51f5977fc33..821db26b18b 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/card-view/react-demos/card-view.png and b/packages/react-docs/patternfly-docs/generated/patterns/card-view/react-demos/card-view.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-card-view.png b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-card-view.png index 63f260f1caa..1db0e4d5205 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-card-view.png and b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-card-view.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-content-padding.png b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-content-padding.png index 4fcb34d55f8..afa7e04038c 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-content-padding.png and b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-content-padding.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-data-list-in-card.png b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-data-list-in-card.png index b702063a90a..6a75d7e03d4 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-data-list-in-card.png and b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-data-list-in-card.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-full-page.png b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-full-page.png index a0df01bc70d..2a1b39ddd78 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-full-page.png and b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-full-page.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-inline-modifier.png b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-inline-modifier.png index a0df01bc70d..2a1b39ddd78 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-inline-modifier.png and b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-inline-modifier.png differ diff --git a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-simple-list-in-card.png b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-simple-list-in-card.png index c5d06e17ece..da44e123fe9 100644 Binary files a/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-simple-list-in-card.png and b/packages/react-docs/patternfly-docs/generated/patterns/primary-detail/react-demos/primary-detail-simple-list-in-card.png differ diff --git a/packages/react-icons/CHANGELOG.md b/packages/react-icons/CHANGELOG.md index 269ae7e0bab..9be4fe709b7 100644 --- a/packages/react-icons/CHANGELOG.md +++ b/packages/react-icons/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. +## 5.1.1-prerelease.7 (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-icons + ## 5.1.1-prerelease.6 (2023-09-18) **Note:** Version bump only for package @patternfly/react-icons diff --git a/packages/react-icons/package.json b/packages/react-icons/package.json index edac098cefd..4be453eec39 100644 --- a/packages/react-icons/package.json +++ b/packages/react-icons/package.json @@ -1,13 +1,14 @@ { "name": "@patternfly/react-icons", - "version": "5.1.1-prerelease.6", + "version": "6.0.0-alpha.0", "description": "PatternFly 4 Icons as React Components", "main": "dist/js/index.js", "module": "dist/esm/index.js", "types": "dist/esm/index.d.ts", "sideEffects": false, "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", diff --git a/packages/react-integration/CHANGELOG.md b/packages/react-integration/CHANGELOG.md index 196cb1ac9af..4ed89f7ff36 100644 --- a/packages/react-integration/CHANGELOG.md +++ b/packages/react-integration/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.1.1-prerelease.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-integration@5.1.1-prerelease.7...@patternfly/react-integration@5.1.1-prerelease.8) (2023-09-20) + +### Bug Fixes + +- **Modal:** Prevent duplicate ids within Modal ([#9555](https://github.com/patternfly/patternfly-react/issues/9555)) ([2953b78](https://github.com/patternfly/patternfly-react/commit/2953b78290b3baee6cf506303c88dfc5ab9d0329)) + ## 5.1.1-prerelease.7 (2023-09-19) ### Features diff --git a/packages/react-integration/cypress/integration/modal.spec.ts b/packages/react-integration/cypress/integration/modal.spec.ts index d5c08b00dac..e196b3bdc31 100644 --- a/packages/react-integration/cypress/integration/modal.spec.ts +++ b/packages/react-integration/cypress/integration/modal.spec.ts @@ -95,4 +95,12 @@ describe('Modal Test', () => { cy.get('#modal-custom-focus-confirm-button').should('have.focus'); cy.get('#modal-custom-focus-cancel-button').click(); }); + + it("Verify the same id doesn't appear multiple times", () => { + cy.get('#showDescriptionModalButton').click(); + + cy.get('body').find('div#test-modal-id').should('have.length', 1); + + cy.get('.pf-v5-c-modal-box__close > .pf-v5-c-button.pf-m-plain').click(); + }); }); diff --git a/packages/react-integration/demo-app-ts/CHANGELOG.md b/packages/react-integration/demo-app-ts/CHANGELOG.md index 7bac3651053..81f793865aa 100644 --- a/packages/react-integration/demo-app-ts/CHANGELOG.md +++ b/packages/react-integration/demo-app-ts/CHANGELOG.md @@ -3,6 +3,44 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.1.1-prerelease.21](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.20...demo-app-ts@5.1.1-prerelease.21) (2023-09-25) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.20](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.19...demo-app-ts@5.1.1-prerelease.20) (2023-09-25) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.19](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.18...demo-app-ts@5.1.1-prerelease.19) (2023-09-22) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.18](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.17...demo-app-ts@5.1.1-prerelease.18) (2023-09-21) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.17](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.16...demo-app-ts@5.1.1-prerelease.17) (2023-09-21) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.16](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.15...demo-app-ts@5.1.1-prerelease.16) (2023-09-21) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.15](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.14...demo-app-ts@5.1.1-prerelease.15) (2023-09-21) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.14](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.13...demo-app-ts@5.1.1-prerelease.14) (2023-09-21) + +**Note:** Version bump only for package demo-app-ts + +## [5.1.1-prerelease.13](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.12...demo-app-ts@5.1.1-prerelease.13) (2023-09-20) + +### Bug Fixes + +- **Modal:** Prevent duplicate ids within Modal ([#9555](https://github.com/patternfly/patternfly-react/issues/9555)) ([2953b78](https://github.com/patternfly/patternfly-react/commit/2953b78290b3baee6cf506303c88dfc5ab9d0329)) + ## [5.1.1-prerelease.12](https://github.com/patternfly/patternfly-react/compare/demo-app-ts@5.1.1-prerelease.11...demo-app-ts@5.1.1-prerelease.12) (2023-09-19) ### Features diff --git a/packages/react-integration/demo-app-ts/package.json b/packages/react-integration/demo-app-ts/package.json index ee7b4ff2440..2fb4a0476a1 100644 --- a/packages/react-integration/demo-app-ts/package.json +++ b/packages/react-integration/demo-app-ts/package.json @@ -9,7 +9,7 @@ "serve:demo-app": "node scripts/serve" }, "dependencies": { - "@patternfly/react-core": "^5.1.1-prerelease.13", + "@patternfly/react-core": "^6.0.0-alpha.0", "react": "^18", "react-dom": "^18", "react-router": "^5.3.3", diff --git a/packages/react-integration/demo-app-ts/src/components/demos/ModalDemo/ModalDemo.tsx b/packages/react-integration/demo-app-ts/src/components/demos/ModalDemo/ModalDemo.tsx index 24c94181eca..0bd620d3af0 100644 --- a/packages/react-integration/demo-app-ts/src/components/demos/ModalDemo/ModalDemo.tsx +++ b/packages/react-integration/demo-app-ts/src/components/demos/ModalDemo/ModalDemo.tsx @@ -18,8 +18,10 @@ interface ModalDemoState { isCustomFocusModalOpen: boolean; } +// eslint-disable-next-line patternfly-react/no-anonymous-functions export class ModalDemo extends React.Component, ModalDemoState> { static displayName = 'ModalDemo'; + state = { isModalOpen: false, isModalDescriptionOpen: false, @@ -158,6 +160,7 @@ export class ModalDemo extends React.Component, Confirm ]} + id="test-modal-id" > Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo diff --git a/packages/react-integration/package.json b/packages/react-integration/package.json index fb7cd189cd5..aac93eaf253 100644 --- a/packages/react-integration/package.json +++ b/packages/react-integration/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-integration", - "version": "5.1.1-prerelease.7", + "version": "6.0.0-alpha.0", "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 32300931291..686d327be48 100644 --- a/packages/react-styles/CHANGELOG.md +++ b/packages/react-styles/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. +## 5.1.1-prerelease.7 (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-styles + ## 5.1.1-prerelease.6 (2023-09-18) **Note:** Version bump only for package @patternfly/react-styles diff --git a/packages/react-styles/package.json b/packages/react-styles/package.json index 0412f50386f..006bbea97e5 100644 --- a/packages/react-styles/package.json +++ b/packages/react-styles/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-styles", - "version": "5.1.1-prerelease.6", + "version": "6.0.0-alpha.0", "main": "dist/js/index.js", "module": "dist/esm/index.js", "types": "dist/esm/index.d.ts", @@ -11,7 +11,8 @@ "description": "CSS-in-JS class maps and utilities for PatternFly.", "author": "Red Hat", "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "scripts": { "generate": "rimraf css && node scripts/writeClassMaps.js && node scripts/copyStyles.js", diff --git a/packages/react-table/CHANGELOG.md b/packages/react-table/CHANGELOG.md index 31957d0937e..61d8463227a 100644 --- a/packages/react-table/CHANGELOG.md +++ b/packages/react-table/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. +## [5.1.1-prerelease.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.21...@patternfly/react-table@5.1.1-prerelease.22) (2023-09-25) + +**Note:** Version bump only for package @patternfly/react-table + +## [5.1.1-prerelease.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.20...@patternfly/react-table@5.1.1-prerelease.21) (2023-09-25) + +**Note:** Version bump only for package @patternfly/react-table + +## [5.1.1-prerelease.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.19...@patternfly/react-table@5.1.1-prerelease.20) (2023-09-22) + +**Note:** Version bump only for package @patternfly/react-table + +## [5.1.1-prerelease.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.18...@patternfly/react-table@5.1.1-prerelease.19) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-table + +## [5.1.1-prerelease.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.17...@patternfly/react-table@5.1.1-prerelease.18) (2023-09-21) + +### Bug Fixes + +- **popper:** add start/end positioning with RTL support, update default ([#9628](https://github.com/patternfly/patternfly-react/issues/9628)) ([033e6bc](https://github.com/patternfly/patternfly-react/commit/033e6bcca19994f0dc1ead8bcd076096d045bd77)) + +## [5.1.1-prerelease.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.16...@patternfly/react-table@5.1.1-prerelease.17) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-table + +## [5.1.1-prerelease.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.15...@patternfly/react-table@5.1.1-prerelease.16) (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-table + +## [5.1.1-prerelease.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.14...@patternfly/react-table@5.1.1-prerelease.15) (2023-09-21) + +### Bug Fixes + +- **misc:** fixed broken CodeSandbox demos ([#9519](https://github.com/patternfly/patternfly-react/issues/9519)) ([c02dcbc](https://github.com/patternfly/patternfly-react/commit/c02dcbcfe84c6aa5f67e8fa79839913c142541b4)) + +## [5.1.1-prerelease.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.13...@patternfly/react-table@5.1.1-prerelease.14) (2023-09-20) + +**Note:** Version bump only for package @patternfly/react-table + ## [5.1.1-prerelease.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-table@5.1.1-prerelease.12...@patternfly/react-table@5.1.1-prerelease.13) (2023-09-19) **Note:** Version bump only for package @patternfly/react-table diff --git a/packages/react-table/package.json b/packages/react-table/package.json index 29234fce5b7..c35e749dc32 100644 --- a/packages/react-table/package.json +++ b/packages/react-table/package.json @@ -1,6 +1,6 @@ { "name": "@patternfly/react-table", - "version": "5.1.1-prerelease.13", + "version": "6.0.0-alpha.0", "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", @@ -15,7 +15,8 @@ "patternfly:src": "src/", "sideEffects": false, "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", @@ -39,10 +40,10 @@ "subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json" }, "dependencies": { - "@patternfly/react-core": "^5.1.1-prerelease.13", - "@patternfly/react-icons": "^5.1.1-prerelease.6", - "@patternfly/react-styles": "^5.1.1-prerelease.6", - "@patternfly/react-tokens": "^5.1.1-prerelease.6", + "@patternfly/react-core": "^6.0.0-alpha.0", + "@patternfly/react-icons": "^6.0.0-alpha.0", + "@patternfly/react-styles": "^6.0.0-alpha.0", + "@patternfly/react-tokens": "^6.0.0-alpha.0", "lodash": "^4.17.19", "tslib": "^2.5.0" }, diff --git a/packages/react-table/src/components/Table/ActionsColumn.tsx b/packages/react-table/src/components/Table/ActionsColumn.tsx index 369951d4a5d..5d8f01f0b94 100644 --- a/packages/react-table/src/components/Table/ActionsColumn.tsx +++ b/packages/react-table/src/components/Table/ActionsColumn.tsx @@ -39,7 +39,7 @@ const ActionsColumnBase: React.FunctionComponent = ({ extraData, actionsToggle, popperProps = { - position: 'right', + position: 'end', direction: 'down' }, innerRef, diff --git a/packages/react-table/src/docs/demos/Table.md b/packages/react-table/src/docs/demos/Table.md index 59c5d4bf47d..967d23c2f05 100644 --- a/packages/react-table/src/docs/demos/Table.md +++ b/packages/react-table/src/docs/demos/Table.md @@ -50,7 +50,7 @@ import AttentionBellIcon from '@patternfly/react-icons/dist/esm/icons/attention- import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; import BlueprintIcon from '@patternfly/react-icons/dist/esm/icons/blueprint-icon'; import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; -import { rows, columns } from './table-demos/sampleData'; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; ## Demos @@ -109,9 +109,10 @@ import { PaginationVariant, Text, TextContent, + TextVariants, MenuToggle } from '@patternfly/react-core'; -import { Table as TableDeprecated, TableHeader, TableBody } from '@patternfly/react-table/deprecated'; +import { Table as TableDeprecated, TableHeader, TableBody, TableText } from '@patternfly/react-table/deprecated'; import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon'; import CodeBranchIcon from '@patternfly/react-icons/dist/esm/icons/code-branch-icon'; import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; @@ -855,7 +856,7 @@ import { import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon'; import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; import { Table, TableText, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; -import { rows, columns } from ''; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; class FilterTableDemo extends React.Component { constructor(props) { @@ -1457,7 +1458,6 @@ import { Bullseye, Button, Card, - DashboardWrapper, EmptyState, EmptyStateVariant, EmptyStateIcon, @@ -1468,6 +1468,7 @@ import { PageSection } from '@patternfly/react-core'; import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon'; +import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; export const TableEmptyState: React.FunctionComponent = () => ( @@ -1521,7 +1522,6 @@ import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import { Bullseye, Card, - DashboardWrapper, EmptyState, EmptyStateIcon, EmptyStateBody, @@ -1529,6 +1529,7 @@ import { PageSection, Spinner } from '@patternfly/react-core'; +import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; export const LoadingStateDemo: React.FunctionComponent = () => ( @@ -1570,7 +1571,6 @@ import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import { Bullseye, Card, - DashboardWrapper, EmptyState, EmptyStateVariant, EmptyStateIcon, @@ -1579,6 +1579,8 @@ import { PageSection } from '@patternfly/react-core'; import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon'; +import globalDangerColor200 from '@patternfly/react-tokens/dist/esm/global_danger_color_200'; +import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; export const ErrorStateDemo: React.FunctionComponent = () => ( diff --git a/packages/react-table/src/docs/demos/table-demos/BulkSelect.jsx b/packages/react-table/src/docs/demos/table-demos/BulkSelect.jsx index 543b9561295..660b15c3903 100644 --- a/packages/react-table/src/docs/demos/table-demos/BulkSelect.jsx +++ b/packages/react-table/src/docs/demos/table-demos/BulkSelect.jsx @@ -15,8 +15,7 @@ import { } from '@patternfly/react-core'; import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; - -import { rows, columns } from './sampleData'; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; export const BulkSelectTableDemo = () => { const [isBulkSelectDropdownOpen, setIsBulkSelectDropdownOpen] = React.useState(false); diff --git a/packages/react-table/src/docs/demos/table-demos/ColumnManagement.jsx b/packages/react-table/src/docs/demos/table-demos/ColumnManagement.jsx index 315003e8f2e..c6281aae543 100644 --- a/packages/react-table/src/docs/demos/table-demos/ColumnManagement.jsx +++ b/packages/react-table/src/docs/demos/table-demos/ColumnManagement.jsx @@ -2,6 +2,7 @@ import React from 'react'; import { Button, + Card, DataList, DataListCheck, DataListItem, @@ -17,20 +18,19 @@ import { OverflowMenu, OverflowMenuGroup, OverflowMenuItem, - OptionsMenu, - OptionsMenuToggle, + PageSection, Pagination, PaginationVariant, Text, - TextContent + TextContent, + TextVariants } from '@patternfly/react-core'; -import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; +import { Table, TableText, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amount-down-icon'; import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper.js'; import { capitalize } from '@patternfly/react-table/src/components/Table/utils/utils'; - -import { rows, columns } from './sampleData'; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; export const ColumnManagementAction = () => { const defaultColumns = columns; diff --git a/packages/react-table/src/docs/demos/table-demos/Compact.jsx b/packages/react-table/src/docs/demos/table-demos/Compact.jsx index 73ed8fbf45d..d88949489b7 100644 --- a/packages/react-table/src/docs/demos/table-demos/Compact.jsx +++ b/packages/react-table/src/docs/demos/table-demos/Compact.jsx @@ -3,6 +3,7 @@ import React from 'react'; import { Button, Card, + Label, MenuToggle, MenuToggleElement, Pagination, @@ -14,11 +15,10 @@ import { ToolbarGroup, ToolbarItem } from '@patternfly/react-core'; -import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; +import { Table, TableText, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table'; import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; - -import { rows, columns } from './sampleData'; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; export const CompactTable = () => { const [isSelectOpen, setIsSelectOpen] = React.useState(false); diff --git a/packages/react-table/src/docs/demos/table-demos/SortableResponsive.jsx b/packages/react-table/src/docs/demos/table-demos/SortableResponsive.jsx index 67c64f3672a..c83212033d5 100644 --- a/packages/react-table/src/docs/demos/table-demos/SortableResponsive.jsx +++ b/packages/react-table/src/docs/demos/table-demos/SortableResponsive.jsx @@ -7,10 +7,19 @@ import { DropdownList, Flex, FlexItem, + Label, MenuToggle, MenuToggleElement, + OverflowMenu, + OverflowMenuContent, + OverflowMenuControl, + OverflowMenuDropdownItem, + OverflowMenuGroup, + OverflowMenuItem, PageSection, + PageSectionVariants, Pagination, + Select, SelectOption, SelectList, SelectGroup, @@ -31,8 +40,7 @@ import SortAmountDownIcon from '@patternfly/react-icons/dist/esm/icons/sort-amou import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon'; import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; - -import { rows, columns } from './sampleData'; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; export const ComposableTableSortable = () => { const [isKebabDropdownOpen, setIsKebabDropdownOpen] = React.useState(false); @@ -89,7 +97,7 @@ export const ComposableTableSortable = () => { setPerPage(newPerPage); }; - renderPagination = (variant) => ( + const renderPagination = (variant) => ( { const [isSelectOpen, setIsSelectOpen] = React.useState(false); diff --git a/packages/react-table/src/docs/demos/table-demos/StickyHeader.jsx b/packages/react-table/src/docs/demos/table-demos/StickyHeader.jsx index eb4665e9987..53888d8341f 100644 --- a/packages/react-table/src/docs/demos/table-demos/StickyHeader.jsx +++ b/packages/react-table/src/docs/demos/table-demos/StickyHeader.jsx @@ -3,8 +3,7 @@ import React from 'react'; import { Card, Label, PageSection } from '@patternfly/react-core'; import { Table, Thead, Tr, Th, Tbody, Td, TableText } from '@patternfly/react-table'; import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper'; - -import { rows, columns } from '../examples/Data'; +import { rows, columns } from '@patternfly/react-table/src/docs/demos/table-demos/sampleData'; export const StickyHeader: React.FunctionComponent = () => { const renderLabel = (labelText: string) => { diff --git a/packages/react-tokens/CHANGELOG.md b/packages/react-tokens/CHANGELOG.md index c43f6a1aabb..388f2f57d3b 100644 --- a/packages/react-tokens/CHANGELOG.md +++ b/packages/react-tokens/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. +## 5.1.1-prerelease.7 (2023-09-21) + +**Note:** Version bump only for package @patternfly/react-tokens + ## 5.1.1-prerelease.6 (2023-09-18) **Note:** Version bump only for package @patternfly/react-tokens diff --git a/packages/react-tokens/package.json b/packages/react-tokens/package.json index 712308c7194..679b75446d0 100644 --- a/packages/react-tokens/package.json +++ b/packages/react-tokens/package.json @@ -1,13 +1,14 @@ { "name": "@patternfly/react-tokens", - "version": "5.1.1-prerelease.6", + "version": "6.0.0-alpha.0", "description": "This library provides access to the design tokens of PatternFly 4 from JavaScript", "main": "dist/js/index.js", "module": "dist/esm/index.js", "types": "dist/esm/index.d.ts", "sideEffects": false, "publishConfig": { - "access": "public" + "access": "public", + "tag": "alpha" }, "repository": { "type": "git", diff --git a/yarn.lock b/yarn.lock index 53eab5007e3..889287929bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3878,10 +3878,10 @@ puppeteer-cluster "^0.23.0" xmldoc "^1.1.2" -"@patternfly/patternfly@5.1.0-prerelease.28": - version "5.1.0-prerelease.28" - resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-5.1.0-prerelease.28.tgz#8edd60e4b7537e83b8d8fa3cb8d67d8a2112794e" - integrity sha512-Z9PXZ1zV/OrOxeGR5gyAUK4LepU3cyUWLEH6JMp6rxljio1OujM5q54oPJBMAeQLdPyOgeFMLBh4NWu5PvojZg== +"@patternfly/patternfly@5.1.0-prerelease.32": + version "5.1.0-prerelease.32" + resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-5.1.0-prerelease.32.tgz#1a970c9077ce9fabdaa6e1b7fcc6cb035c9b9ad7" + integrity sha512-puUEzfGyNor9iCeEi46E9UoySAAq+V145eE06uU9JF21TxUcA/BgOHTC6abYxDwG5YhdessgI0Eec5s7uafS8Q== "@pkgjs/parseargs@^0.11.0": version "0.11.0"