From 72ec01f6ec31555d2f04d2cd94caa6e6a6daf85b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Jarz=C4=99bowski-Bownik?= Date: Mon, 30 Dec 2024 10:44:16 +0100 Subject: [PATCH 01/50] feat(CSidebar): add 'as' prop to CSidebar --- .../src/components/sidebar/CSidebar.tsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/coreui-react/src/components/sidebar/CSidebar.tsx b/packages/coreui-react/src/components/sidebar/CSidebar.tsx index 4e22affd..519bc097 100644 --- a/packages/coreui-react/src/components/sidebar/CSidebar.tsx +++ b/packages/coreui-react/src/components/sidebar/CSidebar.tsx @@ -1,4 +1,4 @@ -import React, { forwardRef, HTMLAttributes, useEffect, useRef, useState } from 'react' +import React, { ElementType, forwardRef, HTMLAttributes, useEffect, useRef, useState } from 'react' import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import classNames from 'classnames' @@ -7,8 +7,13 @@ import { CBackdrop } from '../backdrop' import { isInViewport } from '../../utils' import { useForkedRef } from '../../hooks' +import { PolymorphicRefForwardingComponent } from '../../helpers' export interface CSidebarProps extends HTMLAttributes { + /** + * Component used for the root node. Either a string to use a HTML element or a component. + */ + as?: ElementType /** * A string of all className you want applied to the component. */ @@ -65,10 +70,14 @@ export interface CSidebarProps extends HTMLAttributes { const isOnMobile = (element: HTMLDivElement) => Boolean(getComputedStyle(element).getPropertyValue('--cui-is-mobile')) -export const CSidebar = forwardRef( +export const CSidebar: PolymorphicRefForwardingComponent<'div', CSidebarProps> = forwardRef< + HTMLDivElement, + CSidebarProps +>( ( { children, + as: Component = 'div', className, colorScheme, narrow, @@ -183,7 +192,7 @@ export const CSidebar = forwardRef( return ( <> -
( ref={forkedRef} > {children} -
+ {typeof window !== 'undefined' && mobile && createPortal( @@ -216,6 +225,7 @@ export const CSidebar = forwardRef( ) CSidebar.propTypes = { + as: PropTypes.elementType, children: PropTypes.node, className: PropTypes.string, colorScheme: PropTypes.oneOf(['dark', 'light']), @@ -231,4 +241,4 @@ CSidebar.propTypes = { visible: PropTypes.bool, } -CSidebar.displayName = 'CSidebar' +CSidebar.displayName = 'CSidebar' \ No newline at end of file From 8d2d46b7922a1607c1a48294badc779dbb8769bf Mon Sep 17 00:00:00 2001 From: mrholek Date: Thu, 2 Jan 2025 01:02:45 +0100 Subject: [PATCH 02/50] docs: update `@coreui/react` library imports --- .../content/components/close-button/index.mdx | 2 -- packages/docs/content/components/footer.mdx | 2 +- packages/docs/content/components/header.mdx | 2 +- packages/docs/content/components/icon.mdx | 2 +- .../docs/content/components/sidebar/index.mdx | 18 ------------------ .../docs/content/components/table/index.mdx | 2 +- packages/docs/content/forms/checks-radios.mdx | 2 +- packages/docs/content/forms/form-control.mdx | 2 +- packages/docs/content/forms/overview.mdx | 2 +- packages/docs/content/layout/columns.mdx | 2 +- packages/docs/content/layout/containers.mdx | 2 +- packages/docs/content/layout/grid.mdx | 2 +- packages/docs/content/layout/gutters.mdx | 2 +- .../docs/content/templates/admin-dashboard.mdx | 2 +- packages/docs/gatsby-node.mjs | 1 + .../docs/src/components/ExampleSnippet.tsx | 2 +- .../docs/src/components/ExampleSnippetLazy.tsx | 2 +- packages/docs/src/components/Footer.tsx | 2 +- packages/docs/src/components/Header.tsx | 2 +- packages/docs/src/components/Sidebar.tsx | 2 +- packages/docs/src/components/SidebarNav.tsx | 2 +- packages/docs/src/components/Toc.tsx | 2 +- packages/docs/src/pages/404.tsx | 2 +- 23 files changed, 21 insertions(+), 40 deletions(-) diff --git a/packages/docs/content/components/close-button/index.mdx b/packages/docs/content/components/close-button/index.mdx index 08fb0746..20fe6be1 100644 --- a/packages/docs/content/components/close-button/index.mdx +++ b/packages/docs/content/components/close-button/index.mdx @@ -6,8 +6,6 @@ route: /components/close-button/ other_frameworks: close-button --- -import { CCloseButton } from '@coreui/react/src/index' - ## Example Provide an option to dismiss or close a component with ``. Default styling is limited, but highly customizable. Modify the Sass variables to replace the default `background-image`. diff --git a/packages/docs/content/components/footer.mdx b/packages/docs/content/components/footer.mdx index 93af9b9b..4adaf8d4 100644 --- a/packages/docs/content/components/footer.mdx +++ b/packages/docs/content/components/footer.mdx @@ -7,7 +7,7 @@ route: /components/footer other_frameworks: footer --- -import { CFooter, CLink } from '@coreui/react/src/index' +import { CFooter, CLink } from '@coreui/react' ## Example diff --git a/packages/docs/content/components/header.mdx b/packages/docs/content/components/header.mdx index d19e7c7b..b234df13 100644 --- a/packages/docs/content/components/header.mdx +++ b/packages/docs/content/components/header.mdx @@ -31,7 +31,7 @@ import { CHeaderNav, CHeaderText, CHeaderToggler, -} from '@coreui/react/src/index' +} from '@coreui/react' ## Supported content diff --git a/packages/docs/content/components/icon.mdx b/packages/docs/content/components/icon.mdx index 53e63828..e8839cc0 100644 --- a/packages/docs/content/components/icon.mdx +++ b/packages/docs/content/components/icon.mdx @@ -14,7 +14,7 @@ import { CNavLink, CRow, CTabContent, - CTabPane } from '@coreui/react/src/index' + CTabPane } from '@coreui/react' import {CIcon, CIconSvg} from '@coreui/icons-react/src/index' import { cilList, cilShieldAlt } from '@coreui/icons' import * as icon from '@coreui/icons'; diff --git a/packages/docs/content/components/sidebar/index.mdx b/packages/docs/content/components/sidebar/index.mdx index b373b4bc..1ad2fe25 100644 --- a/packages/docs/content/components/sidebar/index.mdx +++ b/packages/docs/content/components/sidebar/index.mdx @@ -6,24 +6,6 @@ route: /components/sidebar/ other_frameworks: sidebar --- -import CIcon from '@coreui/icons-react' -import { cilCloudDownload, cilLayers, cilPuzzle, cilSpeedometer } from '@coreui/icons' - -import { - CBadge, - CSidebar, - CSidebarBrand, - CSidebarFooter, - CSidebarHeader, - CSidebarNav, - CSidebarToggler, - CNavGroup, - CNavGroupItems, - CNavItem, - CNavLink, - CNavTitle, -} from '@coreui/react/src/index' - ## Supported content Sidebar come with built-in support for a handful of sub-components. Choose from the following as needed: diff --git a/packages/docs/content/components/table/index.mdx b/packages/docs/content/components/table/index.mdx index 3bba8edf..004276ed 100644 --- a/packages/docs/content/components/table/index.mdx +++ b/packages/docs/content/components/table/index.mdx @@ -16,7 +16,7 @@ import { CTableHead, CTableHeaderCell, CTableRow, -} from '@coreui/react/src/index' +} from '@coreui/react' ## How to use React Table Component diff --git a/packages/docs/content/forms/checks-radios.mdx b/packages/docs/content/forms/checks-radios.mdx index f9a7fc49..bb451d1c 100644 --- a/packages/docs/content/forms/checks-radios.mdx +++ b/packages/docs/content/forms/checks-radios.mdx @@ -14,7 +14,7 @@ import { CFormLabel, CFormSwitch, CFormText, -} from '@coreui/react/src/index' +} from '@coreui/react' ## Approach diff --git a/packages/docs/content/forms/form-control.mdx b/packages/docs/content/forms/form-control.mdx index f64fe0de..ff3b6500 100644 --- a/packages/docs/content/forms/form-control.mdx +++ b/packages/docs/content/forms/form-control.mdx @@ -14,7 +14,7 @@ import { CFormTextarea, CCol, CRow -} from '@coreui/react/src/index' +} from '@coreui/react' ## Example diff --git a/packages/docs/content/forms/overview.mdx b/packages/docs/content/forms/overview.mdx index 134000c1..19362350 100644 --- a/packages/docs/content/forms/overview.mdx +++ b/packages/docs/content/forms/overview.mdx @@ -16,7 +16,7 @@ import { CFormText, CCol, CRow, -} from '@coreui/react/src/index' +} from '@coreui/react' ## Overview diff --git a/packages/docs/content/layout/columns.mdx b/packages/docs/content/layout/columns.mdx index fb81e457..982add80 100644 --- a/packages/docs/content/layout/columns.mdx +++ b/packages/docs/content/layout/columns.mdx @@ -6,7 +6,7 @@ menu: Layout route: '/layout/columns' --- -import { CCol, CContainer, CRow } from '@coreui/react/src/index' +import { CCol, CContainer, CRow } from '@coreui/react' ## How they work diff --git a/packages/docs/content/layout/containers.mdx b/packages/docs/content/layout/containers.mdx index 3e0fe2a7..0c8a43f2 100644 --- a/packages/docs/content/layout/containers.mdx +++ b/packages/docs/content/layout/containers.mdx @@ -6,7 +6,7 @@ menu: Layout route: "/layout/containers" --- -import { CCol, CContainer, CRow } from '@coreui/react/src/index' +import { CCol, CContainer, CRow } from '@coreui/react' ## How they work diff --git a/packages/docs/content/layout/grid.mdx b/packages/docs/content/layout/grid.mdx index 30c632c8..e4124778 100644 --- a/packages/docs/content/layout/grid.mdx +++ b/packages/docs/content/layout/grid.mdx @@ -6,7 +6,7 @@ menu: Layout route: "/layout/grid" --- -import { CCol, CContainer, CRow } from '@coreui/react/src/index' +import { CCol, CContainer, CRow } from '@coreui/react' ## Example diff --git a/packages/docs/content/layout/gutters.mdx b/packages/docs/content/layout/gutters.mdx index 0674a963..af9d3ff6 100644 --- a/packages/docs/content/layout/gutters.mdx +++ b/packages/docs/content/layout/gutters.mdx @@ -6,7 +6,7 @@ menu: Layout route: "/layout/gutters" --- -import { CCol, CContainer, CRow } from '@coreui/react/src/index' +import { CCol, CContainer, CRow } from '@coreui/react' ## How they work diff --git a/packages/docs/content/templates/admin-dashboard.mdx b/packages/docs/content/templates/admin-dashboard.mdx index 42153487..4766c72d 100644 --- a/packages/docs/content/templates/admin-dashboard.mdx +++ b/packages/docs/content/templates/admin-dashboard.mdx @@ -15,7 +15,7 @@ import { CImage, CLink, CRow -} from '@coreui/react/src/index' +} from '@coreui/react' ## React Admin & Dashboard Templates diff --git a/packages/docs/gatsby-node.mjs b/packages/docs/gatsby-node.mjs index 3ab20f5e..3deb22e8 100644 --- a/packages/docs/gatsby-node.mjs +++ b/packages/docs/gatsby-node.mjs @@ -15,6 +15,7 @@ export const onCreateWebpackConfig = ({ actions }) => { setWebpackConfig({ resolve: { alias: { + '@coreui/react': resolve(__dirname, '..', 'coreui-react/src/index.ts'), '@example': examplePaths, // Adds all paths to a single alias }, }, diff --git a/packages/docs/src/components/ExampleSnippet.tsx b/packages/docs/src/components/ExampleSnippet.tsx index 0d80ebd5..ff14b3d6 100644 --- a/packages/docs/src/components/ExampleSnippet.tsx +++ b/packages/docs/src/components/ExampleSnippet.tsx @@ -2,7 +2,7 @@ import React, { FC, lazy, Suspense, useEffect, useMemo, useState } from 'react' import { Highlight, Language } from 'prism-react-renderer' import CIcon from '@coreui/icons-react' import { cibCodesandbox, cilCheckAlt, cilCopy } from '@coreui/icons' -import { CNav, CNavLink, CTooltip, useClipboard } from '@coreui/react/src/' +import { CNav, CNavLink, CTooltip, useClipboard } from '@coreui/react' import { openStackBlitzProject } from '../utils/stackblitz' import { openCodeSandboxProject } from '../utils/codesandbox' diff --git a/packages/docs/src/components/ExampleSnippetLazy.tsx b/packages/docs/src/components/ExampleSnippetLazy.tsx index 1433b173..252b38c1 100644 --- a/packages/docs/src/components/ExampleSnippetLazy.tsx +++ b/packages/docs/src/components/ExampleSnippetLazy.tsx @@ -5,7 +5,7 @@ import { cibCodesandbox, cilCheckAlt, cilCopy } from '@coreui/icons' import { CNav, CNavLink, CTooltip, useClipboard } from '@coreui/react' import { openStackBlitzProject } from '../utils/stackblitz' import { openCodeSandboxProject } from '../utils/codesandbox' -import { isInViewport } from '@coreui/react/src/utils' +import { isInViewport } from '@coreui/react' interface CodeSnippets { js?: string diff --git a/packages/docs/src/components/Footer.tsx b/packages/docs/src/components/Footer.tsx index 8b39d6db..d5282cff 100644 --- a/packages/docs/src/components/Footer.tsx +++ b/packages/docs/src/components/Footer.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react' -import { CContainer, CFooter } from '@coreui/react/src/index' +import { CContainer, CFooter } from '@coreui/react' // @ts-expect-error json file import pkg from './../../package.json' diff --git a/packages/docs/src/components/Header.tsx b/packages/docs/src/components/Header.tsx index 3a4c4fbb..9b13856d 100644 --- a/packages/docs/src/components/Header.tsx +++ b/packages/docs/src/components/Header.tsx @@ -25,7 +25,7 @@ import { CHeaderToggler, CNavItem, useColorModes, -} from '@coreui/react/src' +} from '@coreui/react' import { AppContext } from './../AppContext' const Header = forwardRef(({}, ref) => { diff --git a/packages/docs/src/components/Sidebar.tsx b/packages/docs/src/components/Sidebar.tsx index 684fbe88..7897a3d6 100644 --- a/packages/docs/src/components/Sidebar.tsx +++ b/packages/docs/src/components/Sidebar.tsx @@ -8,7 +8,7 @@ import { CDropdownItem, CSidebar, CSidebarBrand, -} from '@coreui/react/src' +} from '@coreui/react' import { SidebarNav } from '.' import { AppContext } from './../AppContext' diff --git a/packages/docs/src/components/SidebarNav.tsx b/packages/docs/src/components/SidebarNav.tsx index ed8d4bdd..1bd5e299 100644 --- a/packages/docs/src/components/SidebarNav.tsx +++ b/packages/docs/src/components/SidebarNav.tsx @@ -1,7 +1,7 @@ import React, { ReactNode } from 'react' import { Link } from 'gatsby' -import { CBadge, CNavGroup, CNavItem, CNavLink, CSidebarNav } from '@coreui/react/src/index' +import { CBadge, CNavGroup, CNavItem, CNavLink, CSidebarNav } from '@coreui/react' import CIcon from '@coreui/icons-react' export type Badge = { diff --git a/packages/docs/src/components/Toc.tsx b/packages/docs/src/components/Toc.tsx index d27ef4b9..e5d3825f 100644 --- a/packages/docs/src/components/Toc.tsx +++ b/packages/docs/src/components/Toc.tsx @@ -1,5 +1,5 @@ import React, { CSSProperties, forwardRef, useState } from 'react' -import { CCollapse, CNav } from '@coreui/react/src/index' +import { CCollapse, CNav } from '@coreui/react' export type TocItem = { url: string diff --git a/packages/docs/src/pages/404.tsx b/packages/docs/src/pages/404.tsx index 196b2c6d..d0f696de 100644 --- a/packages/docs/src/pages/404.tsx +++ b/packages/docs/src/pages/404.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import { graphql, useStaticQuery } from 'gatsby' -import { CButton } from '@coreui/react/src/index' +import { CButton } from '@coreui/react' import Seo from '../components/Seo' From c54a0ab95b824c0676ba08c4317075665c63c82d Mon Sep 17 00:00:00 2001 From: mrholek Date: Thu, 2 Jan 2025 20:51:52 +0100 Subject: [PATCH 03/50] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @typescript-eslint/eslint-plugin ^8.18.1 → ^8.19.0 @typescript-eslint/parser ^8.18.1 → ^8.19.0 eslint-plugin-react ^7.37.2 → ^7.37.3 --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 91b0b416..f5e153d0 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,12 @@ "test:update": "npm-run-all charts:test:update icons:test:update lib:test:update" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.18.1", - "@typescript-eslint/parser": "^8.18.1", + "@typescript-eslint/eslint-plugin": "^8.19.0", + "@typescript-eslint/parser": "^8.19.0", "eslint": "8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-unicorn": "^56.0.1", "lerna": "^8.1.9", From 36814f609b321e2bd981c436597646a77c0cebc6 Mon Sep 17 00:00:00 2001 From: mrholek Date: Thu, 2 Jan 2025 23:43:58 +0100 Subject: [PATCH 04/50] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @types/react ^18.3.17 → ^18.3.18 rollup ^4.28.1 → ^4.29.1 --- packages/coreui-react/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/coreui-react/package.json b/packages/coreui-react/package.json index a878d9d0..325da74b 100644 --- a/packages/coreui-react/package.json +++ b/packages/coreui-react/package.json @@ -49,10 +49,11 @@ "@rollup/plugin-commonjs": "^28.0.2", "@rollup/plugin-node-resolve": "^16.0.0", "@rollup/plugin-typescript": "^12.1.2", + "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.14", - "@types/react": "18.3.17", + "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/react-transition-group": "^4.4.12", "classnames": "^2.5.1", @@ -62,7 +63,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-transition-group": "^4.4.5", - "rollup": "^4.28.1", + "rollup": "^4.29.1", "ts-jest": "^29.2.5", "tslib": "^2.8.1", "typescript": "^5.7.2" From c2d2e7d5b45d7ed359129def4572d13b758938fa Mon Sep 17 00:00:00 2001 From: mrholek Date: Thu, 2 Jan 2025 23:48:05 +0100 Subject: [PATCH 05/50] fix: lock the version of `@types/prop-types` to prevent `children` prop typings incompatibility --- packages/coreui-react/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/coreui-react/package.json b/packages/coreui-react/package.json index 325da74b..b3387502 100644 --- a/packages/coreui-react/package.json +++ b/packages/coreui-react/package.json @@ -53,6 +53,7 @@ "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/jest": "^29.5.14", + "@types/prop-types": "15.7.13", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/react-transition-group": "^4.4.12", From b1ede205fb5c00b678d0cae92188dce581737026 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 3 Jan 2025 01:26:58 +0100 Subject: [PATCH 06/50] tests: update tests --- .../CAccordionButton.spec.tsx.snap | 2 - .../CAccordionHeader.spec.tsx.snap | 2 - .../carousel/__tests__/CCarousel.spec.tsx | 3 +- .../dropdown/__tests__/CDropdown.spec.tsx | 62 +++++++++++++------ .../modal/__tests__/CModal.spec.tsx | 58 +++++++++-------- .../__snapshots__/CNavGroup.spec.tsx.snap | 5 +- .../popover/__tests__/CPopover.spec.tsx | 2 +- .../__snapshots__/CPopover.spec.tsx.snap | 5 +- .../__snapshots__/CTooltip.spec.tsx.snap | 1 - 9 files changed, 84 insertions(+), 56 deletions(-) diff --git a/packages/coreui-react/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap b/packages/coreui-react/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap index b8bd2e1c..dae014eb 100644 --- a/packages/coreui-react/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap +++ b/packages/coreui-react/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap @@ -3,7 +3,6 @@ exports[`CAccordionButton customize 1`] = `
@@ -25,11 +26,13 @@ exports[`loads and displays CNavGroup component 1`] = ` > anchorText