diff --git a/packages/react-core/global.d.ts b/packages/react-core/global.d.ts
new file mode 100644
index 00000000000..7a1b9def220
--- /dev/null
+++ b/packages/react-core/global.d.ts
@@ -0,0 +1,93 @@
+import * as preact from 'preact';
+
+// also modified
+// node_modules/preact/src/index.d.ts
+/*
+export interface VNode
{
+ type: ComponentType
| string;
+ props: P & any;
+export function cloneElement(
+ vnode: ComponentChild,
+ props?: any,
+ ...children: ComponentChildren[]
+): VNode;
+*/
+
+// node_modules/preact/compat/src/index.d.ts
+/*
+export function createPortal(
+ vnode: preact.ComponentChild,
+ container: Element | DocumentFragment
+ ): preact.VNode;
+*/
+
+declare module 'react' {
+// // https://github.com/preactjs/preact/issues/4114#issuecomment-1690930689
+ interface HTMLProps extends preact.JSX.HTMLAttributes {
+ icon?: string | undefined | preact.SignalLike | preact.ComponentChild;
+ role?: preact.JSX.AriaRole | undefined | preact.SignalLike;
+ };
+ type AriaRole = preact.JSX.AriaRole;
+ type JSXElementConstructor =
+ | ((props: P) => ReactElement | null)
+ | (new (props: P) => Component);
+ interface ButtonHTMLAttributes extends preact.JSX.HTMLAttributes {};
+ interface ImgHTMLAttributes extends preact.JSX.HTMLAttributes {};
+ interface InputHTMLAttributes extends preact.JSX.HTMLAttributes {};
+ interface OlHTMLAttributes extends HTMLAttributes {
+ reversed?: boolean | undefined;
+ start?: number | undefined;
+ type?: '1' | 'a' | 'A' | 'i' | 'I' | undefined;
+ };
+ interface LiHTMLAttributes extends HTMLAttributes {
+ value?: string | ReadonlyArray | number | undefined;
+ }
+ type ReactText = string | number;
+ type ComponentType = preact.ComponentType
;
+ type ElementType
=
+ {
+ [K in keyof preact.JSX.IntrinsicElements]: P extends preact.JSX.IntrinsicElements[K] ? K : never
+ }[keyof preact.JSX.IntrinsicElements] |
+ ComponentType
;
+ // interface VNode
extends preact.VNode
{
+ // props: P & {
+ // children: preact.ComponentChildren;
+ // className: string;
+ // };
+ // }
+ type LegacyRef = string | Ref;
+ // interface ReactElement extends preact.VNode
{};
+ interface ReactElement
= string | JSXElementConstructor> {
+ type: T;
+ props: P;
+ key: Key | null;
+ }
+ type MouseEvent = any;
+ type KeyboardEvent = any;
+ type DragEvent = any;
+ type FormEvent = any;
+ type TouchEvent = any;
+ type FocusEvent = any;
+ type SyntheticEvent = any;
+ type TransitionEvent = any;
+ type ClipboardEvent = any;
+ type TargetedEvent<
+ Target extends EventTarget = EventTarget,
+ TypedEvent extends Event = Event
+ > = preact.JSX.TargetedEvent & {
+ nativeEvent: any;
+ }
+ type MouseEventHandler = EventHandler>;
+ type TargetedTransitionEvent =
+ TargetedEvent & {
+ nativeEvent: any;
+ };
+ type TransitionEventHandler = EventHandler>;
+ type SetStateAction = S | ((prevState: S) => S);
+ type HTMLAttributeAnchorTarget =
+ | '_self'
+ | '_blank'
+ | '_parent'
+ | '_top'
+ | (string & {});
+}
diff --git a/packages/react-core/package.json b/packages/react-core/package.json
index 56dbe10bfa6..390a8172bd5 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.2",
+ "version": "1.0.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",
@@ -38,6 +38,8 @@
},
"homepage": "https://github.com/patternfly/patternfly-react#readme",
"scripts": {
+ "build:tsc": "npx tsc --project tsconfig.json",
+ "build:rollup": "rm -rf dist && npx rollup -c rollup-esm.config.js",
"build:umd": "rollup -c --environment IS_PRODUCTION",
"build:single:packages": "node ../../scripts/build-single-packages.js --config single-packages.config.json",
"clean": "rimraf dist components layouts helpers next deprecated node_modules",
@@ -54,16 +56,21 @@
},
"devDependencies": {
"@patternfly/patternfly": "5.1.0-prerelease.13",
+ "@rollup/plugin-alias": "^5.0.0",
"@rollup/plugin-commonjs": "^25.0.0",
"@rollup/plugin-node-resolve": "^15.0.2",
"@rollup/plugin-replace": "^5.0.2",
"css": "^2.2.3",
"fs-extra": "^11.1.1",
"glob": "^7.1.2",
+ "preact": "^10.17.1",
+ "preact-compat": "^3.19.0",
"rimraf": "^3.0.2",
"rollup": "^3.21.5",
"rollup-plugin-scss": "^4.0.0",
"rollup-plugin-terser": "^7.0.2",
+ "rollup-plugin-typescript2": "^0.35.0",
+ "sass": "^1.66.1",
"typescript": "^4.7.4"
},
"peerDependencies": {
diff --git a/packages/react-core/rollup-esm.config.js b/packages/react-core/rollup-esm.config.js
new file mode 100644
index 00000000000..9ddedd9dd21
--- /dev/null
+++ b/packages/react-core/rollup-esm.config.js
@@ -0,0 +1,92 @@
+const alias = require('@rollup/plugin-alias');
+const { nodeResolve } = require('@rollup/plugin-node-resolve');
+const typescript = require('rollup-plugin-typescript2');
+const scss = require('rollup-plugin-scss');
+
+const packageJson = require('./package.json');
+
+module.exports = {
+ // input: 'dist/esm/index.js',
+ input: 'src/index.ts',
+ output: [
+ {
+ file: packageJson.module,
+ format: 'esm', // ES Modules
+ sourcemap: true
+ }
+ ],
+ external: ['react', 'react-dom'],
+ plugins: [
+ alias({
+ entries: [
+ { find: 'react', replacement: 'preact/compat' },
+ { find: 'react-dom/test-utils', replacement: 'preact/test-utils' },
+ { find: 'react-dom', replacement: 'preact/compat' },
+ { find: 'react/jsx-runtime', replacement: 'preact/jsx-runtime' }
+ ]
+ }),
+ nodeResolve(),
+ typescript({
+ useTsconfigDeclarationDir: false
+ }),
+ scss()
+ ]
+};
+
+// const { nodeResolve } = require('@rollup/plugin-node-resolve');
+// const commonjs = require('@rollup/plugin-commonjs');
+// const scss = require('rollup-plugin-scss');
+// const replace = require('@rollup/plugin-replace');
+// const { terser } = require('rollup-plugin-terser');
+
+// const isProduction = process.env.IS_PRODUCTION;
+// let exitCode = 0;
+
+// function circularFailPlugin() {
+// return {
+// name: 'circluarFailPlugin',
+// buildEnd() {
+// if (exitCode !== 0) {
+// process.exit(exitCode);
+// }
+// }
+// };
+// }
+
+// module.exports = ({ packageName, name }) => ({
+// input: 'dist/esm/index.js',
+// output: {
+// file: `dist/umd/${packageName}${isProduction ? '.min' : ''}.js`,
+// format: 'umd',
+// inlineDynamicImports: true,
+// name,
+// globals: {
+// react: 'React',
+// 'react-dom': 'ReactDOM'
+// }
+// },
+// external: ['react', 'react-dom'],
+// plugins: [
+// replace({
+// 'process.env.NODE_ENV': `'${isProduction ? 'production' : 'development'}'`
+// }),
+// nodeResolve(),
+// commonjs(),
+// scss(),
+// isProduction && terser(),
+// circularFailPlugin()
+// ],
+// onwarn(warning) {
+// if (warning.code === 'CIRCULAR_DEPENDENCY') {
+// const split = warning.message.split(':');
+// if (warning.message.includes('d3-interpolate')) {
+// // eslint-disable-next-line no-console
+// console.error(`\x1b[33m(!) ${split[0]}:\x1b[0m${split[1]}`);
+// } else {
+// // eslint-disable-next-line no-console
+// console.error(`\x1b[31m(!) ${split[0]}:\x1b[0m${split[1]}`);
+// exitCode = 1;
+// }
+// }
+// }
+// });
diff --git a/packages/react-core/src/components/Avatar/Avatar.tsx b/packages/react-core/src/components/Avatar/Avatar.tsx
index 874eb13d42a..d9cb6b7e82b 100644
--- a/packages/react-core/src/components/Avatar/Avatar.tsx
+++ b/packages/react-core/src/components/Avatar/Avatar.tsx
@@ -3,7 +3,7 @@ import styles from '@patternfly/react-styles/css/components/Avatar/avatar';
import { css } from '@patternfly/react-styles';
export interface AvatarProps
- extends React.DetailedHTMLProps, HTMLImageElement> {
+ extends Omit, HTMLImageElement>, 'size'> {
/** Additional classes added to the Avatar. */
className?: string;
/** Attribute that specifies the URL of the image for the Avatar. */
diff --git a/packages/react-core/src/components/BackToTop/BackToTop.tsx b/packages/react-core/src/components/BackToTop/BackToTop.tsx
index d47c2899d98..a27b2a34e21 100644
--- a/packages/react-core/src/components/BackToTop/BackToTop.tsx
+++ b/packages/react-core/src/components/BackToTop/BackToTop.tsx
@@ -11,7 +11,7 @@ interface BackToTopProps extends React.DetailedHTMLProps;
+ innerRef?: React.ForwardedRef;
/** Selector for the scrollable element to spy on. Not passing a selector defaults to spying on window scroll events. */
scrollableSelector?: string;
/** Flag to always show back to top button, defaults to false. */
@@ -89,7 +89,7 @@ const BackToTopBase: React.FunctionComponent = ({
);
};
-export const BackToTop = React.forwardRef((props: BackToTopProps, ref: React.Ref) => (
+export const BackToTop = React.forwardRef((props: BackToTopProps, ref: React.ForwardedRef) => (
));
BackToTop.displayName = 'BackToTop';
diff --git a/packages/react-core/src/components/Brand/Brand.tsx b/packages/react-core/src/components/Brand/Brand.tsx
index 03ed8a9bcea..de170ebdb32 100644
--- a/packages/react-core/src/components/Brand/Brand.tsx
+++ b/packages/react-core/src/components/Brand/Brand.tsx
@@ -3,7 +3,7 @@ import { css } from '@patternfly/react-styles';
import styles from '@patternfly/react-styles/css/components/Brand/brand';
import { setBreakpointCssVars } from '../../helpers';
export interface BrandProps
- extends React.DetailedHTMLProps, HTMLImageElement> {
+ extends React.HTMLProps {
/** Transforms the Brand into a element from an
element. Container for child elements. */
children?: React.ReactNode;
/** Additional classes added to the either type of Brand. */
@@ -61,17 +61,17 @@ export const Brand: React.FunctionComponent = ({
children !== undefined ? (
}
>
{children}
) : (
}
className={css(styles.brand, className)}
- style={{ ...style, ...responsiveStyles }}
+ style={{ ...(style as any), ...responsiveStyles }}
src={src}
alt={alt}
/>
diff --git a/packages/react-core/src/components/Button/Button.tsx b/packages/react-core/src/components/Button/Button.tsx
index 5b05d137f44..663d0711a96 100644
--- a/packages/react-core/src/components/Button/Button.tsx
+++ b/packages/react-core/src/components/Button/Button.tsx
@@ -37,6 +37,8 @@ export interface BadgeCountObject {
className?: string;
}
+export type Type = 'button' | 'submit' | 'reset';
+
export interface ButtonProps extends Omit, 'ref' | 'size'>, OUIAProps {
/** Content rendered inside the button */
children?: React.ReactNode;
@@ -67,7 +69,7 @@ export interface ButtonProps extends Omit, 'r
/** Adds styling which affects the size of the button */
size?: 'default' | 'sm' | 'lg';
/** Sets button type */
- type?: 'button' | 'submit' | 'reset';
+ type?: Type;
/** Adds button variant styles */
variant?: 'primary' | 'secondary' | 'tertiary' | 'danger' | 'warning' | 'link' | 'plain' | 'control';
/** Sets position of the link icon */
@@ -81,7 +83,7 @@ export interface ButtonProps extends Omit, 'r
/** Adds danger styling to secondary or link button variants */
isDanger?: boolean;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** Adds count number to button */
countOptions?: BadgeCountObject;
/** Value to overwrite the randomly generated data-ouia-component-id.*/
@@ -199,7 +201,7 @@ const ButtonBase: React.FunctionComponent = ({
);
};
-export const Button = React.forwardRef((props: ButtonProps, ref: React.Ref) => (
+export const Button = React.forwardRef((props: ButtonProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/Checkbox/Checkbox.tsx b/packages/react-core/src/components/Checkbox/Checkbox.tsx
index 699bbe3d3ff..c1bed1498ef 100644
--- a/packages/react-core/src/components/Checkbox/Checkbox.tsx
+++ b/packages/react-core/src/components/Checkbox/Checkbox.tsx
@@ -103,8 +103,8 @@ class Checkbox extends React.Component {
if (onChange !== defaultOnChange) {
checkedProps.checked = isChecked;
}
- if ([false, true].includes(defaultChecked)) {
- checkedProps.defaultChecked = defaultChecked;
+ if ([false, true].includes(defaultChecked as boolean)) {
+ checkedProps.defaultChecked = defaultChecked as boolean;
}
checkedProps.checked = checkedProps.checked === null ? false : checkedProps.checked;
diff --git a/packages/react-core/src/components/Chip/Chip.tsx b/packages/react-core/src/components/Chip/Chip.tsx
index af7b7369f9d..a055bc09fa0 100644
--- a/packages/react-core/src/components/Chip/Chip.tsx
+++ b/packages/react-core/src/components/Chip/Chip.tsx
@@ -110,7 +110,7 @@ class Chip extends React.Component {
onClick={onClick}
{...(textMaxWidth && {
style: this.setChipStyle(),
- ...style
+ ...(style as any)
})}
className={css(styles.chip, styles.modifiers.overflow, className)}
{...(component === 'button' ? { type: 'button' } : {})}
@@ -192,7 +192,7 @@ class Chip extends React.Component {
const { isOverflowChip } = this.props;
return (
- {(randomId) => (isOverflowChip ? this.renderOverflowChip() : this.renderChip(this.props.id || randomId))}
+ {(randomId) => (isOverflowChip ? this.renderOverflowChip() : this.renderChip((this.props.id || randomId) as string))}
);
}
diff --git a/packages/react-core/src/components/Chip/ChipGroup.tsx b/packages/react-core/src/components/Chip/ChipGroup.tsx
index 4c60657be1c..c5554760752 100644
--- a/packages/react-core/src/components/Chip/ChipGroup.tsx
+++ b/packages/react-core/src/components/Chip/ChipGroup.tsx
@@ -206,7 +206,7 @@ class ChipGroup extends React.Component {
};
return numChildren === 0 ? null : (
- {(randomId) => renderChipGroup(this.props.id || randomId)}
+ {(randomId) => renderChipGroup((this.props.id || randomId) as string)}
);
}
}
diff --git a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyAction.tsx b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyAction.tsx
index 231c1713052..102f9f83bf6 100644
--- a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyAction.tsx
+++ b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyAction.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import styles from '@patternfly/react-styles/css/components/ClipboardCopy/clipboard-copy';
import { css } from '@patternfly/react-styles';
-export interface ClipboardCopyActionProps extends React.HTMLProps {
+export interface ClipboardCopyActionProps extends React.HTMLProps {
/** Content rendered inside the clipboard copy action. */
children?: React.ReactNode;
/** Additional classes added to the clipboard copy action. */
diff --git a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyButton.tsx b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyButton.tsx
index e0add211d15..b17b7e5d528 100644
--- a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyButton.tsx
+++ b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyButton.tsx
@@ -4,7 +4,7 @@ import { Button } from '../Button';
import { Tooltip, TooltipPosition } from '../Tooltip';
export interface ClipboardCopyButtonProps
- extends Omit, HTMLButtonElement>, 'ref'> {
+ extends Omit, 'ref' | 'type' | 'size' | 'tabIndex'> {
/** Callback for the copy when the button is clicked */
onClick: (event: React.MouseEvent) => void;
/** Content of the copy button */
diff --git a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx
index efed5f79258..858e82d4ece 100644
--- a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx
+++ b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx
@@ -30,7 +30,7 @@ class ClipboardCopyExpanded extends React.Component
return (
onChange(e, e.target.innerText)}
contentEditable={!isReadOnly}
diff --git a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyToggle.tsx b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyToggle.tsx
index 4e5ef1af604..2eaa3239ddc 100644
--- a/packages/react-core/src/components/ClipboardCopy/ClipboardCopyToggle.tsx
+++ b/packages/react-core/src/components/ClipboardCopy/ClipboardCopyToggle.tsx
@@ -4,7 +4,7 @@ import AngleDownIcon from '@patternfly/react-icons/dist/esm/icons/angle-down-ico
import { Button } from '../Button';
export interface ClipboardCopyToggleProps
- extends Omit
, HTMLButtonElement>, 'ref'> {
+ extends Omit, 'ref' | 'type' | 'size' | 'tabIndex' | 'aria-label'> {
onClick: (event: React.MouseEvent) => void;
id: string;
textId: string;
diff --git a/packages/react-core/src/components/DatePicker/DatePicker.tsx b/packages/react-core/src/components/DatePicker/DatePicker.tsx
index b2f10575441..67e554f81a8 100644
--- a/packages/react-core/src/components/DatePicker/DatePicker.tsx
+++ b/packages/react-core/src/components/DatePicker/DatePicker.tsx
@@ -121,7 +121,7 @@ const DatePickerBase = (
inputProps = {},
...props
}: DatePickerProps,
- ref: React.Ref
+ ref: React.ForwardedRef
) => {
const [value, setValue] = React.useState(valueProp);
const [valueDate, setValueDate] = React.useState(dateParse(value));
@@ -131,7 +131,7 @@ const DatePickerBase = (
const [pristine, setPristine] = React.useState(true);
const [textInputFocused, setTextInputFocused] = React.useState(false);
const widthChars = React.useMemo(() => Math.max(dateFormat(new Date()).length, placeholder.length), [dateFormat]);
- const style = { '--pf-v5-c-date-picker__input--c-form-control--width-chars': widthChars, ...styleProps };
+ const style = { '--pf-v5-c-date-picker__input--c-form-control--width-chars': widthChars, ...(styleProps as any) };
const buttonRef = React.useRef();
const datePickerWrapperRef = React.useRef();
const triggerRef = React.useRef();
diff --git a/packages/react-core/src/components/DescriptionList/DescriptionList.tsx b/packages/react-core/src/components/DescriptionList/DescriptionList.tsx
index 4957d6b8884..108320d4d84 100644
--- a/packages/react-core/src/components/DescriptionList/DescriptionList.tsx
+++ b/packages/react-core/src/components/DescriptionList/DescriptionList.tsx
@@ -101,19 +101,19 @@ export const DescriptionList: React.FunctionComponent = ({
}: DescriptionListProps) => {
if (isAutoFit && autoFitMinModifier) {
style = {
- ...style,
+ ...(style as any),
...setBreakpointModifiers('--pf-v5-c-description-list--GridTemplateColumns--min', autoFitMinModifier)
};
}
if (termWidth) {
style = {
- ...style,
+ ...(style as any),
...{ '--pf-v5-c-description-list__term--width': termWidth }
};
}
if (isHorizontal && horizontalTermWidthModifier) {
style = {
- ...style,
+ ...(style as any),
...setBreakpointModifiers('--pf-v5-c-description-list--m-horizontal__term--width', horizontalTermWidthModifier)
};
}
diff --git a/packages/react-core/src/components/Divider/Divider.tsx b/packages/react-core/src/components/Divider/Divider.tsx
index 35ccaba4555..19914e69e89 100644
--- a/packages/react-core/src/components/Divider/Divider.tsx
+++ b/packages/react-core/src/components/Divider/Divider.tsx
@@ -10,8 +10,6 @@ export enum DividerVariant {
}
export interface DividerProps extends React.HTMLProps {
- /** Additional classes added to the divider */
- className?: string;
/** The component type to use */
component?: 'hr' | 'li' | 'div';
/** Insets at various breakpoints. */
diff --git a/packages/react-core/src/components/DragDrop/Draggable.tsx b/packages/react-core/src/components/DragDrop/Draggable.tsx
index e76b802946e..9cb5260f8fd 100644
--- a/packages/react-core/src/components/DragDrop/Draggable.tsx
+++ b/packages/react-core/src/components/DragDrop/Draggable.tsx
@@ -138,11 +138,11 @@ export const Draggable: React.FunctionComponent = ({
} else if (!consumerReordered) {
// Animate item returning to where it started
setStyle({
- ...style,
+ ...(style as any),
transition: 'transform 0.5s cubic-bezier(0.2, 1, 0.1, 1) 0s',
transform: '',
- background: styleProp.background,
- boxShadow: styleProp.boxShadow
+ background: (styleProp as any).background,
+ boxShadow: (styleProp as any).boxShadow
});
}
};
@@ -196,7 +196,7 @@ export const Draggable: React.FunctionComponent = ({
// Move hovering draggable and style it based on cursor position
setStyle({
- ...style,
+ ...(style as any),
transform: `translate(${ev.pageX - startX}px, ${ev.pageY - startY}px)`
});
setIsValidDrag(Boolean(hoveringDroppable));
@@ -270,7 +270,7 @@ export const Draggable: React.FunctionComponent = ({
// Set initial style so future style mods take effect
style = {
- ...style,
+ ...(style as any),
top: rect.y,
left: rect.x,
width: rect.width,
@@ -312,7 +312,7 @@ export const Draggable: React.FunctionComponent = ({
{/* Leave behind blank spot per-design */}
{isDragging && (
-
+
{children}
)}
diff --git a/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx b/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx
index d929c19d396..bd74851d213 100644
--- a/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx
+++ b/packages/react-core/src/components/Drawer/DrawerPanelContent.tsx
@@ -5,7 +5,7 @@ import { DrawerColorVariant, DrawerContext } from './Drawer';
import { formatBreakpointMods } from '../../helpers/util';
import { GenerateId } from '../../helpers/GenerateId/GenerateId';
-export interface DrawerPanelContentProps extends React.HTMLProps
{
+export interface DrawerPanelContentProps extends Omit, 'onResize'> {
/** Additional classes added to the drawer. */
className?: string;
/** ID of the drawer panel */
@@ -261,7 +261,7 @@ export const DrawerPanelContent: React.FunctionComponent {
+ onTransitionEnd={(ev: React.TransitionEventHandler) => {
if ((ev.target as HTMLElement) === panel.current) {
if (!hidden && ev.nativeEvent.propertyName === 'transform') {
onExpand(ev);
diff --git a/packages/react-core/src/components/Dropdown/Dropdown.tsx b/packages/react-core/src/components/Dropdown/Dropdown.tsx
index b94c301f017..4481113c66e 100644
--- a/packages/react-core/src/components/Dropdown/Dropdown.tsx
+++ b/packages/react-core/src/components/Dropdown/Dropdown.tsx
@@ -52,7 +52,7 @@ export interface DropdownProps extends MenuProps, OUIAProps {
/** Indicates if the menu should be scrollable. */
isScrollable?: boolean;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** Value to overwrite the randomly generated data-ouia-component-id.*/
ouiaId?: number | string;
/** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
@@ -163,7 +163,7 @@ const DropdownBase: React.FunctionComponent = ({
);
};
-export const Dropdown = React.forwardRef((props: DropdownProps, ref: React.Ref) => (
+export const Dropdown = React.forwardRef((props: DropdownProps, ref: React.ForwardedRef) => (
));
Dropdown.displayName = 'Dropdown';
diff --git a/packages/react-core/src/components/Dropdown/DropdownItem.tsx b/packages/react-core/src/components/Dropdown/DropdownItem.tsx
index d6cf6e127c1..cfdebdc8014 100644
--- a/packages/react-core/src/components/Dropdown/DropdownItem.tsx
+++ b/packages/react-core/src/components/Dropdown/DropdownItem.tsx
@@ -13,7 +13,7 @@ export interface DropdownItemProps extends Omit, OUIAProps
/** Classes applied to root element of dropdown item */
className?: string;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** Description of the dropdown item */
description?: React.ReactNode;
/** Render item as disabled option */
@@ -66,7 +66,7 @@ const DropdownItemBase: React.FunctionComponent = ({
};
export const DropdownItem = React.forwardRef(
- (props: DropdownItemProps, ref: React.Ref) => (
+ (props: DropdownItemProps, ref: React.ForwardedRef) => (
)
);
diff --git a/packages/react-core/src/components/DualListSelector/DualListSelectorControl.tsx b/packages/react-core/src/components/DualListSelector/DualListSelectorControl.tsx
index 39bfe859e39..c248df7ee4b 100644
--- a/packages/react-core/src/components/DualListSelector/DualListSelectorControl.tsx
+++ b/packages/react-core/src/components/DualListSelector/DualListSelectorControl.tsx
@@ -11,7 +11,7 @@ export interface DualListSelectorControlProps extends Omit;
+ innerRef?: React.ForwardedRef;
/** Flag indicating the control is disabled. */
isDisabled?: boolean;
/** Additional classes applied to the dual list selector control. */
@@ -58,7 +58,7 @@ export const DualListSelectorControlBase: React.FunctionComponent) => (
+export const DualListSelectorControl = React.forwardRef((props: DualListSelectorControlProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/DualListSelector/DualListSelectorControlsWrapper.tsx b/packages/react-core/src/components/DualListSelector/DualListSelectorControlsWrapper.tsx
index 835879f250a..13cc481ddd2 100644
--- a/packages/react-core/src/components/DualListSelector/DualListSelectorControlsWrapper.tsx
+++ b/packages/react-core/src/components/DualListSelector/DualListSelectorControlsWrapper.tsx
@@ -11,7 +11,7 @@ export interface DualListSelectorControlsWrapperProps extends React.HTMLProps;
+ innerRef?: React.Ref;
/** Accessible label for the dual list selector controls wrapper. */
'aria-label'?: string;
}
@@ -78,7 +78,7 @@ export const DualListSelectorControlsWrapperBase: React.FunctionComponent) => (
+ (props: DualListSelectorControlsWrapperProps, ref: React.ForwardedRef) => (
} role="group" {...props} />
)
);
diff --git a/packages/react-core/src/components/DualListSelector/DualListSelectorListItem.tsx b/packages/react-core/src/components/DualListSelector/DualListSelectorListItem.tsx
index e2c3e8433a6..f6406d395e6 100644
--- a/packages/react-core/src/components/DualListSelector/DualListSelectorListItem.tsx
+++ b/packages/react-core/src/components/DualListSelector/DualListSelectorListItem.tsx
@@ -24,7 +24,7 @@ export interface DualListSelectorListItemProps extends React.HTMLProps;
+ innerRef?: React.Ref;
/** Flag indicating this item is draggable for reordring */
isDraggable?: boolean;
/** Accessible label for the draggable button on draggable list items */
@@ -98,7 +98,7 @@ export const DualListSelectorListItemBase: React.FunctionComponent) => (
+ (props: DualListSelectorListItemProps, ref: React.ForwardedRef) => (
} {...props} />
)
);
diff --git a/packages/react-core/src/components/DualListSelector/DualListSelectorListWrapper.tsx b/packages/react-core/src/components/DualListSelector/DualListSelectorListWrapper.tsx
index 642b53b0ed0..7dcf163e9c2 100644
--- a/packages/react-core/src/components/DualListSelector/DualListSelectorListWrapper.tsx
+++ b/packages/react-core/src/components/DualListSelector/DualListSelectorListWrapper.tsx
@@ -15,7 +15,7 @@ export interface DualListSelectorListWrapperProps extends React.HTMLProps;
+ innerRef?: React.Ref;
/** @hide Options to list in the pane. */
options?: React.ReactNode[];
/** @hide Options currently selected in the pane. */
@@ -120,7 +120,7 @@ export const DualListSelectorListWrapperBase: React.FunctionComponent) => (
+ (props: DualListSelectorListWrapperProps, ref: React.ForwardedRef) => (
} {...props} />
)
);
diff --git a/packages/react-core/src/components/ExpandableSection/ExpandableSection.tsx b/packages/react-core/src/components/ExpandableSection/ExpandableSection.tsx
index e43ffd85908..55da755c0d6 100644
--- a/packages/react-core/src/components/ExpandableSection/ExpandableSection.tsx
+++ b/packages/react-core/src/components/ExpandableSection/ExpandableSection.tsx
@@ -14,7 +14,7 @@ export enum ExpandableSectionVariant {
/** The main expandable section component. */
-export interface ExpandableSectionProps extends React.HTMLProps {
+export interface ExpandableSectionProps extends Omit, 'onToggle'> {
/** Content rendered inside the expandable section. */
children?: React.ReactNode;
/** Additional classes added to the expandable section. */
diff --git a/packages/react-core/src/components/ExpandableSection/ExpandableSectionToggle.tsx b/packages/react-core/src/components/ExpandableSection/ExpandableSectionToggle.tsx
index ebb416aca45..37e907c2c0b 100644
--- a/packages/react-core/src/components/ExpandableSection/ExpandableSectionToggle.tsx
+++ b/packages/react-core/src/components/ExpandableSection/ExpandableSectionToggle.tsx
@@ -7,7 +7,7 @@ import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-i
* property passed in. Allows for more custom control over the expandable section's toggle.
*/
-export interface ExpandableSectionToggleProps extends React.HTMLProps {
+export interface ExpandableSectionToggleProps extends Omit, 'onToggle'> {
/** Content rendered inside the expandable toggle. */
children?: React.ReactNode;
/** Additional classes added to the expandable toggle. */
diff --git a/packages/react-core/src/components/FileUpload/FileUpload.tsx b/packages/react-core/src/components/FileUpload/FileUpload.tsx
index 47afa1a3d04..840ae7258be 100644
--- a/packages/react-core/src/components/FileUpload/FileUpload.tsx
+++ b/packages/react-core/src/components/FileUpload/FileUpload.tsx
@@ -145,7 +145,7 @@ export const FileUpload: React.FunctionComponent = ({
...oldInputProps,
onChange: async (e: React.ChangeEvent) => {
oldInputProps.onChange?.(e);
- const files = await fromEvent(e.nativeEvent);
+ const files = await fromEvent((e as any).nativeEvent);
if (files.length === 1) {
onFileInputChange?.(e, files[0] as File);
}
diff --git a/packages/react-core/src/components/Form/Form.tsx b/packages/react-core/src/components/Form/Form.tsx
index 0043c5c89b9..a66f740bb94 100644
--- a/packages/react-core/src/components/Form/Form.tsx
+++ b/packages/react-core/src/components/Form/Form.tsx
@@ -14,7 +14,7 @@ export interface FormProps extends Omit, 'ref'>
/** Sets a custom max-width for the form. */
maxWidth?: string;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
}
const FormBase: React.FunctionComponent = ({
@@ -31,7 +31,7 @@ const FormBase: React.FunctionComponent = ({
{...(maxWidth && {
style: {
'--pf-v5-c-form--m-limit-width--MaxWidth': maxWidth,
- ...props.style
+ ...(props as any).style
} as React.CSSProperties
})}
{...props}
@@ -47,6 +47,6 @@ const FormBase: React.FunctionComponent = ({
);
-export const Form = React.forwardRef((props: FormProps, ref: React.Ref) => );
+export const Form = React.forwardRef((props: FormProps, ref: React.ForwardedRef) => );
Form.displayName = 'Form';
diff --git a/packages/react-core/src/components/Form/FormFieldGroup.tsx b/packages/react-core/src/components/Form/FormFieldGroup.tsx
index aeaef921c06..886aafd40a1 100644
--- a/packages/react-core/src/components/Form/FormFieldGroup.tsx
+++ b/packages/react-core/src/components/Form/FormFieldGroup.tsx
@@ -1,7 +1,7 @@
import * as React from 'react';
import { InternalFormFieldGroup } from './InternalFormFieldGroup';
-export interface FormFieldGroupProps extends Omit, 'label'> {
+export interface FormFieldGroupProps extends Omit, 'label' | 'onToggle'> {
/** Anything that can be rendered as form field group content. */
children?: React.ReactNode;
/** Additional classes added to the form field group. */
diff --git a/packages/react-core/src/components/Form/FormFieldGroupExpandable.tsx b/packages/react-core/src/components/Form/FormFieldGroupExpandable.tsx
index 995e1d06e87..2fb8a07e8e9 100644
--- a/packages/react-core/src/components/Form/FormFieldGroupExpandable.tsx
+++ b/packages/react-core/src/components/Form/FormFieldGroupExpandable.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { useState } from 'react';
import { InternalFormFieldGroup } from './InternalFormFieldGroup';
-export interface FormFieldGroupExpandableProps extends React.HTMLProps {
+export interface FormFieldGroupExpandableProps extends Omit, 'onToggle'> {
/** Anything that can be rendered as form field group content. */
children?: React.ReactNode;
/** Additional classes added to the form field group. */
diff --git a/packages/react-core/src/components/Form/FormGroup.tsx b/packages/react-core/src/components/Form/FormGroup.tsx
index ddd9a3e5723..99a8ea15c28 100644
--- a/packages/react-core/src/components/Form/FormGroup.tsx
+++ b/packages/react-core/src/components/Form/FormGroup.tsx
@@ -30,7 +30,7 @@ export interface FormGroupProps extends Omit, 'l
/** Sets the role of the form group. Pass in "radiogroup" when the form group contains multiple
* radio inputs, or pass in "group" when the form group contains multiple of any other input type.
*/
- role?: string;
+ role?: React.AriaRole;
}
export const FormGroup: React.FunctionComponent = ({
diff --git a/packages/react-core/src/components/Form/FormSection.tsx b/packages/react-core/src/components/Form/FormSection.tsx
index ac2fe359a65..7ccd5552918 100644
--- a/packages/react-core/src/components/Form/FormSection.tsx
+++ b/packages/react-core/src/components/Form/FormSection.tsx
@@ -3,7 +3,7 @@ import styles from '@patternfly/react-styles/css/components/Form/form';
import { css } from '@patternfly/react-styles';
import { GenerateId } from '../../helpers/GenerateId/GenerateId';
-export interface FormSectionProps extends Omit, 'title'> {
+export interface FormSectionProps extends Omit, 'title'> {
/** Content rendered inside the section */
children?: React.ReactNode;
/** Additional classes added to the section */
diff --git a/packages/react-core/src/components/Form/InternalFormFieldGroup.tsx b/packages/react-core/src/components/Form/InternalFormFieldGroup.tsx
index 36a412f93ea..1f469b0e8ec 100644
--- a/packages/react-core/src/components/Form/InternalFormFieldGroup.tsx
+++ b/packages/react-core/src/components/Form/InternalFormFieldGroup.tsx
@@ -4,7 +4,7 @@ import { css } from '@patternfly/react-styles';
import { FormFieldGroupToggle } from './FormFieldGroupToggle';
import { GenerateId } from '../../helpers';
-export interface InternalFormFieldGroupProps extends Omit, 'label'> {
+export interface InternalFormFieldGroupProps extends Omit, 'label' | 'onToggle'> {
/** Anything that can be rendered as form field group content. */
children?: React.ReactNode;
/** Additional classes added to the form field group. */
diff --git a/packages/react-core/src/components/FormControl/FormControlIcon.tsx b/packages/react-core/src/components/FormControl/FormControlIcon.tsx
index 5275ab01d53..d477bb47a74 100644
--- a/packages/react-core/src/components/FormControl/FormControlIcon.tsx
+++ b/packages/react-core/src/components/FormControl/FormControlIcon.tsx
@@ -11,7 +11,7 @@ export const statusIcons = {
warning: ExclamationTriangleIcon
};
-export interface FormControlIconProps extends React.HTMLProps {
+export interface FormControlIconProps extends React.HTMLProps {
/** Additional class names added to the text input icon wrapper. */
className?: string;
/** A custom icon to render instead of a status icon. */
diff --git a/packages/react-core/src/components/InputGroup/InputGroup.tsx b/packages/react-core/src/components/InputGroup/InputGroup.tsx
index 55cc6d90c29..57d9f7b6e2f 100644
--- a/packages/react-core/src/components/InputGroup/InputGroup.tsx
+++ b/packages/react-core/src/components/InputGroup/InputGroup.tsx
@@ -11,7 +11,7 @@ export interface InputGroupProps extends React.HTMLProps {
/** Content rendered inside the input group. */
children: React.ReactNode;
/** @hide A reference object to attach to the input box */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
}
export const InputGroupBase: React.FunctionComponent = ({
@@ -80,7 +80,7 @@ export const InputGroupBase: React.FunctionComponent = ({
};
InputGroupBase.displayName = 'InputGroupBase';
-export const InputGroup = React.forwardRef((props: InputGroupProps, ref: React.Ref) => (
+export const InputGroup = React.forwardRef((props: InputGroupProps, ref: React.ForwardedRef) => (
));
InputGroup.displayName = 'InputGroup';
diff --git a/packages/react-core/src/components/Label/LabelGroup.tsx b/packages/react-core/src/components/Label/LabelGroup.tsx
index 476e0946e47..e0bdf1c2d1b 100644
--- a/packages/react-core/src/components/Label/LabelGroup.tsx
+++ b/packages/react-core/src/components/Label/LabelGroup.tsx
@@ -232,7 +232,7 @@ class LabelGroup extends React.Component {
};
return numChildren === 0 && addLabelControl === undefined ? null : (
- {(randomId) => renderLabelGroup(this.props.id || randomId)}
+ {(randomId) => renderLabelGroup((this.props.id || randomId) as string)}
);
}
}
diff --git a/packages/react-core/src/components/List/List.tsx b/packages/react-core/src/components/List/List.tsx
index 1dbea7d550a..f6062f4a4d0 100644
--- a/packages/react-core/src/components/List/List.tsx
+++ b/packages/react-core/src/components/List/List.tsx
@@ -54,7 +54,7 @@ export const List: React.FunctionComponent = ({
}: ListProps) =>
component === ListComponent.ol ? (
}
+ ref={ref as React.Ref}
type={type}
{...(isPlain && { role: 'list' })}
{...props}
@@ -71,7 +71,7 @@ export const List: React.FunctionComponent = ({
) : (
}
+ ref={ref as React.Ref}
{...(isPlain && { role: 'list' })}
{...props}
className={css(
diff --git a/packages/react-core/src/components/LoginPage/LoginHeader.tsx b/packages/react-core/src/components/LoginPage/LoginHeader.tsx
index 9d94a48c350..7922ee11f33 100644
--- a/packages/react-core/src/components/LoginPage/LoginHeader.tsx
+++ b/packages/react-core/src/components/LoginPage/LoginHeader.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import styles from '@patternfly/react-styles/css/components/Login/login';
import { css } from '@patternfly/react-styles';
-export interface LoginHeaderProps extends React.HTMLProps {
+export interface LoginHeaderProps extends React.HTMLProps {
/** Content rendered inside the header of the login layout */
children?: React.ReactNode;
/** Additional classes added to the login header */
diff --git a/packages/react-core/src/components/LoginPage/LoginMainHeader.tsx b/packages/react-core/src/components/LoginPage/LoginMainHeader.tsx
index 2b9552e9db3..f5a52039cb4 100644
--- a/packages/react-core/src/components/LoginPage/LoginMainHeader.tsx
+++ b/packages/react-core/src/components/LoginPage/LoginMainHeader.tsx
@@ -3,7 +3,7 @@ import { Title, TitleSizes } from '../Title';
import { css } from '@patternfly/react-styles';
import styles from '@patternfly/react-styles/css/components/Login/login';
-export interface LoginMainHeaderProps extends React.HTMLProps {
+export interface LoginMainHeaderProps extends React.HTMLProps {
/** Content rendered inside the login main header */
children?: React.ReactNode;
/** Additional classes added to the login main header */
diff --git a/packages/react-core/src/components/Masthead/Masthead.tsx b/packages/react-core/src/components/Masthead/Masthead.tsx
index 897f7e2f0c5..f1bd6c0d957 100644
--- a/packages/react-core/src/components/Masthead/Masthead.tsx
+++ b/packages/react-core/src/components/Masthead/Masthead.tsx
@@ -4,7 +4,7 @@ import { css } from '@patternfly/react-styles';
import { formatBreakpointMods } from '../../helpers/util';
import { PageContext } from '../Page/PageContext';
-export interface MastheadProps extends React.DetailedHTMLProps, HTMLDivElement> {
+export interface MastheadProps extends React.DetailedHTMLProps, HTMLElement> {
/** Content rendered inside of the masthead */
children?: React.ReactNode;
/** Additional classes added to the masthead */
diff --git a/packages/react-core/src/components/Masthead/MastheadToggle.tsx b/packages/react-core/src/components/Masthead/MastheadToggle.tsx
index 2f2c36b10d0..241593dc420 100644
--- a/packages/react-core/src/components/Masthead/MastheadToggle.tsx
+++ b/packages/react-core/src/components/Masthead/MastheadToggle.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import styles from '@patternfly/react-styles/css/components/Masthead/masthead';
import { css } from '@patternfly/react-styles';
-export interface MastheadToggleProps extends React.DetailedHTMLProps, HTMLDivElement> {
+export interface MastheadToggleProps extends React.DetailedHTMLProps, HTMLSpanElement> {
/** Content rendered inside of the masthead toggle. */
children?: React.ReactNode;
/** Additional classes added to the masthead toggle. */
diff --git a/packages/react-core/src/components/Menu/DrilldownMenu.tsx b/packages/react-core/src/components/Menu/DrilldownMenu.tsx
index e12dddad4a0..838b60028e8 100644
--- a/packages/react-core/src/components/Menu/DrilldownMenu.tsx
+++ b/packages/react-core/src/components/Menu/DrilldownMenu.tsx
@@ -4,7 +4,7 @@ import { MenuContent } from './MenuContent';
import { MenuList } from './MenuList';
import { MenuContext } from './MenuContext';
-export interface DrilldownMenuProps extends Omit, 'ref' | 'onSelect'> {
+export interface DrilldownMenuProps extends Omit, 'ref' | 'onSelect' | 'id' | 'className'> {
/** Items within drilldown sub-menu */
children?: React.ReactNode;
/** ID of the drilldown sub-menu */
@@ -26,7 +26,7 @@ export const DrilldownMenu: React.FunctionComponent = ({
{({ menuId, parentMenu, flyoutRef, setFlyoutRef, disableHover, ...context }) => (
);
-export const MenuItemAction = React.forwardRef((props: MenuItemActionProps, ref: React.Ref) => (
+export const MenuItemAction = React.forwardRef((props: MenuItemActionProps, ref: React.ForwardedRef) => (
));
MenuItemAction.displayName = 'MenuItemAction';
diff --git a/packages/react-core/src/components/Menu/MenuSearch.tsx b/packages/react-core/src/components/Menu/MenuSearch.tsx
index 4ab12f76108..99a46bba45a 100644
--- a/packages/react-core/src/components/Menu/MenuSearch.tsx
+++ b/packages/react-core/src/components/Menu/MenuSearch.tsx
@@ -9,7 +9,7 @@ export interface MenuSearchProps extends React.HTMLProps {
innerRef?: React.Ref;
}
-export const MenuSearch = React.forwardRef((props: MenuSearchProps, ref: React.Ref) => (
+export const MenuSearch = React.forwardRef((props: MenuSearchProps, ref: React.ForwardedRef) => (
));
MenuSearch.displayName = 'MenuSearch';
diff --git a/packages/react-core/src/components/Menu/MenuSearchInput.tsx b/packages/react-core/src/components/Menu/MenuSearchInput.tsx
index 83840594e28..1cc2c8cf95b 100644
--- a/packages/react-core/src/components/Menu/MenuSearchInput.tsx
+++ b/packages/react-core/src/components/Menu/MenuSearchInput.tsx
@@ -8,7 +8,7 @@ export interface MenuSearchInputProps extends React.HTMLProps {
innerRef?: React.Ref;
}
-export const MenuSearchInput = React.forwardRef((props: MenuSearchInputProps, ref: React.Ref) => (
+export const MenuSearchInput = React.forwardRef((props: MenuSearchInputProps, ref: React.ForwardedRef) => (
// Update to use the styles object when core adds the class
));
diff --git a/packages/react-core/src/components/MenuToggle/MenuToggle.tsx b/packages/react-core/src/components/MenuToggle/MenuToggle.tsx
index d9ebb9913d9..494784f2ca4 100644
--- a/packages/react-core/src/components/MenuToggle/MenuToggle.tsx
+++ b/packages/react-core/src/components/MenuToggle/MenuToggle.tsx
@@ -14,12 +14,8 @@ export interface SplitButtonOptions {
}
export interface MenuToggleProps
- extends Omit<
- React.DetailedHTMLProps<
- React.ButtonHTMLAttributes & React.HTMLAttributes,
- MenuToggleElement
- >,
- 'ref'
+ extends Omit,
+ 'ref' | 'icon'
> {
/** Content rendered inside the toggle */
children?: React.ReactNode;
@@ -44,7 +40,7 @@ export interface MenuToggleProps
/** Optional badge rendered inside the toggle, after the children content */
badge?: BadgeProps | React.ReactNode;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
}
class MenuToggleBase extends React.Component {
@@ -176,7 +172,7 @@ class MenuToggleBase extends React.Component {
}
}
-export const MenuToggle = React.forwardRef((props: MenuToggleProps, ref: React.Ref) => (
+export const MenuToggle = React.forwardRef((props: MenuToggleProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/Nav/Nav.tsx b/packages/react-core/src/components/Nav/Nav.tsx
index 6fe6eb9ca73..3758b705c2f 100644
--- a/packages/react-core/src/components/Nav/Nav.tsx
+++ b/packages/react-core/src/components/Nav/Nav.tsx
@@ -10,7 +10,7 @@ export type NavSelectClickHandler = (
to: string
) => void;
export interface NavProps
- extends Omit, HTMLElement>, 'onSelect'>,
+ extends Omit, 'onSelect' | 'onToggle'>,
OUIAProps {
/** Anything that can be rendered inside of the nav */
children?: React.ReactNode;
diff --git a/packages/react-core/src/components/Nav/NavExpandable.tsx b/packages/react-core/src/components/Nav/NavExpandable.tsx
index d69327115b4..26c36511435 100644
--- a/packages/react-core/src/components/Nav/NavExpandable.tsx
+++ b/packages/react-core/src/components/Nav/NavExpandable.tsx
@@ -9,7 +9,7 @@ import { PickOptional } from '../../helpers/typeUtils';
import { getOUIAProps, OUIAProps, getDefaultOUIAId } from '../../helpers';
export interface NavExpandableProps
- extends React.DetailedHTMLProps, HTMLLIElement>,
+ extends React.HTMLProps,
OUIAProps {
/** Title shown for the expandable list */
title: string;
diff --git a/packages/react-core/src/components/Nav/NavGroup.tsx b/packages/react-core/src/components/Nav/NavGroup.tsx
index af6601fa80c..b267eb6de05 100644
--- a/packages/react-core/src/components/Nav/NavGroup.tsx
+++ b/packages/react-core/src/components/Nav/NavGroup.tsx
@@ -3,7 +3,7 @@ import styles from '@patternfly/react-styles/css/components/Nav/nav';
import { css } from '@patternfly/react-styles';
import { getUniqueId } from '../../helpers/util';
-export interface NavGroupProps extends React.HTMLProps {
+export interface NavGroupProps extends React.HTMLProps {
/** Title shown for the group */
title?: string;
/** Anything that can be rendered inside of the group */
diff --git a/packages/react-core/src/components/Nav/NavList.tsx b/packages/react-core/src/components/Nav/NavList.tsx
index acb8de5776e..7c25dc1bd2d 100644
--- a/packages/react-core/src/components/Nav/NavList.tsx
+++ b/packages/react-core/src/components/Nav/NavList.tsx
@@ -23,7 +23,7 @@ export interface NavListProps
class NavList extends React.Component {
static displayName = 'NavList';
static contextType = NavContext;
- context!: React.ContextType;
+ declare context: React.ContextType;
static defaultProps: NavListProps = {
ariaLeftScroll: 'Scroll left',
ariaRightScroll: 'Scroll right'
diff --git a/packages/react-core/src/components/NotificationDrawer/NotificationDrawer.tsx b/packages/react-core/src/components/NotificationDrawer/NotificationDrawer.tsx
index 3d126b2888d..7f9ae9063fc 100644
--- a/packages/react-core/src/components/NotificationDrawer/NotificationDrawer.tsx
+++ b/packages/react-core/src/components/NotificationDrawer/NotificationDrawer.tsx
@@ -9,7 +9,7 @@ export interface NotificationDrawerProps extends React.HTMLProps
/** Additional classes added to the notification drawer */
className?: string;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
}
const NotificationDrawerBase: React.FunctionComponent = ({
@@ -22,7 +22,7 @@ const NotificationDrawerBase: React.FunctionComponent =
{children}
);
-export const NotificationDrawer = React.forwardRef((props: NotificationDrawerProps, ref: React.Ref) => (
+export const NotificationDrawer = React.forwardRef((props: NotificationDrawerProps, ref: React.ForwardedRef) => (
));
NotificationDrawer.displayName = 'NotificationDrawer';
diff --git a/packages/react-core/src/components/NotificationDrawer/NotificationDrawerGroup.tsx b/packages/react-core/src/components/NotificationDrawer/NotificationDrawerGroup.tsx
index a08f53209f3..08ca755ff34 100644
--- a/packages/react-core/src/components/NotificationDrawer/NotificationDrawerGroup.tsx
+++ b/packages/react-core/src/components/NotificationDrawer/NotificationDrawerGroup.tsx
@@ -8,7 +8,7 @@ import maxLines from '@patternfly/react-tokens/dist/esm/c_notification_drawer__g
import { Badge } from '../Badge';
import { Tooltip, TooltipPosition } from '../Tooltip';
-export interface NotificationDrawerGroupProps extends Omit, 'title'> {
+export interface NotificationDrawerGroupProps extends Omit, 'title'> {
/** Content rendered inside the group */
children?: React.ReactNode;
/** Additional classes added to the group */
diff --git a/packages/react-core/src/components/NumberInput/NumberInput.tsx b/packages/react-core/src/components/NumberInput/NumberInput.tsx
index 2e5143b0fd2..ca46eda8c1c 100644
--- a/packages/react-core/src/components/NumberInput/NumberInput.tsx
+++ b/packages/react-core/src/components/NumberInput/NumberInput.tsx
@@ -109,7 +109,7 @@ export const NumberInput: React.FunctionComponent = ({
{...(widthChars && {
style: {
'--pf-v5-c-number-input--c-form-control--width-chars': widthChars,
- ...props.style
+ ...(props as any).style
} as React.CSSProperties
})}
{...props}
diff --git a/packages/react-core/src/components/Page/Page.tsx b/packages/react-core/src/components/Page/Page.tsx
index dc1bead60ee..ad39230b868 100644
--- a/packages/react-core/src/components/Page/Page.tsx
+++ b/packages/react-core/src/components/Page/Page.tsx
@@ -34,7 +34,7 @@ export interface PageProps extends React.HTMLProps {
/** Skip to content component for the page */
skipToContent?: React.ReactElement;
/** Sets the value for role on the element */
- role?: string;
+ role?: React.AriaRole;
/** an id to use for the [role="main"] element */
mainContainerId?: string;
/** tabIndex to use for the [role="main"] element, null to unset it */
diff --git a/packages/react-core/src/components/Panel/Panel.tsx b/packages/react-core/src/components/Panel/Panel.tsx
index 77d7e0df4c8..9130a281da4 100644
--- a/packages/react-core/src/components/Panel/Panel.tsx
+++ b/packages/react-core/src/components/Panel/Panel.tsx
@@ -12,7 +12,7 @@ export interface PanelProps extends React.HTMLProps {
/** Flag to add scrollable styling to the panel */
isScrollable?: boolean;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
}
const PanelBase: React.FunctionComponent = ({
@@ -38,7 +38,7 @@ const PanelBase: React.FunctionComponent = ({
);
-export const Panel = React.forwardRef((props: PanelProps, ref: React.Ref) => (
+export const Panel = React.forwardRef((props: PanelProps, ref: React.ForwardedRef) => (
));
Panel.displayName = 'Panel';
diff --git a/packages/react-core/src/components/Popover/PopoverFooter.tsx b/packages/react-core/src/components/Popover/PopoverFooter.tsx
index 8643cbe5587..3e2012fbfd3 100644
--- a/packages/react-core/src/components/Popover/PopoverFooter.tsx
+++ b/packages/react-core/src/components/Popover/PopoverFooter.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import styles from '@patternfly/react-styles/css/components/Popover/popover';
import { css } from '@patternfly/react-styles';
-export interface PopoverFooterProps extends React.HTMLProps {
+export interface PopoverFooterProps extends React.HTMLProps {
/** Additional classes added to the Popover footer */
className?: string;
/** Footer node */
diff --git a/packages/react-core/src/components/Popover/PopoverHeader.tsx b/packages/react-core/src/components/Popover/PopoverHeader.tsx
index 45ba779149b..d3d55291445 100644
--- a/packages/react-core/src/components/Popover/PopoverHeader.tsx
+++ b/packages/react-core/src/components/Popover/PopoverHeader.tsx
@@ -4,7 +4,7 @@ import styles from '@patternfly/react-styles/css/components/Popover/popover';
import { PopoverHeaderIcon } from './PopoverHeaderIcon';
import { PopoverHeaderText } from './PopoverHeaderText';
-export interface PopoverHeaderProps extends Omit, 'size'> {
+export interface PopoverHeaderProps extends Omit, 'size'> {
/** Content of the popover header. */
children: React.ReactNode;
/** Indicates the header contains an icon. */
diff --git a/packages/react-core/src/components/ProgressStepper/ProgressStep.tsx b/packages/react-core/src/components/ProgressStepper/ProgressStep.tsx
index 0bc63dc449a..55e68e2726f 100644
--- a/packages/react-core/src/components/ProgressStepper/ProgressStep.tsx
+++ b/packages/react-core/src/components/ProgressStepper/ProgressStep.tsx
@@ -15,8 +15,7 @@ export enum ProgressStepVariant {
warning = 'warning'
}
-export interface ProgressStepProps
- extends React.DetailedHTMLProps, HTMLLIElement> {
+export interface ProgressStepProps extends Omit, 'icon'> {
/** Content rendered inside the progress step. */
children?: React.ReactNode;
/** Additional classes applied to the progress step container. */
diff --git a/packages/react-core/src/components/SearchInput/AdvancedSearchMenu.tsx b/packages/react-core/src/components/SearchInput/AdvancedSearchMenu.tsx
index f8d927619ce..f55b91ed315 100644
--- a/packages/react-core/src/components/SearchInput/AdvancedSearchMenu.tsx
+++ b/packages/react-core/src/components/SearchInput/AdvancedSearchMenu.tsx
@@ -7,7 +7,7 @@ import { SearchInputSearchAttribute } from './SearchInput';
import { Panel, PanelMain, PanelMainBody } from '../Panel';
import { css } from '@patternfly/react-styles';
-export interface AdvancedSearchMenuProps extends Omit, 'onChange'> {
+export interface AdvancedSearchMenuProps extends Omit, 'onChange' | 'onSearch'> {
/** Delimiter in the query string for pairing attributes with search values.
* Required whenever attributes are passed as props.
*/
diff --git a/packages/react-core/src/components/SearchInput/SearchInput.tsx b/packages/react-core/src/components/SearchInput/SearchInput.tsx
index 1381199ee68..1410ad4aa37 100644
--- a/packages/react-core/src/components/SearchInput/SearchInput.tsx
+++ b/packages/react-core/src/components/SearchInput/SearchInput.tsx
@@ -43,7 +43,7 @@ export interface SearchInputExpandable {
/** The main search input component. */
-export interface SearchInputProps extends Omit, 'onChange' | 'results' | 'ref'> {
+export interface SearchInputProps extends Omit, 'onChange' | 'results' | 'ref' | 'onSearch'> {
/** Delimiter in the query string for pairing attributes with search values.
* Required whenever attributes are passed as props.
*/
@@ -71,7 +71,7 @@ export interface SearchInputProps extends Omit,
/** A suggestion for autocompleting. */
hint?: string;
/** @hide A reference object to attach to the input box. */
- innerRef?: React.RefObject;
+ innerRef?: React.Ref;
/** A flag for controlling the open state of a custom advanced search implementation. */
isAdvancedSearchOpen?: boolean;
/** Flag indicating if search input is disabled. */
@@ -459,7 +459,7 @@ const SearchInputBase: React.FunctionComponent = ({
};
SearchInputBase.displayName = 'SearchInputBase';
-export const SearchInput = React.forwardRef((props: SearchInputProps, ref: React.Ref) => (
+export const SearchInput = React.forwardRef((props: SearchInputProps, ref: React.ForwardedRef) => (
} />
));
SearchInput.displayName = 'SearchInput';
diff --git a/packages/react-core/src/components/Select/Select.tsx b/packages/react-core/src/components/Select/Select.tsx
index d3f71d5862f..bf3e012e681 100644
--- a/packages/react-core/src/components/Select/Select.tsx
+++ b/packages/react-core/src/components/Select/Select.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { AriaRole } from 'react';
import { css } from '@patternfly/react-styles';
import { Menu, MenuContent, MenuProps } from '../Menu';
import { Popper } from '../../helpers/Popper/Popper';
@@ -53,11 +53,11 @@ export interface SelectProps extends MenuProps, OUIAProps {
/** Indicates if the select should be without the outer box-shadow */
isPlain?: boolean;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** z-index of the select menu */
zIndex?: number;
/** @beta Determines the accessible role of the select. For a checkbox select pass in "menu". */
- role?: string;
+ role?: AriaRole;
/** Additional properties to pass to the popper */
popperProps?: SelectPopperProps;
}
@@ -75,7 +75,7 @@ const SelectBase: React.FunctionComponent = ({
isPlain,
innerRef,
zIndex = 9999,
- role = 'listbox',
+ role = 'listbox' as AriaRole,
popperProps,
...props
}: SelectProps & OUIAProps) => {
@@ -164,7 +164,7 @@ const SelectBase: React.FunctionComponent = ({
);
};
-export const Select = React.forwardRef((props: SelectProps, ref: React.Ref) => (
+export const Select = React.forwardRef((props: SelectProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/Select/SelectOption.tsx b/packages/react-core/src/components/Select/SelectOption.tsx
index ba050908dd2..37a7bb32be5 100644
--- a/packages/react-core/src/components/Select/SelectOption.tsx
+++ b/packages/react-core/src/components/Select/SelectOption.tsx
@@ -12,7 +12,7 @@ export interface SelectOptionProps extends Omit {
/** Classes applied to root element of select option */
className?: string;
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** Identifies the component in the Select onSelect callback */
value?: any;
/** Indicates the option has a checkbox */
@@ -45,7 +45,7 @@ const SelectOptionBase: React.FunctionComponent = ({
);
-export const SelectOption = React.forwardRef((props: SelectOptionProps, ref: React.Ref) => (
+export const SelectOption = React.forwardRef((props: SelectOptionProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/SimpleList/SimpleListGroup.tsx b/packages/react-core/src/components/SimpleList/SimpleListGroup.tsx
index 8f85f302291..13473e4e392 100644
--- a/packages/react-core/src/components/SimpleList/SimpleListGroup.tsx
+++ b/packages/react-core/src/components/SimpleList/SimpleListGroup.tsx
@@ -2,7 +2,7 @@ import * as React from 'react';
import { css } from '@patternfly/react-styles';
import styles from '@patternfly/react-styles/css/components/SimpleList/simple-list';
-export interface SimpleListGroupProps extends Omit, 'title'> {
+export interface SimpleListGroupProps extends Omit, 'title'> {
/** Content rendered inside the SimpleList group */
children?: React.ReactNode;
/** Additional classes added to the SimpleList */
diff --git a/packages/react-core/src/components/Skeleton/Skeleton.tsx b/packages/react-core/src/components/Skeleton/Skeleton.tsx
index 5bbd6677808..5c5d9e44a13 100644
--- a/packages/react-core/src/components/Skeleton/Skeleton.tsx
+++ b/packages/react-core/src/components/Skeleton/Skeleton.tsx
@@ -44,7 +44,7 @@ export const Skeleton: React.FunctionComponent = ({
style: {
'--pf-v5-c-skeleton--Width': width ? width : undefined,
'--pf-v5-c-skeleton--Height': height ? height : undefined,
- ...props.style
+ ...(props as any).style
} as React.CSSProperties
})}
>
diff --git a/packages/react-core/src/components/Slider/Slider.tsx b/packages/react-core/src/components/Slider/Slider.tsx
index a889032e3a3..e222bd3f878 100644
--- a/packages/react-core/src/components/Slider/Slider.tsx
+++ b/packages/react-core/src/components/Slider/Slider.tsx
@@ -391,7 +391,7 @@ export const Slider: React.FunctionComponent = ({
return (
{leftActions &&
{leftActions}
}
diff --git a/packages/react-core/src/components/Spinner/Spinner.tsx b/packages/react-core/src/components/Spinner/Spinner.tsx
index cd4953c974d..f1a31b5765a 100644
--- a/packages/react-core/src/components/Spinner/Spinner.tsx
+++ b/packages/react-core/src/components/Spinner/Spinner.tsx
@@ -9,7 +9,7 @@ export enum spinnerSize {
xl = 'xl'
}
-export interface SpinnerProps extends React.SVGProps
{
+export interface SpinnerProps extends Omit, 'size'> {
/** Additional classes added to the Spinner. */
className?: string;
/** Size variant of progress. */
diff --git a/packages/react-core/src/components/Switch/Switch.tsx b/packages/react-core/src/components/Switch/Switch.tsx
index c428080babf..b768307974c 100644
--- a/packages/react-core/src/components/Switch/Switch.tsx
+++ b/packages/react-core/src/components/Switch/Switch.tsx
@@ -94,7 +94,7 @@ class Switch extends React.Component onChange(event, event.target.checked)}
+ onChange={(event) => onChange(event, (event.target as HTMLInputElement).checked)}
{...(defaultChecked !== undefined ? { defaultChecked } : { checked: isChecked })}
disabled={isDisabled}
aria-labelledby={!isAriaLabelledBy ? null : `${this.id}-${isChecked !== true ? 'off' : 'on'}`}
diff --git a/packages/react-core/src/components/Tabs/Tab.tsx b/packages/react-core/src/components/Tabs/Tab.tsx
index 6712520f44d..928ef9a93c6 100644
--- a/packages/react-core/src/components/Tabs/Tab.tsx
+++ b/packages/react-core/src/components/Tabs/Tab.tsx
@@ -34,7 +34,7 @@ export interface TabProps
/** Events to prevent when the button is in an aria-disabled state */
inoperableEvents?: string[];
/** @hide Forwarded ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** Optional Tooltip rendered to a Tab. Should be with appropriate props for proper rendering. */
tooltip?: React.ReactElement;
/** Aria-label for the close button added by passing the onClose property to Tabs. */
@@ -142,5 +142,5 @@ const TabBase: React.FunctionComponent = ({
);
};
-export const Tab = React.forwardRef((props: TabProps, ref: React.Ref) => );
+export const Tab = React.forwardRef((props: TabProps, ref: React.ForwardedRef) => );
Tab.displayName = 'Tab';
diff --git a/packages/react-core/src/components/Tabs/TabAction.tsx b/packages/react-core/src/components/Tabs/TabAction.tsx
index 2806767bd89..4e67ca89596 100644
--- a/packages/react-core/src/components/Tabs/TabAction.tsx
+++ b/packages/react-core/src/components/Tabs/TabAction.tsx
@@ -16,7 +16,7 @@ export interface TabActionProps extends Omit,
/** Accessible label for the tab action */
'aria-label'?: string;
/** @hide Callback for the section ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
}
const TabActionBase: React.FunctionComponent = ({
@@ -47,7 +47,7 @@ const TabActionBase: React.FunctionComponent = ({
);
-export const TabAction = React.forwardRef((props: TabActionProps, ref: React.Ref) => (
+export const TabAction = React.forwardRef((props: TabActionProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/Tabs/TabContent.tsx b/packages/react-core/src/components/Tabs/TabContent.tsx
index 53d479d8b24..2712be8486a 100644
--- a/packages/react-core/src/components/Tabs/TabContent.tsx
+++ b/packages/react-core/src/components/Tabs/TabContent.tsx
@@ -16,7 +16,7 @@ export interface TabContentProps extends Omit, 'ref
/** uniquely identifies the controlling Tab if used outside Tabs component */
eventKey?: number | string;
/** @hide Callback for the section ref */
- innerRef?: React.Ref;
+ innerRef?: React.ForwardedRef;
/** id passed from parent to identify the content section */
id: string;
/** title of controlling Tab if used outside Tabs component */
@@ -82,6 +82,6 @@ const TabContentBase: React.FunctionComponent = ({
return null;
};
-export const TabContent = React.forwardRef((props: TabContentProps, ref: React.Ref) => (
+export const TabContent = React.forwardRef((props: TabContentProps, ref: React.ForwardedRef) => (
));
diff --git a/packages/react-core/src/components/Tabs/Tabs.tsx b/packages/react-core/src/components/Tabs/Tabs.tsx
index 5781894ac37..81638921b7f 100644
--- a/packages/react-core/src/components/Tabs/Tabs.tsx
+++ b/packages/react-core/src/components/Tabs/Tabs.tsx
@@ -32,7 +32,7 @@ export interface HorizontalOverflowObject {
type TabElement = React.ReactElement>;
type TabsChild = TabElement | boolean | null | undefined;
-export interface TabsProps extends Omit, 'onSelect'>, OUIAProps {
+export interface TabsProps extends Omit, 'onSelect' | 'onToggle' | 'onClose'>, OUIAProps {
/** Content rendered inside the tabs component. Only `Tab` components or expressions resulting in a falsy value are allowed here. */
children: TabsChild | TabsChild[];
/** Additional classes added to the tabs */
diff --git a/packages/react-core/src/components/TextArea/TextArea.tsx b/packages/react-core/src/components/TextArea/TextArea.tsx
index 0c870cf743d..d3e50ad7404 100644
--- a/packages/react-core/src/components/TextArea/TextArea.tsx
+++ b/packages/react-core/src/components/TextArea/TextArea.tsx
@@ -45,7 +45,7 @@ export interface TextAreaProps extends Omit, 'onC
/** Custom flag to show that the text area requires an associated id or aria-label. */
'aria-label'?: string;
/** @hide A reference object to attach to the text area. */
- innerRef?: React.RefObject;
+ innerRef?: React.Ref;
}
class TextAreaBase extends React.Component {
@@ -162,7 +162,7 @@ class TextAreaBase extends React.Component {
}
}
-export const TextArea = React.forwardRef((props: TextAreaProps, ref: React.Ref) => (
+export const TextArea = React.forwardRef((props: TextAreaProps, ref: React.ForwardedRef) => (
} />
));
TextArea.displayName = 'TextArea';
diff --git a/packages/react-core/src/components/TextInput/TextInput.tsx b/packages/react-core/src/components/TextInput/TextInput.tsx
index a78f6bd2801..0a02aff3211 100644
--- a/packages/react-core/src/components/TextInput/TextInput.tsx
+++ b/packages/react-core/src/components/TextInput/TextInput.tsx
@@ -66,7 +66,7 @@ export interface TextInputProps
/** Aria-label. The text input requires an associated id or aria-label. */
'aria-label'?: string;
/** @hide A reference object to attach to the text input box. */
- innerRef?: React.RefObject;
+ innerRef?: React.Ref;
/** Trim text on left */
isLeftTruncated?: boolean;
/** Callback function when text input is focused */
@@ -232,7 +232,7 @@ export class TextInputBase extends React.Component) => (
+export const TextInput = React.forwardRef((props: TextInputProps, ref: React.ForwardedRef) => (
} />
));
TextInput.displayName = 'TextInput';
diff --git a/packages/react-core/src/components/TextInputGroup/TextInputGroup.tsx b/packages/react-core/src/components/TextInputGroup/TextInputGroup.tsx
index 1df27886894..cf286f600ef 100644
--- a/packages/react-core/src/components/TextInputGroup/TextInputGroup.tsx
+++ b/packages/react-core/src/components/TextInputGroup/TextInputGroup.tsx
@@ -12,7 +12,7 @@ export interface TextInputGroupProps extends React.HTMLProps {
/** Flag to indicate the toggle has no border or background */
isPlain?: boolean;
/** @hide A reference object to attach to the input box */
- innerRef?: React.RefObject;
+ innerRef?: React.Ref;
}
export const TextInputGroupContext = React.createContext>({
diff --git a/packages/react-core/src/components/TextInputGroup/TextInputGroupMain.tsx b/packages/react-core/src/components/TextInputGroup/TextInputGroupMain.tsx
index 094d2642e71..23aafd579dc 100644
--- a/packages/react-core/src/components/TextInputGroup/TextInputGroupMain.tsx
+++ b/packages/react-core/src/components/TextInputGroup/TextInputGroupMain.tsx
@@ -38,7 +38,7 @@ export interface TextInputGroupMainProps extends Omit;
+ innerRef?: React.Ref;
/** Name for the input */
name?: string;
/** @beta The id of the active element. Required if role has a value of "combobox", and focus
@@ -46,7 +46,7 @@ export interface TextInputGroupMainProps extends Omit =
};
export const TextInputGroupMain = React.forwardRef(
- (props: TextInputGroupMainProps, ref: React.Ref) => (
+ (props: TextInputGroupMainProps, ref: React.ForwardedRef) => (
} {...props} />
)
);
diff --git a/packages/react-core/src/components/ToggleGroup/ToggleGroup.tsx b/packages/react-core/src/components/ToggleGroup/ToggleGroup.tsx
index bf3eddc257c..9d7383c9646 100644
--- a/packages/react-core/src/components/ToggleGroup/ToggleGroup.tsx
+++ b/packages/react-core/src/components/ToggleGroup/ToggleGroup.tsx
@@ -25,9 +25,9 @@ export const ToggleGroup: React.FunctionComponent = ({
...props
}: ToggleGroupProps) => {
const toggleGroupItemList = React.Children.map(children, (child) =>
- !(React.isValidElement(child) && child.type === ToggleGroupItem)
+ !(React.isValidElement(child) && (child as any).type === ToggleGroupItem)
? child
- : React.cloneElement(child, areAllGroupsDisabled ? { isDisabled: true } : {})
+ : React.cloneElement(child as React.ReactElement, areAllGroupsDisabled ? { isDisabled: true } : {})
);
return (
diff --git a/packages/react-core/src/components/Toolbar/ToolbarExpandableContent.tsx b/packages/react-core/src/components/Toolbar/ToolbarExpandableContent.tsx
index 463db0c5b29..4699b0321eb 100644
--- a/packages/react-core/src/components/Toolbar/ToolbarExpandableContent.tsx
+++ b/packages/react-core/src/components/Toolbar/ToolbarExpandableContent.tsx
@@ -29,7 +29,7 @@ export interface ToolbarExpandableContentProps extends React.HTMLProps {
static displayName = 'ToolbarExpandableContent';
static contextType = ToolbarContext;
- context!: React.ContextType;
+ declare context: React.ContextType;
static defaultProps: PickOptional = {
isExpanded: false,
clearFiltersButtonText: 'Clear all filters'
diff --git a/packages/react-core/src/components/Toolbar/ToolbarFilter.tsx b/packages/react-core/src/components/Toolbar/ToolbarFilter.tsx
index 4c71e7ce245..717f54904d2 100644
--- a/packages/react-core/src/components/Toolbar/ToolbarFilter.tsx
+++ b/packages/react-core/src/components/Toolbar/ToolbarFilter.tsx
@@ -46,7 +46,7 @@ interface ToolbarFilterState {
class ToolbarFilter extends React.Component {
static displayName = 'ToolbarFilter';
static contextType = ToolbarContext;
- context!: React.ContextType;
+ declare context: React.ContextType;
static defaultProps: PickOptional = {
chips: [] as (string | ToolbarChip)[],
showToolbarItem: true
diff --git a/packages/react-core/src/components/Toolbar/ToolbarGroup.tsx b/packages/react-core/src/components/Toolbar/ToolbarGroup.tsx
index cfd28b2638c..9dff74f2d5f 100644
--- a/packages/react-core/src/components/Toolbar/ToolbarGroup.tsx
+++ b/packages/react-core/src/components/Toolbar/ToolbarGroup.tsx
@@ -56,7 +56,7 @@ export interface ToolbarGroupProps extends Omit,
/** Flag that modifies the toolbar group to hide overflow and respond to available space. Used for horizontal navigation. */
isOverflowContainer?: boolean;
/** @hide Reference to pass to this group if it has .pf-m-chip-container modifier */
- innerRef?: React.RefObject;
+ innerRef?: React.Ref;
}
class ToolbarGroupWithRef extends React.Component {
diff --git a/packages/react-core/src/components/Toolbar/ToolbarItem.tsx b/packages/react-core/src/components/Toolbar/ToolbarItem.tsx
index e92800b2012..f7a462edd1a 100644
--- a/packages/react-core/src/components/Toolbar/ToolbarItem.tsx
+++ b/packages/react-core/src/components/Toolbar/ToolbarItem.tsx
@@ -17,7 +17,7 @@ export enum ToolbarItemVariant {
'expand-all' = 'expand-all'
}
-export interface ToolbarItemProps extends React.HTMLProps {
+export interface ToolbarItemProps extends React.HTMLProps {
/** Classes applied to root element of the data toolbar item */
className?: string;
/** A type modifier which modifies spacing specifically depending on the type of item */
@@ -94,7 +94,7 @@ export const ToolbarItem: React.FunctionComponent = ({
...props
}: ToolbarItemProps) => {
if (variant === ToolbarItemVariant.separator) {
- return ;
+ return } />;
}
const widthStyles: any = {};
@@ -136,8 +136,8 @@ export const ToolbarItem: React.FunctionComponent = ({
)}
{...(variant === 'label' && { 'aria-hidden': true })}
id={id}
- {...props}
- {...(widths && { style: { ...widthStyles, ...props.style } as React.CSSProperties })}
+ {...props as React.HTMLProps}
+ {...(widths && { style: { ...widthStyles, ...(props as any).style } as React.CSSProperties })}
>
{children}
diff --git a/packages/react-core/src/components/Wizard/utils.ts b/packages/react-core/src/components/Wizard/utils.ts
index f83a42a0381..a30a58db294 100644
--- a/packages/react-core/src/components/Wizard/utils.ts
+++ b/packages/react-core/src/components/Wizard/utils.ts
@@ -1,6 +1,6 @@
import React from 'react';
-import { WizardStepType } from './types';
+import { WizardStepType, WizardBasicStep } from './types';
import { WizardStep, WizardStepProps } from './WizardStep';
/**
@@ -22,7 +22,7 @@ export const buildSteps = (children: React.ReactNode | React.ReactNode[]) =>
component: child,
...(index === 0 && !childStepComponents?.length && { isVisited: true }),
...(childStepComponents && {
- subStepIds: childStepComponents?.map((childStepComponent, subStepIndex) => {
+ subStepIds: (childStepComponents as any[])?.map((childStepComponent, subStepIndex) => {
subSteps.push({
index: stepIndex + subStepIndex + 1,
component: childStepComponent,
diff --git a/packages/react-core/src/components/index.ts b/packages/react-core/src/components/index.ts
index a322279493d..d749c3f7f87 100644
--- a/packages/react-core/src/components/index.ts
+++ b/packages/react-core/src/components/index.ts
@@ -1,5 +1,5 @@
/** Keep alphabetically sorted */
-export * from './AboutModal';
+// export * from './AboutModal';
export * from './Accordion';
export * from './ActionList';
export * from './Alert';
@@ -23,11 +23,11 @@ export * from './DatePicker';
export * from './DescriptionList';
export * from './Divider';
export * from './Drawer';
-export * from './Dropdown';
+// export * from './Dropdown';
export * from './DualListSelector';
export * from './EmptyState';
export * from './ExpandableSection';
-export * from './FileUpload';
+// export * from './FileUpload';
export * from './Form';
export * from './FormSelect';
export * from './HelperText';
@@ -37,12 +37,12 @@ export * from './InputGroup';
export * from './JumpLinks';
export * from './Label';
export * from './List';
-export * from './LoginPage';
+// export * from './LoginPage';
export * from './Masthead';
export * from './Menu';
export * from './MenuToggle';
export * from './Modal';
-export * from './MultipleFileUpload';
+// export * from './MultipleFileUpload';
export * from './Nav';
export * from './NotificationBadge';
export * from './NotificationDrawer';
@@ -62,7 +62,7 @@ export * from './SkipToContent';
export * from './Slider';
export * from './Spinner';
export * from './Switch';
-export * from './Tabs';
+// export * from './Tabs';
export * from './Text';
export * from './TextArea';
export * from './TextInput';
diff --git a/packages/react-core/src/helpers/FocusTrap/FocusTrap.tsx b/packages/react-core/src/helpers/FocusTrap/FocusTrap.tsx
index 977bd8809d2..ac97f9d0b6a 100644
--- a/packages/react-core/src/helpers/FocusTrap/FocusTrap.tsx
+++ b/packages/react-core/src/helpers/FocusTrap/FocusTrap.tsx
@@ -1,8 +1,9 @@
import { createFocusTrap, FocusTrap as FocusTrapInstance, Options as FocusTrapOptions } from 'focus-trap';
-import React, { ComponentPropsWithRef, forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
+import React, { HTMLProps, forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
import { useUnmountEffect } from '../useUnmountEffect';
-export interface FocusTrapProps extends ComponentPropsWithRef<'div'> {
+// extends ComponentPropsWithRef<'div'>
+export interface FocusTrapProps extends Omit, 'ref'> {
active?: boolean;
paused?: boolean;
focusTrapOptions?: FocusTrapOptions;
diff --git a/packages/react-core/src/helpers/Popper/Popper.tsx b/packages/react-core/src/helpers/Popper/Popper.tsx
index 403e232dfd6..b6aac4c2d0a 100644
--- a/packages/react-core/src/helpers/Popper/Popper.tsx
+++ b/packages/react-core/src/helpers/Popper/Popper.tsx
@@ -5,6 +5,7 @@ import { Placement, Modifier } from './thirdparty/popper-core';
import { clearTimeouts } from '../util';
import { css } from '@patternfly/react-styles';
import '@patternfly/react-styles/css/components/Popper/Popper.css';
+import { VNode } from 'preact';
const hash = {
left: 'right',
@@ -57,7 +58,7 @@ export interface PopperProps {
*/
triggerRef?: HTMLElement | (() => HTMLElement) | React.RefObject;
/** The popper (menu/tooltip/popover) element */
- popper: React.ReactElement;
+ popper: VNode;
/**
* @beta Reference to the popper (menu/tooltip/popover) element.
* Passing this prop will remove the wrapper div element from the popper.
diff --git a/packages/react-core/src/helpers/favorites.ts b/packages/react-core/src/helpers/favorites.ts
index da6bdeddc6c..c97c21a248a 100644
--- a/packages/react-core/src/helpers/favorites.ts
+++ b/packages/react-core/src/helpers/favorites.ts
@@ -1,5 +1,5 @@
import * as React from 'react';
-import { ApplicationLauncherSeparator } from '../deprecated/components/ApplicationLauncher/ApplicationLauncherSeparator';
+// import { ApplicationLauncherSeparator } from '../deprecated/components/ApplicationLauncher/ApplicationLauncherSeparator';
import { Divider } from '../components/Divider/Divider';
/**
@@ -61,7 +61,7 @@ export const extendItemsWithFavorite = (items: object, isGrouped: boolean, favor
return (items as React.ReactElement[]).map((group) =>
React.cloneElement(group, {
children: React.Children.map(group.props.children as React.ReactElement[], (item) => {
- if (item.type === ApplicationLauncherSeparator || item.type === Divider) {
+ if (/*item.type === ApplicationLauncherSeparator || */item.type === Divider) {
return item;
}
return React.cloneElement(item, {
diff --git a/packages/react-core/src/helpers/typeUtils.ts b/packages/react-core/src/helpers/typeUtils.ts
index c7db7c3e542..39d5c1576c3 100644
--- a/packages/react-core/src/helpers/typeUtils.ts
+++ b/packages/react-core/src/helpers/typeUtils.ts
@@ -15,4 +15,4 @@ export type PickOptional = Pick>;
// so that they cannot be accidentally omitted when providing default values
export type PickAndRequireOptional = Required>>;
-export type DropEvent = React.DragEvent | React.ChangeEvent | DragEvent | Event;
+export type DropEvent = React.ChangeEvent | DragEvent | Event;
diff --git a/packages/react-core/src/helpers/util.ts b/packages/react-core/src/helpers/util.ts
index 6c127df494f..8c3d255e88f 100644
--- a/packages/react-core/src/helpers/util.ts
+++ b/packages/react-core/src/helpers/util.ts
@@ -505,7 +505,7 @@ export const preventedEvents = (events: string[]) =>
events.reduce(
(handlers, eventToPrevent) => ({
...handlers,
- [eventToPrevent]: (event: React.SyntheticEvent) => {
+ [eventToPrevent]: (event: any) => {
event.preventDefault();
}
}),
diff --git a/packages/react-core/src/layouts/Flex/Flex.tsx b/packages/react-core/src/layouts/Flex/Flex.tsx
index 92399cc7aca..46a4ada91a1 100644
--- a/packages/react-core/src/layouts/Flex/Flex.tsx
+++ b/packages/react-core/src/layouts/Flex/Flex.tsx
@@ -536,7 +536,7 @@ export const Flex: React.FunctionComponent = ({
className
)}
style={
- style || order ? { ...style, ...setBreakpointCssVars(order, flexToken.l_flex_item_Order.name) } : undefined
+ style || order ? { ...(style as any), ...setBreakpointCssVars(order, flexToken.l_flex_item_Order.name) } : undefined
}
{...props}
>
diff --git a/packages/react-core/src/layouts/Flex/FlexItem.tsx b/packages/react-core/src/layouts/Flex/FlexItem.tsx
index 84e70586c80..27aa813fc4e 100644
--- a/packages/react-core/src/layouts/Flex/FlexItem.tsx
+++ b/packages/react-core/src/layouts/Flex/FlexItem.tsx
@@ -170,7 +170,7 @@ export const FlexItem: React.FunctionComponent = ({
className
)}
style={
- style || order ? { ...style, ...setBreakpointCssVars(order, flexToken.l_flex_item_Order.name) } : undefined
+ style || order ? { ...(style as any), ...setBreakpointCssVars(order, flexToken.l_flex_item_Order.name) } : undefined
}
>
{children}
diff --git a/packages/react-core/src/layouts/Gallery/Gallery.tsx b/packages/react-core/src/layouts/Gallery/Gallery.tsx
index f4e6250cd8b..a09e3851d70 100644
--- a/packages/react-core/src/layouts/Gallery/Gallery.tsx
+++ b/packages/react-core/src/layouts/Gallery/Gallery.tsx
@@ -65,7 +65,7 @@ export const Gallery: React.FunctionComponent = ({
{children}
diff --git a/packages/react-core/src/layouts/Grid/Grid.tsx b/packages/react-core/src/layouts/Grid/Grid.tsx
index 08293715c77..d59975e10e6 100644
--- a/packages/react-core/src/layouts/Grid/Grid.tsx
+++ b/packages/react-core/src/layouts/Grid/Grid.tsx
@@ -65,7 +65,7 @@ export const Grid: React.FunctionComponent = ({
diff --git a/packages/react-core/src/layouts/Grid/GridItem.tsx b/packages/react-core/src/layouts/Grid/GridItem.tsx
index 4d420d7e888..dd16fe8cd3f 100644
--- a/packages/react-core/src/layouts/Grid/GridItem.tsx
+++ b/packages/react-core/src/layouts/Grid/GridItem.tsx
@@ -108,7 +108,7 @@ export const GridItem: React.FunctionComponent = ({
diff --git a/packages/react-core/tsconfig.json b/packages/react-core/tsconfig.json
index 3a4be05f922..6b7b9976944 100644
--- a/packages/react-core/tsconfig.json
+++ b/packages/react-core/tsconfig.json
@@ -1,17 +1,62 @@
{
- "extends": "../tsconfig.base.json",
+ // "extends": "../tsconfig.base.json",
"compilerOptions": {
- "jsx": "react",
+ "assumeChangesOnlyAffectDirectDependencies": false,
+ "lib": [
+ "es2015",
+ "dom"
+ ],
+ "target": "es2015",
+ "module": "es2015",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "importHelpers": true,
+ "composite": true,
+ "sourceMap": true,
+ "declaration": true,
+ "declarationMap": true,
+ "strict": true,
+ "strictNullChecks": false,
+ "isolatedModules": true,
+ "plugins": [
+ { "transform": "transformer-cjs-imports" }
+ ],
"rootDir": "./src",
"outDir": "./dist/esm",
"tsBuildInfoFile": "dist/esm.tsbuildinfo",
- "baseUrl": ".",
+ "baseUrl": "./",
"paths": {
"./next": ["./src/next"],
- "./deprecated": ["./src/deprecated"]
- }
+ "./deprecated": ["./src/deprecated"],
+ // have to comment this line, run tsc,
+ // then uncomment it again for changes in global.d.ts to take effect
+ "react": ["../../node_modules/preact/compat/"],
+ "react-dom": ["../../node_modules/preact/compat/"]
+ },
+ "jsx": "react-jsx",
+ "jsxImportSource": "preact"
},
- "include": ["./src/*", "./src/**/*"],
+ "include": [
+ "./src/*",
+ "./src/**/*",
+ "./global.d.ts",
+ ],
+ "exclude": [
+ "**/**.test.tsx",
+ "**/**.test.ts",
+ "**/examples/**",
+ "**/__mocks__/**",
+ "**/__tests__/**",
+ "dist",
+ "dist-rollup",
+ "./src/deprecated/**",
+ "./src/components/AboutModal/**",
+ "./src/components/Tabs/**",
+ "./src/components/FileUpload/**",
+ "./src/components/MultipleFileUpload/**",
+ "./src/components/LoginPage/**"
+ ],
"references": [
{
"path": "../react-styles"
diff --git a/packages/tsconfig.base.json b/packages/tsconfig.base.json
index 8b1bd94e118..feff6739175 100644
--- a/packages/tsconfig.base.json
+++ b/packages/tsconfig.base.json
@@ -20,7 +20,12 @@
"isolatedModules": true,
"plugins": [
{ "transform": "transformer-cjs-imports" }
- ]
+ ],
+ // preact
+ "paths": {
+ "react": ["./node_modules/preact/compat/"],
+ "react-dom": ["./node_modules/preact/compat/"]
+ },
},
"exclude": [
"**/**.test.tsx",
diff --git a/packages/tsconfig.cjs.json b/packages/tsconfig.cjs.json
index 6a79555e886..c7b6c9045b7 100644
--- a/packages/tsconfig.cjs.json
+++ b/packages/tsconfig.cjs.json
@@ -16,8 +16,8 @@
{
"path": "./react-styles/tsconfig.cjs.json"
},
- {
- "path": "./react-table/tsconfig.cjs.json"
- }
+ // {
+ // "path": "./react-table/tsconfig.cjs.json"
+ // }
]
}
diff --git a/packages/tsconfig.json b/packages/tsconfig.json
index 8e6c82bdb5f..f1415dc6afd 100644
--- a/packages/tsconfig.json
+++ b/packages/tsconfig.json
@@ -16,8 +16,8 @@
{
"path": "./react-styles"
},
- {
- "path": "./react-table"
- }
+ // {
+ // "path": "./react-table"
+ // }
]
}