diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index f623800d..00000000
--- a/.eslintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/dist/**
-.eslintrc.js
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 2f74cc21..00000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Copyright (c) 2013-present, creativeLabs Lukasz Holeczek.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-'use strict'
-
-module.exports = {
- root: true, // So parent files don't get applied
- env: {
- es6: true,
- browser: true,
- node: true,
- },
- extends: [
- 'plugin:react/recommended',
- 'plugin:@typescript-eslint/recommended',
- 'plugin:prettier/recommended',
- 'plugin:unicorn/recommended',
- ],
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaVersion: 2020,
- sourceType: 'module',
- ecmaFeatures: {
- jsx: true,
- },
- },
- plugins: ['@typescript-eslint', 'react', 'react-hooks'],
- settings: {
- react: {
- pragma: 'React',
- version: 'detect',
- },
- },
- rules: {
- 'unicorn/filename-case': 'off',
- 'unicorn/no-array-for-each': 'off',
- 'unicorn/no-null': 'off',
- 'unicorn/prefer-dom-node-append': 'off',
- 'unicorn/prefer-export-from': 'off',
- 'unicorn/prefer-query-selector': 'off',
- 'unicorn/prevent-abbreviations': 'off',
- },
- overrides: [
- {
- files: ['packages/docs/build/**'],
- env: {
- browser: false,
- node: true,
- },
- parserOptions: {
- sourceType: 'script',
- },
- rules: {
- '@typescript-eslint/no-var-requires': 'off',
- 'no-console': 'off',
- 'unicorn/prefer-module': 'off',
- 'unicorn/prefer-top-level-await': 'off',
- },
- },
- {
- files: ['packages/docs/**'],
- rules: {
- '@typescript-eslint/no-var-requires': 'off',
- 'unicorn/prefer-module': 'off',
- },
- },
- ],
-}
diff --git a/.prettierrc.js b/.prettierrc.js
deleted file mode 100644
index 415ca057..00000000
--- a/.prettierrc.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- semi: false,
- trailingComma: "all",
- singleQuote: true,
- printWidth: 100,
- tabWidth: 2
-};
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 94e4f4d1..fbb053e0 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2024 creativeLabs Łukasz Holeczek
+Copyright (c) 2025 creativeLabs Łukasz Holeczek
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 3a12a807..f147887e 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,8 @@
·
Request feature
·
+ Roadmap
+ ·
Blog
@@ -46,7 +48,7 @@
Several quick start options are available:
-- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.0.0.zip)
+- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.7.1.zip)
- Clone the repo: `git clone https://github.com/coreui/coreui-react.git`
- Install with [npm](https://www.npmjs.com/): `npm install @coreui/react`
- Install with [yarn](https://yarnpkg.com/): `yarn add @coreui/react`
@@ -101,6 +103,7 @@ import "bootstrap/dist/css/bootstrap.min.css";
- [React Accordion](https://coreui.io/react/docs/components/accordion/)
- [React Alert](https://coreui.io/react/docs/components/alert/)
+- [React Autocomplete](https://coreui.io/react/docs/forms/autocomplete/) **PRO**
- [React Avatar](https://coreui.io/react/docs/components/avatar/)
- [React Badge](https://coreui.io/react/docs/components/badge/)
- [React Breadcrumb](https://coreui.io/react/docs/components/breadcrumb/)
@@ -134,6 +137,8 @@ import "bootstrap/dist/css/bootstrap.min.css";
- [React Progress](https://coreui.io/react/docs/components/progress/)
- [React Radio](https://coreui.io/react/docs/forms/radio/)
- [React Range](https://coreui.io/react/docs/forms/range/)
+- [React Range Slider](https://coreui.io/react/docs/forms/range-slider/) **PRO**
+- [React Rating](https://coreui.io/react/docs/forms/rating/) **PRO**
- [React Select](https://coreui.io/react/docs/forms/select/)
- [React Sidebar](https://coreui.io/react/docs/components/sidebar/)
- [React Smart Pagination](https://coreui.io/react/docs/components/smart-pagination/) **PRO**
@@ -178,24 +183,25 @@ CoreUI supports most popular frameworks.
Fully featured, out-of-the-box, templates for your application based on CoreUI.
-- [Angular Admin Template](https://coreui.io/angular)
-- [Bootstrap Admin Template](https://coreui.io/)
-- [React Admin Template](https://coreui.io/react)
-- [Vue Admin Template](https://coreui.io/vue)
+- [Angular Admin Templates](https://coreui.io/themes-templates/admin-dashboard/angular/)
+- [Bootstrap Admin Templates](https://coreui.io/themes-templates/admin-dashboard/bootstrap/)
+- [Next.js Admin Templates](https://coreui.io/themes-templates/admin-dashboard/next-js/)
+- [React Admin Templates](https://coreui.io/themes-templates/admin-dashboard/react/)
+- [Vue Admin Templates](https://coreui.io/themes-templates/admin-dashboard/vue/)
## Contributing
-Please read through our [contributing guidelines](https://github.com/coreui/coreui-react/blob/v4/.github/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
+Please read through our [contributing guidelines](https://github.com/coreui/coreui-react/blob/.github/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
-Editor preferences are available in the [editor config](https://github.com/coreui/coreui-react/blob/v4/.editorconfig) for easy use in common text editors. Read more and download plugins at .
+Editor preferences are available in the [editor config](https://github.com/coreui/coreui-react/blob/.editorconfig) for easy use in common text editors. Read more and download plugins at .
## Community
Stay up to date on the development of CoreUI and reach out to the community with these helpful resources.
-- Read and subscribe to [The Official CoreUI Blog](https://coreui.io/blog/).
-
-You can also follow [@core_ui on Twitter](https://twitter.com/core_ui).
+- Read and subscribe to [The Official CoreUI Blog](https://coreui.io/blog).
+- Follow [@core_ui on Twitter](https://x.com/core_ui).
+- Discuss, ask questions, and more on [the community Discord](https://discord.gg/pQRWe5XdGm).
## Versioning
@@ -226,4 +232,4 @@ CoreUI is an MIT-licensed open source project and is completely free to use. How
## Copyright and license
-Copyright 2024 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-react/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
\ No newline at end of file
+Copyright 2025 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-react/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
\ No newline at end of file
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000..2498120d
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,104 @@
+import eslint from '@eslint/js'
+import tsParser from '@typescript-eslint/parser'
+import eslintPluginUnicorn from 'eslint-plugin-unicorn'
+import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
+import eslintPluginReact from 'eslint-plugin-react'
+import eslintPluginReactHooks from 'eslint-plugin-react-hooks'
+import globals from 'globals'
+import typescriptEslint from 'typescript-eslint'
+
+export default typescriptEslint.config(
+ { ignores: ['**/*.d.ts', '**/coverage', '**/dist', 'eslint.config.mjs'] },
+ {
+ extends: [
+ eslint.configs.recommended,
+ ...typescriptEslint.configs.recommended,
+ eslintPluginUnicorn.configs['flat/recommended'],
+ eslintPluginReact.configs.flat.recommended,
+ eslintPluginReact.configs.flat['jsx-runtime'],
+ ],
+ plugins: {
+ 'react-hooks': eslintPluginReactHooks,
+ },
+ files: ['packages/**/src/**/*.{js,ts,tsx}'],
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ ...globals.node,
+ },
+ parser: tsParser,
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ },
+ settings: {
+ react: {
+ pragma: 'React',
+ version: 'detect',
+ },
+ },
+ rules: {
+ ...eslintPluginReactHooks.configs.recommended.rules,
+ 'no-console': 'off',
+ 'no-debugger': 'off',
+ 'unicorn/filename-case': 'off',
+ 'unicorn/no-array-for-each': 'off',
+ 'unicorn/no-null': 'off',
+ 'unicorn/prefer-dom-node-append': 'off',
+ 'unicorn/prefer-export-from': 'off',
+ 'unicorn/prefer-query-selector': 'off',
+ 'unicorn/prevent-abbreviations': 'off',
+ 'vue/require-default-prop': 'off',
+ },
+ },
+ {
+ files: ['**/*.mjs'],
+ languageOptions: {
+ globals: {
+ ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])),
+ ...globals.node,
+ },
+
+ ecmaVersion: 5,
+ sourceType: 'module',
+ },
+ },
+ {
+ files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'],
+ languageOptions: {
+ globals: {
+ ...globals.jest,
+ },
+ },
+ },
+ {
+ files: ['packages/docs/build/**'],
+ languageOptions: {
+ globals: {
+ ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])),
+ ...globals.node,
+ },
+
+ ecmaVersion: 5,
+ sourceType: 'commonjs',
+ },
+ rules: {
+ '@typescript-eslint/no-var-requires': 'off',
+ 'no-console': 'off',
+ 'unicorn/prefer-module': 'off',
+ 'unicorn/prefer-top-level-await': 'off',
+ },
+ },
+ {
+ files: ['packages/docs/**'],
+ rules: {
+ '@typescript-eslint/no-var-requires': 'off',
+ 'unicorn/prefer-module': 'off',
+ },
+ },
+ eslintPluginPrettierRecommended,
+)
diff --git a/lerna.json b/lerna.json
index 194343e3..d86538ff 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,6 +1,6 @@
{
"npmClient": "yarn",
"packages": ["packages/*"],
- "version": "5.0.0",
+ "version": "5.7.1",
"$schema": "node_modules/lerna/schemas/lerna-schema.json"
}
diff --git a/package.json b/package.json
index 00387841..b7e32b5f 100644
--- a/package.json
+++ b/package.json
@@ -22,17 +22,18 @@
"test:update": "npm-run-all charts:test:update icons:test:update lib:test:update"
},
"devDependencies": {
- "@typescript-eslint/eslint-plugin": "^7.4.0",
- "@typescript-eslint/parser": "^7.4.0",
- "eslint": "8.57.0",
- "eslint-config-prettier": "^9.1.0",
- "eslint-plugin-prettier": "^5.1.3",
- "eslint-plugin-react": "^7.34.1",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-unicorn": "^51.0.1",
- "lerna": "^8.1.2",
+ "@typescript-eslint/parser": "^8.36.0",
+ "eslint": "^9.31.0",
+ "eslint-config-prettier": "^10.1.5",
+ "eslint-plugin-prettier": "^5.5.1",
+ "eslint-plugin-react": "^7.37.5",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-unicorn": "^59.0.1",
+ "globals": "^16.3.0",
+ "lerna": "^8.2.3",
"npm-run-all": "^4.1.5",
- "prettier": "^3.2.5"
+ "prettier": "^3.6.2",
+ "typescript-eslint": "^8.36.0"
},
"overrides": {
"gatsby-remark-external-links": {
diff --git a/packages/coreui-icons-react b/packages/coreui-icons-react
index bcbe37d7..aad2d31c 160000
--- a/packages/coreui-icons-react
+++ b/packages/coreui-icons-react
@@ -1 +1 @@
-Subproject commit bcbe37d75c46bfa18e8c1b3c903d60fe8f0b1222
+Subproject commit aad2d31c3cd8ca4d3ed7457ef02730f60038b6e8
diff --git a/packages/coreui-react/LICENSE b/packages/coreui-react/LICENSE
index 94e4f4d1..fbb053e0 100644
--- a/packages/coreui-react/LICENSE
+++ b/packages/coreui-react/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2024 creativeLabs Łukasz Holeczek
+Copyright (c) 2025 creativeLabs Łukasz Holeczek
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/packages/coreui-react/README.md b/packages/coreui-react/README.md
index 9b4f7007..190eafc0 100644
--- a/packages/coreui-react/README.md
+++ b/packages/coreui-react/README.md
@@ -46,7 +46,7 @@
Several quick start options are available:
-- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.0.0.zip)
+- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.7.1.zip)
- Clone the repo: `git clone https://github.com/coreui/coreui-react.git`
- Install with [npm](https://www.npmjs.com/): `npm install @coreui/react`
- Install with [yarn](https://yarnpkg.com/): `yarn add @coreui/react`
@@ -134,6 +134,7 @@ import "bootstrap/dist/css/bootstrap.min.css";
- [React Progress](https://coreui.io/react/docs/components/progress/)
- [React Radio](https://coreui.io/react/docs/forms/radio/)
- [React Range](https://coreui.io/react/docs/forms/range/)
+- [React Rating](https://coreui.io/react/docs/forms/rating/)
- [React Select](https://coreui.io/react/docs/forms/select/)
- [React Sidebar](https://coreui.io/react/docs/components/sidebar/)
- [React Smart Pagination](https://coreui.io/react/docs/components/smart-pagination/) **PRO**
@@ -258,4 +259,4 @@ Thanks to all the backers and sponsors! Support this project by [becoming a back
## Copyright and license
-Copyright 2024 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-react/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
+Copyright 2025 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-react/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
diff --git a/packages/coreui-react/package.json b/packages/coreui-react/package.json
index 90f90185..4e62fee7 100644
--- a/packages/coreui-react/package.json
+++ b/packages/coreui-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@coreui/react",
- "version": "5.0.0",
+ "version": "5.7.1",
"description": "UI Components Library for React.js",
"keywords": [
"react",
@@ -41,31 +41,33 @@
"test:update": "jest --coverage --updateSnapshot"
},
"dependencies": {
- "@coreui/coreui": "^5.0.0",
+ "@coreui/coreui": "^5.4.1",
"@popperjs/core": "^2.11.8",
"prop-types": "^15.8.1"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.6",
- "@testing-library/jest-dom": "^6.4.2",
- "@testing-library/react": "^14.2.2",
- "@types/jest": "^29.5.12",
- "@types/react": "18.2.73",
- "@types/react-dom": "^18.2.22",
- "@types/react-transition-group": "^4.4.10",
+ "@rollup/plugin-commonjs": "^28.0.6",
+ "@rollup/plugin-node-resolve": "^16.0.1",
+ "@rollup/plugin-typescript": "^12.1.4",
+ "@testing-library/dom": "^10.4.0",
+ "@testing-library/jest-dom": "^6.6.3",
+ "@testing-library/react": "^16.3.0",
+ "@types/jest": "^29.5.14",
+ "@types/prop-types": "15.7.15",
+ "@types/react": "^19.1.8",
+ "@types/react-dom": "^19.1.6",
+ "@types/react-transition-group": "^4.4.12",
"classnames": "^2.5.1",
"cross-env": "^7.0.3",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"react-transition-group": "^4.4.5",
- "rollup": "^4.13.1",
- "ts-jest": "^29.1.2",
- "tslib": "^2.6.2",
- "typescript": "^5.4.3"
+ "rollup": "^4.45.0",
+ "ts-jest": "^29.4.0",
+ "tslib": "^2.8.1",
+ "typescript": "^5.8.3"
},
"peerDependencies": {
"react": ">=17",
diff --git a/packages/coreui-react/src/components/accordion/CAccordion.tsx b/packages/coreui-react/src/components/accordion/CAccordion.tsx
index 9fe4c634..a3a275ae 100644
--- a/packages/coreui-react/src/components/accordion/CAccordion.tsx
+++ b/packages/coreui-react/src/components/accordion/CAccordion.tsx
@@ -1,7 +1,9 @@
-import React, { createContext, forwardRef, HTMLAttributes, useState } from 'react'
+import React, { forwardRef, HTMLAttributes, useState } from 'react'
import PropTypes from 'prop-types'
import classNames from 'classnames'
+import { CAccordionContext } from './CAccordionContext'
+
export interface CAccordionProps extends HTMLAttributes {
/**
* The active item key.
@@ -21,14 +23,6 @@ export interface CAccordionProps extends HTMLAttributes {
flush?: boolean
}
-export interface CAccordionContextProps {
- _activeItemKey?: number | string
- alwaysOpen?: boolean
- setActiveKey: React.Dispatch>
-}
-
-export const CAccordionContext = createContext({} as CAccordionContextProps)
-
export const CAccordion = forwardRef(
({ children, activeItemKey, alwaysOpen = false, className, flush, ...rest }, ref) => {
const [_activeItemKey, setActiveKey] = useState(activeItemKey)
@@ -48,8 +42,8 @@ export const CAccordion = forwardRef(
)
CAccordion.propTypes = {
- alwaysOpen: PropTypes.bool,
activeItemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
+ alwaysOpen: PropTypes.bool,
children: PropTypes.node,
className: PropTypes.string,
flush: PropTypes.bool,
diff --git a/packages/coreui-react/src/components/accordion/CAccordionBody.tsx b/packages/coreui-react/src/components/accordion/CAccordionBody.tsx
index 532f3ff6..d98e8c43 100644
--- a/packages/coreui-react/src/components/accordion/CAccordionBody.tsx
+++ b/packages/coreui-react/src/components/accordion/CAccordionBody.tsx
@@ -2,9 +2,8 @@ import React, { forwardRef, HTMLAttributes, useContext } from 'react'
import PropTypes from 'prop-types'
import classNames from 'classnames'
-import { CAccordionItemContext } from './CAccordionItem'
-
import { CCollapse } from './../collapse/CCollapse'
+import { CAccordionItemContext } from './CAccordionItemContext'
export interface CAccordionBodyProps extends HTMLAttributes {
/**
@@ -15,16 +14,16 @@ export interface CAccordionBodyProps extends HTMLAttributes {
export const CAccordionBody = forwardRef(
({ children, className, ...rest }, ref) => {
- const { visible } = useContext(CAccordionItemContext)
+ const { id, visible } = useContext(CAccordionItemContext)
return (
-
+
{children}
)
- },
+ }
)
CAccordionBody.propTypes = {
diff --git a/packages/coreui-react/src/components/accordion/CAccordionButton.tsx b/packages/coreui-react/src/components/accordion/CAccordionButton.tsx
index 4235ca6e..b5e9ca4c 100644
--- a/packages/coreui-react/src/components/accordion/CAccordionButton.tsx
+++ b/packages/coreui-react/src/components/accordion/CAccordionButton.tsx
@@ -2,7 +2,7 @@ import React, { forwardRef, HTMLAttributes, useContext } from 'react'
import PropTypes from 'prop-types'
import classNames from 'classnames'
-import { CAccordionItemContext } from './CAccordionItem'
+import { CAccordionItemContext } from './CAccordionItemContext'
export interface CAccordionButtonProps extends HTMLAttributes {
/**
@@ -13,13 +13,14 @@ export interface CAccordionButtonProps extends HTMLAttributes
export const CAccordionButton = forwardRef(
({ children, className, ...rest }, ref) => {
- const { visible, setVisible } = useContext(CAccordionItemContext)
+ const { id, visible, setVisible } = useContext(CAccordionItemContext)
return (