diff --git a/eslint.config.mjs b/eslint.config.mjs index dce0d6a8..8588ee31 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -45,6 +45,15 @@ export default typescriptEslint.config( }, rules: { ...eslintPluginReactHooks.configs.recommended.rules, + // react-hooks@7 promoted the react-compiler rules into recommended; treat the + // newly-introduced ones as warnings so they don't fail CI on working components + 'react-hooks/refs': 'warn', + 'react-hooks/set-state-in-effect': 'warn', + 'react-hooks/static-components': 'warn', + '@typescript-eslint/no-unused-expressions': [ + 'error', + { allowShortCircuit: true, allowTernary: true }, + ], '@typescript-eslint/no-unused-vars': 'off', 'unused-imports/no-unused-imports': 'error', 'unused-imports/no-unused-vars': [ diff --git a/packages/coreui-react/src/components/carousel/CCarouselItem.tsx b/packages/coreui-react/src/components/carousel/CCarouselItem.tsx index 046168ad..0822a3c6 100644 --- a/packages/coreui-react/src/components/carousel/CCarouselItem.tsx +++ b/packages/coreui-react/src/components/carousel/CCarouselItem.tsx @@ -51,8 +51,8 @@ export const CCarouselItem = forwardRef( setTimeout(() => { if (count !== 0) { // @ts-expect-error reflow is necessary to proper transition - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const reflow = carouselItemRef.current?.offsetHeight + + const _reflow = carouselItemRef.current?.offsetHeight setDirectionClassName(`carousel-item-${direction === 'next' ? 'start' : 'end'}`) } }, 0) diff --git a/packages/coreui-react/src/components/nav/CNavGroup.tsx b/packages/coreui-react/src/components/nav/CNavGroup.tsx index d4d4d38a..13f144b4 100644 --- a/packages/coreui-react/src/components/nav/CNavGroup.tsx +++ b/packages/coreui-react/src/components/nav/CNavGroup.tsx @@ -183,8 +183,8 @@ export const CNavGroup: PolymorphicRefForwardingComponent<'li', CNavGroupProps> const onExiting = () => { // @ts-expect-error reflow is necessary to get correct height of the element - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const reflow = navItemsRef.current?.offsetHeight + + const _reflow = navItemsRef.current?.offsetHeight setHeight(0) } diff --git a/packages/coreui-react/src/components/table/CTable.tsx b/packages/coreui-react/src/components/table/CTable.tsx index 54a4d26b..6f8ceb2f 100644 --- a/packages/coreui-react/src/components/table/CTable.tsx +++ b/packages/coreui-react/src/components/table/CTable.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, TableHTMLAttributes, useMemo } from 'react' +import React, { forwardRef, ReactNode, TableHTMLAttributes, useMemo } from 'react' import PropTypes from 'prop-types' import classNames from 'classnames' @@ -210,7 +210,7 @@ export const CTable = forwardRef( })} key={index} > - {item[colName]} + {item[colName] as ReactNode} ) : null })} diff --git a/packages/coreui-react/src/components/table/types.ts b/packages/coreui-react/src/components/table/types.ts index a99dfbf9..6ecb072d 100644 --- a/packages/coreui-react/src/components/table/types.ts +++ b/packages/coreui-react/src/components/table/types.ts @@ -17,6 +17,7 @@ export type FooterItem = { } export type Item = { - [key: string]: number | string | any + _cellProps?: Record _props?: CTableRowProps + [key: string]: unknown } diff --git a/packages/coreui-react/src/components/tabs/CTabList.tsx b/packages/coreui-react/src/components/tabs/CTabList.tsx index ee7b9fe5..10cee626 100644 --- a/packages/coreui-react/src/components/tabs/CTabList.tsx +++ b/packages/coreui-react/src/components/tabs/CTabList.tsx @@ -37,7 +37,7 @@ export const CTabList = forwardRef( ) { event.preventDefault() const target = event.target as HTMLElement - // eslint-disable-next-line unicorn/prefer-spread + const items: HTMLElement[] = Array.from( tabListRef.current.querySelectorAll('.nav-link:not(.disabled):not(:disabled)') ) diff --git a/packages/coreui-react/src/types.ts b/packages/coreui-react/src/types.ts index 860fa90c..f883ab32 100644 --- a/packages/coreui-react/src/types.ts +++ b/packages/coreui-react/src/types.ts @@ -1,15 +1,7 @@ export type Breakpoints = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' export type Colors = - | 'primary' - | 'secondary' - | 'success' - | 'danger' - | 'warning' - | 'info' - | 'dark' - | 'light' - | string + 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string export type Placements = | 'auto'