diff --git a/.babelrc b/.babelrc
deleted file mode 100644
index 9b7d435ad..000000000
--- a/.babelrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "presets": ["es2015", "stage-0", "react"]
-}
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 2c57ced33..000000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var ecmaFeatures = {
- 'jsx': true,
- 'arrowFunctions': true,
- 'blockBindings': true,
- 'defaultParams': true,
- 'destructuring': true,
- 'forOf': true,
- 'generators': true,
- 'objectLiteralComputedProperties': true,
- 'objectLiteralShorthandMethods': true,
- 'objectLiteralShorthandProperties': true,
- 'experimentalObjectRestSpread': true,
- 'restParams': true,
- 'spread': true,
- 'templateStrings': true,
- 'modules': true,
- 'classes': true
-};
-
-var rules = {
- 'comma-dangle': 0,
- 'new-cap': 0,
- 'arrow-body-style': 0,
- 'prefer-template': 0,
- 'no-underscore-dangle': 0,
- 'object-shorthand': 0,
- 'func-names': 0,
- 'no-extra-parens': ['error', 'functions'],
- 'dot-notation': 0,
- 'max-len': 0,
- 'camelcase': 0,
- 'react/jsx-pascal-case': 0,
- 'prefer-const': 0,
- 'react/jsx-filename-extension': 0,
- 'linebreak-style': 0,
- 'react/require-extension': 0
-};
-
-module.exports = {
- 'extends': 'airbnb',
- 'env': {
- 'browser': true,
- 'node': true,
- 'es6': true
- },
- 'globals': {
- 'describe': true,
- 'it': true
- },
- 'plugins': [
- 'react'
- ],
- 'parserOptions': {
- 'sourceType': 'module',
- 'ecmaFeatures': ecmaFeatures
- },
- 'ecmaFeatures': ecmaFeatures,
- rules: rules,
- extensions: ['', '.js', '.jsx']
-};
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 000000000..0e1b9c08b
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,92 @@
+{
+ "root": true,
+ "extends": [
+ "airbnb",
+ "prettier",
+ "plugin:storybook/recommended"
+ ],
+ "parser": "@babel/eslint-parser",
+ "env": {
+ "browser": true,
+ "node": true,
+ "es6": true
+ },
+ "plugins": [
+ "react"
+ ],
+ "rules": {
+ "react/forbid-foreign-prop-types": 0,
+ "comma-dangle": 0,
+ "new-cap": 0,
+ "arrow-body-style": 0,
+ "prefer-template": 0,
+ "no-underscore-dangle": 0,
+ "object-shorthand": 0,
+ "func-names": 0,
+ "dot-notation": 0,
+ "max-len": 0,
+ "camelcase": 0,
+ "react/jsx-pascal-case": 0,
+ "prefer-const": 0,
+ "operator-linebreak": 0,
+ "react/jsx-filename-extension": 0,
+ "linebreak-style": 0,
+ "react/require-extension": 0,
+ "react/no-children-prop": 0,
+ "react/require-default-props": 0,
+ "react/forbid-prop-types": 0,
+ "jsx-a11y/no-noninteractive-element-interactions": 0,
+ "import/no-webpack-loader-syntax": 0,
+ "import/no-unresolved": 0,
+ "react/jsx-props-no-spreading": 0,
+ "react/destructuring-assignment": 0,
+ "jsx-a11y/click-events-have-key-events": 0,
+ "jsx-a11y/no-static-element-interactions": 0,
+ "react/jsx-no-constructed-context-values": 0,
+ "consistent-return": 0,
+ "no-restricted-globals": 0,
+ "no-nested-ternary": 0,
+ "import/prefer-default-export": 0,
+ "prefer-destructuring": [
+ "error",
+ {
+ "array": false,
+ "object": true
+ }
+ ],
+ "import/no-extraneous-dependencies": 0,
+ "no-param-reassign": 0,
+ "jsx-a11y/mouse-events-have-key-events": 0
+ },
+ "parserOptions": {
+ "sourceType": "module",
+ "ecmaFeatures": {
+ "jsx": true,
+ "arrowFunctions": true,
+ "blockBindings": true,
+ "defaultParams": true,
+ "destructuring": true,
+ "forOf": true,
+ "generators": true,
+ "objectLiteralComputedProperties": true,
+ "objectLiteralShorthandMethods": true,
+ "objectLiteralShorthandProperties": true,
+ "experimentalObjectRestSpread": true,
+ "restParams": true,
+ "spread": true,
+ "templateStrings": true,
+ "modules": true,
+ "classes": true
+ }
+ },
+ "overrides": [
+ {
+ "files": [
+ "testUtils.js"
+ ],
+ "env": {
+ "jest": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..88552ce2c
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+tidelift: npm/reactstrap
+custom: https://www.paypal.me/evansharp
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
new file mode 100644
index 000000000..206c92516
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -0,0 +1,39 @@
+---
+name: Bug report
+about: Create a report to help us improve
+
+---
+
+- components: `name`
+- reactstrap version `#x.x.x`
+- import method `umd/csj/es`
+- react version `#x.x.x`
+- bootstrap version `#x.x.x`
+
+### What is happening?
+
+
+
+### What should be happening?
+
+
+
+### Steps to reproduce issue
+
+1. ...
+2. ...
+
+### Error message in console
+
+```
+paste error message with stacktrack here
+```
+
+### Code
+
+
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000..601dea123
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,101 @@
+version: 2
+updates:
+- package-ecosystem: npm
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "13:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: conventional-recommended-bump
+ versions:
+ - ">= 5.a, < 6"
+ - dependency-name: conventional-recommended-bump
+ versions:
+ - ">= 6.a, < 7"
+ - dependency-name: cross-env
+ versions:
+ - ">= 5.a, < 6"
+ - dependency-name: cross-env
+ versions:
+ - ">= 6.a, < 7"
+ - dependency-name: cross-env
+ versions:
+ - ">= 7.a, < 8"
+ - dependency-name: css-loader
+ versions:
+ - ">= 3.a, < 4"
+ - dependency-name: customize-cra
+ versions:
+ - ">= 1.a, < 2"
+ - dependency-name: ejs
+ versions:
+ - ">= 3.a, < 4"
+ - dependency-name: raw-loader
+ versions:
+ - ">= 4.a, < 5"
+ - dependency-name: react-helmet
+ versions:
+ - ">= 6.a, < 7"
+ - dependency-name: react-router
+ versions:
+ - ">= 4.a, < 5"
+ - dependency-name: react-router
+ versions:
+ - ">= 5.a, < 6"
+ - dependency-name: react-scripts
+ versions:
+ - "> 2.1.1"
+ - dependency-name: react-scripts
+ versions:
+ - ">= 3.a, < 4"
+ - dependency-name: react-transition-group
+ versions:
+ - ">= 4.a, < 5"
+ - dependency-name: rollup
+ versions:
+ - ">= 2.a, < 3"
+ - dependency-name: rollup-plugin-babel-minify
+ versions:
+ - ">= 10.a, < 11"
+ - dependency-name: rollup-plugin-babel-minify
+ versions:
+ - ">= 9.a, < 10"
+ - dependency-name: rollup-plugin-node-resolve
+ versions:
+ - ">= 5.a, < 6"
+ - dependency-name: style-loader
+ versions:
+ - ">= 1.a, < 2"
+ - dependency-name: css-loader
+ versions:
+ - 5.0.1
+ - 5.0.2
+ - 5.1.0
+ - 5.1.1
+ - 5.1.2
+ - 5.1.3
+ - 5.1.4
+ - 5.2.0
+ - 5.2.1
+ - 5.2.3
+ - dependency-name: "@types/react"
+ versions:
+ - 17.0.1
+ - 17.0.2
+ - 17.0.3
+ - dependency-name: mini-css-extract-plugin
+ versions:
+ - 1.3.5
+ - 1.3.6
+ - 1.3.7
+ - 1.3.8
+ - 1.3.9
+ - dependency-name: "@babel/plugin-proposal-object-rest-spread"
+ versions:
+ - 7.12.13
+ - 7.13.0
+ - dependency-name: webpack-cli
+ versions:
+ - 4.4.0
+ - 4.5.0
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
new file mode 100644
index 000000000..a7a230c82
--- /dev/null
+++ b/.github/workflows/coverage.yml
@@ -0,0 +1,30 @@
+name: Test Coverage
+
+on:
+ push:
+ branches: [ master, bootstrap5 ]
+ pull_request:
+ branches: [ master, bootstrap5 ]
+
+jobs:
+
+ build:
+ runs-on: ubuntu-latest
+ steps:
+
+ - uses: actions/checkout@v2
+
+ - name: Use Node.js 12.x
+ uses: actions/setup-node@v1
+ with:
+ node-version: 12.x
+ cache: 'yarn'
+
+ - run: rm -rf node_modules && yarn install --frozen-lockfile
+ - name: Run Coverage
+ run: |
+ npm run cover -- --runInBand
+ - name: Upload to Coveralls
+ uses: coverallsapp/github-action@master
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 000000000..49b49a86e
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,18 @@
+name: Manually Publish Docs
+on: workflow_dispatch
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ # Setup .npmrc file to publish to npm
+ - uses: actions/setup-node@v2
+ with:
+ node-version: '12.x'
+ registry-url: 'https://registry.npmjs.org'
+ - name: Install dependencies
+ run: rm -rf node_modules && yarn install --frozen-lockfile
+ - name: Publish Docs
+ env:
+ GITHUB_TOKEN: ${{ secrets.REACTSTRAP_DOCS_GITHUB_TOKEN }}
+ run: ./scripts/docs
diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml
new file mode 100644
index 000000000..10ffaedf7
--- /dev/null
+++ b/.github/workflows/release-please.yml
@@ -0,0 +1,46 @@
+on:
+ push:
+ branches:
+ - master
+name: Release Bot
+jobs:
+ release-pr:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: GoogleCloudPlatform/release-please-action@v3
+ id: release-please
+ with:
+ release-type: node
+ package-name: "reactstrap"
+ changelog-types: '[{"type":"feat","section":"Features","hidden":false},{"type":"fix","section":"Bug Fixes","hidden":false},{"type":"chore","section":"Miscellaneous","hidden":true},{"type":"refactor","section":"Miscellaneous","hidden":false}]'
+ command: release-pr
+
+ release:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: GoogleCloudPlatform/release-please-action@v3
+ id: release
+ with:
+ release-type: node
+ package-name: "reactstrap"
+ command: github-release
+ - uses: actions/checkout@v2
+ if: ${{ steps.release.outputs.release_created }}
+ - uses: actions/setup-node@v2
+ with:
+ node-version: '16.x'
+ registry-url: 'https://registry.npmjs.org'
+ if: ${{ steps.release.outputs.release_created }}
+ - name: Install dependencies
+ run: rm -rf node_modules && yarn install --frozen-lockfile
+ if: ${{ steps.release.outputs.release_created }}
+ - name: Publish package
+ run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+ if: ${{ steps.release.outputs.release_created }}
+ - name: Publish Docs
+ env:
+ GITHUB_TOKEN: ${{ secrets.REACTSTRAP_TOKEN }}
+ run: ./scripts/docs
+ if: ${{ steps.release.outputs.release_created }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 000000000..5332c8cd8
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,32 @@
+# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
+# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
+
+name: Node.js CI
+
+on:
+ push:
+ branches: [ master, release-* ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [12.x, 14.x, 16.x]
+ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: 'yarn'
+ - run: rm -rf node_modules && yarn install --frozen-lockfile
+ - run: npm run lint
+ - run: npm run build --if-present
+ - run: npm run test:ci
diff --git a/.gitignore b/.gitignore
index f5291674c..a296b70e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,10 @@ node_modules
/dist
/build
/lib
+/esm
+/es
+.DS_Store
+.idea
+.history
+npm-debug.log
+package-lock.json
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 000000000..48082f72f
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+12
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1 @@
+{}
diff --git a/.storybook/main.cjs b/.storybook/main.cjs
new file mode 100644
index 000000000..3a41deab1
--- /dev/null
+++ b/.storybook/main.cjs
@@ -0,0 +1,11 @@
+module.exports = {
+ stories: [
+ '../stories/**/*.stories.mdx',
+ '../stories/**/*.stories.js'
+ ],
+ addons: [
+ '@storybook/addon-links',
+ '@storybook/addon-docs'
+ ],
+ staticDirs: ['../static']
+};
diff --git a/.storybook/manager-head.html b/.storybook/manager-head.html
new file mode 100644
index 000000000..3266b9c00
--- /dev/null
+++ b/.storybook/manager-head.html
@@ -0,0 +1 @@
+
diff --git a/.storybook/manager.cjs b/.storybook/manager.cjs
new file mode 100644
index 000000000..e5f450653
--- /dev/null
+++ b/.storybook/manager.cjs
@@ -0,0 +1,43 @@
+import { addons } from '@storybook/addons';
+import { STORY_RENDERED } from '@storybook/core-events'
+import { create } from '@storybook/theming';
+
+const theme = create({
+ base: 'light',
+ brandTitle: 'Reactstrap',
+ brandUrl: 'https://github.com/reactstrap/reactstrap',
+ brandImage: 'logo.svg',
+});
+
+addons.setConfig({
+ theme
+});
+
+addons.register('TitleAddon', api => {
+ const customTitle = 'Reactstrap';
+ let interval = null;
+ const setTitle = () => {
+ clearTimeout(interval);
+
+ let storyData = null;
+ try {
+ storyData = api.getCurrentStoryData();
+ } catch(e) {}
+
+ let title;
+ if (!storyData) {
+ title = customTitle;
+ } else {
+ title = `${storyData.kind} - ${storyData.name} ⋅ ${customTitle}`
+ }
+
+ if (document.title !== title) {
+ document.title = title;
+ }
+ interval = setTimeout(setTitle, 100);
+ };
+ setTitle();
+ api.on(STORY_RENDERED, story => {
+ setTitle();
+ })
+})
diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html
new file mode 100644
index 000000000..adfb667a5
--- /dev/null
+++ b/.storybook/preview-head.html
@@ -0,0 +1,13 @@
+
+
+
\ No newline at end of file
diff --git a/.storybook/preview.cjs b/.storybook/preview.cjs
new file mode 100644
index 000000000..660fc6f52
--- /dev/null
+++ b/.storybook/preview.cjs
@@ -0,0 +1,18 @@
+export const parameters = {
+ actions: { argTypesRegex: "^on[A-Z].*" },
+ controls: {
+ hideNoControlsWarning: true,
+ matchers: {
+ date: /Date$/
+ },
+ },
+ options: {
+ storySort: {
+ order: ['Home', ['Installation', 'GitHub', 'Upgrading', 'Themes'], '*']
+ }
+ },
+ viewMode: 'docs',
+ previewTabs: {
+ canvas: { hidden: true },
+ },
+}
diff --git a/.storybook/webpack.config.cjs b/.storybook/webpack.config.cjs
new file mode 100644
index 000000000..21208aa9a
--- /dev/null
+++ b/.storybook/webpack.config.cjs
@@ -0,0 +1,11 @@
+const path = require('path');
+
+module.exports = async ({ config }) => {
+ config.resolve = {
+ alias: {
+ reactstrap: path.resolve(__dirname, '../src/')
+ },
+ };
+
+ return config;
+};
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 288cd140e..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-language: node_js
-node_js:
- - 6
-cache:
- directories:
- - node_modules
-before_script:
- - chmod +x scripts/docs
-script:
- - npm run lint
- - npm run cover
-after_script:
- - npm run report-coverage
-after_success:
- - scripts/docs
-env:
- global:
- secure: GKu1vrkY7RWrrp0VOyxBjGSyTOGdU9jNT+oYR7P12PbCX4yzZ2mbsPpxWWs7Uh8ZXm5VEEfkrF80v/ccUEMvf1MD/q95nqLcQRoN/31yDhiJ66uW+mZk0C6OqUUZJlcSt1Ta6oLmLVmkJUu2euOo4ZTGQ1iwV9EOS+auPYUjXF7df8JE9sTof4YM3jUiQ+3ABIG8cOcsf81AyS9TOcpH6xPEs71Hz0uXta3TAAYpLgJSuuCciQn5Sr/9UIh9w10zAasSZBy27+A5mTf0C0xk3vN95cHfyS25r5x/zC3++YS//6MQASruT05Hf7STpF9Dy/6mdg6tMfGr+85zDqpMaF1dP5Rm9f8KHqZzYD52PtwLEkHpWwi/gqHY5vc+wHla5FEXiqawtBTRMj/hlvkvdN55qZnnFmsVEPrhHAIm1a8ECngzkZhG9QblszGgc55RtAtgGSlVsS5VWStsj29xLs2VJb6gYj69cMDSIND4e5VYzmrnaO/qRbzvRWJUIWFo/nmpSnAQbq5yV8K1+VukbxX/hF7+mE55ieeVww8tnC2bkxuQF1CbzTul5kPgAD7Hf8YdsSczvdZpSRHtN6OXGCotw4DRAiXZRb5TLFvEQFvbrNGciN5/Z1rXxlMr8WWwckAFxVW1EQd+kKg8abjCOLE+YY04a+h3W/+XOgDPUlA=
-branches:
- only:
- - master
-before_deploy:
- - npm run build
-deploy:
- skip_cleanup: true
- provider: npm
- email: edward.d.hernandez@gmail.com
- api_key:
- secure: FFlZtXFtzHE0mnYlYPnv5g7CE3IYj4DdO28qxSLV1sa1UC/FJOAY6no5iiQ62aL0CH66B9sgXjvOvRDYoSfIWjOxYS49OcYQ1U6cW4x3azI34FTVCkjfsmoOrnsiBkNjYkKbz+XW7rsdN/u4CA9womdqHq4v4dNroB8mgrHKli5/CK7PhodRf9JYq758cc/cwZjnIQ3ioZ9vcsgsBcYO+705kh0x6HNEYQyhDMm++DMEupa7OtzZTeZbeDFxDCVlFWCxMJCbwkjqK4tqxXJglBbr2SPZ+LKi2EMHaILUoYwFsMimBFy+rYjCCe55zYnuYw2z+6lPeqbJ7pvhodTYcf/kUVpHzUKBMrCW4oJXlQ7MjaX9gaiiD8K+pnP7IF3N+j7iiroxsRa7floYTjDLstxNwrawfrIajL1C0wRTZ9g7CUX/Pbxjs818zOAloHqzlVQewIt3Jcj0CyXeVgZSQvcHvU1ROSJkN9qYyBXbb9rou4j+mgYvLLy+aql91dvmSjQIuDGqG9x+Acyz5Zl5N36JNjNAwJxF1NV1E/Vks8TPdgU3O6zylP+tg9HAzu7jG9gnIAusC7vkE/9RZ1TFQPAMTVrL+sqHmliDBHWBmMRibbkEsTl2vvV2ZSriHqQGqRFqv7jhON96RdzU6uxDtoRJb4ZGZrqEmt7l8n5USAU=
- on:
- tags: true
- repo: reactstrap/reactstrap
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dfedad2e1..7bb91fe9d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,1473 @@
+# [9.0.0-8](https://github.com/reactstrap/reactstrap/compare/v9.0.0-7...v9.0.0-8) (2021-10-15)
+
+
+### Bug Fixes
+
+* **Button:** remove extra close icon in `btn-close` ([#2318](https://github.com/reactstrap/reactstrap/issues/2318)) ([f1289c7](https://github.com/reactstrap/reactstrap/commit/f1289c79cc4828cf84b0d6d842297b52dc1fe102))
+* **Label:** add `form-label` class for labels of vertical forms ([#2317](https://github.com/reactstrap/reactstrap/issues/2317)) ([43d0a37](https://github.com/reactstrap/reactstrap/commit/43d0a37e597f3081a3ebe633f6d041e4f62e111d))
+* **types:** add 'swtch' to `InputType` ([#2340](https://github.com/reactstrap/reactstrap/issues/2340)) ([f449c1c](https://github.com/reactstrap/reactstrap/commit/f449c1c10e38af03719aebb19534075b6b46f40c))
+
+
+
+# [9.0.0-7](https://github.com/reactstrap/reactstrap/compare/v9.0.0-6...v9.0.0-7) (2021-09-27)
+
+
+### Bug Fixes
+
+* **types:** remove duplicate types/lib/index.d.ts ([#2316](https://github.com/reactstrap/reactstrap/issues/2316)) ([38f8060](https://github.com/reactstrap/reactstrap/commit/38f80603f42d114915c22f88549a1d73d6fd545d))
+
+
+
+# [9.0.0-6](https://github.com/reactstrap/reactstrap/compare/v9.0.0-5...v9.0.0-6) (2021-09-24)
+
+
+### Bug Fixes
+
+* **build:** set --compress false for microbundle build ([#2314](https://github.com/reactstrap/reactstrap/issues/2314)) ([a119aae](https://github.com/reactstrap/reactstrap/commit/a119aaedd6e598cb9bd7d4b4e1cde68e21b58f9c))
+
+
+
+# [9.0.0-5](https://github.com/reactstrap/reactstrap/compare/v9.0.0-4...v9.0.0-5) (2021-09-23)
+
+
+### Bug Fixes
+
+* **types:** export UncontrolledAccordion types ([#2313](https://github.com/reactstrap/reactstrap/issues/2313)) ([600e5d4](https://github.com/reactstrap/reactstrap/commit/600e5d4ccc2140d3fd9c5221cc2d5355b57e3afe))
+
+
+
+# [9.0.0-4](https://github.com/reactstrap/reactstrap/compare/v9.0.0-3...v9.0.0-4) (2021-09-23)
+
+
+### Bug Fixes
+
+* **types:** export AccordionBody types ([#2312](https://github.com/reactstrap/reactstrap/issues/2312)) ([ef202b3](https://github.com/reactstrap/reactstrap/commit/ef202b39ada495bfdd25425a58635e3a633000a0))
+
+
+
+# [9.0.0-3](https://github.com/reactstrap/reactstrap/compare/v9.0.0-2...v9.0.0-3) (2021-09-23)
+
+
+### Bug Fixes
+
+* **popover:** add default popper offset for popover ([d49dc3f](https://github.com/reactstrap/reactstrap/commit/d49dc3f215bea461d325e95b735f4a2becd7fc91))
+* **types:** import React for UncontrolledAccordion type defs ([#2292](https://github.com/reactstrap/reactstrap/issues/2292)) ([6e5ebb7](https://github.com/reactstrap/reactstrap/commit/6e5ebb7276bf0432f108f6f45335638e4343b9fc))
+* **types:** use types from @popperjs/core ([55da7db](https://github.com/reactstrap/reactstrap/commit/55da7dbdb1197abc0e858ba67298cd530c068e78))
+
+
+### Features
+
+* **forms:** Add support for floating labels ([b9ad8cc](https://github.com/reactstrap/reactstrap/commit/b9ad8ccdf084deec8510289e806fd7e51aadbc89))
+* **Navbar:** add container options ([00b88f7](https://github.com/reactstrap/reactstrap/commit/00b88f7ac97d20d9230af6d1ea43cb40e99916ca))
+
+
+
+# [9.0.0-2](https://github.com/reactstrap/reactstrap/compare/v9.0.0-0...v9.0.0-2) (2021-09-22)
+
+
+### Features
+
+* **accordion:** add `flush` support and `stayOpen` support ([272b773](https://github.com/reactstrap/reactstrap/commit/272b773972a16f60d581a13a5807277884a1693f))
+* **bs5:** add Offcanvas ([df61c93](https://github.com/reactstrap/reactstrap/commit/df61c937f941a166538e9c7012d6b51c56ea6a41))
+* **carousel:** add Bootstrap5 updates ([1cca298](https://github.com/reactstrap/reactstrap/commit/1cca298f74f85599fa8e5b22fa73e15ebc76315d))
+* **collapse:** add horizontal collapse ([45d28fe](https://github.com/reactstrap/reactstrap/commit/45d28fec7becf71f0e57fe0612db6b9ff74fdb9a))
+* **ListGroup:** Add ListGroupNumbered ([ea4621e](https://github.com/reactstrap/reactstrap/commit/ea4621e5d90f717dcc84e295658767eed6fef486))
+* **Placeholder:** add component ([0b315ab](https://github.com/reactstrap/reactstrap/commit/0b315abc0428f9fa6096115a39e6697b7e61abd8))
+
+
+
+# [9.0.0-0](https://github.com/reactstrap/reactstrap/compare/8.9.0...9.0.0-0) (2021-03-03)
+
+
+### Bug Fixes
+
+* **InputGroup:** toggle if clicking dropdown input ([6915b7b](https://github.com/reactstrap/reactstrap/commit/6915b7b9ff463d84dd3064c1560018bd322ad175))
+
+
+### Code Refactoring
+
+* **PopperContent:** update positionedFix prop to strategy ([fa1f1ed](https://github.com/reactstrap/reactstrap/commit/fa1f1eddcab1d3a5b70ad8861aef128eafa19fc1))
+
+
+### Features
+
+* **bs5:** add accordion ([#2105](https://github.com/reactstrap/reactstrap/issues/2105)) ([115d204](https://github.com/reactstrap/reactstrap/commit/115d20476c1916106a35eb6e4010f488d99cffb9))
+* **bs5:** Convert Dropdown & DropdownMenu to RTL ([aa51131](https://github.com/reactstrap/reactstrap/commit/aa511319d30a109efb0245afe8b7b275ceff167e))
+* **bs5:** Update tooltip/popover arrow classes ([1c9c037](https://github.com/reactstrap/reactstrap/commit/1c9c037ad9129a68f99acbdda6779fa8ca23193d))
+* **Dropdown:** Add backwards compatible left & right ([61aca5d](https://github.com/reactstrap/reactstrap/commit/61aca5db428c05beb9a2c5f1631d1cf57e357b0a))
+* remove form-control-file class ([6ea074a](https://github.com/reactstrap/reactstrap/commit/6ea074aa0feecb19fe6a33524362eb8cae1fbb6b)), closes [/getbootstrap.com/docs/5.0/migration/#forms-2](https://github.com//getbootstrap.com/docs/5.0/migration//issues/forms-2)
+* remove InputGroupAddon ([706869f](https://github.com/reactstrap/reactstrap/commit/706869fa0b05019e38d78d8877afab7d3481a67a))
+* replace form-control-range with form-range ([bd8383d](https://github.com/reactstrap/reactstrap/commit/bd8383d5bb68f74c3a17e7bafe58196e41ae3992)), closes [/getbootstrap.com/docs/5.0/migration/#forms-2](https://github.com//getbootstrap.com/docs/5.0/migration//issues/forms-2)
+* support form switch ([87156f5](https://github.com/reactstrap/reactstrap/commit/87156f589eb585ddcc01a2120f757bbd38c0ab62))
+* use form-select class with native select ([1764eb3](https://github.com/reactstrap/reactstrap/commit/1764eb32a39ac4788086922aac55d3fbd72dea83)), closes [/getbootstrap.com/docs/5.0/migration/#forms-2](https://github.com//getbootstrap.com/docs/5.0/migration//issues/forms-2)
+* **bs5:** Rename margin utils ([407546c](https://github.com/reactstrap/reactstrap/commit/407546cb490ea7522b38bd0b9d81a54efde6f2f0))
+* **bs5:** Replace .btn-block with utility classes ([755ede1](https://github.com/reactstrap/reactstrap/commit/755ede18b943667a94e40875e7bc82b38c53cb70))
+* **bs5:** change .close to .btn-close ([#2116](https://github.com/reactstrap/reactstrap/issues/2116)) ([0cdc1ce](https://github.com/reactstrap/reactstrap/commit/0cdc1ced7ca505b9899b327a9cf39288acc1b6c8))
+* **bs5:** change no-gutters class to gx-0 in Row ([#2119](https://github.com/reactstrap/reactstrap/issues/2119)) ([884bc98](https://github.com/reactstrap/reactstrap/commit/884bc9841d53030de5fb1a33dc3cc58e7e3651c5))
+* **bs5:** convert .sr-only to .visually-hidden ([4b5b9e5](https://github.com/reactstrap/reactstrap/commit/4b5b9e57933c0321c94a1951a96d40c1f59e305a))
+* **bs5:** replace form-group class with mb-3 ([c807567](https://github.com/reactstrap/reactstrap/commit/c807567a6f9b460211f34f6d477eb24794a4cd11))
+* **bs5:** update badge classes ([#2117](https://github.com/reactstrap/reactstrap/issues/2117)) ([695f06b](https://github.com/reactstrap/reactstrap/commit/695f06b876eda563715e7619e32106cdea246084))
+* update input group to have type dropdown ([5ce2b49](https://github.com/reactstrap/reactstrap/commit/5ce2b492c607372863d5b8d81d6953a7435ef557))
+* **bs5:** Support xxl breakpoint ([13d5311](https://github.com/reactstrap/reactstrap/commit/13d5311d6a6d4eb1ef14bc5667bf1bbe83c07107))
+* **Carousel:** Add dark prop ([ba25aa0](https://github.com/reactstrap/reactstrap/commit/ba25aa0d9219b0441af3b1fe0c475596725821b6))
+* **DropdownMenu:** add-dark-prop ([5cc8c49](https://github.com/reactstrap/reactstrap/commit/5cc8c493565528b2cefd15882852eacf72bfa2f4))
+* **modal:** add fullscreen option to Modal component ([e6eb36e](https://github.com/reactstrap/reactstrap/commit/e6eb36e4e0e8ea7f329c969aaff60b6e807efbc9))
+
+
+### BREAKING CHANGES
+
+* **PopperContent:** to update the old `positionFixed` popper prop to the new `strategy` prop.
+
+# [8.10.0](https://github.com/reactstrap/reactstrap/compare/8.9.0...8.10.0) (2021-09-02)
+
+
+### Features
+
+* **Dropdown:** add support for listbox or menu role ([#2077](https://github.com/reactstrap/reactstrap/issues/2077)) ([fd9e988](https://github.com/reactstrap/reactstrap/commit/fd9e9888b7712905a85684f7822fc75fde38c069))
+
+
+
+# [8.9.0](https://github.com/reactstrap/reactstrap/compare/8.8.1...8.9.0) (2021-01-19)
+
+
+### Features
+
+* **Modal:** Add trapFocus prop ([#2073](https://github.com/reactstrap/reactstrap/issues/2073)) ([6e0fd56](https://github.com/reactstrap/reactstrap/commit/6e0fd565b66c9a16b3187adcb71d52d2d9db2902))
+* **Progress:** Add barStyle prop ([#2075](https://github.com/reactstrap/reactstrap/issues/2075)) ([27faa8e](https://github.com/reactstrap/reactstrap/commit/27faa8e5c575314070f1a35e1969c81e25b13942))
+
+
+
+## [9.2.3](https://github.com/reactstrap/reactstrap/compare/v9.2.2...v9.2.3) (2024-09-26)
+
+
+### Bug Fixes
+
+* **UncontrolledAccordion:** prevent setOpen to set undefined value for open ([#2814](https://github.com/reactstrap/reactstrap/issues/2814)) ([717a5e8](https://github.com/reactstrap/reactstrap/commit/717a5e84263da39eccbd18e88530395afe374d66))
+
+## [9.2.2](https://github.com/reactstrap/reactstrap/compare/v9.2.1...v9.2.2) (2024-01-19)
+
+
+### Bug Fixes
+
+* dropdown with inNavbar bug ([18cc094](https://github.com/reactstrap/reactstrap/commit/18cc094afa8d4e95785d823eb735e06c28547d19))
+
+## [9.2.1](https://github.com/reactstrap/reactstrap/compare/v9.2.0...v9.2.1) (2023-10-05)
+
+
+### Bug Fixes
+
+* **#1680:** arrowClass not applied to arrow ([#2772](https://github.com/reactstrap/reactstrap/issues/2772)) ([aeaf180](https://github.com/reactstrap/reactstrap/commit/aeaf180701511377ab6a00830ccac4fb96e84028))
+* **#2755:** make offcanvas example code readable ([#2768](https://github.com/reactstrap/reactstrap/issues/2768)) ([b932582](https://github.com/reactstrap/reactstrap/commit/b932582798911ebd57ad6735baf9f4fa21d8af7a))
+
+## [9.2.0](https://github.com/reactstrap/reactstrap/compare/v9.1.10...v9.2.0) (2023-06-09)
+
+
+### Features
+
+* **modal:** add 'aria-modal="true"' to modal ([2a43591](https://github.com/reactstrap/reactstrap/commit/2a43591f6d6f2fd6e1e5f7f3bd65caf9efd7f7ab))
+
+
+### Bug Fixes
+
+* **#2662:** remove many instances of default props ([#2752](https://github.com/reactstrap/reactstrap/issues/2752)) ([b7d571c](https://github.com/reactstrap/reactstrap/commit/b7d571c777de6169de01da5cc14f2eb28988071a))
+
+## [9.1.10](https://github.com/reactstrap/reactstrap/compare/v9.1.9...v9.1.10) (2023-05-13)
+
+
+### Bug Fixes
+
+* **#2427:** error building esm files ([#2748](https://github.com/reactstrap/reactstrap/issues/2748)) ([04d571d](https://github.com/reactstrap/reactstrap/commit/04d571dcaa630ccbc8b8363ad06dad436f11780e))
+* properly pass in `isOpen` in modal test ([#2745](https://github.com/reactstrap/reactstrap/issues/2745)) ([8cb0515](https://github.com/reactstrap/reactstrap/commit/8cb051522ddfad48c08651604744caea25b5e68e))
+
+## [9.1.9](https://github.com/reactstrap/reactstrap/compare/v9.1.8...v9.1.9) (2023-04-11)
+
+
+### Bug Fixes
+
+* **#2730:** import error ([#2733](https://github.com/reactstrap/reactstrap/issues/2733)) ([2547f3a](https://github.com/reactstrap/reactstrap/commit/2547f3acfd12299dc0f4e2a5863c5cf82a203ef4))
+
+## [9.1.8](https://github.com/reactstrap/reactstrap/compare/v9.1.7...v9.1.8) (2023-03-29)
+
+
+### Bug Fixes
+
+* esm and lib folder not included in release ([e974d0c](https://github.com/reactstrap/reactstrap/commit/e974d0c180ebece9e35614da595e9cab2d8684b6))
+
+## [9.1.7](https://github.com/reactstrap/reactstrap/compare/v9.1.6...v9.1.7) (2023-03-22)
+
+
+### Bug Fixes
+
+* **#1289:** prevent error in Strict Mode ([#2672](https://github.com/reactstrap/reactstrap/issues/2672)) ([2695bfa](https://github.com/reactstrap/reactstrap/commit/2695bfaca471f187abe2464621509d0b09e64b9f))
+* **#2660:** dropdown closes for complex children ([#2673](https://github.com/reactstrap/reactstrap/issues/2673)) ([fa1fcc8](https://github.com/reactstrap/reactstrap/commit/fa1fcc84511582f5e22d42c73c2ff1bb8c805f9b))
+* **#2664:** close offcanvas when fade is false ([#2677](https://github.com/reactstrap/reactstrap/issues/2677)) ([dac3587](https://github.com/reactstrap/reactstrap/commit/dac3587bc16006697008ed6f248be268f49de4e5))
+* **docs:** remove storybook errors ([#2675](https://github.com/reactstrap/reactstrap/issues/2675)) ([d0f188b](https://github.com/reactstrap/reactstrap/commit/d0f188b31bf9ccd5f262a46bb42ea87dd644049d))
+* issue where attributes could not be passed to the element ([19233ae](https://github.com/reactstrap/reactstrap/commit/19233ae45014045a6b103619b2b43fb4f386d02a))
+* treeshaking ([#2708](https://github.com/reactstrap/reactstrap/issues/2708)) ([fa46b94](https://github.com/reactstrap/reactstrap/commit/fa46b941004bfd37eb5bd2fcdce435d1ddac5066))
+
+## [9.1.6](https://github.com/reactstrap/reactstrap/compare/v9.1.5...v9.1.6) (2023-02-17)
+
+
+### ⚠ BREAKING CHANGES
+
+* add forwardRef to all components that contain innerRef
+
+### Features
+
+* add forwardRef to all components that contain innerRef ([17a141a](https://github.com/reactstrap/reactstrap/commit/17a141acbe9af558c1c3e7cb34fc051c1b1d8d0e))
+
+
+### Bug Fixes
+
+* convert functional components to be forwardRef components vs redefining them as such ([86578ab](https://github.com/reactstrap/reactstrap/commit/86578ab1f9e06653b03db06ed99263fba5e5e279))
+* **Label:** migrate label to rtl ([#2665](https://github.com/reactstrap/reactstrap/issues/2665)) ([8c5cc2b](https://github.com/reactstrap/reactstrap/commit/8c5cc2bac0c219275896657db21f5c2ea5ecdffe))
+* revert v10 merge ([3392ce9](https://github.com/reactstrap/reactstrap/commit/3392ce924ad304e97cede43ddef013a88ef84a6e))
+
+
+### Miscellaneous
+
+* release 9.1.6 ([f32f3d2](https://github.com/reactstrap/reactstrap/commit/f32f3d247b767592a80091e3f1733946b2f74ada))
+
+### [9.1.5](https://www.github.com/reactstrap/reactstrap/compare/v9.1.4...v9.1.5) (2022-10-27)
+
+
+### Bug Fixes
+
+* **accordion:** type error of open in uncontrolledAccordionProps ([#2611](https://www.github.com/reactstrap/reactstrap/issues/2611)) ([b46a23c](https://www.github.com/reactstrap/reactstrap/commit/b46a23c897cca1e8c53729c5e222411028be169d))
+* ensure initial overflow status is stored when opening multiple modals ([c0191ec](https://www.github.com/reactstrap/reactstrap/commit/c0191ecbbba96f3652e6359111a258a33771e2c1))
+
+### [9.1.4](https://www.github.com/reactstrap/reactstrap/compare/v9.1.3...v9.1.4) (2022-08-26)
+
+
+### Bug Fixes
+
+* **#2467:** keyboard support for dropdown listbox ([#2584](https://www.github.com/reactstrap/reactstrap/issues/2584)) ([f04d3a7](https://www.github.com/reactstrap/reactstrap/commit/f04d3a7976bb8623d7d7453d5195cb1d57f5a6dd))
+* **#2593:** fix key prop waring for dropdown ([#2594](https://www.github.com/reactstrap/reactstrap/issues/2594)) ([69526c1](https://www.github.com/reactstrap/reactstrap/commit/69526c1e1a24739fa5d6f13bc5aa4dfd49beeac5))
+
+### [9.1.3](https://www.github.com/reactstrap/reactstrap/compare/v9.1.2...v9.1.3) (2022-08-02)
+
+
+### Bug Fixes
+
+* Use the new `nodeRef` API for `Collapse` ([9527654](https://www.github.com/reactstrap/reactstrap/commit/9527654b74e5695efbb31dff0ebd29812cdef1ee))
+
+### [9.1.2](https://www.github.com/reactstrap/reactstrap/compare/v9.1.1...v9.1.2) (2022-07-13)
+
+
+### Bug Fixes
+
+* **#2545:** change proptype of Spinner size ([2175cbb](https://www.github.com/reactstrap/reactstrap/commit/2175cbb8f1df23b851a693a968021dfa8be15a7b))
+* **#2559:** Removed unused react import from stories ([a3ccab5](https://www.github.com/reactstrap/reactstrap/commit/a3ccab5fb737b6f3c3607ddee57f2fb0524448f5))
+* **exports:** Exports CloseButtom from index.d.ts ([ba815ee](https://www.github.com/reactstrap/reactstrap/commit/ba815eeb3999134ae5ae3e12a1dfdcbfaab00deb))
+
+### [9.1.1](https://www.github.com/reactstrap/reactstrap/compare/v9.1.0...v9.1.1) (2022-06-08)
+
+
+### Bug Fixes
+
+* **DropdownMenu:** add types to updateOnSelect ([e5cd524](https://www.github.com/reactstrap/reactstrap/commit/e5cd52445ee5247a6408c75a212009f345f7270e))
+
+## [9.1.0](https://www.github.com/reactstrap/reactstrap/compare/v9.0.4...v9.1.0) (2022-06-08)
+
+
+### Features
+
+* **CloseButton:** add close button ([9e656f5](https://www.github.com/reactstrap/reactstrap/commit/9e656f50c4d35cb8e32b826316f8761e80af9c3e))
+
+
+### Bug Fixes
+
+* **#2411:** remove scroll from body when modal open ([9d71faa](https://www.github.com/reactstrap/reactstrap/commit/9d71faada222f67683bf19acece3c20b3364a6df))
+* add a flag to DropdownMenu for Popper update ([74a9e4e](https://www.github.com/reactstrap/reactstrap/commit/74a9e4ef5ad8cfdf4e1ab2b9509a0e4ca52c8886))
+
+### [9.0.4](https://www.github.com/reactstrap/reactstrap/compare/v9.0.3...v9.0.4) (2022-06-02)
+
+
+### Bug Fixes
+
+* **#2393:** captions visible twice ([c20fa93](https://www.github.com/reactstrap/reactstrap/commit/c20fa9397ea09811ed2b4da33b136f2aa1e98957))
+* **#2515:** Add missing Typescript exports for Placeholders ([f9e0dfa](https://www.github.com/reactstrap/reactstrap/commit/f9e0dfab37ae0ae2c2183964fa78dc863af320f3))
+* **#2521:** fix `form-check-label`/`form-label` class on Label ([6aee08b](https://www.github.com/reactstrap/reactstrap/commit/6aee08b3bebdbdb1320c4f18382b28d5bc474dd7))
+* **Offcanvas:** make types match existing `direction` prop ([6e60f08](https://www.github.com/reactstrap/reactstrap/commit/6e60f08db14b0f7896c703f41fb6c4c2b7362fd6))
+
+
+### Miscellaneous
+
+* **Button:** convert button to use hooks ([19f85d3](https://www.github.com/reactstrap/reactstrap/commit/19f85d30d3c01f8f60762db55b123efddb4d152b))
+
+### [9.0.3](https://www.github.com/reactstrap/reactstrap/compare/v9.0.2...v9.0.3) (2022-05-26)
+
+
+### Bug Fixes
+
+* **#2501:** Since React 18, errors on Popover and Tooltip ([1110c9c](https://www.github.com/reactstrap/reactstrap/commit/1110c9c39f6018cc0289b419ba887adbe434e301))
+
+### [9.0.2](https://www.github.com/reactstrap/reactstrap/compare/v9.0.1...v9.0.2) (2022-04-13)
+
+
+### Bug Fixes
+
+* `form-row` was removed from Bootsttap 5 ([601845d](https://www.github.com/reactstrap/reactstrap/commit/601845d1c8b687d7c2a8494f5131c728ce1a532c))
+* **docs:** fixed naming in Accordion module ([29beb09](https://www.github.com/reactstrap/reactstrap/commit/29beb09ed4a353ebc2d77611a51cea4d34409bf6))
+* **FormGroup:** dont pass switch prop to tag [#2415](https://www.github.com/reactstrap/reactstrap/issues/2415) ([b63981e](https://www.github.com/reactstrap/reactstrap/commit/b63981eb54af34e1332dfb84c670e2cbca937ee8))
+
+### [9.0.1](https://www.github.com/reactstrap/reactstrap/compare/v9.0.0...v9.0.1) (2021-11-12)
+
+
+### Bug Fixes
+
+* add common js bundle to exports field ([#2386](https://www.github.com/reactstrap/reactstrap/issues/2386)) ([c5bc0fe](https://www.github.com/reactstrap/reactstrap/commit/c5bc0fe54ea27cedb1a43a8dfe37738d13bd4eb6))
+
+## [9.0.0](https://www.github.com/reactstrap/reactstrap/compare/v8.10.1...v9.0.0) (2021-10-27)
+
+
+### ⚠ BREAKING CHANGES
+
+* update positionedFix prop to strategy
+* upgrade to popper 2
+* remove CustomInput
+* remove old InputGroupButtonDropdown
+* remove InputGroupAddon
+* remove Jumbotron component (#2118)
+
+### Features
+
+* **accordion:** add `flush` support and `stayOpen` support ([a6050f5](https://www.github.com/reactstrap/reactstrap/commit/a6050f5ea6cc9ceba63db702663242b571e9f602))
+* **bs5:** add accordion ([#2105](https://www.github.com/reactstrap/reactstrap/issues/2105)) ([1c09448](https://www.github.com/reactstrap/reactstrap/commit/1c09448fdcfbe5db68e057911546ad2d036e805e))
+* **bs5:** add Offcanvas ([9a4bcca](https://www.github.com/reactstrap/reactstrap/commit/9a4bcca7b299f358bb3b953996a9d4afb2f7b602))
+* **bs5:** change .close to .btn-close ([#2116](https://www.github.com/reactstrap/reactstrap/issues/2116)) ([be4df60](https://www.github.com/reactstrap/reactstrap/commit/be4df609ac21cdcbb56c635600dce8eae6c819f1))
+* **bs5:** change no-gutters class to gx-0 in Row ([#2119](https://www.github.com/reactstrap/reactstrap/issues/2119)) ([85b8933](https://www.github.com/reactstrap/reactstrap/commit/85b8933304cb0ae529b6f5d24574b98a929a35bc))
+* **bs5:** convert .sr-only to .visually-hidden ([702ad55](https://www.github.com/reactstrap/reactstrap/commit/702ad553b37a25ab516fc147201622ad122c39d1))
+* **bs5:** Convert Dropdown & DropdownMenu to RTL ([7417984](https://www.github.com/reactstrap/reactstrap/commit/741798459178b825f53cedaa54c33326a81b8564))
+* **bs5:** Rename margin utils ([35a37ef](https://www.github.com/reactstrap/reactstrap/commit/35a37ef21d751207b4951aa5b6aca34b9efd4d5a))
+* **bs5:** Replace .btn-block with utility classes ([4dc1dcd](https://www.github.com/reactstrap/reactstrap/commit/4dc1dcd21bd51d7bd88b40a0b249e02b0edaf0b0))
+* **bs5:** replace form-group class with mb-3 ([cbcb2e3](https://www.github.com/reactstrap/reactstrap/commit/cbcb2e3abc240f64833967996cce4c4878529170))
+* **bs5:** Support xxl breakpoint ([4fb7cdd](https://www.github.com/reactstrap/reactstrap/commit/4fb7cdd7791d11071fdc473e990ca704e0374fc2))
+* **bs5:** update badge classes ([#2117](https://www.github.com/reactstrap/reactstrap/issues/2117)) ([7859900](https://www.github.com/reactstrap/reactstrap/commit/785990048f88699df5f31111c525fdaa7d34a640))
+* **bs5:** Update tooltip/popover arrow classes ([9ad870e](https://www.github.com/reactstrap/reactstrap/commit/9ad870ea3518a9a81716e945d46c06a7c341d7fe))
+* **carousel:** add Bootstrap5 updates ([a698814](https://www.github.com/reactstrap/reactstrap/commit/a69881437fe3d861c44e9493c1983c7c7d13ae34))
+* **Carousel:** Add dark prop ([01f64df](https://www.github.com/reactstrap/reactstrap/commit/01f64dfcf89a44e41754f7669d46830af942b826))
+* **collapse:** add horizontal collapse ([f780187](https://www.github.com/reactstrap/reactstrap/commit/f7801874dc5b8777c8624709f99d62feb19b3563))
+* **Dropdown:** Add backwards compatible left & right ([f8b415f](https://www.github.com/reactstrap/reactstrap/commit/f8b415f9a989b4363adc4ba79c190db9fb0d38f0))
+* **DropdownMenu:** add-dark-prop ([2e22d7b](https://www.github.com/reactstrap/reactstrap/commit/2e22d7bbfa3764399c41ae8d360346c255e4bc44))
+* **forms:** Add support for floating labels ([1cc8a14](https://www.github.com/reactstrap/reactstrap/commit/1cc8a14577b044d10fdea4f804996f49afca04d8))
+* **ListGroup:** Add ListGroupNumbered ([02b3b71](https://www.github.com/reactstrap/reactstrap/commit/02b3b71e62668493f61253a6a67919ec4c18ba97))
+* **modal:** add fullscreen option to Modal component ([a580f23](https://www.github.com/reactstrap/reactstrap/commit/a580f23a8eeefae21b0c6ba36b8da470ee925cd2))
+* **Navbar:** add container options ([f0054bf](https://www.github.com/reactstrap/reactstrap/commit/f0054bf6ef8945e591f79fe403ece3f33a5cef8a))
+* **Placeholder:** add component ([0c9294c](https://www.github.com/reactstrap/reactstrap/commit/0c9294c44108310a84c7f2518bfd9d631d51e835))
+* remove CustomInput ([c0e8a68](https://www.github.com/reactstrap/reactstrap/commit/c0e8a68348c52aaee55168d8601fb534597b6313))
+* remove form-control-file class ([f601576](https://www.github.com/reactstrap/reactstrap/commit/f6015765fb4988e484483b77b032ea00ebde59c2))
+* remove InputGroupAddon ([322d0ad](https://www.github.com/reactstrap/reactstrap/commit/322d0add23f42e917f50286ba796eea4af64c6ae))
+* remove Jumbotron component ([#2118](https://www.github.com/reactstrap/reactstrap/issues/2118)) ([2c912ab](https://www.github.com/reactstrap/reactstrap/commit/2c912abfb6027890d54ac091e18d515152cc395f))
+* remove old InputGroupButtonDropdown ([3df07f6](https://www.github.com/reactstrap/reactstrap/commit/3df07f62b62a2648e13f344cdc3a8c864b6a8b07))
+* replace form-control-range with form-range ([06868e2](https://www.github.com/reactstrap/reactstrap/commit/06868e28dd2a399297b5f9c9efc6b226487386b8))
+* support form switch ([f403595](https://www.github.com/reactstrap/reactstrap/commit/f40359558e083306e33cb0bdafba9ad615a6bbe3))
+* update input group to have type dropdown ([6c60226](https://www.github.com/reactstrap/reactstrap/commit/6c602261dd26f8eebf8a4ebd32e0bed8a08522ef))
+* update positionedFix prop to strategy ([65bf0f0](https://www.github.com/reactstrap/reactstrap/commit/65bf0f0dae5732dc4a7daef59717fa35c0a2a07d))
+* upgrade to popper 2 ([35840ef](https://www.github.com/reactstrap/reactstrap/commit/35840ef90ab6a3f5ae94a57cbde8331fc791870b))
+* use form-select class with native select ([1e6204b](https://www.github.com/reactstrap/reactstrap/commit/1e6204b925e23d97d38532265f4828964e0e1638))
+
+
+### Bug Fixes
+
+* **build:** set --compress false for microbundle build ([#2314](https://www.github.com/reactstrap/reactstrap/issues/2314)) ([26c85fb](https://www.github.com/reactstrap/reactstrap/commit/26c85fbdbf04399aab392565c3e6027023886538))
+* **Button:** remove extra close icon in `btn-close` ([#2318](https://www.github.com/reactstrap/reactstrap/issues/2318)) ([e4affb4](https://www.github.com/reactstrap/reactstrap/commit/e4affb41a15eb0e1d723b3f835cafb8959b4f5d9))
+* **InputGroup:** toggle if clicking dropdown input ([1adc147](https://www.github.com/reactstrap/reactstrap/commit/1adc147d600309705ad25116121b89ad65b6409d))
+* **Label:** add `form-label` class for labels of vertical forms ([#2317](https://www.github.com/reactstrap/reactstrap/issues/2317)) ([3bfce12](https://www.github.com/reactstrap/reactstrap/commit/3bfce12c4bdc9615399e8821629328f8a441d9b8))
+* **popover:** add default popper offset for popover ([cef32c6](https://www.github.com/reactstrap/reactstrap/commit/cef32c6a051fdfe532d6e3b1e86b8dcf60087558))
+* **ToastHeader:** Remove charCode default property. ([#2343](https://www.github.com/reactstrap/reactstrap/issues/2343)) ([03bbd15](https://www.github.com/reactstrap/reactstrap/commit/03bbd1508a2262a34a8960e1faa95585689fbaea)), closes [#2338](https://www.github.com/reactstrap/reactstrap/issues/2338)
+* **types:** add 'swtch' to `InputType` ([#2340](https://www.github.com/reactstrap/reactstrap/issues/2340)) ([302d41e](https://www.github.com/reactstrap/reactstrap/commit/302d41eb20054d5bf9c6fd1ddc651dbafcce46f1))
+* **types:** export AccordionBody types ([#2312](https://www.github.com/reactstrap/reactstrap/issues/2312)) ([d4c184b](https://www.github.com/reactstrap/reactstrap/commit/d4c184bd5c738b0905d02e56a6f2705e2cd9bb70))
+* **types:** export UncontrolledAccordion types ([#2313](https://www.github.com/reactstrap/reactstrap/issues/2313)) ([f7d5cd6](https://www.github.com/reactstrap/reactstrap/commit/f7d5cd664417cbbeb3e17f6ab0097ec024647c64))
+* **types:** import React for UncontrolledAccordion type defs ([#2292](https://www.github.com/reactstrap/reactstrap/issues/2292)) ([54df194](https://www.github.com/reactstrap/reactstrap/commit/54df194dd36205d782ec1985b383a1e18137186b))
+* **types:** remove duplicate types/lib/index.d.ts ([#2316](https://www.github.com/reactstrap/reactstrap/issues/2316)) ([52bd719](https://www.github.com/reactstrap/reactstrap/commit/52bd7192c453c5333c00603f6bc8555f4e10b5f6))
+* **types:** use types from @popperjs/core ([10fd0b2](https://www.github.com/reactstrap/reactstrap/commit/10fd0b28d661b368bead1006ea075435ad911d55))
+
+### [8.10.1](https://www.github.com/reactstrap/reactstrap/compare/v8.10.0...v8.10.1) (2021-10-26)
+
+
+### Bug Fixes
+
+* **UncontrolledDropdown:** Fix onToggle - a consistent isOpen value ([ee54164](https://www.github.com/reactstrap/reactstrap/commit/ee54164a142c9ae4d43a2a8db4f6a5c088b4eff9))
+
+## [8.8.1](https://github.com/reactstrap/reactstrap/compare/8.8.0...8.8.1) (2020-12-29)
+
+
+### Bug Fixes
+
+* Prevent popover/tooltip rendering if target not resolved ([#2059](https://github.com/reactstrap/reactstrap/issues/2059)) ([de06e9f](https://github.com/reactstrap/reactstrap/commit/de06e9ff12e954c92ba0964e615723e9a44f9269))
+
+
+
+# [8.8.0](https://github.com/reactstrap/reactstrap/compare/8.7.1...8.8.0) (2020-12-23)
+
+
+### Bug Fixes
+
+* **Modal:** Trap focus on opened modal ([#1941](https://github.com/reactstrap/reactstrap/issues/1941)) ([bf46484](https://github.com/reactstrap/reactstrap/commit/bf46484d2ee1e0d570170d59152fcd0346bfe434)), closes [#1497](https://github.com/reactstrap/reactstrap/issues/1497) [#1679](https://github.com/reactstrap/reactstrap/issues/1679)
+* Make tooltips fade out ([#2041](https://github.com/reactstrap/reactstrap/issues/2041)) ([3fb5476](https://github.com/reactstrap/reactstrap/commit/3fb5476515aa01e658426e72dfbe5e7bc517b460))
+* **Popover:** Select correct parent target when target children clicked ([#2038](https://github.com/reactstrap/reactstrap/issues/2038)) ([6740a57](https://github.com/reactstrap/reactstrap/commit/6740a57268dd87704c0215aa45a7e38babb5b426)), closes [#1990](https://github.com/reactstrap/reactstrap/issues/1990)
+
+
+### Features
+
+* add List and ListInlineItem components ([#2033](https://github.com/reactstrap/reactstrap/issues/2033)) ([a97a834](https://github.com/reactstrap/reactstrap/commit/a97a8345f3998e9388d42550b8e70aaa62a5be50))
+* add positionFixed prop to Tooltip and Popover ([#2039](https://github.com/reactstrap/reactstrap/issues/2039)) ([a330ce6](https://github.com/reactstrap/reactstrap/commit/a330ce65e1a38dd0a14e1bc0ca37f86740964df1))
+* **Dropdown:** Added container prop to DropdownMenu using React.portal ([#2016](https://github.com/reactstrap/reactstrap/issues/2016)) ([bd313c2](https://github.com/reactstrap/reactstrap/commit/bd313c23e5d1dee984e65e5fdc167fe83f3831a9))
+
+
+
+## [8.7.1](https://github.com/reactstrap/reactstrap/compare/8.7.0...8.7.1) (2020-11-03)
+
+
+### Bug Fixes
+
+* **types:** Fix Col and Input types ([#2008](https://github.com/reactstrap/reactstrap/issues/2008)) ([363dfbe](https://github.com/reactstrap/reactstrap/commit/363dfbe6a46ef04c61f0b249bd5c0a80ec1c1e3e))
+* **types:** Fix reference to CSSModule ([#2007](https://github.com/reactstrap/reactstrap/issues/2007)) ([54afca4](https://github.com/reactstrap/reactstrap/commit/54afca47879fbb8a2713b57ff452fa566e5255d1))
+
+
+
+# [8.7.0](https://github.com/reactstrap/reactstrap/compare/8.6.0...8.7.0) (2020-10-31)
+
+
+### Bug Fixes
+
+* **DropdownMenu:** Prevent manual styles from overriding popper styles ([#1984](https://github.com/reactstrap/reactstrap/issues/1984)) ([dc2401b](https://github.com/reactstrap/reactstrap/commit/dc2401b388777b011bc6c75426a86a78013a2b8c))
+* **Progress:** Fix parent element props being spread to children ([#1970](https://github.com/reactstrap/reactstrap/issues/1970)) ([c6a790c](https://github.com/reactstrap/reactstrap/commit/c6a790c7f4bdbfac0540d53896834638edf9c793))
+* **types:** Add missing innerRef typings ([#1994](https://github.com/reactstrap/reactstrap/issues/1994)) ([fe24f69](https://github.com/reactstrap/reactstrap/commit/fe24f69be2dc9953896c49be73254f7787ad34ff)), closes [#1993](https://github.com/reactstrap/reactstrap/issues/1993)
+
+
+### Features
+
+* Add typescript definitions ([#1976](https://github.com/reactstrap/reactstrap/issues/1976)) ([2a47626](https://github.com/reactstrap/reactstrap/commit/2a47626dc088f1983239f606c91f6294c7e756d7))
+* **DropdownItem:** Add support for .dropdown-item-text ([#1971](https://github.com/reactstrap/reactstrap/issues/1971)) ([c41b172](https://github.com/reactstrap/reactstrap/commit/c41b172180b92ba3f53444ca8f409c1cd10f895d))
+
+
+
+# [8.6.0](https://github.com/reactstrap/reactstrap/compare/8.5.1...8.6.0) (2020-09-18)
+
+
+### Bug Fixes
+
+* **Input:** Allow numbers for size prop ([#1948](https://github.com/reactstrap/reactstrap/issues/1948)) ([b4c45af](https://github.com/reactstrap/reactstrap/commit/b4c45afe658ee5008274fbf687b22d35dfe12c51))
+* **Progress:** pass attributes to nested Progress bar ([#1919](https://github.com/reactstrap/reactstrap/issues/1919)) ([f3c2586](https://github.com/reactstrap/reactstrap/commit/f3c2586bbf1cc86459b5c2fd4cb025512aead432)), closes [#1847](https://github.com/reactstrap/reactstrap/issues/1847) [#1847](https://github.com/reactstrap/reactstrap/issues/1847)
+
+
+### Features
+
+* **Button:** onClick of inner button returns value of props.onClick. ([f09cdd6](https://github.com/reactstrap/reactstrap/commit/f09cdd6c2fb496948760e962383b1fa657a2c5e0))
+
+
+
+## [8.5.1](https://github.com/reactstrap/reactstrap/compare/8.5.0...8.5.1) (2020-06-24)
+
+
+### Bug Fixes
+
+* **polyfill:** check that window exists before defining CustomEvent ([#1855](https://github.com/reactstrap/reactstrap/issues/1855)) ([74b6802](https://github.com/reactstrap/reactstrap/commit/74b6802))
+
+
+
+# [8.5.0](https://github.com/reactstrap/reactstrap/compare/8.4.1...8.5.0) (2020-06-23)
+
+
+### Bug Fixes
+
+* **Carousel:** ie11 compatibility changes([#799](https://github.com/reactstrap/reactstrap/issues/799)) ([#1585](https://github.com/reactstrap/reactstrap/issues/1585)) ([1fd2d22](https://github.com/reactstrap/reactstrap/commit/1fd2d22)), closes [/github.com/reactjs/react-transition-group/blob/9e3b2d3c09b78e755bdc837b7b38337812ede2c9/src/TransitionGroup.js#L11](https://github.com//github.com/reactjs/react-transition-group/blob/9e3b2d3c09b78e755bdc837b7b38337812ede2c9/src/TransitionGroup.js/issues/L11)
+* **CustomInput:** hidden attribute [#1741](https://github.com/reactstrap/reactstrap/issues/1741) ([#1777](https://github.com/reactstrap/reactstrap/issues/1777)) ([bb39b55](https://github.com/reactstrap/reactstrap/commit/bb39b55))
+* **DropdownToggle:** fix 0 value [#1496](https://github.com/reactstrap/reactstrap/issues/1496) ([#1780](https://github.com/reactstrap/reactstrap/issues/1780)) ([c4f86d5](https://github.com/reactstrap/reactstrap/commit/c4f86d5))
+* **Input:** Aria-invalid attribute ([#1782](https://github.com/reactstrap/reactstrap/issues/1782)) ([ca113f1](https://github.com/reactstrap/reactstrap/commit/ca113f1))
+* **Modal:** fix modal close immediately unmounted ([c8def29](https://github.com/reactstrap/reactstrap/commit/c8def29)), closes [#1323](https://github.com/reactstrap/reactstrap/issues/1323)
+* **TooltipPopoverWrapper:** replacing find with filter to preve… ([#1776](https://github.com/reactstrap/reactstrap/issues/1776)) ([54648b6](https://github.com/reactstrap/reactstrap/commit/54648b6)), closes [#1774](https://github.com/reactstrap/reactstrap/issues/1774)
+
+
+### Features
+
+* **Input:** Use form-control-range for range inputs ([#1772](https://github.com/reactstrap/reactstrap/issues/1772)) ([56c1d77](https://github.com/reactstrap/reactstrap/commit/56c1d77))
+* **Modal:** Allow passing in an element selector to append mod… ([#1817](https://github.com/reactstrap/reactstrap/issues/1817)) ([8f8cc98](https://github.com/reactstrap/reactstrap/commit/8f8cc98))
+* **Modal:** match container behaviour to targetPropType like of Popover and Tooltip ([#1844](https://github.com/reactstrap/reactstrap/issues/1844)) ([6ea2488](https://github.com/reactstrap/reactstrap/commit/6ea2488))
+* **PopoverContent:** add x-out-of-boundaries attribute ([607ce10](https://github.com/reactstrap/reactstrap/commit/607ce10)), closes [#1835](https://github.com/reactstrap/reactstrap/issues/1835)
+* **Progress:** add aria props ([#1681](https://github.com/reactstrap/reactstrap/issues/1681)) ([#1787](https://github.com/reactstrap/reactstrap/issues/1787)) ([93f171d](https://github.com/reactstrap/reactstrap/commit/93f171d))
+* **Progress:** Allow passing in custom style object ([#1771](https://github.com/reactstrap/reactstrap/issues/1771)) ([a79417a](https://github.com/reactstrap/reactstrap/commit/a79417a))
+* **TooltipPopoverWrapper:** scheduleUpdate as render prop ([#1792](https://github.com/reactstrap/reactstrap/issues/1792)) ([cda6fe9](https://github.com/reactstrap/reactstrap/commit/cda6fe9))
+
+
+
+## [8.4.1](https://github.com/reactstrap/reactstrap/compare/8.4.0...8.4.1) (2020-01-27)
+
+
+### Bug Fixes
+
+* **Modal:** Allow esc to close static backdrop modal when keybo… ([#1767](https://github.com/reactstrap/reactstrap/issues/1767)) ([49da7b5](https://github.com/reactstrap/reactstrap/commit/49da7b5)), closes [#1766](https://github.com/reactstrap/reactstrap/issues/1766)
+* **Tooltip,Popover:** account for shadowDOM target ([#1769](https://github.com/reactstrap/reactstrap/issues/1769)) ([10ccf12](https://github.com/reactstrap/reactstrap/commit/10ccf12)), closes [#1691](https://github.com/reactstrap/reactstrap/issues/1691)
+
+
+
+# [8.4.0](https://github.com/reactstrap/reactstrap/compare/8.3.2...8.4.0) (2020-01-17)
+
+
+### Bug Fixes
+
+* revert breaking change ([#1760](https://github.com/reactstrap/reactstrap/issues/1760)) ([eb37426](https://github.com/reactstrap/reactstrap/commit/eb37426))
+
+
+
+## [8.3.2](https://github.com/reactstrap/reactstrap/compare/8.3.1...8.3.2) (2020-01-16)
+
+
+### Bug Fixes
+
+* **Modal:** Prevent static backdrop animation when modal clicked ([#1755](https://github.com/reactstrap/reactstrap/issues/1755)) ([79efb4a](https://github.com/reactstrap/reactstrap/commit/79efb4a))
+
+
+
+## [8.3.1](https://github.com/reactstrap/reactstrap/compare/8.3.0...8.3.1) (2020-01-15)
+
+
+### Bug Fixes
+
+* **build:** fix DropdownContext import/export ([96188f4](https://github.com/reactstrap/reactstrap/commit/96188f4))
+
+
+
+# [8.3.0](https://github.com/reactstrap/reactstrap/compare/8.2.0...8.3.0) (2020-01-15)
+
+## NOT PUBLISHED TO NPM DUE TO RELEASE BUILD FAILURE, USE 8.3.1
+
+### Bug Fixes
+
+* remove aria-hidden attribute from tooltips and popovers ([#1747](https://github.com/reactstrap/reactstrap/issues/1747)) ([009a2bd](https://github.com/reactstrap/reactstrap/commit/009a2bd))
+* **Dropdown:** Avoid preventDefault for things like F5 ([#1464](https://github.com/reactstrap/reactstrap/issues/1464)) ([305d3f0](https://github.com/reactstrap/reactstrap/commit/305d3f0)), closes [#1453](https://github.com/reactstrap/reactstrap/issues/1453)
+* **DropdownContext:** wrap dropdown components to provide context prop ([64847df](https://github.com/reactstrap/reactstrap/commit/64847df)), closes [#1457](https://github.com/reactstrap/reactstrap/issues/1457) [#1462](https://github.com/reactstrap/reactstrap/issues/1462)
+* **DropdownToggle:** pass innerRef to popper ([c088c58](https://github.com/reactstrap/reactstrap/commit/c088c58)), closes [#1471](https://github.com/reactstrap/reactstrap/issues/1471)
+* **Modal:** run close based on prop, not state ([310b061](https://github.com/reactstrap/reactstrap/commit/310b061)), closes [#1626](https://github.com/reactstrap/reactstrap/issues/1626)
+* **Tooltip:** autohide broken since default delay was zero ([#1733](https://github.com/reactstrap/reactstrap/issues/1733)) ([87a6bda](https://github.com/reactstrap/reactstrap/commit/87a6bda)), closes [#1692](https://github.com/reactstrap/reactstrap/issues/1692)
+* **Tooltip:** fix nested elements within target ([#1746](https://github.com/reactstrap/reactstrap/issues/1746)) ([fed4bcf](https://github.com/reactstrap/reactstrap/commit/fed4bcf)), closes [#1736](https://github.com/reactstrap/reactstrap/issues/1736)
+* **Tooltip:** fix render failure if target ref is null ([#1734](https://github.com/reactstrap/reactstrap/issues/1734)) ([853b56e](https://github.com/reactstrap/reactstrap/commit/853b56e)), closes [#1686](https://github.com/reactstrap/reactstrap/issues/1686)
+
+
+### Features
+
+* **Carousel:** Add touch swipe support ([#1731](https://github.com/reactstrap/reactstrap/issues/1731)) ([8a12330](https://github.com/reactstrap/reactstrap/commit/8a12330))
+* **Modal:** Added static backdrop animation defined in Bootstr… ([#1750](https://github.com/reactstrap/reactstrap/issues/1750)) ([7d44f36](https://github.com/reactstrap/reactstrap/commit/7d44f36))
+
+
+
+# [8.2.0](https://github.com/reactstrap/reactstrap/compare/8.1.1...8.2.0) (2019-12-05)
+
+
+### Bug Fixes
+
+* **getTarget:** return array like when allElements parameter is true ([#1687](https://github.com/reactstrap/reactstrap/issues/1687)) ([0702c45](https://github.com/reactstrap/reactstrap/commit/0702c45))
+* **Tooltip:** default value of trigger changed ([#1695](https://github.com/reactstrap/reactstrap/issues/1695)) ([ae48d93](https://github.com/reactstrap/reactstrap/commit/ae48d93)), closes [#1676](https://github.com/reactstrap/reactstrap/issues/1676)
+
+
+### Features
+
+* **ButtonToggle:** add focus styling on button and toggle ([#1660](https://github.com/reactstrap/reactstrap/issues/1660)) ([8980713](https://github.com/reactstrap/reactstrap/commit/8980713)), closes [#1648](https://github.com/reactstrap/reactstrap/issues/1648)
+* **Container:** Added responsive container support ([#1724](https://github.com/reactstrap/reactstrap/issues/1724)) ([31bb211](https://github.com/reactstrap/reactstrap/commit/31bb211)), closes [#1721](https://github.com/reactstrap/reactstrap/issues/1721)
+* **ListGroup:** Add horizontal prop ([#1715](https://github.com/reactstrap/reactstrap/issues/1715)) ([284a543](https://github.com/reactstrap/reactstrap/commit/284a543))
+* **Navbar:** adds NavbarText component ([#1711](https://github.com/reactstrap/reactstrap/issues/1711)) ([6db1083](https://github.com/reactstrap/reactstrap/commit/6db1083)), closes [#1707](https://github.com/reactstrap/reactstrap/issues/1707)
+* **Popover/Tooltip:** add popperClassName property ([#1674](https://github.com/reactstrap/reactstrap/issues/1674)) ([44e85a8](https://github.com/reactstrap/reactstrap/commit/44e85a8)), closes [#1484](https://github.com/reactstrap/reactstrap/issues/1484)
+* **Row:** Add row columns support ([#1720](https://github.com/reactstrap/reactstrap/issues/1720)) ([1fb3c17](https://github.com/reactstrap/reactstrap/commit/1fb3c17))
+* **UncontrolledDropdown:** add onToggle callback ([#1705](https://github.com/reactstrap/reactstrap/issues/1705)) ([d9cae30](https://github.com/reactstrap/reactstrap/commit/d9cae30))
+
+
+
+## [8.1.1](https://github.com/reactstrap/reactstrap/compare/8.1.0...8.1.1) (2019-10-18)
+
+
+### Bug Fixes
+
+* **Carousel:** rename unsafe lifecycles ([940438f](https://github.com/reactstrap/reactstrap/commit/940438f))
+* **Dropdown:** fixed a11y property error message ([#1673](https://github.com/reactstrap/reactstrap/issues/1673))([87d28b6](https://github.com/reactstrap/reactstrap/commit/87d28b6)), closes [#1670](https://github.com/reactstrap/reactstrap/issues/1670)
+
+
+
+# [8.1.0](https://github.com/reactstrap/reactstrap/compare/8.0.1...8.1.0) (2019-10-18)
+
+
+### Bug Fixes
+
+* **ButtonDropdown:** add close event when Escape key is pressed ([#1634](https://github.com/reactstrap/reactstrap/issues/1634)) ([#1635](https://github.com/reactstrap/reactstrap/issues/1635)) ([911d779](https://github.com/reactstrap/reactstrap/commit/911d779))
+* **Carousel:** Add pointer on hover for controls ([#1654](https://github.com/reactstrap/reactstrap/issues/1654)) ([32f0c0d](https://github.com/reactstrap/reactstrap/commit/32f0c0d)), closes [#1631](https://github.com/reactstrap/reactstrap/issues/1631)
+* **Collapse:** add aria-expanded attribute ([#1657](https://github.com/reactstrap/reactstrap/issues/1657)) ([2fdf15a](https://github.com/reactstrap/reactstrap/commit/2fdf15a))
+* **CustomInput:** remove type prop from input node when type is select ([3e4c23f](https://github.com/reactstrap/reactstrap/commit/3e4c23f))
+* **CustomInput[type=file]:** add CustomFileInput component ([#1461](https://github.com/reactstrap/reactstrap/issues/1461)) ([25e2480](https://github.com/reactstrap/reactstrap/commit/25e2480)), closes [#1460](https://github.com/reactstrap/reactstrap/issues/1460)
+* **Dropdown:** disabled toggle ([#1571](https://github.com/reactstrap/reactstrap/issues/1571)) ([b4edeb8](https://github.com/reactstrap/reactstrap/commit/b4edeb8)), closes [#1542](https://github.com/reactstrap/reactstrap/issues/1542)
+* **Tooltip:** Support for multiple target elements ([#1465](https://github.com/reactstrap/reactstrap/issues/1465)) ([45775c0](https://github.com/reactstrap/reactstrap/commit/45775c0)), closes [#1185](https://github.com/reactstrap/reactstrap/issues/1185) [#1185](https://github.com/reactstrap/reactstrap/issues/1185) [#1185](https://github.com/reactstrap/reactstrap/issues/1185) [#1185](https://github.com/reactstrap/reactstrap/issues/1185)
+* **UncontrolledCarousel:** use item.key instead of item.src as… ([#1649](https://github.com/reactstrap/reactstrap/issues/1649)) ([5b9e758](https://github.com/reactstrap/reactstrap/commit/5b9e758)), closes [#1536](https://github.com/reactstrap/reactstrap/issues/1536)
+* **Popover:** PopperContent memory leak ([#1669](https://github.com/reactstrap/reactstrap/issues/1669)) ([54d459c](https://github.com/reactstrap/reactstrap/commit/5b9e758)), closes [#1482](https://github.com/reactstrap/reactstrap/issues/1482) [#1488](https://github.com/reactstrap/reactstrap/issues/1488) [#1664](https://github.com/reactstrap/reactstrap/issues/1664)
+
+
+### Features
+
+* **Dropdown:** add a11y prop to tab moves focus ([#1600](https://github.com/reactstrap/reactstrap/issues/1600)) ([1bd965f](https://github.com/reactstrap/reactstrap/commit/1bd965f)), closes [#1441](https://github.com/reactstrap/reactstrap/issues/1441)
+* **NavbarToggler:** add aria-label to NavbarToggler ([#1633](https://github.com/reactstrap/reactstrap/issues/1633)) ([dc0b8ae](https://github.com/reactstrap/reactstrap/commit/dc0b8ae)), closes [#1632](https://github.com/reactstrap/reactstrap/issues/1632)
+
+
+
+
+## [8.0.1](https://github.com/reactstrap/reactstrap/compare/8.0.0...8.0.1) (2019-07-10)
+
+
+### Bug Fixes
+
+* **DropdownMenu:** Allow positionFixed prop to be passed through ([#1538](https://github.com/reactstrap/reactstrap/issues/1538)) ([01466ae](https://github.com/reactstrap/reactstrap/commit/01466ae)), closes [#1473](https://github.com/reactstrap/reactstrap/issues/1473)
+* **FormGroup:** allow disable when tag is fieldset ([#1547](https://github.com/reactstrap/reactstrap/issues/1547)) ([0736f80](https://github.com/reactstrap/reactstrap/commit/0736f80)), closes [#1546](https://github.com/reactstrap/reactstrap/issues/1546)
+* **Modal:** handle init modal in SSR ([#1495](https://github.com/reactstrap/reactstrap/issues/1495)) ([c844ab1](https://github.com/reactstrap/reactstrap/commit/c844ab1))
+* **Modal:** update condition to call `setFocus` in case open mo… ([#1514](https://github.com/reactstrap/reactstrap/issues/1514)) ([ae6fe93](https://github.com/reactstrap/reactstrap/commit/ae6fe93))
+* **Tooltip:** clear timeouts on unmount ([#1562](https://github.com/reactstrap/reactstrap/issues/1562)) ([e85238b](https://github.com/reactstrap/reactstrap/commit/e85238b)), closes [#1255](https://github.com/reactstrap/reactstrap/issues/1255)
+
+
+
+
+# [8.0.0](https://github.com/reactstrap/reactstrap/compare/7.1.0...8.0.0) (2019-04-03)
+
+
+### Bug Fixes
+
+* **Carousel:** remove inappropriate role=listbox ([#1385](https://github.com/reactstrap/reactstrap/issues/1385)) ([32eb8ed](https://github.com/reactstrap/reactstrap/commit/32eb8ed))
+* **Modal:** fix exception in focus management ([#1382](https://github.com/reactstrap/reactstrap/issues/1382)) ([5cc9af5](https://github.com/reactstrap/reactstrap/commit/5cc9af5))
+* **Modal:** set Modal.openCount floor to 0 ([#1368](https://github.com/reactstrap/reactstrap/issues/1368)) ([71f9574](https://github.com/reactstrap/reactstrap/commit/71f9574))
+* **Popover:** touch not opening popover on mobile ([#1425](https://github.com/reactstrap/reactstrap/issues/1425)) ([#1426](https://github.com/reactstrap/reactstrap/issues/1426)) ([ad2a9a0](https://github.com/reactstrap/reactstrap/commit/ad2a9a0))
+* **Table:** add CSS Module support for responsive Table ([#1429](https://github.com/reactstrap/reactstrap/issues/1429)) ([#1430](https://github.com/reactstrap/reactstrap/issues/1430)) ([1e2dc5b](https://github.com/reactstrap/reactstrap/commit/1e2dc5b))
+* **utils:** Shim Element in non-DOM environments ([#1387](https://github.com/reactstrap/reactstrap/issues/1387)) ([eb4ee93](https://github.com/reactstrap/reactstrap/commit/eb4ee93))
+
+
+### Code Refactoring
+
+* **Modal, Dropdown{*}, PopperContent, Tabs:** go to React Async Rendering ([#1427](https://github.com/reactstrap/reactstrap/issues/1427)) ([1afb2c2](https://github.com/reactstrap/reactstrap/commit/1afb2c2))
+
+
+### Features
+
+* **CustomInput:** added htmlFor prop ([#1417](https://github.com/reactstrap/reactstrap/issues/1417)) ([a590880](https://github.com/reactstrap/reactstrap/commit/a590880))
+* **Modal:** add optional return focus after close ([#1424](https://github.com/reactstrap/reactstrap/issues/1424)) ([33cfce6](https://github.com/reactstrap/reactstrap/commit/33cfce6))
+* **Modal:** add scrollable prop ([#1435](https://github.com/reactstrap/reactstrap/issues/1435)) ([9f7dd45](https://github.com/reactstrap/reactstrap/commit/9f7dd45))
+* **pagination-links:** added props for first and last. changed carets… ([#1410](https://github.com/reactstrap/reactstrap/issues/1410)) ([70cfca2](https://github.com/reactstrap/reactstrap/commit/70cfca2))
+* **Popover:** add default toggleable fade support ([#1364](https://github.com/reactstrap/reactstrap/issues/1364)) ([#1364](https://github.com/reactstrap/reactstrap/issues/1364)) ([ee15c86](https://github.com/reactstrap/reactstrap/commit/ee15c86)), closes [#363](https://github.com/reactstrap/reactstrap/issues/363)
+* **Popover/Tooltip:** ability to pass through flip prop ([#1443](https://github.com/reactstrap/reactstrap/issues/1443)) ([4a5a8a3](https://github.com/reactstrap/reactstrap/commit/4a5a8a3))
+* **Toast:** add support for Toasts ([#1447](https://github.com/reactstrap/reactstrap/issues/1447)) ([7ea7610](https://github.com/reactstrap/reactstrap/commit/7ea7610)), closes [#1384](https://github.com/reactstrap/reactstrap/issues/1384) [#1346](https://github.com/reactstrap/reactstrap/issues/1346)
+
+
+### BREAKING CHANGES
+
+* **Modal, Dropdown{*}, PopperContent, Tabs:** using new Context API, react-popper v. '1.3.3'
+* **pagination-links:** Now the `next` and `previous` props are displaying single carets instead of double caret. To get the old style, use `first` and `last` props instead of `previous` and `next` respectfully and set `aria-label` to `Next` or `Previous`.
+* **Popover:** Popover and Tooltip will now fade in and out (like bootstrap's default). To get the previous behavior use fade={false}
+
+
+### Removed Deprecations
+
+* **`Card`'s `block` prop**: use `Card`s `body` prop.
+* **`Input`'s `static` prop**: use `Input`s `plaintext` prop.
+* **`Dropdown`'s `dropup` prop**: use `Dropdown`s `direction` prop with the value of `"up"`.
+* **`Navbar`'s `toggleable` prop**: use `Navbar`s `expand` prop (see docs)`.
+* **inverse prop**: use `dark` prop.
+* **CardBlock**: use `CardBody`.
+* **InputGroupButton**: use `InputGroupAddon`.
+* **NavDropdown**: use `Dropdown` with `nav` prop.
+* **PopoverContent**: use `PopoverBody`.
+* **PopoverTitle**: use `PopoverHeader`.
+* **UncontrolledNavDropdown**: use `UncontrolledDropdown` with `nav` prop.
+
+
+
+# [7.1.0](https://github.com/reactstrap/reactstrap/compare/7.0.2...7.1.0) (2019-01-15)
+
+
+### Bug Fixes
+
+* **NavLink:** console error while using [@reach](https://github.com/reach)/Router ([#1350](https://github.com/reactstrap/reactstrap/issues/1350)) ([477e1a8](https://github.com/reactstrap/reactstrap/commit/477e1a8)), closes [#1308](https://github.com/reactstrap/reactstrap/issues/1308)
+
+
+### Features
+
+* support forwardRef components as tag ([4cda8bf](https://github.com/reactstrap/reactstrap/commit/4cda8bf))
+* **Popover:** add legacy trigger, replacing unreleased isInteractive prop ([6b3c3ce](https://github.com/reactstrap/reactstrap/commit/6b3c3ce))
+* **Popover:** backward-compatible Popover behavior ([#1360](https://github.com/reactstrap/reactstrap/issues/1360)) ([1d5ce83](https://github.com/reactstrap/reactstrap/commit/1d5ce83)), closes [#1349](https://github.com/reactstrap/reactstrap/issues/1349)
+* **Spinner:** Add spinner component ([#1352](https://github.com/reactstrap/reactstrap/issues/1352)) ([45952e2](https://github.com/reactstrap/reactstrap/commit/45952e2)), closes [#1347](https://github.com/reactstrap/reactstrap/issues/1347)
+* **Switch:** Add support for CustomInput type='switch' ([#1353](https://github.com/reactstrap/reactstrap/issues/1353)) ([7c1e166](https://github.com/reactstrap/reactstrap/commit/7c1e166)), closes [#1348](https://github.com/reactstrap/reactstrap/issues/1348)
+
+
+
+
+## [7.0.2](https://github.com/reactstrap/reactstrap/compare/7.0.0...7.0.2) (2018-12-31)
+
+
+### Bug Fixes
+
+* fix release artifacts ([#1345](https://github.com/reactstrap/reactstrap/issues/1345)) ([b5710ef](https://github.com/reactstrap/reactstrap/commit/b5710ef))
+* **npm:** fix published files ([7eedbab](https://github.com/reactstrap/reactstrap/commit/7eedbab))
+
+
+
+
+## [7.0.1](https://github.com/reactstrap/reactstrap/compare/7.0.0...7.0.1) (2018-12-31)
+
+
+### Bug Fixes
+
+* fix release artifacts ([#1345](https://github.com/reactstrap/reactstrap/issues/1345)) ([b5710ef](https://github.com/reactstrap/reactstrap/commit/b5710ef))
+
+
+
+
+# [7.0.0](https://github.com/reactstrap/reactstrap/compare/6.5.0...7.0.0) (2018-12-29)
+
+
+### Bug Fixes
+
+* **CardTitle,CardSubtitle:** div as default tag ([#1298](https://github.com/reactstrap/reactstrap/issues/1298)) ([ea0f1f0](https://github.com/reactstrap/reactstrap/commit/ea0f1f0)), closes [#1297](https://github.com/reactstrap/reactstrap/issues/1297)
+* **CarouselIndicators:** li key generate from provided item values ([#1311](https://github.com/reactstrap/reactstrap/issues/1311)) ([fd7506d](https://github.com/reactstrap/reactstrap/commit/fd7506d)), closes [#1310](https://github.com/reactstrap/reactstrap/issues/1310)
+* **Dropdown:** enter key triggers onClick -- correction ([#1306](https://github.com/reactstrap/reactstrap/issues/1306)) ([6b50732](https://github.com/reactstrap/reactstrap/commit/6b50732))
+* **Dropdown:** improve keyboard ux, WAI-ARIA ([#1293](https://github.com/reactstrap/reactstrap/issues/1293)) ([506c46a](https://github.com/reactstrap/reactstrap/commit/506c46a))
+* **Dropdown:** Null check on children ([#1294](https://github.com/reactstrap/reactstrap/issues/1294)) ([#1295](https://github.com/reactstrap/reactstrap/issues/1295)) ([dcfde3b](https://github.com/reactstrap/reactstrap/commit/dcfde3b))
+* **FormGroup:** remove `.position-relative` ([#1270](https://github.com/reactstrap/reactstrap/issues/1270)) ([01eb5f9](https://github.com/reactstrap/reactstrap/commit/01eb5f9)), closes [#1269](https://github.com/reactstrap/reactstrap/issues/1269)
+* **Input:** make plaintext output input by default ([#1226](https://github.com/reactstrap/reactstrap/issues/1226)) ([ff64c76](https://github.com/reactstrap/reactstrap/commit/ff64c76)), closes [#1225](https://github.com/reactstrap/reactstrap/issues/1225)
+* **Modal:** don't propagate handled escape key event ([#1317](https://github.com/reactstrap/reactstrap/issues/1317)) ([5d45b26](https://github.com/reactstrap/reactstrap/commit/5d45b26))
+* **Modal:** only show backdrop when prop is true ([#1271](https://github.com/reactstrap/reactstrap/issues/1271)) ([07ec4b5](https://github.com/reactstrap/reactstrap/commit/07ec4b5)), closes [#1267](https://github.com/reactstrap/reactstrap/issues/1267)
+* **PopperContent:** Use create portal instead of unstable_renderSubtreeIntoContainer ([#1254](https://github.com/reactstrap/reactstrap/issues/1254)) ([81da8c5](https://github.com/reactstrap/reactstrap/commit/81da8c5)), closes [#1216](https://github.com/reactstrap/reactstrap/issues/1216)
+
+
+### Features
+
+* **Badge:** allow innerRef ([#1264](https://github.com/reactstrap/reactstrap/issues/1264)) ([2caaaa5](https://github.com/reactstrap/reactstrap/commit/2caaaa5))
+* **CardBody:** add innerRef to CardBody ([#1318](https://github.com/reactstrap/reactstrap/issues/1318)) ([4b0474f](https://github.com/reactstrap/reactstrap/commit/4b0474f)), closes [#1314](https://github.com/reactstrap/reactstrap/issues/1314)
+* **Table:** add innerRef prop ([#1296](https://github.com/reactstrap/reactstrap/issues/1296)) ([bb84c85](https://github.com/reactstrap/reactstrap/commit/bb84c85))
+* **Tooltip,Popover:** base component for Tooltip and Popover ([#1222](https://github.com/reactstrap/reactstrap/issues/1222)) ([b45907b](https://github.com/reactstrap/reactstrap/commit/b45907b)), closes [#1022](https://github.com/reactstrap/reactstrap/issues/1022) [#1181](https://github.com/reactstrap/reactstrap/issues/1181)
+
+
+### BREAKING CHANGES
+
+* **Input:** previously plaintext on Input would output a 'p' tag. To better line up with bootstrap it will not output an 'input' tag. If you need a 'p' tag, provide tag="p" prop
+* **Popover:** Popover will no longer dismiss when clicking away from it. To get this behaviour please use trigger="focus". In 7.1.0, trigger="legacy" has been added to get the exact previous behavior.
+
+
+
+
+# [6.5.0](https://github.com/reactstrap/reactstrap/compare/6.4.0...6.5.0) (2018-10-04)
+
+
+### Bug Fixes
+
+* **boundariesElement:** add DOMElement to allowed proptypes ([#1238](https://github.com/reactstrap/reactstrap/issues/1238)) ([cfe7318](https://github.com/reactstrap/reactstrap/commit/cfe7318))
+* **Dropdown:** enter key triggers onClick ([#1232](https://github.com/reactstrap/reactstrap/issues/1232)) ([f2528da](https://github.com/reactstrap/reactstrap/commit/f2528da)), closes [#1228](https://github.com/reactstrap/reactstrap/issues/1228)
+* **Modal:** do not trigger focus on SVG elements ([#1212](https://github.com/reactstrap/reactstrap/issues/1212)) ([c7e6ef5](https://github.com/reactstrap/reactstrap/commit/c7e6ef5)), closes [#1208](https://github.com/reactstrap/reactstrap/issues/1208)
+* **Modal:** use static openCount to become resilient to classList modification ([#1190](https://github.com/reactstrap/reactstrap/issues/1190)) ([c8ceeeb](https://github.com/reactstrap/reactstrap/commit/c8ceeeb)), closes [#1189](https://github.com/reactstrap/reactstrap/issues/1189)
+* **Tooltip:** clear timers on component unmount ([#1180](https://github.com/reactstrap/reactstrap/issues/1180)) ([9fea409](https://github.com/reactstrap/reactstrap/commit/9fea409))
+
+
+### Features
+
+* **Button:** add close icon support ([#1206](https://github.com/reactstrap/reactstrap/issues/1206)) ([02f5e9a](https://github.com/reactstrap/reactstrap/commit/02f5e9a)), closes [#1182](https://github.com/reactstrap/reactstrap/issues/1182)
+* **FormGrid:** Add form-row ([#1237](https://github.com/reactstrap/reactstrap/issues/1237)) ([205e80d](https://github.com/reactstrap/reactstrap/commit/205e80d)), closes [#1195](https://github.com/reactstrap/reactstrap/issues/1195)
+* **Modal:** add custom close button ([#1168](https://github.com/reactstrap/reactstrap/issues/1168)) ([5f33a1a](https://github.com/reactstrap/reactstrap/commit/5f33a1a))
+* **Popover/Tooltip:** Implented usage of react 16.3 RefObject as target ([#1200](https://github.com/reactstrap/reactstrap/issues/1200)) ([0eade39](https://github.com/reactstrap/reactstrap/commit/0eade39)), closes [#1198](https://github.com/reactstrap/reactstrap/issues/1198)
+
+
+
+
+# [6.4.0](https://github.com/reactstrap/reactstrap/compare/6.3.1...6.4.0) (2018-08-17)
+
+
+### Bug Fixes
+
+* **Modal:** don't fade backdrop if there is no transition ([#1172](https://github.com/reactstrap/reactstrap/issues/1172)) ([77e7beb](https://github.com/reactstrap/reactstrap/commit/77e7beb)), closes [#1100](https://github.com/reactstrap/reactstrap/issues/1100)
+* **Modal:** prevent scrollbar from closing ([#1165](https://github.com/reactstrap/reactstrap/issues/1165)) ([9d7948f](https://github.com/reactstrap/reactstrap/commit/9d7948f)), closes [#1097](https://github.com/reactstrap/reactstrap/issues/1097)
+
+
+### Features
+
+* **Dropdown:** Select first element matching pressed key ([#1160](https://github.com/reactstrap/reactstrap/issues/1160)) ([abbac56](https://github.com/reactstrap/reactstrap/commit/abbac56)), closes [#1156](https://github.com/reactstrap/reactstrap/issues/1156)
+* **Modal:** add charCode prop for custom icon ([#1162](https://github.com/reactstrap/reactstrap/issues/1162)) ([4d19b09](https://github.com/reactstrap/reactstrap/commit/4d19b09)), closes [#1155](https://github.com/reactstrap/reactstrap/issues/1155)
+* **Modal:** return focus after modal closes ([#1175](https://github.com/reactstrap/reactstrap/issues/1175)) ([1b27c49](https://github.com/reactstrap/reactstrap/commit/1b27c49)), closes [#1174](https://github.com/reactstrap/reactstrap/issues/1174)
+* **Modal:** trap focus in modal ([#1161](https://github.com/reactstrap/reactstrap/issues/1161)) ([e6781d7](https://github.com/reactstrap/reactstrap/commit/e6781d7)), closes [#310](https://github.com/reactstrap/reactstrap/issues/310)
+* **Popover/Tooltip:** add boundariesElement prop ([#1149](https://github.com/reactstrap/reactstrap/issues/1149)) ([02b4555](https://github.com/reactstrap/reactstrap/commit/02b4555)), closes [#1118](https://github.com/reactstrap/reactstrap/issues/1118)
+
+
+
+
+## [6.3.1](https://github.com/reactstrap/reactstrap/compare/6.3.0...6.3.1) (2018-07-27)
+
+
+### Bug Fixes
+
+* **Collapse:** add function and string to innerRef propType ([#1129](https://github.com/reactstrap/reactstrap/issues/1129)) ([f380b41](https://github.com/reactstrap/reactstrap/commit/f380b41)), closes [#1054](https://github.com/reactstrap/reactstrap/issues/1054)
+* **CustomInput:** allow any node for label ([#1095](https://github.com/reactstrap/reactstrap/issues/1095)) ([c1374b4](https://github.com/reactstrap/reactstrap/commit/c1374b4))
+
+
+
+
+# [6.3.0](https://github.com/reactstrap/reactstrap/compare/6.2.0...6.3.0) (2018-07-10)
+
+### Features
+
+* **CustomInput:** add innerRef to CustomInput ([#1123](https://github.com/reactstrap/reactstrap/issues/1123)) ([418fdf8](https://github.com/reactstrap/reactstrap/commit/418fdf8))
+
+* **Tooltip:** allow additional arrow classNames ([#1119](https://github.com/reactstrap/reactstrap/issues/1119)) ([9ffa55f](https://github.com/reactstrap/reactstrap/commit/9ffa55f)), closes [#1117](https://github.com/reactstrap/reactstrap/issues/1117)
+
+
+# [6.2.0](https://github.com/reactstrap/reactstrap/compare/6.1.0...6.2.0) (2018-06-28)
+
+
+### Bug Fixes
+
+* **Carousel:** allow true, false, undefined, null and children of Carousel ([#1064](https://github.com/reactstrap/reactstrap/issues/1064)) ([478870b](https://github.com/reactstrap/reactstrap/commit/478870b)), closes [#1063](https://github.com/reactstrap/reactstrap/issues/1063)
+* **Modal:** allow innerRef to be function or string ([#1091](https://github.com/reactstrap/reactstrap/issues/1091)) ([aceaf22](https://github.com/reactstrap/reactstrap/commit/aceaf22))
+* **tooltip:** fixed tooltip not disappearing on mobile ([#1083](https://github.com/reactstrap/reactstrap/issues/1083)) ([e6a1313](https://github.com/reactstrap/reactstrap/commit/e6a1313)), closes [#1004](https://github.com/reactstrap/reactstrap/issues/1004)
+* **Tooltip:** Pass down cssModule ([#1075](https://github.com/reactstrap/reactstrap/issues/1075)) ([#1076](https://github.com/reactstrap/reactstrap/issues/1076)) ([4fb05b2](https://github.com/reactstrap/reactstrap/commit/4fb05b2))
+
+
+### Features
+
+* **alert:** add ability to disable fade ([#1078](https://github.com/reactstrap/reactstrap/issues/1078)) ([c71f1d4](https://github.com/reactstrap/reactstrap/commit/c71f1d4)), closes [#824](https://github.com/reactstrap/reactstrap/issues/824)
+* **Collapse:** add ref to collapse component ([#1067](https://github.com/reactstrap/reactstrap/issues/1067)) ([9d3126c](https://github.com/reactstrap/reactstrap/commit/9d3126c)), closes [#1054](https://github.com/reactstrap/reactstrap/issues/1054)
+* **feedback-tooltip:** add feedback tooltip ([#1074](https://github.com/reactstrap/reactstrap/issues/1074)) ([baee9a4](https://github.com/reactstrap/reactstrap/commit/baee9a4)), closes [#1062](https://github.com/reactstrap/reactstrap/issues/1062)
+* **Modal:** add ref to Modal ([#1087](https://github.com/reactstrap/reactstrap/issues/1087)) ([015d16d](https://github.com/reactstrap/reactstrap/commit/015d16d)), closes [#1082](https://github.com/reactstrap/reactstrap/issues/1082)
+* **Tooltip:** add innerRef ([#1090](https://github.com/reactstrap/reactstrap/issues/1090)) ([214da8c](https://github.com/reactstrap/reactstrap/commit/214da8c)), closes [#1089](https://github.com/reactstrap/reactstrap/issues/1089)
+* **Tooltip:** pass event to toggle callback ([#1096](https://github.com/reactstrap/reactstrap/issues/1096)) ([9dad68b](https://github.com/reactstrap/reactstrap/commit/9dad68b)), closes [#1094](https://github.com/reactstrap/reactstrap/issues/1094) [#1072](https://github.com/reactstrap/reactstrap/issues/1072)
+
+
+
+
+# [6.1.0](https://github.com/reactstrap/reactstrap/compare/6.0.1...6.1.0) (2018-06-04)
+
+
+### Bug Fixes
+
+* **Input:** type attribute should not render for select and textarea ([#1041](https://github.com/reactstrap/reactstrap/issues/1041)) ([2e45d8a](https://github.com/reactstrap/reactstrap/commit/2e45d8a)), closes [#1038](https://github.com/reactstrap/reactstrap/issues/1038)
+* **Media:** fix default tags ([267dfe0](https://github.com/reactstrap/reactstrap/commit/267dfe0)), closes [#979](https://github.com/reactstrap/reactstrap/issues/979)
+* **Modal:** closes when dragging outside modal ([#1047](https://github.com/reactstrap/reactstrap/issues/1047)) ([cccd7af](https://github.com/reactstrap/reactstrap/commit/cccd7af)), closes [angular-ui/bootstrap#5810](https://github.com/angular-ui/bootstrap/issues/5810)
+* **PaginationLink:** do not render invalid anchor tags ([7266214](https://github.com/reactstrap/reactstrap/commit/7266214))
+* **UncontrolledCollapse:** collapsing on mobile ([#1043](https://github.com/reactstrap/reactstrap/issues/1043)) ([dcc1dda](https://github.com/reactstrap/reactstrap/commit/dcc1dda)), closes [#1034](https://github.com/reactstrap/reactstrap/issues/1034)
+
+
+### Features
+
+* **addMultipleEventListeners:** handle singles ([d124b27](https://github.com/reactstrap/reactstrap/commit/d124b27))
+* **exports:** mark reactstrap as sideEffects free ([#1005](https://github.com/reactstrap/reactstrap/issues/1005)) ([b68826d](https://github.com/reactstrap/reactstrap/commit/b68826d))
+* **Form:** add submit to component ([4e10dd9](https://github.com/reactstrap/reactstrap/commit/4e10dd9))
+* **Input:** make it easier to focus ([e3124af](https://github.com/reactstrap/reactstrap/commit/e3124af))
+* **Tooltip:** add tooltip accessibility ([#1025](https://github.com/reactstrap/reactstrap/issues/1025)) ([a2138a8](https://github.com/reactstrap/reactstrap/commit/a2138a8)), closes [#1012](https://github.com/reactstrap/reactstrap/issues/1012)
+* **Tooltip,Popover:** add offset prop ([#1018](https://github.com/reactstrap/reactstrap/issues/1018)) ([3561e3c](https://github.com/reactstrap/reactstrap/commit/3561e3c))
+* **UncontrolledCollapse:** add UncontrolledCollapse ([#1009](https://github.com/reactstrap/reactstrap/issues/1009)) ([355d2b8](https://github.com/reactstrap/reactstrap/commit/355d2b8))
+
+
+
+
+## [6.0.1](https://github.com/reactstrap/reactstrap/compare/6.0.0...6.0.1) (2018-05-02)
+
+
+### Bug Fixes
+
+* **CustomInput:** fix Invalid propType. ([#994](https://github.com/reactstrap/reactstrap/issues/994)) ([35ca0a8](https://github.com/reactstrap/reactstrap/commit/35ca0a8)), closes [#993](https://github.com/reactstrap/reactstrap/issues/993)
+
+
+
+
+# [6.0.0](https://github.com/reactstrap/reactstrap/compare/5.0.0...6.0.0) (2018-05-01)
+
+
+* chore(Input): remove support for children content in (#927) ([4dea4a6](https://github.com/reactstrap/reactstrap/commit/4dea4a6)), closes [#927](https://github.com/reactstrap/reactstrap/issues/927) [#871](https://github.com/reactstrap/reactstrap/issues/871)
+
+
+### Bug Fixes
+
+* **DropdownMenu:** add x-placement attribute ([#966](https://github.com/reactstrap/reactstrap/issues/966)) ([0f4a4cb](https://github.com/reactstrap/reactstrap/commit/0f4a4cb)), closes [#962](https://github.com/reactstrap/reactstrap/issues/962)
+* **innerRef:** allow createRef as a ref ([a5795b8](https://github.com/reactstrap/reactstrap/commit/a5795b8))
+* **Modal:** update zindex when prop is changed ([#937](https://github.com/reactstrap/reactstrap/issues/937)) ([01667c1](https://github.com/reactstrap/reactstrap/commit/01667c1))
+* **UncontrolledCarousel:** add bootstrap classes to img to make it responsive ([#934](https://github.com/reactstrap/reactstrap/issues/934)) ([9f7b741](https://github.com/reactstrap/reactstrap/commit/9f7b741))
+* **UncontrolledCarousel:** added header item prop ([#964](https://github.com/reactstrap/reactstrap/issues/964)) ([62b79fb](https://github.com/reactstrap/reactstrap/commit/62b79fb)), closes [#943](https://github.com/reactstrap/reactstrap/issues/943)
+
+
+### Features
+
+* **CustomInput:** add custom checkboxes/radios ([#985](https://github.com/reactstrap/reactstrap/issues/985)) ([312e729](https://github.com/reactstrap/reactstrap/commit/312e729))
+* **CustomInput:** add more custom inputs ([#991](https://github.com/reactstrap/reactstrap/issues/991)) ([ccdb7f2](https://github.com/reactstrap/reactstrap/commit/ccdb7f2)), closes [#534](https://github.com/reactstrap/reactstrap/issues/534)
+* **Dropdown:** setActiveFromChild prop ([#977](https://github.com/reactstrap/reactstrap/issues/977)) ([1b47757](https://github.com/reactstrap/reactstrap/commit/1b47757))
+* **DropdownMenu:** add Popper modifiers ([#929](https://github.com/reactstrap/reactstrap/issues/929)) ([f28ef8a](https://github.com/reactstrap/reactstrap/commit/f28ef8a)), closes [#811](https://github.com/reactstrap/reactstrap/issues/811)
+* **DropdownMenu:** allow menu to persist ([840adb2](https://github.com/reactstrap/reactstrap/commit/840adb2)), closes [#779](https://github.com/reactstrap/reactstrap/issues/779)
+* **Table:** add `borderless` option ([#956](https://github.com/reactstrap/reactstrap/issues/956)) ([210b53f](https://github.com/reactstrap/reactstrap/commit/210b53f))
+
+
+### BREAKING CHANGES
+
+* `Input` with type="textarea" can no longer have children. To set the value of the textarea please use `value`/`defaultValue` the same as you would for input type="text".
+
+
+
+
+# [5.0.0](https://github.com/reactstrap/reactstrap/compare/5.0.0-beta.3...5.0.0) (2018-03-23)
+
+
+### Bug Fixes
+
+* **Modal:** don't add or remove multi body classes ([6ec3174](https://github.com/reactstrap/reactstrap/commit/6ec3174))
+* **Modal:** Ensure that `this._element` exists before removing it. ([#916](https://github.com/reactstrap/reactstrap/issues/916)) ([7faa32a](https://github.com/reactstrap/reactstrap/commit/7faa32a)), closes [#918](https://github.com/reactstrap/reactstrap/issues/918)
+
+
+### BREAKING CHANGES
+
+* **Modal:** reactstrap now requires a minimum react version of 16. Please update your version of react to 16 (from 15 to 16 is very seamless).
+
+
+
+
+# [5.0.0-beta.3](https://github.com/reactstrap/reactstrap/compare/5.0.0-beta.2...5.0.0-beta.3) (2018-03-19)
+
+
+### Bug Fixes
+
+* **popper:** pass event object to toggle prop ([#907](https://github.com/reactstrap/reactstrap/issues/907)) ([b1f6005](https://github.com/reactstrap/reactstrap/commit/b1f6005))
+
+
+### Features
+
+* **Dropdown:** Add active prop to Dropdown ([#895](https://github.com/reactstrap/reactstrap/issues/895)) ([45de5c5](https://github.com/reactstrap/reactstrap/commit/45de5c5)), closes [#827](https://github.com/reactstrap/reactstrap/issues/827)
+* **Modal:** pass event object to toggle prop ([#903](https://github.com/reactstrap/reactstrap/issues/903)) ([f6aacfa](https://github.com/reactstrap/reactstrap/commit/f6aacfa))
+
+
+
+
+# [5.0.0-beta.2](https://github.com/reactstrap/reactstrap/compare/5.0.0-beta...5.0.0-beta.2) (2018-02-27)
+
+
+### Bug Fixes
+
+* **Col:** pass cssModule to mapToCSSModules not push ([#857](https://github.com/reactstrap/reactstrap/issues/857)) ([7887364](https://github.com/reactstrap/reactstrap/commit/7887364)), closes [#856](https://github.com/reactstrap/reactstrap/issues/856)
+* **Modal:** map body class name before removing ([#817](https://github.com/reactstrap/reactstrap/issues/817)) ([f099d31](https://github.com/reactstrap/reactstrap/commit/f099d31)), closes [#665](https://github.com/reactstrap/reactstrap/issues/665) [#763](https://github.com/reactstrap/reactstrap/issues/763)
+* **UncontrolledNavDropdown:** add missing props param ([#812](https://github.com/reactstrap/reactstrap/issues/812)) ([b35cdcb](https://github.com/reactstrap/reactstrap/commit/b35cdcb))
+
+
+### Features
+
+* **Col:** Set col class only if no other cols are specified ([#842](https://github.com/reactstrap/reactstrap/issues/842)) ([5a9aa63](https://github.com/reactstrap/reactstrap/commit/5a9aa63)), closes [#750](https://github.com/reactstrap/reactstrap/issues/750)
+* **Dropdown:** Add support for dropleft and dropright ([#813](https://github.com/reactstrap/reactstrap/issues/813)) ([2b71fd6](https://github.com/reactstrap/reactstrap/commit/2b71fd6)), closes [#785](https://github.com/reactstrap/reactstrap/issues/785)
+* **FormFeedback:** Support valid feedback. ([#840](https://github.com/reactstrap/reactstrap/issues/840)) ([9b49091](https://github.com/reactstrap/reactstrap/commit/9b49091))
+* **Input:** add invalid prop ([#858](https://github.com/reactstrap/reactstrap/issues/858)) ([ba8fc39](https://github.com/reactstrap/reactstrap/commit/ba8fc39)), closes [#850](https://github.com/reactstrap/reactstrap/issues/850)
+* **Modal:** add ability to have external content ([#854](https://github.com/reactstrap/reactstrap/issues/854)) ([9c1b71a](https://github.com/reactstrap/reactstrap/commit/9c1b71a)), closes [#853](https://github.com/reactstrap/reactstrap/issues/853)
+* **Modal:** added support for React Portal ([#796](https://github.com/reactstrap/reactstrap/issues/796)) ([49a7f99](https://github.com/reactstrap/reactstrap/commit/49a7f99)), closes [#601](https://github.com/reactstrap/reactstrap/issues/601) [#761](https://github.com/reactstrap/reactstrap/issues/761) [#645](https://github.com/reactstrap/reactstrap/issues/645)
+* **Popover/Tooltip:** add ability to hide arrow ([#814](https://github.com/reactstrap/reactstrap/issues/814)) ([#815](https://github.com/reactstrap/reactstrap/issues/815)) ([43efe8b](https://github.com/reactstrap/reactstrap/commit/43efe8b))
+
+
+### BREAKING CHANGES
+
+* **Col:** Col no longer adds .col class by default when you have other columns specified. To get this class back, simply add the prop xs.
+* **Input:** the valid prop no longer applies the is-invalid class when false. Use the new invalid prop to apply that class.
+
+
+
+
+# [5.0.0-beta](https://github.com/reactstrap/reactstrap/compare/5.0.0-alpha.4...5.0.0-beta) (2018-01-31)
+
+
+### Bug Fixes
+
+* **CardTitle:** default tag to h5 ([#794](https://github.com/reactstrap/reactstrap/issues/794)) ([65194c1](https://github.com/reactstrap/reactstrap/commit/65194c1))
+* **CarouselIndicators`:** fix class name when using `cssModule` ([#726](https://github.com/reactstrap/reactstrap/issues/726)) ([57d07e3](https://github.com/reactstrap/reactstrap/commit/57d07e3))
+* **Input:** honor Tag prop ([#795](https://github.com/reactstrap/reactstrap/issues/795)) ([bcefdaa](https://github.com/reactstrap/reactstrap/commit/bcefdaa)), closes [#783](https://github.com/reactstrap/reactstrap/issues/783)
+* **Label:** remove unused `form-control-label` class ([#695](https://github.com/reactstrap/reactstrap/issues/695)) ([b7567c7](https://github.com/reactstrap/reactstrap/commit/b7567c7))
+* **Modal:** check this.props.toggle exists before using it ([#700](https://github.com/reactstrap/reactstrap/issues/700)) ([80c0cde](https://github.com/reactstrap/reactstrap/commit/80c0cde))
+* **ModalHeader:** default tag to h5 ([#793](https://github.com/reactstrap/reactstrap/issues/793)) ([6a5fe7e](https://github.com/reactstrap/reactstrap/commit/6a5fe7e))
+* **Util:** window.getComputedStyle can return null in Firefox ([#782](https://github.com/reactstrap/reactstrap/issues/782)) ([6914f73](https://github.com/reactstrap/reactstrap/commit/6914f73))
+
+
+### Features
+
+* **CarouselItem:** Make CarouselItem accept children of any type ([#735](https://github.com/reactstrap/reactstrap/issues/735)) ([eea7d1b](https://github.com/reactstrap/reactstrap/commit/eea7d1b)), closes [#641](https://github.com/reactstrap/reactstrap/issues/641) [#719](https://github.com/reactstrap/reactstrap/issues/719)
+* **Col/Label:** Removed pull/push and added order ([#696](https://github.com/reactstrap/reactstrap/issues/696)) ([7c5e690](https://github.com/reactstrap/reactstrap/commit/7c5e690))
+* **cssModule:** expose global cssModule setter ([#729](https://github.com/reactstrap/reactstrap/issues/729)) ([adc8736](https://github.com/reactstrap/reactstrap/commit/adc8736))
+* **Dropdown:** disable popper when inNavbar ([#692](https://github.com/reactstrap/reactstrap/issues/692)) ([b5c7612](https://github.com/reactstrap/reactstrap/commit/b5c7612)), closes [#637](https://github.com/reactstrap/reactstrap/issues/637)
+* **InputGroup:** Deprecate InputGroupButton ([#769](https://github.com/reactstrap/reactstrap/issues/769)) ([5c5c205](https://github.com/reactstrap/reactstrap/commit/5c5c205))
+* **InputGroup:** Update for BS 4-beta.3 ([#762](https://github.com/reactstrap/reactstrap/issues/762)) ([fa3555f](https://github.com/reactstrap/reactstrap/commit/fa3555f)), closes [#759](https://github.com/reactstrap/reactstrap/issues/759)
+* **ListGroup*:** Added missing cssModule support ([#784](https://github.com/reactstrap/reactstrap/issues/784)) ([df264a8](https://github.com/reactstrap/reactstrap/commit/df264a8))
+* **Popover/Tooltip:** add ability to pass modifiers to Popper.js ([#710](https://github.com/reactstrap/reactstrap/issues/710)) ([bc6518e](https://github.com/reactstrap/reactstrap/commit/bc6518e)), closes [#709](https://github.com/reactstrap/reactstrap/issues/709)
+* **Table:** BS4 beta 2 updates for Table ([#694](https://github.com/reactstrap/reactstrap/issues/694)) ([3377cdc](https://github.com/reactstrap/reactstrap/commit/3377cdc))
+* **Table:** BS4 beta 3 revert responsive table ([#757](https://github.com/reactstrap/reactstrap/issues/757)) ([ee08d21](https://github.com/reactstrap/reactstrap/commit/ee08d21))
+
+
+### BREAKING CHANGES
+
+* **CardTitle:** CardTitle now defaults to h5 instead of h4. If you still need h4 add tag="h4"
+* **ModalHeader:** ModalHeader now defaults to h5 instead of h4. If you still need h4 add tag="h4"
+
+
+
+
+# [5.0.0-alpha.4](https://github.com/reactstrap/reactstrap/compare/5.0.0-alpha.3...5.0.0-alpha.4) (2017-11-16)
+
+
+### Bug Fixes
+
+* **FormGroup,Label:** Fix inline radio- and checkboxes ([#624](https://github.com/reactstrap/reactstrap/issues/624)) ([e9b7803](https://github.com/reactstrap/reactstrap/commit/e9b7803))
+* **getTarget:** do not return null; throw ([#623](https://github.com/reactstrap/reactstrap/issues/623)) ([e1d3b5f](https://github.com/reactstrap/reactstrap/commit/e1d3b5f))
+* **Input:** fix size prop ([#662](https://github.com/reactstrap/reactstrap/issues/662)) ([cc2bd13](https://github.com/reactstrap/reactstrap/commit/cc2bd13)), closes [#660](https://github.com/reactstrap/reactstrap/issues/660)
+* **Label:** remove disabled prop ([#626](https://github.com/reactstrap/reactstrap/issues/626)) ([25c1e38](https://github.com/reactstrap/reactstrap/commit/25c1e38))
+* **ModalHeader:** Use css modules in close button ([#629](https://github.com/reactstrap/reactstrap/issues/629)) ([2cd6f21](https://github.com/reactstrap/reactstrap/commit/2cd6f21)), closes [#628](https://github.com/reactstrap/reactstrap/issues/628)
+* **UncontrolledCarousel:** fix autoPlay={false} ([#654](https://github.com/reactstrap/reactstrap/issues/654)) ([839419e](https://github.com/reactstrap/reactstrap/commit/839419e)), closes [#653](https://github.com/reactstrap/reactstrap/issues/653)
+
+
+### Features
+
+* **Carousel:** add className to carousel components ([#682](https://github.com/reactstrap/reactstrap/issues/682)) ([d23b28a](https://github.com/reactstrap/reactstrap/commit/d23b28a)), closes [#669](https://github.com/reactstrap/reactstrap/issues/669)
+* **CarouselItem:** support tag prop on carousel item ([#681](https://github.com/reactstrap/reactstrap/issues/681)) ([1e70e64](https://github.com/reactstrap/reactstrap/commit/1e70e64))
+* **Dropdown:** Add nav prop to Dropdown ([#636](https://github.com/reactstrap/reactstrap/issues/636)) ([48edd6b](https://github.com/reactstrap/reactstrap/commit/48edd6b))
+* **getTarget:** throw when string not in DOM ([#622](https://github.com/reactstrap/reactstrap/issues/622)) ([e71c427](https://github.com/reactstrap/reactstrap/commit/e71c427)), closes [#620](https://github.com/reactstrap/reactstrap/issues/620)
+* **NavItem:** add active prop to NavItem ([#688](https://github.com/reactstrap/reactstrap/issues/688)) ([2a8bffb](https://github.com/reactstrap/reactstrap/commit/2a8bffb)), closes [#678](https://github.com/reactstrap/reactstrap/issues/678)
+
+
+
+
+# [5.0.0-alpha.3](https://github.com/reactstrap/reactstrap/compare/5.0.0-alpha.2...5.0.0-alpha.3) (2017-10-03)
+
+
+### Bug Fixes
+
+* **Build:** Cross-platform postbuild support, improved Readme documentation, updated dependencies. ([#608](https://github.com/reactstrap/reactstrap/issues/608)) ([681738c](https://github.com/reactstrap/reactstrap/commit/681738c))
+* **Collapse,Fade:** Ensuring props don't leak to child ([#598](https://github.com/reactstrap/reactstrap/issues/598)) ([1a94b0f](https://github.com/reactstrap/reactstrap/commit/1a94b0f)), closes [#597](https://github.com/reactstrap/reactstrap/issues/597)
+* **Modal:** Update classes for fixed content detection ([#600](https://github.com/reactstrap/reactstrap/issues/600)) ([9b41e13](https://github.com/reactstrap/reactstrap/commit/9b41e13))
+* **PaginationLink:** handle empty children array correctly ([#511](https://github.com/reactstrap/reactstrap/issues/511)) ([#604](https://github.com/reactstrap/reactstrap/issues/604)) ([c090ea7](https://github.com/reactstrap/reactstrap/commit/c090ea7))
+
+
+
+
+# [5.0.0-alpha.2](https://github.com/reactstrap/reactstrap/compare/5.0.0-alpha.1...5.0.0-alpha.2) (2017-09-28)
+
+
+### Bug Fixes
+
+* **Popover:** do not trigger toggle on popover click ([50a8fd4](https://github.com/reactstrap/reactstrap/commit/50a8fd4)), closes [#594](https://github.com/reactstrap/reactstrap/issues/594)
+
+
+
+
+# [5.0.0-alpha.1](https://github.com/reactstrap/reactstrap/compare/5.0.0-alpha.0...5.0.0-alpha.1) (2017-09-23)
+
+
+### Bug Fixes
+
+* **Dropdown:** fix perf issue ([e4479aa](https://github.com/reactstrap/reactstrap/commit/e4479aa)), closes [#584](https://github.com/reactstrap/reactstrap/issues/584)
+
+
+### Features
+
+* **Dropdown:** keyboard control/navigation ([ac90f51](https://github.com/reactstrap/reactstrap/commit/ac90f51)), closes [#580](https://github.com/reactstrap/reactstrap/issues/580)
+* **Input:** add plaintext prop ([d0c6e82](https://github.com/reactstrap/reactstrap/commit/d0c6e82)), closes [#485](https://github.com/reactstrap/reactstrap/issues/485)
+
+
+
+
+# [5.0.0-alpha.0](https://github.com/reactstrap/reactstrap/compare/4.8.0...5.0.0-alpha.0) (2017-09-21)
+
+
+### Bug Fixes
+
+* Add container to Popover and Tooltip ([759934b](https://github.com/reactstrap/reactstrap/commit/759934b))
+* **Carousel:** use prop-types in carousel ([#503](https://github.com/reactstrap/reactstrap/issues/503)) ([e1bdadb](https://github.com/reactstrap/reactstrap/commit/e1bdadb))
+* **CSSModules:** pass modules to child components ([#483](https://github.com/reactstrap/reactstrap/issues/483)) ([12270d0](https://github.com/reactstrap/reactstrap/commit/12270d0))
+* **Label:** fix xs col class ([#512](https://github.com/reactstrap/reactstrap/issues/512)) ([683dbdb](https://github.com/reactstrap/reactstrap/commit/683dbdb)), closes [#510](https://github.com/reactstrap/reactstrap/issues/510)
+* **Modal:** add workaround for Modal auto focus ([f12057d](https://github.com/reactstrap/reactstrap/commit/f12057d))
+* **Navbar:** better backwards compatibility ([aefbdd7](https://github.com/reactstrap/reactstrap/commit/aefbdd7))
+* **NavbarToggler:** fix syntax error ([a460912](https://github.com/reactstrap/reactstrap/commit/a460912))
+* **PaginationLink:** handle empty children array ([#511](https://github.com/reactstrap/reactstrap/issues/511)) ([72d82a3](https://github.com/reactstrap/reactstrap/commit/72d82a3)), closes [#494](https://github.com/reactstrap/reactstrap/issues/494)
+* **popper:** account for touchstart ([9b80d11](https://github.com/reactstrap/reactstrap/commit/9b80d11)), closes [#456](https://github.com/reactstrap/reactstrap/issues/456) [#458](https://github.com/reactstrap/reactstrap/issues/458)
+* **popperjs:** fixed error in build ([#571](https://github.com/reactstrap/reactstrap/issues/571)) ([0a9394d](https://github.com/reactstrap/reactstrap/commit/0a9394d))
+* **Tooltip/Popover:** fix className/add innerClassName ([a2a33e3](https://github.com/reactstrap/reactstrap/commit/a2a33e3))
+
+
+### Features
+
+* **aria:** add closeAriaLabel ([#525](https://github.com/reactstrap/reactstrap/issues/525)) ([3b4c0e6](https://github.com/reactstrap/reactstrap/commit/3b4c0e6)), closes [#524](https://github.com/reactstrap/reactstrap/issues/524)
+* **Badge:** handle links ([9b32cee](https://github.com/reactstrap/reactstrap/commit/9b32cee))
+* **Card:** update Card for bs v4 beta ([c4609e2](https://github.com/reactstrap/reactstrap/commit/c4609e2))
+* **Dropdown:** update Dropdown for bs v4 beta ([53687fa](https://github.com/reactstrap/reactstrap/commit/53687fa))
+* **Modal:** onOpened and onClosed callbacks for modals ([#434](https://github.com/reactstrap/reactstrap/issues/434)) ([87c6c4e](https://github.com/reactstrap/reactstrap/commit/87c6c4e)), closes [#306](https://github.com/reactstrap/reactstrap/issues/306)
+* **Nav/Navbar:** update to bs v4 beta ([5395e8d](https://github.com/reactstrap/reactstrap/commit/5395e8d))
+* **Popover:** update popovers to bs v4 beta ([bb00f4c](https://github.com/reactstrap/reactstrap/commit/bb00f4c))
+* **popper:** add container prop to popper ([fd59d37](https://github.com/reactstrap/reactstrap/commit/fd59d37))
+* **popperjs:** use popperjs instead of tether ([#561](https://github.com/reactstrap/reactstrap/issues/561)) ([5413022](https://github.com/reactstrap/reactstrap/commit/5413022))
+* **UncontrolledCarousel:** add UncontrolledCarousel ([627a73e](https://github.com/reactstrap/reactstrap/commit/627a73e))
+* **util:** add warnOnce and deprecated fns ([5faa94d](https://github.com/reactstrap/reactstrap/commit/5faa94d))
+* **validation:** add/update form validation ([8b2386f](https://github.com/reactstrap/reactstrap/commit/8b2386f))
+
+
+### BREAKING CHANGES
+
+* **validation:** The color prop has been removed from FromGroup, see the valid prop on Input.
+* **popperjs:** getRef has been renamed to innerRef to line up with other libraries.
+* **popperjs:** tether props have been removed.
+
+
+
+
+# [4.8.0](https://github.com/reactstrap/reactstrap/compare/4.7.0...4.8.0) (2017-06-28)
+
+
+### Features
+
+* **DropdownItem:** support the "active" property for dropdown items ([#469](https://github.com/reactstrap/reactstrap/issues/469)) ([83df86e](https://github.com/reactstrap/reactstrap/commit/83df86e))
+
+
+
+
+# [4.7.0](https://github.com/reactstrap/reactstrap/compare/4.6.2...4.7.0) (2017-06-27)
+
+
+### Bug Fixes
+
+* **Alert:** map close class css modules ([#471](https://github.com/reactstrap/reactstrap/issues/471)) ([2e3c687](https://github.com/reactstrap/reactstrap/commit/2e3c687)), closes [#470](https://github.com/reactstrap/reactstrap/issues/470)
+* **DropdownToggle:** ensures color attribute is not leaked ([d1448e0](https://github.com/reactstrap/reactstrap/commit/d1448e0)), closes [#461](https://github.com/reactstrap/reactstrap/issues/461) [PR#402](https://github.com/PR/issues/402)
+* **Label:** add form-control-label to appropriate Label components ([#452](https://github.com/reactstrap/reactstrap/issues/452)) ([2e86132](https://github.com/reactstrap/reactstrap/commit/2e86132))
+* **Modal:** add back attribute passthrough ([#444](https://github.com/reactstrap/reactstrap/issues/444)) ([b598a40](https://github.com/reactstrap/reactstrap/commit/b598a40)), closes [#443](https://github.com/reactstrap/reactstrap/issues/443)
+* **Navbar:** remove default navigation role ([f607b2c](https://github.com/reactstrap/reactstrap/commit/f607b2c)), closes [#463](https://github.com/reactstrap/reactstrap/issues/463)
+
+
+
+
+## [4.6.2](https://github.com/reactstrap/reactstrap/compare/4.6.1...4.6.2) (2017-05-16)
+
+
+### Bug Fixes
+
+* **build:** replace process.env in builds ([#429](https://github.com/reactstrap/reactstrap/issues/429)) ([#435](https://github.com/reactstrap/reactstrap/issues/435)) ([fcc5264](https://github.com/reactstrap/reactstrap/commit/fcc5264))
+
+
+
+
+## [4.6.1](https://github.com/reactstrap/reactstrap/compare/4.6.0...4.6.1) (2017-05-15)
+
+
+### Bug Fixes
+
+* **PropTypes:** clean up prop-types usage ([#427](https://github.com/reactstrap/reactstrap/issues/427)) ([94bbb82](https://github.com/reactstrap/reactstrap/commit/94bbb82))
+
+
+
+
+# [4.6.0](https://github.com/reactstrap/reactstrap/compare/4.5.0...4.6.0) (2017-05-15)
+
+
+### Bug Fixes
+
+* **ButtonDropdown:** allow overwriting the group prop ([#425](https://github.com/reactstrap/reactstrap/issues/425)) ([663551b](https://github.com/reactstrap/reactstrap/commit/663551b))
+* **DropdownToggle:** add missing proptype (color) ([#402](https://github.com/reactstrap/reactstrap/issues/402)) ([c137697](https://github.com/reactstrap/reactstrap/commit/c137697))
+* **Modal:** fix bug where closing modal removed wrong modal-open string in class ([#410](https://github.com/reactstrap/reactstrap/issues/410)) ([22d5c3f](https://github.com/reactstrap/reactstrap/commit/22d5c3f))
+* **PropTypes:** import PropTypes from prop-types ([#395](https://github.com/reactstrap/reactstrap/issues/395)) ([9080217](https://github.com/reactstrap/reactstrap/commit/9080217))
+* **react-addons:** move to external react-transition-group dependency ([#399](https://github.com/reactstrap/reactstrap/issues/399)) ([a4fec3c](https://github.com/reactstrap/reactstrap/commit/a4fec3c))
+
+
+### Features
+
+* **Modal:** add autoFocus prop for disabling auto focus ([#389](https://github.com/reactstrap/reactstrap/issues/389)) ([6338fc3](https://github.com/reactstrap/reactstrap/commit/6338fc3))
+* **Modal:** Support fade and timeout props in the Modal component to allow configuring + disabling of the fade effect ([#339](https://github.com/reactstrap/reactstrap/issues/339)) ([babee0f](https://github.com/reactstrap/reactstrap/commit/babee0f))
+
+
+
+
+# [4.5.0](https://github.com/reactstrap/reactstrap/compare/4.4.0...v4.5.0) (2017-04-03)
+
+
+### Bug Fixes
+
+* **Button:** only default to button when click is handled ([#383](https://github.com/reactstrap/reactstrap/issues/383)) ([af3ccbe](https://github.com/reactstrap/reactstrap/commit/af3ccbe))
+* **lib:** import/export not getting transpiled in lib dir ([#384](https://github.com/reactstrap/reactstrap/issues/384)) ([2e2a5da](https://github.com/reactstrap/reactstrap/commit/2e2a5da))
+
+
+
+
+# [4.4.0](https://github.com/reactstrap/reactstrap/compare/4.3.0...v4.4.0) (2017-03-31)
+
+
+### Bug Fixes
+
+* **Col:** account for 0 col properties ([#378](https://github.com/reactstrap/reactstrap/issues/378)) ([fe48e9e](https://github.com/reactstrap/reactstrap/commit/fe48e9e))
+* **DropDownItem:** when href use `a` tag ([#377](https://github.com/reactstrap/reactstrap/issues/377)) ([96616af](https://github.com/reactstrap/reactstrap/commit/96616af)), closes [#367](https://github.com/reactstrap/reactstrap/issues/367)
+* **Modal:** pass in cssModule to Fade components ([#373](https://github.com/reactstrap/reactstrap/issues/373)) ([be34d19](https://github.com/reactstrap/reactstrap/commit/be34d19))
+
+
+### Features
+
+* **Button:** default type to button ([#376](https://github.com/reactstrap/reactstrap/issues/376)) ([ebbeba7](https://github.com/reactstrap/reactstrap/commit/ebbeba7))
+* **DropdownItem:** Add toggle switch to allow conditional toggle ([#346](https://github.com/reactstrap/reactstrap/issues/346)) ([578a61b](https://github.com/reactstrap/reactstrap/commit/578a61b))
+* **Tooltip:** enable target element option ([#356](https://github.com/reactstrap/reactstrap/issues/356)) ([2023036](https://github.com/reactstrap/reactstrap/commit/2023036))
+
+
+
+
+# [4.3.0](https://github.com/reactstrap/reactstrap/compare/4.2.0...v4.3.0) (2017-03-14)
+
+
+### Bug Fixes
+
+* **Modal:** default zIndex to 1050 ([#343](https://github.com/reactstrap/reactstrap/issues/343)) ([8d0f4ec](https://github.com/reactstrap/reactstrap/commit/8d0f4ec)), closes [#342](https://github.com/reactstrap/reactstrap/issues/342)
+* **Nav:** update props available ([#338](https://github.com/reactstrap/reactstrap/issues/338)) ([992e4e6](https://github.com/reactstrap/reactstrap/commit/992e4e6))
+
+
+
+
+# [4.2.0](https://github.com/reactstrap/reactstrap/compare/4.1.1...v4.2.0) (2017-02-14)
+
+
+### Bug Fixes
+
+* **Modal:** unmounting nested modals ([#321](https://github.com/reactstrap/reactstrap/issues/321)) ([ecf51b2](https://github.com/reactstrap/reactstrap/commit/ecf51b2))
+* **Progress:** add custom classNames to progress-bar ([#319](https://github.com/reactstrap/reactstrap/issues/319)) ([25fdb77](https://github.com/reactstrap/reactstrap/commit/25fdb77)), closes [#318](https://github.com/reactstrap/reactstrap/issues/318)
+
+
+### Features
+
+* **Modal:** add various className props to modal ([#320](https://github.com/reactstrap/reactstrap/issues/320)) ([c7b2b3e](https://github.com/reactstrap/reactstrap/commit/c7b2b3e)), closes [#257](https://github.com/reactstrap/reactstrap/issues/257)
+* **Modal:** Make toggle prop optional ([#325](https://github.com/reactstrap/reactstrap/issues/325)) ([5e98ea3](https://github.com/reactstrap/reactstrap/commit/5e98ea3))
+
+
+
+
+## [4.1.1](https://github.com/reactstrap/reactstrap/compare/4.1.0...v4.1.1) (2017-01-31)
+
+
+### Bug Fixes
+
+* make sure everything can have a Tag ([#315](https://github.com/reactstrap/reactstrap/issues/315)) ([3373a90](https://github.com/reactstrap/reactstrap/commit/3373a90)), closes [#314](https://github.com/reactstrap/reactstrap/issues/314)
+
+
+### Features
+
+* **CardDeck:** set flex as only option ([#316](https://github.com/reactstrap/reactstrap/issues/316)) ([feb9a70](https://github.com/reactstrap/reactstrap/commit/feb9a70))
+
+
+
+
+# [4.1.0](https://github.com/reactstrap/reactstrap/compare/4.0.1...v4.1.0) (2017-01-28)
+
+
+### Features
+
+* **Col:** add custom widths ability to Col ([#309](https://github.com/reactstrap/reactstrap/issues/309)) ([8487598](https://github.com/reactstrap/reactstrap/commit/8487598)), closes [#297](https://github.com/reactstrap/reactstrap/issues/297)
+* **Collapse:** Add onOpened and onClosed events ([#277](https://github.com/reactstrap/reactstrap/issues/277)) ([#301](https://github.com/reactstrap/reactstrap/issues/301)) ([6c5621f](https://github.com/reactstrap/reactstrap/commit/6c5621f))
+* **Uncontrolled:** add uncontrolled components ([#307](https://github.com/reactstrap/reactstrap/issues/307)) ([2f648c1](https://github.com/reactstrap/reactstrap/commit/2f648c1))
+
+
+
+
+## [4.0.1](https://github.com/reactstrap/reactstrap/compare/4.0.0...v4.0.1) (2017-01-11)
+
+
+### Bug Fixes
+
+* **Navbar:** updated fixed class names ([481bc14](https://github.com/reactstrap/reactstrap/commit/481bc14))
+
+
+### Features
+
+* **Navbar:** support sticky prop on navbar ([d8a9727](https://github.com/reactstrap/reactstrap/commit/d8a9727))
+
+
+
+# [4.0.0](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.8...v4.0.0) (2017-01-11)
+
+
+### Bug Fixes
+
+* **Col:** support disabled width props ([#283](https://github.com/reactstrap/reactstrap/issues/283)) ([2a36601](https://github.com/reactstrap/reactstrap/commit/2a36601))
+* **Collapse:** component height & navbar class ([#284](https://github.com/reactstrap/reactstrap/issues/284)) ([0237cd4](https://github.com/reactstrap/reactstrap/commit/0237cd4))
+* **Modal:** Update ModalHeader close button ([#281](https://github.com/reactstrap/reactstrap/issues/281)) ([a9dc654](https://github.com/reactstrap/reactstrap/commit/a9dc654))
+* **Navbar:** remove default toggleable class ([#285](https://github.com/reactstrap/reactstrap/issues/285)) ([19b32cd](https://github.com/reactstrap/reactstrap/commit/19b32cd))
+
+
+### Features
+
+* **Collapse:** add delay prop ([#287](https://github.com/reactstrap/reactstrap/issues/287)) ([2b69ad6](https://github.com/reactstrap/reactstrap/commit/2b69ad6))
+
+
+### BREAKING CHANGES
+
+* Navbar: - Navbar no longer applies a default `.navbar-toggleable` class, as it is not required for all Navbar configurations.
+
+
+
+# [4.0.0-alpha.8](https://github.com/reactstrap/reactstrap/compare/3.9.5...v4.0.0-alpha.8) (2017-01-06)
+
+
+### Features
+
+* **cssModules:** adding missing classes ([#271](https://github.com/reactstrap/reactstrap/issues/271)) ([e8e818b](https://github.com/reactstrap/reactstrap/commit/e8e818b))
+* **Progress:** enchance multiple progress bars ([#271](https://github.com/reactstrap/reactstrap/issues/274))
+
+### BREAKING CHANGE:
+
+Progress component now requires `multi` prop on the outer component for nested progress bars. Inner Progress components will require the `bar` prop for nested progress bars.
+
+
+# [4.0.0-alpha.7](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.6...v4.0.0-alpha.7) (2017-01-05)
+
+
+### Features
+
+* **Col:** update classes based on alpha.6 changes ([#267](https://github.com/reactstrap/reactstrap/issues/267)) ([89ff16c](https://github.com/reactstrap/reactstrap/commit/89ff16c))
+* **Collapse:** add navbar prop ([#266](https://github.com/reactstrap/reactstrap/issues/266)) ([c1b633a](https://github.com/reactstrap/reactstrap/commit/c1b633a))
+* **Nav:** update navbar prop class value ([#265](https://github.com/reactstrap/reactstrap/pull/265))([f979aae54a8662d151d6216dac45b9dc3541ca7e] (https://github.com/reactstrap/reactstrap/pull/265/commits/f979aae54a8662d151d6216dac45b9dc3541ca7e))
+* **Navbar:** rename dark prop to inverse, add toggleable size prop ([#265](https://github.com/reactstrap/reactstrap/pull/265))([3ee55f19792bd803d937837f4599ff0ee88974fb] (https://github.com/reactstrap/reactstrap/pull/265/commits/3ee55f19792bd803d937837f4599ff0ee88974fb))
+
+
+### BREAKING CHANGES
+
+* Col: The default xs prop now returns `.col` instead of
+`.col-xs-12`. The `auto` size value now returns `.col-auto` or
+`.col-sm-auto` for variable width content columns. Use `true` or `''`
+as the size value to return `.col` or `.col-sm` for auto layout of
+columns (not to be confused with `auto` -> (variable width of
+content)).
+
+
+
+# [4.0.0-alpha.6](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.5...v4.0.0-alpha.6) (2017-01-03)
+
+
+### Bug Fixes
+
+* **className:** update "active" to "show" for stateful components ([#259](https://github.com/reactstrap/reactstrap/issues/259)) ([7df9a01](https://github.com/reactstrap/reactstrap/commit/7df9a01))
+
+
+### Features
+
+* **Progress:** update markup & support nested progress bars ([#261](https://github.com/reactstrap/reactstrap/issues/261)) ([0b19b41](https://github.com/reactstrap/reactstrap/commit/0b19b41))
+* **Row:** add noGutters prop ([#260](https://github.com/reactstrap/reactstrap/issues/260)) ([c79bb3e](https://github.com/reactstrap/reactstrap/commit/c79bb3e))
+
+
+
+# [4.0.0-alpha.5](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.4...v4.0.0-alpha.5) (2016-12-18)
+
+
+### Features
+
+* **Modal:** Pass through props in Modal ([#254](https://github.com/reactstrap/reactstrap/issues/254)) ([c99e873](https://github.com/reactstrap/reactstrap/commit/c99e873))
+
+
+
+## [3.9.5](https://github.com/reactstrap/reactstrap/compare/3.9.4...v3.9.5) (2016-12-18)
+
+
+### Features
+
+* **Modal:** Pass through props in Modal ([#254](https://github.com/reactstrap/reactstrap/issues/254)) ([a783308](https://github.com/reactstrap/reactstrap/commit/a783308))
+
+
+
+# [4.0.0-alpha.4](https://github.com/reactstrap/reactstrap/compare/3.9.4...v4.0.0-alpha.4) (2016-12-15)
+
+* **Modal:** clear timeouts when toggling of modal - [#166](https://github.com/reactstrap/reactstrap/issues/166) ([5e0f5d2](https://github.com/reactstrap/reactstrap/commit/5e0f5d2))
+
+
+
+## [3.9.4](https://github.com/reactstrap/reactstrap/compare/3.9.3...v3.9.4) (2016-12-12)
+
+### Bug Fixes
+
+* **Modal:** clear timeouts when toggling of modal - [#166](https://github.com/reactstrap/reactstrap/issues/166) ([5e0f5d2](https://github.com/reactstrap/reactstrap/commit/5e0f5d2))
+
+
+# [4.0.0-alpha.3](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.2...v4.0.0-alpha.3) (2016-12-01)
+
+
+
+# [4.0.0-alpha.2](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.1...v4.0.0-alpha.2) (2016-11-28)
+
+
+### Bug Fixes
+
+* **className:** update "in" to "active" for stateful components ([#241](https://github.com/reactstrap/reactstrap/issues/241)) ([ea2439e](https://github.com/reactstrap/reactstrap/commit/ea2439e))
+
+
+
+## [3.9.3](https://github.com/reactstrap/reactstrap/compare/3.9.2...v3.9.3) (2016-12-01)
+
+
+### Features
+
+* **ListGroup:** prevent onClick when disabled & add docs [#185](https://github.com/reactstrap/reactstrap/issues/185) ([#236](https://github.com/reactstrap/reactstrap/issues/236)) ([1301b11](https://github.com/reactstrap/reactstrap/commit/1301b11))
+
+
+
+## [3.9.2](https://github.com/reactstrap/reactstrap/compare/3.9.1...v3.9.2) (2016-11-28)
+
+
+### Bug Fixes
+
+* **Popover:** remove old arrow markup, correct enabled className ([b9d3ea7](https://github.com/reactstrap/reactstrap/commit/b9d3ea7))
+* **TetherContent:** Fixes className prop typo, removes arrow & position relative hack ([d9e7621](https://github.com/reactstrap/reactstrap/commit/d9e7621))
+* **Tooltip:** remove old arrow markup, correct enabled className ([62d622b](https://github.com/reactstrap/reactstrap/commit/62d622b))
+
+
+
+# [4.0.0-alpha.1](https://github.com/reactstrap/reactstrap/compare/4.0.0-alpha.0...v4.0.0-alpha.1) (2016-11-23)
+
+
+### Features
+
+* **Badge:** rename Tag component to Badge ([#230](https://github.com/reactstrap/reactstrap/issues/230)) ([dfc9943](https://github.com/reactstrap/reactstrap/commit/dfc9943))
+
+
+
+# [4.0.0-alpha.0](https://github.com/reactstrap/reactstrap/compare/v4...v4.0.0-alpha.0) (2016-11-23)
+
+
+
+## [3.9.1](https://github.com/reactstrap/reactstrap/compare/3.9.0...v3.9.1) (2016-11-23)
+
+
+### Bug Fixes
+
+* **modal:** fix multi-modal backdrop ([#227](https://github.com/reactstrap/reactstrap/issues/227)) ([9ddeb8a](https://github.com/reactstrap/reactstrap/commit/9ddeb8a)), closes [#222](https://github.com/reactstrap/reactstrap/issues/222)
+
+
+
+
+# [3.9.0](https://github.com/reactstrap/reactstrap/compare/3.8.1...v3.9.0) (2016-11-13)
+
+
+### Bug Fixes
+
+* **DropdownToggle:** support non Button styles ([#221](https://github.com/reactstrap/reactstrap/issues/221)) ([cd3c1ce](https://github.com/reactstrap/reactstrap/commit/cd3c1ce))
+
+
+### Features
+
+* **ListGroup:** add ListGroupItem, ListGroupItemHeading, ListGroupItemText components ([#192](https://github.com/reactstrap/reactstrap/issues/192)) ([d09e81a](https://github.com/reactstrap/reactstrap/commit/d09e81a))
+
+
+
+
+## [3.8.1](https://github.com/reactstrap/reactstrap/compare/3.8.0...v3.8.1) (2016-11-01)
+
+
+### Features
+
+* **refs:** add getRef to focusable components ([#218](https://github.com/reactstrap/reactstrap/issues/218)) ([cbfa0e0](https://github.com/reactstrap/reactstrap/commit/cbfa0e0))
+
+
+
+
+# [3.8.0](https://github.com/reactstrap/reactstrap/compare/3.7.1...v3.8.0) (2016-11-01)
+
+
+### Features
+
+* **Collapse:** add Collapse component [#79](https://github.com/reactstrap/reactstrap/issues/79) ([#201](https://github.com/reactstrap/reactstrap/issues/201)) ([ddbf0dd](https://github.com/reactstrap/reactstrap/commit/ddbf0dd))
+
+
+
+
+## [3.7.1](https://github.com/reactstrap/reactstrap/compare/3.7.0...v3.7.1) (2016-10-29)
+
+
+### Bug Fixes
+
+* **NavbarToggler:** remove unnecessary menu char ([#200](https://github.com/reactstrap/reactstrap/issues/200)) ([67544a3](https://github.com/reactstrap/reactstrap/commit/67544a3))
+
+
+
# [3.7.0](https://github.com/reactstrap/reactstrap/compare/3.6.0...v3.7.0) (2016-10-27)
@@ -566,6 +2036,3 @@ custom elements should render their html “tags”.
* **Buttons:** support block level buttons ([f9cf8db](https://github.com/reactstrap/reactstrap/commit/f9cf8db))
* **Dropdowns:** add examples ([3d48e8c](https://github.com/reactstrap/reactstrap/commit/3d48e8c))
* **Dropdowns:** basic dropdown, toggle, menu & menu items ([750aaf9](https://github.com/reactstrap/reactstrap/commit/750aaf9))
-
-
-
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..2680b24b8
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,76 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at me@thesharpieone.com. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fe2bda538..ea5d8a41b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -3,6 +3,7 @@
If you have found an issue or would like to request a new feature, simply create a new issue detailing the request. We also welcome pull requests. See below for information on getting started with development and submitting pull requests.
## Found an Issue?
+
If you find a bug in the source code or a mistake in the documentation, you can help us by
submitting an issue to our [GitHub Repository](https://github.com/reactstrap/reactstrap/issues/new). Even better you can submit a Pull Request
with a fix.
@@ -14,10 +15,10 @@ with a fix.
You can request a new feature by submitting an issue to our [GitHub Repository](https://github.com/reactstrap/reactstrap/issues/new). If you
would like to implement a new feature then consider what kind of change it is:
-* **Major Changes** that you wish to contribute to the project should be discussed first in a [GitHub Issue](https://github.com/reactstrap/reactstrap/issues/new) or [Slack](https://reactstrap.slack.com) so that we can better coordinate our efforts, prevent
-duplication of work, and help you to craft the change so that it is successfully accepted into the
-project. Slack invites can be obtained [here](https://reactstrap.herokuapp.com/).
-* **Small Changes** can be crafted and submitted to the [GitHub Repository](https://github.com/reactstrap/reactstrap) as a Pull Request.
+- **Major Changes** that you wish to contribute to the project should be discussed first in a [GitHub Issue](https://github.com/reactstrap/reactstrap/issues/new) or [Slack](https://reactstrap.slack.com) so that we can better coordinate our efforts, prevent
+ duplication of work, and help you to craft the change so that it is successfully accepted into the
+ project. Slack invites can be obtained [here](https://reactstrap.herokuapp.com/).
+- **Small Changes** can be crafted and submitted to the [GitHub Repository](https://github.com/reactstrap/reactstrap) as a Pull Request.
### Submitting a Pull Request
@@ -29,7 +30,9 @@ If you wish to submit a pull request for a new feature or issue, you should star
- All changes from every developer must go through code review before they will be merged.
- All changes must pass the CI build. Travis CI will automatically update your PR with the build status.
- All changes must have unit tests.
+- All changes must have Typescript types in the [`types`](./types) directory.
- All components must have a demo implementation in the `docs/lib/examples` directory.
+- Make sure to run `yarn lint` and `yarn prettier` on your work before submitting the PR
## Resources
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
index f0975bb2a..2fd9890a4 100644
--- a/ISSUE_TEMPLATE.md
+++ b/ISSUE_TEMPLATE.md
@@ -1,11 +1,41 @@
### Issue description
-- version `#x.x.x`
- components: `name`
+- reactstrap version `#x.x.x`
+- import method `umd/csj/es`
+- react version `#x.x.x`
+- bootstrap version `#x.x.x`
+
+### What is happening?
+
+
+
+### What should be happening?
+
+
### Steps to reproduce issue
-- ...
+1. ...
+2. ...
+
+### Error message in console
+
+```
+paste error message with stacktrack here
+```
+
+### Code
+
+
-
diff --git a/LICENSE b/LICENSE
index 5655106cc..f0da33c54 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2016 Eddy Hernandez, Chris Burrell
+Copyright (c) 2016-Present Eddy Hernandez, Chris Burrell, Evan Sharp
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/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..79377934e
--- /dev/null
+++ b/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,25 @@
+
+
+- [ ] Bug fix
+- [ ] New feature
+- [ ] Chore
+- [ ] Breaking change
+- [ ] There is an open issue which this change addresses
+- [ ] I have read the **[CONTRIBUTING](./CONTRIBUTING.md)** document.
+- [ ] My commits follow the [Git Commit Guidelines](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits)
+- [ ] My code follows the code style of this project.
+- [ ] My change requires a change to the documentation.
+ - [ ] I have updated the documentation accordingly.
+- [ ] My change requires a change to [Typescript typings](./types/lib).
+ - [ ] I have updated the typings accordingly.
+- [ ] I have added tests to cover my changes.
+- [ ] All new and existing tests passed.
+
+
+
+
diff --git a/README.md b/README.md
index 1d621b27d..de3b95b0d 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,73 @@
[](https://reactstrap.github.io)
-[](https://travis-ci.org/reactstrap/reactstrap) [](https://coveralls.io/github/reactstrap/reactstrap?branch=master)
+[](https://www.npmjs.com/package/reactstrap) [](https://github.com/reactstrap/reactstrap) [](https://coveralls.io/github/reactstrap/reactstrap?branch=master) [](https://github.com/reactstrap/reactstrap/blob/master/LICENSE)
# reactstrap
-Easy to use React Bootstrap 4 components compatible with React 0.14.x and 15.x.
+Stateless React Components for Bootstrap 5.
+If you're using Bootstrap 4, you'll need to use [Reactstrap v8](https://deploy-preview-2356--reactstrap.netlify.app/)
-## Installation
+## Getting Started
-Install `reactstrap` and __peer dependencies__ via NPM
+Follow the [create-react-app instructions](https://create-react-app.dev/docs/getting-started) to get started and then follow the reactstrap version of [adding bootstrap](#adding-bootstrap).
+
+### tl;dr
+
+ ```
+npx create-react-app my-app
+cd my-app/
+npm start
+```
+or, if npx (Node >= 6 and npm >= 5.2 ) not available
-```sh
-npm install --save reactstrap react-addons-transition-group react-addons-css-transition-group react react-dom
```
+npm install -g create-react-app
+
+create-react-app my-app
+cd my-app/
+npm start
+```
+
+Then open [http://localhost:3000/](http://localhost:3000/) to see your app. The initial structure of your app is setup. Next, let's [add reactstrap and bootstrap](#adding-bootstrap).
-Import the components you need, example:
+### Adding Bootstrap
+
+Install reactstrap and Bootstrap from NPM. Reactstrap does not include Bootstrap CSS so this needs to be installed as well:
+
+```
+npm i bootstrap
+npm i reactstrap react react-dom
+```
+
+Import Bootstrap CSS in the ```src/index.js``` file:
```js
-import { Button, Popover, Tooltip } from 'reactstrap';
+import 'bootstrap/dist/css/bootstrap.css';
```
+Import required reactstrap components within ```src/App.js``` file or your custom component files:
+
+```js
+import { Button } from 'reactstrap';
+```
+
+Now you are ready to use the imported reactstrap components within your component hierarchy defined in the render
+method. Here is an example [`App.js`](https://gist.github.com/Thomas-Smyth/006fd507a7295f17a8473451938f9935) redone
+using reactstrap.
+
+### Dependencies
+
+##### Required Peer Dependencies
+
+These libraries are not bundled with Reactstrap and required at runtime:
+
+ * [**react**](https://www.npmjs.com/package/react)
+ * [**react-dom**](https://www.npmjs.com/package/react-dom)
+
## About the Project
-This library contains React Bootstrap 4 components that favor composition and control. The library does not depend on jQuery or Bootstrap javascript. However, [Tether](http://tether.io/) is relied upon for advanced positioning of content like Tooltips, Popovers, and auto-flipping Dropdowns.
+This library contains React Bootstrap components that favor composition and control. The library does not depend on jQuery or Bootstrap javascript. However, [Poppers.js](https://popper.js.org/) via [react-popper](https://github.com/popperjs/react-popper) is relied upon for advanced positioning of content like Tooltips, Popovers, and auto-flipping Dropdowns.
There are a few core concepts to understand in order to make the most out of this library.
@@ -59,13 +103,21 @@ There are a few core concepts to understand in order to make the most out of thi
- `color` - applies color classes, ex: ` `
- `size` - for controlling size classes. ex: ` `
- `tag` - customize component output by passing in an element name or Component
- - boolean based props (attributes) when possible for alternative style classes or `sr-only` content
+ - boolean based props (attributes) when possible for alternative style classes or `visually-hidden` content
## [Documentation](https://reactstrap.github.io)
https://reactstrap.github.io
+Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/).
+
+## [CodeSandbox Examples](https://github.com/reactstrap/code-sandbox-examples)
+
+Here are some ready-to-go examples for [CodeSandbox](https://codesandbox.io/) that you can experiment with.
+
+https://github.com/reactstrap/code-sandbox-examples
+
## [Contributing](CONTRIBUTING.md)
## Development
@@ -73,33 +125,45 @@ https://reactstrap.github.io
Install dependencies:
```sh
-npm install
+yarn install
```
Run examples at [http://localhost:8080/](http://localhost:8080/) with webpack dev server:
```sh
-npm start
+yarn start
```
Run tests & coverage report:
```sh
-npm test
+yarn cover
```
Watch tests:
```sh
-npm run test-watch
+yarn test
```
+## Releasing
+
+Release branches/versioning/notes will be automatically created and maintained by the [release-please](https://github.com/googleapis/release-please) github action. When you're ready to publish the release, just merge the release branch. The release will be created, the new package will be published, and the updated docs will be deployed to https://reactstrap.github.io/.
+
## In the wild
Organizations and projects using `reactstrap`
-- [availity-reactstrap-validation](https://availity.github.io/availity-reactstrap-validation/)
+- [airframe-react](https://github.com/0wczar/airframe-react) - [demo](http://dashboards.webkom.co/react/airframe/) - Airframe provides all the components a developer needs to build data-intensive web apps using React.
- [component-template](https://reactstrap.github.io/component-template/)
+- [video-react](https://video-react.github.io/)
+- [CoreUI-Free-Bootstrap-Admin-Template](https://github.com/mrholek/CoreUI-Free-Bootstrap-Admin-Template) - [demo](http://coreui.io/demo/React_Demo/#/)
+- [Admin dashboard example app built with reactstrap](https://github.com/reduction-admin/react-reduction) - [demo](https://reduction-admin.firebaseapp.com/)
+- [DevExtreme React Grid](https://devexpress.github.io/devextreme-reactive/react/grid/) - It's a stateless data grid built on top of `reactstrap` with paging, sorting, filtering, grouping, selection, editing and virtual scrolling features.
+- [DevExtreme React Chart](https://devexpress.github.io/devextreme-reactive/react/chart/) - A chart built on top of `reactstrap` that visualizes data using a variety of series types, including bar, line, area, scatter, pie, and more.
+- [reactstrap-scrollspy](https://github.com/keidrun/reactstrap-scrollspy/) - [demo](https://keidrun.github.io/reactstrap-scrollspy/)
+- [formstrap](https://github.com/pedox/formstrap/) - [demo](https://pedox.github.io/formstrap/) - Let your `reactstrap` input component integrate seamlessly using `Formik`
+- [Jimu UI](https://developers.arcgis.com/experience-builder/api-reference/jimu-ui/) - [demo](https://developers.arcgis.com/experience-builder/storybook/?path=/story/welcome--page) - The UI library for [ArcGIS Experience Builder](https://developers.arcgis.com/experience-builder/) mapping platform.
Submit a PR to add to this list!
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..870e14b13
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,13 @@
+# Security Policy
+
+## Supported Versions
+
+Currently, only the latest version is supported.
+
+## Reporting a Vulnerability
+
+### Security contact information
+
+To report a security vulnerability, please use the
+[Tidelift security contact](https://tidelift.com/security).
+Tidelift will coordinate the fix and disclosure.
diff --git a/__mocks__/.eslintrc b/__mocks__/.eslintrc
new file mode 100644
index 000000000..55f121d15
--- /dev/null
+++ b/__mocks__/.eslintrc
@@ -0,0 +1,5 @@
+{
+ "env": {
+ "jest": true
+ }
+}
diff --git a/__mocks__/react-popper.js b/__mocks__/react-popper.js
new file mode 100644
index 000000000..8b9950ee9
--- /dev/null
+++ b/__mocks__/react-popper.js
@@ -0,0 +1,16 @@
+
+export function Manager({ children }) {
+ return (children);
+}
+
+export const Popper = jest.fn(({ children, placement }) => {
+ return children({
+ ref: () => {},
+ placement,
+ style: {},
+ arrowProps: { ref: () => {}, style: {} } });
+})
+
+export function Reference({ children }) {
+ return children({ ref: () => {} });
+}
diff --git a/babel.build.config.cjs b/babel.build.config.cjs
new file mode 100644
index 000000000..a5670030f
--- /dev/null
+++ b/babel.build.config.cjs
@@ -0,0 +1,6 @@
+
+module.exports = {
+ extends: './babel.config.cjs',
+ ignore: [/\.d.ts/, /\.(stories|spec|test)\.(js|ts|jsx|tsx?)$/],
+ plugins: ["@babel/plugin-transform-modules-commonjs"]
+};
\ No newline at end of file
diff --git a/babel.config.cjs b/babel.config.cjs
new file mode 100644
index 000000000..947f24250
--- /dev/null
+++ b/babel.config.cjs
@@ -0,0 +1,14 @@
+module.exports = api => {
+ const isTest = api.env('test');
+ // TODO: Maybe use babel-preset env with browser targets and get rid of plugins
+ return {
+ "presets": isTest
+ ? [['@babel/preset-env', {targets: {node: 'current'}}], "@babel/preset-react"]
+ : ["@babel/preset-react"],
+ "plugins": [
+ "@babel/plugin-proposal-export-default-from",
+ "@babel/plugin-proposal-export-namespace-from",
+ "@babel/plugin-proposal-object-rest-spread"
+ ]
+ };
+};
diff --git a/babel.esm.config.cjs b/babel.esm.config.cjs
new file mode 100644
index 000000000..4706ffb90
--- /dev/null
+++ b/babel.esm.config.cjs
@@ -0,0 +1,7 @@
+module.exports = {
+ extends: './babel.config.cjs',
+ presets: [
+ // Dont transform modules for the esm build
+ ['@babel/preset-env', { modules: false }],
+ ],
+};
diff --git a/config-overrides/index.cjs b/config-overrides/index.cjs
new file mode 100644
index 000000000..728270796
--- /dev/null
+++ b/config-overrides/index.cjs
@@ -0,0 +1,3 @@
+const { override, addBabelPlugins } = require('customize-cra');
+
+module.exports = override(...addBabelPlugins('@babel/plugin-proposal-export-default-from', '@babel/plugin-proposal-export-namespace-from'));
\ No newline at end of file
diff --git a/config-overrides/package.json b/config-overrides/package.json
new file mode 100644
index 000000000..9602418ae
--- /dev/null
+++ b/config-overrides/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "config-overrides",
+ "version": "1.0.0",
+ "main": "./index.cjs"
+}
diff --git a/docs/lib/Components/AlertsPage.js b/docs/lib/Components/AlertsPage.js
deleted file mode 100644
index 3515d75e1..000000000
--- a/docs/lib/Components/AlertsPage.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import { Alert } from 'reactstrap';
-import Helmet from 'react-helmet';
-
-import AlertExample from '../examples/Alert';
-const AlertExampleSource = require('!!raw!../examples/Alert');
-
-import AlertDismissExample from '../examples/AlertDismiss';
-const AlertDismissExampleSource = require('!!raw!../examples/AlertDismiss');
-
-export default class AlertsPage extends React.Component {
- render() {
- return (
-
-
-
-
Alerts
-
-
-
- {AlertExampleSource}
-
-
-
-
Properties
-
-
-{`Alert.propTypes = {
- className: PropTypes.string,
- color: PropTypes.string, // default: 'success'
- isOpen: PropTypes.bool, // default: true
- toggle: PropTypes.func,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
-
- // Set any of the timeouts to 0 to disable animation
- transitionAppearTimeout: PropTypes.number,
- transitionEnterTimeout: PropTypes.number,
- transitionLeaveTimeout: PropTypes.number
-}`}
-
-
-
-
Dismissing
-
-
-
- {AlertDismissExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/BreadcrumbsPage.js b/docs/lib/Components/BreadcrumbsPage.js
deleted file mode 100644
index f4ff0cd9c..000000000
--- a/docs/lib/Components/BreadcrumbsPage.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import BreadcrumbExample from '../examples/Breadcrumb';
-const BreadcrumbExampleSource = require('!!raw!../examples/Breadcrumb');
-
-import BreadcrumbNoListExample from '../examples/BreadcrumbNoList';
-const BreadcrumbNoListExampleSource = require('!!raw!../examples/BreadcrumbNoList');
-
-export default class BreadcrumbsPage extends React.Component {
- render() {
- return (
-
-
-
Breadcrumbs
-
-
-
-
-
- {BreadcrumbExampleSource}
-
-
-
No list
-
-
Breadcrumbs can work without the usage of list markup.
-
-
-
-
-
- {BreadcrumbNoListExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/ButtonDropdownPage.js b/docs/lib/Components/ButtonDropdownPage.js
deleted file mode 100644
index ef0821079..000000000
--- a/docs/lib/Components/ButtonDropdownPage.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import {
- Button,
- ButtonDropdown,
- DropdownToggle,
- DropdownItem,
- DropdownMenu } from 'reactstrap';
-import Example from '../examples/ButtonDropdownMulti';
-import ExampleSplit from '../examples/ButtonDropdownMultiSplit';
-import ButtonDropdownExample from '../examples/ButtonDropdown';
-const ButtonDropdownExampleSource = require('!!raw!../examples/ButtonDropdown');
-
-export default class ButtonDropdownPage extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
-
Button Dropdown
-
-
-
-
-
- {ButtonDropdownExampleSource}
-
-
-
Properties
-
-
-{`ButtonDropdown.propTypes = {
- disabled: PropTypes.bool,
- dropup: PropTypes.bool,
- group: PropTypes.bool,
- isOpen: PropTypes.bool,
- tag: PropTypes.string,
- tether: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
- toggle: PropTypes.func
-};
-
-DropdownToggle.propTypes = {
- caret: PropTypes.bool,
- color: PropTypes.string,
- disabled: PropTypes.bool,
- onClick: PropTypes.func,
- 'data-toggle': PropTypes.string,
- 'aria-haspopup': PropTypes.bool
-};`}
-
-
-
Single button dropdowns
-
-
-
-{`
-
- Text
-
-
- Header
- Action
- Another Action
-
- Another Action
-
- `}
-
-
-
Split button dropdowns
-
-
-
-{`
- {this.props.text}
-
-
- Header
- Action
- Another Action
-
- Another Action
-
- `}
-
-
-
Sizing
-
-
- { this.setState({ btnLg: !this.state.btnLg }); }}>
-
- Large Button
-
-
- Another Action
- Another Action
-
-
-
-
- { this.setState({ btnSm: !this.state.btnSm }); }}>
-
- Small Button
-
-
- Another Action
- Another Action
-
-
-
-
-
-
-{`
-
- Large Button
-
-
- Another Action
- Another Action
-
-
-
-
-
- Small Button
-
-
- Another Action
- Another Action
-
- `}
-
-
-
Dropup variation
-
-
- { this.setState({ btnDropup: !this.state.btnDropup }); }}>
-
- Dropup
-
-
- Another Action
- Another Action
-
-
-
-
-
-
-{`
-
- Dropup
-
-
- Another Action
- Another Action
-
- `}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/ButtonGroupPage.js b/docs/lib/Components/ButtonGroupPage.js
deleted file mode 100644
index 0325b8b97..000000000
--- a/docs/lib/Components/ButtonGroupPage.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import {
- Button,
- ButtonGroup,
- ButtonDropdown,
- DropdownToggle,
- DropdownItem,
- DropdownMenu } from 'reactstrap';
-import { Link } from 'react-router';
-import UI from '../UI';
-
-import ButtonGroupExample from '../examples/ButtonGroup';
-const ButtonGroupExampleSource = require('!!raw!../examples/ButtonGroup');
-
-import ButtonToolbarExample from '../examples/ButtonToolbar';
-const ButtonToolbarExampleSource = require('!!raw!../examples/ButtonToolbar');
-
-
-export default class ButtonGroupPage extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
-
Button Group
-
-
-
- {ButtonGroupExampleSource}
-
-
-
Properties
-
-
-{`ButtonGroup.propTypes = {
- ariaLabel: PropTypes.string,
- className: PropTypes.string,
- role: PropTypes.string,
- size: PropTypes.string,
- vertical: PropTypes.bool
-};`}
-
-
-
Button Toolbar
-
-
-
-
-
- {ButtonToolbarExampleSource}
-
-
-
Sizing
-
-
-
- Left
- Middle
- Right
-
-
-
- Left
- Middle
- Right
-
-
-
- Left
- Middle
- Right
-
-
-
-
-
-{`
- Left
- Middle
- Right
-
-
-
- Left
- Middle
- Right
-
-
-
- Left
- Middle
- Right
- `}
-
-
-
Nesting
-
-
-
- 1
- 2
-
-
- Dropdown
-
-
- Dropdown Link
- Dropdown Link
-
-
-
-
-
-
-
-{`
- 1
- 2
-
-
- Dropdown
-
-
- Dropdown Link
- Dropdown Link
-
-
- `}
-
-
-
Vertical variation
-
-
- 1
- 2
-
-
- Dropdown
-
-
- Dropdown Link
- Dropdown Link
-
-
-
-
-
-
-{`
- 1
- 2
-
-
- Dropdown
-
-
- Dropdown Link
- Dropdown Link
-
-
- `}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/ButtonsPage.js b/docs/lib/Components/ButtonsPage.js
deleted file mode 100644
index 100576a1f..000000000
--- a/docs/lib/Components/ButtonsPage.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import { Button } from 'reactstrap';
-import Helmet from 'react-helmet';
-import ButtonExample from '../examples/Button';
-const ButtonExampleSource = require('!!raw!../examples/Button');
-
-import ButtonOutline from '../examples/ButtonOutline';
-const ButtonOutlineSource = require('!!raw!../examples/ButtonOutline');
-
-export default class ButtonsPage extends React.Component {
- render() {
- return (
-
-
-
Buttons
-
-
-
-
-
- {ButtonExampleSource}
-
-
-
Properties
-
-
-{`Button.propTypes = {
- active: PropTypes.bool,
- block: PropTypes.bool,
- color: PropTypes.string, // default: 'secondary'
- disabled: PropTypes.bool,
-
- // Pass in a Component to override default button element
- // example: react-router Link
- // default: 'button'
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
-
- onClick: PropTypes.func,
- size: PropTypes.string
-}`}
-
-
-
Outline Buttons
-
-
-
-
-
- {ButtonOutlineSource}
-
-
-
Sizes
-
- Large Button {' '}
- Large Button
-
-
-
-{`Large Button {' '}
-Large Button `}
-
-
-
- Small Button {' '}
- Small Button
-
-
-
-{`Small Button {' '}
-Small Button `}
-
-
-
- Block level button
- Block level button
-
-
-
-{`Block level button
-Block level button `}
-
-
-
Active State
-
- Primary link {' '}
- Link
-
-
-
-{`Primary link {' '}
-Link `}
-
-
-
Disabled State
-
- Primary button {' '}
- Button
-
-
-
-{`Primary button {' '}
-Button `}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/CardPage.js b/docs/lib/Components/CardPage.js
deleted file mode 100644
index 53d16295f..000000000
--- a/docs/lib/Components/CardPage.js
+++ /dev/null
@@ -1,239 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import CardExample from '../examples/Card';
-import CardContentExample from '../examples/CardContentTypes';
-import CardSizingExample from '../examples/CardSizing';
-import CardAlignmentExample from '../examples/CardAlignment';
-import CardHeaderFooterExample from '../examples/CardHeaderFooter';
-import CardImageCapsExample from '../examples/CardImageCaps';
-import CardImageOverlayExample from '../examples/CardImageOverlay';
-import CardBackgroundsExample from '../examples/CardBackgrounds';
-import CardOutlineExample from '../examples/CardOutline';
-import CardGroupsExample from '../examples/CardGroups';
-import CardDecksExample from '../examples/CardDecks';
-import CardColumnsExample from '../examples/CardColumns';
-
-const CardExampleSource = require('!!raw!../examples/Card');
-const CardContentExampleSource = require('!!raw!../examples/CardContentTypes');
-const CardSizingExampleSource = require('!!raw!../examples/CardSizing');
-const CardAlignmentExampleSource = require('!!raw!../examples/CardAlignment');
-const CardHeaderFooterExampleSource = require('!!raw!../examples/CardHeaderFooter');
-const CardImageCapsExampleSource = require('!!raw!../examples/CardImageCaps');
-const CardImageOverlayExampleSource = require('!!raw!../examples/CardImageOverlay');
-const CardBackgroundsExampleSource = require('!!raw!../examples/CardBackgrounds');
-const CardOutlineExampleSource = require('!!raw!../examples/CardOutline');
-const CardGroupsExampleSource = require('!!raw!../examples/CardGroups');
-const CardDecksExampleSource = require('!!raw!../examples/CardDecks');
-const CardColumnsExampleSource = require('!!raw!../examples/CardColumns');
-
-export default class CardPage extends React.Component {
- render() {
- return (
-
-
-
Card
-
-
-
-
-
-
- {CardExampleSource}
-
-
-
Properties
-
-
-{`Card.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- inverse: PropTypes.bool,
- color: PropTypes.string,
- block: PropTypes.bool,
- className: PropTypes.string
-};
-
-CardBlock.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardColumns.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardDeck.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string,
- // enable flexbox version of component (removes extra classes)
- flex: PropTypes.bool
-};
-
-CardFooter.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardGroup.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardHeader.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardImg.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string,
- // Use top or bottom to position image via "card-img-top" or "card-img-bottom"
- top: PropTypes.bool,
- bottom: PropTypes.bool
-};
-
-CardImgOverlay.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardLink.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardSubtitle.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardText.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-CardTitle.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};`}
-
-
-
Content Types
-
-
-
-
-
- {CardContentExampleSource}
-
-
-
Sizing
-
-
-
-
-
- {CardSizingExampleSource}
-
-
-
Text alignment
-
-
-
-
-
- {CardAlignmentExampleSource}
-
-
-
Header and Footer
-
-
-
-
-
- {CardHeaderFooterExampleSource}
-
-
-
Image caps
-
-
-
-
-
- {CardImageCapsExampleSource}
-
-
-
Image overlays
-
-
-
-
-
- {CardImageOverlayExampleSource}
-
-
-
Background variants
-
-
-
-
-
- {CardBackgroundsExampleSource}
-
-
-
Outline variants
-
-
-
-
-
- {CardOutlineExampleSource}
-
-
-
Groups
-
-
-
-
-
- {CardGroupsExampleSource}
-
-
-
Decks
-
-
-
-
-
- {CardDecksExampleSource}
-
-
-
Columns
-
-
-
-
-
- {CardColumnsExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/DropdownsPage.js b/docs/lib/Components/DropdownsPage.js
deleted file mode 100644
index 328534e6c..000000000
--- a/docs/lib/Components/DropdownsPage.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { Link } from 'react-router';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import {
- Dropdown,
- DropdownToggle,
- DropdownItem,
- DropdownMenu } from 'reactstrap';
-import DropdownExample from '../examples/Dropdown';
-const DropdownExampleSource = require('!!raw!../examples/Dropdown');
-import DropdownSizingExample from '../examples/DropdownSizing';
-
-export default class DropdownPage extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggleExample2 = this.toggle.bind(this);
- this.state = {
- example2: false
- };
- }
-
- toggle() {
- this.setState({
- example2: !this.state.example2
- });
- }
-
- render() {
- return (
-
-
-
Dropdowns
-
- The Dropdown component is used to pass the isOpen & toggle props via context to the following components: DropdownToggle, DropdownMenu. The DropdownToggle uses the Button component internally, meaning it also accepts all the props the Button component accepts.
-
-
Advanced Positioning
-
- The DropdownMenu can automatically be flipped (dropup vs dropdown) according to space available in the viewport by passing the tether prop to Dropdown {` `}. For full customization, an object with Tether options can be used instead.
-
-
-
-
-
-
- {DropdownExampleSource}
-
-
-
Properties
-
-
-{`Dropdown.propTypes = {
- disabled: PropTypes.bool,
- dropup: PropTypes.bool,
- group: PropTypes.bool,
- isOpen: PropTypes.bool,
- tag: PropTypes.string, // default: 'div'
- tether: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
- toggle: PropTypes.func
-};
-
-DropdownToggle.propTypes = {
- caret: PropTypes.bool,
- color: PropTypes.string,
- className: PropTypes.string,
- disabled: PropTypes.bool,
- onClick: PropTypes.func,
- 'data-toggle': PropTypes.string,
- 'aria-haspopup': PropTypes.bool,
- // For DropdownToggle usage inside a Nav
- nav: PropTypes.bool,
- // Defaults to Button component
- tag: PropTypes.any
-};`}
-
-
-
Alignment
-
To align the DropdownMenu to the right, add a right prop to it.
-
-
-
-
- Dropdown
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
-
-
-
-
-{`
-
- Dropdown
-
-
- Header
- Action
- Another Action
-
- Another Action
-
- `}
-
-
-
Menu Headers
-
-
-{'Header '}
-
-
-
Menu Dividers
-
-
-{' '}
-
-
-
Menu Items
-
-
-{'Action '}
-
-
-
Disabled Menu Items
-
-
-{'Action '}
-
-
-
Sizing
-
-
-
-{`
-
- Dropdown
-
-
- ...
-
-
-
-
-
- Dropdown
-
-
- ...
-
-
-
-
-
- Dropdown
-
-
- ...
-
- `}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/FormPage.js b/docs/lib/Components/FormPage.js
deleted file mode 100644
index f871f53b3..000000000
--- a/docs/lib/Components/FormPage.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import FormExample from '../examples/Form';
-const FormExampleSource = require('!!raw!../examples/Form');
-
-import FormGridExample from '../examples/FormGrid';
-const FormGridExampleSource = require('!!raw!../examples/FormGrid');
-
-import FormInlineExample from '../examples/FormInline';
-const FormInlineExampleSource = require('!!raw!../examples/FormInline');
-
-import FormFeedbackExample from '../examples/FormFeedback';
-const FormFeedbackExampleSource = require('!!raw!../examples/FormFeedback');
-
-import InputTypeExample from '../examples/InputType';
-const InputTypeExampleSource = require('!!raw!../examples/InputType');
-
-import InputSizingExample from '../examples/InputSizing';
-const InputSizingExampleSource = require('!!raw!../examples/InputSizing');
-
-import InputGridSizingExample from '../examples/InputGridSizing';
-const InputGridSizingExampleSource = require('!!raw!../examples/InputGridSizing');
-
-import LabelHiddenExample from '../examples/LabelHidden';
-const LabelHiddenExampleSource = require('!!raw!../examples/LabelHidden');
-
-export default class FormPage extends React.Component {
- render() {
- return (
-
-
-
Form
-
-
-
-
-
- {FormExampleSource}
-
-
-
-
Form Grid
-
-
-
-
-
- {FormGridExampleSource}
-
-
-
-
Inline Form
-
-
-
-
-
- {FormInlineExampleSource}
-
-
-
-
Form Feedback
-
-
-
-
-
- {FormFeedbackExampleSource}
-
-
-
-
Input Types
-
-
-
-
-
- {InputTypeExampleSource}
-
-
-
-
Input Sizing
-
-
-
-
-
- {InputSizingExampleSource}
-
-
-
-
Input Grid Sizing
-
-
-
-
-
- {InputGridSizingExampleSource}
-
-
-
-
Hidden Labels
-
-
-
-
-
- {LabelHiddenExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/InputGroupPage.js b/docs/lib/Components/InputGroupPage.js
deleted file mode 100644
index b6be47bc2..000000000
--- a/docs/lib/Components/InputGroupPage.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import OverviewExample from '../examples/InputGroupOverview';
-const OverviewExampleSource = require('!!raw!../examples/InputGroupOverview');
-import AddonExample from '../examples/InputGroupAddon';
-const AddonExampleSource = require('!!raw!../examples/InputGroupAddon');
-import AddonSizingExample from '../examples/InputGroupSizing';
-const AddonSizingExampleSource = require('!!raw!../examples/InputGroupSizing');
-import ButtonExample from '../examples/InputGroupButton';
-const ButtonExampleSource = require('!!raw!../examples/InputGroupButton');
-import ButtonShorthandExample from '../examples/InputGroupButtonShorthand';
-const ButtonShorthandExampleSource = require('!!raw!../examples/InputGroupButtonShorthand');
-
-export default class InputGroupPage extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
-
Input Group
-
-
-
-
-
- {OverviewExampleSource}
-
-
-
Properties
-
-
-{`InputGroup.propTypes = {
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- size: PropTypes.string,
- className: PropTypes.string
-};
-
-InputGroupAddOn.propTypes = {
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- className: PropTypes.string
-};
-
-InputGroupButton.propTypes = {
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- children: PropTypes.node,
- groupClassName: PropTypes.string, // only used in shorthand
- groupAttributes: PropTypes.object, // only used in shorthand
- className: PropTypes.string
-};`}
-
-
-
Addons
-
-
-
- {AddonExampleSource}
-
-
-
-
Addon Sizing
-
-
-
- {AddonSizingExampleSource}
-
-
-
-
Buttons / Dropdowns
-
-
-
- {ButtonExampleSource}
-
-
-
-
Button Shorthand
-
- Button shorthand is a convenience method for adding just a button. It is triggered when only a single string
- is the child. A Button will be created and all of the props will be passed to it with the exception of
- groupClassName and groupAttributes, which are used to added classes and attributes
- to the wrapping container. This means you can add your onClick and other handlers directly to
- InputGroupButton. If you want your string to not be wrapped in a button, then you really want to
- use InputGroupAddon (see Addons above for that).
-
-
-
-
- {ButtonShorthandExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/JumbotronPage.js b/docs/lib/Components/JumbotronPage.js
deleted file mode 100644
index 7c784bd76..000000000
--- a/docs/lib/Components/JumbotronPage.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import JumbotronExample from '../examples/Jumbotron';
-import JumbotronFluidExample from "../examples/JumbotronFluid";
-
-const JumbotronExampleSource = require('!!raw!../examples/Jumbotron');
-const JumbotronFluidExampleSource = require('!!raw!../examples/JumbotronFluid');
-
-export default class JumbotronPage extends React.Component {
- render() {
- return (
-
-
-
Jumbotron
-
-
-
-
-
-
- {JumbotronExampleSource}
-
-
-
Properties
-
-
-{`Jumbotron.propTypes = {
- // Pass in a Component to override default element
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- fluid: PropTypes.bool,
- className: PropTypes.string
-};`}
-
-
-
-
Fluid Jumbotron
-
-
-
-
-
-
- {JumbotronFluidExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/LayoutPage.js b/docs/lib/Components/LayoutPage.js
deleted file mode 100644
index 75a1a566c..000000000
--- a/docs/lib/Components/LayoutPage.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import LayoutExample from '../examples/Layout';
-const LayoutExampleSource = require('!!raw!../examples/Layout');
-
-export default class LayoutsPage extends React.Component {
- render() {
- return (
-
-
-
Layout
-
-
-
-
-
- {LayoutExampleSource}
-
-
-
Container Properties
-
-
-{`Container.propTypes = {
- fluid: PropTypes.bool
- // applies .container-fluid class
-}`}
-
-
-
Row Properties
-
-
-{'Row.propTypes = {}'}
-
-
-
Col Properties
-
-
-{`const stringOrNumberProp = PropTypes.oneOfType([PropTypes.number, PropTypes.string]);
-const columnProps = PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number,
- PropTypes.bool,
- PropTypes.shape({
- size: stringOrNumberProp,
- push: stringOrNumberProp,
- pull: stringOrNumberProp,
- offset: stringOrNumberProp
- })
-]);
-
-Col.propTypes = {
- xs: columnProps,
- sm: columnProps,
- md: columnProps,
- lg: columnProps,
- xl: columnProps
-}`}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/MediaPage.js b/docs/lib/Components/MediaPage.js
deleted file mode 100644
index 100c2f4af..000000000
--- a/docs/lib/Components/MediaPage.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import MediaExample from '../examples/Media';
-const MediaExampleSource = require('!!raw!../examples/Media');
-
-import MediaNestedExample from '../examples/MediaNested';
-const MediaNestedExampleSource = require('!!raw!../examples/MediaNested');
-
-import MediaAlignmentExample from '../examples/MediaAlignment';
-const MediaAlignmentExampleSource = require('!!raw!../examples/MediaAlignment');
-
-import MediaListExample from '../examples/MediaList';
-const MediaListExampleSource = require('!!raw!../examples/MediaList');
-
-export default class MediaPage extends React.Component {
- render() {
- return (
-
-
-
Media object
-
-
-
-
-
- {MediaExampleSource}
-
-
-
Properties
-
-
-{`Media.propTypes = {
- body: PropTypes.bool,
- bottom: PropTypes.bool,
- children: PropTypes.node,
- className: PropTypes.string,
- heading: PropTypes.bool,
- left: PropTypes.bool,
- list: PropTypes.bool,
- middle: PropTypes.bool,
- object: PropTypes.bool,
- right: PropTypes.bool,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
- top: PropTypes.bool,
-};`}
-
-
-
Nesting
-
-
-
-
-
- {MediaNestedExampleSource}
-
-
-
Alignment
-
-
-
-
-
- {MediaAlignmentExampleSource}
-
-
-
Media list
-
-
-
-
-
- {MediaListExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/ModalsPage.js b/docs/lib/Components/ModalsPage.js
deleted file mode 100644
index 20b4f9f6b..000000000
--- a/docs/lib/Components/ModalsPage.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import ModalExample from '../examples/Modal';
-const ModalExampleSource = require('!!raw!../examples/Modal');
-
-import ModalBackdropExample from '../examples/ModalBackdrop';
-const ModalBackdropExampleSource = require('!!raw!../examples/ModalBackdrop');
-
-import ModalNestedExample from '../examples/ModalNested';
-const ModalNestedExampleSource = require('!!raw!../examples/ModalNested');
-
-export default class ModalsPage extends React.Component {
- render() {
- return (
-
-
-
Modals
-
-
-
- {ModalExampleSource}
-
-
-
Properties
-
-
-{`Modal.propTypes = {
- isOpen: PropTypes.bool,
- // boolean to control the state of the popover
- toggle: PropTypes.func,
- // callback for toggling isOpen in the controlling component
- size: PropTypes.string,
- // control backdrop, see http://v4-alpha.getbootstrap.com/components/modal/#options
- backdrop: PropTypes.oneOfType([
- PropTypes.bool,
- PropTypes.oneOf(['static'])
- ]),
- keyboard: PropTypes.bool
-}`}
-
-
-
-
Backdrop
-
-
-
- {ModalBackdropExampleSource}
-
-
-
-
Nested Modals
-
-
-
- {ModalNestedExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/NavbarPage.js b/docs/lib/Components/NavbarPage.js
deleted file mode 100644
index 6a71c3417..000000000
--- a/docs/lib/Components/NavbarPage.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { Link } from 'react-router';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import NavbarExample from '../examples/Navbar';
-const NavbarExampleSource = require('!!raw!../examples/Navbar');
-
-export default class NavsPage extends React.Component {
- render() {
- return (
-
-
-
Navbar
-
-
-
-
-
- {NavbarExampleSource}
-
-
-
Navbar Properties
-
See also Navs for additional components and PropTypes.
-
-
-{`Navbar.propTypes = {
- light: PropTypes.bool,
- dark: PropTypes.bool,
- full: PropTypes.bool,
- fixed: PropTypes.string,
- color: PropTypes.string,
- role: PropTypes.string,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
- // pass in custom element to use
-}`}
-
-
-
NavbarBrand Properties
-
-
-{`NavbarBrand.propTypes = {
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
- // pass in custom element to use
-}`}
-
-
-
NavbarToggler Properties
-
-
-{`NavbarToggler.propTypes = {
- type: PropTypes.string,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
- // pass in custom element to use
-}`}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/NavsPage.js b/docs/lib/Components/NavsPage.js
deleted file mode 100644
index d69b9b92b..000000000
--- a/docs/lib/Components/NavsPage.js
+++ /dev/null
@@ -1,107 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import NavsExample from '../examples/Navs';
-const NavsExampleSource = require('!!raw!../examples/Navs');
-import NavInlineExample from '../examples/NavInline';
-const NavInlineExampleSource = require('!!raw!../examples/NavInline');
-import NavTabsExample from '../examples/NavTabs';
-const NavTabsExampleSource = require('!!raw!../examples/NavTabs');
-import NavPillsExample from '../examples/NavPills';
-const NavPillsExampleSource = require('!!raw!../examples/NavPills');
-
-export default class NavssPage extends React.Component {
- render() {
- return (
-
-
-
Navs
-
-
-
-
-
- {NavsExampleSource}
-
-
-
Nav Properties
-
-
-{`Nav.propTypes = {
- inline: PropTypes.bool,
- disabled: PropTypes.bool,
- tabs: PropTypes.bool,
- pills: PropTypes.bool,
- stacked: PropTypes.bool,
- navbar: PropTypes.bool,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
- // pass in custom element to use
-}`}
-
-
-
NavItem Properties
-
-
-{`NavItem.propTypes = {
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
- // pass in custom element to use
-}`}
-
-
-
NavLink Properties
-
-
-{`NavLink.propTypes = {
- disabled: PropTypes.bool,
- active: PropTypes.bool,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string])
- // pass in custom element to use
-}`}
-
-
-
NavDropdown Properties
-
-
-{`NavDropdown.propTypes = {
- disabled: PropTypes.bool,
- dropup: PropTypes.bool,
- group: PropTypes.bool,
- isOpen: PropTypes.bool,
- tag: PropTypes.string,
- tether: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
- toggle: PropTypes.func
-};`}
-
-
-
Inline
-
-
-
-
-
- {NavInlineExampleSource}
-
-
-
Tabs
-
-
-
-
-
- {NavTabsExampleSource}
-
-
-
Pills
-
-
-
-
-
- {NavPillsExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/PaginationPage.js b/docs/lib/Components/PaginationPage.js
deleted file mode 100644
index 2c7091235..000000000
--- a/docs/lib/Components/PaginationPage.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import PaginationExample from '../examples/Pagination';
-const PaginationExampleSource = require('!!raw!../examples/Pagination');
-
-import PaginationStateExample from '../examples/PaginationState';
-const PaginationStateExampleSource = require('!!raw!../examples/PaginationState');
-
-import PaginationSizingLargeExample from '../examples/PaginationSizingLarge';
-const PaginationSizingLargeExampleSource = require('!!raw!../examples/PaginationSizingLarge');
-
-import PaginationSizingSmallExample from '../examples/PaginationSizingSmall';
-const PaginationSizingSmallExampleSource = require('!!raw!../examples/PaginationSizingSmall');
-
-export default class PaginationPage extends React.Component {
- render() {
- return (
-
-
-
Pagination
-
-
-
- {PaginationExampleSource}
-
-
-
Properties
-
-
-{`Pagination.propTypes = {
- children: PropTypes.node,
- className: PropTypes.string,
- size: PropTypes.string,
- tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
-}`}
-
-
-
Disabled and active states
-
-
-
- {PaginationStateExampleSource}
-
-
-
Sizing
-
-
-
- {PaginationSizingLargeExampleSource}
-
-
-
-
-
- {PaginationSizingSmallExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/PopoversPage.js b/docs/lib/Components/PopoversPage.js
deleted file mode 100644
index 481ffefe3..000000000
--- a/docs/lib/Components/PopoversPage.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import PopoverExample from '../examples/Popover';
-const PopoverExampleSource = require('!!raw!../examples/Popover');
-import PopoverExampleMulti from '../examples/PopoverMulti';
-const PopoverExampleMultiSource = require('!!raw!../examples/PopoverMulti');
-
-export default class PopoversPage extends React.Component {
- render() {
- return (
-
-
-
Popovers
-
Popovers are built with http://tether.io .
-
-
-
- {PopoverExampleSource}
-
-
-
Properties
-
-
-{`Popover.propTypes = {
- isOpen: PropTypes.bool,
- // boolean to control the state of the popover
- toggle: PropTypes.func,
- // callback for toggling isOpen in the controlling component
- target: PropTypes.string.isRequired,
- // target div ID, popover is attached to this element
- tether: PropTypes.object,
- // optionally overide tether config http://tether.io/#options
- tetherRef: PropType.function,
- // function which is passed a reference to the instance of tether for manually \`position()\`ing
- placement: PropTypes.oneOf([
- 'top',
- 'bottom',
- 'left',
- 'right',
- 'top left',
- 'top center',
- 'top right',
- 'right top',
- 'right middle',
- 'right bottom',
- 'bottom right',
- 'bottom center',
- 'bottom left',
- 'left top',
- 'left middle',
- 'left bottom'
- ])
- // convenience attachments for popover
- // examples http://github.hubspot.com/tooltip/docs/welcome/
-}`}
-
-
-
Popovers List
-
-
-
- {PopoverExampleMultiSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/ProgressPage.js b/docs/lib/Components/ProgressPage.js
deleted file mode 100644
index 5ba69c6d5..000000000
--- a/docs/lib/Components/ProgressPage.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import { Card, CardText } from 'reactstrap';
-import ProgressExample from '../examples/Progress';
-const ProgressExampleSource = require('!!raw!../examples/Progress');
-import ProgressColorExample from '../examples/ProgressColor';
-const ProgressColorExampleSource = require('!!raw!../examples/ProgressColor');
-import ProgressAnimatedExample from '../examples/ProgressAnimated';
-const ProgressAnimatedExampleSource = require('!!raw!../examples/ProgressAnimated');
-import ProgressStripedExample from '../examples/ProgressStriped';
-const ProgressStripedExampleSource = require('!!raw!../examples/ProgressStriped');
-import ProgressMaxExample from '../examples/ProgressMax';
-const ProgressMaxExampleSource = require('!!raw!../examples/ProgressMax');
-
-export default class ProgressPage extends React.Component {
- render() {
- return (
-
-
-
Progress
-
-
-
- {ProgressExampleSource}
-
-
-
Properties
-
-
-{`Progress.propTypes = {
- tag: PropTypes.string,
- value: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number,
- ]),
- max: PropTypes.oneOf([
- PropTypes.string,
- PropTypes.number,
- ]),
- animated: PropTypes.bool,
- stripped: PropTypes.bool,
- color: PropTypes.string,
- className: PropTypes.string
-};
-
-Progress.defaultProps = {
- tag: 'progress',
- value: 0,
- max: 100,
-};`}
-
-
-
-
Color Variants
-
-
-
- {ProgressColorExampleSource}
-
-
-
-
Striped
-
-
-
- {ProgressStripedExampleSource}
-
-
-
-
Animated
-
- The animated prop also adds the striped prop; there is no need to pass both.
-
-
-
- Currently, animated progress does not work in bootstrap v4 (alpha 3). This is an issue bootstrap has to
- resolve.
-
-
-
-
-
- {ProgressAnimatedExampleSource}
-
-
-
-
Max value
-
-
-
- {ProgressMaxExampleSource}
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/TablesPage.js b/docs/lib/Components/TablesPage.js
deleted file mode 100644
index e7e5bb665..000000000
--- a/docs/lib/Components/TablesPage.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import TableExample from '../examples/Table';
-import TableBorderedExample from '../examples/TableBordered';
-import TableHoverExample from '../examples/TableHover';
-import TableInverseExample from '../examples/TableInverse';
-import TableReflowExample from '../examples/TableReflow';
-import TableResponsiveExample from '../examples/TableResponsive';
-import TableSizingExample from '../examples/TableSizing';
-import TableStripedExample from '../examples/TableStriped';
-
-const TableExampleSource = require('!!raw!../examples/Table');
-const TableBorderedExampleSource = require('!!raw!../examples/TableBordered');
-const TableHoverExampleSource = require('!!raw!../examples/TableHover');
-const TableInverseExampleSource = require('!!raw!../examples/TableInverse');
-const TableReflowExampleSource = require('!!raw!../examples/TableReflow');
-const TableResponsiveExampleSource = require('!!raw!../examples/TableResponsive');
-const TableSizingExampleSource = require('!!raw!../examples/TableSizing');
-const TableStripedExampleSource = require('!!raw!../examples/TableStriped');
-
-export default class TablesPage extends React.Component {
- render() {
- return (
-
-
-
Tables
-
-
-
-
- {TableExampleSource}
-
-
-
Properties
-
-
-{`Card.propTypes = {
-// Pass in a Component to override default element
-tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
-size: PropTypes.string,
-bordered: PropTypes.bool,
-striped: PropTypes.bool,
-inverse: PropTypes.bool,
-hover: PropTypes.bool,
-reflow: PropTypes.bool,
-responsive: PropTypes.bool
-};`}
-
-
-
Inverse table
-
-
-
- {TableInverseExampleSource}
-
-
-
Striped rows
-
-
-
- {TableStripedExampleSource}
-
-
-
Bordered table
-
-
-
- {TableBorderedExampleSource}
-
-
-
Hoverable rows
-
-
-
- {TableHoverExampleSource}
-
-
-
Small table
-
-
-
- {TableSizingExampleSource}
-
-
-
Responsive table
-
-
-
- {TableResponsiveExampleSource}
-
-
-
Reflow
-
-
-
- {TableReflowExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/TabsPage.js b/docs/lib/Components/TabsPage.js
deleted file mode 100644
index c3f145109..000000000
--- a/docs/lib/Components/TabsPage.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import TabsExample from '../examples/Tabs';
-const TabsExampleSource = require('!!raw!../examples/Tabs');
-
-export default function TabsPage() {
- return (
-
-
-
Tabs
-
-
-
-
-
-
- {TabsExampleSource}
-
-
-
- );
-}
diff --git a/docs/lib/Components/TagsPage.js b/docs/lib/Components/TagsPage.js
deleted file mode 100644
index 8bc6e30e9..000000000
--- a/docs/lib/Components/TagsPage.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-
-import TagExample from '../examples/Tag';
-const TagExampleSource = require('!!raw!../examples/Tag');
-
-import TagPillsExample from '../examples/TagPills';
-const TagPillsExampleSource = require('!!raw!../examples/TagPills');
-
-import TagVariationsExample from '../examples/TagVariations';
-const TagVariationsExampleSource = require('!!raw!../examples/TagVariations');
-
-export default class TagsPage extends React.Component {
- render() {
- return (
-
-
-
Tags
-
-
Scale to parent
-
-
-
-
-
- {TagExampleSource}
-
-
-
Variations
-
-
-
-
-
- {TagVariationsExampleSource}
-
-
-
Pills
-
-
-
-
-
- {TagPillsExampleSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/TooltipsPage.js b/docs/lib/Components/TooltipsPage.js
deleted file mode 100644
index 5214cc50a..000000000
--- a/docs/lib/Components/TooltipsPage.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import Helmet from 'react-helmet';
-import TooltipExample from '../examples/Tooltip';
-const TooltipExampleSource = require('!!raw!../examples/Tooltip');
-import TooltipAutoHideExample from '../examples/TooltipAutoHide';
-const TooltipExampleAutoHideSource = require('!!raw!../examples/TooltipAutoHide');
-import TooltipExampleMulti from '../examples/TooltipMulti';
-const TooltipExampleMultiSource = require('!!raw!../examples/TooltipMulti');
-
-export default class TooltipsPage extends React.Component {
- render() {
- return (
-
-
-
Tooltips
-
Tooltips are built with http://tether.io .
-
-
-
-
-
- {TooltipExampleSource}
-
-
-
Properties
-
-
-{`Tooltip.propTypes = {
- isOpen: PropTypes.bool,
- // boolean to control the state of the tooltip
- toggle: PropTypes.func,
- // callback for toggling isOpen in the controlling component
- target: PropTypes.string.isRequired,
- // target div ID, popover is attached to this element
- tether: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
- // optionally overide tether config http://tether.io/#options
- tetherRef: PropType.function,
- // function which is passed a reference to the instance of tether for manually \`position()\`ing
- delay: PropTypes.oneOfType([
- PropTypes.shape({ show: PropTypes.number, hide: PropTypes.number }),
- PropTypes.number
- ]),
- // optionally override show/hide delays - default { show: 0, hide: 250 }
- autohide: PropTypes.bool,
- // optionally hide tooltip when hovering over tooltip content - default true
- placement: PropTypes.oneOf([
- 'top',
- 'bottom',
- 'left',
- 'right',
- 'top left',
- 'top center',
- 'top right',
- 'right top',
- 'right middle',
- 'right bottom',
- 'bottom right',
- 'bottom center',
- 'bottom left',
- 'left top',
- 'left middle',
- 'left bottom'
- ])
- // convenience attachments for popover
- // examples http://github.hubspot.com/tooltip/docs/welcome/
-}`}
-
-
-
Tooltip Disable Autohide
-
-
-
-
-
- {TooltipExampleAutoHideSource}
-
-
-
Tooltips List
-
-
-
-
-
- {TooltipExampleMultiSource}
-
-
-
- );
- }
-}
diff --git a/docs/lib/Components/index.js b/docs/lib/Components/index.js
deleted file mode 100644
index 1f5d622b7..000000000
--- a/docs/lib/Components/index.js
+++ /dev/null
@@ -1,141 +0,0 @@
-import React from 'react';
-import { Link } from 'react-router';
-import { Container, Row, Col, Nav, NavItem, NavLink } from 'reactstrap';
-
-const ComponentLink = (props) => {
- return (
-
-
- {props.item.name}
-
-
- );
-};
-const propTypes = {
- children: React.PropTypes.node
-};
-
-class Components extends React.Component {
- constructor(props) {
- super(props);
-
- this.state = {
- navItems: [
- {
- name: 'Buttons',
- to: '/components/buttons/'
- },
- {
- name: 'Button Group',
- to: '/components/button-group/'
- },
- {
- name: 'Button Dropdown',
- to: '/components/button-dropdown/'
- },
- {
- name: 'Dropdowns',
- to: '/components/dropdowns/'
- },
- {
- name: 'Form',
- to: '/components/form/'
- },
- {
- name: 'Input Group',
- to: '/components/input-group/'
- },
- {
- name: 'Breadcrumbs',
- to: '/components/breadcrumbs/'
- },
- {
- name: 'Tags',
- to: '/components/tags/'
- },
- {
- name: 'Card',
- to: '/components/card/'
- },
- {
- name: 'Navs',
- to: '/components/navs/'
- },
- {
- name: 'Navbar',
- to: '/components/navbar/'
- },
- {
- name: 'Tooltips',
- to: '/components/tooltips/'
- },
- {
- name: 'Popovers',
- to: '/components/popovers/'
- },
- {
- name: 'Progress',
- to: '/components/progress/'
- },
- {
- name: 'Modals',
- to: '/components/modals/'
- },
- {
- name: 'Layout',
- to: '/components/layout/'
- },
- {
- name: 'Tables',
- to: '/components/tables/'
- },
- {
- name: 'Media',
- to: '/components/media/'
- },
- {
- name: 'Pagination',
- to: '/components/pagination/'
- },
- {
- name: 'Tabs',
- to: '/components/tabs/'
- },
- {
- name: 'Jumbotron',
- to: '/components/jumbotron/'
- },
- {
- name: 'Alerts',
- to: '/components/alerts/'
- }
- ]
- };
- }
- render() {
- return (
-
-
-
-
-
Components
-
- {this.state.navItems.map((item, i) => {
- return ;
- })}
-
- Additional Components
-
-
-
-
-
- {this.props.children}
-
-
-
- );
- }
-}
-Components.propTypes = propTypes;
-export default Components;
diff --git a/docs/lib/Home/index.js b/docs/lib/Home/index.js
deleted file mode 100644
index bf304aaec..000000000
--- a/docs/lib/Home/index.js
+++ /dev/null
@@ -1,101 +0,0 @@
-import React from 'react';
-import { PrismCode } from 'react-prism';
-import { Button, Container, Row, Col, Jumbotron } from 'reactstrap';
-import { Link } from 'react-router';
-import Example from '../examples/import-basic';
-
-const importBasic = require('!!raw!../examples/import-basic');
-
-export default () => {
- return (
-
-
-
-
-
-
-
-
- reactstrap
-
- Easy to use React Bootstrap 4 components
-
-
- View on Github
- View Components
-
-
-
-
-
-
-
-
- Installation
-
- NPM
- Install reactstrap and peer dependencies via NPM
-
- npm install --save reactstrap react-addons-transition-group react-addons-css-transition-group react react-dom
-
- ES6 - import the components you need
-
-
-
-
-
- {importBasic}
-
-
- CDN
-
-
- https://unpkg.com/reactstrap/dist/reactstrap.min.js
-
-
- Check out the demo here
- About the Project
-
- This library contains React Bootstrap 4 components that favor composition and control. The library does not depend on jQuery or Bootstrap javascript. However, Tether is relied upon for advanced positioning of content like Tooltips, Popovers, and auto-flipping Dropdowns.
- There are a few core concepts to understand in order to make the most out of this library.
- 1) Your content is expected to be composed via props.children rather than using named props to pass in Components.
-
-
-{`// Content passed in via props
-const Example = (props) => {
- return (
- This is a tooltip example !
- );
-}
-
-// Content passed in as children (Preferred)
-const PreferredExample = (props) => {
- return (
-
- This is a tooltip example.
-
-
-
-
- );
-}`}
-
-
-
- 2) Attributes in this library are used to pass in state, conveniently apply modifier classes, enable advanced functionality (like tether), or automatically include non-content based elements.
-
- Examples:
-
- isOpen - current state for items like dropdown, popover, tooltip
- toggle - callback for toggling isOpen in the controlling component
- color - applies color classes, ex: {' '}
- size for controlling size classes. ex: {' '}
- tag - customize component output by passing in an element name or Component
- boolean based props (attributes) when possible for alternative style classes or sr-only content
-
-
-
-
-
- );
-};
diff --git a/docs/lib/NotFound/index.js b/docs/lib/NotFound/index.js
deleted file mode 100644
index 18fad2b9a..000000000
--- a/docs/lib/NotFound/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { Button, Container, Row, Col } from 'reactstrap';
-import { Link } from 'react-router';
-import Helmet from 'react-helmet';
-
-export default () => {
- return (
-
-
-
-
-
-
-
-
-
- 404 - Not Found
-
- Can't find what you're looking for? Open up an issue.
-
-
- Get Started
- View Components
-
-
-
-
-
-
- );
-};
diff --git a/docs/lib/UI/Footer.js b/docs/lib/UI/Footer.js
deleted file mode 100644
index b80102676..000000000
--- a/docs/lib/UI/Footer.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-import { Container, Row, Col } from 'reactstrap';
-
-export default () => {
- return (
-
- );
-};
diff --git a/docs/lib/UI/Layout.js b/docs/lib/UI/Layout.js
deleted file mode 100644
index 6650703f4..000000000
--- a/docs/lib/UI/Layout.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-import Helmet from 'react-helmet';
-import Footer from './Footer';
-import Nav from './Nav';
-
-export default (props) => {
- return (
-
-
-
- {props.children}
-
-
- );
-};
diff --git a/docs/lib/UI/Nav.js b/docs/lib/UI/Nav.js
deleted file mode 100644
index 8ee443000..000000000
--- a/docs/lib/UI/Nav.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import { Link } from 'react-router';
-import { Container, Navbar, NavbarBrand, Nav, NavItem, NavLink } from 'reactstrap';
-
-export default () => {
- return (
-
-
- reactstrap
-
-
- Components
-
-
- Github
-
-
-
-
- );
-};
diff --git a/docs/lib/UI/index.js b/docs/lib/UI/index.js
deleted file mode 100644
index 0abd814e6..000000000
--- a/docs/lib/UI/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import Footer from './Footer';
-import Nav from './Nav';
-import Layout from './Layout';
-
-export default {
- Nav,
- Layout,
- Footer
-};
diff --git a/docs/lib/app.js b/docs/lib/app.js
deleted file mode 100644
index e267f0ee6..000000000
--- a/docs/lib/app.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import 'bootstrap-css';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-import ReactDOMServer from 'react-dom/server';
-import { Router, RouterContext, match, browserHistory, createMemoryHistory } from 'react-router';
-import routes from './routes';
-import Helmet from 'react-helmet';
-
-// Client render (optional):
-if (typeof document !== 'undefined') {
- const outlet = document.getElementById('app');
- browserHistory.listen(function (location) {
- window.ga('set', 'page', location.pathname);
- window.ga('send', 'pageview');
- });
-
- let Holder;
- window.addEventListener('DOMContentLoaded', () => {
- Holder = require('holderjs');
- });
-
- ReactDOM.render(
- {
- window.scrollTo(0, 0);
-
- if (Holder) {
- Holder.run();
- }
- }}
- history={browserHistory}
- routes={routes}
- />,
- outlet
- );
-}
-
-// Exported static site renderer:
-export default (locals, callback) => {
- const history = createMemoryHistory();
- const location = history.createLocation(locals.path);
-
- match({ routes, location }, (error, redirectLocation, renderProps) => {
- let url;
- if (redirectLocation && redirectLocation.pathname) {
- url = redirectLocation.pathname;
- callback(null, `
-
-
-
-
-
- `);
- }
- const body = ReactDOMServer.renderToString( );
- const head = Helmet.rewind();
- let markup = `
-
-
-
-
-
- ${head.title.toString()}
- ${head.meta.toString()}
-
-
-
-
-
- ${body}
-
-
-
-
- `;
- callback(null, markup);
- });
-};
diff --git a/docs/lib/examples/Alert.js b/docs/lib/examples/Alert.js
deleted file mode 100644
index 315db74c6..000000000
--- a/docs/lib/examples/Alert.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-import { Alert } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Well done! You successfully read this important alert message.
-
-
- Heads up! This alert needs your attention, but it's not super important.
-
-
- Warning! Better check yourself, you're not looking too good.
-
-
- Oh snap! Change a few things up and try submitting again.
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/AlertDismiss.js b/docs/lib/examples/AlertDismiss.js
deleted file mode 100644
index accfb6b22..000000000
--- a/docs/lib/examples/AlertDismiss.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import { Alert } from 'reactstrap';
-
-class AlertExample extends React.Component {
- constructor(props) {
- super(props);
-
- this.state = {
- visible: true
- }
- }
-
- onDismiss = () => {
- this.setState({ visible: false });
- }
-
- render() {
- return (
-
- I am an alert and I can be dismissed!
-
- );
- }
-}
-
-export default AlertExample;
diff --git a/docs/lib/examples/Breadcrumb.js b/docs/lib/examples/Breadcrumb.js
deleted file mode 100644
index e8333ead7..000000000
--- a/docs/lib/examples/Breadcrumb.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-import { Breadcrumb, BreadcrumbItem } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/BreadcrumbNoList.js b/docs/lib/examples/BreadcrumbNoList.js
deleted file mode 100644
index d0851fff1..000000000
--- a/docs/lib/examples/BreadcrumbNoList.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Breadcrumb, BreadcrumbItem } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Home
- Library
- Data
- Bootstrap
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/Button.js b/docs/lib/examples/Button.js
deleted file mode 100644
index 178012d9e..000000000
--- a/docs/lib/examples/Button.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react';
-import { Button } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- primary {' '}
- secondary {' '}
- success {' '}
- info {' '}
- warning {' '}
- danger {' '}
- link
-
- );
- }
-}
diff --git a/docs/lib/examples/ButtonDropdown.js b/docs/lib/examples/ButtonDropdown.js
deleted file mode 100644
index 86da15bdd..000000000
--- a/docs/lib/examples/ButtonDropdown.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from 'react';
-import { ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
- Button Dropdown
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
- );
- }
-}
diff --git a/docs/lib/examples/ButtonDropdownMulti.js b/docs/lib/examples/ButtonDropdownMulti.js
deleted file mode 100644
index f2b23aa1b..000000000
--- a/docs/lib/examples/ButtonDropdownMulti.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from 'react';
-import { ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
- {this.props.text}
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
- );
- }
-}
diff --git a/docs/lib/examples/ButtonDropdownMultiSplit.js b/docs/lib/examples/ButtonDropdownMultiSplit.js
deleted file mode 100644
index 2c4ac95d7..000000000
--- a/docs/lib/examples/ButtonDropdownMultiSplit.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import { Button, ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
- {this.props.text}
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
- );
- }
-}
diff --git a/docs/lib/examples/ButtonGroup.js b/docs/lib/examples/ButtonGroup.js
deleted file mode 100644
index 29e03a287..000000000
--- a/docs/lib/examples/ButtonGroup.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import { Button, ButtonGroup } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- Left {' '}
- Middle {' '}
- Right
-
- );
- }
-}
diff --git a/docs/lib/examples/ButtonOutline.js b/docs/lib/examples/ButtonOutline.js
deleted file mode 100644
index 84ce3de3e..000000000
--- a/docs/lib/examples/ButtonOutline.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Button } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- primary {' '}
- secondary {' '}
- success {' '}
- info {' '}
- warning {' '}
- danger
-
- );
- }
-}
diff --git a/docs/lib/examples/ButtonToolbar.js b/docs/lib/examples/ButtonToolbar.js
deleted file mode 100644
index 30c5c9172..000000000
--- a/docs/lib/examples/ButtonToolbar.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import { Button, ButtonGroup, ButtonToolbar } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
- 1
- 2
- 3
- 4
-
-
- 5
- 6
- 7
-
-
- 8
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Card.js b/docs/lib/examples/Card.js
deleted file mode 100644
index d0d72809d..000000000
--- a/docs/lib/examples/Card.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import { Card, CardImg, CardText, CardBlock,
- CardTitle, CardSubtitle, Button } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
-
- Card title
- Card subtitle
- Some quick example text to build on the card title and make up the bulk of the card's content.
- Button
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardAlignment.js b/docs/lib/examples/CardAlignment.js
deleted file mode 100644
index 847e7cf4d..000000000
--- a/docs/lib/examples/CardAlignment.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import { Card, Button, CardTitle, CardText } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardBackgrounds.js b/docs/lib/examples/CardBackgrounds.js
deleted file mode 100644
index 92cab3f19..000000000
--- a/docs/lib/examples/CardBackgrounds.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from 'react';
-import { Card, Button, CardTitle, CardText } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardColumns.js b/docs/lib/examples/CardColumns.js
deleted file mode 100644
index cdb2cefa3..000000000
--- a/docs/lib/examples/CardColumns.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react';
-import { Card, Button, CardImg, CardTitle, CardText, CardColumns,
- CardSubtitle, CardBlock } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
-
- Card title
- Card subtitle
- This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
- Button
-
-
-
-
-
-
-
- Card title
- Card subtitle
- This card has supporting text below as a natural lead-in to additional content.
- Button
-
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
-
-
- Card title
- Card subtitle
- This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.
- Button
-
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardContentTypes.js b/docs/lib/examples/CardContentTypes.js
deleted file mode 100644
index 9d3fc1939..000000000
--- a/docs/lib/examples/CardContentTypes.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import { Card, CardImg, CardText, CardBlock, CardLink,
- CardTitle, CardSubtitle } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
- Card title
- Card subtitle
-
-
-
- Some quick example text to build on the card title and make up the bulk of the card's content.
- Card Link
- Another Link
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardDecks.js b/docs/lib/examples/CardDecks.js
deleted file mode 100644
index a2e330572..000000000
--- a/docs/lib/examples/CardDecks.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Card, Button, CardImg, CardTitle, CardText, CardDeck,
- CardSubtitle, CardBlock } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
-
- Card title
- Card subtitle
- This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
- Button
-
-
-
-
-
- Card title
- Card subtitle
- This card has supporting text below as a natural lead-in to additional content.
- Button
-
-
-
-
-
- Card title
- Card subtitle
- This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.
- Button
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardGroups.js b/docs/lib/examples/CardGroups.js
deleted file mode 100644
index 48e70fb2d..000000000
--- a/docs/lib/examples/CardGroups.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Card, Button, CardImg, CardTitle, CardText, CardGroup,
- CardSubtitle, CardBlock } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
-
- Card title
- Card subtitle
- This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
- Button
-
-
-
-
-
- Card title
- Card subtitle
- This card has supporting text below as a natural lead-in to additional content.
- Button
-
-
-
-
-
- Card title
- Card subtitle
- This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.
- Button
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardHeaderFooter.js b/docs/lib/examples/CardHeaderFooter.js
deleted file mode 100644
index 12465883e..000000000
--- a/docs/lib/examples/CardHeaderFooter.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { Card, Button, CardHeader, CardFooter, CardBlock,
- CardTitle, CardText } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Header
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
- Footer
-
-
-
- Featured
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
- Footer
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardImageCaps.js b/docs/lib/examples/CardImageCaps.js
deleted file mode 100644
index 1ae4a9b0e..000000000
--- a/docs/lib/examples/CardImageCaps.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { Card, CardBlock, Button, CardTitle, CardText, CardImg } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
-
- Card Title
- This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
-
- Last updated 3 mins ago
-
-
-
-
-
- Card Title
- This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
-
- Last updated 3 mins ago
-
-
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardImageOverlay.js b/docs/lib/examples/CardImageOverlay.js
deleted file mode 100644
index 90093f3a8..000000000
--- a/docs/lib/examples/CardImageOverlay.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import { Card, CardTitle, CardText, CardImg, CardImgOverlay } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
-
- Card Title
- This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
-
- Last updated 3 mins ago
-
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardOutline.js b/docs/lib/examples/CardOutline.js
deleted file mode 100644
index bffc86e40..000000000
--- a/docs/lib/examples/CardOutline.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from 'react';
-import { Card, Button, CardTitle, CardText } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Button
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/CardSizing.js b/docs/lib/examples/CardSizing.js
deleted file mode 100644
index b95a4dffe..000000000
--- a/docs/lib/examples/CardSizing.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import { Card, Button, CardTitle, CardText, Row, Col } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/Dropdown.js b/docs/lib/examples/Dropdown.js
deleted file mode 100644
index 43731cfbc..000000000
--- a/docs/lib/examples/Dropdown.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from 'react';
-import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
- Dropdown
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
- );
- }
-}
diff --git a/docs/lib/examples/DropdownSizing.js b/docs/lib/examples/DropdownSizing.js
deleted file mode 100644
index 23adf3d65..000000000
--- a/docs/lib/examples/DropdownSizing.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
- Dropdown
-
-
- Header
- Action
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Form.js b/docs/lib/examples/Form.js
deleted file mode 100644
index 4fae646f4..000000000
--- a/docs/lib/examples/Form.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react';
-import { Button, Form, FormGroup, Label, Input, FormText } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/FormFeedback.js b/docs/lib/examples/FormFeedback.js
deleted file mode 100644
index 6b85650fe..000000000
--- a/docs/lib/examples/FormFeedback.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from 'react';
-import { Form, FormGroup, Label, Input, FormFeedback, FormText } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/FormGrid.js b/docs/lib/examples/FormGrid.js
deleted file mode 100644
index dbd4b027a..000000000
--- a/docs/lib/examples/FormGrid.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import React from 'react';
-import { Col, Button, Form, FormGroup, Label, Input, FormText } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/FormInline.js b/docs/lib/examples/FormInline.js
deleted file mode 100644
index 888116f2a..000000000
--- a/docs/lib/examples/FormInline.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import { Button, Form, FormGroup, Label, Input } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/InputGridSizing.js b/docs/lib/examples/InputGridSizing.js
deleted file mode 100644
index b352a09ad..000000000
--- a/docs/lib/examples/InputGridSizing.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-import { Col, Form, FormGroup, Label, Input } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/InputGroupAddon.js b/docs/lib/examples/InputGroupAddon.js
deleted file mode 100644
index c65f1b18f..000000000
--- a/docs/lib/examples/InputGroupAddon.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import { InputGroup, InputGroupAddon, Input } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- To the Left!
-
-
-
-
-
- To the Right!
-
-
-
- To the Left!
-
- To the Right!
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/InputGroupButton.js b/docs/lib/examples/InputGroupButton.js
deleted file mode 100644
index a220a8b95..000000000
--- a/docs/lib/examples/InputGroupButton.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react';
-import { InputGroup, InputGroupButton, Input, Button } from 'reactstrap';
-import ButtonDropdownExample from './ButtonDropdown';
-
-const Example = (props) => {
- return (
-
-
- I'm a button
-
-
-
-
-
-
-
-
-
-
-
- I'm a button
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/InputGroupButtonShorthand.js b/docs/lib/examples/InputGroupButtonShorthand.js
deleted file mode 100644
index 2b92bee63..000000000
--- a/docs/lib/examples/InputGroupButtonShorthand.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from 'react';
-import { InputGroup, InputGroupButton, Input } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- To the Left!
-
-
-
-
-
- To the Right!
-
-
-
- To the Left!
-
- To the Right!
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/InputGroupOverview.js b/docs/lib/examples/InputGroupOverview.js
deleted file mode 100644
index 4e005777d..000000000
--- a/docs/lib/examples/InputGroupOverview.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from 'react';
-import { InputGroup, InputGroupAddon, Input } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- @
-
-
-
-
-
-
-
-
-
-
-
-
- @example.com
-
-
-
- $
- $
-
- $
- $
-
-
-
- $
-
- .00
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/InputGroupSizing.js b/docs/lib/examples/InputGroupSizing.js
deleted file mode 100644
index 11bd31bbe..000000000
--- a/docs/lib/examples/InputGroupSizing.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import { InputGroup, InputGroupAddon, Input } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- @lg
-
-
-
-
- @normal
-
-
-
-
- @sm
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/InputSizing.js b/docs/lib/examples/InputSizing.js
deleted file mode 100644
index 24b88b4f3..000000000
--- a/docs/lib/examples/InputSizing.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-import { Form, Input } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/InputType.js b/docs/lib/examples/InputType.js
deleted file mode 100644
index fb7740160..000000000
--- a/docs/lib/examples/InputType.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import React from 'react';
-import { Button, Form, FormGroup, Label, Input, FormText } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/Jumbotron.js b/docs/lib/examples/Jumbotron.js
deleted file mode 100644
index c3a56a6da..000000000
--- a/docs/lib/examples/Jumbotron.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-import { Jumbotron, Button } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
- Hello, world!
- This is a simple hero unit, a simple Jumbotron-style component for calling extra attention to featured content or information.
-
- It uses utility classes for typgraphy and spacing to space content out within the larger container.
-
- Learn More
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/JumbotronFluid.js b/docs/lib/examples/JumbotronFluid.js
deleted file mode 100644
index d5c8ed25c..000000000
--- a/docs/lib/examples/JumbotronFluid.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Jumbotron, Container } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
-
- Fluid jumbotron
- This is a modified jumbotron that occupies the entire horizontal space of its parent.
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/LabelHidden.js b/docs/lib/examples/LabelHidden.js
deleted file mode 100644
index 193a12d1c..000000000
--- a/docs/lib/examples/LabelHidden.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import { Button, Form, FormGroup, Label, Input } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- );
- }
-}
diff --git a/docs/lib/examples/Layout.js b/docs/lib/examples/Layout.js
deleted file mode 100644
index bdaca82f3..000000000
--- a/docs/lib/examples/Layout.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react';
-import { Container, Row, Col } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
- col-xs-12
-
-
- col-xs-6
- col-xs-6
-
-
- .col-xs (flexbox)
- .col-xs (flexbox)
-
-
- col-xs-6 col-sm-4
- col-xs-6 col-sm-4
- col-xs-12 col-sm-4
-
-
- .col-xs-12 .col-sm-6 .col-sm-push-2 .col-sm-pull-2 .col-sm-offset-2
-
-
- .col-xs-12 .col-sm-12 .col-md-6 .col-md-offset-3
-
-
- .col-sm .col-sm-offset-1
- .col-sm .col-sm-offset-1
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Media.js b/docs/lib/examples/Media.js
deleted file mode 100644
index 54bcc046f..000000000
--- a/docs/lib/examples/Media.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-import { Media } from 'reactstrap';
-
-const Example = () => {
- return (
-
-
-
-
-
-
- Media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/MediaAlignment.js b/docs/lib/examples/MediaAlignment.js
deleted file mode 100644
index 413b933e1..000000000
--- a/docs/lib/examples/MediaAlignment.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react';
-import { Media } from 'reactstrap';
-
-const Example = () => {
- return (
-
-
-
-
-
-
-
- Top aligned media
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
-
-
- Middle aligned media
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
-
-
- Bottom aligned media
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/MediaList.js b/docs/lib/examples/MediaList.js
deleted file mode 100644
index 6df37a2e2..000000000
--- a/docs/lib/examples/MediaList.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from 'react';
-import { Media } from 'reactstrap';
-
-const Example = () => {
- return (
-
-
-
-
-
-
-
- Media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
- Nested media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
- Nested media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
-
-
-
-
- Nested media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
-
- Media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/MediaNested.js b/docs/lib/examples/MediaNested.js
deleted file mode 100644
index 5c41c6b41..000000000
--- a/docs/lib/examples/MediaNested.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { Media } from 'reactstrap';
-
-const Example = () => {
- return (
-
-
-
-
-
-
- Media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
-
-
- Nested media heading
-
- Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
-
-
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/Modal.js b/docs/lib/examples/Modal.js
deleted file mode 100644
index c3ed892bb..000000000
--- a/docs/lib/examples/Modal.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-
-import React from 'react';
-import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
-
-class ModalExample extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- modal: false
- };
-
- this.toggle = this.toggle.bind(this);
- }
-
- toggle() {
- this.setState({
- modal: !this.state.modal
- });
- }
-
- render() {
- return (
-
- {this.props.buttonLabel}
-
- Modal title
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
- Do Something {' '}
- Cancel
-
-
-
- );
- }
-}
-
-export default ModalExample;
diff --git a/docs/lib/examples/ModalBackdrop.js b/docs/lib/examples/ModalBackdrop.js
deleted file mode 100644
index 313329984..000000000
--- a/docs/lib/examples/ModalBackdrop.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-
-import React from 'react';
-import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Label, Form, FormGroup } from 'reactstrap';
-
-class ModalExample extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- modal: false,
- backdrop: true
- };
-
- this.toggle = this.toggle.bind(this);
- this.changeBackdrop = this.changeBackdrop.bind(this);
- }
-
- toggle() {
- this.setState({
- modal: !this.state.modal
- });
- }
-
- changeBackdrop(e) {
- let value = e.target.value;
- if (value !== 'static') {
- value = JSON.parse(value);
- }
- this.setState({ backdrop: value });
- }
-
- render() {
- return (
-
-
-
- Modal title
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
- Do Something {' '}
- Cancel
-
-
-
- );
- }
-}
-
-export default ModalExample;
diff --git a/docs/lib/examples/ModalNested.js b/docs/lib/examples/ModalNested.js
deleted file mode 100644
index 3d0ef278e..000000000
--- a/docs/lib/examples/ModalNested.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-
-import React from 'react';
-import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
-
-class ModalExample extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- modal: false,
- nestedModal: false,
- };
-
- this.toggle = this.toggle.bind(this);
- this.toggleNested = this.toggleNested.bind(this);
- }
-
- toggle() {
- this.setState({
- modal: !this.state.modal
- });
- }
-
- toggleNested() {
- this.setState({
- nestedModal: !this.state.nestedModal
- });
- }
-
- render() {
- return (
-
- {this.props.buttonLabel}
-
- Modal title
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
- Show Nested Model
-
- Nested Modal title
- Stuff and things
-
- Done {' '}
- All Done
-
-
-
-
- Do Something {' '}
- Cancel
-
-
-
- );
- }
-}
-
-export default ModalExample;
diff --git a/docs/lib/examples/NavInline.js b/docs/lib/examples/NavInline.js
deleted file mode 100644
index 9e96adcc1..000000000
--- a/docs/lib/examples/NavInline.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { Nav, NavItem, NavLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
List Based
-
-
- Link
-
-
- Link
-
-
- Another Link
-
-
- Disabled Link
-
-
-
-
Link based
-
- Link Link Another Link Disabled Link
-
-
- );
- }
-}
diff --git a/docs/lib/examples/NavPills.js b/docs/lib/examples/NavPills.js
deleted file mode 100644
index 666bc9ef1..000000000
--- a/docs/lib/examples/NavPills.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import React from 'react';
-import { Nav, NavItem, NavDropdown, DropdownItem, DropdownToggle, DropdownMenu, NavLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
-
- Link
-
-
-
- Dropdown
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
-
- Link
-
-
- Another Link
-
-
- Disabled Link
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/NavTabs.js b/docs/lib/examples/NavTabs.js
deleted file mode 100644
index 128e9043b..000000000
--- a/docs/lib/examples/NavTabs.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import React from 'react';
-import { Nav, NavItem, NavDropdown, DropdownItem, DropdownToggle, DropdownMenu, NavLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- dropdownOpen: false
- };
- }
-
- toggle() {
- this.setState({
- dropdownOpen: !this.state.dropdownOpen
- });
- }
-
- render() {
- return (
-
-
-
- Link
-
-
-
- Dropdown
-
-
- Header
- Action
- Another Action
-
- Another Action
-
-
-
- Link
-
-
- Another Link
-
-
- Disabled Link
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Navbar.js b/docs/lib/examples/Navbar.js
deleted file mode 100644
index 025131459..000000000
--- a/docs/lib/examples/Navbar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import { Navbar, NavbarBrand, Nav, NavItem, NavLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
- reactstrap
-
-
- Components
-
-
- Github
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Navs.js b/docs/lib/examples/Navs.js
deleted file mode 100644
index d44589baf..000000000
--- a/docs/lib/examples/Navs.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { Nav, NavItem, NavLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
List Based
-
-
- Link
-
-
- Link
-
-
- Another Link
-
-
- Disabled Link
-
-
-
-
Link Based
-
- Link Link Another Link Disabled Link
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Pagination.js b/docs/lib/examples/Pagination.js
deleted file mode 100644
index d33364e4e..000000000
--- a/docs/lib/examples/Pagination.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react';
-import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
-
-
-
- 1
-
-
-
-
- 2
-
-
-
-
- 3
-
-
-
-
- 4
-
-
-
-
- 5
-
-
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/PaginationSizingLarge.js b/docs/lib/examples/PaginationSizingLarge.js
deleted file mode 100644
index c743b4c2f..000000000
--- a/docs/lib/examples/PaginationSizingLarge.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
-
-
-
- 1
-
-
-
-
- 2
-
-
-
-
- 3
-
-
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/PaginationSizingSmall.js b/docs/lib/examples/PaginationSizingSmall.js
deleted file mode 100644
index 061a8c22c..000000000
--- a/docs/lib/examples/PaginationSizingSmall.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
-
-
-
- 1
-
-
-
-
- 2
-
-
-
-
- 3
-
-
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/PaginationState.js b/docs/lib/examples/PaginationState.js
deleted file mode 100644
index c5e08f01e..000000000
--- a/docs/lib/examples/PaginationState.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react';
-import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
-
-
-
- 1
-
-
-
-
- 2
-
-
-
-
- 3
-
-
-
-
- 4
-
-
-
-
- 5
-
-
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Popover.js b/docs/lib/examples/Popover.js
deleted file mode 100644
index 83333a7a5..000000000
--- a/docs/lib/examples/Popover.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { Button, Popover, PopoverTitle, PopoverContent } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- popoverOpen: false
- };
- }
-
- toggle() {
- this.setState({
- popoverOpen: !this.state.popoverOpen
- });
- }
-
- render() {
- return (
-
-
- Launch Popover
-
-
- Popover Title
- Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.
-
-
- );
- }
-}
diff --git a/docs/lib/examples/PopoverMulti.js b/docs/lib/examples/PopoverMulti.js
deleted file mode 100644
index ff0958937..000000000
--- a/docs/lib/examples/PopoverMulti.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-
-import React from 'react';
-import { Button, Popover, PopoverTitle, PopoverContent } from 'reactstrap';
-
-class PopoverItem extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- popoverOpen: false
- };
- }
-
- toggle() {
- this.setState({
- popoverOpen: !this.state.popoverOpen
- });
- }
-
- render() {
- return (
-
-
- {this.props.item.text}
-
-
- Popover Title
- Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.
-
-
- );
- }
-}
-
-class PopoverExampleMulti extends React.Component {
- constructor(props) {
- super(props);
-
- this.state = {
- popovers: [
- {
- placement: 'top',
- text: 'Top'
- },
- {
- placement: 'bottom',
- text: 'Bottom'
- },
- {
- placement: 'left',
- text: 'Left'
- },
- {
- placement: 'right',
- text: 'Right'
- }
- ]
- };
- }
-
- render() {
- return (
-
- { this.state.popovers.map((popover, i) => {
- return
;
- })}
-
- );
- }
-}
-
-export default PopoverExampleMulti;
diff --git a/docs/lib/examples/Progress.js b/docs/lib/examples/Progress.js
deleted file mode 100644
index 9444e479e..000000000
--- a/docs/lib/examples/Progress.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import { Progress } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
0%
-
-
25%
-
-
50%
-
-
75%
-
-
100%
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/ProgressAnimated.js b/docs/lib/examples/ProgressAnimated.js
deleted file mode 100644
index b2fc6a112..000000000
--- a/docs/lib/examples/ProgressAnimated.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-import { Progress } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/ProgressColor.js b/docs/lib/examples/ProgressColor.js
deleted file mode 100644
index dd8086573..000000000
--- a/docs/lib/examples/ProgressColor.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-import { Progress } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/ProgressMax.js b/docs/lib/examples/ProgressMax.js
deleted file mode 100644
index fe8895776..000000000
--- a/docs/lib/examples/ProgressMax.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-import { Progress } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
-
1 of 5
-
-
50 of 135
-
-
75 of 111
-
-
463 of 500
-
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/ProgressStriped.js b/docs/lib/examples/ProgressStriped.js
deleted file mode 100644
index 119b7affe..000000000
--- a/docs/lib/examples/ProgressStriped.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-import { Progress } from 'reactstrap';
-
-const Example = (props) => {
- return (
-
- );
-};
-
-export default Example;
diff --git a/docs/lib/examples/Table.js b/docs/lib/examples/Table.js
deleted file mode 100644
index 787da6849..000000000
--- a/docs/lib/examples/Table.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- First Name
- Last Name
- Username
-
-
-
-
- 1
- Mark
- Otto
- @mdo
-
-
- 2
- Jacob
- Thornton
- @fat
-
-
- 3
- Larry
- the Bird
- @twitter
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableBordered.js b/docs/lib/examples/TableBordered.js
deleted file mode 100644
index 0204019e5..000000000
--- a/docs/lib/examples/TableBordered.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- First Name
- Last Name
- Username
-
-
-
-
- 1
- Mark
- Otto
- @mdo
-
-
- 2
- Jacob
- Thornton
- @fat
-
-
- 3
- Larry
- the Bird
- @twitter
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableHover.js b/docs/lib/examples/TableHover.js
deleted file mode 100644
index f1aa2cf59..000000000
--- a/docs/lib/examples/TableHover.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- First Name
- Last Name
- Username
-
-
-
-
- 1
- Mark
- Otto
- @mdo
-
-
- 2
- Jacob
- Thornton
- @fat
-
-
- 3
- Larry
- the Bird
- @twitter
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableInverse.js b/docs/lib/examples/TableInverse.js
deleted file mode 100644
index 0d53d3595..000000000
--- a/docs/lib/examples/TableInverse.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- First Name
- Last Name
- Username
-
-
-
-
- 1
- Mark
- Otto
- @mdo
-
-
- 2
- Jacob
- Thornton
- @fat
-
-
- 3
- Larry
- the Bird
- @twitter
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableReflow.js b/docs/lib/examples/TableReflow.js
deleted file mode 100644
index bca1a5603..000000000
--- a/docs/lib/examples/TableReflow.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- Table heading
- Table heading
- Table heading
- Table heading
- Table heading
- Table heading
-
-
-
-
- 1
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
-
-
- 2
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
-
-
- 3
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableResponsive.js b/docs/lib/examples/TableResponsive.js
deleted file mode 100644
index bca1a5603..000000000
--- a/docs/lib/examples/TableResponsive.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- Table heading
- Table heading
- Table heading
- Table heading
- Table heading
- Table heading
-
-
-
-
- 1
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
-
-
- 2
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
-
-
- 3
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
- Table cell
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableSizing.js b/docs/lib/examples/TableSizing.js
deleted file mode 100644
index d3f6ea7d2..000000000
--- a/docs/lib/examples/TableSizing.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- First Name
- Last Name
- Username
-
-
-
-
- 1
- Mark
- Otto
- @mdo
-
-
- 2
- Jacob
- Thornton
- @fat
-
-
- 3
- Larry
- the Bird
- @twitter
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TableStriped.js b/docs/lib/examples/TableStriped.js
deleted file mode 100644
index b17e96053..000000000
--- a/docs/lib/examples/TableStriped.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Table } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
-
- #
- First Name
- Last Name
- Username
-
-
-
-
- 1
- Mark
- Otto
- @mdo
-
-
- 2
- Jacob
- Thornton
- @fat
-
-
- 3
- Larry
- the Bird
- @twitter
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Tabs.js b/docs/lib/examples/Tabs.js
deleted file mode 100644
index 056eba43b..000000000
--- a/docs/lib/examples/Tabs.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from 'react';
-import { TabContent, TabPane, Nav, NavItem, NavLink, Card, Button, CardTitle, CardText, Row, Col } from 'reactstrap';
-import classnames from 'classnames';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- activeTab: '1'
- };
- }
-
- toggle(tab) {
- if (this.state.activeTab !== tab) {
- this.setState({
- activeTab: tab
- });
- }
- }
- render() {
- return (
-
-
-
- { this.toggle('1'); }}
- >
- Tab1
-
-
-
- { this.toggle('2'); }}
- >
- Moar Tabs
-
-
-
-
-
-
-
- Tab 1 Contents
-
-
-
-
-
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
-
-
- Special Title Treatment
- With supporting text below as a natural lead-in to additional content.
- Go somewhere
-
-
-
-
-
-
- );
- }
-}
diff --git a/docs/lib/examples/Tag.js b/docs/lib/examples/Tag.js
deleted file mode 100644
index 02661a390..000000000
--- a/docs/lib/examples/Tag.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Tag } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
-
Heading New
- Heading New
- Heading New
- Heading New
- Heading New
- Heading New
-
- );
- }
-}
diff --git a/docs/lib/examples/TagPills.js b/docs/lib/examples/TagPills.js
deleted file mode 100644
index b726c6761..000000000
--- a/docs/lib/examples/TagPills.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Tag } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- default {' '}
- primary {' '}
- success {' '}
- info {' '}
- warning {' '}
- danger
-
- );
- }
-}
diff --git a/docs/lib/examples/TagVariations.js b/docs/lib/examples/TagVariations.js
deleted file mode 100644
index 0c22c3af6..000000000
--- a/docs/lib/examples/TagVariations.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import { Tag } from 'reactstrap';
-
-export default class Example extends React.Component {
- render() {
- return (
-
- default
- primary
- success
- info
- warning
- danger
-
- );
- }
-}
diff --git a/docs/lib/examples/Tooltip.js b/docs/lib/examples/Tooltip.js
deleted file mode 100644
index d7e408b0c..000000000
--- a/docs/lib/examples/Tooltip.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { Tooltip } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- tooltipOpen: false
- };
- }
-
- toggle() {
- this.setState({
- tooltipOpen: !this.state.tooltipOpen
- });
- }
-
- render() {
- return (
-
-
Somewhere in here is a tooltip .
-
- Hello world!
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TooltipAutoHide.js b/docs/lib/examples/TooltipAutoHide.js
deleted file mode 100644
index 8aa73cb17..000000000
--- a/docs/lib/examples/TooltipAutoHide.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-import React from 'react';
-import { Tooltip } from 'reactstrap';
-
-export default class Example extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- tooltipOpen: false
- };
- }
-
- toggle() {
- this.setState({
- tooltipOpen: !this.state.tooltipOpen
- });
- }
-
- render() {
- return (
-
-
Sometimes you need to allow users to select text within a tooltip .
-
- Try to select this text!
-
-
- );
- }
-}
diff --git a/docs/lib/examples/TooltipMulti.js b/docs/lib/examples/TooltipMulti.js
deleted file mode 100644
index 2eb70cc6e..000000000
--- a/docs/lib/examples/TooltipMulti.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
-
-import React from 'react';
-import { Button, Tooltip } from 'reactstrap';
-
-class TooltipItem extends React.Component {
- constructor(props) {
- super(props);
-
- this.toggle = this.toggle.bind(this);
- this.state = {
- tooltipOpen: false
- };
- }
-
- toggle() {
- this.setState({
- tooltipOpen: !this.state.tooltipOpen
- });
- }
-
- render() {
- return (
-
-
- {this.props.item.text}
-
-
- Tooltip Content!
-
-
- );
- }
-}
-
-class TooltipExampleMulti extends React.Component {
- constructor(props) {
- super(props);
-
- this.state = {
- tooltips: [
- {
- placement: 'top',
- text: 'Top'
- },
- {
- placement: 'bottom',
- text: 'Bottom'
- },
- {
- placement: 'left',
- text: 'Left'
- },
- {
- placement: 'right',
- text: 'Right'
- }
- ]
- };
- }
-
- render() {
- return (
-
- { this.state.tooltips.map((tooltip, i) => {
- return ;
- })}
-
- );
- }
-}
-
-export default TooltipExampleMulti;
diff --git a/docs/lib/examples/import-basic.js b/docs/lib/examples/import-basic.js
deleted file mode 100644
index 6f91ac6eb..000000000
--- a/docs/lib/examples/import-basic.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from 'react';
-import { Button } from 'reactstrap';
-
-export default (props) => {
- return (
- Danger!
- );
-};
diff --git a/docs/lib/routes.js b/docs/lib/routes.js
deleted file mode 100644
index 23075d25d..000000000
--- a/docs/lib/routes.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from 'react';
-import { Route, IndexRoute, IndexRedirect } from 'react-router';
-import Home from './Home';
-import LayoutPage from './Components/LayoutPage';
-import NavsPage from './Components/NavsPage';
-import NavbarPage from './Components/NavbarPage';
-import BreadcrumbsPage from './Components/BreadcrumbsPage';
-import ButtonsPage from './Components/ButtonsPage';
-import ButtonGroupPage from './Components/ButtonGroupPage';
-import ButtonDropdownPage from './Components/ButtonDropdownPage';
-import DropdownsPage from './Components/DropdownsPage';
-import FormPage from './Components/FormPage';
-import InputGroupPage from './Components/InputGroupPage';
-import PopoversPage from './Components/PopoversPage';
-import ProgressPage from './Components/ProgressPage';
-import TooltipsPage from './Components/TooltipsPage';
-import TagsPage from './Components/TagsPage';
-import MediaPage from './Components/MediaPage';
-import ModalsPage from './Components/ModalsPage';
-import CardPage from './Components/CardPage';
-import TablesPage from './Components/TablesPage';
-import PaginationPage from './Components/PaginationPage';
-import TabsPage from './Components/TabsPage';
-import JumbotronPage from './Components/JumbotronPage';
-import AlertsPage from './Components/AlertsPage';
-import NotFound from './NotFound';
-import Components from './Components';
-import UI from './UI';
-
-const routes = (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
-
-export default routes;
diff --git a/docs/static/docs.css b/docs/static/docs.css
deleted file mode 100644
index 3a454616d..000000000
--- a/docs/static/docs.css
+++ /dev/null
@@ -1,309 +0,0 @@
-.container-fluid {
- max-width: 1200px;
-}
-
-.jumbotron-header, .jumbotron-header p:last-child, .navbar {
- margin-bottom: 0
-}
-
-.jumbotron-header .btn {
- margin-right: 1rem;
-}
-
-.jumbotron-header .btn + .btn {
- margin-right: 0;
-}
-
-@media (max-width: 543px) {
- .jumbotron-header .btn {
- display: block;
- margin: 0 0 1rem 0;
- }
-}
-
-.content {
- margin-top: 2rem;
-}
-
-.header .navbar-nav .nav-link.active {
- color: #333;
-}
-
-.header.navbar {
- padding-left: 0;
- padding-right: 0;
-}
-
-.footer {
- margin-top: 2rem;
- padding: 2rem 0;
- border-top: 1px solid #e7e7e7;
-}
-
-.footer .social {
- margin-bottom: 0;
-}
-
-.footer .social a {
- display: inline-block;
-}
-
-.footer .social img {
- display: block;
-}
-
-.navbar-collapse .container-fluid {
- padding: 2rem 2.5rem;
- border-bottom: 1px solid #55595c
-}
-.navbar-collapse .text-muted, .navbar-collapse h4 {
- color: #818a91
-}
-.about {
- float: left;
- max-width: 30rem;
- margin-right: 3rem
-}
-.social a {
- font-weight: 500;
- color: #eceeef
-}
-.social a:hover {
- color: #fff
-}
-.jumbotron-header {
- padding-top: 2rem;
- padding-bottom: 2rem;
- background-color: #fff
-}
-.jumbotron-heading {
- font-weight: 300
-}
-.container {
- max-width: 40rem
-}
-footer {
- padding-top: 3rem;
- padding-bottom: 3rem
-}
-footer p {
- margin-bottom: .25rem
-}
-
-h1,h2,h3,h4,h5,h6,strong,b {
- font-weight: 300;
-}
-
-h1,h2,h3 {
- margin-bottom: 1rem;
-}
-
-.docs-example {
- position: relative;
- padding: 3em 1em 1em;
- border: 1px solid #d8d8d8;
- margin: 1.5rem 0 0;
-}
-
-.docs-example::before {
- position: absolute;
- left: 0;
- top: 0;
- padding: 1em;
- color: #aaa;
- font-size: smaller;
- font-weight: 500;
- content: 'EXAMPLE';
-}
-
-.docs-example::after {
- clear: both;
- content: " ";
- display: table;
-}
-
-.docs-example .card {
- max-width: 320px;
-}
-
-pre, code {
- background: #f5f5f5;
- border-radius: 0;
- border-color: #d8d8d8;
- margin: 0;
-}
-
-.docs-example + pre {
- border: 1px solid #d8d8d8;
- border-top: none;
- padding: 1em;
- margin-top: 0 !important;
- clear: both;
-}
-
-.docs-sidebar .nav-item {
- padding: .2rem 0 .2rem 0;
-}
-
-.docs-sidebar .nav-link {
- color: #888;
- padding: .3rem .5rem .3rem 1rem;
- border-left: 2px solid transparent;
-}
-
-.docs-sidebar .nav-link:hover {
- color: #777
-}
-
-.docs-sidebar .nav-link.active {
- color: #666;
- border-left: 2px solid #d9534f;
-}
-
-.docs-example > .container .row {
- margin-bottom: 1rem;
-}
-
-.docs-example > .container .row > [class^="col-"] {
- padding-top: .75rem;
- padding-bottom: .75rem;
- background-color: #E5EDF5;
- border: 1px solid #C9C1D5;
- color: #5F5F5F;
-}
-
-.docs-example .form-control + .form-control {
- margin-top: .5rem;
-}
-
-.docs-example .nav-tabs {
- margin-bottom: 1rem;
-}
-
-
-/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript+bash+jsx */
-/**
- * okaidia theme for JavaScript, CSS and HTML
- * Loosely based on Monokai textmate theme by http://www.monokai.nl/
- * @author ocodia
- */
-
-code[class*="language-"],
-pre[class*="language-"] {
- color: #f8f8f2;
- background: none;
- text-shadow: 0 1px rgba(0, 0, 0, 0.3);
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
- line-height: 1.5;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-/* Code blocks */
-pre[class*="language-"] {
- padding: 1em;
- margin: 1.5em 0;
- overflow: auto;
-}
-
-:not(pre) > code[class*="language-"],
-pre[class*="language-"] {
- background: #272822;
-}
-
-/* Inline code */
-:not(pre) > code[class*="language-"] {
- padding: .1em;
- border-radius: .3em;
- white-space: normal;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
- color: slategray;
-}
-
-.token.punctuation {
- color: #f8f8f2;
-}
-
-.namespace {
- opacity: .7;
-}
-
-.token.property,
-.token.tag,
-.token.constant,
-.token.symbol,
-.token.deleted {
- color: #f92672;
-}
-
-.token.boolean,
-.token.number {
- color: #ae81ff;
-}
-
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.char,
-.token.builtin,
-.token.inserted {
- color: #a6e22e;
-}
-
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string,
-.token.variable {
- color: #f8f8f2;
-}
-
-.token.atrule,
-.token.attr-value,
-.token.function {
- color: #e6db74;
-}
-
-.token.keyword {
- color: #66d9ef;
-}
-
-.token.regex,
-.token.important {
- color: #fd971f;
-}
-
-.token.important,
-.token.bold {
- font-weight: bold;
-}
-.token.italic {
- font-style: italic;
-}
-
-.token.entity {
- cursor: help;
-}
-
-code .tag {
- font-size: inherit;
- padding: 0;
- display: inherit;
-}
diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico
deleted file mode 100644
index a117a65ae..000000000
Binary files a/docs/static/favicon.ico and /dev/null differ
diff --git a/docs/static/logo.png b/docs/static/logo.png
deleted file mode 100644
index b507429db..000000000
Binary files a/docs/static/logo.png and /dev/null differ
diff --git a/docs/static/prism.js b/docs/static/prism.js
deleted file mode 100644
index d44b10683..000000000
--- a/docs/static/prism.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript+bash+jsx */
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(m instanceof a)){u.lastIndex=0;var y=u.exec(m),v=1;if(!y&&h&&p!=r.length-1){var b=r[p+1].matchedStr||r[p+1],k=m+b;if(p=m.length)continue;var _=y.index+y[0].length,P=m.length+b.length;if(v=3,P>=_){if(r[p+1].greedy)continue;v=2,k=k.slice(0,P)}m=k}if(y){g&&(f=y[1].length);var w=y.index+f,y=y[0].slice(f),_=w+y.length,S=m.slice(0,w),O=m.slice(_),j=[p,v];S&&j.push(S);var A=new a(i,c?n.tokenize(y,c):y,d,y,h);j.push(A),O&&j.push(O),Array.prototype.splice.apply(r,j)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.matchedStr=a||null,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var l={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}n.hooks.run("wrap",l);var o="";for(var s in l.attributes)o+=(o?" ":"")+s+'="'+(l.attributes[s]||"")+'"';return"<"+l.tag+' class="'+l.classes.join(" ")+'" '+o+">"+l.content+""+l.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,l=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",n.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
-Prism.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup;
-Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/logo.svg b/static/logo.svg
new file mode 100644
index 000000000..00572bb4d
--- /dev/null
+++ b/static/logo.svg
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/themes/bamburgh-react-admin-dashboard-reactstrap-pro.jpg b/static/themes/bamburgh-react-admin-dashboard-reactstrap-pro.jpg
new file mode 100644
index 000000000..fad6e644b
Binary files /dev/null and b/static/themes/bamburgh-react-admin-dashboard-reactstrap-pro.jpg differ
diff --git a/stories/.eslintrc.json b/stories/.eslintrc.json
new file mode 100644
index 000000000..8d343ab86
--- /dev/null
+++ b/stories/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "rules": {
+ "no-unused-vars": ["error", { "args": "none" }]
+ }
+}
diff --git a/stories/Accordion.stories.js b/stories/Accordion.stories.js
new file mode 100644
index 000000000..b33f8f19e
--- /dev/null
+++ b/stories/Accordion.stories.js
@@ -0,0 +1,20 @@
+export default {
+ title: 'Components/Accordion',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Accordion](https://getbootstrap.com/docs/5.1/components/accordion/)
+
+Used to build vertically collapsing accordions.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Accordion } from './examples/Accordion/Accordion';
+export { default as Flush } from './examples/Accordion/AccordionFlush';
+export { default as Uncontrolled } from './examples/Accordion/AccordionUncontrolled';
+export { default as StayOpen } from './examples/Accordion/AccordionStayOpen';
+export { default as Props } from './examples/Accordion/AccordionProps';
diff --git a/stories/Alert.stories.js b/stories/Alert.stories.js
new file mode 100644
index 000000000..c83b3bb1c
--- /dev/null
+++ b/stories/Alert.stories.js
@@ -0,0 +1,22 @@
+export default {
+ title: 'Components/Alert',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Alert](https://getbootstrap.com/docs/5.1/components/alerts/)
+
+Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Alert } from './examples/Alert/Alert';
+export { default as Colors } from './examples/Alert/Colors';
+export { default as Content } from './examples/Alert/Content';
+export { default as AlertLink } from './examples/Alert/Link';
+export { default as Dismiss } from './examples/Alert/Dismiss';
+export { default as UncontrolledDismiss } from './examples/Alert/UncontrolledDismiss';
+export { default as Props } from './examples/Alert/Props';
diff --git a/stories/Badge.stories.js b/stories/Badge.stories.js
new file mode 100644
index 000000000..9e13048ed
--- /dev/null
+++ b/stories/Badge.stories.js
@@ -0,0 +1,22 @@
+export default {
+ title: 'Components/Badge',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Badge](https://getbootstrap.com/docs/5.1/components/badge/)
+
+A small count and labeling component.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Badge } from './examples/Badge/Badge';
+export { default as Headings } from './examples/Badge/Headings';
+export { default as Buttons } from './examples/Badge/Button';
+export { default as BackgroundColors } from './examples/Badge/Variations';
+export { default as Links } from './examples/Badge/Links';
+export { default as PillBadges } from './examples/Badge/Pills';
+export { default as Props } from './examples/Badge/Props';
diff --git a/stories/Breadcrumb.stories.js b/stories/Breadcrumb.stories.js
new file mode 100644
index 000000000..b87d125b7
--- /dev/null
+++ b/stories/Breadcrumb.stories.js
@@ -0,0 +1,18 @@
+export default {
+ title: 'Components/Breadcrumb',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Breadcrumb](https://getbootstrap.com/docs/5.1/components/breadcrumb/)
+
+Indicate the current page’s location within a navigational hierarchy that automatically adds separators.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Breadcrumb } from './examples/Breadcrump/Breadcrumb';
+export { default as NoList } from './examples/Breadcrump/NoList';
+export { default as Props } from './examples/Breadcrump/Props';
diff --git a/stories/Button.stories.js b/stories/Button.stories.js
new file mode 100644
index 000000000..b4bb0f1a4
--- /dev/null
+++ b/stories/Button.stories.js
@@ -0,0 +1,22 @@
+export default {
+ title: 'Components/Button',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Buttons](https://getbootstrap.com/docs/5.1/components/buttons/)
+
+Custom Buttons for actions in forms, dialogs, and more with support for multiple sizes, states, and more.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Button } from './examples/Button/Button';
+export { default as Variants } from './examples/Button/Colors';
+export { default as CustomTags } from './examples/Button/Tags';
+export { default as Outline } from './examples/Button/Outline';
+export { default as Sizes } from './examples/Button/Size';
+export { default as Disabled } from './examples/Button/Disabled';
+export { default as Props } from './examples/Button/Props';
diff --git a/stories/ButtonGroup.stories.js b/stories/ButtonGroup.stories.js
new file mode 100644
index 000000000..9e371a2e1
--- /dev/null
+++ b/stories/ButtonGroup.stories.js
@@ -0,0 +1,23 @@
+export default {
+ title: 'Components/ButtonGroup',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Buttons](https://getbootstrap.com/docs/5.1/components/buttons/)
+
+Group a series of buttons together on a single line or stack them in a vertical column.
+ `,
+ },
+ },
+ },
+};
+
+export { default as ButtonGroup } from './examples/ButtonGroup/ButtonGroup';
+export { default as MixedStyles } from './examples/ButtonGroup/MixedStyles';
+export { default as CheckboxAndRadio } from './examples/ButtonGroup/Stateful';
+export { default as ButtonToolbar } from './examples/ButtonGroup/Toolbar';
+export { default as Sizing } from './examples/ButtonGroup/Sizing';
+export { default as Nesting } from './examples/ButtonGroup/Nesting';
+export { default as Vertical } from './examples/ButtonGroup/Vertical';
+export { default as Props } from './examples/ButtonGroup/Props';
diff --git a/stories/Card.stories.js b/stories/Card.stories.js
new file mode 100644
index 000000000..bca8df6a6
--- /dev/null
+++ b/stories/Card.stories.js
@@ -0,0 +1,29 @@
+export default {
+ title: 'Components/Card',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+[Bootstrap Card](https://getbootstrap.com/docs/5.1/components/card/)
+
+Cards provide a flexible and extensible content container with multiple variants and options.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Card } from './examples/Card/Card';
+export { default as ContentTypes } from './examples/Card/ContentTypes';
+export { default as ListGroups } from './examples/Card/ListGroup';
+export { default as KitchenSink } from './examples/Card/KitchenSInk';
+export { default as HeadersAndFooters } from './examples/Card/HeaderFooter';
+export { default as Sizing } from './examples/Card/Sizing';
+export { default as TextAlignment } from './examples/Card/Alignment';
+export { default as ImageCaps } from './examples/Card/ImageCaps';
+export { default as ImageOverlay } from './examples/Card/ImageOverlay';
+export { default as Backgrounds } from './examples/Card/Backgrounds';
+export { default as Border } from './examples/Card/Outline';
+export { default as CardGroups } from './examples/Card/Groups';
+export { default as CardColumns } from './examples/Card/Columns';
+export { default as Props } from './examples/Card/Props';
diff --git a/stories/Carousel.stories.js b/stories/Carousel.stories.js
new file mode 100644
index 000000000..b20a7897a
--- /dev/null
+++ b/stories/Carousel.stories.js
@@ -0,0 +1,19 @@
+export default {
+ title: 'Components/Carousel',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Carousel](https://getbootstrap.com/docs/5.1/components/carousel/)
+
+ A slideshow component for cycling through elements, images, or slides of text — like a carousel.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Carousel } from './examples/Carousel/Carousel';
+export { default as CustomTag } from './examples/Carousel/CustomTag';
+export { default as Uncontrolled } from './examples/Carousel/Uncontrolled';
+export { default as Props } from './examples/Carousel/Props';
diff --git a/stories/CloseButton.stories.js b/stories/CloseButton.stories.js
new file mode 100644
index 000000000..9e0e3cf06
--- /dev/null
+++ b/stories/CloseButton.stories.js
@@ -0,0 +1,19 @@
+export default {
+ title: 'Components/CloseButton',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap CloseButton](https://getbootstrap.com/docs/5.2/components/close-button/)
+
+ A generic close button for dismissing content like modals and alerts.
+ `,
+ },
+ },
+ },
+};
+
+export { default as CloseButton } from './examples/CloseButton/CloseButton';
+export { default as CloseButtonDisabled } from './examples/CloseButton/Disabled';
+export { default as CloseButtonWhite } from './examples/CloseButton/White';
+export { default as Props } from './examples/CloseButton/Props';
diff --git a/stories/Collapse.stories.js b/stories/Collapse.stories.js
new file mode 100644
index 000000000..bcda9b66f
--- /dev/null
+++ b/stories/Collapse.stories.js
@@ -0,0 +1,20 @@
+export default {
+ title: 'Components/Collapse',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Collapse](https://getbootstrap.com/docs/5.1/components/collapse/)
+
+ Toggle the visibility of content across your project with Collapse.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Collapse } from './examples/Collapse/Collapse';
+export { default as CollapseEvents } from './examples/Collapse/Events';
+export { default as CollapseHorizontal } from './examples/Collapse/Horizontal';
+export { default as CollapseUncontrolled } from './examples/Collapse/Uncontrolled';
+export { default as Props } from './examples/Collapse/Props';
diff --git a/stories/Dropdown.stories.js b/stories/Dropdown.stories.js
new file mode 100644
index 000000000..52eb3eb7a
--- /dev/null
+++ b/stories/Dropdown.stories.js
@@ -0,0 +1,26 @@
+export default {
+ title: 'Components/Dropdown',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Dropdowns](https://getbootstrap.com/docs/5.1/components/dropdowns/)
+
+ Toggle contextual overlays for displaying lists of links and more with Dropdowns.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Dropdown } from './examples/Dropdown/Dropdown';
+export { default as SplitButton } from './examples/Dropdown/Split';
+export { default as Sizing } from './examples/Dropdown/Sizing';
+export { default as DarkDropdown } from './examples/Dropdown/Dark';
+export { default as Directions } from './examples/Dropdown/DirectionKitchen';
+export { default as SetActiveFromChild } from './examples/Dropdown/SetActiveFromChild';
+
+export { default as Container } from './examples/Dropdown/Container';
+export { default as Uncontrolled } from './examples/Dropdown/Uncontrolled';
+export { default as CustomDropdown } from './examples/Dropdown/Custom';
+export { default as Props } from './examples/Dropdown/Props';
diff --git a/stories/Fade.stories.js b/stories/Fade.stories.js
new file mode 100644
index 000000000..a4eecf8de
--- /dev/null
+++ b/stories/Fade.stories.js
@@ -0,0 +1,6 @@
+export default {
+ title: 'Components/Fade',
+};
+
+export { default as Fade } from './examples/Fade';
+export { default as Props } from './examples/FadeProps';
diff --git a/stories/Forms.stories.js b/stories/Forms.stories.js
new file mode 100644
index 000000000..0c49342ce
--- /dev/null
+++ b/stories/Forms.stories.js
@@ -0,0 +1,29 @@
+export default {
+ title: 'Components/Forms',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Forms](https://getbootstrap.com/docs/5.1/forms/overview/)
+
+ Form controls, layout options, and custom components for creating a wide variety of forms.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Input } from './examples/Form/Input';
+export { default as Form } from './examples/Form/Form';
+export { default as FormFeedback } from './examples/Form/FormFeedback';
+export { default as FormGrid } from './examples/Form/FormGrid';
+export { default as FormGridFormRow } from './examples/Form/FormGridFormRow';
+export { default as FormInline } from './examples/Form/FormInline';
+export { default as FloatingLabels } from './examples/Form/LabelFloating';
+export { default as HiddenLabels } from './examples/Form/LabelHidden';
+export { default as InlineCheckboxes } from './examples/Form/InlineCheckboxes';
+export { default as InputGridSizing } from './examples/Form/InputGridSizing';
+export { default as InputSizing } from './examples/Form/InputSizing';
+export { default as InputType } from './examples/Form/InputType';
+export { default as Switches } from './examples/Form/Switches';
+export { default as Props } from './examples/Form/FormProps';
diff --git a/stories/GitHub.stories.mdx b/stories/GitHub.stories.mdx
new file mode 100644
index 000000000..10b7ccdc5
--- /dev/null
+++ b/stories/GitHub.stories.mdx
@@ -0,0 +1,10 @@
+import { Meta } from '@storybook/addon-docs';
+import { Button } from 'reactstrap';
+
+
+
+### Reactstrap is hosted on GitHub:
+
+[https://github.com/reactstrap/reactstrap](https://github.com/reactstrap/reactstrap)
+
+For support, please create [an issue](https://github.com/reactstrap/reactstrap/issues).
diff --git a/stories/Index.stories.mdx b/stories/Index.stories.mdx
new file mode 100644
index 000000000..626d44605
--- /dev/null
+++ b/stories/Index.stories.mdx
@@ -0,0 +1,129 @@
+import { Meta } from '@storybook/addon-docs';
+import { Button } from 'reactstrap';
+
+
+
+
+
+### Reactstrap is a [React](https://reactjs.org) component library for [Bootstrap](https://getbootstrap.com)
+
+Reactstrap is currently compatible with Bootstrap 5.1. If you are using Bootstrap 4, you'll need to use [Reactstrap v8](https://deploy-preview-2356--reactstrap.netlify.app/)
+
+## Getting Started
+
+### Install Reactstrap:
+
+```sh
+npm install reactstrap react react-dom
+```
+
+Reactstrap currently requires React 16.8 or higher.
+
+### Include Bootstrap
+
+Either:
+
+1. Import Bootstrap in your application code:
+
+```sh
+npm install --save bootstrap
+```
+
+```javascript
+import 'bootstrap/dist/css/bootstrap.min.css';
+```
+
+2. or include Bootstrap from a CDN URL in your HTML layout:
+
+```html
+
+
+
+```
+
+### Import components:
+
+```jsx
+import React from 'react';
+import { Button } from 'reactstrap';
+
+export default (props) => {
+ return Danger! ;
+};
+```
+
+## About
+
+Unlike some component libraries, Reactstrap does not embed its own styles, and instead depends on the Bootstrap CSS framework for its styles and theme.
+This allows you to have consistent styles across your React-based components and static parts of your site, and allows you to include your own custom Bootstrap theme when needed.
+
+Unlike using Bootstrap in HTML, Reactstrap exports all the correct Bootstrap classes automatically, and don't need to use or include Bootstrap's JavaScript files or add data attributes to trigger functionality. Instead, components are defined in React-friendly components with appropriate props for you to control.
+
+So instead of:
+
+```html
+
+
+
+
+
+
+
Modal body text goes here.
+
+
+
+
+```
+
+You can use:
+
+```jsx
+// React
+import { Modal, ModalBody, ModalHeader } from 'reactstrap';
+...
+ setOpen(false)}>
+
+ Modal title
+
+
+ Modal body text goes here.
+
+
+
+```
+
+#### CSSModule
+
+You can use `cssModule` to change the underlying component's default CSS className. This is an escape hatch
+if you do not want to use the default bootstrap class.
+
+For example Button renders with a default class `.btn`. You can use
+
+```jsx
+
+ primary
+
+```
+
+so that Button renders with `.hyperspeed-btn` instead of `.btn`.
+
+You can use `setGlobalCssModule` function to set custom classes globally.
+
+```jsx
+import { Util } from 'reactstrap';
+
+Util.setGlobalCssModule({
+ btn: 'hyperspeed-btn',
+});
+```
diff --git a/stories/InputGroup.stories.js b/stories/InputGroup.stories.js
new file mode 100644
index 000000000..7b0707c04
--- /dev/null
+++ b/stories/InputGroup.stories.js
@@ -0,0 +1,21 @@
+export default {
+ title: 'Components/InputGroup',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap InputGroup](https://getbootstrap.com/docs/5.1/forms/input-group/)
+
+ Extend form controls by adding text, buttons, or button groups on either side of textual inputs, custom selects, and custom file inputs.
+ `,
+ },
+ },
+ },
+};
+
+export { default as InputGroup } from './examples/InputGroup/Overview';
+export { default as Sizing } from './examples/InputGroup/Sizing';
+export { default as MultipleAddons } from './examples/InputGroup/Addon';
+export { default as ButtonAddons } from './examples/InputGroup/Button';
+export { default as ButtonShorthand } from './examples/InputGroup/ButtonShorthand';
+export { default as Props } from './examples/InputGroup/Props';
diff --git a/stories/Layout.stories.js b/stories/Layout.stories.js
new file mode 100644
index 000000000..e6d644b81
--- /dev/null
+++ b/stories/Layout.stories.js
@@ -0,0 +1,19 @@
+export default {
+ title: 'Components/Layout',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Layout](https://getbootstrap.com/docs/5.1/layout/grid/)
+
+ Powerful mobile-first flexbox grid to build layouts of all shapes and sizes thanks to a twelve column system, six default responsive tiers.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Layout } from './examples/Layout';
+export { default as LayoutRowCols } from './examples/LayoutRowCols';
+export { default as ContainerResponsive } from './examples/ContainerResponsive';
+export { default as Props } from './examples/LayoutProps';
diff --git a/stories/List.stories.js b/stories/List.stories.js
new file mode 100644
index 000000000..8901d668d
--- /dev/null
+++ b/stories/List.stories.js
@@ -0,0 +1,16 @@
+export default {
+ title: 'Components/List',
+ parameters: {
+ docs: {
+ description: {
+ component:
+ '[Bootstrap Lists](https://getbootstrap.com/docs/5.1/content/typography/#lists)',
+ },
+ },
+ },
+};
+
+export { default as List } from './examples/List/List';
+export { default as Inline } from './examples/List/Inline';
+export { default as Unstyled } from './examples/List/Unstyled';
+export { default as Props } from './examples/List/Props';
diff --git a/stories/ListGroup.stories.js b/stories/ListGroup.stories.js
new file mode 100644
index 000000000..ebce31b44
--- /dev/null
+++ b/stories/ListGroup.stories.js
@@ -0,0 +1,26 @@
+export default {
+ title: 'Components/ListGroup',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap ListGroup](https://getbootstrap.com/docs/5.1/components/list-group/)
+
+ A flexible and powerful component for displaying a series of content.
+ `,
+ },
+ },
+ },
+};
+
+export { default as ListGroup } from './examples/ListGroup/ListGroup';
+export { default as Active } from './examples/ListGroup/Active';
+export { default as DisabledItems } from './examples/ListGroup/DisabledItems';
+export { default as LinksAndButtons } from './examples/ListGroup/LinksAndButtons';
+export { default as Flush } from './examples/ListGroup/Flush';
+export { default as Numbered } from './examples/ListGroup/Numbered';
+export { default as Horizontal } from './examples/ListGroup/Horizontal';
+export { default as ContextualClasses } from './examples/ListGroup/ContextualClasses';
+export { default as Badge } from './examples/ListGroup/Badge';
+export { default as CustomContent } from './examples/ListGroup/CustomContent';
+export { default as Props } from './examples/ListGroup/Props';
diff --git a/stories/Modal.stories.js b/stories/Modal.stories.js
new file mode 100644
index 000000000..0f8be1f7b
--- /dev/null
+++ b/stories/Modal.stories.js
@@ -0,0 +1,26 @@
+export default {
+ title: 'Components/Modal',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Modal](https://getbootstrap.com/docs/5.1/components/modal/)
+
+ Add dialogs to your site for lightboxes, user notifications, or completely custom content.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Modal } from './examples/Modal/Modal';
+export { default as Backdrop } from './examples/Modal/Backdrop';
+export { default as CustomCloseButton } from './examples/Modal/CustomCloseButton';
+export { default as CustomTimeout } from './examples/Modal/CustomTimeout';
+export { default as Destructuring } from './examples/Modal/Destructuring';
+export { default as External } from './examples/Modal/External';
+export { default as Fadeless } from './examples/Modal/Fadeless';
+export { default as FocusAfterClose } from './examples/Modal/FocusAfterClose';
+export { default as Fullscreen } from './examples/Modal/Fullscreen';
+export { default as Nested } from './examples/Modal/Nested';
+export { default as Props } from './examples/Modal/Props';
diff --git a/stories/Nav.stories.js b/stories/Nav.stories.js
new file mode 100644
index 000000000..e18644966
--- /dev/null
+++ b/stories/Nav.stories.js
@@ -0,0 +1,23 @@
+export default {
+ title: 'Components/Nav',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Navs](https://getbootstrap.com/docs/5.1/components/navs-tabs/)
+
+ Bootstrap’s navigation components.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Navs } from './examples/Nav/Navs';
+export { default as Vertical } from './examples/Nav/Vertical';
+export { default as Tabs } from './examples/Nav/Tabs';
+export { default as Pills } from './examples/Nav/Pills';
+export { default as Fill } from './examples/Nav/Fill';
+export { default as Justify } from './examples/Nav/Justify';
+export { default as TabPane } from './examples/Nav/TabPane';
+export { default as Props } from './examples/Nav/Props';
diff --git a/stories/Navbar.stories.js b/stories/Navbar.stories.js
new file mode 100644
index 000000000..a9399dbc2
--- /dev/null
+++ b/stories/Navbar.stories.js
@@ -0,0 +1,19 @@
+export default {
+ title: 'Components/Navbar',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Navbar](https://getbootstrap.com/docs/5.1/components/navbar/)
+
+ Bootstrap’s powerful, responsive navigation header. Includes support for branding, navigation, and more.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Navbar } from './examples/Navbar/Navbar';
+export { default as Brand } from './examples/Navbar/Brand';
+export { default as NavbarToggler } from './examples/Navbar/Toggler';
+export { default as Props } from './examples/Navbar/Props';
diff --git a/stories/Offcanvas.stories.js b/stories/Offcanvas.stories.js
new file mode 100644
index 000000000..08d24e928
--- /dev/null
+++ b/stories/Offcanvas.stories.js
@@ -0,0 +1,17 @@
+export default {
+ title: 'Components/Offcanvas',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Offcanvas](https://getbootstrap.com/docs/5.1/components/offcanvas/)
+
+ Add hidden sidebars into your project for navigation, shopping carts, and more.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Offcanvas } from './examples/Offcanvas/Offcanvas';
+export { default as Props } from './examples/Offcanvas/OffcanvasProps';
diff --git a/stories/Pagination.stories.js b/stories/Pagination.stories.js
new file mode 100644
index 000000000..41beeaf83
--- /dev/null
+++ b/stories/Pagination.stories.js
@@ -0,0 +1,20 @@
+export default {
+ title: 'Components/Pagination',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Pagination](https://getbootstrap.com/docs/5.1/components/pagination/)
+
+ Use Pagination to indicate that a series of related content exists across multiple pages.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Pagination } from './examples/Pagination/Pagination';
+export { default as Large } from './examples/Pagination/SizingLarge';
+export { default as Small } from './examples/Pagination/SizingSmall';
+export { default as State } from './examples/Pagination/State';
+export { default as Props } from './examples/Pagination/Props';
diff --git a/stories/Placeholder.stories.js b/stories/Placeholder.stories.js
new file mode 100644
index 000000000..6e546988c
--- /dev/null
+++ b/stories/Placeholder.stories.js
@@ -0,0 +1,20 @@
+export default {
+ title: 'Components/Placeholder',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Placeholder](https://getbootstrap.com/docs/5.2/components/placeholders/)
+
+ Use loading placeholders for your components or pages to indicate something may still be loading.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Placeholder } from './examples/Placeholder/Placeholder';
+export { default as Color } from './examples/Placeholder/Color';
+export { default as Sizing } from './examples/Placeholder/Size';
+export { default as Animation } from './examples/Placeholder/Animation';
+export { default as Props } from './examples/Placeholder/Props';
diff --git a/stories/Popover.stories.js b/stories/Popover.stories.js
new file mode 100644
index 000000000..cb2dc24cb
--- /dev/null
+++ b/stories/Popover.stories.js
@@ -0,0 +1,18 @@
+export default {
+ title: 'Components/Popover',
+ parameters: {
+ docs: {
+ description: {
+ component:
+ '[Bootstrap Popovers](https://getbootstrap.com/docs/5.1/components/popovers/)',
+ },
+ },
+ },
+};
+
+export { default as Popover } from './examples/Popover/Popover';
+export { default as Focus } from './examples/Popover/Focus';
+export { default as FourDirections } from './examples/Popover/Multi';
+export { default as Uncontrolled } from './examples/Popover/Uncontrolled';
+export { default as Update } from './examples/Popover/Update';
+export { default as Props } from './examples/Popover/Props';
diff --git a/stories/Progress.stories.js b/stories/Progress.stories.js
new file mode 100644
index 000000000..bf2ee17fc
--- /dev/null
+++ b/stories/Progress.stories.js
@@ -0,0 +1,21 @@
+export default {
+ title: 'Components/Progress',
+ parameters: {
+ docs: {
+ description: {
+ component:
+ '[Bootstrap Progress](https://getbootstrap.com/docs/5.1/components/progress/)',
+ },
+ },
+ },
+};
+
+export { default as Progress } from './examples/Progress/Progress';
+export { default as Labels } from './examples/Progress/Labels';
+export { default as Height } from './examples/Progress/Height';
+export { default as Color } from './examples/Progress/Color';
+export { default as Multi } from './examples/Progress/Multi';
+export { default as Striped } from './examples/Progress/Striped';
+export { default as Animated } from './examples/Progress/Animated';
+export { default as Max } from './examples/Progress/Max';
+export { default as Props } from './examples/Progress/Props';
diff --git a/stories/Spinner.stories.js b/stories/Spinner.stories.js
new file mode 100644
index 000000000..3bd3ff085
--- /dev/null
+++ b/stories/Spinner.stories.js
@@ -0,0 +1,23 @@
+export default {
+ title: 'Components/Spinner',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Spinners](https://getbootstrap.com/docs/5.1/components/spinners/)
+
+ Indicate the loading state of a component or page with Spinners.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Spinner } from './examples/Spinner/Spinner';
+export { default as Colors } from './examples/Spinner/Colors';
+export { default as GrowingSpinner } from './examples/Spinner/Grower';
+export { default as Alignment } from './examples/Spinner/Alignment';
+export { default as Size } from './examples/Spinner/Size';
+export { default as CustomSize } from './examples/Spinner/CustomSize';
+export { default as Buttons } from './examples/Spinner/Button';
+export { default as Props } from './examples/Spinner/Props';
diff --git a/stories/Table.stories.js b/stories/Table.stories.js
new file mode 100644
index 000000000..381b239b3
--- /dev/null
+++ b/stories/Table.stories.js
@@ -0,0 +1,22 @@
+export default {
+ title: 'Components/Table',
+ parameters: {
+ docs: {
+ description: {
+ component:
+ '[Bootstrap Tables](https://getbootstrap.com/docs/5.1/content/tables/)',
+ },
+ },
+ },
+};
+
+export { default as Table } from './examples/Table/Table';
+export { default as Variants } from './examples/Table/Variants';
+export { default as Striped } from './examples/Table/Striped';
+export { default as HoverableRows } from './examples/Table/Hover';
+export { default as Bordered } from './examples/Table/Bordered';
+export { default as Borderless } from './examples/Table/Borderless';
+export { default as SmallTable } from './examples/Table/Sizing';
+export { default as Dark } from './examples/Table/Dark';
+export { default as Responsive } from './examples/Table/Responsive';
+export { default as Props } from './examples/Table/Props';
diff --git a/stories/Toast.stories.js b/stories/Toast.stories.js
new file mode 100644
index 000000000..e92c069bb
--- /dev/null
+++ b/stories/Toast.stories.js
@@ -0,0 +1,19 @@
+export default {
+ title: 'Components/Toast',
+ parameters: {
+ docs: {
+ description: {
+ component: `
+ [Bootstrap Toasts](https://getbootstrap.com/docs/5.1/components/toasts/)
+
+ Push notifications to your visitors with a Toast, a lightweight and easily customizable alert message.
+ `,
+ },
+ },
+ },
+};
+
+export { default as Toast } from './examples/Toast';
+export { default as ToastDismiss } from './examples/ToastDismiss';
+export { default as ToastHeaderIcon } from './examples/ToastHeaderIcon';
+export { default as Props } from './examples/ToastProps';
diff --git a/stories/Tooltip.stories.js b/stories/Tooltip.stories.js
new file mode 100644
index 000000000..160253592
--- /dev/null
+++ b/stories/Tooltip.stories.js
@@ -0,0 +1,18 @@
+export default {
+ title: 'Components/Tooltip',
+ parameters: {
+ docs: {
+ description: {
+ component:
+ '[Bootstrap Tooltips](https://getbootstrap.com/docs/5.1/components/tooltips/)',
+ },
+ },
+ },
+};
+
+export { default as Tooltip } from './examples/Tooltip/Tooltip';
+export { default as Directions } from './examples/Tooltip/Directions';
+export { default as AutoHide } from './examples/Tooltip/AutoHide';
+export { default as Uncontrolled } from './examples/Tooltip/Uncontrolled';
+export { default as Update } from './examples/Tooltip/Update';
+export { default as Props } from './examples/Tooltip/Props';
diff --git a/stories/Upgrading.stories.mdx b/stories/Upgrading.stories.mdx
new file mode 100644
index 000000000..ea8ec4d6d
--- /dev/null
+++ b/stories/Upgrading.stories.mdx
@@ -0,0 +1,34 @@
+import { Meta } from '@storybook/addon-docs';
+
+
+
+# Upgrading to Reactstrap 9
+
+Reactstrap 9+ now requires on [Bootstrap 5.1+](https://getbootstrap.com/docs/5.1/getting-started/introduction/).
+Do not upgrade to Reactstrap v9 if you are using Bootstrap version 4.
+
+Please see the Bootstrap [Migration Guide](https://getbootstrap.com/docs/5.1/migration/#components) for more details.
+
+### Removed components
+
+- InputGroupAddon -
+ This in no longer needed in Bootstrap 5, you can now add Buttons, Inputs directly to InputGroups in the order you wish.
+- InputGroupButtonDropdown -
+ This can now be replaced with a regular Dropdown component.
+- CustomInput -
+ These are no longer needed in Bootstrap 5, since all form inputs will be styled by Bootstrap instead of browser default.
+ The existing Input component now supports file, select, switch, and range types.
+- Jumbotron -
+ Jumbotrons have been removed from Bootstrap 5, can be replaced with ``.
+ Jumbotron fluid can be replaced with `
`
+
+### Components with breaking changes:
+
+- Tooltip/Popover/DropdownMenu -
+ The `modifiers` prop will now conform to the new popper2 modifiers, which take an array instead of an object.
+ `offset` prop is now an array of 2 numbers that represent skidding and distance. See [popper docs](https://popper.js.org/docs/v2/modifiers/) for more details.
+- ModalHeader/ToastHeader -
+ Bootstrap 5 no longer supports custom close icons, so this feature was removed from ModalHeader and ToastHeader.
+- Dropdown/DropdownMenu -
+ The `left` and `right` properties are deprecated, but still supported for backwards compatibility.
+ Now replaced with `start` and `end` in Bootstrap 5.
diff --git a/stories/examples/Accordion/Accordion.js b/stories/examples/Accordion/Accordion.js
new file mode 100644
index 000000000..7ffdeb6e5
--- /dev/null
+++ b/stories/examples/Accordion/Accordion.js
@@ -0,0 +1,15 @@
+import Example from './AccordionExample';
+// eslint-disable-next-line import/extensions
+import AccordionCode from '!!raw-loader!./AccordionExample';
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: AccordionCode,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
diff --git a/stories/examples/Accordion/AccordionExample.js b/stories/examples/Accordion/AccordionExample.js
new file mode 100644
index 000000000..4c1e8be92
--- /dev/null
+++ b/stories/examples/Accordion/AccordionExample.js
@@ -0,0 +1,57 @@
+import React, { useState } from 'react';
+import {
+ Accordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [open, setOpen] = useState('1');
+ const toggle = (id) => {
+ if (open === id) {
+ setOpen('');
+ } else {
+ setOpen(id);
+ }
+ };
+
+ return (
+
+
+
+ Accordion Item 1
+
+ This is the first item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 2
+
+ This is the second item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 3
+
+ This is the third item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Accordion/AccordionFlush.js b/stories/examples/Accordion/AccordionFlush.js
new file mode 100644
index 000000000..fdbc2a746
--- /dev/null
+++ b/stories/examples/Accordion/AccordionFlush.js
@@ -0,0 +1,19 @@
+import Example from './AccordionFlushExample';
+// eslint-disable-next-line import/extensions
+import AccordionCode from '!!raw-loader!./AccordionFlushExample';
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `flush` to remove the default background-color, some borders, and some rounded corners to render accordions edge-to-edge with their parent container.',
+ },
+ source: {
+ code: AccordionCode,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
diff --git a/stories/examples/Accordion/AccordionFlushExample.js b/stories/examples/Accordion/AccordionFlushExample.js
new file mode 100644
index 000000000..42d9f4f8d
--- /dev/null
+++ b/stories/examples/Accordion/AccordionFlushExample.js
@@ -0,0 +1,57 @@
+import React, { useState } from 'react';
+import {
+ Accordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [open, setOpen] = useState('');
+ const toggle = (id) => {
+ if (open === id) {
+ setOpen('');
+ } else {
+ setOpen(id);
+ }
+ };
+
+ return (
+
+
+
+ Accordion Item 1
+
+ This is the first item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 2
+
+ This is the second item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 3
+
+ This is the third item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Accordion/AccordionProps.js b/stories/examples/Accordion/AccordionProps.js
new file mode 100644
index 000000000..2a1d8190b
--- /dev/null
+++ b/stories/examples/Accordion/AccordionProps.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import {
+ Accordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Accordion/AccordionStayOpen.js b/stories/examples/Accordion/AccordionStayOpen.js
new file mode 100644
index 000000000..258f7638d
--- /dev/null
+++ b/stories/examples/Accordion/AccordionStayOpen.js
@@ -0,0 +1,55 @@
+import React from 'react';
+import {
+ UncontrolledAccordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Accordion Item 1
+
+ This is the first item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can go
+ within the .accordion-body, though the transition does
+ limit overflow.
+
+
+
+ Accordion Item 2
+
+ This is the second item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can go
+ within the .accordion-body, though the transition does
+ limit overflow.
+
+
+
+ Accordion Item 3
+
+ This is the third item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can go
+ within the .accordion-body, though the transition does
+ limit overflow.
+
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `stayOpen` to make accordion items stay open when another item is opened.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Accordion/AccordionUncontrolled.js b/stories/examples/Accordion/AccordionUncontrolled.js
new file mode 100644
index 000000000..ab9674268
--- /dev/null
+++ b/stories/examples/Accordion/AccordionUncontrolled.js
@@ -0,0 +1,55 @@
+import React from 'react';
+import {
+ UncontrolledAccordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Accordion Item 1
+
+ This is the first item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can go
+ within the .accordion-body, though the transition does
+ limit overflow.
+
+
+
+ Accordion Item 2
+
+ This is the second item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can go
+ within the .accordion-body, though the transition does
+ limit overflow.
+
+
+
+ Accordion Item 3
+
+ This is the third item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can go
+ within the .accordion-body, though the transition does
+ limit overflow.
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Or if you hate messing with states, you can always use an `UncontrolledAccordion`',
+ },
+ },
+};
diff --git a/stories/examples/Accordion/AccordionUncontrolledExample.js b/stories/examples/Accordion/AccordionUncontrolledExample.js
new file mode 100644
index 000000000..e9f5c10b0
--- /dev/null
+++ b/stories/examples/Accordion/AccordionUncontrolledExample.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import {
+ UncontrolledAccordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Accordion Item 1
+
+ This is the first item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 2
+
+ This is the second item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 3
+
+ This is the third item's accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It's also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Alert/Alert.js b/stories/examples/Alert/Alert.js
new file mode 100644
index 000000000..80a5a2485
--- /dev/null
+++ b/stories/examples/Alert/Alert.js
@@ -0,0 +1,21 @@
+import React from 'react';
+import { Alert } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return
;
+}
+
+Example.args = {
+ children: 'Hey! Pay attention.',
+ color: 'primary',
+};
+
+Example.argTypes = {
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Alert/Colors.js b/stories/examples/Alert/Colors.js
new file mode 100644
index 000000000..1f881cd27
--- /dev/null
+++ b/stories/examples/Alert/Colors.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import { Alert } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(props) {
+ return (
+ <>
+ {colors.map((color) => (
+
+ This is a primary alert — check it out!
+
+ ))}
+ >
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Alert/Content.js b/stories/examples/Alert/Content.js
new file mode 100644
index 000000000..7d0b420c1
--- /dev/null
+++ b/stories/examples/Alert/Content.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import { Alert } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Well done!
+
+ Aww yeah, you successfully read this important alert message. This
+ example text is going to run a bit longer so that you can see how
+ spacing within an alert works with this kind of content.
+
+
+
+ Whenever you need to, be sure to use margin utilities to keep things
+ nice and tidy.
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Alerts can also contain additional HTML elements like headings, paragraphs and dividers.',
+ },
+ },
+};
diff --git a/stories/examples/Alert/Dismiss.js b/stories/examples/Alert/Dismiss.js
new file mode 100644
index 000000000..2cdc55fc8
--- /dev/null
+++ b/stories/examples/Alert/Dismiss.js
@@ -0,0 +1,18 @@
+import Example from './DismissExample';
+// eslint-disable-next-line import/extensions
+import AlertDismiss from '!!raw-loader!./DismissExample';
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Alerts can also be dismissed.',
+ },
+ source: {
+ code: AlertDismiss,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
diff --git a/stories/examples/Alert/DismissExample.js b/stories/examples/Alert/DismissExample.js
new file mode 100644
index 000000000..15a5c63d5
--- /dev/null
+++ b/stories/examples/Alert/DismissExample.js
@@ -0,0 +1,16 @@
+import React, { useState } from 'react';
+import { Alert } from 'reactstrap';
+
+function AlertExample(props) {
+ const [visible, setVisible] = useState(true);
+
+ const onDismiss = () => setVisible(false);
+
+ return (
+
+ I am an alert and I can be dismissed!
+
+ );
+}
+
+export default AlertExample;
diff --git a/stories/examples/Alert/Fadeless.js b/stories/examples/Alert/Fadeless.js
new file mode 100644
index 000000000..0e4bf39a7
--- /dev/null
+++ b/stories/examples/Alert/Fadeless.js
@@ -0,0 +1,27 @@
+import React, { useState } from 'react';
+import { UncontrolledAlert } from 'reactstrap';
+import Alert from '../../../src/Alert';
+
+export function AlertFadelessExample(props) {
+ const [visible, setVisible] = useState(true);
+
+ const onDismiss = () => setVisible(false);
+
+ return (
+
+
+ I am a primary alert and I can be dismissed without animating!
+
+
+ );
+}
+
+export function UncontrolledAlertFadelessExample() {
+ return (
+
+
+ I am an alert and I can be dismissed without animating!
+
+
+ );
+}
diff --git a/stories/examples/Alert/Link.js b/stories/examples/Alert/Link.js
new file mode 100644
index 000000000..9d853ad96
--- /dev/null
+++ b/stories/examples/Alert/Link.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Alert } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(props) {
+ return (
+ <>
+ {colors.map((color) => (
+
+ This is a primary alert with{' '}
+
+ an example link
+
+ . Give it a click if you like.
+
+ ))}
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Alerts get a matching link color.',
+ },
+ },
+};
diff --git a/stories/examples/Alert/Props.js b/stories/examples/Alert/Props.js
new file mode 100644
index 000000000..4c5e7d0cb
--- /dev/null
+++ b/stories/examples/Alert/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Alert } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return
;
+}
+
+export default Example;
diff --git a/stories/examples/Alert/UncontrolledDismiss.js b/stories/examples/Alert/UncontrolledDismiss.js
new file mode 100644
index 000000000..de4d4d65e
--- /dev/null
+++ b/stories/examples/Alert/UncontrolledDismiss.js
@@ -0,0 +1,21 @@
+import React from 'react';
+import { UncontrolledAlert } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ I am an alert and I can be dismissed!
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'And if you are not a fan of using state, you can always use `UncontrolledAlert`.',
+ },
+ },
+};
diff --git a/stories/examples/Badge/Badge.js b/stories/examples/Badge/Badge.js
new file mode 100644
index 000000000..fbe62fd3a
--- /dev/null
+++ b/stories/examples/Badge/Badge.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { Badge } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return
;
+}
+
+Example.args = {
+ children: 'New',
+ color: 'primary',
+ pill: false,
+};
+
+Example.argTypes = {
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Badge/Button.js b/stories/examples/Badge/Button.js
new file mode 100644
index 000000000..a703e7a8a
--- /dev/null
+++ b/stories/examples/Badge/Button.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Badge, Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Notifications 4
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Badges can be used as part of links or buttons to provide a counter.',
+ },
+ },
+};
diff --git a/stories/examples/Badge/Headings.js b/stories/examples/Badge/Headings.js
new file mode 100644
index 000000000..786b49171
--- /dev/null
+++ b/stories/examples/Badge/Headings.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Badge } from 'reactstrap';
+
+function Example(args) {
+ return (
+ <>
+
+ Example Heading New
+
+
+ Example Heading New
+
+
+ Example Heading New
+
+
+ Example Heading New
+
+
+ Example Heading New
+
+
+ Example Heading New
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Badges scale to match the size of the immediate parent element by using relative font sizing and em units. ',
+ },
+ },
+};
diff --git a/stories/examples/Badge/Links.js b/stories/examples/Badge/Links.js
new file mode 100644
index 000000000..fda768c26
--- /dev/null
+++ b/stories/examples/Badge/Links.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { Badge } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Primary
+
+
+ Secondary
+
+
+ Success
+
+
+ Danger
+
+
+ Warning
+
+
+ Info
+
+
+ Light
+
+
+ Dark
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Badge/Pills.js b/stories/examples/Badge/Pills.js
new file mode 100644
index 000000000..e83df79c1
--- /dev/null
+++ b/stories/examples/Badge/Pills.js
@@ -0,0 +1,44 @@
+import React from 'react';
+import { Badge } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Primary
+
+
+ Secondary
+
+
+ Success
+
+
+ Danger
+
+
+ Warning
+
+
+ Info
+
+
+ Light
+
+
+ Dark
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use the `pill` prop to make badges more rounded with a larger border-radius.',
+ },
+ },
+};
diff --git a/stories/examples/Badge/Props.js b/stories/examples/Badge/Props.js
new file mode 100644
index 000000000..b1679bcd9
--- /dev/null
+++ b/stories/examples/Badge/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Badge } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return
;
+}
+
+export default Example;
diff --git a/stories/examples/Badge/Variations.js b/stories/examples/Badge/Variations.js
new file mode 100644
index 000000000..c357b7558
--- /dev/null
+++ b/stories/examples/Badge/Variations.js
@@ -0,0 +1,30 @@
+import React from 'react';
+import { Badge } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Primary
+ Secondary
+ Success
+ Danger
+ Warning
+ Info
+
+ Light
+
+ Dark
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Change `color` prop to quickly change the appearance of a badge. You can add `text-dark` class name to get darker text for light backgrounds.',
+ },
+ },
+};
diff --git a/stories/examples/Breadcrump/Breadcrumb.js b/stories/examples/Breadcrump/Breadcrumb.js
new file mode 100644
index 000000000..f67c733b7
--- /dev/null
+++ b/stories/examples/Breadcrump/Breadcrumb.js
@@ -0,0 +1,32 @@
+import React from 'react';
+import { Breadcrumb, BreadcrumbItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+ Home
+
+
+
+ {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
+ Home
+
+ Library
+
+
+
+ {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
+ Home
+
+
+ {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
+ Library
+
+ Data
+
+ >
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Breadcrump/NoList.js b/stories/examples/Breadcrump/NoList.js
new file mode 100644
index 000000000..7c223a25c
--- /dev/null
+++ b/stories/examples/Breadcrump/NoList.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Breadcrumb, BreadcrumbItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Home
+
+
+ Library
+
+
+ Data
+
+
+ Bootstrap
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Breadcrump/Props.js b/stories/examples/Breadcrump/Props.js
new file mode 100644
index 000000000..6feeea381
--- /dev/null
+++ b/stories/examples/Breadcrump/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Breadcrumb, BreadcrumbItem } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return
;
+}
+
+export default Example;
diff --git a/stories/examples/Button/Button.js b/stories/examples/Button/Button.js
new file mode 100644
index 000000000..86b62f842
--- /dev/null
+++ b/stories/examples/Button/Button.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return (
+
+
+
+ );
+}
+
+Example.args = {
+ children: 'Click Me',
+ color: 'primary',
+ outline: false,
+ size: undefined,
+ block: false,
+ active: false,
+ close: false,
+};
+
+Example.argTypes = {
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+ size: {
+ control: { type: 'select' },
+ options: ['', 'sm', 'lg'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Button/Colors.js b/stories/examples/Button/Colors.js
new file mode 100644
index 000000000..976b3a227
--- /dev/null
+++ b/stories/examples/Button/Colors.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ primary {' '}
+ secondary {' '}
+ success {' '}
+ info {' '}
+ warning {' '}
+ danger link
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'There are several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.',
+ },
+ },
+};
diff --git a/stories/examples/Button/Disabled.js b/stories/examples/Button/Disabled.js
new file mode 100644
index 000000000..fe6aa7b67
--- /dev/null
+++ b/stories/examples/Button/Disabled.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Disabled button
+ {' '}
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Make buttons look inactive by adding the disabled prop to `Button`. Disabled buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.',
+ },
+ },
+};
diff --git a/stories/examples/Button/Outline.js b/stories/examples/Button/Outline.js
new file mode 100644
index 000000000..a8cc79e69
--- /dev/null
+++ b/stories/examples/Button/Outline.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ primary
+ {' '}
+
+ secondary
+ {' '}
+
+ success
+ {' '}
+
+ info
+ {' '}
+
+ warning
+ {' '}
+
+ danger
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'In need of a button, but not the hefty background colors they bring? Add `outline` prop to remove all background images and colors on any button.',
+ },
+ },
+};
diff --git a/stories/examples/Button/Props.js b/stories/examples/Button/Props.js
new file mode 100644
index 000000000..d80589ae9
--- /dev/null
+++ b/stories/examples/Button/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return
;
+}
+
+export default Example;
diff --git a/stories/examples/Button/Size.js b/stories/examples/Button/Size.js
new file mode 100644
index 000000000..302e39bba
--- /dev/null
+++ b/stories/examples/Button/Size.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Large
+ {' '}
+ Normal {' '}
+
+ Small
+ {' '}
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Fancy larger or smaller buttons? Add `size` prop with `lg` or `sm` values to make button bigger or smaller.',
+ },
+ },
+};
diff --git a/stories/examples/Button/Tags.js b/stories/examples/Button/Tags.js
new file mode 100644
index 000000000..b6e49bc0a
--- /dev/null
+++ b/stories/examples/Button/Tags.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Link
+ {' '}
+ {' '}
+ {' '}
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The button classes are designed to be used with the `
` element. However, you can also use these classes on `` or ` ` elements',
+ },
+ },
+};
diff --git a/stories/examples/ButtonDropdown.js b/stories/examples/ButtonDropdown.js
new file mode 100644
index 000000000..a02534d04
--- /dev/null
+++ b/stories/examples/ButtonDropdown.js
@@ -0,0 +1,28 @@
+import React, { useState } from 'react';
+import {
+ ButtonDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setOpen] = useState(false);
+
+ const toggle = () => setOpen(!dropdownOpen);
+
+ return (
+
+ Button Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonDropdownMulti.js b/stories/examples/ButtonDropdownMulti.js
new file mode 100644
index 000000000..e01e72f77
--- /dev/null
+++ b/stories/examples/ButtonDropdownMulti.js
@@ -0,0 +1,28 @@
+import React, { useState } from 'react';
+import {
+ ButtonDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setOpen] = useState(false);
+
+ const toggle = () => setOpen(!dropdownOpen);
+
+ return (
+
+ Click Me
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonDropdownMultiSplit.js b/stories/examples/ButtonDropdownMultiSplit.js
new file mode 100644
index 000000000..c9704f18d
--- /dev/null
+++ b/stories/examples/ButtonDropdownMultiSplit.js
@@ -0,0 +1,30 @@
+import React, { useState } from 'react';
+import {
+ Button,
+ ButtonDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setOpen] = useState(false);
+
+ const toggle = () => setOpen(!dropdownOpen);
+
+ return (
+
+ Click Me
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonDropdownUncontrolled.js b/stories/examples/ButtonDropdownUncontrolled.js
new file mode 100644
index 000000000..5795aa679
--- /dev/null
+++ b/stories/examples/ButtonDropdownUncontrolled.js
@@ -0,0 +1,25 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import React from 'react';
+import {
+ UncontrolledButtonDropdown,
+ DropdownMenu,
+ DropdownItem,
+ DropdownToggle,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonGroup/ButtonCloseIcon.js b/stories/examples/ButtonGroup/ButtonCloseIcon.js
new file mode 100644
index 000000000..6d2188d31
--- /dev/null
+++ b/stories/examples/ButtonGroup/ButtonCloseIcon.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import { Button } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonGroup/ButtonGroup.js b/stories/examples/ButtonGroup/ButtonGroup.js
new file mode 100644
index 000000000..dfdab5e1b
--- /dev/null
+++ b/stories/examples/ButtonGroup/ButtonGroup.js
@@ -0,0 +1,14 @@
+import React from 'react';
+import { Button, ButtonGroup } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Left
+ Middle
+ Right
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonGroup/MixedStyles.js b/stories/examples/ButtonGroup/MixedStyles.js
new file mode 100644
index 000000000..eace0de3f
--- /dev/null
+++ b/stories/examples/ButtonGroup/MixedStyles.js
@@ -0,0 +1,14 @@
+import React from 'react';
+import { Button, ButtonGroup } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Left
+ Middle
+ Right
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonGroup/Nesting.js b/stories/examples/ButtonGroup/Nesting.js
new file mode 100644
index 000000000..762288538
--- /dev/null
+++ b/stories/examples/ButtonGroup/Nesting.js
@@ -0,0 +1,41 @@
+import React from 'react';
+import {
+ Button,
+ ButtonGroup,
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Left
+ Middle
+
+
+ Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Place a `ButtonGroup` within another `ButtonGroup` when you want dropdown menus mixed with a series of buttons.',
+ },
+ },
+};
diff --git a/stories/examples/ButtonGroup/Props.js b/stories/examples/ButtonGroup/Props.js
new file mode 100644
index 000000000..d6a23c3b9
--- /dev/null
+++ b/stories/examples/ButtonGroup/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { ButtonGroup, ButtonToolbar } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/ButtonGroup/Sizing.js b/stories/examples/ButtonGroup/Sizing.js
new file mode 100644
index 000000000..ff630c93a
--- /dev/null
+++ b/stories/examples/ButtonGroup/Sizing.js
@@ -0,0 +1,37 @@
+import React from 'react';
+import { Button, ButtonGroup } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+ Left
+ Middle
+ Right
+
+
+
+ Left
+ Middle
+ Right
+
+
+
+ Left
+ Middle
+ Right
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Instead of applying button sizing classes to every button in a group, just add `size` prop to each `ButtonGroup`, including each one when nesting multiple groups.',
+ },
+ },
+};
diff --git a/stories/examples/ButtonGroup/Stateful.js b/stories/examples/ButtonGroup/Stateful.js
new file mode 100644
index 000000000..0ab485556
--- /dev/null
+++ b/stories/examples/ButtonGroup/Stateful.js
@@ -0,0 +1,19 @@
+import Example from './StatefulExample';
+// eslint-disable-next-line import/extensions
+import ButtonStateful from '!!raw-loader!./StatefulExample';
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Combine button-like checkbox and radio toggle buttons into a seamless looking button group.',
+ },
+ source: {
+ code: ButtonStateful,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
diff --git a/stories/examples/ButtonGroup/StatefulExample.js b/stories/examples/ButtonGroup/StatefulExample.js
new file mode 100644
index 000000000..2da910433
--- /dev/null
+++ b/stories/examples/ButtonGroup/StatefulExample.js
@@ -0,0 +1,80 @@
+import React, { useState } from 'react';
+import { Button, ButtonGroup } from 'reactstrap';
+
+function Example(props) {
+ const [cSelected, setCSelected] = useState([]);
+ const [rSelected, setRSelected] = useState(null);
+
+ const onCheckboxBtnClick = (selected) => {
+ const index = cSelected.indexOf(selected);
+ if (index < 0) {
+ cSelected.push(selected);
+ } else {
+ cSelected.splice(index, 1);
+ }
+ setCSelected([...cSelected]);
+ };
+ return (
+
+
Radio Buttons
+
+ setRSelected(1)}
+ active={rSelected === 1}
+ >
+ Radio 1
+
+ setRSelected(2)}
+ active={rSelected === 2}
+ >
+ Radio 2
+
+ setRSelected(3)}
+ active={rSelected === 3}
+ >
+ Radio 3
+
+
+
Selected: {rSelected}
+
+
Checkbox Buttons
+
+ onCheckboxBtnClick(1)}
+ active={cSelected.includes(1)}
+ >
+ Checkbox 1
+
+ onCheckboxBtnClick(2)}
+ active={cSelected.includes(2)}
+ >
+ Checkbox 2
+
+ onCheckboxBtnClick(3)}
+ active={cSelected.includes(3)}
+ >
+ Checkbox 3
+
+
+
Selected: {JSON.stringify(cSelected)}
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ButtonGroup/Toolbar.js b/stories/examples/ButtonGroup/Toolbar.js
new file mode 100644
index 000000000..6a7eccf8e
--- /dev/null
+++ b/stories/examples/ButtonGroup/Toolbar.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Button, ButtonGroup, ButtonToolbar } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ 1
+ 2
+ 3
+ 4
+
+
+ 5
+ 6
+ 7
+
+
+ 8
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Combine sets of button groups into button toolbars for more complex components. Use utility classes as needed to space out groups, buttons, and more.',
+ },
+ },
+};
diff --git a/stories/examples/ButtonGroup/Vertical.js b/stories/examples/ButtonGroup/Vertical.js
new file mode 100644
index 000000000..933473b0b
--- /dev/null
+++ b/stories/examples/ButtonGroup/Vertical.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Button, ButtonGroup } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Button
+ Button
+ Button
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Make a set of buttons appear vertically stacked rather than horizontally. **Split button dropdowns are not supported here.**',
+ },
+ },
+};
diff --git a/stories/examples/Card/Alignment.js b/stories/examples/Card/Alignment.js
new file mode 100644
index 000000000..80247e92f
--- /dev/null
+++ b/stories/examples/Card/Alignment.js
@@ -0,0 +1,41 @@
+import React from 'react';
+import { Card, Button, CardTitle, CardText } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'You can quickly change the text alignment of any card—in its entirety or specific parts.',
+ },
+ },
+};
diff --git a/stories/examples/Card/Backgrounds.js b/stories/examples/Card/Backgrounds.js
new file mode 100644
index 000000000..033104cd9
--- /dev/null
+++ b/stories/examples/Card/Backgrounds.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Card, CardTitle, CardText, CardHeader, CardBody } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(props) {
+ return (
+ <>
+ {colors.map((color) => (
+
+ Header
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+
+
+ ))}
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Cards include various options for customizing their backgrounds.',
+ },
+ },
+};
diff --git a/stories/examples/Card/Body.js b/stories/examples/Card/Body.js
new file mode 100644
index 000000000..d4c149db1
--- /dev/null
+++ b/stories/examples/Card/Body.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Card, CardText, CardBody, CardTitle, CardSubtitle } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+ Card Title
+
+ Card subtitle
+
+ This is some text within a card body.
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The building block of a card is the `CardBody` Use it whenever you need a padded section within a card.',
+ },
+ },
+};
diff --git a/stories/examples/Card/Card.js b/stories/examples/Card/Card.js
new file mode 100644
index 000000000..36c91839c
--- /dev/null
+++ b/stories/examples/Card/Card.js
@@ -0,0 +1,45 @@
+import React from 'react';
+import {
+ Card,
+ CardText,
+ CardBody,
+ CardTitle,
+ CardSubtitle,
+ Button,
+} from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return (
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ Some quick example text to build on the card title and make up the
+ bulk of the card‘s content.
+
+ Button
+
+
+ );
+}
+
+Example.args = {
+ color: undefined,
+ outline: false,
+ inverse: false,
+ body: false,
+};
+
+Example.argTypes = {
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Card/Columns.js b/stories/examples/Card/Columns.js
new file mode 100644
index 000000000..21ef58f8a
--- /dev/null
+++ b/stories/examples/Card/Columns.js
@@ -0,0 +1,98 @@
+import React from 'react';
+import {
+ Card,
+ Button,
+ CardImg,
+ CardTitle,
+ CardText,
+ CardColumns,
+ CardSubtitle,
+ CardBody,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+ Button
+
+
+
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This card has supporting text below as a natural lead-in to
+ additional content.
+
+ Button
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This card has even longer content than the
+ first to show that equal height action.
+
+ Button
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Card/ContentTypes.js b/stories/examples/Card/ContentTypes.js
new file mode 100644
index 000000000..cc84cbd60
--- /dev/null
+++ b/stories/examples/Card/ContentTypes.js
@@ -0,0 +1,42 @@
+import React from 'react';
+import {
+ Card,
+ CardText,
+ CardBody,
+ CardLink,
+ CardTitle,
+ CardSubtitle,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Card title
+
+ Card subtitle
+
+
+
+
+
+ Some quick example text to build on the card title and make up the
+ bulk of the card‘s content.
+
+ Card Link
+ Another Link
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Cards support a wide variety of content, including images, text, list groups, links, and more\n\nThe building block of a card is the `CardBody` Use it whenever you need a padded section within a card.\n\nCard titles are used by adding `CardTitle` with an optional `h*` prop. In the same way, links are added and placed next to each other by adding `CardLink`',
+ },
+ },
+};
diff --git a/stories/examples/Card/Decks.js b/stories/examples/Card/Decks.js
new file mode 100644
index 000000000..f7f7596d5
--- /dev/null
+++ b/stories/examples/Card/Decks.js
@@ -0,0 +1,78 @@
+import React from 'react';
+import {
+ Card,
+ Button,
+ CardImg,
+ CardTitle,
+ CardText,
+ CardDeck,
+ CardSubtitle,
+ CardBody,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+ Button
+
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This card has supporting text below as a natural lead-in to
+ additional content.
+
+ Button
+
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This card has even longer content than the
+ first to show that equal height action.
+
+ Button
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Card/Groups.js b/stories/examples/Card/Groups.js
new file mode 100644
index 000000000..15775f9b0
--- /dev/null
+++ b/stories/examples/Card/Groups.js
@@ -0,0 +1,87 @@
+import React from 'react';
+import {
+ Card,
+ Button,
+ CardImg,
+ CardTitle,
+ CardText,
+ CardGroup,
+ CardSubtitle,
+ CardBody,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+ Button
+
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This card has supporting text below as a natural lead-in to
+ additional content.
+
+ Button
+
+
+
+
+
+ Card title
+
+ Card subtitle
+
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This card has even longer content than the
+ first to show that equal height action.
+
+ Button
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use card groups to render cards as a single, attached element with equal width and height columns. ',
+ },
+ },
+};
diff --git a/stories/examples/Card/HeaderFooter.js b/stories/examples/Card/HeaderFooter.js
new file mode 100644
index 000000000..ec1cc1aa5
--- /dev/null
+++ b/stories/examples/Card/HeaderFooter.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import {
+ Card,
+ Button,
+ CardHeader,
+ CardFooter,
+ CardBody,
+ CardTitle,
+ CardText,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Header
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+ Footer
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Add an optional header and/or footer within a card.',
+ },
+ },
+};
diff --git a/stories/examples/Card/ImageCaps.js b/stories/examples/Card/ImageCaps.js
new file mode 100644
index 000000000..76d3b99df
--- /dev/null
+++ b/stories/examples/Card/ImageCaps.js
@@ -0,0 +1,58 @@
+import React from 'react';
+import { Card, CardBody, CardTitle, CardText, CardImg } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+
+
+ Card Title
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+
+ Last updated 3 mins ago
+
+
+
+
+
+ Card Title
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+
+ Last updated 3 mins ago
+
+
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Similar to headers and footers, cards can include top and bottom “image caps”—images at the top or bottom of a card.',
+ },
+ },
+};
diff --git a/stories/examples/Card/ImageOverlay.js b/stories/examples/Card/ImageOverlay.js
new file mode 100644
index 000000000..2160e8079
--- /dev/null
+++ b/stories/examples/Card/ImageOverlay.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Card, CardTitle, CardText, CardImg, CardImgOverlay } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+ Card Title
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+
+ Last updated 3 mins ago
+
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Turn an image into a card background and overlay your card’s text. Depending on the image, you may or may not need additional styles or utilities.',
+ },
+ },
+};
diff --git a/stories/examples/Card/KitchenSInk.js b/stories/examples/Card/KitchenSInk.js
new file mode 100644
index 000000000..a650340cc
--- /dev/null
+++ b/stories/examples/Card/KitchenSInk.js
@@ -0,0 +1,42 @@
+import React from 'react';
+import {
+ Card,
+ CardText,
+ CardBody,
+ CardTitle,
+ ListGroup,
+ ListGroupItem,
+ CardLink,
+} from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+
+ Card Title
+ This is some text within a card body.
+
+
+ An item
+ A second item
+ And a third item
+
+
+ Card Link
+ Another Card Link
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Mix and match multiple content types to create the card you need, or throw everything in there. Shown below are image styles, blocks, text styles, and a list group-all wrapped in a fixed-width card.',
+ },
+ },
+};
diff --git a/stories/examples/Card/ListGroup.js b/stories/examples/Card/ListGroup.js
new file mode 100644
index 000000000..b2c3131d9
--- /dev/null
+++ b/stories/examples/Card/ListGroup.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Card, CardHeader, ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+ Featured
+
+ An item
+ A second item
+ And a third item
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Create lists of content in a card with a flush list group.',
+ },
+ },
+};
diff --git a/stories/examples/Card/Outline.js b/stories/examples/Card/Outline.js
new file mode 100644
index 000000000..8b35b44ee
--- /dev/null
+++ b/stories/examples/Card/Outline.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Card, CardTitle, CardText, CardBody, CardHeader } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(props) {
+ return (
+ <>
+ {colors.map((color) => (
+
+ Header
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+
+
+ ))}
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Cards include various options for customizing their borders too.',
+ },
+ },
+};
diff --git a/stories/examples/Card/Props.js b/stories/examples/Card/Props.js
new file mode 100644
index 000000000..af4aaad33
--- /dev/null
+++ b/stories/examples/Card/Props.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import {
+ Card,
+ CardBody,
+ CardHeader,
+ CardImg,
+ CardSubtitle,
+ CardTitle,
+ CardFooter,
+ CardText,
+} from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Card/Sizing.js b/stories/examples/Card/Sizing.js
new file mode 100644
index 000000000..f3a931c43
--- /dev/null
+++ b/stories/examples/Card/Sizing.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import { Card, Button, CardTitle, CardText, Row, Col } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Cards assume no specific width to start, so they’ll be 100% wide unless otherwise stated.You can change this as needed with custom CSS, grid classes, grid Sass mixins, or utilities.\n\nUsing the grid, wrap cards in columns and rows as needed.',
+ },
+ },
+};
diff --git a/stories/examples/Carousel/Carousel.js b/stories/examples/Carousel/Carousel.js
new file mode 100644
index 000000000..4c1fb9578
--- /dev/null
+++ b/stories/examples/Carousel/Carousel.js
@@ -0,0 +1,21 @@
+import Example from './CarouselExample';
+// eslint-disable-next-line import/extensions
+import CarouselExample from '!!raw-loader!./CarouselExample';
+
+Example.args = {
+ dark: false,
+ slide: true,
+ fade: false,
+};
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: CarouselExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Carousel/CarouselExample.js b/stories/examples/Carousel/CarouselExample.js
new file mode 100644
index 000000000..5845a849b
--- /dev/null
+++ b/stories/examples/Carousel/CarouselExample.js
@@ -0,0 +1,95 @@
+import React, { useState } from 'react';
+import {
+ Carousel,
+ CarouselItem,
+ CarouselControl,
+ CarouselIndicators,
+ CarouselCaption,
+} from 'reactstrap';
+
+const items = [
+ {
+ src: 'https://picsum.photos/id/123/1200/400',
+ altText: 'Slide 1',
+ caption: 'Slide 1',
+ key: 1,
+ },
+ {
+ src: 'https://picsum.photos/id/456/1200/400',
+ altText: 'Slide 2',
+ caption: 'Slide 2',
+ key: 2,
+ },
+ {
+ src: 'https://picsum.photos/id/678/1200/400',
+ altText: 'Slide 3',
+ caption: 'Slide 3',
+ key: 3,
+ },
+];
+
+function Example(args) {
+ const [activeIndex, setActiveIndex] = useState(0);
+ const [animating, setAnimating] = useState(false);
+
+ const next = () => {
+ if (animating) return;
+ const nextIndex = activeIndex === items.length - 1 ? 0 : activeIndex + 1;
+ setActiveIndex(nextIndex);
+ };
+
+ const previous = () => {
+ if (animating) return;
+ const nextIndex = activeIndex === 0 ? items.length - 1 : activeIndex - 1;
+ setActiveIndex(nextIndex);
+ };
+
+ const goToIndex = (newIndex) => {
+ if (animating) return;
+ setActiveIndex(newIndex);
+ };
+
+ const slides = items.map((item) => {
+ return (
+ setAnimating(true)}
+ onExited={() => setAnimating(false)}
+ key={item.src}
+ >
+
+
+
+ );
+ });
+
+ return (
+
+
+ {slides}
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Carousel/CustomTag.js b/stories/examples/Carousel/CustomTag.js
new file mode 100644
index 000000000..422dd48b8
--- /dev/null
+++ b/stories/examples/Carousel/CustomTag.js
@@ -0,0 +1,15 @@
+import Example from './CustomTagExample';
+// eslint-disable-next-line import/extensions
+import CarouselCustomTagExample from '!!raw-loader!./CustomTagExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: CarouselCustomTagExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Carousel/CustomTagExample.js b/stories/examples/Carousel/CustomTagExample.js
new file mode 100644
index 000000000..8b98531a7
--- /dev/null
+++ b/stories/examples/Carousel/CustomTagExample.js
@@ -0,0 +1,98 @@
+import React, { useState } from 'react';
+import {
+ Carousel,
+ CarouselItem,
+ CarouselControl,
+ CarouselIndicators,
+ CarouselCaption,
+} from 'reactstrap';
+
+const items = [
+ {
+ id: 1,
+ altText: 'Slide 1',
+ caption: 'Slide 1',
+ },
+ {
+ id: 2,
+ altText: 'Slide 2',
+ caption: 'Slide 2',
+ },
+ {
+ id: 3,
+ altText: 'Slide 3',
+ caption: 'Slide 3',
+ },
+];
+
+function Example(props) {
+ const [activeIndex, setActiveIndex] = useState(0);
+ const [animating, setAnimating] = useState(false);
+
+ const next = () => {
+ if (animating) return;
+ const nextIndex = activeIndex === items.length - 1 ? 0 : activeIndex + 1;
+ setActiveIndex(nextIndex);
+ };
+
+ const previous = () => {
+ if (animating) return;
+ const nextIndex = activeIndex === 0 ? items.length - 1 : activeIndex - 1;
+ setActiveIndex(nextIndex);
+ };
+
+ const goToIndex = (newIndex) => {
+ if (animating) return;
+ setActiveIndex(newIndex);
+ };
+
+ const slides = items.map((item) => {
+ return (
+ setAnimating(true)}
+ onExited={() => setAnimating(false)}
+ >
+
+
+ );
+ });
+
+ return (
+
+
+
+
+ {slides}
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Carousel/Props.js b/stories/examples/Carousel/Props.js
new file mode 100644
index 000000000..606b253c7
--- /dev/null
+++ b/stories/examples/Carousel/Props.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import {
+ Carousel,
+ CarouselItem,
+ CarouselControl,
+ CarouselIndicators,
+ CarouselCaption,
+} from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Carousel/Uncontrolled.js b/stories/examples/Carousel/Uncontrolled.js
new file mode 100644
index 000000000..5b0230016
--- /dev/null
+++ b/stories/examples/Carousel/Uncontrolled.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import { UncontrolledCarousel } from 'reactstrap';
+
+const items = [
+ {
+ src: 'https://picsum.photos/id/123/1200/600',
+ altText: 'Slide 1',
+ caption: 'Slide 1',
+ key: 1,
+ },
+ {
+ src: 'https://picsum.photos/id/456/1200/600',
+ altText: 'Slide 2',
+ caption: 'Slide 2',
+ key: 2,
+ },
+ {
+ src: 'https://picsum.photos/id/678/1200/600',
+ altText: 'Slide 3',
+ caption: 'Slide 3',
+ key: 3,
+ },
+];
+
+function Example(props) {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Clearfix.js b/stories/examples/Clearfix.js
new file mode 100644
index 000000000..7475cd215
--- /dev/null
+++ b/stories/examples/Clearfix.js
@@ -0,0 +1,16 @@
+import React from 'react';
+
+function Example(props) {
+ return (
+
+
+ Example Button floated left
+
+
+ Example Button floated right
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/CloseButton/CloseButton.js b/stories/examples/CloseButton/CloseButton.js
new file mode 100644
index 000000000..98acaea24
--- /dev/null
+++ b/stories/examples/CloseButton/CloseButton.js
@@ -0,0 +1,12 @@
+import React from 'react';
+import { CloseButton } from 'reactstrap';
+
+function Example(args) {
+ return ;
+}
+
+Example.args = {
+ disabled: false,
+};
+
+export default Example;
diff --git a/stories/examples/CloseButton/Disabled.js b/stories/examples/CloseButton/Disabled.js
new file mode 100644
index 000000000..783908d3c
--- /dev/null
+++ b/stories/examples/CloseButton/Disabled.js
@@ -0,0 +1,16 @@
+import React from 'react';
+import { CloseButton } from 'reactstrap';
+
+function Example(args) {
+ return ;
+}
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Disabled close buttons change their opacity. Italso applied `pointer-events: none` and `user-select: none` to preventing hover and active states from triggering.',
+ },
+ },
+};
diff --git a/stories/examples/CloseButton/Props.js b/stories/examples/CloseButton/Props.js
new file mode 100644
index 000000000..89b43ac4a
--- /dev/null
+++ b/stories/examples/CloseButton/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { CloseButton } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/CloseButton/White.js b/stories/examples/CloseButton/White.js
new file mode 100644
index 000000000..1bad47526
--- /dev/null
+++ b/stories/examples/CloseButton/White.js
@@ -0,0 +1,21 @@
+import React from 'react';
+import { CloseButton } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Change the default `ButtonClose` to be white with the `variant` prop. ',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Collapse/Collapse.js b/stories/examples/Collapse/Collapse.js
new file mode 100644
index 000000000..50b0f9b0a
--- /dev/null
+++ b/stories/examples/Collapse/Collapse.js
@@ -0,0 +1,19 @@
+import Example from './CollapseExample';
+// eslint-disable-next-line import/extensions
+import CollapseExample from '!!raw-loader!./CollapseExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: CollapseExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+Example.args = {
+ horizontal: false,
+};
+
+export default Example;
diff --git a/stories/examples/Collapse/CollapseExample.js b/stories/examples/Collapse/CollapseExample.js
new file mode 100644
index 000000000..1c47da2e8
--- /dev/null
+++ b/stories/examples/Collapse/CollapseExample.js
@@ -0,0 +1,27 @@
+import React, { useState } from 'react';
+import { Collapse, Button, CardBody, Card } from 'reactstrap';
+
+function Example(args) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const toggle = () => setIsOpen(!isOpen);
+
+ return (
+
+
+ Toggle
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus
+ terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer
+ labore wes anderson cred nesciunt sapiente ea proident.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Collapse/Events.js b/stories/examples/Collapse/Events.js
new file mode 100644
index 000000000..96742cdf8
--- /dev/null
+++ b/stories/examples/Collapse/Events.js
@@ -0,0 +1,18 @@
+import Example from './EventsExample';
+// eslint-disable-next-line import/extensions
+import CollapseEvents from '!!raw-loader!./EventsExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: CollapseEvents,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Track events as they happen.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Collapse/EventsExample.js b/stories/examples/Collapse/EventsExample.js
new file mode 100644
index 000000000..932146a0d
--- /dev/null
+++ b/stories/examples/Collapse/EventsExample.js
@@ -0,0 +1,39 @@
+import React, { useState } from 'react';
+import { Collapse, Button, CardBody, Card } from 'reactstrap';
+
+function Example(props) {
+ const [collapse, setCollapse] = useState(false);
+ const [status, setStatus] = useState('Closed');
+
+ const onEntering = () => setStatus('Opening...');
+ const onEntered = () => setStatus('Opened');
+ const onExiting = () => setStatus('Closing...');
+ const onExited = () => setStatus('Closed');
+ const toggle = () => setCollapse(!collapse);
+
+ return (
+
+
+ Toggle
+
+
Current state: {status}
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus
+ terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer
+ labore wes anderson cred nesciunt sapiente ea proident.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Collapse/Horizontal.js b/stories/examples/Collapse/Horizontal.js
new file mode 100644
index 000000000..90bef6258
--- /dev/null
+++ b/stories/examples/Collapse/Horizontal.js
@@ -0,0 +1,25 @@
+import React, { useState } from 'react';
+import { Alert, Collapse, Button } from 'reactstrap';
+
+function Example(props) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const toggle = () => setIsOpen(!isOpen);
+
+ return (
+
+
+ Toggle
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus
+ terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer
+ labore wes anderson cred nesciunt sapiente ea proident.
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Collapse/Props.js b/stories/examples/Collapse/Props.js
new file mode 100644
index 000000000..f30aa3b97
--- /dev/null
+++ b/stories/examples/Collapse/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Collapse, UncontrolledCollapse } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Collapse/Uncontrolled.js b/stories/examples/Collapse/Uncontrolled.js
new file mode 100644
index 000000000..69d3f0c7b
--- /dev/null
+++ b/stories/examples/Collapse/Uncontrolled.js
@@ -0,0 +1,32 @@
+import React from 'react';
+import { UncontrolledCollapse, Button, CardBody, Card } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Toggle
+
+
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nesciunt
+ magni, voluptas debitis similique porro a molestias consequuntur
+ earum odio officiis natus, amet hic, iste sed dignissimos esse fuga!
+ Minus, alias.
+
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Not a fan of state, we got you covered.',
+ },
+ },
+};
diff --git a/stories/examples/Color.js b/stories/examples/Color.js
new file mode 100644
index 000000000..13388261e
--- /dev/null
+++ b/stories/examples/Color.js
@@ -0,0 +1,31 @@
+import React from 'react';
+
+function Example(props) {
+ return (
+
+
+ Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.
+
+
+ Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
+ Duis mollis, est non commodo luctus, nisi erat porttitor ligula.
+
+
+ Maecenas sed diam eget risus varius blandit sit amet non magna.
+
+
+ Etiam porta sem malesuada magna mollis euismod.
+
+
+ Donec ullamcorper nulla non metus auctor fringilla.
+
+
+ Etiam porta sem malesuada ultricies vehicula.
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ContainerResponsive.js b/stories/examples/ContainerResponsive.js
new file mode 100644
index 000000000..e23a8df37
--- /dev/null
+++ b/stories/examples/ContainerResponsive.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Container } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+ .container
+
+ .container-sm
+
+
+ .container-md
+
+
+ .container-lg
+
+
+ .container-xl
+
+
+ .container-fluid
+
+ >
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Dropdown/Container.js b/stories/examples/Dropdown/Container.js
new file mode 100644
index 000000000..a91a967aa
--- /dev/null
+++ b/stories/examples/Dropdown/Container.js
@@ -0,0 +1,46 @@
+import React, { useState } from 'react';
+import {
+ Dropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+
+ const toggle = () => setDropdownOpen((prevState) => !prevState);
+ const [lastClicked, setLastClicked] = useState(null);
+
+ return (
+
+ Container with overflow: hidden.
+
+ Last clicked: {lastClicked || 'null'}
+
+ Dropdown
+
+ setLastClicked(1)}>
+ Action 1
+
+ setLastClicked(2)}>
+ Action 2
+
+ setLastClicked(3)}>
+ Action 3
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Dropdown/Custom.js b/stories/examples/Dropdown/Custom.js
new file mode 100644
index 000000000..45257dc40
--- /dev/null
+++ b/stories/examples/Dropdown/Custom.js
@@ -0,0 +1,28 @@
+import React, { useState } from 'react';
+import { Dropdown, DropdownMenu, DropdownToggle } from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+
+ const toggle = () => setDropdownOpen((prevState) => !prevState);
+
+ return (
+
+
+ Custom Dropdown Content
+
+
+ Custom dropdown item
+ Custom dropdown item
+ Custom dropdown item
+ Custom dropdown item
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Dropdown/Dark.js b/stories/examples/Dropdown/Dark.js
new file mode 100644
index 000000000..8f6ab6166
--- /dev/null
+++ b/stories/examples/Dropdown/Dark.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import {
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+ UncontrolledDropdown,
+} from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+ Primary
+
+
+ Header
+ Some Action
+ Dropdown Item Text
+ Action (disabled)
+
+ Foo Action
+ Bar Action
+ Quo Action
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Opt into darker dropdowns to match a dark navbar or custom style by adding `dark` prop onto an existing `DropdownMenu`.',
+ },
+ },
+};
diff --git a/stories/examples/Dropdown/DirectionKitchen.js b/stories/examples/Dropdown/DirectionKitchen.js
new file mode 100644
index 000000000..9a0ef5d4e
--- /dev/null
+++ b/stories/examples/Dropdown/DirectionKitchen.js
@@ -0,0 +1,43 @@
+import React from 'react';
+import {
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+const directions = ['up', 'down', 'end', 'start'];
+
+export default function Example(args) {
+ return (
+
+ {directions.map((direction) => (
+
+
+ {`Drop${direction}`}
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ ))}
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Trigger dropdown menus at the direction you want using the `direction` prop.',
+ },
+ },
+};
diff --git a/stories/examples/Dropdown/Dropdown.js b/stories/examples/Dropdown/Dropdown.js
new file mode 100644
index 000000000..23898f5c8
--- /dev/null
+++ b/stories/examples/Dropdown/Dropdown.js
@@ -0,0 +1,28 @@
+import Example from './DropdownExample';
+// eslint-disable-next-line import/extensions
+import Dropdown from '!!raw-loader!./DropdownExample';
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: Dropdown,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+Example.args = {
+ dark: false,
+ end: false,
+ flip: false,
+};
+
+Example.argTypes = {
+ direction: {
+ control: { type: 'select' },
+ options: ['up', 'down', 'start', 'end'],
+ },
+};
diff --git a/stories/examples/Dropdown/DropdownExample.js b/stories/examples/Dropdown/DropdownExample.js
new file mode 100644
index 000000000..9ac433aad
--- /dev/null
+++ b/stories/examples/Dropdown/DropdownExample.js
@@ -0,0 +1,38 @@
+import React, { useState } from 'react';
+import {
+ Dropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+import PropTypes from 'prop-types';
+
+function Example({ direction, ...args }) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+
+ const toggle = () => setDropdownOpen((prevState) => !prevState);
+
+ return (
+
+
+ Dropdown
+
+ Header
+ Some Action
+ Dropdown Item Text
+ Action (disabled)
+
+ Foo Action
+ Bar Action
+ Quo Action
+
+
+
+ );
+}
+
+Example.propTypes = {
+ direction: PropTypes.string,
+};
+
+export default Example;
diff --git a/stories/examples/Dropdown/Props.js b/stories/examples/Dropdown/Props.js
new file mode 100644
index 000000000..8d1213e15
--- /dev/null
+++ b/stories/examples/Dropdown/Props.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import {
+ Dropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Dropdown/SetActiveFromChild.js b/stories/examples/Dropdown/SetActiveFromChild.js
new file mode 100644
index 000000000..424d50e67
--- /dev/null
+++ b/stories/examples/Dropdown/SetActiveFromChild.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import {
+ Navbar,
+ Nav,
+ NavItem,
+ NavLink,
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+export default function Example(args) {
+ return (
+
+
+
+
+ Inactive Link
+
+
+
+
+ Dropdown
+
+
+
+ Link
+
+
+
+
+
+ );
+}
diff --git a/stories/examples/Dropdown/Sizing.js b/stories/examples/Dropdown/Sizing.js
new file mode 100644
index 000000000..4367351e9
--- /dev/null
+++ b/stories/examples/Dropdown/Sizing.js
@@ -0,0 +1,19 @@
+import Example from './SizingExample';
+// eslint-disable-next-line import/extensions
+import DropdownSizing from '!!raw-loader!./SizingExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: DropdownSizing,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story:
+ 'Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Dropdown/SizingExample.js b/stories/examples/Dropdown/SizingExample.js
new file mode 100644
index 000000000..abd175d7a
--- /dev/null
+++ b/stories/examples/Dropdown/SizingExample.js
@@ -0,0 +1,25 @@
+import React, { useState } from 'react';
+import {
+ Dropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+ const toggle = () => setDropdownOpen((prevState) => !prevState);
+
+ return (
+
+
+ Large Button
+
+
+ Header
+ Action
+
+
+ );
+}
+export default Example;
diff --git a/stories/examples/Dropdown/Split.js b/stories/examples/Dropdown/Split.js
new file mode 100644
index 000000000..14ac8b90d
--- /dev/null
+++ b/stories/examples/Dropdown/Split.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import {
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+ Button,
+ UncontrolledDropdown,
+} from 'reactstrap';
+
+function Example(args) {
+ return (
+
+ Primary
+
+
+ Header
+ Some Action
+ Dropdown Item Text
+ Action (disabled)
+
+ Foo Action
+ Bar Action
+ Quo Action
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Create split button dropdowns with virtually the same markup as single button dropdowns.',
+ },
+ },
+};
diff --git a/stories/examples/Dropdown/Uncontrolled.js b/stories/examples/Dropdown/Uncontrolled.js
new file mode 100644
index 000000000..7441973fe
--- /dev/null
+++ b/stories/examples/Dropdown/Uncontrolled.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import {
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+export default function Example() {
+ return (
+
+ Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'And if you are not a fan of using `state`, feel free to use the `UncontrolledDropdown`.',
+ },
+ },
+};
diff --git a/stories/examples/Fade.js b/stories/examples/Fade.js
new file mode 100644
index 000000000..2b1e14d18
--- /dev/null
+++ b/stories/examples/Fade.js
@@ -0,0 +1,21 @@
+import React, { useState } from 'react';
+import { Button, Fade } from 'reactstrap';
+
+function Example(props) {
+ const [fadeIn, setFadeIn] = useState(true);
+
+ const toggle = () => setFadeIn(!fadeIn);
+
+ return (
+
+
+ Toggle Fade
+
+
+ This content will fade in and out as the button is pressed
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/FadeProps.js b/stories/examples/FadeProps.js
new file mode 100644
index 000000000..f8e6829d7
--- /dev/null
+++ b/stories/examples/FadeProps.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Fade } from 'reactstrap';
+import Props from './Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Form/Form.js b/stories/examples/Form/Form.js
new file mode 100644
index 000000000..6808266ae
--- /dev/null
+++ b/stories/examples/Form/Form.js
@@ -0,0 +1,90 @@
+import React from 'react';
+import { Button, Form, FormGroup, Label, Input, FormText } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/FormFeedback.js b/stories/examples/Form/FormFeedback.js
new file mode 100644
index 000000000..2fe01ee01
--- /dev/null
+++ b/stories/examples/Form/FormFeedback.js
@@ -0,0 +1,56 @@
+import React from 'react';
+import {
+ Form,
+ FormGroup,
+ Label,
+ Input,
+ FormFeedback,
+ FormText,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/FormGrid.js b/stories/examples/Form/FormGrid.js
new file mode 100644
index 000000000..4617e47e3
--- /dev/null
+++ b/stories/examples/Form/FormGrid.js
@@ -0,0 +1,137 @@
+import React from 'react';
+import {
+ Col,
+ Button,
+ Form,
+ FormGroup,
+ Label,
+ Input,
+ FormText,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/FormGridFormRow.js b/stories/examples/Form/FormGridFormRow.js
new file mode 100644
index 000000000..e95e83ad2
--- /dev/null
+++ b/stories/examples/Form/FormGridFormRow.js
@@ -0,0 +1,80 @@
+import React from 'react';
+import { Col, Row, Button, Form, FormGroup, Label, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/FormInline.js b/stories/examples/Form/FormInline.js
new file mode 100644
index 000000000..b214194c7
--- /dev/null
+++ b/stories/examples/Form/FormInline.js
@@ -0,0 +1,46 @@
+import React from 'react';
+import { Button, Col, Form, FormGroup, Label, Input, Row } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/FormProps.js b/stories/examples/Form/FormProps.js
new file mode 100644
index 000000000..059a81793
--- /dev/null
+++ b/stories/examples/Form/FormProps.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Form, FormGroup, Label, Input, FormText } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Form/InlineCheckboxes.js b/stories/examples/Form/InlineCheckboxes.js
new file mode 100644
index 000000000..db88af5f4
--- /dev/null
+++ b/stories/examples/Form/InlineCheckboxes.js
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Form, FormGroup, Label, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/Input.js b/stories/examples/Form/Input.js
new file mode 100644
index 000000000..6b552eb54
--- /dev/null
+++ b/stories/examples/Form/Input.js
@@ -0,0 +1,59 @@
+import React from 'react';
+import { Input } from 'reactstrap';
+
+function Example({ ...args }) {
+ return (
+
+
+
+ );
+}
+
+Example.args = {
+ type: 'text',
+ valid: false,
+ invalid: false,
+};
+
+Example.argTypes = {
+ valid: {
+ control: { type: 'boolean' },
+ },
+ invalid: {
+ control: { type: 'boolean' },
+ },
+ type: {
+ control: { type: 'select' },
+ options: [
+ 'button',
+ 'checkbox',
+ 'color',
+ 'date',
+ 'datetime-local',
+ 'email',
+ 'file',
+ 'month',
+ 'number',
+ 'password',
+ 'radio',
+ 'range',
+ 'reset',
+ 'search',
+ 'select',
+ 'submit',
+ 'switch',
+ 'tel',
+ 'text',
+ 'textarea',
+ 'time',
+ 'url',
+ 'week',
+ ],
+ },
+ bsSize: {
+ control: { type: 'select' },
+ options: ['', 'sm', 'lg'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Form/InputGridSizing.js b/stories/examples/Form/InputGridSizing.js
new file mode 100644
index 000000000..3bb56f621
--- /dev/null
+++ b/stories/examples/Form/InputGridSizing.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Col, Form, FormGroup, Label, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/InputSizing.js b/stories/examples/Form/InputSizing.js
new file mode 100644
index 000000000..29a301a6e
--- /dev/null
+++ b/stories/examples/Form/InputSizing.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Form, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/InputType.js b/stories/examples/Form/InputType.js
new file mode 100644
index 000000000..a74b46d2d
--- /dev/null
+++ b/stories/examples/Form/InputType.js
@@ -0,0 +1,150 @@
+import React, { useState } from 'react';
+import { Form, FormGroup, Label, Input, FormText } from 'reactstrap';
+
+function Example(props) {
+ const [value, setValue] = useState('Some plain text/ static value');
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/LabelFloating.js b/stories/examples/Form/LabelFloating.js
new file mode 100644
index 000000000..0ca2d1931
--- /dev/null
+++ b/stories/examples/Form/LabelFloating.js
@@ -0,0 +1,41 @@
+import React from 'react';
+import { Button, Form, FormGroup, Label, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+ Wrap a pair of <Input> and <Label>{' '}
+ components in <FormGroup floating> to enable floating
+ labels with Bootstrap’s textual form fields. A placeholder{' '}
+ is required on each <Input> as our method of CSS-only
+ floating labels uses the :placeholder-shown pseudo-element.
+ Also note that the <Input> must come first so we can
+ utilize a sibling selector (e.g., ~).
+
+
+ >
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/LabelHidden.js b/stories/examples/Form/LabelHidden.js
new file mode 100644
index 000000000..0458ac007
--- /dev/null
+++ b/stories/examples/Form/LabelHidden.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Button, Form, FormGroup, Label, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Form/Switches.js b/stories/examples/Form/Switches.js
new file mode 100644
index 000000000..33b5f1941
--- /dev/null
+++ b/stories/examples/Form/Switches.js
@@ -0,0 +1,23 @@
+import Example from './SwitchesExample';
+// eslint-disable-next-line import/extensions
+import SwitchesExample from '!!raw-loader!./SwitchesExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: SwitchesExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story:
+ 'A switch has the markup of a custom checkbox but uses the `.form-switch` class to render a toggle switch. Consider using `role="switch"` to more accurately convey the nature of the control to assistive technologies that support this role. In older assistive technologies, it will simply be announced as a regular checkbox as a fallback. Switches also support the disabled attribute.',
+ },
+ },
+};
+
+Example.args = {
+ horizontal: false,
+};
+
+export default Example;
diff --git a/stories/examples/Form/SwitchesExample.js b/stories/examples/Form/SwitchesExample.js
new file mode 100644
index 000000000..b18287973
--- /dev/null
+++ b/stories/examples/Form/SwitchesExample.js
@@ -0,0 +1,35 @@
+import React, { useState } from 'react';
+import { Form, FormGroup, Label, Input } from 'reactstrap';
+
+function Example(props) {
+ const [state, setState] = useState(true);
+
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/InputGroup/Addon.js b/stories/examples/InputGroup/Addon.js
new file mode 100644
index 000000000..84de52083
--- /dev/null
+++ b/stories/examples/InputGroup/Addon.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { InputGroup, InputGroupText, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ To the Left!
+
+
+
+
+
+ To the Right!
+
+
+
+ To the Left!
+
+ To the Right!
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Multiple add-ons are supported and can be mixed with checkbox and radio input versions.',
+ },
+ },
+};
diff --git a/stories/examples/InputGroup/Button.js b/stories/examples/InputGroup/Button.js
new file mode 100644
index 000000000..33425c57a
--- /dev/null
+++ b/stories/examples/InputGroup/Button.js
@@ -0,0 +1,60 @@
+import React, { useState } from 'react';
+import {
+ InputGroup,
+ Input,
+ Button,
+ ButtonDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+ const [splitButtonOpen, setSplitButtonOpen] = useState(false);
+
+ const toggleDropDown = () => setDropdownOpen(!dropdownOpen);
+
+ const toggleSplit = () => setSplitButtonOpen(!splitButtonOpen);
+
+ return (
+
+
+ I‘m a button
+
+
+
+
+
+
+ Button Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+
+
+
+
+ Split Button
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+
+ I‘m a button
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/InputGroup/ButtonShorthand.js b/stories/examples/InputGroup/ButtonShorthand.js
new file mode 100644
index 000000000..15c0edeb4
--- /dev/null
+++ b/stories/examples/InputGroup/ButtonShorthand.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import { InputGroup, Button, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ To the Left!
+
+
+
+
+
+ To the Right!
+
+
+
+ To the Left!
+
+ To the Right!
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/InputGroup/Overview.js b/stories/examples/InputGroup/Overview.js
new file mode 100644
index 000000000..65d8e5f88
--- /dev/null
+++ b/stories/examples/InputGroup/Overview.js
@@ -0,0 +1,39 @@
+import React from 'react';
+import { InputGroup, InputGroupText, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ @
+
+
+
+
+
+
+
+
+
+
+
+
+ @example.com
+
+
+
+ $
+ $
+
+ $
+ $
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/InputGroup/Props.js b/stories/examples/InputGroup/Props.js
new file mode 100644
index 000000000..22d014265
--- /dev/null
+++ b/stories/examples/InputGroup/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { InputGroup, InputGroupText } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/InputGroup/Sizing.js b/stories/examples/InputGroup/Sizing.js
new file mode 100644
index 000000000..f03342b9a
--- /dev/null
+++ b/stories/examples/InputGroup/Sizing.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { InputGroup, InputGroupText, Input } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ @lg
+
+
+
+
+ @normal
+
+
+
+
+ @sm
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add the relative form sizing classes to the `InputGroup` itself and contents within will automatically resize—no need for repeating the form control size classes on each element.',
+ },
+ },
+};
diff --git a/stories/examples/Layout.js b/stories/examples/Layout.js
new file mode 100644
index 000000000..53f228ae0
--- /dev/null
+++ b/stories/examples/Layout.js
@@ -0,0 +1,68 @@
+import React from 'react';
+import { Container, Row, Col } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ .col
+
+
+ .col
+ .col
+ .col
+ .col
+
+
+
+ .col-3
+
+
+ .col-auto - variable width content
+
+
+ .col-3
+
+
+
+
+ .col-6
+
+
+ .col-6
+
+
+
+
+ .col-6 .col-sm-4
+
+
+ .col-6 .col-sm-4
+
+
+ .col-sm-4
+
+
+
+
+ .col-sm-6 .order-sm-2 .offset-sm-1
+
+
+
+
+ .col-sm-12 .col-md-6 .offset-md-3
+
+
+
+
+ .col-sm-auto .offset-sm-1
+
+
+ .col-sm-auto .offset-sm-1
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/LayoutProps.js b/stories/examples/LayoutProps.js
new file mode 100644
index 000000000..3cc341078
--- /dev/null
+++ b/stories/examples/LayoutProps.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Container, Row, Col } from 'reactstrap';
+import Props from './Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/LayoutRowCols.js b/stories/examples/LayoutRowCols.js
new file mode 100644
index 000000000..8f6ccc2e3
--- /dev/null
+++ b/stories/examples/LayoutRowCols.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Container, Row, Col } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ xs=“2“
+
+ Column
+ Column
+ Column
+ Column
+
+ xs=“3“
+
+ Column
+ Column
+ Column
+ Column
+
+ xs=“4“
+
+ Column
+ Column
+ Column
+ Column
+
+ xs=“4“
+
+ Column
+ Column
+
+ xs=“6“
+
+ Column
+
+ xs=“1“ sm=“2“ md=“4“
+
+ Column
+ Column
+ Column
+ Column
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/List/Inline.js b/stories/examples/List/Inline.js
new file mode 100644
index 000000000..2ea22ad93
--- /dev/null
+++ b/stories/examples/List/Inline.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { List, ListInlineItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Lorem ipsum
+ Phasellus iaculis
+ Nulla volutpat
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Remove a list’s bullets and apply some light margin',
+ },
+ },
+};
diff --git a/stories/examples/List/List.js b/stories/examples/List/List.js
new file mode 100644
index 000000000..d974766ec
--- /dev/null
+++ b/stories/examples/List/List.js
@@ -0,0 +1,14 @@
+import React from 'react';
+import { List } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Lorem ipsum
+ Phasellus iaculis
+ Nulla volutpat
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/List/Props.js b/stories/examples/List/Props.js
new file mode 100644
index 000000000..d9475b066
--- /dev/null
+++ b/stories/examples/List/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { List, ListInlineItem } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/List/Unstyled.js b/stories/examples/List/Unstyled.js
new file mode 100644
index 000000000..5a4190bb4
--- /dev/null
+++ b/stories/examples/List/Unstyled.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import { List } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Lorem ipsum dolor sit amet
+ Consectetur adipiscing elit
+ Integer molestie lorem at massa
+ Facilisis in pretium nisl aliquet
+
+ Nulla volutpat aliquam velit
+
+ Phasellus iaculis neque
+ Purus sodales ultricies
+ Vestibulum laoreet porttitor sem
+ Ac tristique libero volutpat at
+
+
+ Faucibus porta lacus fringilla vel
+ Aenean sit amet erat nunc
+ Eget porttitor lorem
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Remove the default `list-style` and `left margin` on list items (immediate children only).',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/Active.js b/stories/examples/ListGroup/Active.js
new file mode 100644
index 000000000..097aa445b
--- /dev/null
+++ b/stories/examples/ListGroup/Active.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `active` prop to a `ListGroupItem` to indicate the current active selection.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/Badge.js b/stories/examples/ListGroup/Badge.js
new file mode 100644
index 000000000..32639dc67
--- /dev/null
+++ b/stories/examples/ListGroup/Badge.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import { ListGroup, ListGroupItem, Badge } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Cras justo odio 14
+
+
+ Dapibus ac facilisis in 2
+
+
+ Morbi leo risus 1
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add badges to any list group item to show unread counts, activity, and more.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/ContextualClasses.js b/stories/examples/ListGroup/ContextualClasses.js
new file mode 100644
index 000000000..6b352a2a6
--- /dev/null
+++ b/stories/examples/ListGroup/ContextualClasses.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use contextual classes to style list items with a stateful background and color.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/CustomContent.js b/stories/examples/ListGroup/CustomContent.js
new file mode 100644
index 000000000..6bbe64a45
--- /dev/null
+++ b/stories/examples/ListGroup/CustomContent.js
@@ -0,0 +1,46 @@
+import React from 'react';
+import {
+ ListGroup,
+ ListGroupItem,
+ ListGroupItemHeading,
+ ListGroupItemText,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ List group item heading
+
+ Donec id elit non mi porta gravida at eget metus. Maecenas sed diam
+ eget risus varius blandit.
+
+
+
+ List group item heading
+
+ Donec id elit non mi porta gravida at eget metus. Maecenas sed diam
+ eget risus varius blandit.
+
+
+
+ List group item heading
+
+ Donec id elit non mi porta gravida at eget metus. Maecenas sed diam
+ eget risus varius blandit.
+
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add nearly any HTML within, even for linked list groups like the one below.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/DisabledItems.js b/stories/examples/ListGroup/DisabledItems.js
new file mode 100644
index 000000000..b5b32b82c
--- /dev/null
+++ b/stories/examples/ListGroup/DisabledItems.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `disabled` prop to a `ListGroupItem` to make it *appear* disabled.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/Flush.js b/stories/examples/ListGroup/Flush.js
new file mode 100644
index 000000000..25e2d1ead
--- /dev/null
+++ b/stories/examples/ListGroup/Flush.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `flush` prop to `ListGroup` to remove some borders and rounded corners to render list group items edge-to-edge in a parent container.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/Horizontal.js b/stories/examples/ListGroup/Horizontal.js
new file mode 100644
index 000000000..9756177c7
--- /dev/null
+++ b/stories/examples/ListGroup/Horizontal.js
@@ -0,0 +1,66 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ The horizontal prop can be a Boolean or a string specifying
+ one of Bootstrap‘s breakpoints
+
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+ This list group is horizontal at the lg breakpoint and up.
+
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+ Note that horizontal list groups cannot be combined with flush list
+ groups. If flush is true then{' '}
+ horizontal has no effect.
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `horizontal` prop to change the layout of list group items from vertical to horizontal across all breakpoints. Alternatively choose a variant `sm|md|lg|xl|xxl` to make a list group horizontal starting at that breakpoint’s min-width.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/LinksAndButtons.js b/stories/examples/ListGroup/LinksAndButtons.js
new file mode 100644
index 000000000..8f0d76bcf
--- /dev/null
+++ b/stories/examples/ListGroup/LinksAndButtons.js
@@ -0,0 +1,55 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
Links
+
+ Be sure to{' '}
+
+ not use the standard .btn classes here
+
+ .
+
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+
Buttons
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ListGroup/ListGroup.js b/stories/examples/ListGroup/ListGroup.js
new file mode 100644
index 000000000..3e60e66f2
--- /dev/null
+++ b/stories/examples/ListGroup/ListGroup.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+ );
+}
+
+Example.args = {
+ flush: false,
+ horizontal: false,
+ numbered: false,
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/Numbered.js b/stories/examples/ListGroup/Numbered.js
new file mode 100644
index 000000000..d8c179071
--- /dev/null
+++ b/stories/examples/ListGroup/Numbered.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import { ListGroup, ListGroupItem } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ The numbered prop can be used to opt into numbered list
+ group items.
+
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `number` prop to `ListGroup` to opt into numbered list group items. Numbers are generated via CSS (as opposed to a ``s default browser styling) for better placement inside list group items and to allow for better customization.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/ListGroup/Props.js b/stories/examples/ListGroup/Props.js
new file mode 100644
index 000000000..cd80cc355
--- /dev/null
+++ b/stories/examples/ListGroup/Props.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import {
+ ListGroup,
+ ListGroupItem,
+ ListGroupItemHeading,
+ ListGroupItemText,
+} from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Media.js b/stories/examples/Media.js
new file mode 100644
index 000000000..0ff7943f1
--- /dev/null
+++ b/stories/examples/Media.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Media } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque
+ ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at,
+ tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
+ fringilla. Donec lacinia congue felis in faucibus.
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/MediaAlignment.js b/stories/examples/MediaAlignment.js
new file mode 100644
index 000000000..4c4ff683b
--- /dev/null
+++ b/stories/examples/MediaAlignment.js
@@ -0,0 +1,59 @@
+import React from 'react';
+import { Media } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+
+
+ Top aligned media
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+
+ Middle aligned media
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+
+ Bottom aligned media
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/MediaList.js b/stories/examples/MediaList.js
new file mode 100644
index 000000000..caffdd3d3
--- /dev/null
+++ b/stories/examples/MediaList.js
@@ -0,0 +1,92 @@
+import React from 'react';
+import { Media } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum
+ in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac
+ nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio,
+ vestibulum in vulputate at, tempus viverra turpis. Fusce
+ condimentum nunc ac nisi vulputate fringilla. Donec lacinia
+ congue felis in faucibus.
+
+
+
+
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum
+ in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac
+ nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/MediaNested.js b/stories/examples/MediaNested.js
new file mode 100644
index 000000000..624ca88ca
--- /dev/null
+++ b/stories/examples/MediaNested.js
@@ -0,0 +1,41 @@
+import React from 'react';
+import { Media } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque
+ ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at,
+ tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
+ fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum
+ in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac
+ nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Modal/Backdrop.js b/stories/examples/Modal/Backdrop.js
new file mode 100644
index 000000000..b69a48890
--- /dev/null
+++ b/stories/examples/Modal/Backdrop.js
@@ -0,0 +1,19 @@
+import Example from './BackdropExample';
+// eslint-disable-next-line import/extensions
+import BackdropExample from '!!raw-loader!./BackdropExample';
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'When backdrop is set to static, the modal will not close when clicking outside it. Click the button below to try it.',
+ },
+ source: {
+ code: BackdropExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/BackdropExample.js b/stories/examples/Modal/BackdropExample.js
new file mode 100644
index 000000000..45f6ffdd6
--- /dev/null
+++ b/stories/examples/Modal/BackdropExample.js
@@ -0,0 +1,99 @@
+import React, { useState } from 'react';
+import {
+ Button,
+ Modal,
+ ModalHeader,
+ ModalBody,
+ ModalFooter,
+ Input,
+ Label,
+ Form,
+ FormGroup,
+} from 'reactstrap';
+import PropTypes from 'prop-types';
+
+function Example(props) {
+ const { className } = props;
+ const [modal, setModal] = useState(false);
+ const [backdrop, setBackdrop] = useState(true);
+ const [keyboard, setKeyboard] = useState(true);
+
+ const toggle = () => setModal(!modal);
+
+ const changeBackdrop = (e) => {
+ let { value } = e.target;
+ if (value !== 'static') {
+ value = JSON.parse(value);
+ }
+ setBackdrop(value);
+ };
+
+ const changeKeyboard = (e) => {
+ setKeyboard(e.currentTarget.checked);
+ };
+
+ return (
+
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+Example.propTypes = {
+ className: PropTypes.string,
+};
+
+export default Example;
diff --git a/stories/examples/Modal/CustomCloseButton.js b/stories/examples/Modal/CustomCloseButton.js
new file mode 100644
index 000000000..930862fd8
--- /dev/null
+++ b/stories/examples/Modal/CustomCloseButton.js
@@ -0,0 +1,18 @@
+import Example from './CustomCloseButtonExample';
+// eslint-disable-next-line import/extensions
+import CustomCloseButton from '!!raw-loader!./CustomCloseButtonExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: CustomCloseButton,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Add a custom close button to the Modal.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/CustomCloseButtonExample.js b/stories/examples/Modal/CustomCloseButtonExample.js
new file mode 100644
index 000000000..31eeba2db
--- /dev/null
+++ b/stories/examples/Modal/CustomCloseButtonExample.js
@@ -0,0 +1,52 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+import PropTypes from 'prop-types';
+
+function Example(props) {
+ const { className } = props;
+
+ const [modal, setModal] = useState(false);
+ const toggle = () => setModal(!modal);
+
+ const closeBtn = (
+
+ ×
+
+ );
+
+ return (
+
+
+ Click Me
+
+
+
+ Modal title
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+Example.propTypes = {
+ className: PropTypes.string,
+};
+
+export default Example;
diff --git a/stories/examples/Modal/CustomTimeout.js b/stories/examples/Modal/CustomTimeout.js
new file mode 100644
index 000000000..e10ff0975
--- /dev/null
+++ b/stories/examples/Modal/CustomTimeout.js
@@ -0,0 +1,18 @@
+import Example from './CustomTimeoutExample';
+// eslint-disable-next-line import/extensions
+import CustomTimeout from '!!raw-loader!./CustomTimeoutExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: CustomTimeout,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Add a custom timeout to the Modal.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/CustomTimeoutExample.js b/stories/examples/Modal/CustomTimeoutExample.js
new file mode 100644
index 000000000..ccd5e3473
--- /dev/null
+++ b/stories/examples/Modal/CustomTimeoutExample.js
@@ -0,0 +1,51 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+import PropTypes from 'prop-types';
+
+function Example(props) {
+ const { className } = props;
+
+ const [modal, setModal] = useState(false);
+
+ const toggle = () => setModal(!modal);
+
+ return (
+
+
+ Click Me
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+Example.propTypes = {
+ className: PropTypes.string,
+};
+
+export default Example;
diff --git a/stories/examples/Modal/Destructuring.js b/stories/examples/Modal/Destructuring.js
new file mode 100644
index 000000000..73be408c7
--- /dev/null
+++ b/stories/examples/Modal/Destructuring.js
@@ -0,0 +1,18 @@
+import Example from './DestructuringExample';
+// eslint-disable-next-line import/extensions
+import Destructuring from '!!raw-loader!./DestructuringExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: Destructuring,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Unmount modal on closing using the `unmountOnClose` prop.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/DestructuringExample.js b/stories/examples/Modal/DestructuringExample.js
new file mode 100644
index 000000000..212932d20
--- /dev/null
+++ b/stories/examples/Modal/DestructuringExample.js
@@ -0,0 +1,65 @@
+import React, { useState } from 'react';
+import {
+ Button,
+ Modal,
+ ModalHeader,
+ ModalBody,
+ ModalFooter,
+ Input,
+ Label,
+ Form,
+ FormGroup,
+} from 'reactstrap';
+
+function ModalExample(props) {
+ const [modal, setModal] = useState(false);
+ const [unmountOnClose, setUnmountOnClose] = useState(true);
+
+ const toggle = () => setModal(!modal);
+ const changeUnmountOnClose = (e) => {
+ let { value } = e.target;
+ setUnmountOnClose(JSON.parse(value));
+ };
+
+ return (
+
+
+
+ Modal title
+
+
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+export default ModalExample;
diff --git a/stories/examples/Modal/External.js b/stories/examples/Modal/External.js
new file mode 100644
index 000000000..87d4b2843
--- /dev/null
+++ b/stories/examples/Modal/External.js
@@ -0,0 +1,19 @@
+import Example from './ExternalExample';
+// eslint-disable-next-line import/extensions
+import External from '!!raw-loader!./ExternalExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: External,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story:
+ 'Move the close button to the outside of the `Modal` using `external` prop.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/ExternalExample.js b/stories/examples/Modal/ExternalExample.js
new file mode 100644
index 000000000..4844c871e
--- /dev/null
+++ b/stories/examples/Modal/ExternalExample.js
@@ -0,0 +1,50 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+
+function ModalExample(props) {
+ const [modal, setModal] = useState(false);
+
+ const toggle = () => setModal(!modal);
+
+ const externalCloseBtn = (
+
+ ×
+
+ );
+ return (
+
+
+ Click Me
+
+
+ Modal title
+
+ Look at the top right of the page/viewport!
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+export default ModalExample;
diff --git a/stories/examples/Modal/Fadeless.js b/stories/examples/Modal/Fadeless.js
new file mode 100644
index 000000000..e3a898d57
--- /dev/null
+++ b/stories/examples/Modal/Fadeless.js
@@ -0,0 +1,18 @@
+import Example from './FadelessExample';
+// eslint-disable-next-line import/extensions
+import Fadeless from '!!raw-loader!./FadelessExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: Fadeless,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Disable fade animation with `fade={false}` prop.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/FadelessExample.js b/stories/examples/Modal/FadelessExample.js
new file mode 100644
index 000000000..12fb54b54
--- /dev/null
+++ b/stories/examples/Modal/FadelessExample.js
@@ -0,0 +1,38 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+
+function ModalExample(props) {
+ const [modal, setModal] = useState(false);
+
+ const toggle = () => setModal(!modal);
+
+ return (
+
+
+ Click Me
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+export default ModalExample;
diff --git a/stories/examples/Modal/FocusAfterClose.js b/stories/examples/Modal/FocusAfterClose.js
new file mode 100644
index 000000000..cf7d87356
--- /dev/null
+++ b/stories/examples/Modal/FocusAfterClose.js
@@ -0,0 +1,19 @@
+import Example from './FocusAfterCloseExample';
+// eslint-disable-next-line import/extensions
+import FocusAfterClose from '!!raw-loader!./FocusAfterCloseExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: FocusAfterClose,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story:
+ 'The "Open" button will be focused after close when `returnFocusAfterClose` is true and will not be focused if `returnFocusAfterClose` is false.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/FocusAfterCloseExample.js b/stories/examples/Modal/FocusAfterCloseExample.js
new file mode 100644
index 000000000..9f7643620
--- /dev/null
+++ b/stories/examples/Modal/FocusAfterCloseExample.js
@@ -0,0 +1,57 @@
+import React, { useState } from 'react';
+import {
+ Button,
+ Modal,
+ ModalBody,
+ ModalFooter,
+ Label,
+ Input,
+ FormGroup,
+ Form,
+} from 'reactstrap';
+
+function ModalFocusAfterClose(props) {
+ const [open, setOpen] = useState(false);
+ const [focusAfterClose, setFocusAfterClose] = useState(true);
+
+ const toggle = () => setOpen(!open);
+ const handleSelectChange = ({ target: { value } }) => {
+ setFocusAfterClose(JSON.parse(value));
+ };
+
+ return (
+
+
+
+
+ Observe the “Open“ button. It will be focused after close
+ when “returnFocusAfterClose“ is true and will not be
+ focused if “returnFocusAfterClose“ is false.
+
+
+
+ Close
+
+
+
+
+ );
+}
+
+export default ModalFocusAfterClose;
diff --git a/stories/examples/Modal/Fullscreen.js b/stories/examples/Modal/Fullscreen.js
new file mode 100644
index 000000000..9fdcf656a
--- /dev/null
+++ b/stories/examples/Modal/Fullscreen.js
@@ -0,0 +1,18 @@
+import Example from './FullscreenExample';
+// eslint-disable-next-line import/extensions
+import Fullscreen from '!!raw-loader!./FullscreenExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: Fullscreen,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Make the modal fullscreen.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/FullscreenExample.js b/stories/examples/Modal/FullscreenExample.js
new file mode 100644
index 000000000..6dd1c6f61
--- /dev/null
+++ b/stories/examples/Modal/FullscreenExample.js
@@ -0,0 +1,38 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+
+function ModalFullscreenExample(props) {
+ const [modal, setModal] = useState(false);
+
+ const toggle = () => setModal(!modal);
+
+ return (
+
+
+ Click Me
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+export default ModalFullscreenExample;
diff --git a/stories/examples/Modal/Modal.js b/stories/examples/Modal/Modal.js
new file mode 100644
index 000000000..c0b40baed
--- /dev/null
+++ b/stories/examples/Modal/Modal.js
@@ -0,0 +1,36 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import Example from './ModalExample';
+// eslint-disable-next-line import/extensions
+import ModalExample from '!!raw-loader!./ModalExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: ModalExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+Example.args = {
+ fullscreen: false,
+ size: undefined,
+ backdrop: true,
+ fade: true,
+ centered: false,
+ scrollable: false,
+};
+
+Example.argTypes = {
+ fullscreen: {
+ control: { type: 'select' },
+ options: ['', true, 'sm', 'md', 'lg', 'xl'],
+ },
+ size: {
+ control: { type: 'select' },
+ options: ['', 'sm', 'lg', 'xl'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/ModalExample.js b/stories/examples/Modal/ModalExample.js
new file mode 100644
index 000000000..9b1b5aa18
--- /dev/null
+++ b/stories/examples/Modal/ModalExample.js
@@ -0,0 +1,38 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+
+function Example(args) {
+ const [modal, setModal] = useState(false);
+
+ const toggle = () => setModal(!modal);
+
+ return (
+
+
+ Click Me
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Modal/Nested.js b/stories/examples/Modal/Nested.js
new file mode 100644
index 000000000..f0b014a5e
--- /dev/null
+++ b/stories/examples/Modal/Nested.js
@@ -0,0 +1,18 @@
+import Example from './NestedExample';
+// eslint-disable-next-line import/extensions
+import Nested from '!!raw-loader!./NestedExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: Nested,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Nest modals by putting a modal inside another.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Modal/NestedExample.js b/stories/examples/Modal/NestedExample.js
new file mode 100644
index 000000000..28aae4ef5
--- /dev/null
+++ b/stories/examples/Modal/NestedExample.js
@@ -0,0 +1,68 @@
+import React, { useState } from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+
+function ModalExample(props) {
+ const [modal, setModal] = useState(false);
+ const [nestedModal, setNestedModal] = useState(false);
+ const [closeAll, setCloseAll] = useState(false);
+
+ const toggle = () => setModal(!modal);
+ const toggleNested = () => {
+ setNestedModal(!nestedModal);
+ setCloseAll(false);
+ };
+ const toggleAll = () => {
+ setNestedModal(!nestedModal);
+ setCloseAll(true);
+ };
+
+ return (
+
+
+ Click Me
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+ Show Nested Modal
+
+
+ Nested Modal title
+ Stuff and things
+
+
+ Done
+ {' '}
+
+ All Done
+
+
+
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+}
+
+export default ModalExample;
diff --git a/stories/examples/Modal/Props.js b/stories/examples/Modal/Props.js
new file mode 100644
index 000000000..e549d506d
--- /dev/null
+++ b/stories/examples/Modal/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Nav/Fill.js b/stories/examples/Nav/Fill.js
new file mode 100644
index 000000000..b732ec251
--- /dev/null
+++ b/stories/examples/Nav/Fill.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import { Nav, NavItem, NavLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Link
+
+
+
+ Much Longer Nav Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Force your `Nav` contents to extend the full available width one of two props. To proportionately fill all available space with your `NavItem`, use `fill`. Notice that all horizontal space is occupied, but not every nav item has the same width.',
+ },
+ },
+};
diff --git a/stories/examples/Nav/Justify.js b/stories/examples/Nav/Justify.js
new file mode 100644
index 000000000..b9d88d0f5
--- /dev/null
+++ b/stories/examples/Nav/Justify.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import { Nav, NavItem, NavLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Link
+
+
+
+ Much Longer Nav Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'For equal-width elements, use `justified`. All horizontal space will be occupied by nav links, but unlike the `fill` above, every nav item will be the same width.',
+ },
+ },
+};
diff --git a/stories/examples/Nav/Navs.js b/stories/examples/Nav/Navs.js
new file mode 100644
index 000000000..c57bf76a0
--- /dev/null
+++ b/stories/examples/Nav/Navs.js
@@ -0,0 +1,33 @@
+import React from 'react';
+import { Nav, NavItem, NavLink } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+
+ Link
+
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+ );
+}
+
+Example.args = {
+ tabs: false,
+ pills: false,
+ vertical: false,
+ justified: false,
+ fill: false,
+ card: false,
+};
+
+export default Example;
diff --git a/stories/examples/Nav/Pills.js b/stories/examples/Nav/Pills.js
new file mode 100644
index 000000000..94faa7836
--- /dev/null
+++ b/stories/examples/Nav/Pills.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { Nav, NavItem, NavLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Link
+
+
+
+ Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Take the same component and add `pills` prop.',
+ },
+ },
+};
diff --git a/stories/examples/Nav/Props.js b/stories/examples/Nav/Props.js
new file mode 100644
index 000000000..016f86e63
--- /dev/null
+++ b/stories/examples/Nav/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Nav, NavItem, NavLink } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Nav/TabPane.js b/stories/examples/Nav/TabPane.js
new file mode 100644
index 000000000..0e64b00f4
--- /dev/null
+++ b/stories/examples/Nav/TabPane.js
@@ -0,0 +1,85 @@
+import React, { useState } from 'react';
+import {
+ TabContent,
+ TabPane,
+ Nav,
+ NavItem,
+ NavLink,
+ Card,
+ Button,
+ CardTitle,
+ CardText,
+ Row,
+ Col,
+} from 'reactstrap';
+import classnames from 'classnames';
+
+function Example(props) {
+ const [activeTab, setActiveTab] = useState('1');
+
+ const toggle = (tab) => {
+ if (activeTab !== tab) setActiveTab(tab);
+ };
+
+ return (
+
+
+
+ {
+ toggle('1');
+ }}
+ >
+ Tab1
+
+
+
+ {
+ toggle('2');
+ }}
+ >
+ More Tabs
+
+
+
+
+
+
+
+ Tab 1 Contents
+
+
+
+
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Nav/Tabs.js b/stories/examples/Nav/Tabs.js
new file mode 100644
index 000000000..3c40b0c15
--- /dev/null
+++ b/stories/examples/Nav/Tabs.js
@@ -0,0 +1,19 @@
+import Example from './TabsExample';
+// eslint-disable-next-line import/extensions
+import TabsExample from '!!raw-loader!./TabsExample';
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Takes the basic Nav from above and adds the `tabs` prop to generate a tabbed interface.',
+ },
+ source: {
+ code: TabsExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Nav/TabsExample.js b/stories/examples/Nav/TabsExample.js
new file mode 100644
index 000000000..19b4bf09e
--- /dev/null
+++ b/stories/examples/Nav/TabsExample.js
@@ -0,0 +1,51 @@
+import React, { useState } from 'react';
+import {
+ Nav,
+ NavItem,
+ Dropdown,
+ DropdownItem,
+ DropdownToggle,
+ DropdownMenu,
+ NavLink,
+} from 'reactstrap';
+
+function Example(props) {
+ const [dropdownOpen, setDropdownOpen] = useState(false);
+
+ const toggle = () => setDropdownOpen(!dropdownOpen);
+
+ return (
+
+
+
+ Link
+
+
+
+
+ Dropdown
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+
+ Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Nav/Vertical.js b/stories/examples/Nav/Vertical.js
new file mode 100644
index 000000000..fae394cec
--- /dev/null
+++ b/stories/examples/Nav/Vertical.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Nav, NavItem, NavLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Link
+
+
+ Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Stack your navigation by changing the flex item direction with the `vertical` prop. Need to stack them on some viewports but not others? Use the responsive versions `vertical="sm"`.',
+ },
+ },
+};
diff --git a/stories/examples/Navbar/Brand.js b/stories/examples/Navbar/Brand.js
new file mode 100644
index 000000000..7b5a4cc9e
--- /dev/null
+++ b/stories/examples/Navbar/Brand.js
@@ -0,0 +1,42 @@
+import React from 'react';
+import { Navbar, NavbarBrand } from 'reactstrap';
+
+function Example(args) {
+ return (
+ <>
+
+
+
+
+
+
+ Reactstrap
+
+
+
+
+ Reactstrap
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ '`NavbarBrand` can be applied to most elements, be it text or images or both images and text.',
+ },
+ },
+};
diff --git a/stories/examples/Navbar/Navbar.js b/stories/examples/Navbar/Navbar.js
new file mode 100644
index 000000000..59b4c8be8
--- /dev/null
+++ b/stories/examples/Navbar/Navbar.js
@@ -0,0 +1,43 @@
+import Example from './NavbarExample';
+// eslint-disable-next-line import/extensions
+import NavbarExample from '!!raw-loader!./NavbarExample';
+import { colors } from '../options';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: NavbarExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+Example.args = {
+ color: 'light',
+ light: true,
+ dark: false,
+ expand: 'md',
+ container: 'fluid',
+};
+
+Example.argTypes = {
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+ container: {
+ control: { type: 'select' },
+ options: [false, true, 'sm', 'md', 'lg', 'xl', 'fluid'],
+ },
+ expand: {
+ control: { type: 'select' },
+ options: [false, true, 'sm', 'md', 'lg', 'xl'],
+ },
+ fixed: {
+ control: { type: 'select' },
+ options: ['', 'top', 'bottom'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Navbar/NavbarExample.js b/stories/examples/Navbar/NavbarExample.js
new file mode 100644
index 000000000..89846737d
--- /dev/null
+++ b/stories/examples/Navbar/NavbarExample.js
@@ -0,0 +1,56 @@
+import React, { useState } from 'react';
+import {
+ Collapse,
+ Navbar,
+ NavbarToggler,
+ NavbarBrand,
+ Nav,
+ NavItem,
+ NavLink,
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem,
+ NavbarText,
+} from 'reactstrap';
+
+function Example(args) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const toggle = () => setIsOpen(!isOpen);
+
+ return (
+
+
+ reactstrap
+
+
+
+
+ Components
+
+
+
+ GitHub
+
+
+
+
+ Options
+
+
+ Option 1
+ Option 2
+
+ Reset
+
+
+
+ Simple Text
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Navbar/Props.js b/stories/examples/Navbar/Props.js
new file mode 100644
index 000000000..abd8ef573
--- /dev/null
+++ b/stories/examples/Navbar/Props.js
@@ -0,0 +1,11 @@
+import React from 'react';
+import { Navbar, NavbarToggler, NavbarBrand, NavbarText } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return (
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Navbar/Toggler.js b/stories/examples/Navbar/Toggler.js
new file mode 100644
index 000000000..36a388cd4
--- /dev/null
+++ b/stories/examples/Navbar/Toggler.js
@@ -0,0 +1,19 @@
+import Example from './TogglerExample';
+// eslint-disable-next-line import/extensions
+import TogglerExample from '!!raw-loader!./TogglerExample';
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Navbar togglers help toggle navbar in case there is not enough space.',
+ },
+ source: {
+ code: TogglerExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Navbar/TogglerExample.js b/stories/examples/Navbar/TogglerExample.js
new file mode 100644
index 000000000..966ed03ac
--- /dev/null
+++ b/stories/examples/Navbar/TogglerExample.js
@@ -0,0 +1,41 @@
+import React, { useState } from 'react';
+import {
+ Collapse,
+ Navbar,
+ NavbarToggler,
+ NavbarBrand,
+ Nav,
+ NavItem,
+ NavLink,
+} from 'reactstrap';
+
+function Example(props) {
+ const [collapsed, setCollapsed] = useState(true);
+
+ const toggleNavbar = () => setCollapsed(!collapsed);
+
+ return (
+
+
+
+ reactstrap
+
+
+
+
+
+ Components
+
+
+
+ GitHub
+
+
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Offcanvas/Offcanvas.js b/stories/examples/Offcanvas/Offcanvas.js
new file mode 100644
index 000000000..8ce82db96
--- /dev/null
+++ b/stories/examples/Offcanvas/Offcanvas.js
@@ -0,0 +1,28 @@
+import Example from './OffcanvasExample';
+// eslint-disable-next-line import/extensions
+import OffcanvasExample from '!!raw-loader!./OffcanvasExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: OffcanvasExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+Example.args = {
+ backdrop: true,
+ fade: true,
+ scrollable: false,
+};
+
+Example.argTypes = {
+ direction: {
+ control: { type: 'select' },
+ options: ['top', 'start', 'end', 'bottom'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Offcanvas/OffcanvasExample.js b/stories/examples/Offcanvas/OffcanvasExample.js
new file mode 100644
index 000000000..57619ec2d
--- /dev/null
+++ b/stories/examples/Offcanvas/OffcanvasExample.js
@@ -0,0 +1,28 @@
+import React, { useState } from 'react';
+import { Button, Offcanvas, OffcanvasBody, OffcanvasHeader } from 'reactstrap';
+
+function Example(args) {
+ const [open, setOpen] = useState();
+ const toggle = () => setOpen(!open);
+
+ return (
+
+ {
+ setOpen(true);
+ }}
+ >
+ Open
+
+
+ Offcanvas
+
+ This is the Offcanvas body.
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Offcanvas/OffcanvasProps.js b/stories/examples/Offcanvas/OffcanvasProps.js
new file mode 100644
index 000000000..5d6af24a0
--- /dev/null
+++ b/stories/examples/Offcanvas/OffcanvasProps.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Offcanvas, OffcanvasBody, OffcanvasHeader } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Pagination/Pagination.js b/stories/examples/Pagination/Pagination.js
new file mode 100644
index 000000000..b6f2b039e
--- /dev/null
+++ b/stories/examples/Pagination/Pagination.js
@@ -0,0 +1,45 @@
+import React from 'react';
+import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+
+
+
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ 4
+
+
+ 5
+
+
+
+
+
+
+
+
+ );
+}
+
+Example.argTypes = {
+ size: {
+ control: { type: 'select' },
+ options: ['', 'sm', 'lg'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Pagination/Props.js b/stories/examples/Pagination/Props.js
new file mode 100644
index 000000000..9442e078b
--- /dev/null
+++ b/stories/examples/Pagination/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Pagination/SizingLarge.js b/stories/examples/Pagination/SizingLarge.js
new file mode 100644
index 000000000..5ba042494
--- /dev/null
+++ b/stories/examples/Pagination/SizingLarge.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ First
+
+
+
+
+ Previous
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+
+ Next
+
+
+
+
+ Last
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Fancy a larger pagination? Add `size="lg"` prop.',
+ },
+ },
+};
diff --git a/stories/examples/Pagination/SizingSmall.js b/stories/examples/Pagination/SizingSmall.js
new file mode 100644
index 000000000..52c6e82d0
--- /dev/null
+++ b/stories/examples/Pagination/SizingSmall.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'If you fancy a smaller pagination you can add `size="sm"` prop.',
+ },
+ },
+};
diff --git a/stories/examples/Pagination/State.js b/stories/examples/Pagination/State.js
new file mode 100644
index 000000000..f02a2f690
--- /dev/null
+++ b/stories/examples/Pagination/State.js
@@ -0,0 +1,47 @@
+import React from 'react';
+import { Pagination, PaginationItem, PaginationLink } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+
+
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ 4
+
+
+ 5
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Pagination links are customizable for different circumstances. Use `disabled` prop for links that appear un-clickable and `active` prop to indicate the current page.',
+ },
+ },
+};
diff --git a/stories/examples/Placeholder/Animation.js b/stories/examples/Placeholder/Animation.js
new file mode 100644
index 000000000..9d0c9120f
--- /dev/null
+++ b/stories/examples/Placeholder/Animation.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Placeholder } from 'reactstrap';
+
+function Example(args) {
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Use `wave` or `glow` animation using the `animation` prop.',
+ },
+ },
+};
diff --git a/stories/examples/Placeholder/Color.js b/stories/examples/Placeholder/Color.js
new file mode 100644
index 000000000..53d769c6d
--- /dev/null
+++ b/stories/examples/Placeholder/Color.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import { Placeholder } from 'reactstrap';
+
+function Example(args) {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Add custom color with `color` prop.',
+ },
+ },
+};
diff --git a/stories/examples/Placeholder/Placeholder.js b/stories/examples/Placeholder/Placeholder.js
new file mode 100644
index 000000000..228098ef5
--- /dev/null
+++ b/stories/examples/Placeholder/Placeholder.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import {
+ Placeholder,
+ Card,
+ CardBody,
+ CardTitle,
+ CardText,
+ PlaceholderButton,
+ CardImg,
+} from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+Example.args = {
+ animation: 'wave',
+};
+
+Example.argTypes = {
+ animation: {
+ control: {
+ type: 'select',
+ options: ['wave', 'glow'],
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Placeholder/Props.js b/stories/examples/Placeholder/Props.js
new file mode 100644
index 000000000..99a04658c
--- /dev/null
+++ b/stories/examples/Placeholder/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Placeholder } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Placeholder/Size.js b/stories/examples/Placeholder/Size.js
new file mode 100644
index 000000000..38da8b8c5
--- /dev/null
+++ b/stories/examples/Placeholder/Size.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import { Placeholder } from 'reactstrap';
+
+function Example(args) {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Want your placeholder bigger or smaller Add `size` prop with `lg`, `sm` or `xs`.',
+ },
+ },
+};
diff --git a/stories/examples/Popover/Focus.js b/stories/examples/Popover/Focus.js
new file mode 100644
index 000000000..ed2675e96
--- /dev/null
+++ b/stories/examples/Popover/Focus.js
@@ -0,0 +1,76 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import React from 'react';
+import {
+ Button,
+ UncontrolledPopover,
+ PopoverHeader,
+ PopoverBody,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Launch Popover (Focus)
+ {' '}
+
+ Launch Popover (Click)
+ {' '}
+
+ Launch Popover (Legacy)
+
+
+ Focus Trigger
+
+ Focusing on the trigging element makes this popover appear. Blurring
+ (clicking away) makes it disappear. You cannot select this text as the
+ popover will disappear when you try.
+
+
+
+ Click Trigger
+
+ Clicking on the triggering element makes this popover appear. Clicking
+ on it again will make it disappear. You can select this text, but
+ clicking away (somewhere other than the triggering element) will not
+ dismiss this popover.
+
+
+
+ Legacy Trigger
+
+ Legacy is a reactstrap special trigger value (outside of
+ bootstrap‘s spec/standard). Before reactstrap correctly
+ supported click and focus, it had a hybrid which was very useful and
+ has been brought back as trigger=“legacy“. One advantage
+ of the legacy trigger is that it allows the popover text to be
+ selected while also closing when clicking outside the triggering
+ element and popover itself.
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Change the trigger for the popover to either `click`, `focus` or `legacy`.',
+ },
+ },
+};
diff --git a/stories/examples/Popover/Multi.js b/stories/examples/Popover/Multi.js
new file mode 100644
index 000000000..8c0467d94
--- /dev/null
+++ b/stories/examples/Popover/Multi.js
@@ -0,0 +1,74 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+
+import React, { useState } from 'react';
+import { Button, Popover, PopoverHeader, PopoverBody } from 'reactstrap';
+
+function PopoverItem(props) {
+ const { id, item } = props;
+ const [popoverOpen, setPopoverOpen] = useState(false);
+
+ const toggle = () => setPopoverOpen(!popoverOpen);
+
+ return (
+ <>
+
+ {item.text}
+
+
+ Popover Title
+
+ Sed posuere consectetur est at lobortis. Aenean eu leo quam.
+ Pellentesque ornare sem lacinia quam venenatis vestibulum.
+
+
+ >
+ );
+}
+
+function PopoverExampleMulti(props) {
+ return (
+ <>
+ {[
+ {
+ placement: 'top',
+ text: 'Popover on Top',
+ },
+ {
+ placement: 'bottom',
+ text: 'Popover on Bottom',
+ },
+ {
+ placement: 'left',
+ text: 'Popover on Left',
+ },
+ {
+ placement: 'right',
+ text: 'Popover on Right',
+ },
+ ].map((popover, i) => {
+ // eslint-disable-next-line react/no-array-index-key
+ return ;
+ })}
+ >
+ );
+}
+
+export default PopoverExampleMulti;
+
+PopoverExampleMulti.parameters = {
+ docs: {
+ description: {
+ story: 'Four options are available: top, right, bottom, and left.',
+ },
+ },
+};
diff --git a/stories/examples/Popover/Popover.js b/stories/examples/Popover/Popover.js
new file mode 100644
index 000000000..3b3b88c5a
--- /dev/null
+++ b/stories/examples/Popover/Popover.js
@@ -0,0 +1,37 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import React, { useState } from 'react';
+import { Button, Popover, PopoverHeader, PopoverBody } from 'reactstrap';
+
+function Example(args) {
+ const [popoverOpen, setPopoverOpen] = useState(false);
+
+ const toggle = () => setPopoverOpen(!popoverOpen);
+
+ return (
+
+
+ Launch Popover
+
+
+ Popover Title
+
+ Sed posuere consectetur est at lobortis. Aenean eu leo quam.
+ Pellentesque ornare sem lacinia quam venenatis vestibulum.
+
+
+
+ );
+}
+
+Example.args = {
+ flip: true,
+};
+
+Example.argTypes = {
+ placement: {
+ control: { type: 'select' },
+ options: ['top', 'left', 'right', 'bottom'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Popover/Props.js b/stories/examples/Popover/Props.js
new file mode 100644
index 000000000..a414d770d
--- /dev/null
+++ b/stories/examples/Popover/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Popover, PopoverHeader, PopoverBody } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Popover/Uncontrolled.js b/stories/examples/Popover/Uncontrolled.js
new file mode 100644
index 000000000..4500b0f50
--- /dev/null
+++ b/stories/examples/Popover/Uncontrolled.js
@@ -0,0 +1,36 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import React from 'react';
+import {
+ Button,
+ UncontrolledPopover,
+ PopoverHeader,
+ PopoverBody,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Launch Popover
+
+
+ Popover Title
+
+ Sed posuere consectetur est at lobortis. Aenean eu leo quam.
+ Pellentesque ornare sem lacinia quam venenatis vestibulum.
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'If handling state is too much, you can always use `UncontrolledPopover`.',
+ },
+ },
+};
diff --git a/stories/examples/Popover/Update.js b/stories/examples/Popover/Update.js
new file mode 100644
index 000000000..3f3f38ee8
--- /dev/null
+++ b/stories/examples/Popover/Update.js
@@ -0,0 +1,57 @@
+import React, { useState } from 'react';
+import {
+ Button,
+ UncontrolledPopover,
+ PopoverHeader,
+ PopoverBody,
+ Collapse,
+} from 'reactstrap';
+import PropTypes from 'prop-types';
+
+function PopoverContent({ scheduleUpdate }) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ return (
+ <>
+ Schedule Update
+
+ setIsOpen(!isOpen)}>Click me
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat.
+
+
+ >
+ );
+}
+
+function Example(props) {
+ return (
+
+
+ Open Popover
+
+
+ {({ scheduleUpdate }) => (
+
+ )}
+
+
+ );
+}
+
+PopoverContent.propTypes = {
+ scheduleUpdate: PropTypes.func,
+};
+
+export default Example;
diff --git a/stories/examples/Progress/Animated.js b/stories/examples/Progress/Animated.js
new file mode 100644
index 000000000..cc9d3ca40
--- /dev/null
+++ b/stories/examples/Progress/Animated.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'The striped gradient can also be animated. Add `animated` to the progress bar to animate the stripes right to left via CSS3 animations.',
+ },
+ },
+};
diff --git a/stories/examples/Progress/Color.js b/stories/examples/Progress/Color.js
new file mode 100644
index 000000000..c2f3f2e11
--- /dev/null
+++ b/stories/examples/Progress/Color.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Pass color prop to change the appearance of individual progress bars.',
+ },
+ },
+};
diff --git a/stories/examples/Progress/Height.js b/stories/examples/Progress/Height.js
new file mode 100644
index 000000000..2a86ff423
--- /dev/null
+++ b/stories/examples/Progress/Height.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(args) {
+ return (
+ <>
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Change style `height` and `Progress` will automatically resize accordingly.',
+ },
+ },
+};
diff --git a/stories/examples/Progress/Labels.js b/stories/examples/Progress/Labels.js
new file mode 100644
index 000000000..aed2d9feb
--- /dev/null
+++ b/stories/examples/Progress/Labels.js
@@ -0,0 +1,49 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ 25%
+
+
+ 1/2
+
+
+ You‘re almost there!
+
+
+ You did it!
+
+
+
+ Meh
+
+
+ Wow!
+
+
+ Cool
+
+
+ 20%
+
+
+ !!
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add labels to your progress bars by passing children to `Progress` component.',
+ },
+ },
+};
diff --git a/stories/examples/Progress/Max.js b/stories/examples/Progress/Max.js
new file mode 100644
index 000000000..17ca4aacb
--- /dev/null
+++ b/stories/examples/Progress/Max.js
@@ -0,0 +1,44 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
1 of 5
+
+
50 of 135
+
+
75 of 111
+
+
463 of 500
+
+
+
Various (40) of 55
+
+
+ 5
+
+
+ 15
+
+
+ 10
+
+
+ 10
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Change the `max` prop to divide the bar into `max` equal lengths.',
+ },
+ },
+};
diff --git a/stories/examples/Progress/Multi.js b/stories/examples/Progress/Multi.js
new file mode 100644
index 000000000..6a1831e95
--- /dev/null
+++ b/stories/examples/Progress/Multi.js
@@ -0,0 +1,55 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
Plain
+
+
+
+
+
+
+
+
With Labels
+
+
+ Meh
+
+
+ Wow!
+
+
+ 25%
+
+
+ LOOK OUT!!
+
+
+
Stripes and Animations
+
+
+ Stripes
+
+
+ Animated Stripes
+
+
+ Plain
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Include multiple progress bars in a progress component if you need.',
+ },
+ },
+};
diff --git a/stories/examples/Progress/Progress.js b/stories/examples/Progress/Progress.js
new file mode 100644
index 000000000..3b4f59fb8
--- /dev/null
+++ b/stories/examples/Progress/Progress.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return ;
+}
+
+Example.args = {
+ value: 50,
+ animated: false,
+ striped: false,
+};
+
+Example.argTypes = {
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+ value: {
+ control: {
+ type: 'range',
+ min: 0,
+ max: 100,
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Progress/Props.js b/stories/examples/Progress/Props.js
new file mode 100644
index 000000000..88ef8e8a2
--- /dev/null
+++ b/stories/examples/Progress/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Progress/Striped.js b/stories/examples/Progress/Striped.js
new file mode 100644
index 000000000..01c429272
--- /dev/null
+++ b/stories/examples/Progress/Striped.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import { Progress } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `striped` to any progress bar to apply a stripe via CSS gradient over the progress bar’s background color.',
+ },
+ },
+};
diff --git a/stories/examples/Props.js b/stories/examples/Props.js
new file mode 100644
index 000000000..ac8ee4249
--- /dev/null
+++ b/stories/examples/Props.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { ArgsTable } from '@storybook/addon-docs';
+import PropTypes from 'prop-types';
+
+function Info({ component }) {
+ return (
+
+ );
+}
+
+function Props({ component, components = [] }) {
+ return (
+
+ {component ? : undefined}
+ {components.map((c) => (
+
+ ))}
+
+ );
+}
+
+Info.propTypes = {
+ component: PropTypes.elementType,
+};
+
+Props.propTypes = {
+ component: PropTypes.elementType,
+ components: PropTypes.arrayOf(PropTypes.elementType),
+};
+
+export default Props;
diff --git a/stories/examples/Spinner/Alignment.js b/stories/examples/Spinner/Alignment.js
new file mode 100644
index 000000000..adf565eeb
--- /dev/null
+++ b/stories/examples/Spinner/Alignment.js
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+
+function Example(props) {
+ return ;
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Spinners in Bootstrap are built with rems, currentColor, and display: inline-flex. ' +
+ 'This means they can easily be resized, recolored, and quickly aligned. ' +
+ '\n\n Use margin utilities like `.m-5` for easy spacing',
+ },
+ },
+};
diff --git a/stories/examples/Spinner/Button.js b/stories/examples/Spinner/Button.js
new file mode 100644
index 000000000..9a5d4fd43
--- /dev/null
+++ b/stories/examples/Spinner/Button.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { Spinner, Button } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+ Loading
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use spinners within buttons to indicate an action is currently processing or taking place. You may also swap the text out of the spinner element and utilize button text as needed.',
+ },
+ },
+};
diff --git a/stories/examples/Spinner/Colors.js b/stories/examples/Spinner/Colors.js
new file mode 100644
index 000000000..5f68a1ac2
--- /dev/null
+++ b/stories/examples/Spinner/Colors.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return (
+ <>
+ {colors.map((color) => (
+
+ ))}
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'All standard visual variant colors can be applied for the spinner.',
+ },
+ },
+};
diff --git a/stories/examples/Spinner/CustomSize.js b/stories/examples/Spinner/CustomSize.js
new file mode 100644
index 000000000..04e48a122
--- /dev/null
+++ b/stories/examples/Spinner/CustomSize.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Or use custom css as needed',
+ },
+ },
+};
diff --git a/stories/examples/Spinner/Grower.js b/stories/examples/Spinner/Grower.js
new file mode 100644
index 000000000..b097a0a39
--- /dev/null
+++ b/stories/examples/Spinner/Grower.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(props) {
+ return (
+ <>
+ {colors.map((color) => (
+
+ ))}
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'If you don’t fancy a border spinner, switch to the grow spinner. While it doesn’t technically spin, it does repeatedly grow! Once again you can apply all the colors as above.',
+ },
+ },
+};
diff --git a/stories/examples/Spinner/Props.js b/stories/examples/Spinner/Props.js
new file mode 100644
index 000000000..5e1035087
--- /dev/null
+++ b/stories/examples/Spinner/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Spinner/Size.js b/stories/examples/Spinner/Size.js
new file mode 100644
index 000000000..b06877a81
--- /dev/null
+++ b/stories/examples/Spinner/Size.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+
+function Example(props) {
+ return (
+ <>
+
+
+ >
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `size="sm` to make a smaller spinner that can quickly be used within other components.',
+ },
+ },
+};
diff --git a/stories/examples/Spinner/Spinner.js b/stories/examples/Spinner/Spinner.js
new file mode 100644
index 000000000..865544891
--- /dev/null
+++ b/stories/examples/Spinner/Spinner.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Spinner } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return ;
+}
+
+Example.args = {
+ type: 'border',
+};
+
+Example.argTypes = {
+ type: {
+ control: { type: 'select' },
+ options: ['border', 'grow'],
+ },
+ color: {
+ control: { type: 'select' },
+ options: colors,
+ },
+ size: {
+ control: { type: 'select' },
+ options: ['', 'sm'],
+ },
+};
+export default Example;
diff --git a/stories/examples/Table/Bordered.js b/stories/examples/Table/Bordered.js
new file mode 100644
index 000000000..f7883e345
--- /dev/null
+++ b/stories/examples/Table/Bordered.js
@@ -0,0 +1,47 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Add `bordered` for borders on all sides of the table and cells.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Borderless.js b/stories/examples/Table/Borderless.js
new file mode 100644
index 000000000..7ed335b4f
--- /dev/null
+++ b/stories/examples/Table/Borderless.js
@@ -0,0 +1,47 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Add `borderless` for a table without borders.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Dark.js b/stories/examples/Table/Dark.js
new file mode 100644
index 000000000..6ec8c476a
--- /dev/null
+++ b/stories/examples/Table/Dark.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use `variant="dark"` to invert the colors of the table and get light text on a dark background.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Hover.js b/stories/examples/Table/Hover.js
new file mode 100644
index 000000000..4847ca659
--- /dev/null
+++ b/stories/examples/Table/Hover.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Add `hover` prop to enable a hover state on table rows within a ``.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Props.js b/stories/examples/Table/Props.js
new file mode 100644
index 000000000..14819d8b0
--- /dev/null
+++ b/stories/examples/Table/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Table/Responsive.js b/stories/examples/Table/Responsive.js
new file mode 100644
index 000000000..9a24ed040
--- /dev/null
+++ b/stories/examples/Table/Responsive.js
@@ -0,0 +1,60 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+
+
+
+
+ 1
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+ 2
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+ 3
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Responsive tables allow tables to be scrolled horizontally with ease.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Sizing.js b/stories/examples/Table/Sizing.js
new file mode 100644
index 000000000..05cd80654
--- /dev/null
+++ b/stories/examples/Table/Sizing.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use `size="sm"` to make tables compact by cutting cell padding in half.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Striped.js b/stories/examples/Table/Striped.js
new file mode 100644
index 000000000..b5a3f6f1c
--- /dev/null
+++ b/stories/examples/Table/Striped.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use `striped` prop to add zebra-striping to any table row within the ` `.',
+ },
+ },
+};
diff --git a/stories/examples/Table/Table.js b/stories/examples/Table/Table.js
new file mode 100644
index 000000000..8d833d72e
--- /dev/null
+++ b/stories/examples/Table/Table.js
@@ -0,0 +1,55 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+
+function Example(args) {
+ return (
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+ );
+}
+
+Example.args = {
+ bordered: false,
+ borderless: false,
+ dark: false,
+ hover: false,
+ responsive: false,
+ striped: false,
+};
+
+Example.argTypes = {
+ size: {
+ control: { type: 'select' },
+ options: ['', 'sm'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Table/Variants.js b/stories/examples/Table/Variants.js
new file mode 100644
index 000000000..3e8289a46
--- /dev/null
+++ b/stories/examples/Table/Variants.js
@@ -0,0 +1,37 @@
+import React from 'react';
+import { Table } from 'reactstrap';
+import { colors } from '../options';
+
+function Example(args) {
+ return (
+
+
+
+ Class
+ Heading
+ Heading
+
+
+
+ {colors.map((color) => (
+
+ {color}
+ Cell
+ Cell
+
+ ))}
+
+
+ );
+}
+
+export default Example;
+
+Example.parameters = {
+ docs: {
+ description: {
+ story:
+ 'Use contextual classes to color tables, table rows or individual cells.',
+ },
+ },
+};
diff --git a/stories/examples/Toast.js b/stories/examples/Toast.js
new file mode 100644
index 000000000..cec096b36
--- /dev/null
+++ b/stories/examples/Toast.js
@@ -0,0 +1,91 @@
+import React from 'react';
+import { Toast, ToastBody, ToastHeader } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Reactstrap
+
+ This is a toast on a white background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a gridded background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a primary background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a secondary background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a success background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a danger background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a warning background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on an info background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a dark background — check it out!
+
+
+
+
+
+ Reactstrap
+
+ This is a toast on a black background — check it out!
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ToastDismiss.js b/stories/examples/ToastDismiss.js
new file mode 100644
index 000000000..3ba605f0e
--- /dev/null
+++ b/stories/examples/ToastDismiss.js
@@ -0,0 +1,34 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+
+import React, { useState } from 'react';
+import { Button, Toast, ToastBody, ToastHeader } from 'reactstrap';
+
+function ToastDismissExample(props) {
+ const [show, setShow] = useState(false);
+
+ const toggle = () => setShow(!show);
+
+ return (
+
+
+ Click Me
+
+
+
+
+ Toast title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ );
+}
+
+export default ToastDismissExample;
diff --git a/stories/examples/ToastHeaderIcon.js b/stories/examples/ToastHeaderIcon.js
new file mode 100644
index 000000000..529001040
--- /dev/null
+++ b/stories/examples/ToastHeaderIcon.js
@@ -0,0 +1,59 @@
+import React from 'react';
+import { Toast, ToastBody, ToastHeader, Spinner } from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+ Reactstrap
+
+ This is a toast with a primary icon — check it out!
+
+
+
+ Reactstrap
+
+ This is a toast with a secondary icon — check it out!
+
+
+
+ Reactstrap
+
+ This is a toast with a success icon — check it out!
+
+
+
+ Reactstrap
+
+ This is a toast with a danger icon — check it out!
+
+
+
+ Reactstrap
+
+ This is a toast with a warning icon — check it out!
+
+
+
+ Reactstrap
+ This is a toast with an info icon — check it out!
+
+
+ Reactstrap
+ This is a toast with a light icon — check it out!
+
+
+ Reactstrap
+ This is a toast with a dark icon — check it out!
+
+
+ }>Reactstrap
+
+ This is a toast with a custom icon — check it out!
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/ToastProps.js b/stories/examples/ToastProps.js
new file mode 100644
index 000000000..40ca4519c
--- /dev/null
+++ b/stories/examples/ToastProps.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Toast, ToastBody, ToastHeader } from 'reactstrap';
+import Props from './Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Tooltip/AutoHide.js b/stories/examples/Tooltip/AutoHide.js
new file mode 100644
index 000000000..d3e280a53
--- /dev/null
+++ b/stories/examples/Tooltip/AutoHide.js
@@ -0,0 +1,18 @@
+import Example from './AutoHideExample';
+// eslint-disable-next-line import/extensions
+import AutoHide from '!!raw-loader!./AutoHideExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: AutoHide,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story: 'Disable `autohide` to allow users to select text inside tooltip',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Tooltip/AutoHideExample.js b/stories/examples/Tooltip/AutoHideExample.js
new file mode 100644
index 000000000..8f023fa81
--- /dev/null
+++ b/stories/examples/Tooltip/AutoHideExample.js
@@ -0,0 +1,35 @@
+import React, { useState } from 'react';
+import { Tooltip } from 'reactstrap';
+
+function Example(props) {
+ const [tooltipOpen, setTooltipOpen] = useState(false);
+
+ const toggle = () => setTooltipOpen(!tooltipOpen);
+
+ return (
+
+
+ Sometimes you need to allow users to select text within a{' '}
+
+ tooltip
+
+ .
+
+
+ Try to select this text!
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/Tooltip/Directions.js b/stories/examples/Tooltip/Directions.js
new file mode 100644
index 000000000..956c6693e
--- /dev/null
+++ b/stories/examples/Tooltip/Directions.js
@@ -0,0 +1,19 @@
+import Example from './DirectionsExample';
+// eslint-disable-next-line import/extensions
+import Directions from '!!raw-loader!./DirectionsExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: Directions,
+ language: 'jsx',
+ type: 'auto',
+ },
+ description: {
+ story:
+ 'Hover over the buttons below to see the four tooltips directions: top, right, bottom, and left.',
+ },
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Tooltip/DirectionsExample.js b/stories/examples/Tooltip/DirectionsExample.js
new file mode 100644
index 000000000..dabba0cd8
--- /dev/null
+++ b/stories/examples/Tooltip/DirectionsExample.js
@@ -0,0 +1,61 @@
+import React, { useState } from 'react';
+import { Button, Tooltip } from 'reactstrap';
+import PropTypes from 'prop-types';
+
+function TooltipItem(props) {
+ const { item, id } = props;
+ const [tooltipOpen, setTooltipOpen] = useState(false);
+
+ const toggle = () => setTooltipOpen(!tooltipOpen);
+
+ return (
+
+
+ {item.text}
+
+
+ Tooltip Content!
+
+
+ );
+}
+
+TooltipItem.propTypes = {
+ item: PropTypes.object,
+ id: PropTypes.string,
+};
+
+function TooltipExampleMulti(props) {
+ return (
+ <>
+ {[
+ {
+ placement: 'top',
+ text: 'Tooltip on Top',
+ },
+ {
+ placement: 'bottom',
+ text: 'Tooltip on Bottom',
+ },
+ {
+ placement: 'left',
+ text: 'Tooltip on Left',
+ },
+ {
+ placement: 'right',
+ text: 'Tooltip on Right',
+ },
+ ].map((tooltip, i) => {
+ // eslint-disable-next-line react/no-array-index-key
+ return ;
+ })}
+ >
+ );
+}
+
+export default TooltipExampleMulti;
diff --git a/stories/examples/Tooltip/Props.js b/stories/examples/Tooltip/Props.js
new file mode 100644
index 000000000..205a7e4dd
--- /dev/null
+++ b/stories/examples/Tooltip/Props.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { Tooltip, UncontrolledTooltip } from 'reactstrap';
+import Props from '../Props';
+
+function Example() {
+ return ;
+}
+
+export default Example;
diff --git a/stories/examples/Tooltip/Tooltip.js b/stories/examples/Tooltip/Tooltip.js
new file mode 100644
index 000000000..7c2e7ebf4
--- /dev/null
+++ b/stories/examples/Tooltip/Tooltip.js
@@ -0,0 +1,28 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import Example from './TooltipExample';
+// eslint-disable-next-line import/extensions
+import TooltipExample from '!!raw-loader!./TooltipExample';
+
+Example.parameters = {
+ docs: {
+ source: {
+ code: TooltipExample,
+ language: 'jsx',
+ type: 'auto',
+ },
+ },
+};
+
+Example.args = {
+ autohide: true,
+ flip: true,
+};
+
+Example.argTypes = {
+ placement: {
+ control: { type: 'select' },
+ options: ['top', 'left', 'right', 'bottom'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Tooltip/TooltipExample.js b/stories/examples/Tooltip/TooltipExample.js
new file mode 100644
index 000000000..4a6baee09
--- /dev/null
+++ b/stories/examples/Tooltip/TooltipExample.js
@@ -0,0 +1,46 @@
+import React, { useState } from 'react';
+import { Tooltip } from 'reactstrap';
+
+function Example(args) {
+ const [tooltipOpen, setTooltipOpen] = useState(false);
+ const toggle = () => setTooltipOpen(!tooltipOpen);
+
+ return (
+
+
+ Somewhere in here is a{' '}
+
+ tooltip
+
+ .
+
+
+ Hello world!
+
+
+ );
+}
+
+Example.args = {
+ autohide: true,
+ flip: true,
+};
+
+Example.argTypes = {
+ placement: {
+ control: { type: 'select' },
+ options: ['top', 'left', 'right', 'bottom'],
+ },
+};
+
+export default Example;
diff --git a/stories/examples/Tooltip/Uncontrolled.js b/stories/examples/Tooltip/Uncontrolled.js
new file mode 100644
index 000000000..22c1575c9
--- /dev/null
+++ b/stories/examples/Tooltip/Uncontrolled.js
@@ -0,0 +1,35 @@
+/* eslint react/no-multi-comp: 0, react/prop-types: 0 */
+import React from 'react';
+import { UncontrolledTooltip } from 'reactstrap';
+
+export default function Example(props) {
+ return (
+
+
+ Somewhere in here is a{' '}
+
+ tooltip
+
+ .
+
+
+ Hello world!
+
+
+ );
+}
+
+Example.parameters = {
+ docs: {
+ description: {
+ story: 'Not a fan of handling state? We got `UncontrolledTooltip`.',
+ },
+ },
+};
diff --git a/stories/examples/Tooltip/Update.js b/stories/examples/Tooltip/Update.js
new file mode 100644
index 000000000..3a7bfe31a
--- /dev/null
+++ b/stories/examples/Tooltip/Update.js
@@ -0,0 +1,44 @@
+import React, { useState, useEffect } from 'react';
+import { Button, UncontrolledTooltip } from 'reactstrap';
+import PropTypes from 'prop-types';
+
+const shortText = 'Hi';
+const longText = 'Long tooltip content to test scheduleUpdate';
+
+function TooltipContent({ scheduleUpdate }) {
+ const [text, setText] = useState(shortText);
+
+ useEffect(() => {
+ const intervalId = setInterval(() => {
+ setText(text === shortText ? longText : shortText);
+ scheduleUpdate();
+ }, 2000);
+
+ return () => clearInterval(intervalId);
+ });
+
+ return {text}
;
+}
+
+function Example(props) {
+ return (
+
+ Click me
+
+ {({ scheduleUpdate }) => (
+
+ )}
+
+
+ );
+}
+
+TooltipContent.propTypes = {
+ scheduleUpdate: PropTypes.func,
+};
+
+export default Example;
diff --git a/stories/examples/UncontrolledAccordion.js b/stories/examples/UncontrolledAccordion.js
new file mode 100644
index 000000000..8260d4942
--- /dev/null
+++ b/stories/examples/UncontrolledAccordion.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import {
+ UncontrolledAccordion,
+ AccordionBody,
+ AccordionHeader,
+ AccordionItem,
+} from 'reactstrap';
+
+function Example(props) {
+ return (
+
+
+
+ Accordion Item 1
+
+ This is the first item‘s accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It‘s also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 2
+
+ This is the second item‘s accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It‘s also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+ Accordion Item 3
+
+ This is the third item‘s accordion body.
+ You can modify any of this with custom CSS or overriding our default
+ variables. It‘s also worth noting that just about any HTML can
+ go within the .accordion-body, though the transition
+ does limit overflow.
+
+
+
+
+ );
+}
+
+export default Example;
diff --git a/stories/examples/options.js b/stories/examples/options.js
new file mode 100644
index 000000000..8d0ac0df3
--- /dev/null
+++ b/stories/examples/options.js
@@ -0,0 +1,20 @@
+export const colors = [
+ 'primary',
+ 'secondary',
+ 'success',
+ 'danger',
+ 'warning',
+ 'info',
+ 'light',
+ 'dark',
+];
+export const buttonColors = [...colors, 'link'];
+export const bgColors = [...colors, 'transparent'];
+export const textColors = [
+ ...colors,
+ 'body',
+ 'muted',
+ 'white',
+ 'black-50',
+ 'white-50',
+];
diff --git a/stories/themes/Themes.stories.mdx b/stories/themes/Themes.stories.mdx
new file mode 100644
index 000000000..305bbaea3
--- /dev/null
+++ b/stories/themes/Themes.stories.mdx
@@ -0,0 +1,88 @@
+import { Meta } from '@storybook/addon-docs';
+import {
+ Card,
+ Button,
+ CardBody,
+ CardHeader,
+ Container,
+ Row,
+ Col,
+} from 'reactstrap';
+import premiumThemes from './index';
+
+
+
+
+
+
+
+
+
Reactstrap Themes & Templates
+
+ A collection of free and premium React templates and themes powered by
+ Reactstrap
+
+
+ {premiumThemes.map((company) => (
+
+ {company.creator.name}
+ {company.creator.tagLine}
+
+ {company.products.map((product) => {
+ return (
+
+
+
+
+ {product.tagLine}
+
+
+
+
+
+
+
+
+ );
+ })}
+ {company.products.length % 2 !== 0 && (
+
+
+ More themes will be added soon !
+
+
+ )}
+
+
+
+ See more themes from {company.creator.name}
+
+
+
+ ))}
+
diff --git a/stories/themes/index.js b/stories/themes/index.js
new file mode 100644
index 000000000..1a9d35a6f
--- /dev/null
+++ b/stories/themes/index.js
@@ -0,0 +1,151 @@
+export default [
+ {
+ creator: {
+ name: 'UiFort',
+ tagLine:
+ 'Check out some examples that our partners from UiFort created using the Reactstrap components library.',
+ link: 'https://uifort.com',
+ },
+ products: [
+ {
+ title: 'Bamburgh React Admin Dashboard with Reactstrap PRO',
+ tagLine: 'Premium React Admin Template',
+ imgUrl: '/themes/bamburgh-react-admin-dashboard-reactstrap-pro.jpg',
+ link: 'https://uifort.com/template/bamburgh-react-admin-dashboard-reactstrap-pro/?ref=reactstrap.github.io',
+ },
+ ],
+ },
+ {
+ creator: {
+ name: 'Creative Tim',
+ tagLine:
+ 'Check out some examples that our partners from Creative Tim created using the Reactstrap components library.',
+ link: 'https://www.creative-tim.com',
+ },
+ products: [
+ {
+ title: 'Now UI Kit PRO with Reactstrap',
+ tagLine: 'Premium Kit Template for Bootstrap 4 and Reactstrap',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/now-ui-kit-pro-react/opt_nukp_react_thumbnail.jpg',
+ link: 'https://www.creative-tim.com/product/now-ui-kit-pro-react',
+ },
+ {
+ title: 'Now UI Dashboard PRO with Reactstrap',
+ tagLine: 'Premium Reactstrap (Bootstrap 4) Admin Template',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/now-ui-dashboard-pro-react/now-ui-dashboard-pro-react.jpg',
+ link: 'https://www.creative-tim.com/product/now-ui-dashboard-pro-react',
+ },
+ {
+ title: 'Argon Design System with Reactstrap',
+ tagLine: 'Free Design System for Bootstrap 4 and Reactstrap',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-design-system-react/argon-design-system-react.jpg',
+ link: 'https://www.creative-tim.com/product/argon-design-system-react',
+ },
+ {
+ title: 'Argon Dashboard PRO with Reactstrap',
+ tagLine: 'Premium Reactstrap (Bootstrap 4) Admin Template',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-dashboard-pro-react/argon-dashboard-pro-react.jpg',
+ link: 'https://www.creative-tim.com/product/argon-dashboard-pro-react',
+ },
+ {
+ title: 'Paper Kit PRO with Reactstrap',
+ tagLine: 'Premium Kit Template for Bootstrap 4 and Reactstrap',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/paper-kit-pro-react/opt_pkp_react_thumbnail.jpg',
+ link: 'https://www.creative-tim.com/product/paper-kit-pro-react',
+ },
+ {
+ title: 'Paper Dashboard PRO with Reactstrap',
+ tagLine: 'Premium Reactstrap (Bootstrap 4) Admin Template',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/paper-dashboard-2-pro-react/opt_pdp_react.jpg',
+ link: 'https://www.creative-tim.com/product/paper-dashboard-pro-react',
+ },
+ {
+ title: 'BLK• Design System PRO with Reactstrap',
+ tagLine: 'Premium Design System for Bootstrap 4 and Reactstrap',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/blk-design-system-pro-react/blk-design-system-pro-react.jpg',
+ link: 'https://www.creative-tim.com/product/blk-design-system-pro-react',
+ },
+ {
+ title: 'Black Dashboard PRO with Reactstrap',
+ tagLine: 'Premium Reactstrap (Bootstrap 4) Admin Template',
+ imgUrl:
+ 'https://raw.githubusercontent.com/creativetimofficial/public-assets/master/black-dashboard-pro-react/black-dashboard-pro-react.jpg',
+ link: 'https://www.creative-tim.com/product/black-dashboard-pro-react',
+ },
+ ],
+ },
+ {
+ creator: {
+ name: 'WrapPixel',
+ tagLine:
+ 'Check out some examples that our partners from WrapPixel created using the Reactstrap components library.',
+ link: 'https://www.wrappixel.com',
+ },
+ products: [
+ {
+ title: 'MaterialPro Admin with Reactstrap',
+ tagLine: 'Premium Admin Template for Bootstrap 4 and Reactstrap',
+ imgUrl:
+ 'https://www.wrappixel.com/wp-content/uploads/edd/2020/04/materialpro-react-admin-y.jpg',
+ link: 'https://www.wrappixel.com/templates/materialpro-react-redux-admin/',
+ },
+ {
+ title: 'Xtreme Admin & Dashboard Template with Reactstrap',
+ tagLine: 'Premium Reactstrap (Bootstrap 4) Admin Template',
+ imgUrl:
+ 'https://www.wrappixel.com/wp-content/uploads/edd/2020/04/xtreme-react-admin-template-y.jpg',
+ link: 'https://www.wrappixel.com/templates/xtreme-react-redux-admin/',
+ },
+ {
+ title: 'AdminPro React Admin Template with Reactstrap',
+ tagLine: 'Best admin templates for Bootstrap 4 and Reactstrap',
+ imgUrl:
+ 'https://www.wrappixel.com/wp-content/uploads/edd/2020/04/adminpro-react-dashboard-y.jpg',
+ link: 'https://www.wrappixel.com/templates/adminpro-react-redux-admin/',
+ },
+ ],
+ },
+ {
+ creator: {
+ name: 'PIXINVENT',
+ tagLine:
+ 'PIXINVENT provides high quality, creative design and easy to use Premium & Free Bootstrap Admin Template',
+ link: 'https://1.envato.market/pixinvent_portfolio',
+ },
+ products: [
+ {
+ title: 'Vuexy - Vuejs, React, HTML & Laravel Admin Dashboard Template',
+ tagLine:
+ 'Best selling, Production Ready, Carefully Crafted Admin Template',
+ imgUrl:
+ 'https://www.pixinvent.com/demo/vuexy-html-bootstrap-admin-template/item-page/reactstrap.jpg',
+ link: 'https://1.envato.market/vuexy_admin',
+ },
+ ],
+ },
+ {
+ creator: {
+ name: 'MDBootstrap',
+ tagLine:
+ 'Check out some examples that our partners from MDBootstrap created using the Reactstrap components library.',
+ link: 'https://mdbootstrap.com/',
+ },
+ products: [
+ {
+ title: 'Material Design for Bootstrap 5 & React 17',
+ tagLine:
+ '700+ components, stunning templates, 1-min installation, extensive tutorials & huge community.',
+ imgUrl:
+ 'https://mdbcdn.b-cdn.net/wp-content/themes/mdbootstrap4/content/en/_mdb5/react/about/assets/mdb5-react.jpg',
+ link: 'https://mdbootstrap.com/docs/b5/react/',
+ },
+ ],
+ },
+];
diff --git a/types/index.d.ts b/types/index.d.ts
new file mode 100644
index 000000000..769fc0a6a
--- /dev/null
+++ b/types/index.d.ts
@@ -0,0 +1,195 @@
+export { default as Accordion } from './lib/Accordion';
+export { AccordionProps } from './lib/Accordion';
+export { default as AccordionBody } from './lib/AccordionBody';
+export { AccordionBodyProps } from './lib/AccordionBody';
+export { default as AccordionHeader } from './lib/AccordionHeader';
+export { AccordionHeaderProps } from './lib/AccordionHeader';
+export { default as AccordionItem } from './lib/AccordionItem';
+export { AccordionItemProps } from './lib/AccordionItem';
+export { default as Alert } from './lib/Alert';
+export { AlertProps } from './lib/Alert';
+export { default as Badge } from './lib/Badge';
+export { BadgeProps } from './lib/Badge';
+export { default as Breadcrumb } from './lib/Breadcrumb';
+export { BreadcrumbProps } from './lib/Breadcrumb';
+export { default as BreadcrumbItem } from './lib/BreadcrumbItem';
+export { BreadcrumbItemProps } from './lib/BreadcrumbItem';
+export { default as Button } from './lib/Button';
+export { ButtonProps } from './lib/Button';
+export { default as ButtonDropdown } from './lib/ButtonDropdown';
+export { ButtonDropdownProps } from './lib/ButtonDropdown';
+export { default as ButtonGroup } from './lib/ButtonGroup';
+export { ButtonGroupProps } from './lib/ButtonGroup';
+export { default as ButtonToggle } from './lib/ButtonToggle';
+export { ButtonToggleProps } from './lib/ButtonToggle';
+export { default as ButtonToolbar } from './lib/ButtonToolbar';
+export { ButtonToolbarProps } from './lib/ButtonToolbar';
+export { default as Card } from './lib/Card';
+export { CardProps } from './lib/Card';
+export { default as CardBody } from './lib/CardBody';
+export { CardBodyProps } from './lib/CardBody';
+export { default as CardColumns } from './lib/CardColumns';
+export { CardColumnsProps } from './lib/CardColumns';
+export { default as CardDeck } from './lib/CardDeck';
+export { CardDeckProps } from './lib/CardDeck';
+export { default as CardFooter } from './lib/CardFooter';
+export { CardFooterProps } from './lib/CardFooter';
+export { default as CardGroup } from './lib/CardGroup';
+export { CardGroupProps } from './lib/CardGroup';
+export { default as CardHeader } from './lib/CardHeader';
+export { CardHeaderProps } from './lib/CardHeader';
+export { default as CardImg } from './lib/CardImg';
+export { CardImgProps } from './lib/CardImg';
+export { default as CardImgOverlay } from './lib/CardImgOverlay';
+export { CardImgOverlayProps } from './lib/CardImgOverlay';
+export { default as CardLink } from './lib/CardLink';
+export { CardLinkProps } from './lib/CardLink';
+export { default as CardSubtitle } from './lib/CardSubtitle';
+export { CardSubtitleProps } from './lib/CardSubtitle';
+export { default as CardText } from './lib/CardText';
+export { CardTextProps } from './lib/CardText';
+export { default as CardTitle } from './lib/CardTitle';
+export { CardTitleProps } from './lib/CardTitle';
+export { default as Carousel } from './lib/Carousel';
+export { CarouselProps } from './lib/Carousel';
+export { default as CarouselItem } from './lib/CarouselItem';
+export { CarouselItemProps } from './lib/CarouselItem';
+export { default as CarouselControl } from './lib/CarouselControl';
+export { CarouselControlProps } from './lib/CarouselControl';
+export { default as CarouselIndicators } from './lib/CarouselIndicators';
+export { CarouselIndicatorsProps } from './lib/CarouselIndicators';
+export { default as CarouselCaption } from './lib/CarouselCaption';
+export { CarouselCaptionProps } from './lib/CarouselCaption';
+export { default as CloseButton } from './lib/CloseButton'
+export { CloseButtonProps } from './lib/CloseButton'
+export { default as Col } from './lib/Col';
+export { ColProps } from './lib/Col';
+export { default as Collapse } from './lib/Collapse';
+export { CollapseProps } from './lib/Collapse';
+export { default as Container } from './lib/Container';
+export { ContainerProps } from './lib/Container';
+export { default as Dropdown } from './lib/Dropdown';
+export { DropdownProps } from './lib/Dropdown';
+export { default as DropdownItem } from './lib/DropdownItem';
+export { DropdownItemProps } from './lib/DropdownItem';
+export { default as DropdownMenu } from './lib/DropdownMenu';
+export { DropdownMenuProps } from './lib/DropdownMenu';
+export { default as DropdownToggle } from './lib/DropdownToggle';
+export { DropdownToggleProps } from './lib/DropdownToggle';
+export { default as Fade } from './lib/Fade';
+export { FadeProps } from './lib/Fade';
+export { default as Form } from './lib/Form';
+export { FormProps } from './lib/Form';
+export { default as FormFeedback } from './lib/FormFeedback';
+export { FormFeedbackProps } from './lib/FormFeedback';
+export { default as FormGroup } from './lib/FormGroup';
+export { FormGroupProps } from './lib/FormGroup';
+export { default as FormText } from './lib/FormText';
+export { FormTextProps } from './lib/FormText';
+export { default as Input } from './lib/Input';
+export { InputProps } from './lib/Input';
+export { default as InputGroup } from './lib/InputGroup';
+export { InputGroupProps } from './lib/InputGroup';
+export { default as InputGroupText } from './lib/InputGroupText';
+export { InputGroupTextProps } from './lib/InputGroupText';
+export { default as Label } from './lib/Label';
+export { LabelProps } from './lib/Label';
+export { default as ListGroup } from './lib/ListGroup';
+export { ListGroupProps } from './lib/ListGroup';
+export { default as ListGroupItem } from './lib/ListGroupItem';
+export { ListGroupItemProps } from './lib/ListGroupItem';
+export { default as ListGroupItemHeading } from './lib/ListGroupItemHeading';
+export { ListGroupItemHeadingProps } from './lib/ListGroupItemHeading';
+export { default as ListGroupItemText } from './lib/ListGroupItemText';
+export { ListGroupItemTextProps } from './lib/ListGroupItemText';
+export { default as List } from './lib/List';
+export { ListProps } from './lib/List';
+export { default as ListInlineItem } from './lib/ListInlineItem';
+export { ListInlineItemProps } from './lib/ListInlineItem';
+export { default as Media } from './lib/Media';
+export { MediaProps } from './lib/Media';
+export { default as Modal } from './lib/Modal';
+export { ModalProps } from './lib/Modal';
+export { default as ModalBody } from './lib/ModalBody';
+export { ModalBodyProps } from './lib/ModalBody';
+export { default as ModalFooter } from './lib/ModalFooter';
+export { ModalFooterProps } from './lib/ModalFooter';
+export { default as ModalHeader } from './lib/ModalHeader';
+export { ModalHeaderProps } from './lib/ModalHeader';
+export { default as Nav } from './lib/Nav';
+export { NavProps } from './lib/Nav';
+export { default as Navbar } from './lib/Navbar';
+export { NavbarProps } from './lib/Navbar';
+export { default as NavbarBrand } from './lib/NavbarBrand';
+export { NavbarBrandProps } from './lib/NavbarBrand';
+export { default as NavbarText } from './lib/NavbarText';
+export { NavbarTextProps } from './lib/NavbarText';
+export { default as NavbarToggler } from './lib/NavbarToggler';
+export { NavbarTogglerProps } from './lib/NavbarToggler';
+export { default as NavItem } from './lib/NavItem';
+export { NavItemProps } from './lib/NavItem';
+export { default as NavLink } from './lib/NavLink';
+export { NavLinkProps } from './lib/NavLink';
+export { default as Offcanvas } from './lib/Offcanvas';
+export { OffcanvasProps } from './lib/Offcanvas';
+export { default as OffcanvasBody } from './lib/OffcanvasBody';
+export { OffcanvasBodyProps } from './lib/OffcanvasBody';
+export { default as OffcanvasHeader } from './lib/OffcanvasHeader';
+export { OffcanvasHeaderProps } from './lib/OffcanvasHeader';
+export { default as Pagination } from './lib/Pagination';
+export { PaginationProps } from './lib/Pagination';
+export { default as PaginationItem } from './lib/PaginationItem';
+export { PaginationItemProps } from './lib/PaginationItem';
+export { default as PaginationLink } from './lib/PaginationLink';
+export { PaginationLinkProps } from './lib/PaginationLink';
+export { default as Placeholder } from './lib/Placeholder';
+export { PlaceholderProps } from './lib/Placeholder';
+export { default as PlaceholderButton } from './lib/PlaceholderButton';
+export { PlaceholderButtonProps } from './lib/PlaceholderButton';
+export { default as Popover } from './lib/Popover';
+export { PopoverProps } from './lib/Popover';
+export { default as PopoverBody } from './lib/PopoverBody';
+export { PopoverBodyProps } from './lib/PopoverBody';
+export { default as PopoverHeader } from './lib/PopoverHeader';
+export { PopoverHeaderProps } from './lib/PopoverHeader';
+export { default as Progress } from './lib/Progress';
+export { ProgressProps } from './lib/Progress';
+export { default as Row } from './lib/Row';
+export { RowProps } from './lib/Row';
+export { default as Spinner } from './lib/Spinner';
+export { SpinnerProps } from './lib/Spinner';
+export { default as TabContent } from './lib/TabContent';
+export { TabContentProps } from './lib/TabContent';
+export { default as Table } from './lib/Table';
+export { TableProps } from './lib/Table';
+export { default as TabPane } from './lib/TabPane';
+export { TabPaneProps } from './lib/TabPane';
+export { default as Tag } from './lib/Tag';
+export { TagProps } from './lib/Tag';
+export { default as Toast } from './lib/Toast';
+export { ToastProps } from './lib/Toast';
+export { default as ToastBody } from './lib/ToastBody';
+export { ToastBodyProps } from './lib/ToastBody';
+export { default as ToastHeader } from './lib/ToastHeader';
+export { ToastHeaderProps } from './lib/ToastHeader';
+export { default as Tooltip } from './lib/Tooltip';
+export { TooltipProps } from './lib/Tooltip';
+export {
+ UncontrolledAccordion,
+ UncontrolledAlert,
+ UncontrolledButtonDropdown,
+ UncontrolledDropdown,
+ UncontrolledTooltip,
+ UncontrolledCollapse,
+ UncontrolledCarousel,
+ UncontrolledPopover,
+ UncontrolledButtonDropdownProps,
+ UncontrolledAlertProps,
+ UncontrolledDropdownProps,
+ UncontrolledTooltipProps,
+ UncontrolledCollapseProps,
+ UncontrolledCarouselProps,
+ UncontrolledPopoverProps
+} from './lib/Uncontrolled';
+import * as Util from './lib/utils';
+export { Util };
diff --git a/types/lib/Accordion.d.ts b/types/lib/Accordion.d.ts
new file mode 100644
index 000000000..f343b185d
--- /dev/null
+++ b/types/lib/Accordion.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface AccordionProps extends React.HTMLAttributes {
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ flush?: boolean;
+ innerRef?: React.Ref;
+ open: string | string[];
+ toggle: (targetId: string) => void;
+}
+
+export interface UncontrolledAccordionProps extends Omit {
+ defaultOpen?: string | string[];
+ stayOpen?: boolean;
+}
+
+declare class Accordion extends React.Component {}
+export default Accordion;
diff --git a/types/lib/AccordionBody.d.ts b/types/lib/AccordionBody.d.ts
new file mode 100644
index 000000000..bad2b326d
--- /dev/null
+++ b/types/lib/AccordionBody.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface AccordionBodyProps extends React.HTMLAttributes {
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+ accordionId: string;
+}
+
+declare class AccordionBody extends React.Component {}
+export default AccordionBody;
diff --git a/types/lib/AccordionHeader.d.ts b/types/lib/AccordionHeader.d.ts
new file mode 100644
index 000000000..d390a5fd4
--- /dev/null
+++ b/types/lib/AccordionHeader.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface AccordionHeaderProps extends React.HTMLAttributes {
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+ targetId: string;
+}
+
+declare class AccordionHeader extends React.Component {}
+export default AccordionHeader;
diff --git a/types/lib/AccordionItem.d.ts b/types/lib/AccordionItem.d.ts
new file mode 100644
index 000000000..874970943
--- /dev/null
+++ b/types/lib/AccordionItem.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface AccordionItemProps extends React.HTMLAttributes {
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+}
+
+declare class AccordionItem extends React.Component {}
+export default AccordionItem;
diff --git a/types/lib/Alert.d.ts b/types/lib/Alert.d.ts
new file mode 100644
index 000000000..6840dcd18
--- /dev/null
+++ b/types/lib/Alert.d.ts
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+import { FadeProps } from './Fade';
+
+export interface UncontrolledAlertProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ closeClassName?: string;
+ closeAriaLabel?: string;
+ cssModule?: CSSModule;
+ color?: string;
+ fade?: boolean;
+ tag?: React.ElementType;
+ transition?: FadeProps;
+ innerRef?: React.Ref;
+}
+export interface AlertProps extends UncontrolledAlertProps {
+ isOpen?: boolean;
+ toggle?: React.MouseEventHandler;
+}
+
+declare class Alert extends React.Component {}
+export default Alert;
diff --git a/types/lib/Badge.d.ts b/types/lib/Badge.d.ts
new file mode 100644
index 000000000..f74ea4399
--- /dev/null
+++ b/types/lib/Badge.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface BadgeProps extends React.HTMLAttributes {
+ [key: string]: any;
+ color?: string;
+ pill?: boolean;
+ tag?: React.ElementType;
+ innerRef?: React.Ref;
+ cssModule?: CSSModule;
+}
+
+declare class Badge extends React.Component {}
+export default Badge;
diff --git a/types/lib/Breadcrumb.d.ts b/types/lib/Breadcrumb.d.ts
new file mode 100644
index 000000000..70f13ffcf
--- /dev/null
+++ b/types/lib/Breadcrumb.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface BreadcrumbProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ listTag?: React.ElementType;
+ listClassName?: string;
+ cssModule?: CSSModule;
+}
+
+declare class Breadcrumb extends React.Component {}
+export default Breadcrumb;
diff --git a/types/lib/BreadcrumbItem.d.ts b/types/lib/BreadcrumbItem.d.ts
new file mode 100644
index 000000000..92076c8fc
--- /dev/null
+++ b/types/lib/BreadcrumbItem.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface BreadcrumbItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ active?: boolean;
+ cssModule?: CSSModule;
+}
+
+declare class BreadcrumbItem extends React.Component {}
+export default BreadcrumbItem;
diff --git a/types/lib/Button.d.ts b/types/lib/Button.d.ts
new file mode 100644
index 000000000..0bdfd594e
--- /dev/null
+++ b/types/lib/Button.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes {
+ [key: string]: any;
+ outline?: boolean;
+ active?: boolean;
+ block?: boolean;
+ color?: string;
+ tag?: React.ElementType;
+ innerRef?: React.Ref;
+ size?: string;
+ cssModule?: CSSModule;
+ close?: boolean;
+}
+
+declare class Button extends React.Component {}
+export default Button;
diff --git a/types/lib/ButtonDropdown.d.ts b/types/lib/ButtonDropdown.d.ts
new file mode 100644
index 000000000..bcc16d862
--- /dev/null
+++ b/types/lib/ButtonDropdown.d.ts
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { UncontrolledDropdownProps, DropdownProps } from './Dropdown';
+export {
+ UncontrolledDropdownProps as UncontrolledButtonDropdownProps,
+ DropdownProps as ButtonDropdownProps,
+};
+
+declare class ButtonDropdown extends React.Component {}
+export default ButtonDropdown;
diff --git a/types/lib/ButtonGroup.d.ts b/types/lib/ButtonGroup.d.ts
new file mode 100644
index 000000000..e33a890a0
--- /dev/null
+++ b/types/lib/ButtonGroup.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ButtonGroupProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ size?: string;
+ vertical?: boolean;
+}
+
+declare class ButtonGroup extends React.Component {}
+export default ButtonGroup;
diff --git a/types/lib/ButtonToggle.d.ts b/types/lib/ButtonToggle.d.ts
new file mode 100644
index 000000000..f9b631432
--- /dev/null
+++ b/types/lib/ButtonToggle.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+
+type Omit = Pick>;
+
+export interface ButtonToggleProps
+ extends Omit, 'defaultValue'> {
+ [key: string]: any;
+ defaultValue?: boolean;
+}
+
+declare class ButtonToggle extends React.Component {}
+export default ButtonToggle;
diff --git a/types/lib/ButtonToolbar.d.ts b/types/lib/ButtonToolbar.d.ts
new file mode 100644
index 000000000..42c9caec0
--- /dev/null
+++ b/types/lib/ButtonToolbar.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ButtonToolbarProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class ButtonToolbar extends React.Component {}
+export default ButtonToolbar;
diff --git a/types/lib/Card.d.ts b/types/lib/Card.d.ts
new file mode 100644
index 000000000..76587356d
--- /dev/null
+++ b/types/lib/Card.d.ts
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ inverse?: boolean;
+ color?: string;
+ body?: boolean;
+ outline?: boolean;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+}
+
+declare class Card extends React.Component {}
+export default Card;
diff --git a/types/lib/CardBody.d.ts b/types/lib/CardBody.d.ts
new file mode 100644
index 000000000..cbd026c1a
--- /dev/null
+++ b/types/lib/CardBody.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardBodyProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+}
+
+declare class CardBody extends React.Component {}
+export default CardBody;
diff --git a/types/lib/CardColumns.d.ts b/types/lib/CardColumns.d.ts
new file mode 100644
index 000000000..4eac907e4
--- /dev/null
+++ b/types/lib/CardColumns.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardColumnsProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardColumns extends React.Component {}
+export default CardColumns;
diff --git a/types/lib/CardDeck.d.ts b/types/lib/CardDeck.d.ts
new file mode 100644
index 000000000..d670345b1
--- /dev/null
+++ b/types/lib/CardDeck.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardDeckProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardDeck extends React.Component {}
+export default CardDeck;
diff --git a/types/lib/CardFooter.d.ts b/types/lib/CardFooter.d.ts
new file mode 100644
index 000000000..22d9f5950
--- /dev/null
+++ b/types/lib/CardFooter.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardFooterProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardFooter extends React.Component {}
+export default CardFooter;
diff --git a/types/lib/CardGroup.d.ts b/types/lib/CardGroup.d.ts
new file mode 100644
index 000000000..a0ca7a295
--- /dev/null
+++ b/types/lib/CardGroup.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardGroupProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardGroup extends React.Component {}
+export default CardGroup;
diff --git a/types/lib/CardHeader.d.ts b/types/lib/CardHeader.d.ts
new file mode 100644
index 000000000..5f5cae4ea
--- /dev/null
+++ b/types/lib/CardHeader.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardHeaderProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardHeader extends React.Component {}
+export default CardHeader;
diff --git a/types/lib/CardImg.d.ts b/types/lib/CardImg.d.ts
new file mode 100644
index 000000000..c6cc47cde
--- /dev/null
+++ b/types/lib/CardImg.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardImgProps
+ extends React.ImgHTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ top?: boolean;
+ bottom?: boolean;
+ cssModule?: CSSModule;
+}
+
+declare class CardImg extends React.Component {}
+export default CardImg;
diff --git a/types/lib/CardImgOverlay.d.ts b/types/lib/CardImgOverlay.d.ts
new file mode 100644
index 000000000..c5baddf65
--- /dev/null
+++ b/types/lib/CardImgOverlay.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardImgOverlayProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardImgOverlay extends React.Component {}
+export default CardImgOverlay;
diff --git a/types/lib/CardLink.d.ts b/types/lib/CardLink.d.ts
new file mode 100644
index 000000000..b36805143
--- /dev/null
+++ b/types/lib/CardLink.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardLinkProps
+ extends React.AnchorHTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ innerRef?: React.Ref;
+ cssModule?: CSSModule;
+}
+
+declare class CardLink extends React.Component {}
+export default CardLink;
diff --git a/types/lib/CardSubtitle.d.ts b/types/lib/CardSubtitle.d.ts
new file mode 100644
index 000000000..72200dbe7
--- /dev/null
+++ b/types/lib/CardSubtitle.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardSubtitleProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardSubtitle extends React.Component {}
+export default CardSubtitle;
diff --git a/types/lib/CardText.d.ts b/types/lib/CardText.d.ts
new file mode 100644
index 000000000..7670d3348
--- /dev/null
+++ b/types/lib/CardText.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardTextProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardText extends React.Component {}
+export default CardText;
diff --git a/types/lib/CardTitle.d.ts b/types/lib/CardTitle.d.ts
new file mode 100644
index 000000000..6e32bc0fc
--- /dev/null
+++ b/types/lib/CardTitle.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CardTitleProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class CardTitle extends React.Component {}
+export default CardTitle;
diff --git a/types/lib/Carousel.d.ts b/types/lib/Carousel.d.ts
new file mode 100644
index 000000000..b8ef1dbfb
--- /dev/null
+++ b/types/lib/Carousel.d.ts
@@ -0,0 +1,35 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+interface CommonCarouselProps extends React.HTMLAttributes {
+ [key: string]: any;
+ activeIndex?: number;
+ keyboard?: boolean;
+ pause?: 'hover' | false;
+ ride?: 'carousel';
+ interval?: number | string | boolean;
+ mouseEnter?: () => void;
+ mouseExit?: () => void;
+ slide?: boolean;
+ dark?: boolean;
+ fade?: boolean;
+ cssModule?: CSSModule;
+ enableTouch?: boolean;
+}
+
+export interface CarouselProps extends CommonCarouselProps {
+ next: () => void;
+ previous: () => void;
+}
+
+export interface UncontrolledCarouselProps extends CommonCarouselProps {
+ items: any[];
+ next?: () => void;
+ previous?: () => void;
+ controls?: boolean;
+ indicators?: boolean;
+ autoPlay?: boolean;
+}
+
+declare class Carousel extends React.Component {}
+export default Carousel;
diff --git a/types/lib/CarouselCaption.d.ts b/types/lib/CarouselCaption.d.ts
new file mode 100644
index 000000000..5bddd0217
--- /dev/null
+++ b/types/lib/CarouselCaption.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CarouselCaptionProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ captionHeader?: React.ReactNode;
+ captionText: React.ReactNode;
+ cssModule?: CSSModule;
+}
+
+declare class CarouselCaption extends React.Component {}
+export default CarouselCaption;
diff --git a/types/lib/CarouselControl.d.ts b/types/lib/CarouselControl.d.ts
new file mode 100644
index 000000000..e57a5ce8a
--- /dev/null
+++ b/types/lib/CarouselControl.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CarouselControlProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ direction: 'prev' | 'next';
+ onClickHandler: () => void;
+ cssModule?: CSSModule;
+ directionText?: string;
+}
+
+export default class CarouselControl extends React.Component<
+ CarouselControlProps
+> {}
diff --git a/types/lib/CarouselIndicators.d.ts b/types/lib/CarouselIndicators.d.ts
new file mode 100644
index 000000000..c2265cdb8
--- /dev/null
+++ b/types/lib/CarouselIndicators.d.ts
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CarouselIndicatorsProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ items: object[];
+ activeIndex: number;
+ cssModule?: CSSModule;
+ onClickHandler: (idx: number) => void;
+}
+
+declare class CarouselIndicators extends React.Component<
+ CarouselIndicatorsProps
+> {}
+export default CarouselIndicators;
diff --git a/types/lib/CarouselItem.d.ts b/types/lib/CarouselItem.d.ts
new file mode 100644
index 000000000..221869315
--- /dev/null
+++ b/types/lib/CarouselItem.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CarouselItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ in?: boolean;
+ cssModule?: CSSModule;
+ slide?: boolean;
+ onEnter?: () => void;
+ onEntering?: () => void;
+ onEntered?: () => void;
+ onExit?: () => void;
+ onExiting?: () => void;
+ onExited?: () => void;
+}
+
+declare class CarouselItem extends React.Component {}
+export default CarouselItem;
diff --git a/types/lib/CloseButton.d.ts b/types/lib/CloseButton.d.ts
new file mode 100644
index 000000000..298f3da6f
--- /dev/null
+++ b/types/lib/CloseButton.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CloseButtonProps
+ extends React.ButtonHTMLAttributes {
+ active?: boolean;
+ variant?: 'white' | 'black';
+ cssModule?: CSSModule;
+}
+
+declare class CloseButton extends React.Component {}
+export default CloseButton;
\ No newline at end of file
diff --git a/types/lib/Col.d.ts b/types/lib/Col.d.ts
new file mode 100644
index 000000000..6ae009796
--- /dev/null
+++ b/types/lib/Col.d.ts
@@ -0,0 +1,30 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export type ColumnProps =
+ | string
+ | boolean
+ | number
+ | {
+ size?: boolean | number | string;
+ offset?: string | number;
+ order?: string | number;
+ };
+
+export interface ColProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ xs?: ColumnProps;
+ sm?: ColumnProps;
+ md?: ColumnProps;
+ lg?: ColumnProps;
+ xl?: ColumnProps;
+ xxl?: ColumnProps;
+
+ // custom widths
+ widths?: string[];
+}
+
+declare class Col extends React.Component {}
+export default Col;
diff --git a/types/lib/Collapse.d.ts b/types/lib/Collapse.d.ts
new file mode 100644
index 000000000..ca5f73eb8
--- /dev/null
+++ b/types/lib/Collapse.d.ts
@@ -0,0 +1,32 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface CollapseProps extends React.HTMLAttributes {
+ [key: string]: any;
+ isOpen?: boolean;
+ cssModule?: CSSModule;
+ tag?: React.ElementType;
+ horizontal?: boolean;
+ navbar?: boolean;
+ delay?: {
+ show: number;
+ hide: number;
+ };
+ onOpened?: () => void;
+ onClosed?: () => void;
+ onEntering?: () => void;
+ onEntered?: () => void;
+ onExit?: () => void;
+ onExiting?: () => void;
+ onExited?: () => void;
+ innerRef?: React.Ref;
+}
+
+export interface UncontrolledCollapseProps extends CollapseProps {
+ defaultOpen?: boolean;
+ toggler: string;
+ toggleEvents?: string[];
+}
+
+declare class Collapse extends React.Component {}
+export default Collapse;
diff --git a/types/lib/Container.d.ts b/types/lib/Container.d.ts
new file mode 100644
index 000000000..469df2385
--- /dev/null
+++ b/types/lib/Container.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ContainerProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ fluid?: boolean | string;
+ cssModule?: CSSModule;
+}
+
+declare class Container extends React.Component {}
+export default Container;
diff --git a/types/lib/Dropdown.d.ts b/types/lib/Dropdown.d.ts
new file mode 100644
index 000000000..56b0274d9
--- /dev/null
+++ b/types/lib/Dropdown.d.ts
@@ -0,0 +1,35 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export type Direction = 'up' | 'down' | 'start' | 'end';
+
+export interface DropdownProps extends React.HTMLAttributes {
+ [key: string]: any;
+ a11y?: boolean;
+ disabled?: boolean;
+ direction?: Direction;
+ group?: boolean;
+ isOpen?: boolean;
+ nav?: boolean;
+ active?: boolean;
+ addonType?: boolean | 'prepend' | 'append';
+ size?: string;
+ tag?: React.ElementType;
+ toggle?: React.KeyboardEventHandler | React.MouseEventHandler;
+ cssModule?: CSSModule;
+ inNavbar?: boolean;
+ setActiveFromChild?: boolean;
+ menuRole?: boolean | string;
+}
+
+export interface UncontrolledDropdownProps extends DropdownProps {
+ defaultOpen?: boolean;
+ onToggle?: (
+ event: React.KeyboardEvent | React.MouseEvent,
+ isOpen: boolean
+ ) => void;
+}
+
+declare class Dropdown extends React.Component {}
+
+export default Dropdown;
diff --git a/types/lib/DropdownItem.d.ts b/types/lib/DropdownItem.d.ts
new file mode 100644
index 000000000..b6ce28060
--- /dev/null
+++ b/types/lib/DropdownItem.d.ts
@@ -0,0 +1,18 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface DropdownItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ active?: boolean;
+ disabled?: boolean;
+ divider?: boolean;
+ tag?: React.ElementType;
+ header?: boolean;
+ cssModule?: CSSModule;
+ href?: string;
+ toggle?: boolean;
+ text?: boolean;
+}
+
+declare class DropdownItem extends React.Component {}
+export default DropdownItem;
diff --git a/types/lib/DropdownMenu.d.ts b/types/lib/DropdownMenu.d.ts
new file mode 100644
index 000000000..c1a20da69
--- /dev/null
+++ b/types/lib/DropdownMenu.d.ts
@@ -0,0 +1,20 @@
+import * as React from 'react';
+import type { Modifier } from '@popperjs/core';
+import { CSSModule } from './utils';
+
+export interface DropdownMenuProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ dark?: boolean;
+ right?: boolean;
+ flip?: boolean;
+ modifiers?: Modifier[];
+ cssModule?: CSSModule;
+ persist?: boolean;
+ strategy?: string;
+ container?: string | HTMLElement | React.RefObject;
+ updateOnSelect?: boolean;
+}
+
+declare class DropdownMenu extends React.Component {}
+export default DropdownMenu;
diff --git a/types/lib/DropdownToggle.d.ts b/types/lib/DropdownToggle.d.ts
new file mode 100644
index 000000000..d6a0876e1
--- /dev/null
+++ b/types/lib/DropdownToggle.d.ts
@@ -0,0 +1,20 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface DropdownToggleProps extends React.HTMLAttributes {
+ [key: string]: any;
+ caret?: boolean;
+ color?: string;
+ cssModule?: CSSModule;
+ disabled?: boolean;
+ outline?: boolean;
+ 'data-toggle'?: string;
+ 'aria-haspopup'?: boolean;
+ split?: boolean;
+ tag?: React.ElementType;
+ nav?: boolean;
+ size?: string;
+}
+
+declare class DropdownToggle extends React.Component {}
+export default DropdownToggle;
diff --git a/types/lib/Fade.d.ts b/types/lib/Fade.d.ts
new file mode 100644
index 000000000..39a12ee91
--- /dev/null
+++ b/types/lib/Fade.d.ts
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface FadeProps extends React.HTMLAttributes {
+ [key: string]: any;
+ in?: boolean;
+ baseClass?: string;
+ baseClassIn?: string;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ transitionAppearTimeout?: number;
+ transitionEnterTimeout?: number;
+ transitionLeaveTimeout?: number;
+ transitionAppear?: boolean;
+ transitionEnter?: boolean;
+ transitionLeave?: boolean;
+ onLeave?: () => void;
+ onEnter?: () => void;
+ innerRef?: React.Ref;
+}
+
+declare class Fade extends React.Component {}
+export default Fade;
diff --git a/types/lib/Form.d.ts b/types/lib/Form.d.ts
new file mode 100644
index 000000000..78b2e15cd
--- /dev/null
+++ b/types/lib/Form.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface FormProps extends React.FormHTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ innerRef?: React.Ref;
+ cssModule?: CSSModule;
+}
+
+declare class Form extends React.Component {}
+export default Form;
diff --git a/types/lib/FormFeedback.d.ts b/types/lib/FormFeedback.d.ts
new file mode 100644
index 000000000..6d18441e0
--- /dev/null
+++ b/types/lib/FormFeedback.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface FormFeedbackProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: string;
+ cssModule?: CSSModule;
+ valid?: boolean;
+ tooltip?: boolean;
+}
+
+declare class FormFeedback extends React.Component {}
+export default FormFeedback;
diff --git a/types/lib/FormGroup.d.ts b/types/lib/FormGroup.d.ts
new file mode 100644
index 000000000..0b7feeb15
--- /dev/null
+++ b/types/lib/FormGroup.d.ts
@@ -0,0 +1,19 @@
+import * as React from "react";
+
+import { CSSModule } from "./utils";
+
+export interface FormGroupProps extends React.HTMLAttributes {
+ [key: string]: any;
+ row?: boolean;
+ check?: boolean;
+ switch?: boolean;
+ inline?: boolean;
+ noMargin?: boolean;
+ floating?: boolean;
+ disabled?: boolean;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class FormGroup extends React.Component {}
+export default FormGroup;
diff --git a/types/lib/FormText.d.ts b/types/lib/FormText.d.ts
new file mode 100644
index 000000000..e94411bf2
--- /dev/null
+++ b/types/lib/FormText.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface FormTextProps extends React.HTMLAttributes {
+ [key: string]: any;
+ inline?: boolean;
+ tag?: React.ElementType;
+ color?: string;
+ cssModule?: CSSModule;
+}
+
+declare class FormText extends React.Component {}
+export default FormText;
diff --git a/types/lib/Input.d.ts b/types/lib/Input.d.ts
new file mode 100644
index 000000000..3538acc81
--- /dev/null
+++ b/types/lib/Input.d.ts
@@ -0,0 +1,47 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export type InputType =
+ | 'text'
+ | 'email'
+ | 'select'
+ | 'file'
+ | 'radio'
+ | 'checkbox'
+ | 'switch'
+ | 'textarea'
+ | 'button'
+ | 'reset'
+ | 'submit'
+ | 'date'
+ | 'datetime-local'
+ | 'hidden'
+ | 'image'
+ | 'month'
+ | 'number'
+ | 'range'
+ | 'search'
+ | 'tel'
+ | 'url'
+ | 'week'
+ | 'password'
+ | 'datetime'
+ | 'time'
+ | 'color';
+
+export interface InputProps
+ extends React.InputHTMLAttributes {
+ [key: string]: any;
+ type?: InputType;
+ bsSize?: 'lg' | 'sm';
+ valid?: boolean;
+ invalid?: boolean;
+ tag?: React.ElementType;
+ innerRef?: React.Ref;
+ plaintext?: boolean;
+ addon?: boolean;
+ cssModule?: CSSModule;
+}
+
+declare class Input extends React.Component {}
+export default Input;
diff --git a/types/lib/InputGroup.d.ts b/types/lib/InputGroup.d.ts
new file mode 100644
index 000000000..30776dffd
--- /dev/null
+++ b/types/lib/InputGroup.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface InputGroupProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ size?: string;
+ cssModule?: CSSModule;
+}
+
+declare class InputGroup extends React.Component {}
+export default InputGroup;
diff --git a/types/lib/InputGroupText.d.ts b/types/lib/InputGroupText.d.ts
new file mode 100644
index 000000000..3184ea386
--- /dev/null
+++ b/types/lib/InputGroupText.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface InputGroupTextProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class InputGroupText extends React.Component {}
+export default InputGroupText;
diff --git a/types/lib/Label.d.ts b/types/lib/Label.d.ts
new file mode 100644
index 000000000..61aa02996
--- /dev/null
+++ b/types/lib/Label.d.ts
@@ -0,0 +1,27 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+import { ColumnProps } from './Col';
+
+export interface LabelProps
+ extends React.LabelHTMLAttributes {
+ [key: string]: any;
+ hidden?: boolean;
+ check?: boolean;
+ size?: string;
+ disabled?: boolean;
+ for?: string;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ xs?: ColumnProps;
+ sm?: ColumnProps;
+ md?: ColumnProps;
+ lg?: ColumnProps;
+ xl?: ColumnProps;
+ xxl?: ColumnProps;
+
+ // custom widths
+ widths?: string[];
+}
+
+declare class Label extends React.Component {}
+export default Label;
diff --git a/types/lib/List.d.ts b/types/lib/List.d.ts
new file mode 100644
index 000000000..6a6e21e34
--- /dev/null
+++ b/types/lib/List.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ListProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ type?: string;
+}
+
+declare class List extends React.Component {}
+export default List;
diff --git a/types/lib/ListGroup.d.ts b/types/lib/ListGroup.d.ts
new file mode 100644
index 000000000..06b461fdf
--- /dev/null
+++ b/types/lib/ListGroup.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ListGroupProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ flush?: boolean;
+ horizontal?: boolean | string;
+ numbered?: boolean;
+ cssModule?: CSSModule;
+}
+
+declare class ListGroup extends React.Component {}
+export default ListGroup;
diff --git a/types/lib/ListGroupItem.d.ts b/types/lib/ListGroupItem.d.ts
new file mode 100644
index 000000000..a6097c658
--- /dev/null
+++ b/types/lib/ListGroupItem.d.ts
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ListGroupItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ active?: boolean;
+ disabled?: boolean;
+ color?: string;
+ action?: boolean;
+ cssModule?: CSSModule;
+ href?: string;
+}
+
+declare class ListGroupItem extends React.Component {}
+export default ListGroupItem;
diff --git a/types/lib/ListGroupItemHeading.d.ts b/types/lib/ListGroupItemHeading.d.ts
new file mode 100644
index 000000000..41f68420c
--- /dev/null
+++ b/types/lib/ListGroupItemHeading.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ListGroupItemHeadingProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class ListGroupItemHeading extends React.Component<
+ ListGroupItemHeadingProps
+> {}
+export default ListGroupItemHeading;
diff --git a/types/lib/ListGroupItemText.d.ts b/types/lib/ListGroupItemText.d.ts
new file mode 100644
index 000000000..546b68304
--- /dev/null
+++ b/types/lib/ListGroupItemText.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ListGroupItemTextProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class ListGroupItemText extends React.Component<
+ ListGroupItemTextProps
+> {}
+export default ListGroupItemText;
diff --git a/types/lib/ListInlineItem.d.ts b/types/lib/ListInlineItem.d.ts
new file mode 100644
index 000000000..e1d3804c8
--- /dev/null
+++ b/types/lib/ListInlineItem.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ListInlineItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class ListInlineItem extends React.Component {}
+export default ListInlineItem;
diff --git a/types/lib/Media.d.ts b/types/lib/Media.d.ts
new file mode 100644
index 000000000..410fc844c
--- /dev/null
+++ b/types/lib/Media.d.ts
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface MediaProps extends React.HTMLAttributes {
+ [key: string]: any;
+ body?: boolean;
+ bottom?: boolean;
+ cssModule?: CSSModule;
+ heading?: boolean;
+ left?: boolean;
+ list?: boolean;
+ middle?: boolean;
+ object?: boolean;
+ right?: boolean;
+ tag?: React.ElementType;
+ top?: boolean;
+ src?: string;
+ href?: string;
+ alt?: string;
+}
+
+declare class Media extends React.Component {}
+export default Media;
diff --git a/types/lib/Modal.d.ts b/types/lib/Modal.d.ts
new file mode 100644
index 000000000..6b785f917
--- /dev/null
+++ b/types/lib/Modal.d.ts
@@ -0,0 +1,39 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+import { FadeProps } from './Fade';
+
+export interface ModalProps extends React.HTMLAttributes {
+ [key: string]: any;
+ isOpen?: boolean;
+ autoFocus?: boolean;
+ size?: string;
+ toggle?: React.KeyboardEventHandler | React.MouseEventHandler;
+ keyboard?: boolean;
+ backdrop?: boolean | 'static';
+ scrollable?: boolean;
+ onEnter?: () => void;
+ onExit?: () => void;
+ onOpened?: () => void;
+ onClosed?: () => void;
+ cssModule?: CSSModule;
+ wrapClassName?: string;
+ modalClassName?: string;
+ backdropClassName?: string;
+ contentClassName?: string;
+ zIndex?: number | string;
+ fade?: boolean;
+ backdropTransition?: FadeProps;
+ modalTransition?: FadeProps;
+ centered?: boolean;
+ fullscreen?: boolean | 'sm' | 'md' | 'lg' | 'xl';
+ external?: React.ReactNode;
+ labelledBy?: string;
+ unmountOnClose?: boolean;
+ returnFocusAfterClose?: boolean;
+ container?: string | HTMLElement | React.RefObject;
+ innerRef?: React.Ref;
+ trapFocus?: boolean;
+}
+
+declare class Modal extends React.Component {}
+export default Modal;
diff --git a/types/lib/ModalBody.d.ts b/types/lib/ModalBody.d.ts
new file mode 100644
index 000000000..002b3437d
--- /dev/null
+++ b/types/lib/ModalBody.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ModalBodyProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class ModalBody extends React.Component {}
+export default ModalBody;
diff --git a/types/lib/ModalFooter.d.ts b/types/lib/ModalFooter.d.ts
new file mode 100644
index 000000000..433bc6f8e
--- /dev/null
+++ b/types/lib/ModalFooter.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ModalFooterProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class ModalFooter extends React.Component {}
+export default ModalFooter;
diff --git a/types/lib/ModalHeader.d.ts b/types/lib/ModalHeader.d.ts
new file mode 100644
index 000000000..dfc074b18
--- /dev/null
+++ b/types/lib/ModalHeader.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ModalHeaderProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ wrapTag?: React.ElementType;
+ toggle?: React.MouseEventHandler;
+}
+
+declare class ModalHeader extends React.Component {}
+export default ModalHeader;
diff --git a/types/lib/Nav.d.ts b/types/lib/Nav.d.ts
new file mode 100644
index 000000000..da81be59d
--- /dev/null
+++ b/types/lib/Nav.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tabs?: boolean;
+ pills?: boolean;
+ vertical?: boolean | string;
+ horizontal?: string;
+ justified?: boolean;
+ fill?: boolean;
+ navbar?: boolean;
+ card?: boolean;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class Nav extends React.Component {}
+export default Nav;
diff --git a/types/lib/NavItem.d.ts b/types/lib/NavItem.d.ts
new file mode 100644
index 000000000..facad430d
--- /dev/null
+++ b/types/lib/NavItem.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ active?: boolean;
+ cssModule?: CSSModule;
+}
+
+declare class NavItem extends React.Component {}
+export default NavItem;
diff --git a/types/lib/NavLink.d.ts b/types/lib/NavLink.d.ts
new file mode 100644
index 000000000..0c6cc6e82
--- /dev/null
+++ b/types/lib/NavLink.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavLinkProps
+ extends React.AnchorHTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ innerRef?: React.Ref;
+ disabled?: boolean;
+ active?: boolean;
+ cssModule?: CSSModule;
+}
+
+declare class NavLink extends React.Component {}
+export default NavLink;
diff --git a/types/lib/Navbar.d.ts b/types/lib/Navbar.d.ts
new file mode 100644
index 000000000..b92e2f613
--- /dev/null
+++ b/types/lib/Navbar.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavbarProps extends React.HTMLAttributes {
+ [key: string]: any;
+ light?: boolean;
+ dark?: boolean;
+ full?: boolean;
+ fixed?: string;
+ sticky?: string;
+ color?: string;
+ container?: boolean | 'fluid' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ expand?: boolean | string;
+}
+
+declare class Navbar extends React.Component {}
+export default Navbar;
diff --git a/types/lib/NavbarBrand.d.ts b/types/lib/NavbarBrand.d.ts
new file mode 100644
index 000000000..7dfae9a8f
--- /dev/null
+++ b/types/lib/NavbarBrand.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavbarBrandProps
+ extends React.AnchorHTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class NavbarBrand extends React.Component {}
+export default NavbarBrand;
diff --git a/types/lib/NavbarText.d.ts b/types/lib/NavbarText.d.ts
new file mode 100644
index 000000000..b0e2e0c60
--- /dev/null
+++ b/types/lib/NavbarText.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavbarTextProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class NavbarText extends React.Component {}
+export default NavbarText;
diff --git a/types/lib/NavbarToggler.d.ts b/types/lib/NavbarToggler.d.ts
new file mode 100644
index 000000000..9cabef1a5
--- /dev/null
+++ b/types/lib/NavbarToggler.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface NavbarTogglerProps
+ extends React.ButtonHTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class NavbarToggler extends React.Component {}
+export default NavbarToggler;
diff --git a/types/lib/Offcanvas.d.ts b/types/lib/Offcanvas.d.ts
new file mode 100644
index 000000000..6f5fb098b
--- /dev/null
+++ b/types/lib/Offcanvas.d.ts
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+import { FadeProps } from './Fade';
+
+export type Direction = 'start' | 'end' | 'bottom' | 'top';
+
+export interface OffcanvasProps extends React.HTMLAttributes {
+ [key: string]: any;
+ autoFocus?: boolean;
+ backdrop?: boolean | 'static';
+ backdropClassName?: string;
+ backdropTransition?: FadeProps;
+ container?: string | HTMLElement | React.RefObject;
+ contentClassName?: string;
+ cssModule?: CSSModule;
+ fade?: boolean;
+ innerRef?: React.Ref;
+ isOpen?: boolean;
+ keyboard?: boolean;
+ labelledBy?: string;
+ offcanvasClassName?: string;
+ offcanvasTransition?: FadeProps;
+ onClosed?: () => void;
+ onEnter?: () => void;
+ onExit?: () => void;
+ onOpened?: () => void;
+ direction?: Direction;
+ returnFocusAfterClose?: boolean;
+ scrollable?: boolean;
+ toggle?: React.KeyboardEventHandler | React.MouseEventHandler;
+ trapFocus?: boolean;
+ unmountOnClose?: boolean;
+ wrapClassName?: string;
+ zIndex?: number | string;
+}
+
+declare class Offcanvas extends React.Component {}
+export default Offcanvas;
diff --git a/types/lib/OffcanvasBody.d.ts b/types/lib/OffcanvasBody.d.ts
new file mode 100644
index 000000000..788211de7
--- /dev/null
+++ b/types/lib/OffcanvasBody.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface OffcanvasBodyProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class OffcanvasBody extends React.Component {}
+export default OffcanvasBody;
diff --git a/types/lib/OffcanvasHeader.d.ts b/types/lib/OffcanvasHeader.d.ts
new file mode 100644
index 000000000..040def8bb
--- /dev/null
+++ b/types/lib/OffcanvasHeader.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface OffcanvasHeaderProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ wrapTag?: React.ElementType;
+ toggle?: React.MouseEventHandler;
+}
+
+declare class OffcanvasHeader extends React.Component {}
+export default OffcanvasHeader;
diff --git a/types/lib/Pagination.d.ts b/types/lib/Pagination.d.ts
new file mode 100644
index 000000000..ba537ea8a
--- /dev/null
+++ b/types/lib/Pagination.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PaginationProps extends React.HTMLAttributes {
+ [key: string]: any;
+ listClassName?: string;
+ cssModule?: CSSModule;
+ size?: string;
+ tag?: React.ElementType;
+ listTag?: React.ElementType;
+ 'aria-label'?: string;
+}
+
+declare class Pagination extends React.Component {}
+export default Pagination;
diff --git a/types/lib/PaginationItem.d.ts b/types/lib/PaginationItem.d.ts
new file mode 100644
index 000000000..4cc5fbadd
--- /dev/null
+++ b/types/lib/PaginationItem.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PaginationItemProps extends React.HTMLAttributes {
+ [key: string]: any;
+ cssModule?: CSSModule;
+ active?: boolean;
+ disabled?: boolean;
+ tag?: React.ElementType;
+}
+
+declare class PaginationItem extends React.Component {}
+export default PaginationItem;
diff --git a/types/lib/PaginationLink.d.ts b/types/lib/PaginationLink.d.ts
new file mode 100644
index 000000000..68120f586
--- /dev/null
+++ b/types/lib/PaginationLink.d.ts
@@ -0,0 +1,17 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PaginationLinkProps
+ extends React.AnchorHTMLAttributes {
+ [key: string]: any;
+ 'aria-label'?: string;
+ cssModule?: CSSModule;
+ next?: boolean;
+ previous?: boolean;
+ first?: boolean;
+ last?: boolean;
+ tag?: React.ElementType;
+}
+
+declare class PaginationLink extends React.Component {}
+export default PaginationLink;
diff --git a/types/lib/Placeholder.d.ts b/types/lib/Placeholder.d.ts
new file mode 100644
index 000000000..a8bfbcb7e
--- /dev/null
+++ b/types/lib/Placeholder.d.ts
@@ -0,0 +1,17 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PlaceholderProps extends React.HTMLAttributes {
+ [key: string]: any;
+ color?: string;
+ tag?: React.ElementType;
+ animation?: string;
+ className?: string;
+ cssModule?: CSSModule;
+ size?: string;
+ widths?: string[];
+ innerRef?: React.Ref;
+}
+
+declare class Placeholder extends React.Component {}
+export default Placeholder;
\ No newline at end of file
diff --git a/types/lib/PlaceholderButton.d.ts b/types/lib/PlaceholderButton.d.ts
new file mode 100644
index 000000000..a6e379dd7
--- /dev/null
+++ b/types/lib/PlaceholderButton.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PlaceholderButtonProps extends React.HTMLAttributes {
+ [key: string]: any;
+ size?: string;
+ color?: string;
+ outline?: boolean;
+ cssModule?: CSSModule;
+ tag?: React.ElementType;
+}
+
+declare class PlaceholderButton extends React.Component {}
+export default PlaceholderButton;
\ No newline at end of file
diff --git a/types/lib/Popover.d.ts b/types/lib/Popover.d.ts
new file mode 100644
index 000000000..dadd8c5da
--- /dev/null
+++ b/types/lib/Popover.d.ts
@@ -0,0 +1,34 @@
+import * as React from 'react';
+import type { Modifier, Boundary, Placement } from '@popperjs/core';
+import { CSSModule } from './utils';
+
+export type PopoverChildren = React.ReactNode;
+
+export interface PopoverProps extends React.HTMLAttributes {
+ [key: string]: any;
+ isOpen?: boolean;
+ toggle?: React.MouseEventHandler | (() => void);
+ target: string | HTMLElement | React.RefObject;
+ container?: string | HTMLElement | React.RefObject;
+ boundariesElement?: Boundary | Element;
+ placement?: Placement;
+ popperClassName?: string;
+ innerClassName?: string;
+ disabled?: boolean;
+ hideArrow?: boolean;
+ placementPrefix?: string;
+ delay?: number | { show: number; hide: number };
+ modifiers?: Modifier[];
+ strategy?: string;
+ cssModule?: CSSModule;
+ fade?: boolean;
+ flip?: boolean;
+ children?: PopoverChildren;
+}
+
+export interface UncontrolledPopoverProps extends PopoverProps {
+ defaultOpen?: boolean;
+}
+
+declare class Popover extends React.Component {}
+export default Popover;
diff --git a/types/lib/PopoverBody.d.ts b/types/lib/PopoverBody.d.ts
new file mode 100644
index 000000000..defc672ab
--- /dev/null
+++ b/types/lib/PopoverBody.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PopoverBodyProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class PopoverBody extends React.Component {}
+export default PopoverBody;
diff --git a/types/lib/PopoverHeader.d.ts b/types/lib/PopoverHeader.d.ts
new file mode 100644
index 000000000..07c660b59
--- /dev/null
+++ b/types/lib/PopoverHeader.d.ts
@@ -0,0 +1,11 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface PopoverHeaderProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class PopoverHeader extends React.Component {}
+export default PopoverHeader;
diff --git a/types/lib/Progress.d.ts b/types/lib/Progress.d.ts
new file mode 100644
index 000000000..9a4059592
--- /dev/null
+++ b/types/lib/Progress.d.ts
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ProgressProps extends React.HTMLAttributes {
+ [key: string]: any;
+ bar?: boolean;
+ multi?: boolean;
+ tag?: string;
+ value?: string | number;
+ min?: string | number;
+ max?: string | number;
+ animated?: boolean;
+ striped?: boolean;
+ color?: string;
+ cssModule?: CSSModule;
+ barClassName?: string;
+ barStyle?: React.CSSProperties;
+ barAriaValueText?: string;
+ barAriaLabelledBy?: string;
+}
+
+declare class Progress extends React.Component {}
+export default Progress;
diff --git a/types/lib/Row.d.ts b/types/lib/Row.d.ts
new file mode 100644
index 000000000..dbf6111a4
--- /dev/null
+++ b/types/lib/Row.d.ts
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+type Omit = Pick>;
+
+export interface RowProps
+ extends Omit, 'form'> {
+ [key: string]: any;
+ cssModule?: CSSModule;
+ tag?: React.ElementType;
+ noGutters?: boolean;
+ xs?: number | string;
+ sm?: number | string;
+ md?: number | string;
+ lg?: number | string;
+ xl?: number | string;
+ xxl?: number | string;
+}
+
+declare class Row extends React.Component {}
+export default Row;
diff --git a/types/lib/Spinner.d.ts b/types/lib/Spinner.d.ts
new file mode 100644
index 000000000..5fbb001ef
--- /dev/null
+++ b/types/lib/Spinner.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface SpinnerProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ type?: string;
+ size?: any;
+ color?: string;
+ cssModule?: CSSModule;
+}
+
+declare class Spinner extends React.Component {}
+export default Spinner;
diff --git a/types/lib/TabContent.d.ts b/types/lib/TabContent.d.ts
new file mode 100644
index 000000000..b65bec3e1
--- /dev/null
+++ b/types/lib/TabContent.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface TabContentProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ activeTab?: number | string;
+ cssModule?: CSSModule;
+}
+
+declare class TabContent extends React.Component {}
+export default TabContent;
diff --git a/types/lib/TabPane.d.ts b/types/lib/TabPane.d.ts
new file mode 100644
index 000000000..a3f2201ce
--- /dev/null
+++ b/types/lib/TabPane.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface TabPaneProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ tabId?: number | string;
+}
+
+declare class TabPane extends React.Component {}
+export default TabPane;
diff --git a/types/lib/Table.d.ts b/types/lib/Table.d.ts
new file mode 100644
index 000000000..5190da1c7
--- /dev/null
+++ b/types/lib/Table.d.ts
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface TableProps
+ extends React.TableHTMLAttributes {
+ [key: string]: any;
+ cssModule?: CSSModule;
+ size?: string;
+ bordered?: boolean;
+ borderless?: boolean;
+ striped?: boolean;
+ inverse?: boolean;
+ hover?: boolean;
+ reflow?: boolean;
+ responsive?: boolean | string;
+ tag?: React.ElementType;
+ responsiveTag?: React.ElementType;
+ innerRef?: React.Ref;
+}
+
+declare class Table extends React.Component {}
+export default Table;
diff --git a/types/lib/Tag.d.ts b/types/lib/Tag.d.ts
new file mode 100644
index 000000000..62d53e135
--- /dev/null
+++ b/types/lib/Tag.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface TagProps extends React.HTMLAttributes {
+ [key: string]: any;
+ color?: string;
+ pill?: boolean;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+}
+
+declare class Tag extends React.Component {}
+export default Tag;
diff --git a/types/lib/Toast.d.ts b/types/lib/Toast.d.ts
new file mode 100644
index 000000000..da5def32a
--- /dev/null
+++ b/types/lib/Toast.d.ts
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+import { FadeProps } from './Fade';
+
+export interface ToastProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+ isOpen?: boolean;
+ fade?: boolean;
+ transition?: FadeProps;
+}
+
+declare class Toast extends React.Component {}
+export default Toast;
diff --git a/types/lib/ToastBody.d.ts b/types/lib/ToastBody.d.ts
new file mode 100644
index 000000000..6021f2e65
--- /dev/null
+++ b/types/lib/ToastBody.d.ts
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ToastBodyProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ innerRef?: React.Ref;
+}
+
+declare class ToastBody extends React.Component {}
+export default ToastBody;
diff --git a/types/lib/ToastHeader.d.ts b/types/lib/ToastHeader.d.ts
new file mode 100644
index 000000000..3fc283c82
--- /dev/null
+++ b/types/lib/ToastHeader.d.ts
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CSSModule } from './utils';
+
+export interface ToastHeaderProps extends React.HTMLAttributes {
+ [key: string]: any;
+ tag?: React.ElementType;
+ cssModule?: CSSModule;
+ wrapTag?: React.ElementType;
+ toggle?: React.MouseEventHandler;
+ icon?: string | React.ReactNode;
+ close?: React.ReactNode;
+ closeAriaLabel?: string;
+}
+
+declare class ToastHeader extends React.Component {}
+export default ToastHeader;
diff --git a/types/lib/Tooltip.d.ts b/types/lib/Tooltip.d.ts
new file mode 100644
index 000000000..ec94fc506
--- /dev/null
+++ b/types/lib/Tooltip.d.ts
@@ -0,0 +1,31 @@
+import * as React from 'react';
+import type { Modifier, Placement } from '@popperjs/core';
+import { CSSModule } from './utils';
+
+export type TooltipChildren = React.ReactNode;
+
+export interface UncontrolledTooltipProps
+ extends React.HTMLAttributes {
+ [key: string]: any;
+ target: string | HTMLElement | React.RefObject;
+ container?: string | HTMLElement | React.RefObject;
+ delay?: number | { show: number; hide: number };
+ popperClassName?: string;
+ innerClassName?: string;
+ autohide?: boolean;
+ placement?: Placement;
+ modifiers?: Modifier[];
+ strategy?: string;
+ cssModule?: CSSModule;
+ fade?: boolean;
+ flip?: boolean;
+ children?: TooltipChildren;
+}
+
+export interface TooltipProps extends UncontrolledTooltipProps {
+ toggle?: React.MouseEventHandler | (() => void);
+ isOpen?: boolean;
+}
+
+declare class Tooltip extends React.Component {}
+export default Tooltip;
diff --git a/types/lib/Uncontrolled.d.ts b/types/lib/Uncontrolled.d.ts
new file mode 100644
index 000000000..16129f290
--- /dev/null
+++ b/types/lib/Uncontrolled.d.ts
@@ -0,0 +1,41 @@
+import * as React from 'react';
+
+import { UncontrolledAccordionProps } from './Accordion';
+import { UncontrolledAlertProps } from './Alert';
+import { UncontrolledButtonDropdownProps } from './ButtonDropdown';
+import { UncontrolledDropdownProps } from './Dropdown';
+import { UncontrolledTooltipProps } from './Tooltip';
+import { UncontrolledCollapseProps } from './Collapse';
+import { UncontrolledCarouselProps } from './Carousel';
+import { UncontrolledPopoverProps } from './Popover';
+
+export class UncontrolledAccordion extends React.Component {}
+export class UncontrolledAlert extends React.Component<
+ UncontrolledAlertProps
+> {}
+export class UncontrolledButtonDropdown extends React.Component<
+ UncontrolledButtonDropdownProps
+> {}
+export class UncontrolledDropdown extends React.Component<
+ UncontrolledDropdownProps
+> {}
+export class UncontrolledTooltip extends React.Component<
+ UncontrolledTooltipProps
+> {}
+export class UncontrolledCollapse extends React.Component<
+ UncontrolledCollapseProps
+> {}
+export class UncontrolledCarousel extends React.Component<
+ UncontrolledCarouselProps
+> {}
+export class UncontrolledPopover extends React.Component<
+ UncontrolledPopoverProps
+> {}
+
+export { UncontrolledAlertProps } from './Alert';
+export { UncontrolledButtonDropdownProps } from './ButtonDropdown';
+export { UncontrolledDropdownProps } from './Dropdown';
+export { UncontrolledTooltipProps } from './Tooltip';
+export { UncontrolledCollapseProps } from './Collapse';
+export { UncontrolledCarouselProps } from './Carousel';
+export { UncontrolledPopoverProps } from './Popover';
diff --git a/types/lib/utils.d.ts b/types/lib/utils.d.ts
new file mode 100644
index 000000000..85e3301be
--- /dev/null
+++ b/types/lib/utils.d.ts
@@ -0,0 +1,5 @@
+export interface CSSModule {
+ [className: string]: string;
+}
+
+export type setGlobalCssModule = (cssModule: CSSModule) => void;
diff --git a/types/reactstrap-tests.tsx b/types/reactstrap-tests.tsx
new file mode 100644
index 000000000..4461f4de3
--- /dev/null
+++ b/types/reactstrap-tests.tsx
@@ -0,0 +1,5465 @@
+import * as React from 'react';
+import {
+ Alert,
+ UncontrolledAlert,
+ Badge,
+ Breadcrumb,
+ BreadcrumbItem,
+ Button,
+ ButtonDropdown,
+ ButtonGroup,
+ ButtonToggle,
+ ButtonToolbar,
+ Dropdown,
+ DropdownItem,
+ DropdownMenu,
+ DropdownToggle,
+ Card,
+ CardBody,
+ CardColumns,
+ CardDeck,
+ CardFooter,
+ CardGroup,
+ CardHeader,
+ CardImg,
+ CardImgOverlay,
+ CardLink,
+ CardSubtitle,
+ CardText,
+ CardTitle,
+ Carousel,
+ CarouselCaption,
+ CarouselControl,
+ CarouselItem,
+ CarouselIndicators,
+ Row,
+ Col,
+ Container,
+ Collapse,
+ Fade,
+ Form,
+ FormFeedback,
+ FormGroup,
+ FormText,
+ Input,
+ InputGroup,
+ InputGroupText,
+ Pagination,
+ Label,
+ ListGroup,
+ ListGroupItem,
+ ListGroupItemHeading,
+ ListGroupItemText,
+ List,
+ ListInlineItem,
+ ModalFooter,
+ Modal,
+ ModalBody,
+ ModalHeader,
+ Media,
+ Nav,
+ Navbar,
+ NavbarBrand,
+ NavbarText,
+ NavbarToggler,
+ NavItem,
+ NavLink,
+ PaginationItem,
+ PaginationLink,
+ Popover,
+ PopoverBody,
+ PopoverHeader,
+ Progress,
+ TabPane,
+ UncontrolledButtonDropdown,
+ UncontrolledDropdown,
+ UncontrolledTooltip,
+ UncontrolledCollapse,
+ UncontrolledCarousel,
+ TabContent,
+ Table,
+ Tag,
+ Toast,
+ ToastBody,
+ ToastHeader,
+ Tooltip,
+ Spinner,
+ UncontrolledPopover,
+ Util,
+} from 'reactstrap';
+
+// --------------- Alert
+const Examplea = (props: any) => {
+ return (
+
+
+ Well done! You successfully read this important alert
+ message.
+
+
+ Heads up! This alert needs your attention, but it's not
+ super important.
+
+
+ Warning! Better check yourself, you're not looking too
+ good.
+
+
+ Oh snap! Change a few things up and try submitting
+ again.
+
+
+ );
+};
+
+class AlertExample extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.state = {
+ visible: true,
+ };
+ }
+
+ onDismiss = () => {
+ this.setState({ visible: false });
+ };
+
+ render() {
+ return (
+
+ I am an alert and I can be dismissed!
+
+ );
+ }
+}
+
+function AlertExample1() {
+ return (
+
+ I am an alert and I can be dismissed!
+
+ );
+}
+
+// --------------- Badge
+class Example2 extends React.Component {
+ render() {
+ return (
+
+
+ Heading New
+
+
+ Heading New
+
+
+ Heading New
+
+
+ Heading New
+
+
+ Heading New
+
+
+ Heading New
+
+
+ );
+ }
+}
+
+export class Example3 extends React.Component {
+ render() {
+ return (
+
+ default
+ primary
+ success
+ info
+ warning
+ danger
+
+ );
+ }
+}
+
+class Example4 extends React.Component {
+ render() {
+ return (
+
+
+ default
+ {' '}
+
+ primary
+ {' '}
+
+ success
+ {' '}
+
+ info
+ {' '}
+
+ warning
+ {' '}
+
+ danger
+
+
+ );
+ }
+}
+
+// ------------- Breadcrumbs
+const Example5 = (props: any) => {
+ return (
+
+ );
+};
+
+const Example6 = (props: any) => {
+ return (
+
+
+
+ Home
+
+
+ Library
+
+
+ Data
+
+
+ Bootstrap
+
+
+
+ );
+};
+
+// ------------- Buttons
+class Example7 extends React.Component {
+ render() {
+ return (
+
+ primary {' '}
+ secondary {' '}
+ success {' '}
+ info {' '}
+ warning {' '}
+ danger {' '}
+ link
+
+ );
+ }
+}
+
+class Example8 extends React.Component {
+ render() {
+ return (
+
+
+ primary
+ {' '}
+
+ secondary
+ {' '}
+
+ success
+ {' '}
+
+ info
+ {' '}
+
+ warning
+ {' '}
+
+ danger
+
+
+ );
+ }
+}
+
+const Example9 = (
+
+
+ Large Button
+ {' '}
+
+ Large Button
+
+
+);
+
+const Example10 = (
+
+
+ Small Button
+ {' '}
+
+ Small Button
+
+
+);
+
+const Example11 = (
+
+
+ Block level button
+
+
+ Block level button
+
+
+);
+
+const Example12 = (
+
+
+ Primary link
+ {' '}
+
+ Link
+
+
+);
+
+const Example13 = (
+
+
+ Primary button
+ {' '}
+
+ Button
+
+
+);
+
+interface CustomButtonProps extends ButtonProps {
+ customProp: string;
+}
+// NOTE: not adding the <{}> causes the generic parameter to be a spread type of CustomButtonProps,
+// for some reason this causes children to be inferred as being 'ReactNode & {}' which makes the spread
+// invalid. TS3.2 bug?
+const CustomButton: React.SFC = (props) => (
+
+);
+
+class Example14 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.state = { cSelected: [] };
+
+ this.onRadioBtnClick = this.onRadioBtnClick.bind(this);
+ this.onCheckboxBtnClick = this.onCheckboxBtnClick.bind(this);
+ }
+
+ onRadioBtnClick(rSelected: number) {
+ this.setState({ rSelected });
+ }
+
+ onCheckboxBtnClick(selected: number) {
+ const index = this.state.cSelected.indexOf(selected);
+ if (index < 0) {
+ this.state.cSelected.push(selected);
+ } else {
+ this.state.cSelected.splice(index, 1);
+ }
+ this.setState({ cSelected: [...this.state.cSelected] });
+ }
+
+ render() {
+ return (
+
+
Radio Buttons
+
+ this.onRadioBtnClick(1)}
+ active={this.state.rSelected === 1}
+ >
+ One
+
+ this.onRadioBtnClick(2)}
+ active={this.state.rSelected === 2}
+ >
+ Two
+
+ this.onRadioBtnClick(3)}
+ active={this.state.rSelected === 3}
+ >
+ Three
+
+
+
Selected: {this.state.rSelected}
+
+
Checkbox Buttons
+
+ this.onCheckboxBtnClick(1)}
+ active={this.state.cSelected.includes(1)}
+ >
+ One
+
+ this.onCheckboxBtnClick(2)}
+ active={this.state.cSelected.includes(2)}
+ >
+ Two
+
+ this.onCheckboxBtnClick(3)}
+ active={this.state.cSelected.includes(3)}
+ >
+ Three
+
+
+
Selected: {JSON.stringify(this.state.cSelected)}
+
+ );
+ }
+}
+
+const ExampleButtonClose = () => (
+
+
+
+
+
+
+
+ Default close icon
+
+
+
+
+
+
+ –
+
+
+ Custom content and aria-label
+
+
+
+
+);
+
+class ExampleButtonToggle extends React.Component {
+ render() {
+ return (
+
+ primary {' '}
+ secondary {' '}
+ success {' '}
+ info {' '}
+ warning {' '}
+ danger {' '}
+
+ );
+ }
+}
+
+// ------------- Button Dropdown
+class Example15 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ dropdownOpen: false,
+ };
+ }
+
+ toggle() {
+ this.setState({
+ dropdownOpen: !this.state.dropdownOpen,
+ });
+ }
+
+ render() {
+ return (
+
+ Button Dropdown
+
+ Header
+ Action
+ Another Action
+
+ ) => {
+ // something happens here
+ }}
+ >
+ Another Action
+
+
+
+ );
+ }
+}
+
+const Example16 = (
+ true}>
+
+ Text
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+);
+
+const Example17 = (props: any) => (
+ true}>
+
+ {props.text}
+
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+);
+
+const Example18 = (
+
+ true}>
+
+ Large Button
+
+
+ Another Action
+ Another Action
+
+
+
+ true}>
+
+ Small Button
+
+
+ Another Action
+ Another Action
+
+
+
+);
+
+const Example19 = (
+ true} direction="up">
+
+ Dropup
+
+
+ Another Action
+ Another Action
+
+
+);
+
+// --------------- ButtonGroup
+class Example20 extends React.Component {
+ render() {
+ return (
+
+ Left Middle Right
+
+ );
+ }
+}
+
+class Example21 extends React.Component {
+ render() {
+ return (
+
+
+ 1
+ 2
+ 3
+ 4
+
+
+ 5
+ 6
+ 7
+
+
+ 8
+
+
+ );
+ }
+}
+
+const Example22 = (props: any) => (
+
+
+ Left
+ Middle
+ Right
+
+
+
+ Left
+ Middle
+ Right
+
+
+
+ Left
+ Middle
+ Right
+
+
+);
+
+const Example23 = (props: any) => (
+
+ 1
+ 2
+ true}>
+ Dropdown
+
+ Dropdown Link
+ Dropdown Link
+
+
+
+);
+
+const Example24 = (props: any) => (
+
+ 1
+ 2
+ true}>
+ Dropdown
+
+ Dropdown Link
+ Dropdown Link
+
+
+
+);
+
+// ------------------ Cards
+const Example25 = (props: any) => {
+ return (
+
+
+
+
+ Card title
+ Card subtitle
+
+ Some quick example text to build on the card title and make up the
+ bulk of the card's content.
+
+ Button
+
+
+
+ );
+};
+
+const Example26 = (props: any) => {
+ return (
+
+
+
+ Card title
+ Card subtitle
+
+
+
+
+ Some quick example text to build on the card title and make up the
+ bulk of the card's content.
+
+ Card Link
+ Another Link
+
+
+
+ );
+};
+
+const Example27 = (props: any) => {
+ return (
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+
+
+ );
+};
+
+const Example28 = (props: any) => {
+ return (
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Go somewhere
+
+
+ );
+};
+
+const Example29 = (props: any) => {
+ return (
+
+
+ Header
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+ Footer
+
+
+
+ Featured
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional
+ content.
+
+ Go somewhere
+
+ Footer
+
+
+ );
+};
+
+const Example30 = (props: any) => {
+ return (
+
+
+
+
+ Card Title
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+
+ Last updated 3 mins ago
+
+
+
+
+
+ Card Title
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+
+ Last updated 3 mins ago
+
+
+
+
+
+ );
+};
+
+const Example31 = (props: any) => {
+ return (
+
+
+
+
+ Card Title
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+
+ Last updated 3 mins ago
+
+
+
+
+ );
+};
+
+const Example32 = (props: any) => {
+ return (
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ );
+};
+
+const Example33 = (props: any) => {
+ return (
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ );
+};
+
+const Example34 = (props: any) => {
+ return (
+
+
+
+
+ Card title
+ Card subtitle
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+ Button
+
+
+
+
+
+ Card title
+ Card subtitle
+
+ This card has supporting text below as a natural lead-in to
+ additional content.
+
+ Button
+
+
+
+
+
+ Card title
+ Card subtitle
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This card has even longer content than the
+ first to show that equal height action.
+
+ Button
+
+
+
+ );
+};
+
+const Example35 = (props: any) => {
+ return (
+
+
+
+
+ Card title
+ Card subtitle
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+ Button
+
+
+
+
+
+ Card title
+ Card subtitle
+
+ This card has supporting text below as a natural lead-in to
+ additional content.
+
+ Button
+
+
+
+
+
+ Card title
+ Card subtitle
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This card has even longer content than the
+ first to show that equal height action.
+
+ Button
+
+
+
+ );
+};
+
+const Example36 = (props: any) => {
+ return (
+
+
+
+
+ Card title
+ Card subtitle
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This content is a little bit longer.
+
+ Button
+
+
+
+
+
+
+
+ Card title
+ Card subtitle
+
+ This card has supporting text below as a natural lead-in to
+ additional content.
+
+ Button
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+
+
+ Card title
+ Card subtitle
+
+ This is a wider card with supporting text below as a natural lead-in
+ to additional content. This card has even longer content than the
+ first to show that equal height action.
+
+ Button
+
+
+
+ Special Title Treatment
+
+ With supporting text below as a natural lead-in to additional content.
+
+ Button
+
+
+ );
+};
+
+// ------------------ Collapse
+
+class Example37 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+ this.toggle = this.toggle.bind(this);
+ this.state = { collapse: false };
+ }
+
+ toggle() {
+ this.setState({ collapse: !this.state.collapse });
+ }
+
+ render() {
+ return (
+
+
+ Toggle
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life
+ accusamus terry richardson ad squid. Nihil anim keffiyeh
+ helvetica, craft beer labore wes anderson cred nesciunt sapiente
+ ea proident.
+
+
+
+
+ );
+ }
+}
+
+class Example38 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+ this.onOpened = this.onOpened.bind(this);
+ this.onClosed = this.onClosed.bind(this);
+ this.toggle = this.toggle.bind(this);
+ this.state = { collapse: false, status: 'Closed' };
+ }
+
+ onOpened() {
+ this.setState({ ...this.state, status: 'Opened' });
+ }
+
+ onClosed() {
+ this.setState({ ...this.state, status: 'Closed' });
+ }
+
+ toggle() {
+ const status = !this.state.collapse ? 'Opening...' : 'Closing...';
+ this.setState({ collapse: !this.state.collapse, status });
+ }
+
+ render() {
+ return (
+
+
+ Toggle
+
+
Current state: {this.state.status}
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life
+ accusamus terry richardson ad squid. Nihil anim keffiyeh
+ helvetica, craft beer labore wes anderson cred nesciunt sapiente
+ ea proident.
+
+
+
+
+ );
+ }
+}
+
+// ------- Dropdown
+
+class Example39 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ dropdownOpen: false,
+ };
+ }
+
+ toggle() {
+ this.setState({
+ dropdownOpen: !this.state.dropdownOpen,
+ });
+ }
+
+ render() {
+ return (
+
+ Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+ }
+}
+
+const Example40 = (props: any) => (
+ false}>
+ Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+);
+
+const Example41 = (props: any) => Header ;
+
+const Example42 = (props: any) => (
+
+
+ Action
+ Action
+ true}>
+ asdfasd
+ sadfas
+
+
+ true}>
+ sadfasd
+ sadf
+
+
+ true}>
+ asdf
+ sasdfsdf
+
+
+);
+
+class Example43 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ dropdownOpen: false,
+ };
+ }
+
+ toggle() {
+ this.setState({
+ dropdownOpen: !this.state.dropdownOpen,
+ });
+ }
+
+ render() {
+ return (
+
+
+ Custom Dropdown Content
+
+
+ Custom dropdown item
+ Custom dropdown item
+ Custom dropdown item
+ Custom dropdown item
+
+
+ );
+ }
+}
+
+function Example44() {
+ return (
+
+ Dropdown
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+ );
+}
+
+// ------------------ Form
+class Example45 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+class Example46 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+class Example47 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+class Example48 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+class Example49 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+class Example50 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+class Example51 extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+const Example52 = (props: any) => {
+ return (
+
+
+ @
+
+
+
+
+
+
+
+
+
+
+
+
+ @example.com
+
+
+
+ $
+ $
+
+ $
+ $
+
+
+
+ $
+
+ .00
+
+
+ );
+};
+
+const Example53 = (props: any) => {
+ return (
+
+
+ To the Left!
+
+
+
+
+
+ To the Right!
+
+
+
+ To the Left!
+
+ To the Right!
+
+
+ );
+};
+
+const Example54 = (props: any) => {
+ return (
+
+
+ @lg
+
+
+
+
+ @normal
+
+
+
+
+ @sm
+
+
+
+ );
+};
+
+const Example55 = (props: any) => {
+ return (
+
+
+ I'm a button
+
+
+
+
+
+
+
+
+
+ I'm a button
+
+
+ );
+};
+
+const Example56 = (props: any) => {
+ return (
+
+
+ @lg
+
+
+
+
+ @normal
+
+
+
+
+ @sm
+
+
+
+ );
+};
+
+const Example57 = (props: any) => {
+ return (
+
+
+ I'm a button
+
+
+
+
+
+
+
+
+
+ I'm a button
+
+
+ );
+};
+
+const Example58 = (props: any) => {
+ return (
+
+
+ To the Left!
+
+
+
+
+
+
+ To the Right!
+
+
+
+
+
+ To the Left!
+
+
+
+ To the Right!
+
+
+
+ );
+};
+
+class Example61 extends React.Component {
+ render() {
+ return (
+
+
+ .col
+
+
+ .col
+ .col
+ .col
+ .col
+
+
+ .col-3
+ .col-auto - variable width content
+ .col-3
+
+
+ .col-6
+ .col-6
+
+
+
+ .col-6 .col-sm-4
+
+
+ .col-6 .col-sm-4
+
+ .col .col-sm-4
+
+
+ .col .col-sm-6 .col-sm-offset-2
+
+
+
+ .col .col-sm-12 .col-md-6 .col-md-offset-3
+
+
+
+
+ .col .col-sm .col-sm-offset-1
+
+
+ .col .col-sm .col-sm-offset-1
+
+
+
+ );
+ }
+}
+
+const ExampleResponsiveContainer = (props: any) => {
+ return (
+ <>
+ .container
+
+ .container-sm
+
+
+ .container-md
+
+
+ .container-lg
+
+
+ .container-xl
+
+
+ .container-xxl
+
+
+ .container-fluid
+
+ >
+ );
+};
+
+const ExampleRowColumns = (props: any) => {
+ return (
+
+
+ Column
+ Column
+ Column
+ Column
+
+
+ Column
+ Column
+ Column
+ Column
+
+
+ Column
+ Column
+ Column
+ Column
+
+
+ Column
+ Column
+ Column
+ Column
+
+
+ Column
+ Column
+ Column
+ Column
+
+
+ );
+};
+
+class Example62 extends React.Component {
+ render() {
+ return (
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+ );
+ }
+}
+
+class Example63 extends React.Component {
+ render() {
+ return (
+
+
+ Cras justo odio 14
+
+
+ Dapibus ac facilisis in 2
+
+
+ Morbi leo risus 1
+
+
+ );
+ }
+}
+
+class Example64 extends React.Component {
+ render() {
+ return (
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+ );
+ }
+}
+
+class Example65 extends React.Component {
+ render() {
+ return (
+
+
Anchors
+
+ Be sure to{' '}
+
+ not use the standard .btn classes here
+
+ .
+
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+
Buttons
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+ );
+ }
+}
+
+class Example66 extends React.Component {
+ render() {
+ return (
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+
+ );
+ }
+}
+
+class Example67 extends React.Component {
+ render() {
+ return (
+
+
+ List group item heading
+
+ Donec id elit non mi porta gravida at eget metus. Maecenas sed diam
+ eget risus varius blandit.
+
+
+
+ List group item heading
+
+ Donec id elit non mi porta gravida at eget metus. Maecenas sed diam
+ eget risus varius blandit.
+
+
+
+ List group item heading
+
+ Donec id elit non mi porta gravida at eget metus. Maecenas sed diam
+ eget risus varius blandit.
+
+
+
+ );
+ }
+}
+
+const ExampleListGroupFlush = (props: any) => {
+ return (
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+ );
+};
+
+const ExampleListGroupHorizontal = (props: any) => {
+ return (
+
+
+ The horizontal prop can be a Boolean or a string specifying
+ one of Bootstrap's breakpoints
+
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+ This list group is horizontal at the lg breakpoint and up.
+
+
+
+ Cras justo odio
+
+
+ Dapibus ac facilisis in
+
+
+ Morbi leo risus
+
+
+ Porta ac consectetur ac
+
+
+ Vestibulum at eros
+
+
+
+ Note that horizontal list groups cannot be combined with flush list
+ groups. If flush is true then{' '}
+ horizontal has no effect.
+
+
+ );
+};
+
+// ------------- Media
+const Example68 = () => {
+ return (
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque
+ ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at,
+ tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
+ fringilla. Donec lacinia congue felis in faucibus.
+
+
+ );
+};
+
+const Example69 = () => {
+ return (
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque
+ ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at,
+ tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
+ fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum
+ in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac
+ nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+ );
+};
+
+const Example70 = () => {
+ return (
+
+
+
+
+
+
+ Top aligned media
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+
+ Middle aligned media
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+
+ Bottom aligned media
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+ );
+};
+
+const Example71 = () => {
+ return (
+
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum
+ in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac
+ nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio,
+ vestibulum in vulputate at, tempus viverra turpis. Fusce
+ condimentum nunc ac nisi vulputate fringilla. Donec lacinia
+ congue felis in faucibus.
+
+
+
+
+
+
+
+
+
+ Nested media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum
+ in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac
+ nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+ Media heading
+ Cras sit amet nibh libero, in gravida nulla. Nulla vel metus
+ scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in
+ vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi
+ vulputate fringilla. Donec lacinia congue felis in faucibus.
+
+
+
+
+
+
+ );
+};
+
+// --------------- Modal
+class ModalExample72 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+ this.state = {
+ modal: false,
+ };
+
+ this.toggle = this.toggle.bind(this);
+ }
+
+ toggle() {
+ this.setState({
+ modal: !this.state.modal,
+ });
+ }
+
+ render() {
+ return (
+
+
+ {this.props.buttonLabel}
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
+ ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+ }
+}
+
+class ModalExample73 extends React.Component {
+ state: any;
+ element: HTMLElement;
+ constructor(props: any) {
+ super(props);
+ this.state = {
+ modal: false,
+ backdrop: true,
+ };
+
+ this.toggle = this.toggle.bind(this);
+ this.changeBackdrop = this.changeBackdrop.bind(this);
+ }
+
+ toggle() {
+ this.setState({
+ modal: !this.state.modal,
+ });
+ }
+
+ changeBackdrop(e: React.ChangeEvent) {
+ let value = e.target.value;
+ if (value !== 'static') {
+ value = JSON.parse(value);
+ }
+ this.setState({ backdrop: value });
+ }
+
+ render() {
+ return (
+
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
+ ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+ }
+}
+
+class ModalExample74 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+ this.state = {
+ modal: false,
+ nestedModal: false,
+ };
+
+ this.toggle = this.toggle.bind(this);
+ this.toggleNested = this.toggleNested.bind(this);
+ }
+
+ toggle() {
+ this.setState({
+ modal: !this.state.modal,
+ });
+ }
+
+ toggleNested() {
+ this.setState({
+ nestedModal: !this.state.nestedModal,
+ });
+ }
+
+ render() {
+ return (
+
+
+ {this.props.buttonLabel}
+
+
+ Modal title
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
+ ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+ culpa qui officia deserunt mollit anim id est laborum.
+
+
+ Show Nested Model
+
+
+ Nested Modal title
+ Stuff and things
+
+
+ Done
+ {' '}
+
+ All Done
+
+
+
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+ }
+}
+
+class ModalExampleDestructuring extends React.Component {
+ constructor(props: any) {
+ super(props);
+ this.state = {
+ modal: false,
+ unmountOnClose: true,
+ };
+
+ this.toggle = this.toggle.bind(this);
+ this.changeUnmountOnClose = this.changeUnmountOnClose.bind(this);
+ }
+
+ toggle() {
+ this.setState((prevState: any) => ({
+ modal: !prevState.modal,
+ }));
+ }
+
+ changeUnmountOnClose(e: React.ChangeEvent) {
+ const value = e.target.value;
+ this.setState({ unmountOnClose: JSON.parse(value) });
+ }
+
+ render() {
+ return (
+
+
+
+ Modal title
+
+
+
+
+
+ Do Something
+ {' '}
+
+ Cancel
+
+
+
+
+ );
+ }
+}
+
+class ModalExampleFocusAfterClose extends React.Component {
+ constructor(props: any) {
+ super(props);
+ this.state = {
+ open: false,
+ focusAfterClose: true,
+ };
+ this.toggle = this.toggle.bind(this);
+ this.handleSelectChange = this.handleSelectChange.bind(this);
+ }
+
+ toggle() {
+ this.setState({ open: !this.state.open });
+ }
+
+ handleSelectChange(e: React.ChangeEvent) {
+ const value = e.target.value;
+ this.setState({ focusAfterClose: JSON.parse(value) });
+ }
+
+ render() {
+ return (
+
+
+
+
+ Observe the "Open" button. It will be focused after close when
+ "returnFocusAfterClose" is true and will not be focused if
+ "returnFocusAfterClose" is false.
+
+
+
+ Close
+
+
+
+
+ );
+ }
+}
+
+class Example75 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ isOpen: false,
+ };
+ }
+ toggle() {
+ this.setState({
+ isOpen: !this.state.isOpen,
+ });
+ }
+ render() {
+ return (
+
+
+ reactstrap
+
+
+
+
+ Components
+
+
+
+ Github
+
+
+ {}} a11y>
+
+ Options
+
+
+ Option 1
+ Option 2
+
+ Reset
+
+
+
+ Simple Text
+
+
+
+ );
+ }
+}
+
+class Example76 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggleNavbar = this.toggleNavbar.bind(this);
+ this.state = {
+ collapsed: true,
+ };
+ }
+
+ toggleNavbar() {
+ this.setState({
+ collapsed: !this.state.collapsed,
+ });
+ }
+ render() {
+ return (
+
+
+
+ reactstrap
+
+
+
+
+
+ Components
+
+
+
+ Github
+
+
+
+
+
+
+ );
+ }
+}
+
+class Example77 extends React.Component {
+ render() {
+ return (
+
+
List Based
+
+
+ Link
+
+
+ Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+
+
Link Based
+
+ Link Link {' '}
+ Another Link {' '}
+
+ Disabled Link
+
+
+
+ );
+ }
+}
+
+class Example78 extends React.Component {
+ render() {
+ return (
+
+
List Based
+
+
+ Link
+
+
+ Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+
+
Link based
+
+ Link Link {' '}
+ Another Link {' '}
+
+ Disabled Link
+
+
+
+ );
+ }
+}
+
+class Example79 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ dropdownOpen: false,
+ };
+ }
+
+ toggle() {
+ this.setState({
+ dropdownOpen: !this.state.dropdownOpen,
+ });
+ }
+
+ render() {
+ return (
+
+
+
+
+ Link
+
+
+
+
+ Dropdown
+
+
+ Header
+ Action
+ Another Action
+
+ Another Action
+
+
+
+ Link
+
+
+ Another Link
+
+
+
+ Disabled Link
+
+
+
+
+ );
+ }
+}
+
+class Example80 extends React.Component {
+ state: any;
+ constructor(props: any) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ dropdownOpen: false,
+ };
+ }
+
+ toggle() {
+ this.setState({
+ dropdownOpen: !this.state.dropdownOpen,
+ });
+ }
+
+ render() {
+ return (
+
+
+
+
+ Link
+
+
+
+
+ Dropdown
+
+
+